/* ============================================================
   Conquizzone — Stile principale
   Palette: verde scuro / smeraldo / oro / rosso
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  /* Fase 1b: i token legacy sono ALIAS del kit "Sala di Guerra" (kit.css) →
     retint globale delle superfici non ancora convertite al kit. La fonte dei
     valori è kit.css (--k-*); i fallback inline coprono un eventuale kit.css
     non ancora in cache (client vecchi a metà aggiornamento). */
  --bg:          var(--k-bg, #16110C);
  --bg-card:     var(--k-surface, #1E1710);
  --bg-modal:    var(--k-surface-2, #241C13);
  --bordo:       var(--k-border, rgba(201,162,39,.30));
  --testo:       var(--k-ink, #EFE6D2);
  --testo-2:     var(--k-ink-muted, #B3A283);
  --primario:    var(--k-gold, #C9A227);
  --primario-hv: var(--k-gold-scuro, #A9891D);
  --oro:         var(--k-gold, #C9A227);
  --verde:       var(--k-green, #5F8A54);
  --rosso:       var(--k-wax-bright, #C24437);
  --raggio:      12px;
  --ombra:       0 8px 32px rgba(0,0,0,.6);
  --font:        'Segoe UI', system-ui, -apple-system, sans-serif;
}

html, body {
  width: 100%; height: 100%;
  overflow: hidden;
  background: var(--bg);
  color: var(--testo);
  font-family: var(--font);
  -webkit-tap-highlight-color: transparent;
  touch-action: none;
}

/* 🔠 F8 — prototipo caratteri grandi (toggle in Impostazioni → Account,
   classe messa PRIMA del paint dallo script inline in <head>): scala i rem
   del gioco; i font-size in px di kit.css restano fissi (prototipo GO/NO-GO). */
html.font-grandi { font-size: 115%; } /* F8.b: +1 tacca (richiesta proprietario); i testi CANVAS scalano x1.35 via mappa._fontScala */

/* ─── Schermate ─────────────────────────────────────────────── */
.schermata {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; pointer-events: none;
  transition: opacity .3s ease;
  z-index: 10;
}
.schermata.attiva {
  opacity: 1; pointer-events: auto;
}
#schermata-gioco {
  flex-direction: column;
  align-items: stretch;
  width: 100%;
  height: 100%; /* Safari: flex: 1 dei figli richiede altezza esplicita */
  background: var(--bg);
}
/* iOS: niente dissolvenza sulla schermata di gioco. Il fade opacity 0→1
   intrappola il layer del canvas in WebKit e la mappa resta nera (dati e tap
   ok, ma non viene dipinta). Vedi MappaMondo.forzaRipitturaIOS(). */
html.ios #schermata-gioco { transition: none; }

/* ─── Caricamento ───────────────────────────────────────────── */
#schermata-caricamento {
  flex-direction: column; gap: 24px;
  background: var(--bg);
  z-index: 100;
}
.logo-caricamento {
  display: flex; flex-direction: column; align-items: center; gap: 12px;
}
.logo-caricamento img {
  max-width: 340px; width: 85vw; height: auto;
  filter: drop-shadow(0 4px 24px rgba(0,0,0,.6));
  animation: logo-breathe 3s ease-in-out infinite;
}
@keyframes logo-breathe {
  0%, 100% { transform: scale(1); filter: drop-shadow(0 4px 24px rgba(0,0,0,.6)); }
  50% { transform: scale(1.02); filter: drop-shadow(0 6px 32px rgba(212,169,64,.25)); }
}
.loading-bar-container {
  width: min(280px, 70vw); height: 4px;
  background: rgba(255,255,255,.08); border-radius: 2px;
  overflow: hidden; margin-top: 8px;
}
.loading-bar {
  width: 0%; height: 100%;
  background: linear-gradient(90deg, var(--oro), #e8c547);
  border-radius: 2px;
  transition: width .8s ease-out;
}
.testo-caricamento {
  color: var(--testo-2); font-size: .88rem;
  font-style: italic; opacity: 1;
  transition: opacity .2s ease;
  min-height: 1.3em; text-align: center;
}

/* ─── Registrazione ─────────────────────────────────────────── */
.card-registrazione {
  background: var(--bg-card);
  border: 1px solid var(--bordo);
  border-radius: var(--raggio);
  padding: 32px 24px;
  max-width: 380px; width: 92%;
  box-shadow: var(--ombra);
  display: flex; flex-direction: column; gap: 16px;
  align-items: center; text-align: center;
}
.logo-locale-grande {
  width: 80px; height: 80px;
  border-radius: 50%;
  background: var(--bg-modal);
  border: 3px solid var(--bordo);
  display: flex; align-items: center; justify-content: center;
  font-size: 2rem;
  overflow: hidden;
}
.logo-locale-grande img { width: 100%; height: 100%; object-fit: cover; }
.card-registrazione h2 { font-size: 1.5rem; }
.sottotitolo { color: var(--testo-2); font-size: .9rem; }
.istruzione   { color: var(--testo-2); font-size: .9rem; }
.input-username {
  width: 100%;
  background: var(--bg-modal);
  border: 1px solid var(--bordo);
  border-radius: 8px;
  color: var(--testo);
  font-size: 1rem;
  padding: 12px 16px;
  outline: none;
  transition: border-color .2s;
}
.input-username:focus { border-color: var(--primario); }
.errore-reg { color: var(--rosso); font-size: .85rem; min-height: 20px; }

/* ─── Bottoni ───────────────────────────────────────────────── */
/* Primario GLOBALE = oro Sala di Guerra (Fase 3): Cinzel, maiuscolo, rilievo 3D */
.btn-primario {
  width: 100%;
  background: linear-gradient(#D4AC2E, #BE9720);
  color: #241A07;
  border: none; border-radius: 13px;
  padding: 14px;
  font-family: var(--k-font-display, Georgia, serif);
  font-size: .95rem; font-weight: 800;
  letter-spacing: 1.2px; text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 3px 0 #8F6F14;
  transition: filter .2s, transform .1s;
  -webkit-tap-highlight-color: transparent;
}
/* il primario ospita icona + testo + prezzo in fila, come il suo fratello quieto */
.btn-primario { display: flex; align-items: center; justify-content: center; gap: 9px; }
.btn-primario:hover  { filter: brightness(1.06); }
.btn-primario:active { transform: translateY(2px); box-shadow: 0 1px 0 #8F6F14; }
.btn-primario:disabled { background: var(--bg-card); color: var(--testo-2); box-shadow: none; cursor: not-allowed; }

/* Il fratello quieto di .btn-primario — STESSA forma, stesso font, stesso respiro,
   solo scuro invece che dorato. ⚠️ Serve perché nella scheda della cella i due
   pulsanti stanno uno sopra l'altro: prendendone uno dal kit e uno da qui si
   leggevano come due giochi diversi (segnalato dall'owner sullo screenshot). Se un
   domani nasce una terza azione, va qui — non in un terzo sistema. */
.btn-secondario {
  width: 100%;
  background: linear-gradient(180deg, rgba(201,162,39,.10), rgba(201,162,39,.04));
  color: var(--k-ink, #EFE6D2);
  border: 1px solid rgba(201,162,39,.45); border-radius: 13px;
  padding: 13px;
  font-family: var(--k-font-display, Georgia, serif);
  font-size: .95rem; font-weight: 800;
  letter-spacing: 1.2px; text-transform: uppercase;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center; gap: 9px;
  transition: filter .2s, transform .1s;
  -webkit-tap-highlight-color: transparent;
}
.btn-secondario:hover  { filter: brightness(1.12); }
.btn-secondario:active { transform: translateY(2px); }
.btn-secondario:disabled { opacity: .45; cursor: not-allowed; }

/* ⚠️⚠️ IL DISTRUTTIVO — e perché è un MODIFICATORE di .btn-secondario e non altro.
   Owner, 30 luglio: «quella del porto dovrebbe essere uguale, senza quei pulsantoni
   colorati, scrivilo come standard nei file». I due candidati alternativi erano peggio:
   · `.k-btn--pericolo` del kit ci avrebbe portato dentro una TERZA famiglia di pulsanti,
     che è esattamente ciò che il commento di .btn-secondario qui sopra vieta per iscritto
     («se un domani nasce una terza azione, va qui — non in un terzo sistema»);
   · un gradiente rosso pieno scritto inline era ciò che l'owner ha chiesto di togliere, ed
     è anche il modo in cui un porto è stato demolito «appena cliccato per sbaglio».
   I due valori NON sono nuovi: sono gli stessi che «rompi alleanza» aveva scritti a mano
   in ui.js. Portarli qui significa che la scheda ha UN rosso, definito in un posto solo. */
.btn-secondario--pericolo {
  border-color: rgba(255,90,90,.45);
  color: #ff9b9b;
  background: linear-gradient(180deg, rgba(255,90,90,.10), rgba(255,90,90,.03));
}
/* il recupero è denaro, non pericolo: la pastiglia del prezzo resta oro */
.btn-secondario--pericolo .btn-costo { background: rgba(201,162,39,.18); color: #F0D98A; }

/* ══════════════════════════════════════════════════════════════════════════════
   📐 LO STANDARD DELLA SCHEDA — sei regole, e valgono per ogni scheda-oggetto
   (la cella, e quel che le somiglia). Scritto qui su richiesta dell'owner, il
   30 luglio, dopo che la plancia del porto era diventata un secondo linguaggio.

   1. UNA SCHEDA PER OGGETTO. Quel che riguarda una cella sta nella scheda della
      cella. Un secondo pannello per lo stesso oggetto si allontana da solo: quello
      del porto ha finito per non avere né lo stemma, né la label di proprietà, né
      il comando per aumentare le difese — e nessuno se n'era accorto perché era
      un'altra schermata.
   2. UN SOLO .btn-primario per scheda, ed è la risposta a «cosa faccio qui». Nella
      scheda della cella è sempre l'azione sul territorio — conquista, colpisci,
      aumenta le difese — su tutte e quattro le strutture, senza eccezioni per tipo.
      Tutto il resto è .btn-secondario, uno per riga, in colonna.
   3. IL DISTRUTTIVO È QUIETO: .btn-secondario--pericolo (bordo e inchiostro rossi,
      fondo appena acceso) PIÙ un secondo passo — UIKit.conferma, mai un tocco solo.
   4. NESSUN PULSANTE CHE RIFIUTA. Meglio nessun comando che un comando che si apre
      per dire di no (owner, due volte). ⚠️ La regola NON è «mai un bottone spento»:
      è «mai un bottone che, premuto, direbbe no». Le due eccezioni sono i casi in cui
      il pulsante spento È l'informazione, e sono entrambe nella scheda della cella:
        · il conto delle dodici ore («Potrai edificare tra 04:37»);
        · «Difesa al massimo», che dice perché non si può salire oltre.
      Il criterio per distinguerle: uno spento informativo dice **come stanno le cose**,
      uno spento sbagliato nasconde **un'azione che esiste altrove**. Nel dubbio, si
      toglie il bottone.
   5. I VALORI CHE CAMBIANO NEL TEMPO stanno in un blocco .k-dif (testa · barra ·
      hint), uno per soggetto: difesa, piantagione, tiro della torre. Mai una riga
      piatta etichetta→valore, che è come parlava la plancia. E la barra si mostra
      solo quando promette qualcosa che arriva davvero.
   6. PREZZO E RICOMPENSA sempre in .btn-costo, mai dentro la frase; e le ICONE sono
      i glifi disegnati della carta (via `_iconaHtml`), non emoji. Se il glifo non
      c'è si crea: `_iconaHtml` degrada alla sola scritta invece di rompersi, ma due
      segni per la stessa cosa sono §0bis dell'albo.
   ══════════════════════════════════════════════════════════════════════════════ */

/* Il prezzo di un'azione, in oro. ⚠️ Sul dorato del primario l'inchiostro è scuro,
   sul fondo scuro del secondario è oro: con un colore solo, uno dei due sparisce —
   ed è sparito davvero («20 oro» illeggibile, screenshot dell'owner). */
.btn-costo {
  display: inline-flex; align-items: center; gap: 5px;
  font-family: var(--k-font, system-ui); font-size: .8rem; font-weight: 700;
  letter-spacing: .2px; text-transform: none;
  padding: 3px 9px; border-radius: 999px;
}
.btn-primario  .btn-costo { background: rgba(36,26,7,.20); color: #241A07; }
.btn-secondario .btn-costo { background: rgba(201,162,39,.20); color: #F0D98A; }

/* Pulsanti pannello impostazioni — stile premium */
.btn-imp {
  width: 100%;
  background: linear-gradient(135deg, rgba(201,162,39,.06) 0%, rgba(255,255,255,.02) 100%);
  border: 1px solid var(--k-border-tenue, rgba(201,162,39,.2));
  border-radius: 12px;
  padding: 13px 16px;
  color: var(--k-ink, #EFE6D2);
  cursor: pointer;
  font-size: .88rem;
  font-weight: 600;
  text-align: left;
  transition: all .25s ease;
  display: flex;
  align-items: center;
  gap: 10px;
  letter-spacing: .3px;
}
.btn-imp:hover { background: linear-gradient(135deg, rgba(201,162,39,.12) 0%, rgba(201,162,39,.03) 100%); border-color: var(--k-border, rgba(201,162,39,.3)); color: var(--k-gold-bright, #E5C96B); }
.btn-imp:active { transform: scale(.98); }

/* ─── Header gioco ──────────────────────────────────────────── */
.header-gioco {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 16px;
  /* safe-area (notch/dynamic island): solo padding, il canvas non si tocca */
  padding-top: calc(10px + env(safe-area-inset-top, 0px));
  background: var(--bg-card);
  border-bottom: 1px solid var(--bordo);
  height: calc(56px + env(safe-area-inset-top, 0px));
  flex-shrink: 0; position: relative; z-index: 10;
  touch-action: auto;
}
/* flex:1 + min-width:0 → il nome del clan si accorcia (ellipsis) e le icone
   a destra NON vengono mai spinte fuori dallo schermo (nomi lunghi tipo
   "Serenissima Repubblica di Venezia") */
.header-sx { display: flex; align-items: center; gap: 10px; flex: 1 1 auto; min-width: 0; }
.mini-logo {
  width: 36px; height: 36px; border-radius: 8px;
  background: var(--bg-modal); border: 2px solid var(--bordo);
  overflow: visible; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center; font-size: 1.2rem;
}
.mini-logo img { width: 100%; height: 100%; object-fit: cover; border-radius: 6px; }
.header-info { display: flex; flex-direction: column; min-width: 0; }
.nome-locale-hdr { font-family: var(--k-font-display, Georgia, serif); font-weight: 700; font-size: 1rem; letter-spacing: .5px; line-height: 1.2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.username-hdr    { font-size: .78rem; color: var(--testo-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* niente align-items: i bottoni si stirano tutti alla stessa altezza (box uguali) */
.header-dx { display: flex; gap: 6px; flex-shrink: 0; }
/* Modalità spettatore */
.header-gioco.spettatore .header-sx { flex: 0 0 auto; min-width: 0; overflow: visible; position: relative; }
.header-gioco.spettatore .header-sx img {
  height: 90px; width: auto; max-width: none; display: block;
  position: absolute; top: -24px; left: 0;
  filter: drop-shadow(0 2px 6px rgba(0,0,0,.5));
  z-index: 5;
}
/* Spettatore: alza pulsanti zoom e replay sopra l'overlay spettatore */
.spettatore-attivo #overlay-mappa { bottom: 130px; }
.spettatore-attivo #replay-bar { bottom: 100px!important; position:fixed!important; z-index:20!important; left:50%!important; }
.btn-icona {
  background: rgba(255,255,255,.03); border: 1px solid var(--bordo);
  border-radius: 12px; padding: 6px 10px;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--k-ink-soft, var(--testo)); font-size: 1.1rem;
  cursor: pointer; transition: background .2s;
}
.btn-icona:hover { background: var(--bg-modal); }

/* ─── Contenitore mappa ─────────────────────────────────────── */
#contenitore-mappa {
  flex: 1;
  position: relative;
  overflow: hidden;
  touch-action: none;
  width: 100%;
  min-height: 0; /* fix flex shrink su Safari */
}
#mappa-canvas {
  position: absolute; top: 0; left: 0;
  cursor: grab;
  touch-action: none;
}
#mappa-canvas:active { cursor: grabbing; }
#mappa-canvas.su-cella { cursor: pointer; }
#mappa-canvas.su-cella:active { cursor: pointer; }
#mappa-canvas.su-terra-neutra { cursor: default; }
#mappa-canvas.su-terra-neutra:active { cursor: default; }

/* (Fase 2: il logo nel footer è stato ritirato — la barra azione occupa tutto) */

/* Controlli zoom */
#overlay-mappa {
  position: absolute; right: 12px; bottom: 70px;
  display: flex; flex-direction: column; gap: 6px;
  z-index: 5;
}
.btn-zoom {
  width: 40px; height: 40px;
  background: rgba(22,17,12,.82);
  border: 1px solid var(--bordo);
  border-radius: 12px;
  color: var(--k-ink-soft, var(--testo)); font-size: 1.2rem;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  box-shadow: var(--ombra);
  transition: background .2s;
}
.btn-zoom:hover { background: var(--bg-modal); }
.btn-replay-evidenziato {
  background: var(--oro) !important;
  color: #000 !important;
  font-weight: 700;
  animation: pulse-replay 2s ease-in-out infinite;
  box-shadow: 0 0 12px rgba(212,169,64,.4);
}
/* 👑 «PRO» sotto il ▶ (owner, 5 agosto: «predisponi il gate, scrivendo sotto in piccolo
   PRO»). ⚠️ È un PSEUDO-ELEMENTO in posizione assoluta, non un figlio: `#overlay-mappa`
   è una colonna flex di bottoni 40×40, e una riga di testo dentro il bottone lo
   allungherebbe spostando in su i tre comandi sopra. Così la scritta si appoggia sotto
   senza occupare spazio. ⚠️ `pointer-events: none` o mangerebbe il tocco proprio sul
   bordo del bottone, che su un 40×40 è tanto. */
#btn-replay { position: relative; overflow: visible; }
#btn-replay::after {
  content: 'PRO';
  position: absolute; left: 50%; top: 100%;
  transform: translateX(-50%);
  margin-top: 1px;
  font-size: .52rem; font-weight: 800; letter-spacing: .09em; line-height: 1;
  color: var(--oro); text-shadow: 0 1px 2px rgba(0,0,0,.85);
  pointer-events: none;
}
/* a bottone spento (già usato) la scritta segue il tono del bottone */
.btn-replay-evidenziato.usato::after { color: var(--testo-2, #a0a0a0); }
.btn-replay-evidenziato.usato {
  background: var(--bg-card) !important;
  color: var(--testo) !important;
  animation: none;
  box-shadow: var(--ombra);
}
@keyframes pulse-replay {
  0%, 100% { transform: scale(1); box-shadow: 0 0 8px rgba(212,169,64,.3); }
  50% { transform: scale(1.08); box-shadow: 0 0 16px rgba(212,169,64,.5); }
}

/* Tooltip hover cella */
.tooltip {
  position: absolute;
  background: var(--bg-card);
  border: 1px solid var(--bordo);
  border-radius: 6px;
  padding: 6px 10px;
  font-size: .8rem;
  pointer-events: none;
  z-index: 20;
  white-space: nowrap;
  box-shadow: var(--ombra);
  max-width: 200px;
  white-space: normal;
}

/* ─── Pannello basso (Fase 2): barra azione ─────────────────── */
/* RISPONDI (oro, grande) + USA ATTACCHI (scuro, filetto oro) + ruota tonda.
   Flex con gap, niente più figli in absolute. Gli stili dei bottoni sono nel
   kit (kit.css: .k-abar-*); qui solo il contenitore. */
#pannello-basso {
  min-height: 50px;
  background: var(--k-grad-abar, var(--bg-card));
  border-top: 1px solid var(--bordo);
  display: flex; align-items: stretch; gap: 10px;
  padding: 12px 14px;
  /* safe-area (barra gesture iOS/Android): solo padding in basso */
  padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
  flex-shrink: 0;
  position: relative; z-index: 10;
  flex-wrap: nowrap;
  overflow: visible;
  touch-action: auto;
}
/* Testo di stato legacy: nascosto di default (i messaggi vivono nel sottotitolo
   di RISPONDI); riappare SOLO per lo stato "clan disattivato" (via JS). */
#stato-conquista {
  display: none;
  position: absolute; bottom: 4px; left: 50%; transform: translateX(-50%);
  align-items: center; gap: 6px;
  flex-wrap: nowrap; overflow: hidden;
  max-width: calc(100vw - 40px);
}
#stato-conquista-testo { font-size: .78rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Contatore quiz dentro RISPONDI: testo puro (nessuna tap-area separata) */

/* ─── Streak chip nell'header (fiamma SVG, pill oro) ────────── */
.hdr-streak {
  display: inline-flex; align-items: center; gap: 2px;
  background: rgba(201,162,39,.10); border: 1px solid var(--bordo);
  border-radius: 999px; padding: 4px 8px;
  font-size: 1rem; font-weight: 800; color: var(--k-gold-bright, var(--oro));
  cursor: pointer; line-height: 1; transition: background .2s;
  -webkit-tap-highlight-color: rgba(201,162,39,.3); flex-shrink: 0;
}
.hdr-streak:hover { background: var(--bg-modal); }
.hdr-streak .hdr-streak-fuoco { flex: 0 0 auto; display: inline-flex; }
.hdr-streak .hdr-streak-fuoco svg { width: 15px; height: 15px; }
.hdr-streak.spenta { color: var(--testo-2); background: none; }
/* R2 — striscia a rischio: dopo le 18 senza quiz giocati la fiamma si spegne */
.hdr-streak-freeze { display: inline-flex; align-items: center; gap: 1px; margin-left: 6px; color: #7fd3ff; }
.hdr-streak-freeze .hdr-streak-ghiaccio { display: inline-flex; }
.hdr-streak-freeze .hdr-streak-ghiaccio svg { width: 14px; height: 14px; }

/* Ruota (Fase 2): tonda nella barra azione — stile nel kit (.k-abar-ruota) */
#ruota-extra-wrap { display: flex; align-items: stretch; flex: 0 0 auto; }

/* ─── Overlay spettatore ────────────────────────────────────── */
#overlay-spettatore {
  position: fixed; bottom: 0; left: 0; right: 0;
  z-index: 15;
  background: linear-gradient(135deg, rgba(15,30,21,.97), rgba(29,53,39,.97));
  border-top: 2px solid var(--bordo);
  padding: 12px 16px;
}
#overlay-spettatore-contenuto {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; max-width: 600px; margin: 0 auto;
  flex-wrap: wrap;
}
#overlay-spettatore-sx {
  display: flex; align-items: flex-start; gap: 10px; flex: 1; min-width: 0;
}
.overlay-spett-icona { font-size: 1.4rem; flex-shrink: 0; margin-top: 2px; }
#overlay-spettatore-sx strong { display: block; font-size: .88rem; color: var(--oro); }
#overlay-spettatore-sx p { font-size: .78rem; color: var(--testo-2); margin: 2px 0 0; line-height: 1.3; }
.btn-spett-reg {
  flex-shrink: 0; font-size: .82rem;
  padding: 8px 14px; white-space: nowrap;
}

/* ─── Form richiesta locale (F8: input passati a .k-input del kit; le regole
   .rl-input sono state RIMOSSE — nessun consumatore nel markup) ─────────── */
.rl-form { display: flex; flex-direction: column; gap: 8px; margin-top: .5rem; }
.rl-privacy {
  display: flex; align-items: flex-start; gap: 8px;
  font-size: .78rem; color: var(--testo-2); cursor: pointer; line-height: 1.4;
}
.rl-privacy input[type=checkbox] { margin-top: 2px; flex-shrink: 0; }

/* ─── Modal ─────────────────────────────────────────────────── */
/* ══ 🪟 I POPUP — owner, 5 agosto: «anche i popup devono essere allineati allo stile del
   gioco».
   ⚠️ Sono la cornice CONDIVISA di tutto il gioco: qui dentro passano l'esito del quiz, la
   scheda della cella, le conferme, gli avvisi. Bastavano tre righe — il velo, la carta e
   il titolo — perche' ogni popup del gioco parlasse la stessa lingua delle schermate
   rifatte; e finche' non le si tocca, ogni schermata nuova nasce vecchia. ══ */
.modal {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: var(--k-scrim, rgba(10,7,4,.6));
  display: flex; align-items: flex-end; justify-content: center;
  z-index: 50;
  transition: opacity .25s;
}
.modal.nascosto { opacity: 0; pointer-events: none; }
.modal-contenuto {
  background: var(--k-surface-2, #241C13);
  border: 1px solid var(--k-border, rgba(201,162,39,.30));
  border-bottom: none;
  border-radius: var(--k-r-lg, 24px) var(--k-r-lg, 24px) 0 0;
  padding: 24px 20px calc(24px + env(safe-area-inset-bottom, 0px));
  width: 100%; max-width: 500px;
  max-height: 85vh; overflow-y: auto;
  position: relative;
  box-shadow: var(--k-elev-2, 0 -14px 40px rgba(0,0,0,.6));
  animation: slideUp .25s ease;
  display: flex; flex-direction: column; gap: 12px;
}
.modal-grande { max-height: 90vh; }
@keyframes slideUp {
  from { transform: translateY(60px); opacity: 0; }
  to   { transform: translateY(0);    opacity: 1; }
}
.modal-chiudi {
  position: absolute; top: 12px; right: 12px;
  width: 32px; height: 32px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  background: rgba(0,0,0,.28); border: 1px solid rgba(255,255,255,.18);
  border-radius: 50%;
  color: #fff; cursor: pointer; font-size: 1rem; line-height: 1;
  z-index: 5; transition: background .15s, transform .1s;
  -webkit-tap-highlight-color: transparent;
}
.modal-chiudi:hover { background: rgba(0,0,0,.45); }
.modal-chiudi:active { transform: scale(.9); }
/* ⚠️ Questo padding riserva lo spazio della ✕, e ha senso SOLO per il titolo in cima
   al modale — ma è un selettore discendente, quindi lo prende OGNI h3. Ha già prodotto
   tre sintomi: #compagnia-nome, #modal-cella e #risultato-conquista qui sotto. Se un
   giorno lo si stringe al primo figlio, vanno riguardati tutti i modali uno per uno. */
/* ⚠️⚠️ IL TITOLO DI OGNI POPUP era in font di SISTEMA — «Vittoria, messere!», «Nuovo
   titolo», le conferme: tutte in Segoe UI dentro un gioco scritto in Cinzel. E' la riga
   che, da sola, allinea i popup al resto (owner, 5 agosto).
   ⚠️ `padding-right:40px` fa spazio alla ✕ e SCENTRA il testo dove il titolo e' centrato:
   e' la trappola gia' curata su `#compagnia-nome`, `#modal-cella` e `#risultato-conquista`,
   e va ricordata prima di aggiungere il quarto caso. */
.modal-contenuto h3:not([class]) {
  font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  font-size: var(--k-t-2xl, 21px); letter-spacing: .5px;
  color: var(--k-ink-forte, #F2E8D2);
  padding-right: 40px; margin: 0;
}
/* ⚠️⚠️ `:not([class])` NON e' un vezzo. `.modal-contenuto h3` pesa (0,1,1) e batte una
   CLASSE come `.ruota-titolo` (0,1,0): senza questa clausola la cornice condivisa
   scavalcherebbe ogni titolo che si e' dato una veste propria — e il primo a cadere era il
   titolo della ruota, rifatto in questo stesso giro. E' la terza volta che il selettore
   discendente di questo blocco morde (vedi `#compagnia-nome` e `#risultato-conquista`
   qui sotto): la regola vale per gli h3 SENZA classe, cioe' quelli che non hanno chiesto
   niente, e chi si nomina comanda a casa propria. */
/* ⚠️⚠️ QUI C'ERA IL COMPENSO `#compagnia-nome { padding-left:40px }`, e il 5 agosto 2026
   è diventato LUI il difetto: «il nome in alto è spostato sulla destra» (owner).
   Era il gemello del `padding-right:40px` qui sopra — 40 a destra per la ✕, 40 a sinistra
   per rimettere il testo in mezzo. Ma quel titolo si è dato `class="k-titolo"`, e da
   allora `:not([class])` non lo prende più: è rimasto solo il compenso, cioè 40 px di
   scarto verso destra.
   ⚠️ LA LEZIONE, per il quarto caso: un compenso vive attaccato alla regola che compensa.
   Chi si dà una classe esce dalla cornice condivisa e deve uscire anche dal compenso —
   sennò paga due volte. Il centraggio ce l'ha già il contenitore della testata. */
/* Esito del quiz: «Vittoria, messere!» stava 20 px a sinistra del cerchio e della
   stellina. #risultato-conquista è una colonna con align-items:center, che centra il
   BORDER box; il testo è centrato nel CONTENT box, che il padding lascia tutto a
   sinistra → scarto di padding-right/2. Lì la ✕ non c'è: sta in cima al modale. */
#risultato-conquista h3 { padding-right: 0; }
.comp-geo-citta { cursor: pointer; text-decoration: underline; text-underline-offset: 2px; color: var(--oro); }

/* 🗑️ QUI C'ERANO `.comp-pos-chip` e i suoi due pezzi — le due pastiglie della posizione
   in classifica, sotto le caselle. Via il 6 agosto: la posizione è salita nelle caselle
   («togliere il pulsante orizzontale con la classifica», owner), e con la barra se n'è
   andata anche la Perpetua da questa scheda. */

/* 🎬 I COMANDI IN FONDO A UNA SCHEDA: una colonna, un'aria sola.
   ⚠️ Nasce perché i due pulsanti della scheda Signoria erano fratelli nudi dentro
   `.modal-contenuto`: fra loro cadevano il margine del blocco precedente PIÙ il proprio,
   e si leggevano come due comandi che non hanno niente a che fare l'uno con l'altro. Lo
   spazio fra i comandi lo decide il contenitore, mai il singolo bottone. */
.k-prof-azioni { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }

/* 🌍 «Provenienza: Italia» — una riga sola sotto il nome, in tutte e due le schede.
   ⚠️ `:empty` NON è più il caso «non l'ha dichiarata»: quello adesso si SCRIVE
   («Provenienza: sconosciuta», owner 6 agosto). Resta a guardia dello slot finché la
   scheda non l'ha riempito — è nell'HTML vuoto e si riempie all'apertura. */
.k-provenienza {
  margin: 3px 0 0; font-size: .78rem;
  display: flex; align-items: baseline; justify-content: center; gap: 6px;
}
.k-provenienza:empty { display: none; margin: 0; }
.k-prov-naz { color: var(--k-ink, #EFE6D2); }
/* ⚠️ «sconosciuta» è un'ASSENZA, e va letta come tale: nello stesso inchiostro pieno dei
   nomi di paese si legge come il nome di un posto che non si conosce. */
.k-prov-ignota { color: var(--testo-2); font-style: italic; }

/* 🪜 LA SCALA DELLA GERARCHIA — un gradino per riga (owner, 6 agosto).
   Le etichette hanno una colonna sua a larghezza fissa: senza, «Signore» e
   «Vassallo liv. 2» spingono i nomi a partire da due punti diversi e la scala si
   legge storta. `min-width` e non `width`, perché in inglese sono più corte. */
.ger-riga {
  display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap;
  font-size: .8rem; line-height: 1.55; color: var(--k-ink, #EFE6D2);
  padding: 3px 6px; border-radius: 7px;
}
/* ⚠️ `flex-start` e non `center`: un elenco di vassalli lungo occupa due righe, e col
   glifo centrato verticalmente il segno scivolava SOTTO la propria etichetta — sembrava
   appartenere alla riga dopo. Visto nell'anteprima, non nel codice. */
.ger-riga svg {
  width: 15px; height: 15px; flex: 0 0 auto;
  color: var(--k-gold, #C9A227); align-self: flex-start; margin-top: 2px;
}
.ger-eti { min-width: 104px; flex: 0 0 auto; color: var(--k-ink-muted, #B3A283); font-weight: 600; }
/* ⚠️ `flex: 1 1 0` e non `1 1 auto`: con base `auto` un elenco lungo di vassalli è più
   largo dello spazio rimasto, e in un contenitore `flex-wrap: wrap` l'elemento va a
   capo PRIMA che il restringimento entri in gioco — l'etichetta restava sola sulla sua
   riga e i nomi sotto, come se il blocco fosse rotto. Con base 0 il nome resta accanto
   all'etichetta e va a capo dentro la sua colonna. Visto nell'anteprima. */
.ger-chi { flex: 1 1 0; min-width: 0; }
.ger-nome { cursor: pointer; text-decoration: underline; }
/* La Signoria che stai guardando: un filo d'oro sul fianco e un fondo appena acceso.
   ⚠️ Niente `font-weight` qui — il grassetto ce l'ha già «questa Signoria» dentro, e
   raddoppiarlo la faceva sembrare un titolo invece che un gradino fra gli altri. */
.ger-qui {
  background: rgba(201, 162, 39, .10);
  box-shadow: inset 2px 0 0 var(--k-gold, #C9A227);
}
.ger-qui .ger-eti { color: var(--k-gold-bright, #E5C96B); }

/* 🤝 Le righe degli accordi, dentro il riquadro comune `.k-prof-riq`. */
.comp-acc-riga {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  font-size: .8rem; line-height: 1.5; color: var(--k-ink, #EFE6D2);
  padding: 2px 0;
}
.comp-acc-riga svg { width: 15px; height: 15px; flex: 0 0 auto; color: var(--k-gold, #C9A227); }
.comp-acc-n {
  font-family: var(--k-font-display, Cinzel, serif);
  color: var(--k-gold-bright, #E5C96B); font-weight: 700;
}
.comp-acc-nomi { display: inline-flex; flex-wrap: wrap; gap: 5px; min-width: 0; }
.comp-acc-nome {
  cursor: pointer; padding: 1px 7px; border-radius: 7px;
  background: rgba(201,162,39,.10); border: 1px solid var(--k-border-tenue, rgba(201,162,39,.18));
  color: var(--k-ink, #EFE6D2); font-size: .76rem; white-space: nowrap;
}
.comp-acc-piu { color: var(--k-ink-muted, #B3A283); font-size: .76rem; }

/* 🥜 Il bagigio in cima all'avviso «la borsa è piena». ⚠️ Era l'emoji 🥜: la valuta del
   gioco ha il SUO conio (`_cqzMonetaIcona`, il tondello con l'arachide incisa), ed è
   quello che il giocatore vede sul bottone Attacca e sotto ogni prezzo. Due segni per la
   stessa cosa è la lamentela che l'owner ha già fatto tre volte. */
.bp-segno { display: flex; justify-content: center; line-height: 1; margin-bottom: 8px; }
.bp-segno img, .bp-segno svg { width: 44px; height: 44px; }

/* ─── Modal cella ───────────────────────────────────────────── */
.cella-bandiera {
  width: 100%; border-radius: 10px;
  background: var(--bordo);
}
#modal-cella .modal-contenuto h3 { padding-right: 0; }
.proprietario-box {
  display: flex; align-items: center; gap: 10px;
  background: var(--bg-card);
  border-radius: 8px; padding: 10px 14px;
  font-weight: 600;
}
/* 🏗️ LA PASTIGLIA DELL'OPERA — cosa c'è su questa cella, in cima alla scheda.
   Vive dentro #cella-bandiera, che è tinto col colore della casata: quindi fondo
   scuro proprio, o su una casata chiara il testo sparirebbe. Il glifo è quello VERO
   della carta (via _iconaHtml), mai un'emoji — regola 6 dello standard qui sotto. */
.k-cella-opera {
  display: inline-flex; align-items: center; gap: 7px;
  margin: 0 0 2px; padding: 4px 11px 4px 8px; border-radius: 999px;
  background: rgba(20,14,6,.55);
  border: 1px solid rgba(201,162,39,.34);
  font-family: var(--k-font-display, Georgia, serif);
  font-size: .8rem; font-weight: 700; letter-spacing: .3px;
  color: var(--k-gold-bright, #E5C96B);
  text-shadow: none;                 /* il banner ne ha uno pesante: qui darebbe sporco */
  max-width: 100%;
}
.k-cella-opera img, .k-cella-opera svg { flex: 0 0 auto; }
/* Il nome dell'opera si accorcia, il glifo no: su «Piantagione di Bagigi» in una
   casata dal nome lungo era il glifo a sparire per primo. */
.k-cella-opera > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ══════════════════════════════════════════════════════════════════════════════
   🗺️ LA TESTA DELLA SCHEDA DELLA CELLA — la famiglia `.k-cella-*`.

   Owner, 5 agosto: «rivedere le schede celle in modo che sia più carina la
   suddivisione amministrativa e il proprietario, utilizzando font ecc. del gioco».
   Prima era tutta a stili in linea dentro `index.html`: nessuna classe, nessuno dei
   quattro caratteri, e sei `text-shadow` ripetuti a mano.

   ⚠️⚠️ IL PROBLEMA VERO SI VEDE SOLO SU UNA CASATA CHIARA. `#cella-bandiera` è tinto
   col colore del proprietario: sull'oro dell'owner la testa era inchiostro scuro su
   fondo giallo, e i `text-shadow` pensati per le casate scure la sporcavano soltanto.
   La cura non è un altro colore di testo: è lo SCRIM `.k-cella-corpo`, un velo scuro
   sotto il testo, che rende la testa leggibile su qualunque tinta. È la stessa scelta
   già presa per `.k-cella-opera` qui sopra, estesa al resto.

   ⚠️ NON si riusa `.k-stat-tile` (kit.css): quella famiglia porta il proprio fondo
   `--k-surface-3`, e dentro un banner tinto si legge come un buco rettangolare. Le
   tile del kit valgono dove il fondo è la superficie scura, cioè nella scheda di un
   signore, non qui.
   ══════════════════════════════════════════════════════════════════════════════ */

/* Lo scrim: un velo scuro che porta il testo su qualunque casata. */
.k-cella-corpo {
  background: rgba(18,12,5,.42);
  border-radius: 10px;
  padding: 9px 11px;
  margin-top: 8px;
}

/* La catena amministrativa: UNA riga, come un indirizzo.
   ⚠️ I quattro livelli SONO i quattro gradi (comune→Barone, provincia→Conte,
   regione→Duca, nazione→Re) e ognuno è la porta della scheda del suo titolo. Provata
   anche la versione a quattro pastiglie incoronate: le corone non si possono chiedere
   sotto i 18 px (sennò Duca e Barone sono lo stesso segno), le pastiglie andavano a
   capo, e la riga prendeva cinque volte lo spazio per dire la stessa cosa. */
.k-cella-geo {
  margin: 0; display: flex; flex-wrap: wrap; align-items: baseline;
  font-family: var(--k-font-lettura, Georgia, serif);   /* sono nomi propri: si leggono */
  font-size: .84rem; line-height: 1.45;
  color: var(--k-ink-muted, #B3A283);
  text-shadow: none;
}
.k-cella-geo-liv { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* ⚠️ Il separatore è un elemento a sé, e in un flex col `gap` il gap gli entrerebbe da
   tutti e due i lati: qui il gap è ZERO e lo spazio se lo porta dentro il separatore.
   È la stessa trappola della gerarchia («Ha giurato a : Serenissima»). */
.k-cella-geo-sep { color: var(--k-ink-muted, #B3A283); opacity: .55; padding: 0 .42em; }
/* Il comune è l'unità che si conquista, e quella che dà il primo titolo: la riga si
   legge come un indirizzo, col nome che conta per primo. */
.k-cella-geo-liv--casa { color: var(--k-ink-forte, #F2E8D2); font-size: .92rem; }
/* La sottolineatura punteggiata è la promessa che dietro c'è una scheda da aprire:
   solo dove il tocco porta davvero da qualche parte. */
.k-cella-geo-liv--clic {
  cursor: pointer;
  text-decoration: underline; text-decoration-style: dotted;
  text-decoration-color: rgba(201,162,39,.5); text-underline-offset: 3px;
}
/* Il blocco del proprietario si stacca dalla catena con una riga sottile, non con un
   secondo riquadro dentro il riquadro. */
.k-cella-prop { margin-top: 9px; padding-top: 9px; border-top: 1px solid rgba(201,162,39,.16); }

/* «Zona occupata da» / «La tua zona»: etichetta tracciata, cioè chrome → `--k-font`. */
.k-cella-eti {
  margin: 0 0 6px;
  font-family: var(--k-font, system-ui);
  font-size: .66rem; text-transform: uppercase; letter-spacing: .07em;
  color: var(--k-ink-muted, #B3A283);
  text-shadow: none;
}
/* Il nome della casata è un nome: Cinzel, come tutti i nomi del gioco. */
.k-cella-nome {
  font-family: var(--k-font-display, Georgia, serif);
  font-size: 1.06rem; font-weight: 700; line-height: 1.2;
  color: var(--k-ink-forte, #F2E8D2);
  text-shadow: none;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* La gerarchia è una frase, non un'etichetta. */
.k-cella-ger {
  margin: 3px 0 0;
  display: flex; align-items: center; gap: 5px; flex-wrap: wrap;
  font-family: var(--k-font-lettura, Georgia, serif);
  font-size: .8rem; line-height: 1.3;
  color: var(--k-ink-soft, #C6B794);
  text-shadow: none;
}
/* ⚠️ Agganciata alla CLASSE e non a `#cella-gerarchia`: le anteprime congelano i casi
   rinominando `id=` in `data-id=`, e una regola sull'id lì dentro non si applica mai
   (stessa lezione di `.k-prof-blocco:empty` qui sotto). */
.k-cella-ger:empty { display: none; margin: 0; }
/* «ZONA LIBERA» è un verdetto: display. */
.k-cella-libera {
  margin: 8px 0 0;
  font-family: var(--k-font-display, Georgia, serif);
  font-size: 1.2rem; font-weight: 800; letter-spacing: .5px; text-transform: uppercase;
  color: var(--k-ink-forte, #F2E8D2);
  text-shadow: 0 1px 4px rgba(0,0,0,.5);
}

/* 👑 I riquadri della scheda di un altro signore TACCIONO quando non hanno niente da
   dire — e tacere vuol dire anche non lasciare il proprio margine. Senza questa riga un
   principiante senza gerarchia né titoli si portava dietro un buco di quaranta pixel in
   mezzo alla scheda (visto in `anteprima_scheda_signore`, non nel codice).
   ⚠️ SI AGGANCIA A UNA CLASSE, NON AGLI `id`. L'anteprima congela ogni caso rinominando
   `id="…"` in `data-id="…"` (serve per affiancare tre copie della stessa scheda senza
   duplicare gli id): una regola scritta `#profilo-gerarchia:empty` lì dentro non si
   applica MAI, quindi la PNG mostrava il buco anche dopo averlo chiuso — e non c'era modo
   di accorgersi che il rimedio funzionava. Vale per qualunque stile di queste schede.
   ⚠️⚠️ `display: none`, NON `margin: 0`. Azzerare il margine non bastava più (e a rigore
   non bastava nemmeno prima): `.modal-contenuto` è una colonna FLEX, e il `gap` cade fra
   gli elementi anche quando sono alti zero — un blocco vuoto restava dodici pixel di aria
   che nessuno riusciva ad attribuire a niente. Fuori dalla colonna non c'è gap. */
.k-prof-blocco:empty { display: none; }

/* 📏 LO SPAZIO FRA LE SEZIONI DI UNA SCHEDA LO DÀ IL `gap` DELLA COLONNA, e basta.
   ⚠️ Il riquadro porta un proprio margine di famiglia (`.k-prof-riq`, kit.css) perché
   deve respirare anche dove sta da solo — nel pannello personale `#stats-corpo`, che ha
   `gap: 2px` per tenere stretti i comandi lì sotto. Dentro una sezione di scheda quel
   margine si SOMMA al gap invece di collassarci (colonna flex), ed era il pezzo che
   faceva leggere lealtà più staccata delle altre. Qui dentro decide il contenitore. */
.k-prof-blocco > .k-prof-riq { margin: 0; }

/* 📏 …TRANNE NEL PANNELLO DELLA PROPRIA SIGNORIA, dove il contenitore NON decide.
   `#stats-corpo` ha `gap: 2px` — stretto apposta, perché i quattro comandi in fondo
   stiano vicini — e lo spazio fra i riquadri lo dà il margine di famiglia di
   `.k-prof-riq` (7px). La gerarchia è l'unica che vive dentro un `.k-prof-blocco`
   (le serve `:empty` per tacere), quindi la riga qui sopra le toglieva quei 7px: sotto
   di lei restavano i soli 2px del gap, e la lealtà si leggeva incollata al riquadro
   sopra — l'ha vista l'owner al collaudo del 6 agosto.
   ⚠️ Il margine si rimette al BLOCCO, non al riquadro dentro: se un giorno la gerarchia
   non ha niente da dire, `:empty` fa sparire il blocco E il suo margine insieme. Rimesso
   al riquadro interno, un blocco vuoto resterebbe alto zero ma lascerebbe l'aria. */
#stats-corpo > .k-prof-blocco { margin: 0 0 7px; }

.dot-colore { width: 52px; height: 52px; border-radius: 50%; flex-shrink: 0; }
.dot-colore.dot-cliccabile { cursor: pointer; transition: transform .15s; }
.dot-colore.dot-cliccabile:hover { transform: scale(1.15); }
.porto-info {
  background: var(--bg-card);
  border-radius: 8px; padding: 10px 14px;
  font-size: .9rem; color: var(--testo-2);
}
.btn-conquista { margin-top: 8px; transition: background .2s, opacity .2s; }
/* Fase 3: ATTIVO = oro pieno kit (via il verde e il pulse); bloccato/propria = ghost */
.btn-conquista-attivo { background: linear-gradient(#D4AC2E, #BE9720) !important; color: #241A07 !important; box-shadow: 0 3px 0 #8F6F14; }
.btn-conquista-bloccato { background: none !important; border: 1px solid rgba(198,183,148,.30) !important; color: var(--testo-2) !important; box-shadow: none; opacity: .85; }
.btn-conquista-propria { background: none !important; border: 1px solid rgba(201,162,39,.35) !important; color: var(--oro) !important; box-shadow: none; opacity: .9; }
@keyframes pulse-btn { 0%,100% { box-shadow: 0 0 0 0 rgba(45,122,79,.4); } 50% { box-shadow: 0 0 0 8px rgba(45,122,79,0); } }
.testo-secondario { color: var(--testo-2); font-size: .9rem; }

/* ─── Modal domande (Fase 3, mockup 03-quiz) ────────────────── */
.domanda-block { display: flex; flex-direction: column; gap: 14px; }
.domanda-numero { font-size: .74rem; color: var(--k-gold, var(--oro)); font-weight: 800; text-transform: uppercase; letter-spacing: 2px; }
/* Domanda in serif: la voce del banditore */
/* ⚠️ Era Georgia con un commento che diceva «niente font da scaricare» — falso dal
   giorno in cui EB Garamond è entrato nel preload di index.html. Georgia stava facendo
   da controfigura al serif che spediamo già: 44 KB che nessuna regola usava. */
.domanda-testo  { font-family: var(--k-font-lettura); font-size: 1.28rem; font-weight: 500; line-height: 1.4; color: var(--k-ink-forte, var(--testo)); }
.opzioni-domanda { display: flex; flex-direction: column; gap: 8px; }
.opzione-btn {
  background: var(--k-surface-2, var(--bg-card));
  border: 1px solid rgba(201,162,39,.22);
  border-radius: 12px; padding: 13px 16px;
  color: var(--testo); font-size: .95rem;
  cursor: pointer; text-align: left;
  transition: border-color .15s, background .15s;
  display: flex; gap: 10px; align-items: center;
  touch-action: manipulation;
  -webkit-tap-highlight-color: rgba(201,162,39,.15);
}
.opzione-btn:hover  { border-color: var(--oro); background: rgba(201,162,39,.08); }
.opzione-btn.selezionata { border-color: var(--oro); background: rgba(201,162,39,.15); }
.opzione-lettera {
  width: 26px; height: 26px;
  border-radius: 50%;
  background: rgba(201,162,39,.14);
  border: 1px solid rgba(201,162,39,.35);
  color: var(--k-gold-bright, var(--oro));
  display: flex; align-items: center; justify-content: center;
  font-family: var(--k-font-display, Georgia, serif);
  font-weight: 700; font-size: .8rem; flex-shrink: 0;
}
.opzione-btn.selezionata .opzione-lettera { background: var(--oro); border-color: var(--oro); color: #241A07; }
.opzione-btn.corretta { border-color: var(--verde); background: rgba(95,138,84,.18); pointer-events: none; box-shadow: 0 0 12px rgba(95,138,84,.3); }
.opzione-btn.corretta .opzione-lettera { background: var(--verde); border-color: var(--verde); color: #F5E9D9; }
.opzione-btn.sbagliata { border-color: var(--rosso); background: rgba(194,68,55,.16); pointer-events: none; box-shadow: 0 0 12px rgba(194,68,55,.3); }
.opzione-btn.sbagliata .opzione-lettera { background: var(--rosso); border-color: var(--rosso); color: #F5E9D9; }

/* Spiegazione dopo risposta */

/* Timer domanda */
.domanda-timer-wrap {
  width: 100%;
  height: 4px;
  background: rgba(255,255,255,.1);
  border-radius: 2px;
  overflow: hidden;
  margin-top: 2px;
}
.domanda-timer-bar {
  height: 100%;
  background: linear-gradient(90deg, var(--k-gold, #C9A227), var(--k-gold-bright, #E5C96B));
  border-radius: 2px;
  width: 100%;
  transition: width linear, background-color .3s;
}
.domanda-timer-bar.urgente {
  background: linear-gradient(90deg, var(--k-wax, #A93F35), var(--k-wax-bright, #C24437));
}
.spiegazione-box {
  margin-top: 14px; padding: 16px 18px;
  background: linear-gradient(135deg, rgba(212,169,64,.12), rgba(255,215,0,.06));
  border: 1px solid rgba(212,169,64,.35);
  border-radius: 12px;
  font-size: 1rem; line-height: 1.6;
  color: #fff;
  text-align: center;
  animation: fadeIn .4s ease;
}
@keyframes fadeIn { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@keyframes pulse-glow { 0%,100% { box-shadow: 0 0 8px rgba(255,215,0,.3); } 50% { box-shadow: 0 0 16px rgba(255,215,0,.7); } }

#domande-footer { padding-top: 4px; }

/* Risultato conquista */
/* ⚠️ `align-items: stretch` (era `center`). Con `center` OGNI figlio è shrink-to-fit:
   il riquadro cambiava larghezza da uno stato all'altro — «Borsa piena», che ha il testo
   più lungo, veniva più largo degli altri due — e il riepilogo, che dentro allinea a
   sinistra (#risultato-recap), era un blocco stretto col testo a sinistra dentro un padre
   centrato. La prova che `center` era la scelta sbagliata: il bottone aveva già dovuto
   sfilarsi a mano con `align-self: stretch`. Il centraggio lo fa `text-align`, che
   sui figli a piena larghezza funziona da solo. */
#risultato-conquista { text-align: center; display: flex; flex-direction: column; gap: 12px; align-items: stretch; }
/* Il verdetto è un titolo, e i titoli sono in Cinzel: era un grassetto di sistema
   — visto guardando l'anteprima, non leggendo il foglio */
#risultato-titolo { font-family: var(--k-font-display); font-weight: 800; letter-spacing: .5px; }
#risultato-messaggio { font-family: var(--k-font-lettura); font-size: 1.02rem; line-height: 1.45; }
#risultato-icona { font-size: 3rem; }
/* ⚠️ QUI STAVA `animazione-citta` col suo `@keyframes citta-conquista`: il rimbalzo
   dell'emoji 🏙️ quando un assedio si chiudeva. Via il 5 agosto insieme al suo ramo — in
   world le città sono uscite con `mondo_lite`, e quell'esito non si accende mai. */
}
#risultato-stelle { display: flex; gap: 8px; justify-content: center; }

/* "Chiudi" del risultato: barra SEMPRE visibile in fondo al popup, anche col recap
   lungo. Prima finiva sotto la piega e bisognava scrollare a caccia del bottone. */
#btn-chiudi-risultato {
  /* `align-self` non serve più: il padre ora stira di suo (vedi #risultato-conquista) */
  position: sticky; bottom: 0;
  margin-top: 10px; padding: 16px; font-size: 1.05rem;
  box-shadow: 0 -16px 22px -10px var(--bg-modal);
}
/* X di chiusura del quiz: tap target più grande (era minuscola) */
#domande-chiudi { padding: 8px 13px; font-size: 1.15rem; line-height: 1; }

/* ─── Classifica ────────────────────────────────────────────── */
/* ⚠️ Da qui sono uscite, il 5 agosto 2026, le regole di undici elenchi annidati:
   `.csort` (le barre di ordinamento), `.ctab-sett` (la terza fila di schede),
   `.classifica-panel`, `.albo-select` (un `<select>` NATIVO del sistema operativo in
   mezzo a una pergamena) e `#classifica-sezione-purgatorio`, che era già CSS morto —
   quel modo non esisteva più nel markup ma le sue regole erano rimaste.
   Restano una fila di pastiglie, una lista, e le classi kit `.k-cls-*`. */
.classifica-tab-bar {
  display: flex; gap: 6px;
  margin: 6px 0 10px; overflow-x: auto; overflow-y: hidden; padding-bottom: 2px;
  scrollbar-width: none;
  /* Figlia della colonna flex del modal: senza questi la barra veniva
     COMPRESSA sotto i 34px dei pill sugli schermi bassi (bug 6 lug). */
  flex: 0 0 auto; min-height: 38px;
  /* ⚠️ SETTE VOCI NON STANNO IN 360 px, e una riga che scorre senza dirlo sembra una
     riga finita: nell'anteprima la settima pastiglia era tagliata a metà e niente
     lasciava intendere che ce ne fossero altre. La sfumatura sul bordo destro è il
     solo segno che si può dare senza rubare spazio alle pastiglie stesse.
     ⚠️ `mask` e non un gradiente di fondo: la barra è trasparente e un fondo pieno
     coprirebbe la pergamena dietro. */
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 26px), transparent);
  mask-image: linear-gradient(to right, #000 calc(100% - 26px), transparent);
}
/* …e quando si è arrivati in fondo la sfumatura non serve più. */
.classifica-tab-bar.in-fondo { -webkit-mask-image: none; mask-image: none; }
.classifica-tab-bar::-webkit-scrollbar { display: none; }
.ctab {
  height: 34px; padding: 0 13px; border-radius: 999px;
  background: var(--k-btn-scuro, #221A11); color: var(--k-ink-soft, #C6B794);
  border: 1px solid rgba(201,162,39,.18);
  font-size: 12.5px; font-weight: 700; white-space: nowrap; flex: 0 0 auto;
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  transition: background .15s, color .15s, border-color .15s;
}
.ctab.attivo {
  background: rgba(201,162,39,.16); color: var(--k-gold-bright, #E5C96B);
  border-color: rgba(201,162,39,.55);
}
/* La seconda fila (le tre scale dei Territori): stessa forma, un filo più piccola —
   una famiglia sola per tutti e due i livelli, invece di tre quasi-uguali. */
.ctab--mini { height: 30px; padding: 0 11px; font-size: 11.5px; }
/* Il distintivo delle voci PRO: si spegne da sé quando il PRO ce l'hai. */
.ctab-pro {
  font-size: 8.5px; font-weight: 800; letter-spacing: .06em;
  padding: 1px 4px; border-radius: 4px; margin-left: 1px;
  background: rgba(201,162,39,.22); color: var(--k-gold-bright, #E5C96B);
}

/* Il modal non scorre: scorre la lista dentro. */
#modal-classifica .modal-contenuto {
  overflow: hidden; display: flex; flex-direction: column;
  min-height: 0; height: min(85vh, 720px);
}
#classifica-lista {
  display: flex; flex-direction: column; gap: 6px;
  flex: 1 1 auto; overflow-y: auto; min-height: 100px;
}
#classifica-sotto { flex: 0 0 auto; }
#classifica-didascalia { flex: 0 0 auto; }

/* ⚠️ `.classifica-colore` RESTA anche se la classifica non la usa più: è la conchiglia
   che disegna `_logoClassificaHtml`, e quella funzione non si tocca — la misura vive qui,
   il fondo scuro e l'anello in `kit.css` con le altre otto. Toglierla lascerebbe senza
   dimensioni chiunque la chiami da un'altra schermata. */
.classifica-colore { width: 36px; height: 36px; border-radius: 8px; flex-shrink: 0; }

/* Dropdown modalita mappa (header) */
.modo-vista-wrapper { position: relative; }
.modo-vista-dropdown {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  background: var(--bg-modal);
  border: 1px solid var(--bordo);
  border-radius: 10px;
  padding: 4px;
  min-width: 148px;
  box-shadow: var(--ombra);
  z-index: 100;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.modo-dropdown-item {
  background: none;
  border: none;
  color: var(--testo);
  padding: 9px 14px;
  border-radius: 7px;
  cursor: pointer;
  font-size: .9rem;
  text-align: left;
  width: 100%;
  transition: background .15s;
}
.modo-dropdown-item:hover  { background: var(--bg-card); }
.modo-dropdown-item.attivo { background: var(--verde); color: #fff; }

/* ─── Regole ────────────────────────────────────────────────── */
.regole-lista { list-style: none; display: flex; flex-direction: column; gap: 10px; padding-left: 4px; }
.regole-lista li { font-size: .95rem; line-height: 1.5; }

/* ─── Utility ───────────────────────────────────────────────── */
.nascosto { display: none !important; }

/* ─── Responsive: tablet/desktop ───────────────────────────── */
@media (min-width: 600px) {
  .modal-contenuto {
    border-radius: var(--raggio);
    margin-bottom: 24px;
  }
}

/* Desktop: pannelli centrati e più ampi */
@media (min-width: 1024px) {
  .modal { align-items: center; }
  .modal-contenuto { max-height: 90vh; border-radius: var(--raggio); }
  .modal-grande { max-height: 94vh; }
  /* Override per classifica: lasciamo flex-layout interno gestire lo split */
}

/* ─── Deep link landing (sessione 19 maggio 2026) ─────────────── */
#overlay-landing {
  position: fixed; inset: 0; z-index: 9000;
  background: var(--k-bg, #16110C);
  overflow-y: auto;
  display: flex; flex-direction: column;
}
.landing-hero {
  flex: 1; display: flex; align-items: center; justify-content: center;
  padding: 32px 20px 48px;
  min-height: 100vh;
}
.landing-card {
  max-width: 380px; width: 100%; text-align: center;
  background: rgba(12,9,6,.55); backdrop-filter: blur(8px);
  border-radius: 16px; padding: 28px 22px;
  border: 1px solid rgba(201,162,39,.3);
  color: #fff;
}
.landing-card h1 {
  font-family: var(--k-font-display, serif);
  font-size: 1.55rem; margin: 16px 0 4px; letter-spacing: .5px;
  text-shadow: 0 2px 8px rgba(0,0,0,.6);
}
.landing-card .landing-sub {
  font-size: 0.95rem; color: rgba(255,255,255,.8); margin: 0 0 18px;
}
.landing-stats {
  display: flex; justify-content: center; gap: 24px; margin: 18px 0 22px;
}
.landing-stats > div {
  display: flex; flex-direction: column; align-items: center;
}
.landing-stats b {
  font-family: var(--k-font-display, serif);
  font-size: 1.6rem; color: var(--k-gold-bright, #E5C96B);
}
.landing-stats span {
  font-size: 0.72rem; color: rgba(255,255,255,.7); margin-top: 2px;
}
.btn-landing {
  width: 100%; padding: 14px; font-size: 1rem; font-weight: 700;
  margin: 8px 0; border-radius: 10px; cursor: pointer;
}
.landing-link {
  display: inline-block; margin-top: 12px;
  color: rgba(255,255,255,.6); font-size: 0.85rem;
  text-decoration: underline;
}
.landing-link:hover { color: rgba(255,255,255,.9); }

/* Landing città */
.landing-citta {
  display: flex; flex-direction: column;
  min-height: 100vh;
}
.landing-hero-img {
  width: 100%; height: 200px;
  background-size: cover; background-position: center;
  border-radius: 0 0 22px 22px;
  box-shadow: 0 4px 20px rgba(0,0,0,.5);
}
@media (min-width: 600px) {
  .landing-hero-img { height: 280px; max-width: 600px; margin: 0 auto; border-radius: 0 0 22px 22px; }
}

/* Hero che si adatta all'immagine. Riquadro fisso, immagine centrata
   con object-fit:contain (vede tutto). Sfondo blurrato della stessa
   immagine riempie le bande laterali/verticali. */
.landing-hero-img-wrap {
  position: relative; width: 100%;
  min-height: 240px; max-height: 60vh; height: 50vh;
  overflow: hidden;
  border-radius: 0 0 22px 22px;
  box-shadow: 0 4px 20px rgba(0,0,0,.5);
  background: #0a0f0d;
  display: flex; align-items: center; justify-content: center;
}
.landing-hero-bg {
  position: absolute; inset: 0;
  background-size: cover; background-position: center;
  filter: blur(24px) brightness(.55);
  transform: scale(1.1);
}
.landing-hero-img-real {
  position: relative;
  max-width: 100%; max-height: 100%;
  width: auto; height: auto;
  object-fit: contain;
  display: block;
}
@media (min-width: 600px) {
  .landing-hero-img-wrap {
    max-width: 600px; margin: 0 auto;
    height: 45vh; max-height: 500px;
  }
}
.landing-citta-content {
  max-width: 540px; width: 100%; margin: 0 auto;
  padding: 24px 20px 48px;
  color: #fff;
}
.landing-citta-content h1 {
  font-size: 1.8rem; margin: 0 0 4px; color: #fff;
}
.landing-search {
  width: 100%; padding: 12px 14px;
  background: #1a1a2e; border: 1px solid #333; border-radius: 10px;
  color: #fff; font-size: 0.95rem; margin: 14px 0;
  box-sizing: border-box;
}
.landing-citta-clans {
  display: flex; flex-direction: column; gap: 8px; margin: 12px 0 18px;
}
.landing-clan-card {
  display: flex; align-items: center; gap: 14px;
  background: #1a1a2e; border: 1px solid #2a2a3e; border-radius: 12px;
  padding: 12px 14px; text-decoration: none; color: #fff;
  transition: transform .15s, border-color .15s;
}
.landing-clan-card:hover {
  transform: translateY(-1px); border-color: #ffd700;
}
.landing-clan-info { flex: 1; text-align: left; }
.landing-clan-nome { font-weight: 700; font-size: 0.95rem; }
.landing-clan-stats { font-size: 0.78rem; color: rgba(255,255,255,.6); margin-top: 2px; }
.landing-clan-arrow { font-size: 1.5rem; color: rgba(255,255,255,.4); }
.btn-altri-clan {
  width: 100%; padding: 12px; margin-top: 4px; margin-bottom: 12px;
  background: rgba(255,215,0,.08); border: 1px dashed rgba(255,215,0,.4);
  border-radius: 10px; color: #ffd700; font-weight: 600; font-size: .9rem;
  cursor: pointer; transition: background .15s;
}
.btn-altri-clan:hover { background: rgba(255,215,0,.15); }
.landing-search {
  /* Stile più prominente per ricerca */
  font-weight: 500;
  border: 2px solid #ffd700;
}
.landing-search:focus { outline: 2px solid #ffd700; border-color: #ffd700; }

/* ─── CTA "Scarica l'app" — solo browser web ─── */
#cta-app-banner {
  /* Centrato orizzontalmente, sotto l'header del gioco (header ~50-60px) */
  position: fixed; top: 64px; left: 50%; transform: translateX(-50%); z-index: 60;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 8px 8px 14px;
  background: linear-gradient(135deg, #ffd700, #ff8c00);
  color: #000; font-weight: 700; font-size: 0.82rem;
  border-radius: 999px; text-decoration: none;
  box-shadow: 0 4px 14px rgba(0,0,0,.4);
  animation: ctaSlideIn .4s ease-out;
}
#cta-app-banner:hover { transform: translateX(-50%) translateY(-1px); }
.cta-app-text { white-space: nowrap; }
.cta-app-x {
  background: rgba(0,0,0,.15); border: none; color: #000;
  width: 22px; height: 22px; border-radius: 50%;
  font-size: 0.85rem; cursor: pointer; padding: 0;
  display: flex; align-items: center; justify-content: center;
}
.cta-app-x:hover { background: rgba(0,0,0,.3); }
@keyframes ctaSlideIn { from { opacity: 0; transform: translateX(-50%) translateY(-10px); } to { opacity: 1; transform: translateX(-50%) translateY(0); } }
@media (max-width: 500px) {
  #cta-app-banner { top: 56px; padding: 6px 8px 6px 12px; font-size: 0.75rem; }
  .cta-app-x { width: 20px; height: 20px; }
}

/* ============ Inline HSL color picker (3 sliders + swatch) ============ */
/* F6.b: neutri sul kit (i gradienti dinamici sat/lit li setta _initHslPicker) */
.cz-hsl-picker { display: flex; align-items: center; gap: 10px; }
.cz-hsl-picker__swatch {
  width: 44px; height: 44px; border-radius: 50%;
  border: 2px solid var(--k-border, rgba(255,255,255,.2));
  flex-shrink: 0;
  box-shadow: inset 0 1px 4px rgba(0,0,0,.4);
}
.cz-hsl-picker__sliders { flex: 1; display: flex; flex-direction: column; gap: 6px; min-width: 140px; }
.cz-hsl-picker__sliders input[type="range"] {
  width: 100%; height: 12px; margin: 0; padding: 0;
  border-radius: 6px;
  border: 1px solid var(--k-border-tenue, rgba(255,255,255,.12));
  background: linear-gradient(to right, #444, #aaa);
  -webkit-appearance: none; appearance: none;
  outline: none; cursor: pointer;
}
.cz-hsl-picker__sliders input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 18px; height: 18px; border-radius: 50%;
  background: var(--k-ink, #fff);
  border: 2px solid var(--k-gold-scuro, #1a3a25);
  box-shadow: 0 1px 4px rgba(0,0,0,.6);
  cursor: pointer;
}
.cz-hsl-picker__sliders input[type="range"]::-moz-range-thumb {
  width: 18px; height: 18px; border-radius: 50%;
  background: var(--k-ink, #fff);
  border: 2px solid var(--k-gold-scuro, #1a3a25);
  box-shadow: 0 1px 4px rgba(0,0,0,.6);
  cursor: pointer;
}
.cz-hsl-picker__hue { background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important; }
.cz-hsl-picker__hex { font-size: .72rem; color: var(--k-ink-muted, rgba(255,255,255,.55)); font-family: monospace; min-width: 60px; text-align: right; }

/* F8: keyframes "pulse-cta" RIMOSSO — l'ultimo consumatore (#btn-landing-google)
   è passato al k-btn primario del kit con il restyle della landing. */

/* ─── Chat del clan (frasi predefinite) ───────────────────────────────────── */
.chat-chip {
  background: var(--k-surface-2, #241C13);
  color: var(--testo);
  border: 1px solid rgba(201,162,39,.22);
  border-radius: 11px;
  padding: 7px 12px;
  font-size: .85rem;
  cursor: pointer;
  transition: background .15s, transform .1s;
}
.chat-chip:hover  { background: rgba(212,169,64,.22); }
.chat-chip:active { transform: scale(.95); }
.chat-chip:disabled { opacity: .5; cursor: default; }
.chat-chip-emoji { font-size: 1.25rem; padding: 5px 10px; }
/* Nuvoletta fluttuante sulla schermata principale (in alto a sinistra) — oro kit (F5.e).
   Il 🐛 flottante è stato RIMOSSO (doppione di Impostazioni → Segnala un errore). */
#btn-chat-flot {
  position: absolute; left: 12px; top: 12px; z-index: 6;
  width: 58px; height: 58px; border-radius: 50%;
  background: var(--k-grad-oro, linear-gradient(#D4AC2E, #BE9720));
  color: var(--k-su-oro, #241A07);
  border: 1px solid rgba(201,162,39,.55);
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  box-shadow: var(--k-ombra-oro, 0 3px 0 #8F6F14), 0 4px 14px rgba(0,0,0,.45);
}
#btn-chat-flot .chat-flot-ico { display: flex; align-items: center; justify-content: center; line-height: 0; }
#btn-chat-flot:active { transform: scale(.94); }
.spettatore-attivo #btn-chat-flot { display: none; }
/* Badge messaggi non letti (+ voto aperto): ceralacca kit */
#chat-badge {
  position: absolute; top: -3px; right: -3px;
  min-width: 20px; height: 20px; padding: 0 5px;
  border-radius: 10px; background: var(--k-wax-bright, #C24437); color: #fff;
  font-size: .72rem; font-weight: 700; line-height: 20px; text-align: center;
  border: 1px solid rgba(0,0,0,.35);
  box-shadow: 0 1px 4px rgba(0,0,0,.5);
}
/* 🌍 Minimappa planisfero (solo world) — in basso a sinistra, richiudibile.
   Tocca un punto → la mappa vola lì (mappa.collegaMinimappa). */
#minimappa-wrap {
  position: absolute; left: 12px; bottom: 14px; z-index: 6;
  width: min(260px, 46vw);
  border: 2px solid rgba(201,162,39,.45);
  border-radius: 10px; overflow: hidden;
  background: #8caab9;
  box-shadow: 0 4px 14px rgba(0,0,0,.45);
}
#minimappa { display: block; width: 100%; height: auto; cursor: pointer; }
#minimappa-chiudi {
  position: absolute; top: 3px; right: 3px;
  width: 22px; height: 22px; border-radius: 50%;
  background: rgba(22,17,12,.75); color: #f2e8d2;
  border: 1px solid rgba(201,162,39,.4);
  font-size: .7rem; line-height: 1; cursor: pointer; padding: 0;
}
#btn-minimappa {
  position: absolute; left: 12px; bottom: 14px; z-index: 6;
  width: 44px; height: 44px; border-radius: 50%;
  background: rgba(22,17,12,.82); color: #f2e8d2;
  border: 1px solid rgba(201,162,39,.4);
  font-size: 1.25rem; cursor: pointer;
  box-shadow: 0 3px 10px rgba(0,0,0,.45);
}
#btn-minimappa:active { transform: scale(.94); }
/* In spettatore il footer sparisce e l'overlay si alza: la minimappa resta dov'è (dentro il contenitore) */

/* Reazioni ai messaggi */
.chat-reaz-pill {
  background: rgba(255,255,255,.07); color: var(--testo);
  border: 1px solid rgba(255,255,255,.14); border-radius: 12px;
  padding: 1px 7px; font-size: .78rem; cursor: pointer; line-height: 1.5;
}
.chat-reaz-pill.mine { background: rgba(212,169,64,.28); border-color: rgba(212,169,64,.6); }
.chat-reaz-add { background: none; border: none; cursor: pointer; font-size: .9rem; opacity: .5; padding: 0 2px; }
.chat-reaz-add:hover { opacity: 1; }
.chat-reaz-opt { background: none; border: none; cursor: pointer; font-size: 1.1rem; padding: 2px 3px; }
.chat-reaz-opt:hover { transform: scale(1.2); }
/* Risultati ricerca tag (clan/città/mare) */
.chat-ris {
  text-align: left; background: rgba(255,255,255,.05);
  border: 1px solid rgba(255,255,255,.10); border-radius: 10px;
  padding: 9px 12px; cursor: pointer; color: var(--testo);
}
.chat-ris:hover { background: rgba(212,169,64,.18); }
/* Tag cliccabile dentro un messaggio (clan/città) → flash su mappa */
.chat-tag-link { text-decoration: underline; text-underline-offset: 2px; font-weight: 700; cursor: pointer; }
.chat-tag-link:active { opacity: .7; }
/* Blocca/segnala: minuscoli e quasi invisibili (solo per conformità), visibili al tocco */
.chat-mod-ico { font-size: .55rem; opacity: .15; cursor: pointer; line-height: 1; }
.chat-mod-ico:hover, .chat-mod-ico:active { opacity: .85; }

/* ⚠️ QUI STAVA `#quiz-suspense` col suo `@keyframes quizSuspense`: il velo col dado che
   ruotava per 700 ms DOPO che il server aveva già risposto. Tolto il 5 agosto — l'attesa
   vera è la chiamata, e porta la clessidra sul bottone «Verifica in corso».
   ⚠️⚠️ E QUI STAVANO `rivela-pop` e `rivela-shake` SU `.opzione-btn`: le metteva
   `_rivelaSequenza`, tolta insieme al dado. Da allora **nessuno le chiedeva più** — CSS
   orfano, con sopra un commento che le dichiarava vive. Da quel giorno la rivelazione
   della risposta non aveva PIÙ NESSUNA animazione, ed è quel che l'owner ha visto
   («migliorerei le animazioni risposta per renderle più belle», 5 agosto).
   Non si rianimano dov'erano: le opzioni del quiz spariscono con la domanda
   (`nascondi('domande-container')`) e la risposta giusta si rivela nel RIEPILOGO. Le due
   animazioni vanno lì, dove il fatto accade. */

/* ── 🎬 La rivelazione, nel riepilogo ──
   Le schede entrano una dopo l'altra (ritardo per indice, dato in linea): con tre domande
   si legge una riga per volta invece di una parete che appare tutta insieme.
   ⚠️ Corte: l'esito è già in mano, non c'è niente da far aspettare. */
.recap-card { animation: recapEntra .34s ease-out both; animation-delay: var(--recap-i, 0s); }
@keyframes recapEntra {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}
/* La riga GIUSTA si gonfia un istante — è quella che si cerca con l'occhio. */
.recap-opz.recap-giusta { animation: recapPop .45s cubic-bezier(.2,1.4,.4,1) both; animation-delay: var(--recap-i, 0s); }
@keyframes recapPop {
  0%   { transform: scale(.94); }
  60%  { transform: scale(1.04); }
  100% { transform: scale(1); }
}
/* Quella che avevi scelto per sbaglio scuote la testa. ⚠️ Solo quando è DIVERSA dalla
   giusta: se hai indovinato non c'è nessuna riga sbagliata, e non trema niente. */
.recap-opz.recap-sbagliata { animation: recapNo .4s ease-in-out both; animation-delay: var(--recap-i, 0s); }
@keyframes recapNo {
  0%,100% { transform: translateX(0); }
  25%     { transform: translateX(-5px); }
  75%     { transform: translateX(5px); }
}
/* ⚠️ Chi ha chiesto meno movimento non lo riceve: qui è decorazione pura, e il riepilogo
   si legge identico da fermo. */
@media (prefers-reduced-motion: reduce) {
  .recap-card, .recap-opz.recap-giusta, .recap-opz.recap-sbagliata,
  .k-es-sigillo, .k-es-sigillo--spento, .k-es-punto { animation: none !important; }
}

/* ─── 📖 Riepilogo calmo post-risultato (rileggibile + segnala) ─── */
#risultato-recap { margin: 14px 0 6px; text-align: left; max-height: 38vh; overflow-y: auto; }
.recap-card {
  background: rgba(255,255,255,.03); border: 1px solid rgba(201,162,39,.16);
  border-radius: 12px; padding: 10px 12px; margin-bottom: 10px;
}
.recap-head { display: flex; gap: 8px; align-items: flex-start; font-size: .92rem; line-height: 1.35; margin-bottom: 8px; }
/* il segno dell'esito: verde se indovinata, rosso di casa se no — il glifo del kit
   disegna in `currentColor`, quindi il colore si dà qui */
.recap-esito { flex: 0 0 auto; line-height: 0; padding-top: 1px; }
.recap-esito.recap-ok { color: var(--k-green); }
.recap-esito.recap-ko { color: #A93F35; }
/* ⚠️ Qui nessuna regola dichiarava un carattere — cadevano tutte su quello di sistema,
   e la STESSA domanda era in serif mentre rispondi e in sans nel riepilogo: cambiava
   carattere a metà. E i colori erano grigi NEUTRI scritti a mano (#e8e2d4, #c8c0b0,
   #b9b3a4) dove il gioco è caldo: è questo che faceva sembrare il riepilogo di un
   altro gioco, più della forma. Ora prendono i token. */
.recap-testo { font-family: var(--k-font-lettura); font-size: 1.02rem; color: var(--k-ink); }
.recap-opzioni { display: flex; flex-direction: column; gap: 5px; }
.recap-opz { padding: 6px 9px; border-radius: 7px; font-family: var(--k-font-lettura); font-size: .95rem; background: rgba(255,255,255,.03); border: 1px solid transparent; color: var(--k-ink-soft); }
.recap-opz.recap-giusta { background: rgba(95,138,84,.22); border-color: var(--k-green,#5F8A54); color: #d8f0e0; font-weight: 600; }
/* ⚠️ il rosso di casa non ha un token: `--k-danger` NON esiste (c'è solo
   `--k-danger-testo`), e .k-btn--pericolo lo scrive letterale come qui */
.recap-opz.recap-sbagliata { background: rgba(169,63,53,.20); border-color: #A93F35; color: var(--k-danger-testo); }
.recap-spieg { display: flex; align-items: flex-start; gap: 7px; margin-top: 8px; font-family: var(--k-font-lettura); font-size: .92rem; color: var(--k-ink-muted); line-height: 1.45; }
.recap-spieg .k-ico { flex: 0 0 auto; margin-top: 2px; }
/* Bottone secondario = chrome, quindi il carattere di sistema va bene; i colori no:
   erano un grigio-BLU (#9aa0ad) e un giallo (#ffd24a) fuori dalla palette legno/oro.
   Sono gli stessi valori di .k-btn--ghost. */
.recap-segnala {
  display: inline-flex; align-items: center; gap: 6px;
  margin-top: 8px; background: transparent;
  border: 1px solid rgba(198,183,148,.35); color: var(--k-ink-muted);
  border-radius: 7px; padding: 5px 10px; font-size: .78rem; cursor: pointer;
}
.recap-segnala:hover { border-color: var(--k-gold-bright); color: var(--k-gold-bright); }

/* ── Onboarding tutorial: blocca la chrome mentre il tutorial è attivo ──
   Restano interattivi solo la mappa (#contenitore-mappa, per lo step "tocca una
   cella") e la card del tutorial. Header, footer e controlli mappa sono inerti. */
body.cqz-tut-bloccato .header-gioco,
body.cqz-tut-bloccato #pannello-basso,
body.cqz-tut-bloccato #overlay-mappa { pointer-events: none !important; }
/* Durante l'onboarding nascondi le notifiche flottanti (es. avviso voto diplomazia
   e nuvoletta chat) che altrimenti coprono la card del tutorial. */
body.cqz-tut-bloccato #dip-notifica,
body.cqz-tut-bloccato #btn-chat-flot { display: none !important; }
/* Mentre un modal coprente è aperto (es. quiz domande) la pillola voto va
   nascosta: sennò galleggia sopra il quiz e copre i pulsanti di risposta. */
body.cqz-modal-coprente #dip-notifica { display: none !important; }

/* ════ Diplomazia — tema del gioco (verde scuro + oro), alto contrasto ════ */
#chat-tab-diplo.dip-pergamena { color: var(--testo); }
/* Titolo di sezione: UNICO stile in tutte le sezioni (oro su scuro, leggibile) */
/* ✒️ LA VESTE DELLA DIPLOMAZIA — owner, 5 agosto: «font, pulsanti e stile non sono ancora
   aggiornati, rendi tutta la diplomazia figa e moderna».
   ⚠️ La tavolozza era GIA' giusta (`--oro`, `--testo`… sono alias dei token del kit): a
   far sembrare vecchia la schermata erano il CARATTERE e le FORME. Qui si applica la
   stessa scala del foglio Impostazioni e del Manuale — Cinzel per i titoli e i nomi
   propri, EB Garamond per la prosa, Bebas per i numeri, e il resto in font di sistema
   perche' e' *chrome*, non testo da leggere. */
.dip-titolo { font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  font-size: 1.02rem; letter-spacing: .4px; display: flex; align-items: center; gap: 8px;
  color: var(--k-gold-bright, #E5C96B); margin: 4px 0 2px; }
/* La prosa del pannello: e' testo che si LEGGE, non un'etichetta. */
.dip-sub { font-family: var(--k-font-lettura, 'EB Garamond', Georgia, serif);
  font-size: .88rem; line-height: 1.45; color: var(--k-ink-muted, var(--testo-2)); }
.dip-divisore { height: 1px; background: var(--bordo); margin: 9px 0; border: 0; }
/* Slot card */
.dip-slots { display: flex; flex-direction: column; gap: 9px; }
.dip-slot {
  display: flex; align-items: center; gap: 11px; padding: 11px 12px;
  border-radius: var(--k-r-md, 14px); border: 1px solid var(--k-border-tenue);
  background: var(--k-surface-2, #241C13); min-height: 60px;
}
/* ⚠️ Gli slot liberi sono un PROMEMORIA, non contenuto: a piena altezza quattro caselle
   vuote mangiavano mezza schermata e spingevano nemici e gerarchia sotto la piega. */
.dip-slot.vuoto { border-style: dashed; border-color: var(--k-border-tenue);
  justify-content: center; color: var(--k-ink-muted); font-weight: 700;
  font-size: 10.5px; letter-spacing: 2.2px; text-transform: uppercase;
  background: transparent; min-height: 42px; padding: 6px 12px; opacity: .75; }
.dip-slot.coa { border-color: var(--oro); }
.dip-slot-logo { width: 44px; height: 44px; border-radius: 10px; flex-shrink: 0; background: rgba(0,0,0,.35) center/cover no-repeat; border: 2px solid var(--bordo); display:flex; align-items:center; justify-content:center; font-size:1.15rem; font-weight:800; color:#fff; }
.dip-slot-info { flex: 1; min-width: 0; }
/* ⚠️ Il nome di una Signoria e' un nome PROPRIO: prende il display, come gli anelli della
   gerarchia. E' la riga che dice «con chi hai a che fare», e in font di sistema si legge
   come un'etichetta di sistema. */
.dip-slot-nome { font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  font-size: 1rem; letter-spacing: .2px; color: var(--k-ink-forte, var(--testo));
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* ⚠️ Questa riga NON va a capo: porta «Patto di non aggressione · scade tra 3g 4h», e
   spezzandola il conto alla rovescia finiva su una riga sua, alzando la card di 20 px e
   schiacciando il bottone accanto. Vista nell'anteprima, non dedotta: una riga meta si
   TRONCA, non si impila. */
.dip-slot-meta { font-size: .78rem; color: var(--k-ink-muted); line-height: 1.4;
  display: flex; align-items: center; gap: 5px; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; }
.dip-slot-meta svg { flex: 0 0 auto; }
.dip-slot-azioni { display: flex; gap: 6px; flex-shrink: 0; }
/* Bottoni: coerenti col gioco (scuri, accento oro), con bordo inferiore 3D */
/* 🤝 I BOTTONI DELLA DIPLOMAZIA, allineati al kit (owner, 5 agosto: «il pannello
   diplomazia ha ancora lo stile vecchio (icone, pulsanti ecc.)»).
   ⚠️ Si e' cambiata la REGOLA, non il markup: `.dip-btn` compare in decine di punti dentro
   una schermata da 38.000 caratteri che regge patti, voti, scambi e vassallaggio, e
   riscriverli tutti a mano per arrivare allo stesso aspetto sarebbe stato il modo classico
   per perdere un ramo poco battuto. Qui bastano i token.
   ⚠️ Prima leggeva `--bordo`, `--bg-modal`, `--testo`: la tavolozza PRE-kit, quella che
   fa sembrare vecchia una schermata anche quando la sua struttura non lo e'.
   ⚠️ Il `gap` serve ai glifi appena entrati: senza, il segno resta appiccicato al testo. */
.dip-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 0 15px; min-height: 44px; font-size: .84rem; line-height: 1.2;
  border-radius: var(--k-r-sm, 12px); cursor: pointer; font-weight: 600;
  font-family: var(--k-font); color: var(--k-ink);
  background: var(--k-btn-scuro); border: 1px solid rgba(201,162,39,.40);
  -webkit-tap-highlight-color: transparent; user-select: none; touch-action: manipulation;
}
.dip-btn:active { transform: translateY(1px); }
.dip-btn[disabled] { opacity: .45; pointer-events: none; }
/* ⚠️ Il primario e' quello del kit fin nei dettagli — maiuscoletto Cinzel spaziato e
   l'ombra piena sotto — perche' due bottoni «principali» che si somigliano ma non
   coincidono si notano appena stanno nella stessa schermata (§0bis). */
.dip-btn.primario { background: var(--k-grad-oro, linear-gradient(#D4AC2E,#BE9720));
  color: var(--k-su-oro, #241A07); border: none; box-shadow: var(--k-ombra-oro, 0 3px 0 #8F6F14);
  font-family: var(--k-font-display, Cinzel, serif); font-weight: 800;
  font-size: .88rem; letter-spacing: 1.4px; text-transform: uppercase; min-height: 48px; }
.dip-btn.primario:active { box-shadow: 0 1px 0 #8F6F14; transform: translateY(2px); }
.dip-btn.rosso { color: var(--k-danger-testo, #E08573); border-color: rgba(169,63,53,.55);
  background: rgba(169,63,53,.12); }
.dip-btn.dip-annulla { color: var(--k-ink-muted); border-color: var(--k-border-tenue);
  background: transparent; font-size: .76rem; min-height: 34px; margin-top: 2px; }
/* 🟩🟥 La pastiglia del baratto: verde quel che ricevo, rosso quel che cedo. Erano i due
   quadratini emoji, e la corsia rossa li scambiava cercando un carattere dentro l'HTML. */
.dip-tr-dot { display: inline-block; width: 10px; height: 10px; border-radius: 3px;
  flex: 0 0 auto; background: #6fbf73; vertical-align: -1px; }
.dip-tr-dot--cedo { background: #c0605a; }
.dip-fedelta { font-size:.82rem; font-weight:700; color:var(--testo); padding:8px 10px; background:var(--bg-card); border:1px solid var(--bordo); border-radius:10px; text-align:center; }
/* 🤝 Il marchio della penale: ⚠️ NON è un colore in più a caso — è il rosso di casa
   `#A93F35`, lo stesso di `.k-btn--pericolo`. `--k-danger` non esiste (c'è solo
   `--k-danger-testo`), quindi si scrive letterale, come fa il kit. */
/* ═══ 🏰 IL BIVIO DELLA CAPITOLAZIONE ══════════════════════════════════════════
   Owner, 5 agosto: *«migliorane lo stile, l'estetica e la comprensibilità… usa lo stile kit
   gioco, pensa bene a come rendere facile e immediato»*.

   ⚠️⚠️ LA STRUTTURA È IL CHIARIMENTO. Prima erano sei bottoni in fila, tutti dello stesso
   peso, e nessuno diceva quali fossero le TRE STRADE e quali le varianti di una strada.
   Ora: il riquadro è una `.k-card--incisa` (gli angoli incisi sono la firma della
   direzione), il bottino sta in un `.k-reward` (il riquadro-premio del gioco, quello della
   ruota), e ogni strada è un blocco con nome · cosa comporta · numeri in pastiglie · comandi.
   ⚠️ Il rosso è quello di casa `#A93F35` (vedi .lealta-penale): `--k-danger` non esiste. */
/* ═══ 🏆 IL POPUP DELLA CAPITOLAZIONE (owner, 6 agosto) ═════════════════════
   Si apre SOPRA la carta, che resta centrata sulla capitale appena presa: il fondale è
   la conquista, non un foglio a tutto schermo.
   ⚠️ NIENTE ✕ e nessuna chiusura toccando fuori: l'unica uscita è «Scelgo più tardi», in
   fondo. È una scelta che vale ore di gioco, e chiuderla per sbaglio significherebbe
   ritrovarla decisa dall'ambasciatore senza averla mai letta.
   ⚠️ Lo scrim è VOLUTAMENTE inerte (nessun handler): serve a staccare dal fondo, non a
   chiudere. */
.capit-pop { position:fixed; inset:0; z-index:9000; display:flex;
  align-items:center; justify-content:center; padding:16px;
  padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px);
  padding-top:calc(env(safe-area-inset-top,0px) + 16px); }
.capit-pop-scrim { position:absolute; inset:0; background:rgba(10,7,4,.78);
  backdrop-filter:blur(3px); }
/* ⚠️⚠️ IL FOGLIO È OPACO, e non è una preferenza. La prima stesura usava un gradiente in
   rgba sopra la carta: sul telefono si vedevano i territori scorrere DIETRO il testo, e
   l'owner l'ha segnalato subito — *«il popup ha sfondo trasparente e questo crea
   confusione»*. Un foglio che si legge attraverso non è un foglio, è una filigrana.
   Il colore è quello delle superfici del kit, col velo d'oro SOPRA e non al posto. */
.capit-pop-foglio { position:relative; width:min(430px, 100%); max-height:100%;
  overflow-y:auto; padding:16px !important;
  border:1px solid rgba(201,162,39,.38) !important;
  background:
    linear-gradient(rgba(201,162,39,.07), rgba(201,162,39,.02)),
    var(--k-surface-2, #241C13) !important;
  box-shadow:0 18px 50px rgba(0,0,0,.72); }
/* 🏆 La testa celebrativa: corona grande, occhiello, nome del vinto in Cinzel. */
.capit-pop-testa { text-align:center; margin-bottom:12px; }
.capit-pop-corona { display:flex; justify-content:center; margin-bottom:6px; opacity:.95; }
.capit-pop-corona svg, .capit-pop-corona img { filter:drop-shadow(0 3px 10px rgba(201,162,39,.35)); }
.capit-pop-testa .k-eyebrow { display:block; margin-bottom:3px; }
.capit-pop-nome { font-family:var(--k-font-display, Cinzel, serif); font-weight:700;
  font-size:1.22rem; line-height:1.2; letter-spacing:.4px; color:var(--k-ink-forte,#F2E8D2); }
/* L'unica uscita, e la nota del tempo SOTTO di essa: è la risposta alla domanda che uno
   si fa proprio mentre la preme — «e se non decido?». In cima rubava spazio alla scelta. */
.capit-pop-poi { width:100%; margin-top:12px; }
.capit-pop-scade { display:flex; align-items:flex-start; justify-content:center; gap:6px;
  margin-top:7px; text-align:center;
  font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.78rem; line-height:1.4; color:var(--k-ink-muted,#B3A283); }
.capit-pop-scade svg { flex:0 0 auto; margin-top:2px; opacity:.75; }
/* 📜 Il sunto della tua imposizione: stesso riquadro di una strada, ma col conto dentro. */
.capit-sunto .bott-conto { margin-top:9px; }

/* 🏳️ LA CAPITOLAZIONE SUBITA. Stessa scatola del vincitore — è la stessa notizia guardata
   dall'altro lato — ma la corona d'oro non ci sta: qui non c'è niente da festeggiare, e un
   riquadro identico farebbe scambiare una sconfitta per un premio. Il segno è il teschio, la
   tinta è quella del pericolo (la stessa dei riquadri d'allarme del Consiglio). */
.capit-pop--sub .capit-pop-corona svg { color:var(--k-rosso, #A93F35); }
.capit-pop--sub .capit-pop-corona svg, .capit-pop--sub .capit-pop-corona img {
  filter:drop-shadow(0 3px 10px rgba(169,63,53,.4)); }
.capit-pop--sub .capit-pop-nome { color:var(--k-rosso-chiaro, #D98A7E); }
/* 👑 La voce fissa «sei senza capitale»: NON è un allarme rosso come il bivio — è una cosa
   da fare, non una minaccia — quindi porta l'oro dei richiami del gioco. */
.capit-box--sub { border-color:rgba(201,162,39,.45) !important;
  background:linear-gradient(rgba(201,162,39,.10), rgba(201,162,39,.03)) !important; }
.capit-box { border:1px solid rgba(169,63,53,.45) !important;
  background:linear-gradient(rgba(169,63,53,.10), rgba(169,63,53,.04)) !important;
  padding:14px !important; margin-bottom:12px;
  box-shadow:var(--k-elev-1, 0 6px 18px rgba(0,0,0,.5)); }
.capit-tit { display:flex; align-items:center; gap:9px;
  font-family:var(--k-font-display, Cinzel, serif); font-weight:700; font-size:1.08rem;
  line-height:1.25; letter-spacing:.4px; color:var(--k-ink-forte,#F2E8D2); margin-bottom:11px; }
.capit-tit svg, .capit-tit img { flex:0 0 auto; }

/* 🥜⚠️ IL TESORO DELLA CITTÀ NON HA PIÙ UN RIQUADRO IN CIMA. Fino al 5 agosto era un
   `k-reward` col «+43» grande e la riga «già in borsa». Dal 6 agosto il tesoro si prende
   SOLO tenendosi la capitale (owner), quindi non è più un premio da annunciare ma una
   CONSEGUENZA da leggere accanto alla strada che lo dà: vive in `.capit-sede-conseg`, qui
   sotto, sotto il bottone che la accende.
   ⚠️ Non chiamarlo mai «saccheggio»: quella parola faceva doppio servizio con la capitale
   che invece COSTA punti, e i due letti di fila sembravano la stessa cosa (§6quater). */
.capit-bottino-perso { font-size:.72rem; line-height:1.35; text-align:center;
  color:var(--k-danger-testo,#DE9C90); margin:0 0 4px; }
/* ⚠️ `.capit-sede-conseg` È STATA TOLTA col bivio a tre strade. Le due conseguenze del
   tenersi la capitale — quanto costa e quanto rende — si leggono adesso nel CONTO SULLA
   CARTA, nelle righe `.bott-sede` e `.bott-tesoro`, che compaiono nell'istante in cui la
   si accende toccandola. È dove l'owner le ha volute il 6 agosto, ed è meglio: si vedono
   mentre si sceglie, non prima di scegliere. */

.capit-sott { display:flex; align-items:flex-start; gap:6px; margin:10px 0 2px;
  font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.86rem; line-height:1.4; color:var(--k-ink-muted,#B3A283); }
.capit-sott svg { flex:0 0 auto; margin-top:2px; opacity:.8; }
.capit-occhiello { display:block; margin:12px 0 7px; }

/* ─── una STRADA, un riquadro ─────────────────────────────────────────────── */
.capit-via { padding:11px 12px; border-radius:var(--k-r-sm,12px); margin:0 0 8px;
  background:var(--k-surface-3,#211912);
  border:1px solid var(--k-border-tenue, rgba(201,162,39,.20)); }
.capit-via:last-child { margin-bottom:0; }
/* ⚠️ Una strada CHIUSA resta al suo posto, spenta: sparire lascerebbe credere che non
   esista, e il motivo è la cosa che il giocatore deve poter leggere. */
.capit-via.spenta { opacity:.5; border-style:dashed; }
.capit-via-tit { display:flex; align-items:center; gap:8px;
  font-family:var(--k-font-display, Cinzel, serif); font-weight:700; font-size:.95rem;
  letter-spacing:.5px; color:var(--k-ink-forte,#F2E8D2); }
.capit-via-tit svg { flex:0 0 auto; }
.capit-via-desc { margin:6px 0 0;
  font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.85rem; line-height:1.45; color:var(--k-ink,#EFE6D2); }
.capit-via-note { margin:6px 0 0; font-size:.72rem; font-weight:700;
  color:var(--k-ink-muted,#B3A283); }
.capit-via-btn { display:flex; width:100%; margin-top:9px; text-align:left;
  justify-content:flex-start; font-size:.86rem; }
/* La via secondaria («oppure scegli tu per me») pesa meno: è la scorciatoia, non la strada. */
.capit-via-btn--min { font-size:.78rem; min-height:36px; opacity:.85; }
/* 👑 La sede sta DENTRO le terre, perché si paga con la stessa quota. Il prezzo va nella
   pastiglia di costo del kit, non dentro la frase: nel gioco i prezzi si vedono così.
   ⚠️ La pastiglia NON si stringe e NON va a capo: `k-btn` è un flex, e senza questi tre
   pezzi (`min-width:0` sull'etichetta, `flex:0 0 auto` + `nowrap` sul prezzo) il testo
   spingeva «6 punti» su due righe schiacciate contro il bordo. Visto nell'anteprima. */
.capit-sede { margin-top:10px; gap:8px; font-size:.82rem; }
.capit-sede > span:first-of-type { min-width:0; }
/* ⚠️ Il prezzo si deve VEDERE: sul bottone fantasma la pastiglia ereditava un fondo scuro
   su fondo scuro e spariva — l'ho guardata nell'anteprima. Qui è oro, come i prezzi del
   gioco, con un filetto che la stacca. */
.capit-sede .k-costo { margin-left:auto; flex:0 0 auto; white-space:nowrap;
  background:rgba(201,162,39,.18) !important; color:var(--k-gold-bright,#E5C96B) !important;
  border:1px solid var(--k-border-tenue, rgba(201,162,39,.20)); }
.capit-sede.spenta { display:flex; align-items:center; gap:8px; padding:8px 10px;
  border:1px dashed var(--k-border-tenue, rgba(201,162,39,.20)); border-radius:var(--k-r-xs,9px);
  font-size:.8rem; opacity:.6; }
/* Le tre cifre delle terre, in pastiglie: si guardano a colpo d'occhio invece di leggerle
   dentro una frase che va letta tutta o niente. */
.capit-cifre { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
.capit-cifre .k-chip { height:27px; font-size:.76rem; padding:0 9px; }

/* ⚠️⚠️ IL MOTIVO SI DEVE LEGGERE SUL TELEFONO. Fino al 3 agosto le voci chiuse portavano
   il motivo in un `title=`: su mobile il tooltip nativo NON esiste, quindi «Hai giurato a
   un altro» e «ti mancano N punti» erano invisibili proprio dove si gioca. */
.capit-perche { display:block; margin-top:6px; font-size:.75rem; font-weight:600;
  line-height:1.4; color:var(--k-ink-muted,#B3A283); }
/* La riga della lealtà: compare in cinque schermate, quindi la sua forma sta QUI. */
.lealta-riga { display:flex; align-items:center; flex-wrap:wrap; gap:6px; font-size:.86rem; }
.lealta-conti { display:inline-flex; align-items:center; gap:7px; opacity:.65;
  font-family:var(--k-font-numeri,'Bebas Neue',sans-serif); font-size:.9rem; letter-spacing:.4px; }
.lealta-conti svg { margin-right:1px; }
.lealta-penale { display:inline-block; margin-left:6px; padding:1px 7px; border-radius:999px;
  background:rgba(169,63,53,.12); color:#A93F35; border:1px solid rgba(169,63,53,.35);
  font-size:.74rem; font-weight:700; white-space:nowrap; cursor:help; }
/* 📊 Cruscotto diplomazia */
.dip-crus { margin:8px 0; border:1px solid var(--k-border-tenue);
  border-radius:var(--k-r-md,14px); background:var(--k-surface-2,#241C13); overflow:hidden; }
.dip-crus-sum { cursor:pointer; list-style:none; padding:10px 12px; font-weight:800; font-size:.92rem; color:var(--testo); background:rgba(120,90,40,.10); }
.dip-crus-sum::-webkit-details-marker { display:none; }
.dip-crus-body { padding:8px 10px; display:flex; flex-direction:column; gap:10px; }
.dip-crus-grp { display:flex; flex-direction:column; gap:4px; }
/* 👑 LA GERARCHIA FEUDALE nel pannello diplomazia.
   ⚠️ I colori vengono dai token del kit, mai scritti a mano: questo gioco è tutto
   legno e oro, e un grigio neutro qui dentro si vede subito che viene da altrove
   (§0bis dell'albo). Il carattere delle etichette è quello di sistema — è il
   *chrome*, non un testo che si legge — mentre i nomi delle Signorie prendono il
   display, perché sono nomi propri e vanno letti come tali. */
.vass-box { display:flex; flex-direction:column; gap:8px; padding:12px;
  background:var(--k-surface-3,#211912); border:1px solid var(--k-border-tenue);
  border-radius:var(--k-r-md,14px); }
.vass-catena { display:flex; flex-wrap:wrap; align-items:center; gap:5px; }
.vass-anello { font-family:var(--k-font-display,Cinzel,serif); font-size:.86rem; font-weight:700;
  color:var(--k-gold-bright,#E5C96B); padding:2px 8px; border:1px solid rgba(201,162,39,.35); border-radius:999px; }
.vass-anello.vass-io { color:var(--testo); border-color:var(--bordo); opacity:.75; }
.vass-freccia { color:var(--k-gold,#C9A227); opacity:.6; font-size:.8rem; }
.vass-nota { font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.9rem; line-height:1.5; color:var(--k-ink-muted); }
.vass-lista { display:flex; flex-wrap:wrap; gap:5px; }
.vass-chip { font-size:.76rem; padding:2px 4px 2px 8px; border:1px solid var(--bordo); border-left-width:3px;
  border-radius:8px; color:var(--testo); background:var(--bg-card);
  display:inline-flex; align-items:center; gap:4px; }
/* ⛓️‍💥 «Imponi liberazione», dentro la pastiglia del vassallo.
   ⚠️ La VESTE viene dal kit (`k-btn k-btn--ghost k-btn--mini`): qui si rifinisce soltanto —
   lo si stringe per stare dentro la pastiglia e lo si tiene discreto finché non lo si cerca.
   È un gesto raro e irreversibile, e un bottone squillante accanto a ogni nome inviterebbe
   a premerlo per curiosita'. */
.vass-libera { min-width:22px; padding:1px 4px; border-radius:6px;
  opacity:.55; transition:opacity .15s, color .15s; }
.vass-libera:hover, .vass-libera:focus-visible { opacity:1; color:var(--k-pericolo,#c0553f); }
.vass-libera svg { display:block; }
.vass-slot { /* l'occhiello e' quello comune, qui resta solo la posizione */ margin-top:2px; }
.vass-ribella { align-self:flex-start; margin-top:2px; }

.dip-crus-tit { display:flex; align-items:center; gap:7px; }
.dip-crus-riga { display:flex; align-items:center; flex-wrap:wrap; gap:6px; font-size:.85rem; color:var(--testo); }
.dip-crus-meta { font-size:.74rem; opacity:.65; margin-left:auto; font-weight:600; }
/* F6.m: il nome si espande e tronca, l'azione sta COMPATTA a destra sulla stessa riga
   (prima .dip-crus-rich era flex:1 0 100% = bottone gigante a capo sotto OGNI coalizione). */
.dip-crus-nome { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dip-crus-fit { flex-wrap:nowrap; } /* il nome tronca e l'azione resta in riga (col wrap il bottone andrebbe a capo) */
.dip-crus-fit .dip-crus-meta { white-space:nowrap; } /* "4 membri" mai spezzato su 2 righe: a stringersi è il nome */
.dip-crus-sub { font-size:.7rem; opacity:.6; margin:-2px 0 4px 24px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } /* F6.n: i clan che formano la coalizione, sotto il nome */
.dip-crus-riga .dip-crus-nome + .dip-crus-meta { margin-left:0; }
.dip-crus-rich { flex:0 0 auto; margin-left:2px; padding:5px 9px; font-size:.72rem; }
.dip-crus-tag { flex:0 0 auto; font-size:.7rem; font-weight:700; opacity:.75; white-space:nowrap; margin-left:2px; }
/* ⚠️ I conteggi in Bebas, come ogni altro numero del gioco: e' un dato, non una parola. */
.dip-crus-att { margin-left:auto; min-width:26px; text-align:center; padding:2px 8px;
  border-radius:var(--k-r-pill,999px); color:#fff; font-family:var(--k-font-numeri,'Bebas Neue',sans-serif);
  font-weight:400; font-size:.9rem; letter-spacing:.5px; line-height:1.15; }
/* Riga nemici: nome che si espande → orario ("17h fa") e badge incollati a destra (allineati). */
.dip-crus-nemico .dip-crus-nome { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* Chat coalizione: ordine "collabora o ti espelliamo" evidenziato (è rivolto a un clan preciso). */
.coal-msg-avviso .coal-msg-testo { background:rgba(224,162,58,.14); border:1px solid rgba(224,162,58,.5); border-radius:8px; padding:5px 8px; }
.coal-msg-rivolto { display:inline-block; font-size:.72rem; font-weight:800; color:#ffcf6b; background:rgba(224,162,58,.18); border-radius:6px; padding:2px 7px; margin:2px 0 3px; }
/* (F8: blocco .dip-recap-* rimosso — il cartellino è stato sostituito dalla plancia #dip-plancia in F6.j) */
.dip-chivota { display:inline-block; font-size:.72rem; font-weight:700; padding:2px 8px; border-radius:999px; background:rgba(120,90,40,.16); color:var(--testo); opacity:.9; }
/* ⚔️ Chat di coalizione */
.coal-chat-head { display:flex; align-items:center; gap:8px; font-size:.95rem; color:var(--testo); padding-bottom:4px; border-bottom:1px solid var(--bordo); }
.coal-chat-logo { width:26px; height:26px; border-radius:7px; background-size:cover; background-position:center; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; }
.coal-chat-lista { flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:8px; padding:6px 0; min-height:80px; }
.coal-msg { display:flex; gap:8px; align-items:flex-start; }
.coal-msg.mio { flex-direction:row-reverse; }
.coal-av { width:30px; height:30px; border-radius:8px; background-size:cover; background-position:center; display:inline-flex; align-items:center; justify-content:center; font-weight:800; color:#fff; flex-shrink:0; box-shadow:0 1px 3px rgba(0,0,0,.4); }
.coal-msg-body { background:rgba(255,255,255,.10); border-radius:12px; padding:7px 10px; max-width:78%; }
.coal-msg.mio .coal-msg-body { background:rgba(201,162,39,.20); }
.coal-msg-meta { font-size:.66rem; color:var(--testo-2); margin-bottom:2px; }
.coal-msg-testo { font-size:.92rem; color:var(--testo); }
.coal-msg-reaz { display:flex; gap:5px; flex-wrap:wrap; margin-top:4px; }
.coal-reaz { font-size:.72rem; background:rgba(0,0,0,.25); border-radius:999px; padding:1px 7px; cursor:pointer; }
.coal-chat-frasi { display:flex; flex-direction:column; gap:6px; max-height:34%; overflow-y:auto; border-top:1px solid var(--bordo); padding-top:6px; }
.coal-frase { text-align:left; padding:9px 11px; border-radius:10px; border:1px solid var(--bordo); background:var(--bg-card); color:var(--testo); cursor:pointer; font-size:.86rem; }
/* Panoramica coalizione (membri + obiettivo + esci) */
.coal-info { border:1px solid var(--bordo); border-radius:10px; background:rgba(0,0,0,.12); padding:4px 8px; }
.coal-info-sum { cursor:pointer; list-style:none; font-weight:700; font-size:.82rem; color:var(--testo); padding:4px 0; }
.coal-info-sum::-webkit-details-marker { display:none; }
.coal-membri { display:flex; flex-wrap:wrap; gap:6px; }
.coal-membro { display:inline-flex; align-items:center; gap:5px; font-size:.8rem; background:rgba(255,255,255,.08); border-radius:999px; padding:2px 9px 2px 2px; }
/* F6.m: avatar clan piccolo (era width/height/font-size inline ripetuti in 3 punti) */
.coal-av--sm { width:22px; height:22px; font-size:.7rem; }
/* F6.m: azioni della panoramica coalizione a griglia 2 colonne (erano 4 bottoni
   full-width impilati — rilievo proprietario "spazio dei testi e dei pulsanti"). */
.coal-azioni { display:grid; grid-template-columns:1fr 1fr; gap:6px; margin-top:8px; }
.coal-azioni .dip-btn { width:100%; padding:9px 6px; font-size:.76rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.coal-azioni .dip-btn:only-child { grid-column:1 / -1; }
/* Sezioni espandibili Membri / Obiettivi della card coalizione */
.coal-sez { border:1px solid var(--bordo); border-radius:10px; background:rgba(255,255,255,.03); overflow:hidden; }
.coal-sez > summary { cursor:pointer; padding:8px 11px; font-weight:800; font-size:.84rem; color:var(--testo); list-style:none; display:flex; align-items:center; gap:6px; }
.coal-sez > summary::-webkit-details-marker { display:none; }
.coal-sez > summary::after { content:'▸'; margin-left:auto; opacity:.6; transition:transform .15s ease; }
.coal-sez[open] > summary::after { transform:rotate(90deg); }
.coal-sez-body { padding:2px 12px 9px; display:flex; flex-direction:column; gap:3px; }
.coal-riga { font-size:.84rem; color:var(--testo); display:flex; align-items:center; gap:6px; }
.coal-riga b { font-weight:700; }
.coal-ruolo { font-size:.7rem; opacity:.6; font-weight:600; }
/* Richieste d'ingresso in sospeso (F6.m: visibili ai leader di TUTTI i clan membri, ✓/✗ = voto) */
.coal-richieste { border:1px solid var(--bordo); border-radius:10px; background:rgba(216,163,58,.10); padding:6px 9px; margin-top:4px; }
.coal-richieste-tit { font-weight:800; font-size:.82rem; color:var(--testo); margin-bottom:5px; }
.coal-rich-riga { display:flex; align-items:center; gap:7px; padding:3px 0; }
.coal-rich-nome { flex:1; min-width:0; font-size:.85rem; color:var(--testo); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.coal-rich-si, .coal-rich-no { width:30px; height:30px; border-radius:8px; border:none; cursor:pointer; font-size:1rem; font-weight:800; color:#fff; flex-shrink:0; }
.coal-rich-si { background:#2e9e3f; }
.coal-rich-no { background:#c0392b; }
/* Espelli un membro (✖ accanto al nome, solo fondatore) */
.coal-espelli { margin-left:4px; border:none; background:rgba(192,57,43,.85); color:#fff; width:18px; height:18px; line-height:1; border-radius:50%; font-size:.7rem; cursor:pointer; padding:0; }
/* Pallino non-letti sul tab ⚔️ Coalizione */
.coal-tab-dot { position:absolute; top:3px; right:5px; width:8px; height:8px; border-radius:50%; background:#e23b2e; box-shadow:0 0 0 2px var(--bg-card); }
.chat-tab-btn {
  position: relative; flex: 1; height: 34px; padding: 0 8px;
  font-size: .8rem; font-weight: 700; border-radius: 999px; cursor: pointer;
  border: 1px solid rgba(201,162,39,.18); background: #221A11; color: #C6B794;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
/* Il segno della linguetta: lo mette il codice (`_iconeLinguetteConsiglio`) in uno slot
   suo, perché l'etichetta accanto è scritta da `data-i18n` via textContent. */
.chat-tab-btn .k-ctab-ico { display: inline-flex; flex: 0 0 auto; line-height: 0; }
.chat-tab-btn.attivo { background: rgba(201,162,39,.16); color: #E5C96B; border-color: rgba(201,162,39,.55); }
.chat-voti-dot {
  position: absolute; top: 1px; right: 4px; min-width: 15px; height: 15px;
  border-radius: 8px; background: #C24437; color: #fff; font-size: .64rem;
  font-weight: 800; display: flex; align-items: center; justify-content: center; padding: 0 4px;
}
/* Capitoli a FISARMONICA della Diplomazia: UN solo contenitore scrollabile (#chat-tab-diplo),
   barre <summary> in position:sticky (restano a schermo mentre scorri il loro capitolo). */
#chat-tab-diplo { display:flex; flex-direction:column; min-height:0; overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; }
/* 📜 I capitoli: la barra e' un TITOLO, e si legge come i capitoli del Manuale. */
.dip-cap { border:1px solid var(--k-border-tenue); border-radius:var(--k-r-md,14px);
  overflow:visible; background:var(--k-surface,#1E1710); flex:0 0 auto; }
.dip-cap > summary { list-style:none; cursor:pointer; padding:13px 14px;
  font-family:var(--k-font-display,Cinzel,serif); font-weight:700; font-size:.98rem;
  letter-spacing:.5px; color:var(--k-gold-bright,#E5C96B);
  background:linear-gradient(rgba(201,162,39,.09),rgba(201,162,39,.04)), var(--k-surface,#1E1710);
  display:flex; align-items:center; gap:10px; position:sticky; top:0; z-index:2;
  border-radius:var(--k-r-md,14px); }
.dip-cap > summary::-webkit-details-marker { display:none; }
.dip-cap > summary::before { content:''; width:0; height:0; flex:0 0 auto;
  border-left:5px solid currentColor; border-top:4px solid transparent;
  border-bottom:4px solid transparent; opacity:.6; transition:transform .16s ease; }
.dip-cap[open] > summary::before { transform:rotate(90deg); }
.dip-cap[open] > summary { border-bottom:1px solid var(--k-border-tenue);
  border-radius:var(--k-r-md,14px) var(--k-r-md,14px) 0 0; }
.dip-cap-body { padding:12px; display:flex; flex-direction:column; gap:9px; }
/* Sotto-titoli INTERNI ai capitoli: leggeri, NON gialli, per non sembrare capitoli */
/* ⚠️ UN SOLO occhiello per tutto il pannello: `.k-eyebrow` del kit — 10.5px, 800, 2.2px
   di spaziatura, oro. Erano quattro varianti leggermente diverse fra loro, e quattro
   modi di scrivere la stessa cosa si vedono come sciatteria anche senza saperli nominare. */
.dip-sub-titolo, .dip-crus-tit, .vass-slot, .dip-prop-eyebrow {
  font-size:10.5px; font-weight:800; letter-spacing:2.2px; text-transform:uppercase;
  color:var(--k-gold,#C9A227); opacity:1; }
/* Card proposta/voto — pulita e POP */
.dip-prop { display:flex; flex-direction:column; gap:8px; }
.dip-prop-tit { font-family: var(--k-font-display, Cinzel, serif); font-size: 1.02rem; font-weight: 700; color: var(--k-ink, #EFE6D2); line-height: 1.25; }
.dip-prop-eyebrow { margin-bottom: -4px; }
.dip-voto-barra { height: 8px; border-radius: 4px; background: rgba(0,0,0,.35); overflow: hidden; }
.dip-voto-barra i { display: block; height: 100%; border-radius: 4px; background: linear-gradient(90deg, #5F8A54, #7FA36F); }
.dip-voto-conteggi { display: flex; justify-content: space-between; font-size: .82rem; color: var(--testo); }
.dip-prop-meta { font-size:.72rem; color:var(--testo-2); display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.dip-vedi-celle { width:100%; font-weight:700; }
.dip-voto-azione { display:flex; gap:8px; }
.dip-voto-btn { flex:1; min-height:50px; padding:0 14px; border-radius:13px; border:none;
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  font-family:var(--k-font-display,Cinzel,serif); font-size:.92rem; font-weight:800;
  letter-spacing:1.4px; text-transform:uppercase; cursor:pointer; color:#fff;
  touch-action:manipulation; }
.dip-voto-btn.si { background: var(--k-grad-oro, linear-gradient(#D4AC2E,#BE9720));
  color: var(--k-su-oro,#241A07); box-shadow: var(--k-ombra-oro, 0 3px 0 #8F6F14); }
.dip-voto-btn.si:active { box-shadow:0 1px 0 #8F6F14; transform:translateY(2px); }
.dip-voto-btn.no { background: transparent; color: var(--k-danger-testo, #DE9C90);
  border: 1.5px solid rgba(169,63,53,.6); }
.dip-voto-fatto { display:flex; align-items:center; justify-content:center; gap:8px;
  padding:13px; border-radius:var(--k-r-sm,12px); font-family:var(--k-font-display,Cinzel,serif);
  font-weight:700; font-size:.92rem; letter-spacing:.6px; }
.dip-voto-fatto.si { background:rgba(44,138,61,.18); color:#5cd47a; }
.dip-voto-fatto.no { background:rgba(178,59,46,.18); color:#ef8a7d; }
/* Lucchetto GRANDE che oscura il tasto VOTA quando non puoi votare (tocca → motivo) */
.dip-voto-lock { width:100%; min-height:50px; padding:0 14px; border-radius:13px;
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  border:1.5px dashed var(--k-border-tenue); background:rgba(255,255,255,.04);
  color:var(--k-ink-muted); font-family:var(--k-font-display,Cinzel,serif);
  font-size:.88rem; font-weight:700; letter-spacing:1.2px; text-transform:uppercase;
  cursor:pointer; opacity:.9; }
.dip-voto-lock:active { opacity:1; }
.dip-card { padding: 12px; border-radius: var(--k-r-md,14px);
  background: var(--k-surface-2,#241C13); border: 1px solid var(--k-border-tenue); }
/* nome clan cliccabile (apre il pannello clan) */
/* ⚠️ Il nome di una Signoria e' cliccabile, ma resta un NOME: display, oro chiaro e un
   filo sotto — non la sottolineatura piena da collegamento ipertestuale, che in mezzo a
   una frase di cronaca la faceva sembrare un rimando web. */
.dip-link { font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  color: var(--k-gold-bright, #E5C96B); cursor: pointer;
  border-bottom: 1px solid rgba(201,162,39,.4); }
.dip-link:active { color: var(--k-gold, #C9A227); }
/* chi ha votato cosa */
.dip-voters { font-size: .74rem; color: var(--testo-2); line-height: 1.5; display: flex; flex-wrap: wrap; gap: 4px 10px; }
/* Gazzetta */
.dip-gazzetta { background: var(--k-surface-3,#211912); border:1px solid var(--k-border-tenue);
  border-radius:var(--k-r-sm,12px); padding:4px 12px; }
/* Le righe della gazzetta sono cronaca: prosa, non etichette. */
.dip-gz-riga { font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.92rem; color:var(--k-ink); padding:8px 2px;
  border-bottom:1px solid var(--k-border-tenue); line-height:1.45;
  display:flex; align-items:flex-start; gap:8px; }
.dip-gz-riga:last-child { border-bottom: 0; }
.dip-vuoto { text-align:center; color:var(--k-ink-muted); font-weight:400; font-size:.9rem;
  font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif); padding:12px 8px;
  display:flex; align-items:center; justify-content:center; gap:8px; }
/* Pannello membri: intestazioni di sezione (Consiglio ristretto / Altri membri)
   e sotto-gruppi (per anzianità / per zone) + box ℹ️ esplicativa. */
.dip-sez-row td { padding: 9px 10px; font-weight: 800; font-size: .82rem; color: var(--testo); background: rgba(201,162,39,.10); border-radius: 8px; text-transform: uppercase; letter-spacing: .03em; }
.dip-sez-row + tr td { padding-top: 8px; }
.dip-sub-row td { padding: 6px 4px 1px; font-weight: 700; font-size: .76rem; color: var(--testo-2); letter-spacing:.2px; }
.dip-info-btn { cursor: pointer; font-size: .92rem; opacity: .9; margin-left: 5px; }
.dip-info-box { background: var(--bg-card); border: 1px solid var(--bordo); border-radius: 10px; padding: 10px 12px; font-size: .8rem; line-height: 1.5; color: var(--testo); margin: 4px 2px 6px; }
.dip-info-box b { color: var(--oro); }
/* 🤝 LE SCHEDE DEL TAVOLO DELLE TRATTATIVE.
   ⚠️ Erano otto `style=` in linea per scheda dentro `_tavoloOpzioni` — il «vecchio stile»
   che l'owner vedeva qui (5 agosto). Portarle nel foglio non e' ordine per l'ordine: con
   la veste in linea, cambiare l'aspetto voleva dire rimettere mano a una funzione che
   costruisce sette schede diverse, e una sola sarebbe rimasta indietro. */
.tratt-card { border:1px solid var(--k-border-tenue); border-radius:var(--k-r-md,14px);
  margin-bottom:9px; overflow:hidden; background:transparent;
  transition:border-color .15s ease, background .15s ease; }
/* Accesa = scelta: bordo d'oro pieno e un velo caldo, perche' si deve capire a colpo
   d'occhio quali termini sono gia' sul tavolo. */
.tratt-card--on { border-color:var(--k-gold,#C9A227); background:rgba(201,162,39,.07); }
.tratt-card-h { width:100%; display:flex; align-items:center; gap:11px;
  padding:14px 13px; min-height:54px; background:transparent; border:0;
  color:var(--k-ink,#EFE6D2); cursor:pointer; text-align:left; font:inherit;
  touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
.tratt-card-h:active { transform:translateY(1px); }
.tratt-card-ico { flex:0 0 auto; display:inline-flex; align-items:center;
  color:var(--k-gold-bright,#E5C96B); }
.tratt-card-tit { flex:1; min-width:0; font-family:var(--k-font-display,Cinzel,serif);
  font-weight:700; font-size:1rem; letter-spacing:.3px; }
/* ⚠️ La pastiglia porta o un segno (✓ ＋) o un NUMERO: in Bebas i numeri si allineano fra
   una scheda e l'altra, ed e' il carattere dei numeri in tutto il gioco. */
.tratt-card-badge { flex:0 0 auto; font-family:var(--k-font-numeri,'Bebas Neue',sans-serif);
  font-size:1.05rem; letter-spacing:.5px; line-height:1.15; color:var(--k-ink-muted); }
.tratt-card--on .tratt-card-badge { color:var(--k-gold-bright,#E5C96B); }
.tratt-card-body { padding:0 13px 12px 47px; display:flex; flex-direction:column; gap:7px; }
.tratt-card-body[hidden] { display:none; }
/* ⚔️ IL TRADIMENTO — l'unica scheda del tavolo che non e' un TERMINE da proporre ma un
   ATTO che parte subito. Sta staccata dalle altre (riga sopra) e porta il rosso del
   pericolo: sotto ci sono le voci che si spuntano e si mandano insieme, qui c'e' una cosa
   che succede appena si conferma, e le due non vanno confuse a colpo d'occhio.
   ⚠️ Non ha `--on`: non c'e' uno stato acceso, perche' non c'e' niente da comporre. */
.tratt-card--pericolo { border-color:rgba(192,85,63,.55); margin-top:12px;
  border-top:1px solid var(--k-border-tenue); border-top-left-radius:0; border-top-right-radius:0; }
.tratt-card--pericolo .tratt-card-ico,
.tratt-card--pericolo .tratt-card-tit { color:var(--k-pericolo,#c0553f); }
/* ⚠️ `!important` a ragion veduta: `_segnoKit` avvolge il glifo in uno <span> con l'oro
   scritto IN LINEA, e uno stile in linea vince su qualsiasi regola del foglio. Senza questa
   riga le spade del tradimento resterebbero identiche a quelle delle due schede di guerra
   qui sopra — stesso segno, stesso colore, significati opposti. */
.tratt-card--pericolo .tratt-card-ico > span { color:var(--k-pericolo,#c0553f) !important; }
.tratt-card--pericolo .tratt-card-h:hover { background:rgba(192,85,63,.08); }
.tratt-card--pericolo .tratt-card-body { padding-top:0; }
/* Opzioni "Proponi trattativa" */
.dip-tratt-opt { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 10px; border-radius: 12px; border: 1px solid var(--bordo); border-bottom-width: 3px; background: var(--bg-card); color: var(--testo); cursor: pointer; font-size: .9rem; }
.dip-tratt-opt:active { transform: translateY(1px); border-bottom-width: 1px; }
.dip-tratt-opt:disabled { cursor: not-allowed; }
.dip-tratt-emoji { font-size: 1.4rem; flex-shrink: 0; width: 28px; text-align: center; }
/* ⚠️ IL CARATTERE DI LETTURA, non quello di sistema. Queste righe spiegano cosa fa
   un'opzione della trattativa — sono prosa, e la prosa del gioco si legge in EB Garamond
   (stessa correzione già fatta sull'esito del quiz). A .74rem in font di sistema erano
   anche il testo più piccolo di tutto il pannello. */
.dip-tratt-desc { font-family: var(--k-font-lettura, 'EB Garamond', Georgia, serif);
  font-size: .86rem; line-height: 1.4; color: var(--k-ink-muted, var(--testo-2)); font-weight: 400; }
/* Azione di trattativa (sotto-riquadro) nel passo "scelto il clan" */
.dip-azione { display: flex; flex-direction: column; gap: 6px; padding: 9px 10px; border-radius: 11px; border: 1px solid var(--bordo); background: rgba(255,255,255,.04); }
.dip-ult-label { display: flex; align-items: center; gap: 7px; font-size: .8rem; color: var(--testo); cursor: pointer; }
.dip-ult-label input { width: 16px; height: 16px; flex-shrink: 0; }
/* CTA "Proponi trattativa": grande e in evidenza */
.dip-cta { width: 100%; padding: 15px; font-size: 1.1rem; font-weight: 800; border-radius: 13px; border-bottom-width: 4px; letter-spacing: .2px; margin: 4px 0 2px; }
/* Coalizioni-entità: membri + chip invito */
.coal-membri { display: flex; flex-wrap: wrap; gap: 5px; }
.coal-membro { font-size: .76rem; background: rgba(255,255,255,.07); border: 1px solid var(--bordo); border-radius: 999px; padding: 2px 8px; color: var(--testo); white-space: nowrap; }
.coal-chip { font-size: .78rem; background: var(--bg-card); border: 1px solid var(--oro); border-radius: 999px; padding: 3px 9px; color: var(--testo); }
.coal-chip b { color: #ff8f8f; margin-left: 3px; }
/* Voto inline nella bolla chat — colori PIENI (leggibili anche su bolla oro) */
.dip-chat-vote { display:flex; gap:8px; margin-top:7px; }
.dip-chat-vote button { flex:1; min-height:40px; padding:0 10px; font-size:.82rem;
  font-weight:700; border-radius:var(--k-r-sm,12px); cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  border:1px solid; touch-action:manipulation; }
/* ⚠️ Erano verde e rosso PIENI: gli unici due bottoni del gioco con una tavolozza tutta
   loro, e in mezzo all'oro si vedevano da lontano come venuti da un'altra app. Ora sono
   l'accetto = oro (la strada che si vuole) e il rifiuto = ceralacca in contorno, come
   ovunque: `.k-btn--primario` e `.k-btn--pericolo`. */
.dip-chat-vote .si { border-color:transparent; background:var(--k-grad-oro, linear-gradient(#D4AC2E,#BE9720));
  color:var(--k-su-oro,#241A07); box-shadow:var(--k-ombra-oro, 0 3px 0 #8F6F14); font-weight:700; }
.dip-chat-vote .si:active { box-shadow:0 1px 0 #8F6F14; transform:translateY(2px); }
.dip-chat-vote .no { border-color:rgba(169,63,53,.6); background:transparent;
  color:var(--k-danger-testo,#DE9C90); }
/* Pillola notifica votazione v2 (F5.h): card oro kit con icona + titolo Cinzel +
   countdown piccolo. Posizione/z-index 9000 INVARIATI (soglia load-bearing). */
#dip-notifica {
  position: fixed; left: 50%; transform: translateX(-50%); bottom: calc(86px + env(safe-area-inset-bottom, 0px));
  z-index: 9000; display: flex; align-items: center; gap: 11px;
  background: var(--k-grad-oro, linear-gradient(#D4AC2E, #BE9720));
  color: var(--k-su-oro, #241A07);
  border: 1px solid rgba(201,162,39,.55); border-radius: 14px; padding: 10px 15px;
  font-size: .86rem; font-weight: 800;
  box-shadow: var(--k-ombra-oro, 0 3px 0 #8F6F14), 0 6px 20px rgba(0,0,0,.45);
  max-width: 92vw; cursor: pointer; animation: dipPop .35s ease;
}
#dip-notifica .dip-pill-ico { font-size: 1.35rem; line-height: 1; flex: 0 0 auto; }
#dip-notifica .dip-pill-corpo { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
#dip-notifica .dip-pill-corpo b {
  font-family: var(--k-font-display, 'Cinzel', Georgia, serif);
  font-size: .95rem; font-weight: 700; letter-spacing: .02em; white-space: nowrap;
}
#dip-notifica .dip-pill-corpo small { font-size: .74rem; font-weight: 700; opacity: .85; }
#dip-notifica .dip-notifica-x {
  font-weight: 800; font-size: 1.3rem; line-height: 1; opacity: 1;
  min-width: 38px; height: 38px; margin-left: 6px; flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 50%; background: rgba(0,0,0,.18); color: #241a00;
  -webkit-tap-highlight-color: transparent;
}
#dip-notifica .dip-notifica-x:active { background: rgba(0,0,0,.34); }
@keyframes dipPop { from { transform: translate(-50%, 14px); opacity: 0; } to { transform: translate(-50%, 0); opacity: 1; } }

/* ── 🔔 La seconda nuvoletta: LA CRONACA ─────────────────────────────────────
   Stessa forma e stesso posto della diplomazia, subito sotto. Non è una copia
   dello stile: eredita da #btn-chat-flot e cambia solo posizione e tinta, così
   se un giorno la nuvoletta cambia forma cambiano entrambe. */
#btn-cronaca {
  position: absolute; left: 12px; top: 78px; z-index: 6;
  width: 58px; height: 58px; border-radius: 50%;
  background: var(--k-btn-scuro, #2A2118);
  border: 1px solid rgba(201,162,39,.55);
  color: var(--k-ink, #E9DCC0);
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  box-shadow: 0 3px 0 rgba(0,0,0,.35), 0 4px 14px rgba(0,0,0,.45);
}
/* ⚠️ Era `font-size:1.5rem`, cioè una regola da EMOJI: col glifo del kit al suo posto
   quella riga non centrava più niente e lasciava il segno disallineato. Adesso è identica
   al bottone gemello `#btn-chat-flot` due regole sopra — due nuvolette uguali si vestono
   uguale, o si vede. */
#btn-cronaca .chat-flot-ico { display: flex; align-items: center; justify-content: center; line-height: 0; }
#btn-cronaca:active { transform: scale(.94); }
.spettatore-attivo #btn-cronaca { display: none; }
#cronaca-badge {
  position: absolute; top: -3px; right: -3px;
  min-width: 20px; height: 20px; padding: 0 5px;
  border-radius: 10px; background: var(--k-wax-bright, #C24437); color: #fff;
  font-size: .72rem; font-weight: 700; line-height: 20px; text-align: center;
  border: 1px solid rgba(0,0,0,.35); box-shadow: 0 1px 4px rgba(0,0,0,.5);
}
/* Le righe della cronaca: una frase per riga, quelle che ti riguardano in allarme. */
.cro-riga { display: flex; gap: 8px; align-items: flex-start; padding: 8px 10px;
  border-radius: 9px; background: var(--k-btn-scuro, rgba(0,0,0,.18)); margin-bottom: 5px; }
.cro-riga--allarme { background: rgba(169,63,53,.16); border: 1px solid rgba(169,63,53,.4); }
/* ⚠️⚠️ LA RIGA CHE PORTA SULLA CARTA DEVE DIRLO. Prima l'unico segno era `cursor:pointer`
   scritto a mano nell'HTML — e su un telefono il cursore NON ESISTE: il tocco c'era e non
   lo sapeva nessuno. L'avviso volante la sua etichetta ce l'aveva già («Vai sulla mappa»);
   la lista, che è dove le notizie restano, no. Qui basta un segno discreto e costante: il
   chevron a destra, che nel gioco vuole già dire «si apre». */
.cro-riga--vai { cursor: pointer; position: relative; padding-right: 22px; }
.cro-riga--vai::after { content: '›'; position: absolute; right: 9px; top: 50%;
  transform: translateY(-50%); color: var(--k-oro, #C9A227); font-size: 1.15rem;
  line-height: 1; opacity: .75; }
.cro-riga--vai:hover::after, .cro-riga--vai:focus-visible::after { opacity: 1; }
.cro-riga--vai:focus-visible { outline: 2px solid var(--k-oro, #C9A227); outline-offset: 2px; }
/* ⚠️⚠️ IL SEGNO NON È PIÙ UN CARATTERE. Dal 5 agosto qui dentro c'è un <svg> del
   corredo o un <img> disegnato dalla carta, e `font-size` su quelli NON FA NULLA: la
   regola di prima li avrebbe lasciati alla misura che chiede il codice, allineati alla
   linea di base, e di colore diverso fra kit (che eredita l'inchiostro del testo) e
   carta (che esce già dipinta). Colonna FISSA, così le frasi partono tutte dalla stessa
   ascissa: con `flex:0 0 auto` un segno più stretto sfrangia la lista. */
.cro-ico { flex: 0 0 20px; width: 20px; display: inline-flex; align-items: center;
  justify-content: center; line-height: 0; margin-top: 1px; color: #C9B282; }
.cro-ico > svg, .cro-ico > img { display: block; width: 18px; height: 18px; }
.cro-testo { flex: 1; font-size: .87rem; line-height: 1.35; }
.cro-quando { font-size: .72rem; opacity: .6; margin-top: 2px; }

/* 🚨 L'ALLARME — la notizia che arriva mentre giochi.
   ⚠️ NON è un toast: un toast dice «fatto» e sparisce, questo dice «stanno
   entrando a Mogliano» e devi poterci andare. Quindi è toccabile per intero, sta
   su più a lungo, e ha la sua ✕ per chi non vuole muoversi. */
.cro-allarme {
  position: fixed; top: 74px; left: 50%; transform: translateX(-50%);
  display: flex; align-items: flex-start; gap: 9px;
  width: min(420px, calc(100vw - 24px)); padding: 11px 12px;
  border-radius: 12px; cursor: pointer;
  background: linear-gradient(135deg, rgba(140,44,36,.97), rgba(103,30,25,.97));
  border: 1px solid rgba(233,178,86,.45);
  box-shadow: 0 8px 28px rgba(0,0,0,.5);
  color: #F7ECD8; font-size: .9rem; line-height: 1.32;
  animation: croAllarmeIn .28s cubic-bezier(.2,.9,.3,1.3);
}
/* ⛵ La buona notizia — verde d'alloro invece del rosso d'allarme. Un approdo
   atteso da giorni e un assalto non possono vestirsi uguale: se lo fanno, il
   giocatore impara a scartare tutti e due. (Owner, collaudo del 3 agosto.) */
.cro-allarme--lieta {
  background: linear-gradient(135deg, rgba(40,84,58,.97), rgba(24,58,40,.97));
  border-color: rgba(196,214,150,.45);
}
.cro-allarme--via { opacity: 0; transform: translate(-50%, -8px); transition: opacity .6s, transform .6s; }
/* ⚠️ Qui il fondo è un gradiente ROSSO (allarme) o VERDE (buona notizia): l'inchiostro
   chiaro della carta regge su tutti e due, e resta un gradino sotto il testo in
   grassetto — il segno non deve gridare più della frase. Guardato nell'anteprima, in
   tutt'e due gli stati, non dedotto. */
.cro-allarme-ico { flex: 0 0 21px; width: 21px; display: inline-flex; align-items: center;
  justify-content: center; line-height: 0; color: #E9DCC0; }
.cro-allarme-ico > svg, .cro-allarme-ico > img { display: block; width: 19px; height: 19px; }
.cro-allarme-txt { flex: 1; font-weight: 600; }
.cro-allarme-vai {
  display: block; margin-top: 3px; font-weight: 700; font-size: .8rem;
  color: var(--k-gold-bright, #E5C96B); text-decoration: underline;
}
.cro-allarme-x {
  flex: 0 0 auto; background: none; border: 0; color: rgba(247,236,216,.6);
  font-size: 1rem; line-height: 1; cursor: pointer; padding: 2px 0 2px 4px;
}
.cro-allarme-x:active { transform: scale(.9); }
@keyframes croAllarmeIn { from { opacity: 0; transform: translate(-50%, -14px); } }

/* ══ 🎰 LA RUOTA — owner, 5 agosto: «RENDI LA RUOTA nello stile del gioco. in particolare
   il pulsante in basso, con font corretto».
   ⚠️ Il difetto vero era proprio quello: il comando principale era un bottone dorato
   disegnato a mano nel font di SISTEMA, sotto un titolo in Cinzel. Ora è
   `.k-btn--primario` come ogni altro comando principale del gioco — stesso carattere,
   stessa spaziatura, stessa ombra sotto — e la ruota smette di essere l'unica schermata
   con una tavolozza propria (§0bis: un segno vale una cosa, e una cosa ha un segno solo).
   ⚠️ La veste sta QUI e non più in una decina di `style=` dentro `_costruisciModalRuota`:
   il modale si costruisce UNA volta sola e resta nel DOM, quindi con la veste in linea
   ritoccarla voleva dire ricostruirlo — cioè, in pratica, non ritoccarla mai. ══ */
.ruota-card {
  max-width: 340px; padding: 0; overflow: hidden; position: relative;
  color: var(--k-ink, #EFE6D2);
  background: linear-gradient(180deg, var(--k-surface, #1E1710), var(--k-bg, #16110C));
  border: 1px solid var(--k-border-forte, rgba(201,162,39,.45));
  border-radius: var(--k-r-md, 14px);
  box-shadow: var(--k-elev-3, 0 8px 32px rgba(0,0,0,.6));
}
.ruota-x { position: absolute; top: 8px; right: 8px; z-index: 5; }
.ruota-testa { padding: var(--k-s4, 16px) var(--k-s4, 16px) var(--k-s1, 4px); text-align: center; }
.ruota-titolo {
  margin: 0; color: var(--k-gold-bright, #E5C96B);
  font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  font-size: var(--k-t-xl, 17px); letter-spacing: 1px;
}
/* Il sottotitolo è prosa: si legge, quindi prende il carattere di lettura. */
.ruota-sub {
  font-family: var(--k-font-lettura, 'EB Garamond', Georgia, serif);
  font-size: .88rem; line-height: 1.4; color: var(--k-ink-muted, #B3A283); margin: 5px 0 0;
}
.ruota-scena { position: relative; width: 240px; height: 260px; margin: var(--k-s2, 8px) auto 0; }
.ruota-lancetta {
  position: absolute; top: -2px; left: 50%; transform: translateX(-50%);
  width: 0; height: 0; z-index: 3;
  border-left: 12px solid transparent; border-right: 12px solid transparent;
  border-top: 20px solid var(--k-gold-bright, #E5C96B);
  filter: drop-shadow(0 2px 4px rgba(0,0,0,.6));
}
/* ── Le cifre della ruota ──────────────────────────────────────────────────────
   Owner, 3 agosto: «la ruota della fortuna ha numeri col font sbagliato». Non era
   sbagliato: non ce n'era nessuno. La ruota è un SVG dentro un <img>, cioè un
   documento isolato che non vede né :root né gli @font-face di questo foglio — i
   suoi <text> cadevano sul serif di sistema. Le cifre sono uscite dall'immagine e
   vivono qui, dentro il riquadro che gira, così ereditano i caratteri veri.
   ⚠️ Posizione, corpo e colore li scrive _costruisciModalRuota in linea, derivati
   dalla stessa geometria degli spicchi: qui sta solo ciò che non dipende dal giro. */
.ruota-cifra {
  position: absolute; pointer-events: none; white-space: nowrap;
  font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  line-height: 1; letter-spacing: .01em;
}
.ruota-piede { padding: var(--k-s2, 8px) var(--k-s4, 16px) var(--k-s5, 20px); text-align: center; }
/* L'esito è una riga di premio: display, come i titoli che annunciano qualcosa. */
.ruota-esito {
  min-height: 26px; margin-bottom: var(--k-s2, 8px);
  font-family: var(--k-font-display, Cinzel, serif); font-weight: 700;
  font-size: 1rem; letter-spacing: .4px; color: var(--k-gold-bright, #E5C96B);
  display: flex; align-items: center; justify-content: center; gap: 7px;
}
/* ⚠️ «Il testo sotto dev'essere un pulsante, non un'etichetta» (owner, 6 agosto). Un
   `<button>` lo era gia', col suo gestore: a farlo sembrare una nota a margine era
   PROPRIO QUESTA REGOLA, che gli toglieva fondo e bordo e gli metteva la sottolineatura
   di un link a 0,78rem. Ora il bottone porta `k-btn k-btn--ghost k-btn--block` e qui
   resta la sola SPAZIATURA — il livello «ghost» e' quello giusto: un pulsante vero che
   non compete col dorato «Gira la ruota» sopra di lui.
   ⚠️ kit.css e' caricato DOPO stile.css: a parita' di specificita' vincono i `.k-*`.
   Rimettere qui `background`/`border`/`font-size` non servirebbe a niente e
   rimetterci `text-decoration` (che il kit non dichiara) rifarebbe il difetto. */
.ruota-pro { margin-top: var(--k-s2, 9px); }
/* ⚠️⚠️ L'AVVISO CHE PARTE UN VIDEO va a capo DA SOLO, e non per caso: `.k-btn` e' un
   inline-flex senza `wrap`, quindi in una riga sola su schermo stretto la coda
   schiaccerebbe l'etichetta invece di andare sotto. `flex-basis:100%` la manda in
   seconda riga sempre, e il padding verticale le fa spazio (il `min-height` del
   primario e' un pavimento, non un tetto). */
#btn-ruota-gira { flex-wrap: wrap; row-gap: 1px; padding-top: 8px; padding-bottom: 8px; }
/* ⚠️ `display:block` e non `inline-flex`: col flex ogni figlio prende il `gap`, e la
   parentesi aperta si staccava dal glifo — «(  ▷ guarda un video)». Qui il glifo scorre
   in linea col testo e si allinea da solo (`.k-ico` porta il suo `vertical-align`). */
.ruota-avviso {
  flex: 0 0 100%; display: block; text-align: center;
  font-family: var(--k-font); font-size: .72rem; font-weight: 600;
  text-transform: none; letter-spacing: normal; opacity: .82;
}
/* L'attesa del prossimo giro, nel piede: il segno e la parola sulla stessa linea di base. */
.ruota-attesa { display: inline-flex; align-items: center; gap: 5px; color: var(--k-ink-muted); }

/* ══ 🎟️🗺️ L'ATTERRAGGIO DELL'INVITO — `/invita/<codice>` (owner, 6 agosto 2026) ══════
   Riusa `.landing-hero` e `.landing-card`: è la stessa superficie pre-accesso, e una
   seconda cornice inventata qui divergerebbe da quella al primo ritocco.
   ⚠️ L'insegna dell'amico è PICCOLA e sta in una riga sola col suo nome: è la prova che
   qualcuno ti aspetta, non il soggetto della pagina — il titolo grande parla di chi legge
   («è arrivato il momento di creare la TUA Signoria»). */
/* 🏷️ L'intestazione del gioco, SOPRA la scheda e fuori da essa: dice su cosa sei
   atterrato prima di dirti chi ti ha invitato. La hero e tinta del colore dell'amico,
   quindi l'identita del gioco deve stare qui o non sta da nessuna parte. */
.k-inv-hero { flex-direction: column; gap: 18px; }
.k-inv-testata { display: flex; align-items: center; justify-content: center; }
.k-inv-testata span {
  display: flex; flex-direction: column; line-height: 1.15;
  font: 700 .78rem/1.15 var(--k-font-display, serif);
  letter-spacing: .12em; text-transform: uppercase;
  color: rgba(255,255,255,.72); text-shadow: 0 1px 6px rgba(0,0,0,.7);
}
.k-inv-testata b { font-size: 1.02rem; letter-spacing: .06em; color: #fff; }

.k-inv-card { max-width: 400px; }
.k-inv-da {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  margin: 0 0 18px; padding: 0 0 16px;
  border-bottom: 1px solid rgba(255,255,255,.14);
  font-size: .88rem; color: rgba(255,255,255,.85);
}
.k-inv-insegna {
  width: 40px; height: 40px; border-radius: 10px; object-fit: contain; flex: 0 0 auto;
  box-shadow: 0 2px 10px rgba(0,0,0,.35);
}
.k-inv-insegna--lettera {
  display: flex; align-items: center; justify-content: center;
  font: 800 20px/1 var(--k-font-display, serif);
}
.k-inv-cta { min-height: 54px; font-size: 1.1rem; letter-spacing: 1.1px; text-transform: uppercase; }

/* 📋 I TRE PASSI. ⚠️ Numerati e in quest'ordine perché l'ordine È la meccanica: si atterra
   sul web e si gioca in app, e l'invito si lega all'ACCOUNT — chi installa prima di
   accedere perde il legame e non se ne accorge. */
.k-inv-passi {
  list-style: none; margin: 20px 0 16px; padding: 0;
  text-align: left; display: flex; flex-direction: column; gap: 10px;
}
.k-inv-passi li { display: flex; align-items: flex-start; gap: 10px; font-size: .84rem; line-height: 1.45; }
.k-inv-passi b {
  flex: 0 0 auto; width: 21px; height: 21px; border-radius: 50%;
  background: rgba(201,162,39,.22); color: var(--k-gold-bright, #E5C96B);
  display: flex; align-items: center; justify-content: center;
  font: 700 12px/1 system-ui; margin-top: 1px;
}
.k-inv-passi span { color: rgba(255,255,255,.86); }

.k-inv-store { display: flex; gap: 10px; }
.k-inv-store .k-btn { flex: 1 1 0; min-width: 0; text-decoration: none; text-align: center; }
.k-inv-nota {
  margin: 16px 0 0; font-size: .74rem; line-height: 1.45;
  color: rgba(255,255,255,.62); text-align: center;
}

/* ═══ 🏰 IL FOGLIO DELLE TERRE ═════════════════════════════════════════════════
   ⚠️⚠️ IL CONTO ERA UNA RIGA SOLA — «Netto 12 su 40» — e l'owner l'ha bocciato: *«il
   contatore va fatto meglio, perché non è affatto chiaro»*. Non diceva cos'è un punto (la
   difesa di una cella: una roccaforte da 9 vale come nove campi), non diceva quante terre
   fossero, e non diceva quanto costa la sede — che si paga dalla stessa quota, quindi è la
   voce che sposta di più il conto.

   📏 LA BARRA È LA COSA CHE SI CAPISCE SENZA LEGGERE, ed è il motivo per cui esiste: un
   rapporto muto va interpretato, una barra piena no. Il numero in evidenza è QUANTO MANCA.
   ⚠️ La parola «netto» è sparita: non è una parola di gioco. */
.bott-testa { display:flex; align-items:flex-start; justify-content:space-between; gap:8px; }
.bott-nomi { min-width:0; }
.bott-nome { font-family:var(--k-font-display, Cinzel, serif); font-weight:700;
  font-size:1.02rem; line-height:1.2; color:var(--k-ink-forte,#F2E8D2); margin-top:2px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bott-x { cursor:pointer; flex-shrink:0; display:inline-flex; padding:2px; opacity:.75; }

/* La quota: barra + due righe di testo che la spiegano. */
.bott-quota { margin-top:4px; }
.bott-barra { height:10px; border-radius:5px; background:var(--k-track,#332818);
  overflow:hidden; border:1px solid rgba(0,0,0,.35); }
/* ⚠️ ORO, non ceralacca: la barra della difesa (`.k-dif-bar`) è rossa perché misura un
   muro che si consuma, questa misura una quota che si RIEMPIE — è un guadagno, e il rosso
   la faceva leggere come un pericolo. Verde quando è coperta, che è il traguardo. */
.bott-barra > i { display:block; height:100%; border-radius:5px;
  background:var(--k-grad-oro, linear-gradient(#D4AC2E,#BE9720));
  transition:width .18s ease-out; }
.bott-barra.ok > i { background:linear-gradient(#7FA36F, #5F8A54); }
.bott-quota-riga { display:flex; align-items:baseline; justify-content:space-between;
  gap:10px; margin-top:6px; }
.bott-quota-eti { font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.82rem; color:var(--k-ink-muted,#B3A283); min-width:0; }
.bott-quota-num { flex:0 0 auto; font-family:var(--k-font-display, Cinzel, serif);
  font-weight:700; font-size:1rem; color:var(--k-gold-bright,#E5C96B); }
.bott-quota-num.ok { color:var(--k-green-soft,#7FA36F); }

/* Le voci del conto: etichetta a sinistra, valore a destra. Stessa forma delle liste del
   kit (`k-riga`), con i filetti fra le righe. */
.bott-conto { display:flex; flex-direction:column;
  padding:2px 10px; border-radius:var(--k-r-xs,9px);
  background:var(--k-surface-3,#211912);
  border:1px solid var(--k-border-tenue, rgba(201,162,39,.20)); }
.bott-riga { display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:7px 0; font-size:.82rem; line-height:1.3; color:var(--k-ink,#EFE6D2);
  border-bottom:1px solid rgba(201,162,39,.10); }
.bott-riga:last-child { border-bottom:none; }
.bott-riga .bott-eti { display:flex; align-items:center; gap:6px; min-width:0;
  overflow:hidden; text-overflow:ellipsis; }
.bott-riga .bott-eti svg { flex:0 0 auto; opacity:.85; }
.bott-riga .bott-val { flex:0 0 auto; font-weight:700; font-variant-numeric:tabular-nums; }
/* 👑 La capitale: la voce più cara, e la sola che si accende e si spegne toccandola sulla
   carta. Spenta = gliela stai rendendo, accesa = te la tieni.
   ⚠️ La chiave CSS resta `bott-sede` — è un identificatore, e §0bis dice che cambiano le
   parole, non i nomi. Nel testo la parola «sede» non compare più. */
.bott-riga.bott-sede { opacity:.6; }
.bott-riga.bott-sede.presa { opacity:1; color:var(--k-gold-bright,#E5C96B); }
.bott-riga.bott-rendo { color:var(--k-danger-testo,#DE9C90); }
/* 🥜 Il tesoro: l'unica voce del conto che DÀ invece di togliere, e l'unica in verde. Il
   rosso qui accanto è quel che rendi, l'oro è quel che paghi: tre segni, tre versi. */
.bott-riga.bott-tesoro { color:var(--k-ok-testo,#8FBF7F); }

.bott-invito { font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.79rem; line-height:1.4; color:var(--k-ink-muted,#B3A283); }
.bott-azione { width:100%; }
.bott-ok:disabled { opacity:.45; }
/* 🏰 «Le altre strade»: una via d'uscita, non un comando. Sta sotto la conferma e si legge
   come un link — se avesse il peso di un bottone competerebbe con la scelta principale,
   che è accettare la proposta del diplomatico. */
.bott-altre { display:block; width:100%; margin:2px 0 0; padding:6px 0; border:0;
  background:none; cursor:pointer; text-decoration:underline; text-underline-offset:3px;
  font-family:var(--k-font-lettura,'EB Garamond',Georgia,serif);
  font-size:.78rem; color:var(--k-ink-muted,#B3A283); }
