/* Stile A «Tomo miniato» (approvato da Lorenzo il 15/10: «così meglio»). Comune a tutte le pagine.
   Cuoio scuro della legatura con grana e filetto impresso, pergamena per tutto ciò che si legge, foglia d'oro;
   la grammatica del codice miniato: capolettera onciale d'oro su lapislazzuli, rubrica vermiglia (¶), glosse a margine
   con la manicula (☞) per i «perché?» e per la Guida. Caratteri (17/10, «più da gioco»): Grenze (titoli, logo, nomi, capolettera), Signika (interfaccia: bottoni,
   rubriche, etichette, numeri), Literata (testo). Vedi web/font/font.css. Riferimento: prove/campione/A-*.png. */
@import url('/font/font.css');

:root {
  --notte: #120b07;
  --cuoio: #24170e;
  --oro: #cfa851;
  --oro-chiaro: #f0d792;
  --oro-scuro: #7a5a22;
  --pergamena: #eddfbf;
  --pergamena-2: #dcc697;
  --inchiostro: #2b1a10;
  --inchiostro-2: #5c4430;
  --rubrica: #a3301f;
  --rubrica-chiara: #d9644c;
  --lapis: #2d4c86;
  --lapis-scuro: #1b2f57;
  --lapis-chiaro: #8fb0e6;
  --malachite: #3f6b45;
  --malachite-chiara: #8fbf5a;
  /* --serif-titolo ha il nome di quando era Cinzel: oggi è il carattere dell'INTERFACCIA (bottoni, tab, rubriche,
     etichette, numeri). I titoli veri (logo, h1, nomi delle carte) stanno in --titolo. */
  --serif-titolo: 'Signika', 'Trebuchet MS', sans-serif;
  --interfaccia: var(--serif-titolo);
  --titolo: 'Grenze', Georgia, serif;
  --serif: 'Literata', Georgia, serif;
  --onciale: 'Grenze', Georgia, serif;
  /* foglia d'oro da titolo di gioco: gradiente, contorno scuro di 1 px, ombra stretta e dura, alone morbido */
  --oro-foglia: linear-gradient(180deg, #fff6d0 0%, #f3d27a 38%, #b8812b 58%, #7a4f17 70%, #e9c46a 100%);
  --oro-rilievo: drop-shadow(1px 0 0 #2a1606) drop-shadow(-1px 0 0 #2a1606) drop-shadow(0 -1px 0 #2a1606) drop-shadow(0 1px 0 #2a1606) drop-shadow(0 3px 0 #1a0d04) drop-shadow(0 6px 8px rgba(0,0,0,.7));
  --oro-rilievo-piccolo: drop-shadow(0 1px 0 #1a0d04) drop-shadow(0 2px 3px rgba(0,0,0,.65));
  /* nomi su pergamena: inchiostro bruno «inciso», con la luce sotto */
  --inciso: 0 1px 0 rgba(255,246,222,.75), 0 -1px 0 rgba(60,32,10,.18);
  --inchiostro-titolo: #3a2312;
  /* nomi di prima (pagine non ancora rifatte, moduli comuni) */
  --testo: var(--serif);
  --vello: var(--pergamena);
  --vello-2: var(--pergamena-2);
  --vello-chiaro: #f6ecd2;
  --seppia: var(--inchiostro-2);
  --filo: #b49a62;
  --verderame: var(--malachite);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
html, body { margin: 0; }
body {
  background: var(--notte); color: var(--pergamena);
  font-family: var(--serif); font-size: 17px; line-height: 1.42;
  -webkit-font-smoothing: antialiased;
}
button { font: inherit; color: inherit; cursor: pointer; }
button:disabled { cursor: default; }
input, select, textarea { font: inherit; }
:focus-visible { outline: 2px solid var(--oro-chiaro); outline-offset: 3px; }
[hidden] { display: none !important; }
a { color: var(--oro-chiaro); }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }

/* ---------- cuoio della legatura: grana incrociata + cornice impressa a secco ---------- */
.cuoio {
  background:
    radial-gradient(ellipse at 50% -10%, rgba(207,168,81,.13), transparent 55%),
    radial-gradient(ellipse at 50% 120%, rgba(0,0,0,.75), transparent 60%),
    linear-gradient(180deg, #1d130c, var(--notte));
  background-attachment: fixed;
  min-height: 100vh;
}
.cuoio::before {
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0; opacity: .5;
  background:
    repeating-linear-gradient(45deg, rgba(255,255,255,.012) 0 2px, transparent 2px 6px),
    repeating-linear-gradient(-45deg, rgba(0,0,0,.2) 0 1px, transparent 1px 5px);
}
/* (17/10) la cornice impressa sta SOTTO i fogli (z-index -1, sopra il fondo del cuoio): a z-index 0 passava sopra la
   pergamena, e la sua riga in basso tagliava a metà la riga di testo che ci scorreva sotto (privacy, crediti) */
.cuoio::after {
  content: ""; position: fixed; inset: 10px; pointer-events: none; z-index: -1;
  border: 1px solid rgba(207,168,81,.22);
  box-shadow: inset 0 0 0 5px rgba(0,0,0,.25), inset 0 0 0 6px rgba(207,168,81,.12);
}
/* il dipinto in alto che sfuma nel cuoio */
.sfondo-dipinto {
  position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background: var(--dipinto, url(/img/sfondo.webp)) center 30% / cover no-repeat; opacity: .22; filter: saturate(.85);
  -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 80%); mask-image: linear-gradient(180deg, #000 0%, transparent 80%);
}

/* ---------- lastra di cuoio con filetto d'oro (i pannelli sopra la scena) ---------- */
.lastra {
  background: linear-gradient(180deg, rgba(42,28,17,.97), rgba(22,14,9,.97));
  border: 1px solid var(--oro-scuro);
  box-shadow: inset 0 0 0 4px rgba(18,11,7,.95), inset 0 0 0 5px rgba(207,168,81,.38), 0 18px 40px rgba(0,0,0,.6);
  color: var(--pergamena);
}

/* ---------- pergamena ---------- */
.pergamena {
  position: relative; color: var(--inchiostro);
  background:
    radial-gradient(ellipse at 50% 35%, rgba(255,250,235,.55), transparent 70%),
    radial-gradient(ellipse at 0% 0%, rgba(120,80,30,.22), transparent 40%),
    radial-gradient(ellipse at 100% 100%, rgba(120,80,30,.28), transparent 45%),
    linear-gradient(180deg, var(--pergamena), var(--pergamena-2));
  box-shadow: inset 0 0 50px rgba(110,70,25,.3), 0 16px 36px rgba(0,0,0,.5);
}
.pergamena::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; mix-blend-mode: multiply; opacity: .45; border-radius: inherit; z-index: 0;
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='f'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' seed='11'/><feColorMatrix values='0 0 0 0 .4 0 0 0 0 .28 0 0 0 0 .14 0 0 0 .5 0'/></filter><rect width='100%' height='100%' filter='url(%23f)'/></svg>");
}
.pergamena > * { position: relative; }
/* il foglio incorniciato: filetti interni e angoli d'oro (gli angoli sono <svg class="ang aN">) */
.foglio {
  border: 1px solid #8f7444;
  box-shadow: inset 0 0 0 4px rgba(237,223,191,.6), inset 0 0 0 5px rgba(122,90,34,.5), inset 0 0 60px rgba(110,70,25,.32), 0 18px 40px rgba(0,0,0,.55);
}
.ang { position: absolute !important; width: 30px; height: 30px; color: #8f6c2c; pointer-events: none; }
.ang.a1 { left: 7px; top: 7px; } .ang.a2 { right: 7px; top: 7px; transform: scaleX(-1); }
.ang.a3 { left: 7px; bottom: 7px; transform: scaleY(-1); } .ang.a4 { right: 7px; bottom: 7px; transform: scale(-1); }

/* ---------- titoli in foglia d'oro ---------- */
.oro-titolo {
  font-family: var(--titolo); font-weight: 800; letter-spacing: .01em; line-height: 1.1;
  color: transparent; background: var(--oro-foglia);
  -webkit-background-clip: text; background-clip: text; filter: var(--oro-rilievo);
}
.fregio { display: block; width: 220px; height: 18px; color: var(--oro); }

/* ---------- bottoni: lastra di cuoio, filetto d'oro, rombi ai lati ---------- */
.bottone {
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  padding: 11px 24px; border: 1px solid var(--oro-scuro);
  background: linear-gradient(180deg, rgba(60,41,24,.95), rgba(28,19,12,.97));
  color: var(--oro-chiaro); text-decoration: none;
  font-family: var(--serif-titolo); font-weight: 700; letter-spacing: .06em; font-size: 15px; white-space: nowrap; line-height: 1.15;
  text-transform: uppercase;
  box-shadow: inset 0 0 0 3px rgba(18,11,7,.9), inset 0 0 0 4px rgba(207,168,81,.35), 0 6px 18px rgba(0,0,0,.45);
  transition: transform .15s ease, box-shadow .2s ease, color .2s ease, border-color .2s ease;
}
.bottone::before, .bottone::after {
  content: ""; position: absolute; top: 50%; width: 8px; height: 8px;
  background: var(--oro); transform: translateY(-50%) rotate(45deg); box-shadow: 0 0 0 2px var(--notte);
}
.bottone::before { left: -5px; }
.bottone::after { right: -5px; }
.bottone svg { width: 20px; height: 20px; flex: none; color: var(--oro); }
.bottone:hover:not(:disabled) {
  color: #fff6d8; border-color: var(--oro);
  box-shadow: inset 0 0 0 3px rgba(18,11,7,.9), inset 0 0 0 4px rgba(240,215,146,.7), 0 0 22px rgba(207,168,81,.3), 0 6px 18px rgba(0,0,0,.5);
  transform: translateY(-1px);
}
.bottone:active:not(:disabled) { transform: translateY(1px); }
.bottone:disabled { opacity: .42; cursor: not-allowed; }
.bottone.primario { background: linear-gradient(180deg, #8d6c2d, #5a4019); color: #fff4d3; border-color: var(--oro-chiaro); }
.bottone.primario svg { color: #fff1c6; }
.bottone.piccolo { padding: 7px 14px; font-size: 13px; letter-spacing: .05em; gap: 7px; }
.bottone.piccolo::before, .bottone.piccolo::after { width: 6px; height: 6px; }
.bottone.piccolo::before { left: -3px; } .bottone.piccolo::after { right: -3px; }
.bottone.piccolo svg { width: 16px; height: 16px; }
.bottone.grande { padding: 15px 30px; font-size: 18px; }
/* bottone su pergamena: inchiostro e filetto bruno */
.bottone.carta {
  background: linear-gradient(180deg, rgba(255,250,235,.55), rgba(220,198,151,.6)); color: var(--inchiostro); border-color: #8f7444;
  box-shadow: inset 0 0 0 3px rgba(237,223,191,.7), inset 0 0 0 4px rgba(122,90,34,.35), 0 3px 8px rgba(60,35,10,.25);
}
.bottone.carta::before, .bottone.carta::after { background: #8f6c2c; box-shadow: 0 0 0 2px var(--pergamena); }
.bottone.carta svg { color: var(--inchiostro-2); }
.bottone.carta:hover:not(:disabled) { color: var(--inchiostro); border-color: var(--oro-scuro); box-shadow: inset 0 0 0 3px rgba(237,223,191,.7), inset 0 0 0 4px rgba(122,90,34,.6), 0 4px 12px rgba(60,35,10,.3); }
.bottone.rubrica { background: linear-gradient(180deg, #9a3320, #6a1f13); color: #fff1e0; border-color: #e3a07a; }
/* link-bottone testuale */
.testuale { background: none; border: 0; padding: 0; color: var(--rubrica); text-decoration: underline; text-underline-offset: 3px; font: inherit; cursor: pointer; }
.su-cuoio .testuale, .lastra .testuale { color: var(--oro-chiaro); }
/* (17/10) ma su un foglio di pergamena dentro una lastra torna all'inchiostro rosso: l'oro chiaro sulla pergamena chiara
   (i mostri «In gioco» nel pannello del master) aveva un contrasto di 1,1:1 */
.lastra .pergamena .testuale, .lastra .m-corpo .testuale { color: var(--rubrica); }

/* ---------- capolettera miniata: lettera onciale d'oro su campo di lapislazzuli con filigrana ---------- */
.capolettera {
  flex: none; position: relative; isolation: isolate;
  width: 84px; height: 84px; display: grid; place-items: center;
  font-family: var(--onciale); font-size: 60px; line-height: 1;
}
.capolettera > span {
  position: relative; z-index: 1; color: transparent; padding-bottom: 4px;
  background-image: linear-gradient(180deg, #fff1c0 0%, #e6c26a 45%, #a47a2a 78%, #f0d48a 100%);
  -webkit-background-clip: text; background-clip: text; filter: drop-shadow(0 2px 0 rgba(0,0,0,.85));
}
.capolettera::before {
  content: ""; position: absolute; inset: 0; z-index: 0;
  background:
    radial-gradient(circle at 30% 25%, rgba(143,176,230,.35), transparent 55%),
    repeating-radial-gradient(circle at 50% 50%, rgba(240,215,146,.0) 0 6px, rgba(240,215,146,.13) 6px 7px),
    linear-gradient(135deg, var(--lapis), var(--lapis-scuro));
  border: 2px solid var(--oro);
  box-shadow: inset 0 0 0 3px var(--lapis-scuro), inset 0 0 0 4px rgba(240,215,146,.55), 0 6px 18px rgba(0,0,0,.5);
}
.capolettera::after {
  content: ""; position: absolute; left: 50%; top: 100%; width: 2px; height: 22px; transform: translateX(-50%);
  background: linear-gradient(180deg, var(--oro), transparent);
}
.capolettera.piccola { width: 56px; height: 56px; font-size: 38px; }
.capolettera.piccola::after { height: 14px; }
/* capolettera dentro un testo su pergamena (il racconto, il primo paragrafo di un foglio) */
.miniato::first-letter { font-family: var(--onciale); font-style: normal; font-size: 2.5em; float: left; line-height: .85; margin: 4px 4px 0 0; color: var(--lapis); }
/* (17/10: margine 4 px, non 8: con le lettere strette, «I», «L», il capolettera sembrava staccato dalla parola) */

/* ---------- rubrica vermiglia con pilcrow ---------- */
.rubrica { margin: 14px 0 7px; font-family: var(--serif-titolo); font-size: 14px; letter-spacing: .12em; text-transform: uppercase; color: var(--rubrica); font-weight: 600; display: flex; align-items: center; gap: 8px; }
.rubrica::before { content: "¶"; font-family: var(--serif); font-size: 18px; line-height: 1; }
.rubrica::after { content: ""; flex: 1; height: 1px; background: rgba(163,48,31,.3); }
.su-cuoio .rubrica, .lastra > .rubrica { color: var(--rubrica-chiara); }
.su-cuoio .rubrica::after, .lastra > .rubrica::after { background: rgba(217,100,76,.3); }
/* (un bottone rosso, .bottone.rubrica, non è una rubrica: niente pilcrow nel rombo di sinistra, e quello di destra resta
   un rombo e non diventa un filetto. «Togli questo luogo» nell'editor delle campagne) */
.bottone.rubrica::before, .bottone.rubrica::after { content: ""; height: 8px; font-size: 0; background: var(--oro); }
.bottone.piccolo.rubrica::before, .bottone.piccolo.rubrica::after { height: 6px; }

/* ---------- il «perché?»: parola sottolineata a puntini, glossa a margine con la manina ---------- */
.perche { position: relative; cursor: help; }
.perche-segno { text-decoration: underline dotted rgba(163,48,31,.75); text-underline-offset: 4px; text-decoration-thickness: 1.5px; }
.glossa {
  position: absolute; z-index: 60; width: 300px;
  padding: 14px 16px 14px 18px;
  color: var(--inchiostro); font-family: var(--serif); font-size: 16px; line-height: 1.38; text-align: left;
  font-variant: normal; letter-spacing: normal; font-style: normal; font-weight: 400; white-space: normal;
  background: linear-gradient(180deg, #f6ecd2, #e9d6aa);
  border: 1px solid #9a7a3c; border-left: 4px solid var(--rubrica);
  box-shadow: 0 14px 34px rgba(0,0,0,.55), inset 0 0 22px rgba(130,90,30,.18);
}
.glossa .mano { font-size: 22px; color: var(--rubrica); line-height: 1; vertical-align: -2px; margin-right: 6px; font-family: var(--serif); }
.glossa h4 { margin: 0 0 6px; font-family: var(--serif-titolo); font-size: 15px; letter-spacing: .04em; color: var(--rubrica); font-weight: 700; line-height: 1.25; }
.glossa .somma { display: grid; grid-template-columns: 48px 1fr; gap: 2px 8px; margin: 6px 0 8px; font-variant-numeric: lining-nums tabular-nums; }
.glossa .somma b { font-family: var(--serif-titolo); text-align: right; color: var(--rubrica); font-size: 17px; font-weight: 700; font-variant-numeric: tabular-nums lining-nums; }
.glossa .somma span { color: var(--inchiostro); }
.glossa .somma .tot { border-top: 1px solid rgba(43,26,16,.4); padding-top: 3px; }
.glossa .somma b.tot { color: var(--inchiostro); }
.glossa p { margin: 0; color: var(--inchiostro-2); font-size: 15px; }
.glossa p + p { margin-top: 6px; }
.glossa .pagina-srd { display: block; margin-top: 6px; font-size: 13px; font-style: italic; color: #8a7458; }
/* la glossa volante (una sola nella pagina, posata da glossa.js accanto alla parola) */
.glossa.volante { position: fixed; pointer-events: none; }
.glossa.volante::before {
  content: ""; position: absolute; width: 14px; height: 14px; transform: rotate(45deg);
  background: #f6ecd2; border: 1px solid #9a7a3c; left: var(--fx, 30px);
}
.glossa.volante[data-lato="sotto"]::before { top: -8px; border-right: 0; border-bottom: 0; }
.glossa.volante[data-lato="sopra"]::before { bottom: -8px; border-left: 0; border-top: 0; background: #ead8ae; }

/* ---------- nastro di lapislazzuli a coda di rondine ---------- */
.nastro {
  position: relative; display: inline-block; padding: 7px 22px 9px; white-space: nowrap;
  font-family: var(--serif-titolo); font-weight: 700; font-size: 13.5px; letter-spacing: .1em; color: var(--oro-chiaro);
  background: linear-gradient(180deg, #3a5fa3, var(--lapis-scuro)); border: 1px solid var(--oro);
  box-shadow: inset 0 0 0 2px var(--lapis-scuro), inset 0 0 0 3px rgba(240,215,146,.45), 0 8px 18px rgba(0,0,0,.55);
  z-index: 3;
}
.nastro::before, .nastro::after {
  content: ""; position: absolute; top: 8px; width: 16px; height: 100%; z-index: -1; background: var(--lapis-scuro); border: 1px solid var(--oro-scuro);
}
.nastro::before { left: -12px; clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%, 40% 50%); }
.nastro::after { right: -12px; clip-path: polygon(0 0, 100% 0, 60% 50%, 100% 100%, 0 100%); }
.nastro.rosso { background: linear-gradient(180deg, #a8402b, #6a1f13); }
.nastro.rosso::before, .nastro.rosso::after { background: #5a1a10; }

/* ---------- carta ad arco (classi, specie, avventure) ---------- */
.carte-arco { container-type: inline-size; }
.carta-arco {
  /* --r = metà della larghezza della carta: l'arco è un semicerchio (la pagina lo calcola coi cqw della sua griglia).
     --rv = quanto scende l'arco: di base uguale a --r (tutto tondo); più piccolo = arco ribassato, più posto per le teste */
  position: relative; display: flex; flex-direction: column; min-height: 0; text-align: left;
  border-radius: var(--r, 120px) var(--r, 120px) 4px 4px / var(--rv, var(--r, 120px)) var(--rv, var(--r, 120px)) 4px 4px;
  background: #1a110a; color: inherit; padding: 0;
  border: 1px solid rgba(207,168,81,.45);
  box-shadow: 0 0 0 5px rgba(18,11,7,.95), 0 0 0 6px rgba(207,168,81,.22), 0 22px 40px rgba(0,0,0,.6);
  cursor: pointer; outline: none;
  transition: transform .2s ease, box-shadow .25s ease;
}
.carta-arco:hover, .carta-arco:focus-visible { transform: translateY(-3px); }
.carta-arco:focus-visible { box-shadow: 0 0 0 5px rgba(18,11,7,.95), 0 0 0 7px var(--oro-chiaro), 0 22px 40px rgba(0,0,0,.6); }
.carta-arco .arco { position: relative; flex: 1 1 auto; min-height: 0; overflow: hidden; border-radius: inherit; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.carta-arco .arco::after {
  content: ""; position: absolute; inset: 8px 8px 0; border: 1px solid rgba(240,215,146,.4); border-bottom: 0;
  border-radius: calc(var(--r, 120px) - 8px) calc(var(--r, 120px) - 8px) 0 0 / calc(var(--rv, var(--r, 120px)) - 8px) calc(var(--rv, var(--r, 120px)) - 8px) 0 0;
  box-shadow: inset 0 -40px 40px -20px rgba(20,12,6,.75);
}
.carta-arco .arco img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; display: block; filter: saturate(.92) brightness(.92); }
.carta-arco .testo { flex: none; display: flex; flex-direction: column; padding: 14px 16px 12px; border-top: 2px solid var(--oro-scuro); border-radius: 0 0 3px 3px; box-shadow: inset 0 0 40px rgba(110,70,25,.3); }
.carta-arco h2, .carta-arco h3, .carta-arco .titolo-carta { display: block; margin: 0 0 4px; font-family: var(--titolo); font-weight: 800; font-size: 23px; letter-spacing: .01em; color: var(--inchiostro-titolo); text-shadow: var(--inciso); line-height: 1.1; }
.carta-arco h2::first-letter, .carta-arco h3::first-letter, .carta-arco .titolo-carta::first-letter { color: var(--rubrica); }
.carta-arco .frase { display: block; margin: 0 0 8px; font-family: var(--serif-titolo); font-weight: 400; font-size: 12.5px; line-height: 1.3; color: var(--inchiostro-2); }
.carta-arco ul { margin: 0 0 10px; padding: 0; list-style: none; font-size: 14.5px; line-height: 1.28; color: var(--inchiostro); }
.carta-arco li { position: relative; padding-left: 15px; margin-bottom: 4px; }
.carta-arco li::before { content: ""; position: absolute; left: 1px; top: .5em; width: 6px; height: 6px; background: var(--rubrica); transform: rotate(45deg); }
.carta-arco.scelta { border-color: var(--oro-chiaro); box-shadow: 0 0 0 5px rgba(18,11,7,.95), 0 0 0 7px var(--oro), 0 0 38px rgba(207,168,81,.38), 0 22px 40px rgba(0,0,0,.6); }
.carta-arco.scelta .arco img { filter: none; }
.carta-arco.scelta .testo { border-top-color: var(--oro); }
.carta-arco > .nastro { position: absolute; left: 50%; top: -14px; transform: translateX(-50%); }
.chiave-volta {
  position: absolute; z-index: 3; left: 50%; top: -9px; width: 18px; height: 18px; transform: translateX(-50%) rotate(45deg);
  background: linear-gradient(135deg, #f0d792, #a47a2a); border: 1px solid #5a4019; box-shadow: 0 0 0 3px rgba(18,11,7,.95), 0 3px 8px rgba(0,0,0,.6);
}
.difficolta { margin-top: auto !important; display: flex; align-items: center; gap: 8px; padding-top: 8px; border-top: 1px solid rgba(92,68,48,.3); font-family: var(--serif-titolo); font-weight: 600; font-size: 11.5px; color: var(--inchiostro-2); text-transform: uppercase; letter-spacing: .07em; }
.gemme { display: inline-flex; gap: 4px; }
.gemme i { width: 10px; height: 10px; transform: rotate(45deg); border: 1.5px solid #8a6a32; background: rgba(255,250,235,.4); }
.difficolta[data-livello="1"] .gemme i:nth-child(-n+1),
.difficolta[data-livello="2"] .gemme i:nth-child(-n+2),
.difficolta[data-livello="3"] .gemme i:nth-child(-n+3) { background: linear-gradient(135deg, #c0412b, #7d2214); border-color: #5e1a0f; }

/* ---------- medaglione (ritratto tondo) ---------- */
/* col ritratto dentro (<span class="medaglione"><img></span>) web/stile/fuochi.js lo ingrandisce sul viso */
.medaglione {
  width: 64px; height: 64px; border-radius: 50%; object-fit: cover; object-position: 50% 12%; flex: none; display: grid; place-items: center;
  border: 2px solid var(--oro-scuro); box-shadow: 0 0 0 3px rgba(237,223,191,.7), 0 0 0 4px rgba(122,90,34,.5);
  background: radial-gradient(circle at 40% 35%, #3a5fa3, var(--lapis-scuro));
  font-family: var(--onciale); font-size: 30px; color: var(--oro-chiaro); overflow: hidden;
}
.lastra .medaglione, .su-cuoio .medaglione { border-color: var(--oro); box-shadow: 0 0 0 3px rgba(18,11,7,.95), 0 0 0 4px rgba(207,168,81,.5), 0 0 22px rgba(207,168,81,.3); }
.medaglione:has(> img) { position: relative; }
.medaglione > img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 12%; }
.medaglione.mostro { background: radial-gradient(circle at 40% 35%, #6a2417, #2a0d08); color: #f0c7a8; border-color: #7d2a1c; }

/* ---------- sigillo (timbro rosso inclinato) ---------- */
.sigillo-rosso {
  display: inline-block; padding: 3px 9px; transform: rotate(-4deg);
  font-family: var(--serif-titolo); font-size: 11.5px; letter-spacing: .06em; color: var(--rubrica); border: 1.5px solid var(--rubrica);
  background: rgba(163,48,31,.06); white-space: nowrap;
}

/* ---------- campi dei moduli ---------- */
.campo { display: flex; flex-direction: column; gap: 5px; }
.campo > span:first-child { font-family: var(--serif-titolo); font-size: 13px; letter-spacing: .06em; color: var(--inchiostro-2); }
.su-cuoio .campo > span:first-child, .lastra .campo > span:first-child { color: rgba(237,223,191,.75); }
.campo input, .campo select, .campo textarea, .inchiostro-campo {
  padding: 9px 12px; border: 1px solid #a88c58; border-radius: 2px;
  background: rgba(255,250,235,.62); color: var(--inchiostro); font-size: 17px;
  box-shadow: inset 0 1px 3px rgba(80,50,20,.18);
}
.campo input:focus, .campo select:focus, .campo textarea:focus { outline: 2px solid var(--oro); outline-offset: 1px; border-color: var(--oro-scuro); }
.su-cuoio .campo input, .su-cuoio .campo select, .lastra .campo input, .lastra .campo select, .lastra .campo textarea {
  background: rgba(10,6,4,.55); color: var(--pergamena); border-color: var(--oro-scuro); box-shadow: inset 0 1px 4px rgba(0,0,0,.5);
}
::placeholder { color: rgba(92,68,48,.55); font-style: italic; }
.su-cuoio ::placeholder, .lastra ::placeholder { color: rgba(237,223,191,.38); }

/* ---------- scelte a gettone (radio come pietre incastonate) ---------- */
.gettoni { display: flex; flex-wrap: wrap; gap: 8px; }
.gettone {
  display: inline-flex; flex-direction: column; align-items: flex-start; gap: 1px;
  padding: 7px 13px 7px; border: 1px solid #a88c58; background: rgba(255,250,235,.45); color: var(--inchiostro);
  font-family: var(--serif); font-size: 16px; line-height: 1.2; text-align: left;
  box-shadow: 0 1px 0 rgba(255,255,255,.4) inset;
}
.gettone small { font-family: var(--serif-titolo); font-size: 11px; color: var(--inchiostro-2); font-style: normal; font-weight: 400; opacity: .85; }
.gettone:hover:not(:disabled):not(.scelta):not([aria-pressed="true"]) { background: rgba(255,250,235,.75); border-color: var(--oro-scuro); }
.gettone.scelta, .gettone[aria-pressed="true"] { background: linear-gradient(180deg, #34558f, var(--lapis-scuro)); color: var(--oro-chiaro); border-color: var(--oro); box-shadow: inset 0 0 0 2px var(--lapis-scuro), inset 0 0 0 3px rgba(240,215,146,.4); }
.gettone.scelta small, .gettone[aria-pressed="true"] small { color: rgba(240,215,146,.75); }
.gettone:disabled { opacity: .55; cursor: default; }
/* largo almeno quanto la sua targhetta (il gettone «Dadi» era più stretto: si leggeva «nsigliato»), così due
   consigliati vicini non si toccano */
.gettone.consigliata { position: relative; min-width: 100px; }
/* la targhetta «consigliato» sta sopra il bordo del suo gettone, nello spazio fra le righe (non sul gettone di sopra) */
.gettoni:has(> .gettone.consigliata) { row-gap: 16px; }
.gettone.consigliata::after { content: "consigliato"; position: absolute; top: -13px; right: 6px; line-height: 1.25; z-index: 1; padding: 0 6px; font-family: var(--serif-titolo); font-size: 10.5px; letter-spacing: .06em; color: var(--oro-chiaro); background: var(--lapis-scuro); border: 1px solid var(--oro); }

/* ---------- avviso in alto ---------- */
.avviso {
  position: fixed; left: 50%; top: 16px; z-index: 200; transform: translate(-50%, -14px); opacity: 0; pointer-events: none;
  max-width: min(640px, 86vw); padding: 11px 22px 12px;
  background: linear-gradient(180deg, rgba(42,28,17,.98), rgba(22,14,9,.98)); color: var(--pergamena);
  border: 1px solid var(--oro-scuro); box-shadow: inset 0 0 0 3px rgba(18,11,7,.95), inset 0 0 0 4px rgba(207,168,81,.3), 0 12px 30px rgba(0,0,0,.6);
  font-size: 17px; transition: opacity .2s, transform .2s;
}
.avviso.visibile { opacity: 1; transform: translate(-50%, 0); }
.avviso.errore { border-color: var(--rubrica-chiara); box-shadow: inset 0 0 0 3px rgba(18,11,7,.95), inset 0 0 0 4px rgba(217,100,76,.55), 0 12px 30px rgba(0,0,0,.6); }
.avviso.errore::before { content: "☞ "; color: var(--rubrica-chiara); }

/* ---------- dialoghi: un foglio di pergamena incorniciato ---------- */
dialog.foglio-dialogo {
  width: min(860px, 94vw); max-height: 88vh; padding: 0; border: 1px solid #8f7444; border-radius: 2px;
  color: var(--inchiostro);
  background:
    radial-gradient(ellipse at 50% 30%, rgba(255,250,235,.55), transparent 70%),
    linear-gradient(180deg, var(--pergamena), var(--pergamena-2));
  box-shadow: inset 0 0 0 4px rgba(237,223,191,.6), inset 0 0 0 5px rgba(122,90,34,.5), inset 0 0 60px rgba(110,70,25,.32), 0 30px 80px rgba(0,0,0,.7);
}
dialog.foglio-dialogo[open] { display: flex; flex-direction: column; }
dialog.foglio-dialogo::backdrop { background: rgba(10,6,3,.78); backdrop-filter: blur(2px); }
dialog.foglio-dialogo > header { display: flex; align-items: center; gap: 16px; padding: 18px 28px 12px; border-bottom: 1px solid rgba(122,90,34,.4); }
dialog.foglio-dialogo > header h2 { margin: 0; flex: 1; font-family: var(--titolo); font-weight: 800; font-size: 26px; letter-spacing: .01em; color: var(--inchiostro-titolo); text-shadow: var(--inciso); }
dialog.foglio-dialogo > header h2::first-letter { color: var(--rubrica); }
dialog.foglio-dialogo > div { overflow-y: auto; padding: 16px 30px 26px; scrollbar-width: thin; scrollbar-color: #a88c58 transparent; }
/* (min-height 0: se no il corpo non si stringe e a scorrere è il dialogo intero, senza sfumatura: l'ultima riga delle
   impostazioni a 1280 restava tagliata a metà dal bordo del foglio) */
dialog.foglio-dialogo > div { min-height: 0; }
dialog.foglio-dialogo h3 { font-family: var(--serif-titolo); font-weight: 600; font-size: 14px; letter-spacing: .12em; text-transform: uppercase; color: var(--rubrica); margin: 18px 0 6px; display: flex; gap: 8px; align-items: center; }
dialog.foglio-dialogo h3::before { content: "¶"; font-family: var(--serif); font-size: 18px; }
dialog.foglio-dialogo h3::after { content: ""; flex: 1; height: 1px; background: rgba(163,48,31,.3); }

/* barre di scorrimento sottili e calde */
* { scrollbar-width: thin; scrollbar-color: rgba(168,140,88,.7) transparent; }

/* ---------- vecchi nomi dei bottoni (moduli comuni non rifatti: chat, impostazioni) ---------- */
button.primario:not(.bottone), button.leggero:not(.bottone) {
  font-family: var(--serif-titolo); font-weight: 700; letter-spacing: .05em; cursor: pointer; border-radius: 1px;
  padding: 8px 16px; font-size: 14px; line-height: 1.1;
}
button.primario:not(.bottone) { background: linear-gradient(180deg, #8d6c2d, #5a4019); color: #fff4d3; border: 1px solid var(--oro-chiaro); box-shadow: inset 0 0 0 2px rgba(18,11,7,.6); }
button.primario:not(.bottone):hover:not(:disabled) { filter: brightness(1.1); }
button.leggero:not(.bottone) { background: rgba(255,250,235,.4); color: var(--inchiostro); border: 1px solid #a88c58; }
button.leggero:not(.bottone):hover:not(:disabled) { border-color: var(--oro-scuro); background: rgba(255,250,235,.7); }
button.leggero.pericolo { color: var(--rubrica); }
button.primario:disabled, button.leggero:disabled { opacity: .45; }
/* (17/10) i dialoghi di pergamena al telefono: il titolo ha la sua riga e i bottoni vanno sotto. Prima «I miei eroi»,
   schiacciato da Nuovo eroe e Chiudi, andava a capo una parola per riga */
@media (max-width: 600px) {
  dialog.foglio-dialogo > header { flex-wrap: wrap; gap: 8px 10px; padding: 14px 16px 10px; }
  dialog.foglio-dialogo > header h2 { flex: 1 0 100%; font-size: 23px; }
  dialog.foglio-dialogo > div { padding: 12px 16px 20px; }
}
/* (17/10) «c'è dell'altro sotto»: le scatole che scorrono in verticale sfumano il bordo basso finché non si arriva in
   fondo, così l'ultima riga a metà non sembra tagliata. Senza JS: un'animazione legata allo scorrimento della scatola
   stessa; se la scatola non scorre la timeline è inattiva e la sfumatura non c'è. Dove animation-timeline non esiste
   resta com'era. Vale per i dialoghi di pergamena (impostazioni, crediti, i miei eroi), la fase di /crea/, la scatola
   dei pezzi e la porta dell'editor, il foglio «Il tuo posto al tavolo» dell'ingresso, lo scaffale della Bottega, la sala
   d'attesa, gli attrezzi e il bestiario della pianta. (Le giostre di carte di /crea/ hanno le frecce: .scorre-segno) */
/* (sul bordo la sfumatura arriva a trasparente: a .2 la riga tagliata dal bordo restava a mezze lettere, «L'elenco arriva
   da Anthropic» in fondo alle impostazioni) */
/* (e, scorsa giù, sfuma anche il bordo ALTO: la riga in cima tagliata a metà sotto la testata non è più un taglio netto. Le
   tappe fanno scattare la maschera: in cima solo il basso, in mezzo tutti e due, in fondo solo l'alto) */
/* (giro 4) la fascia sfumata non si mangia la scatola: al massimo il 15% dell'altezza (34 px sotto, 22 px sopra, su una scatola
   alta), e sotto i 120 px niente sfumatura (il max(0px, (100% - 120px) * 1000) vale 0 lì e tanto sopra). Il conto del tiro a 1280
   è alto ~85 px: con 34 px fissi la riga che spiega il tiro spariva. Le scatole basse dicono che scorrono con l'ombra interna
   (ombra-se-continua, qui sotto). Prova: prove/testo_tagliato.mjs, controllo 4d */
@keyframes sfuma-se-continua {
  0%, 1% { -webkit-mask-image: linear-gradient(180deg, #000 calc(100% - min(34px, 15%, max(0px, (100% - 120px) * 1000))), transparent); mask-image: linear-gradient(180deg, #000 calc(100% - min(34px, 15%, max(0px, (100% - 120px) * 1000))), transparent); }
  3%, 97% { -webkit-mask-image: linear-gradient(180deg, transparent, #000 min(22px, 12%, max(0px, (100% - 120px) * 1000)), #000 calc(100% - min(34px, 15%, max(0px, (100% - 120px) * 1000))), transparent); mask-image: linear-gradient(180deg, transparent, #000 min(22px, 12%, max(0px, (100% - 120px) * 1000)), #000 calc(100% - min(34px, 15%, max(0px, (100% - 120px) * 1000))), transparent); }
  100% { -webkit-mask-image: linear-gradient(180deg, transparent, #000 min(22px, 12%, max(0px, (100% - 120px) * 1000))); mask-image: linear-gradient(180deg, transparent, #000 min(22px, 12%, max(0px, (100% - 120px) * 1000))); }
}
/* le scatole basse: un'ombra interna sottile sul bordo dove c'è dell'altro (sotto all'inizio, sopra e sotto in mezzo, sopra in
   fondo). L'ombra sta sotto il testo: non copre niente */
@keyframes ombra-se-continua {
  0%, 1% { box-shadow: inset 0 -10px 8px -8px rgba(40, 24, 10, .55); }
  3%, 97% { box-shadow: inset 0 -10px 8px -8px rgba(40, 24, 10, .55), inset 0 10px 8px -8px rgba(40, 24, 10, .55); }
  100% { box-shadow: inset 0 10px 8px -8px rgba(40, 24, 10, .55); }
}
@supports (animation-timeline: scroll()) {
  .sfuma-se-continua, dialog.foglio-dialogo > div, .scheda-scorre, ul.azioni, #col-sx, #pannello-master, #scheda-corpo, .corpo-fase, .scatola .pezzi, .scatola, body > .porta-editor, aside.foglio-tavolo, #scaffale, #attesa.attesa, .editor-mappe nav.attrezzi, #elenco-mostri {
    animation: sfuma-se-continua linear both; animation-timeline: scroll(self block); }
  #tiro .conto, .consiglio .corpo-guida { animation: ombra-se-continua linear both; animation-timeline: scroll(self block); }
  /* (il racconto in combattimento scende sotto i 120 px: lì non sfuma e resta l'ombra; alto, l'ombra finisce dentro la sfumatura) */
  .rotolo { animation: sfuma-se-continua linear both, ombra-se-continua linear both; animation-timeline: scroll(self block), scroll(self block); }
}
/* (la sfumatura non è movimento: resta anche con «riduci il movimento», che sopra spegne tutte le animazioni) */
@media (prefers-reduced-motion: reduce) { @supports (animation-timeline: scroll()) {
  .sfuma-se-continua, dialog.foglio-dialogo > div, .scheda-scorre, ul.azioni, #col-sx, #pannello-master, #scheda-corpo, .corpo-fase, .scatola .pezzi, .scatola, body > .porta-editor, aside.foglio-tavolo, #scaffale, #attesa.attesa, .editor-mappe nav.attrezzi, #elenco-mostri {
    animation: sfuma-se-continua linear both !important; animation-timeline: scroll(self block) !important; }
  #tiro .conto, .consiglio .corpo-guida { animation: ombra-se-continua linear both !important; animation-timeline: scroll(self block) !important; }
  .rotolo { animation: sfuma-se-continua linear both, ombra-se-continua linear both !important; animation-timeline: scroll(self block), scroll(self block) !important; }
} }
/* (17/10) i link sulla pergamena: l'oro chiaro di base (pensato per il cuoio) lì si leggeva a 1,3:1 («Torna allo shop»
   nella cassa). Specificità zero: ogni regola con una classe vince ancora */
:where(.pergamena) a:where(:not(.bottone, .servizio-voce)) { color: var(--lapis); }
