/* ===========================================================================
   sbam.css - quello che il tema non poteva contenere.

   🔴 `css/site.css` E' LA CONSEGNA di Claude Design e non si tocca: se un
   domani arriva una consegna nuova, si sostituisce quel file e basta. Tutto
   cio' che nasce dall'innesto - le viste del negozio, che nel kit non c'erano,
   e le poche aggiunte - vive qui, dopo, e vince per ordine di cascata.

   Le variabili (--rosso, --s3, --f-titoli...) sono quelle del tema: qui non se
   ne inventa nessuna, sennO' i due fogli comincerebbero a divergere.
   =========================================================================== */

/* == Stato della scorta, negli elenchi e nella scheda ====================== */
/* Il tema non aveva l'esaurito: nel kit tutti i libri erano disponibili. */
.stato-scorta {
  display: block;
  margin-top: 4px;
  font-size: 13px;
  color: var(--arancio-testo);
}
.stato-scorta--esaurito { color: var(--rosso-testo); font-weight: 700; }
.prodotto-card .stato-scorta { margin-top: 2px; }

/* == La scheda prodotto: rifiniture =========================================
   Tre correzioni sulla stessa pagina, viste confrontandola col sito vivo. */

/* 1. La presentazione (l'estratto sotto il prezzo) era in grassetto pieno
   (`700` nel tema): abbastanza da farla sembrare un'intestazione invece che
   il primo paragrafo del testo. */
.presentazione { font-weight: 500; }

/* 2. Il prezzo grande della scheda era uguale, di fatto, a quello di una
   card nell'elenco (24px, senza nessuno stacco da cio' che segue): sulla
   pagina di UN libro solo e' lui il numero che deve saltare all'occhio
   prima di tutto. */
.prezzo--grande {
  display: block;
  font-size: 34px;
  margin: 0 0 var(--s3);
}

/* 3. Categorie e Tag erano lo stesso `<dl class="etichette">`: due gruppi
   uniti in un solo flex-wrap, quindi «Tag:» poteva incollarsi in coda
   all'ultima categoria sulla stessa riga invece di aprirne una propria.
   `scripts/libri.inc.php` ora stampa due `<dl>` separate - blocchi, non
   flex-item dello stesso contenitore - che vanno a capo da sole per
   costruzione, senza bisogno di nessuna regola qui. */

/* 4. Il badge «in offerta»: il tema lo aveva gia' pronto (`.nastro-offerta`,
   pensato per le mattonelle dell'elenco) ma nessuno script lo stampava mai -
   ne' l'elenco ne' la scheda. Qui serve anche sulla copertina grande, che
   e' piu' larga di una mattonella (leggermente piu' visibile) - e a
   SINISTRA e non a destra come nel tema: sulla scheda, a destra, ci sta gia'
   la lente d'ingrandimento, e i due si sovrapponevano. */
.galleria-principale .nastro-offerta {
  font-size: 13px;
  padding: 4px 10px;
  left: var(--s1);
  right: auto;
}

/* == Lo slider in cima alla home ========================================== */
/* ⭐ Dal 2026-09-25 legge i libri con la spunta «Nello slider della home». Un
   libro con l'«Immagine per lo slider» usa il ritaglio 3:2 del tema; uno senza
   mostra la COPERTINA intera su fondo scuro (`slide--copertina`), perche' una
   copertina ritagliata a 3:2 perderebbe il titolo. I due tipi convivono nella
   stessa pista, quindi la regola sta sul riquadro e non sulla pista. */
.slide--copertina > img { object-fit: contain; }

/* ⭐ 2026-09-27, richiesta di Luca: piu' aria fra la barra del menu e lo slider
   (il tema dava 24px, `sezione--stretta`, e sembrava attaccato alla barra). */
.sezione-slider { padding-top: var(--s4); }
@media (min-width: 900px) {
  .sezione-slider { padding-top: var(--s5); }
}

/* ⭐ LA DIDASCALIA SOTTO L'IMMAGINE, non sopra (2026-09-27, richiesta di Luca).
   Il tema la sovrapponeva in basso all'immagine (`position: absolute`), coprendo
   la parte bassa della grafica. Qui torna nel flusso: il riquadro e' una colonna,
   immagine sopra e fascia scura sotto, e la fascia si allunga (`flex: 1`) cosi'
   tutte le fasce di una fila sono alte uguali anche quando un titolo va su due
   righe - la griglia della pista allinea gia' l'altezza dei riquadri.
   ⚠️ Le frecce stanno a meta' del riquadro intero: le si alza di mezza fascia, cosi'
   restano centrate sull'immagine. */
.slide { display: flex; flex-direction: column; }
.slide-didascalia {
  position: static;
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 40px;
  background: var(--nero-menu);
}
.slider-freccia { top: calc(50% - 20px); }

/* ⭐ Niente barra di scorrimento sotto lo slider (2026-09-27, richiesta di Luca):
   il tema la lasciava sottile (`scrollbar-width: thin`), ma su Windows si vede
   sempre, grigia, sotto le didascalie. La pista SCORRE lo stesso - frecce, dito,
   rotella, tastiera e lo scorrimento automatico di `sbam.js` - si toglie solo la
   barra. Due regole perche' i browser sono due famiglie: Firefox legge
   `scrollbar-width`, Chrome, Edge e Safari lo pseudo-elemento. */
.slider-pista { scrollbar-width: none; }
.slider-pista::-webkit-scrollbar { display: none; }

/* Frecce e pausa servono solo se la pista scorre: con quattro riquadri su uno
   schermo largo non c'e' niente da scorrere, e due frecce che non fanno niente
   facevano sembrare lo slider rotto. `data-scorre` lo mette `sbam.js`: senza
   script le frecce restano, come nella consegna. */
.slider[data-scorre="0"] .slider-freccia { display: none; }

/* Il pulsante che ferma lo scorrimento automatico (WCAG 2.2.2), stesso aspetto
   delle frecce, in alto a destra. Nasce `hidden` e lo mostra lo script. */
.slider-pausa {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(20, 20, 20, 0.6);
  border: 0;
  color: var(--bianco);
  cursor: pointer;
}
.slider-pausa[hidden] { display: none; }
.slider-pausa:hover { background: var(--rosso); }
.slider-pausa:focus-visible { outline-color: #ffd24d; }
.slider-pausa > span { display: flex; }
.slider-pausa .slider-pausa-riprendi,
.slider-pausa[aria-pressed="true"] .slider-pausa-ferma { display: none; }
.slider-pausa[aria-pressed="true"] .slider-pausa-riprendi { display: flex; }
.slider-pausa .ico--piena, .slider-pausa-riprendi .ico { fill: currentColor; }
@media print { .slider-pausa { display: none !important; } }

/* == I riquadri dei libri in home («Sbam! Libri», «In evidenza») ========== */
/* ⭐ Dal 2026-09-25 due dei tre riquadri leggono i LIBRI (R4). Il libro in
   grande usa l'immagine per lo slider; senza, la copertina INTERA su fondo
   scuro, perche' il 3:2 con `cover` del tema le taglierebbe il titolo. */
.modulo-articolo img.copertina-intera { object-fit: contain; background: var(--nero-menu); }
.modulo-articolo .meta .prezzo { font-size: 15px; }
/* 🔴 Il prezzo del tema e' rosso (#c62828) e quello delle righe grigio (#666):
   sul nero del riquadro scuro (#2d2d2d) fanno 2,45:1 e 2,40:1, sotto AA. Qui
   diventano il grigio chiaro delle meta del tema (#c9c9c9, 8,32:1), e il
   prezzo barrato #a8a8a8 (5,79:1). */
.modulo--scuro .prezzo,
.modulo--scuro .widget-lista .prezzo { color: #c9c9c9; }
.modulo--scuro .prezzo del { color: #a8a8a8; }

/* == Le viste del negozio ================================================== */
/* Carrello, cassa, grazie e area cliente: markup semantico prodotto dal core,
   vestito qui. Un solo blocco per tutte e quattro, perche' condividono
   tabelle, moduli e pulsanti. */
.shop-carrello,
.shop-checkout,
.shop-grazie,
.shop-account,
.shop-recedi { font-size: 15px; }

.shop-carrello h2,
.shop-checkout h2,
.shop-grazie h2,
.shop-account h2,
.shop-recedi h2 {
  font-family: var(--f-titoli);
  font-size: 22px;
  margin: var(--s4) 0 var(--s2);
}

/* -- le tabelle delle righe --------------------------------------------------
   `.shop-ordini` (l'elenco «I miei ordini», area cliente) e' la STESSA forma
   di `.shop-righe` - un'intestazione, righe, ultima colonna un importo - non
   la lista `<ul><li>` per cui erano scritte le regole di prima: quelle non
   hanno mai vestito niente, il core stampa `<table class="shop-ordini">`
   con `<thead>`. */
.shop-righe,
.shop-ordini {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: var(--s3);
}
.shop-righe th,
.shop-righe td,
.shop-ordini th,
.shop-ordini td {
  padding: var(--s2) var(--s1);
  border-bottom: 1px solid var(--filetto);
  text-align: left;
  vertical-align: middle;
}
.shop-righe th,
.shop-ordini th {
  font-family: var(--f-titoli);
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: .04em;
  font-size: 14px;
  color: var(--testo-sec);
}
.shop-righe td:last-child,
.shop-righe th:last-child,
.shop-ordini td:last-child,
.shop-ordini th:last-child { text-align: right; }
.shop-righe del { color: var(--testo-sec); }
/* Il libro nella riga: copertina e titolo, un collegamento solo alla scheda.
   Lo stampa il sito tramite l'aggancio del core (`lcr_shop_item_view`). */
.riga-libro {
  display: flex;
  align-items: center;
  gap: var(--s2);
  color: inherit;
  text-decoration: none;
}
.riga-libro:hover span { text-decoration: underline; }
.riga-copertina {
  flex: none;
  width: 60px;
  height: auto;
  background: var(--grigio-card);
}
.shop-righe input[type="number"] { width: 5em; }
.shop-righe form {
  display: flex;
  gap: var(--s1);
  align-items: center;
}
/* ⭐ «Salva per dopo» e «Togli» (e nei salvati «Sposta nel carrello» e
   «Togli») stanno nella stessa cella: sono due `<form>`, e da blocchi
   finirebbero uno sopra l'altro. In fila, allineati a destra come la colonna. */
.shop-righe .shop-riga-azioni form {
  display: inline-flex;
  margin: 2px 0 2px var(--s1);
}
/* ⚠️ Due moduli in fila si allineano sulla LINEA DEL TESTO, e il cestino di
   testo visibile non ne ha: senza questa riga stava 3px piu' in alto del
   pulsante accanto (misurato). */
.shop-righe .shop-riga-azioni form,
.shop-preferiti .shop-righe form { vertical-align: middle; }
/* Sotto i 600px la tabella diventa un elenco di schede allineate a sinistra
   (vedi sotto): lo stacco passa dall'altra parte. */
@media (max-width: 599px) {
  .shop-righe .shop-riga-azioni form { margin: var(--s1) var(--s1) 0 0; }
}
.shop-dopo { margin-top: var(--s5); }
/* la riga del Totale (carrello, cassa, dettaglio ordine): la classe che il
   core mette apposta, non «l'ultima riga» - vedi la nota su `.shop-totali`
   piu' sotto, stessa ragione. */
.shop-righe tr.riga-totale th,
.shop-righe tr.riga-totale td {
  font-family: var(--f-titoli);
  font-size: 20px;
  color: var(--rosso-testo);
  text-transform: none;
  border-top: 1px solid var(--filetto);
}

/* Sul telefono una tabella a cinque colonne non ci sta: diventa un elenco di
   schede, con l'intestazione di colonna ripetuta davanti a ogni valore. */
@media (max-width: 599px) {
  .shop-righe thead,
  .shop-ordini thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .shop-righe tr,
  .shop-ordini tr { display: block; border-bottom: 2px solid var(--filetto); padding: var(--s2) 0; }
  .shop-righe td,
  .shop-ordini td { display: block; border: 0; padding: 2px 0; text-align: left; }
  .shop-righe td:last-child,
  .shop-ordini td:last-child { text-align: left; }
}

/* -- totali e riepilogo ----------------------------------------------------
   🔴 Il core stampa un `<table>` (carrello: `.shop-totali` E' la tabella;
   cassa: `.shop-riepilogo` e' la `<section>` che la contiene), MAI un `<dl>` -
   queste regole puntavano a un markup che non e' mai esistito, quindi la riga
   del Totale usciva uguale alle altre: stesso corpo, nessun risalto, nessuna
   riga sopra. La chiave e' `.riga-totale`, la classe che il core mette
   apposta su quella riga - non «l'ultima», perche' l'IVA per aliquota (quando
   non e' zero) stampa ALTRE righe dopo. */
.shop-totali,
.shop-riepilogo {
  background: var(--grigio-fascia);
  padding: var(--s3);
  margin-bottom: var(--s3);
  max-width: 460px;
}
/* ⭐ Il riquadro dei totali sta a DESTRA, dove si guarda il conto: e' anche
   il lato da cui si scende verso «Vai alla cassa», qui sotto. */
.shop-totali { margin-left: auto; }
.shop-riepilogo table {
  width: 100%;
  border-collapse: collapse;
}
/* 🔴 `border-collapse: collapse` FA IGNORARE IL PADDING DELLA TABELLA. Il
   riquadro dei totali E' una `<table>`, quindi i suoi 24px risultavano nel
   calcolato e non facevano niente: il testo restava attaccato ai bordi del
   grigio. E' un valore che si legge giusto e non ha effetto - il tipo di
   difetto che non si trova ispezionando lo stile, ma guardando la pagina.
   Nel modello a bordi separati il padding vale, e `border-spacing: 0` tiene
   le celle attaccate come prima. */
.shop-totali {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
}
.shop-totali th,
.shop-totali td,
.shop-riepilogo th,
.shop-riepilogo td {
  padding: 3px 0;
  font-weight: 400;
  text-align: left;
  vertical-align: baseline;
}
.shop-totali th,
.shop-riepilogo th { color: var(--testo-sec); }
.shop-totali td,
.shop-riepilogo td { text-align: right; }
.shop-riepilogo td:first-child { text-align: left; }
/* la nota dell'IVA per aliquota: una sola cella a piena larghezza, non un
   importo - resta a sinistra e piu' piccola, oggi inerte (l'aliquota e' 0). */
.shop-totali td[colspan],
.shop-riepilogo td[colspan],
.shop-righe td[colspan] { text-align: left; padding-top: var(--s1); }
/* Le righe piccole dentro i totali - «l'importo esatto si calcola alla cassa»,
   «19,00 € con la spedizione in Italia» - NON prendono il corpo grande e il
   rosso della riga del totale: sono una precisazione, non un secondo prezzo.
   Senza questa regola uscivano in rosso a 20px, cioe' con lo stesso peso della
   cifra che stanno spiegando. */
.shop-totali small {
  display: inline-block;
  margin-top: 2px;
  font-family: var(--f-testo);
  font-size: 13px;
  font-weight: 400;
  line-height: 1.4;
  color: var(--testo-sec);
}
.shop-totali tr.riga-totale th,
.shop-totali tr.riga-totale td,
.shop-riepilogo tr.riga-totale th,
.shop-riepilogo tr.riga-totale td {
  font-family: var(--f-titoli);
  font-size: 20px;
  color: var(--rosso-testo);
  padding-top: var(--s2);
  border-top: 1px solid var(--filetto);
}

/* -- LA CASSA SU DUE COLONNE ------------------------------------------------
   ⭐ Il carrello e la cassa non erano nel kit grafico (12 viste consegnate,
   negozio escluso dal perimetro del brief), quindi la cassa era rimasta una
   colonna sola: un modulo lungo con il riepilogo in cima, che sparisce appena
   si comincia a scrivere. Proprio mentre si decide se spendere.

   Modulo a sinistra, riepilogo a destra e APPICCICATO: cosi' il totale resta
   sott'occhio mentre si compilano i campi, ed e' quello che rende evidente il
   ricalcolo della spedizione quando si cambia paese.

   🔴 Il riepilogo nel markup viene PRIMA del modulo, ed e' giusto che sia cosi':
   sul telefono si legge che cosa si sta comprando e poi si compila. Qui non si
   riordina il DOM - si posiziona: tutto in colonna 1, il riepilogo in colonna 2
   a cavallo delle righe.
   ⚠️ `:has()` perche' a carrello vuoto la vista ha solo due paragrafi: senza,
   si riserverebbe una colonna di 360px per niente. */
/* ⭐ 6.1 - DUE COLONNE UGUALI, e a destra TRE RIQUADRI (decisioni dell'utente,
   2026-09-14). Il modulo avvolge tutta la cassa in quattro pezzi - riepilogo,
   dati, scelte, conclusione - e la griglia li dispone: i dati a sinistra per
   tutta l'altezza, a destra il riepilogo, sotto le scelte (come spediamo, come
   paghi) e in fondo la conclusione (prima di ordinare, garanzia, spunta,
   pulsante).
   Prima era un modulo largo con un riepilogo stretto (360px) appiccicato, e
   spedizione, pagamento e pulsante stavano in fondo alla colonna dei campi:
   il pulsante per comprare era la cosa piu' lontana dal totale.
   🔴 L'ultima riga e' `1fr` e non `auto`: i dati occupano tutte le righe, e
   l'altezza in piu' di un elemento a cavallo si distribuisce sulle righe che
   attraversa - con sole `auto` finiva anche nelle prime, e fra un riquadro e
   l'altro si apriva un vuoto. Col `1fr` va tutta in basso.
   ⚠️ Niente piu' riepilogo appiccicato: con la conclusione sotto la colonna di
   destra e' alta quanto quella dei campi, e un blocco `sticky` piu' alto dello
   schermo non si vede mai per intero.
   ⚠️ Sul telefono non c'e' griglia e vale l'ordine del markup: che cosa si
   compra, chi sei, come si chiude. */
@media (min-width: 900px) {
  .shop-checkout .shop-form-checkout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    grid-template-rows: auto auto 1fr;
    grid-template-areas:
      "dati riepilogo"
      "dati scelte"
      "dati conclusione";
    column-gap: var(--s5);
    align-items: start;
  }
  .shop-form-checkout > .shop-riepilogo    { grid-area: riepilogo; max-width: none; }
  .shop-form-checkout > .shop-cassa-dati   { grid-area: dati; }
  .shop-form-checkout > .shop-cassa-scelte { grid-area: scelte; }
  .shop-form-checkout > .shop-cassa-conclusione { grid-area: conclusione; }
}
/* Scelte e conclusione hanno la stessa pelle del riepilogo, con lo stesso
   stacco fra un riquadro e l'altro. */
.shop-cassa-scelte,
.shop-cassa-conclusione {
  background: var(--grigio-fascia);
  padding: var(--s3);
}
.shop-cassa-scelte { margin-bottom: var(--s3); }
/* Nella conclusione nessun blocco spinge in su contro il padding: il primo
   elemento e' il riquadro ripiegato «Prima di ordinare». */
.shop-cassa-conclusione > :first-child { margin-top: 0; }
/* ⭐ La spunta sta ATTACCATA al pulsante che la rende obbligatoria: sopra il
   suo stacco pieno dalla garanzia, sotto uno piu' corto. */
.shop-cassa-conclusione .shop-consenso { margin: var(--s3) 0 var(--s2); }
/* L'ultima nota del riquadro delle scelte non lascia un vuoto sul fondo. */
.shop-cassa-scelte > :last-child { margin-bottom: 0; }
/* Il primo titolo di ogni blocco non spinge in giu': sommato al padding del
   riquadro dava il doppio dello spazio sopra «Il tuo ordine» e «Prima di
   ordinare», e i titoli delle due colonne non stavano alla stessa altezza. */
.shop-riepilogo > h2:first-child,
.shop-cassa-dati > h2:first-child,
.shop-cassa-scelte > h2:first-child,
.shop-cassa-conclusione > h2:first-child,
.shop-precontrattuale > h2:first-child { margin-top: 0; }
@media (min-width: 900px) {
  /* La colonna dei dati non ha un riquadro: scende quanto il padding dei due
     riquadri accanto, cosi' «Dove spediamo» sta sulla riga di «Il tuo ordine». */
  .shop-cassa-dati { padding-top: var(--s3); }
  /* E i campi occupano la loro colonna: col tetto di 460px del modulo a
     colonna unica restava un vuoto di quasi 90px a destra di ogni campo.
     ⚠️ `.shop-form-checkout` davanti: la regola del tetto sta piu' avanti nel
     file, e a pari specificita' vinceva lei (misurato: 460 anche dopo). */
  .shop-form-checkout .shop-cassa-dati input,
  .shop-form-checkout .shop-cassa-dati select,
  .shop-form-checkout .shop-cassa-dati textarea { max-width: none; }
}
/* Dentro il grigio il riquadro «Prima di ordinare» si stacca col bianco,
   invece di un bordo grigio su fondo grigio. */
.shop-cassa-conclusione .shop-precontrattuale { background: var(--bianco); }
/* Il pulsante per comprare a tutta larghezza del riquadro: e' il punto
   d'arrivo della colonna, non un comando fra gli altri. */
.shop-cassa-conclusione .shop-ordina {
  width: 100%;
  justify-content: center;
}
.shop-ordina-riga { margin: 0; }

/* -- i pulsanti -----------------------------------------------------------
   Le viste del core usano `<button>` nudi, che e' la cosa giusta da fare in un
   file che non sa che tema lo vestira'. Qui gli si da' l'aspetto del tema una
   volta sola, invece di mettere una classe in venti punti del core. */
/* 🔴 `.shop-preferiti` mancava: la pagina dei preferiti prendeva il solo bordo
   di `.shop-righe button` e restava col carattere del testo e in minuscolo,
   cioe' con pulsanti diversi da quelli del carrello per la stessa azione. */
.shop-carrello button,
.shop-checkout button,
.shop-account button,
.shop-preferiti button,
.shop-carrello input[type="submit"],
.shop-checkout input[type="submit"],
.shop-account input[type="submit"] {
  display: inline-flex;
  align-items: center;
  gap: var(--s1);
  background: var(--rosso);
  color: var(--bianco);
  border: 0;
  padding: 10px 18px;
  font-family: var(--f-titoli);
  font-size: 15px;
  text-transform: uppercase;
  letter-spacing: .04em;
  cursor: pointer;
}
.shop-carrello button:hover,
.shop-checkout button:hover,
.shop-account button:hover,
.shop-preferiti button:hover { background: var(--rosso-testo); }

/* I comandi di servizio - aggiorna, togli, svuota, ricalcola - non sono la
   stessa cosa di «vai alla cassa» o «ordina e paga»: stesso posto, peso
   diverso. Prendono il pulsante secondario del kit (`.btn--contorno`): fondo
   bianco, bordo e testo neri, e al passaggio del mouse si invertono.

   🔴 IL SELETTORE DI PRIMA NON MATCHAVA NIENTE: chiedeva
   `form[action="/carrello"] button[name]`, ma il pulsante «Svuota il
   carrello» un attributo `name` non ce l'ha - l'azione viaggia in un campo
   nascosto. Risultato: era ROSSO come «Vai alla cassa», cioe' due comandi di
   peso opposto con lo stesso aspetto, ed e' proprio quello che si e' notato
   guardando la pagina. Stessa famiglia dei difetti di oggi: una regola
   scritta per un markup che non esiste non fallisce, semplicemente non fa
   niente. Ora si punta ai `<form>` diretti del carrello, che sono i suoi
   comandi di servizio. */
.shop-righe button,
.shop-coupon button,
.shop-carrello > form button,
.shop-checkout button[value="spedizione"] {
  background: var(--bianco);
  color: var(--testo);
  border: 2px solid var(--testo);
}
.shop-righe button:hover,
.shop-coupon button:hover,
.shop-carrello > form button:hover,
.shop-checkout button[value="spedizione"]:hover {
  background: var(--testo);
  color: var(--bianco);
}
/* Dentro la tabella e accanto a un campo stanno piccoli, come `.btn--piccolo`
   del kit: sono comandi di riga, non richiami all'azione. */
.shop-righe button,
.shop-coupon button {
  padding: 6px var(--s2);
  font-size: 14px;
  /* In una colonna stretta «Sposta nel carrello» andava a capo DENTRO il
     pulsante (65px contro i 41 del cestino accanto). Meglio che vada a capo
     il pulsante intero, e resti della sua altezza. */
  white-space: nowrap;
}

/* ⭐ «Togli» e' un CESTINO: stesso pulsante a contorno, un disegno al posto
   della parola. Il core stampa la parola dentro `.shop-togli-testo` e il nome
   del prodotto nell'`aria-label`, quindi per chi usa un lettore di schermo non
   cambia niente.
   ⚠️ Il disegno e' una MASCHERA su `currentColor` e non un'immagine: cosi' al
   passaggio del mouse, quando il pulsante si inverte, il cestino diventa
   bianco insieme al resto.
   🔴 Il `::after` con uno spazio a larghezza zero non e' un vezzo: tiene nel
   pulsante una riga di testo nel carattere dei titoli, quindi l'altezza resta
   ESATTAMENTE quella di «Salva per dopo» accanto. Col solo disegno da 18px il
   cestino veniva piu' basso di qualche pixel, e in fila si vede.
   Stesso tratto delle icone del tema: 2px, estremi arrotondati. */
/* 🔴 `button.shop-togli` e non `.shop-togli`: `.shop-carrello button` porta
   `gap: var(--s1)` con una specificita' piu' alta (classe + elemento), e
   vinceva. Gli 8px finivano fra il disegno e lo spazio invisibile del
   `::after`, e il cestino stava spostato a sinistra dentro il pulsante. */
button.shop-togli {
  position: relative;
  gap: 0;
  justify-content: center;
}
.shop-togli .shop-togli-testo {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
.shop-togli::before {
  content: "";
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M8 6V4h8v2'/%3E%3Cpath d='M19 6l-1 14H6L5 6'/%3E%3Cpath d='M10 11v6M14 11v6'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M8 6V4h8v2'/%3E%3Cpath d='M19 6l-1 14H6L5 6'/%3E%3Cpath d='M10 11v6M14 11v6'/%3E%3C/svg%3E") center / contain no-repeat;
}
.shop-togli::after { content: "\200b"; }

/* I due comandi in fondo al carrello si allineano al riquadro dei totali, che
   sta a destra: «Vai alla cassa» e sotto «Svuota il carrello». Larghezza
   quanto il testo, cosi' non diventano due fasce rosse a tutta pagina. */
.shop-carrello .shop-avanti,
.shop-carrello > form:last-of-type {
  width: fit-content;
  margin-left: auto;
}
/* ⭐ Uno sopra l'altro, i due comandi hanno la STESSA larghezza. Ognuno si
   allargava sul proprio testo, e con corpo, spaziatura e margini interni
   diversi (link del tema a 16px, pulsante del negozio a 15px) «Vai alla cassa»
   veniva 163,9px e «Svuota il carrello» 167,8px: quattro pixel, abbastanza per
   vedere due bordi destri allineati e due sinistri no.
   ⚠️ Una larghezza MINIMA comune e non l'una copiata sull'altra: regge anche
   se domani cambia una delle due scritte. In px e non in em, perche' i due
   corpi sono diversi e 12em darebbe due misure. */
.shop-carrello .shop-avanti .btn,
.shop-carrello > form:last-of-type button {
  min-width: 190px;
  justify-content: center;
}

/* -- moduli: coupon, cassa, accesso --------------------------------------- */
.shop-coupon,
.shop-avanti { margin-bottom: var(--s3); }
/* 🔴 `.shop-coupon` E' il `<form>`, non un contenitore che ne ha uno dentro:
   `.shop-coupon form` non matchava nulla, e il modulo restava senza
   impaginazione - etichetta, campo e pulsante uno sotto l'altro, senza
   spazi. Secondo selettore scritto per un markup che non esiste. */
.shop-coupon {
  display: flex;
  gap: var(--s2);
  flex-wrap: wrap;
  align-items: center;
}
.shop-coupon label { font-weight: 700; }

/* ⚠️ `.campo` e' la classe del kit, ma la vista della cassa avvolge ogni campo
   in un `<p>` nudo: la regola non agganciava niente e lo spazio fra i campi
   veniva dal margine di sistema del paragrafo - giusto per caso, non per
   scelta. Si tengono tutti e due: `.campo` se un giorno la vista lo usera'. */
/* 🔴 6.1 - `> p` non basta piu': dal riordino i paragrafi stanno dentro le due
   colonne e nei riquadri (`shop-cassa-dati`, `-scelte`, `-conclusione`), non
   sotto il modulo.
   Lasciato cosi', ogni campo perdeva lo stacco e ogni nota tornava in fila. */
.shop-form-checkout .campo,
.shop-form-checkout > p,
.shop-form-checkout > div > p,
.shop-account form p { margin-bottom: var(--s2); }
.shop-form-checkout label,
.shop-account label {
  display: block;
  font-weight: 700;
  margin-bottom: 4px;
}
.shop-form-checkout input,
.shop-form-checkout textarea,
/* ⚠️ `select` va nominato: il paese e' diventato una tendina (2026-09-04) e
   senza questa riga usciva alto 19px e senza padding, in mezzo a campi alti
   42 - la stessa disattenzione che aveva lasciato nudi i campi del carrello. */
.shop-form-checkout select,
.shop-account input,
/* ⚠️ I campi del CARRELLO erano fuori da questa famiglia, e quindi nudi:
   il codice promozionale e la quantita' uscivano con il campo di sistema del
   browser, alto 21px, in mezzo a pulsanti alti 44. */
.shop-carrello input[type="text"],
.shop-carrello input[type="number"] {
  width: 100%;
  max-width: 460px;
  padding: 10px;
  border: 1px solid var(--filetto);
  font-family: inherit;
  font-size: 15px;
}
/* Questi due non vogliono la larghezza piena: uno sta in una cella di
   tabella, l'altro in fila col suo pulsante. */
.shop-carrello input[type="number"] { width: 5em; }
.shop-carrello input[type="text"] { width: auto; min-width: 220px; }
/* -- le NOTE di campo («Ci serve per mandarti la conferma», «Solo se il
   corriere ha bisogno di chiamarti»): stanno nello stesso <p> del campo e
   uscivano in fila accanto, appese al bordo destro dell'input. A capo, sotto
   il campo, come una didascalia (2026-09-04). Vale anche per la nota sotto
   «Ricalcola la spedizione». */
.shop-form-checkout > p > small,
.shop-form-checkout > div > p > small {
  display: block;
  margin-top: 4px;
  color: var(--testo-sec);
}

/* -- le SCELTE: radio e checkbox della cassa (spedizione, pagamento, account)
   ⚠️ Le due regole qui sopra valgono per OGNI input e OGNI label del modulo,
   quindi anche per il pallino: un radio largo 460px, col cerchietto centrato
   in mezzo al vuoto e il testo che va a capo a destra - e' cosi' che usciva
   «Come spediamo» (2026-09-04). Qui il pallino torna della sua misura e sta
   in fila col testo, che perde il grassetto delle etichette di campo: e' una
   scelta, non il nome di un campo. */
.shop-form-checkout input[type="radio"],
.shop-form-checkout input[type="checkbox"],
.shop-account input[type="radio"],
.shop-account input[type="checkbox"] {
  width: auto;
  max-width: none;
  padding: 0;
  margin: 0;
  flex: none;
  accent-color: var(--rosso, #dd3333);
}
.shop-form-checkout label:has(> input[type="radio"]),
.shop-form-checkout label:has(> input[type="checkbox"]),
.shop-account label:has(> input[type="radio"]),
.shop-account label:has(> input[type="checkbox"]) {
  display: flex;
  align-items: baseline;
  gap: var(--s1);
  font-weight: 400;
  cursor: pointer;
}
/* La nota sotto la scelta (perche' e' gratis, come funziona il bonifico)
   si stacca dal pallino e si allinea al testo. */
.shop-form-checkout label:has(> input[type="radio"]) + small,
.shop-form-checkout label:has(> input[type="checkbox"]) + small {
  display: block;
  margin-left: calc(13px + var(--s1));
}

.shop-consenso { margin: var(--s3) 0; }
.shop-consenso label { font-weight: 400; }
.shop-consenso input { width: auto; margin-right: var(--s1); }

/* -- il riepilogo precontrattuale (M19) -------------------------------------
   Venditore, sede, P.IVA, totale, consegna, recesso: e' l'informativa che la
   legge chiede PRIMA del pulsante che obbliga a pagare, e senza stile usciva
   come testo nudo - stessa cura di `.shop-bonifico`, altro blocco dt/dd con
   lo stesso peso legale. */
/* ⭐ 6.1 - e' un `<details>` RIPIEGATO: non e' fra le informazioni che l'art.
   51 c.2 vuole accanto al pulsante (vedi il commento nella vista della cassa),
   quindi resta a un clic senza allontanare il pulsante dal totale. */
.shop-precontrattuale {
  border: 2px solid var(--filetto);
  padding: var(--s2) var(--s3);
  margin: var(--s3) 0;
}
.shop-precontrattuale summary {
  cursor: pointer;
  font-weight: 700;
}
.shop-precontrattuale dl { margin: var(--s2) 0 0; }
.shop-precontrattuale dt { font-weight: 700; }
.shop-precontrattuale dd { margin: 0 0 var(--s1); }
.shop-precontrattuale p:last-child { margin-bottom: 0; }

/* L'errore di campo e' rosso ma NON solo rosso: porta anche il segno, sennO'
   chi non distingue i colori non lo vede. */
.errore-campo::before { content: "\26A0\FE0E  "; }
.errore-campo {
  color: var(--rosso-testo);
  font-size: 14px;
  font-weight: 700;
}
.avviso {
  background: var(--giallo);
  color: var(--nero-copy);
  padding: var(--s2);
  margin-bottom: var(--s3);
}

/* -- le coordinate del bonifico -------------------------------------------
   🔴 Il core stampa un `<pre>` con le righe gia' pronte, NON un `<dl>`: le
   regole `dt`/`dd` che stavano qui non agganciavano niente. Terzo selettore
   scritto per un markup che non esiste, trovato nello stesso giro degli altri.
   ⭐ E che sia un `<pre>` va bene: le cifre di un IBAN si copiano a mano, e in
   carattere a spaziatura fissa non si confonde uno 0 con una O.
   ⚠️ `pre-wrap` perche' sul telefono un IBAN da 27 cifre in un `<pre>` nudo
   uscirebbe dallo schermo. */
.shop-bonifico {
  border: 2px solid var(--filetto);
  background: var(--grigio-fascia);
  padding: var(--s3);
  margin: var(--s3) 0;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-size: 15px;
  line-height: 1.7;
}

/* == I titoletti dentro la descrizione del libro ============================
   Il tema veste `.prosa h2` con la barra grigia sotto (maiuscolo + filetto),
   ma le descrizioni migrate da WooCommerce usano anche l'h3 per i sotto-
   titoli («HANNO DETTO», «L'AUTORE», «ANTEPRIMA»...) - sul sito vivo hanno
   tutti la stessa barra, qui `.prosa h3` era rimasto senza: risultato, sulla
   scheda del libro solo «Descrizione» aveva la riga sotto e gli altri
   titoletti sembravano testo normale in grassetto. */
.prosa h3 {
  text-transform: uppercase;
  letter-spacing: 0.02em;
  border-bottom: 2px solid var(--filetto);
  padding-bottom: var(--s1);
}

/* == La ricerca in pagina ================================================== */
/* `.ricerca-riga--piena` c'e' nel tema (la usa il 404); qui serve solo che il
   risultato senza immagine non lasci un buco al posto della copertina. */
.card--senza-media .card-media { display: none; }
/* Il box di ricerca SOPRA i risultati (2026-09-14): nel tema stava in fondo
   alla pagina e non aveva margine sotto, quindi il primo risultato gli stava
   attaccato. 48px, lo stesso stacco che l'impaginazione ha sopra di se'. */
.ricerca-riga--testa { margin-bottom: var(--s5); }

/* == Le facciate dei contenuti incorporati (migrazione B2 fase 3) ==========
   Il tema disegna `.video-facade` con l'immagine di anteprima sotto; i 347
   contenuti incorporati che arrivano dal WordPress un'anteprima non ce l'hanno,
   quindi la facciata deve reggersi da sola.
   🔴 L'involucro e' uno `<span>` e non un `<p>`: nei corpi vecchi un iframe puo'
   stare dentro un paragrafo, e un `<p>` dentro un `<p>` non e' markup valido. */
/* ⭐ LA FACCIATA E' PICCOLA E MOSTRA LA COPERTINA (richiesta dell'utente,
   2026-09-04). Prima era un rettangolo nero 16:9 a tutta larghezza: enorme,
   vuoto, e non diceva niente di cio' che stava per aprire. Ora e' larga al
   massimo 380px, centrata, e sotto il pulsante rosso c'e' la copertina
   dell'articolo o del libro - che di una rivista e' proprio l'oggetto che si
   sta per sfogliare. */
.video-facciata { display: block; margin: var(--s3) auto; max-width: 380px; }
/* Appena il contenuto si apre nel riquadro (i video, che restano in pagina)
   il limite di 380px cade: piccola e' l'ANTEPRIMA, non il video. */
.video-facciata--aperta { max-width: none; }
.video-facciata .video-facade {
  position: relative;
  display: block;
  width: 100%;
  background: #1c1c1c;
  color: var(--bianco);
  line-height: 1.4;
}
/* 🔴 La copertina tiene le PROPRIE proporzioni: il tema ritaglia a 16:9
   (`.video-facade img`), che per un'anteprima video va bene e per una
   copertina - che e' alta - taglia via mezza pagina. */
.video-facciata .video-facade img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: auto;
  object-fit: contain;
  opacity: 1;
}
/* Senza copertina resta un riquadro, ma piccolo e non piu' a tutta pagina. */
.video-facciata .video-facade--sfondo { aspect-ratio: 16 / 9; min-height: 160px; }
/* Pulsante e didascalia stanno SOPRA l'immagine, incolonnati al centro. */
.video-facciata .video-strato {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--s1);
  z-index: 1;
}
.video-facciata .video-facade .play { position: static; }
/* 🔴 L'etichetta NON si chiama piu' `.etichetta`, e la ragione e' istruttiva:
   `.etichetta` e' la PASTIGLIA di categorie e tag del tema (`site.css`), con
   il suo fondo grigio e il suo bordo chiaro. Riusando quel nome, il pulsante
   della facciata si portava dietro un rettangolino grigio in mezzo al nero -
   sembrava un elemento rotto. Si era corretto il solo `color`, che e' meta'
   del problema: il resto (fondo, bordo, padding) continuava ad arrivare da
   li'. Un nome proprio chiude la faccenda invece di rincorrerne le proprieta'
   una per una. */
.video-facciata .video-facade .video-etichetta {
  color: var(--bianco);
  font-family: var(--f-titoli);
  font-size: 13px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 0 var(--s2);
  text-align: center;
}
/* Il velo scuro sulla copertina: senza, il pulsante e la scritta bianca
   finiscono sopra un'immagine chiara e non si leggono. Sta sotto al
   `.video-strato`, non sopra l'immagine e basta. */
.video-facciata .video-facade--copertina::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: rgba(0, 0, 0, 0.45);
}
.video-facciata .video-facade--copertina .video-strato { z-index: 2; }
.video-facciata .video-facade:hover::before { background: rgba(0, 0, 0, 0.3); }
/* ⭐ I VIDEO in un riquadro 3:2 (2026-09-27, richiesta di Luca: «sembrerebbe piu'
   un video»). La copertina, che e' alta, non detta piu' la forma: riempie il
   riquadro ancorata in ALTO al centro, dove stanno titolo e autore, e il resto si
   taglia. Vale per le sole facciate YouTube (`data-video`) - nella scheda del
   libro, nelle descrizioni e negli articoli; le pubblicazioni sfogliabili
   (`data-incorpora`) tengono la copertina intera, perche' li' la copertina E'
   l'oggetto che si apre. */
.video-facciata .video-facade--copertina[data-video] { aspect-ratio: 3 / 2; overflow: hidden; }
.video-facciata .video-facade--copertina[data-video] img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
}
.video-incorporato { aspect-ratio: 16 / 9; }
.video-incorporato iframe { width: 100%; height: 100%; border: 0; }

/* == La finestra grande delle pubblicazioni ================================
   ⭐ Serve per la rivista sfogliabile: 16:9 e' la forma di un video, non di
   un giornale, e in quel rettangolo le pagine restano illeggibili. Qui la
   finestra prende quasi tutto lo schermo e la pagina resta com'e' dietro.
   ⚠️ `dvh` e non `vh`: sul telefono la barra del browser si ritrae e con
   `vh` il fondo della finestra finisce sotto di essa. */
.sbam-modale {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--s2);
  background: rgba(0, 0, 0, 0.9);
}
.sbam-modale-pannello {
  display: flex;
  flex-direction: column;
  width: min(1200px, 100%);
  height: min(94dvh, 100%);
  background: #000;
}
.sbam-modale-barra {
  display: flex;
  align-items: center;
  gap: var(--s2);
  padding: 6px 8px 6px 12px;
  background: #111;
  color: var(--bianco);
  font-family: var(--f-titoli);
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.sbam-modale-barra .titolo { margin-right: auto; }
.sbam-modale-barra button {
  border: 1px solid rgba(255, 255, 255, 0.35);
  background: transparent;
  color: var(--bianco);
  font: inherit;
  padding: 6px 12px;
  cursor: pointer;
  /* 44px di area di tocco: la stessa regola del pannello */
  min-height: 44px;
  min-width: 44px;
}
.sbam-modale-barra button:hover,
.sbam-modale-barra button:focus-visible { background: var(--rosso); border-color: var(--rosso); }
.sbam-modale-pannello iframe { flex: 1; width: 100%; border: 0; display: block; }
/* A schermo intero il pannello e' l'elemento radice: niente piu' margini. */
.sbam-modale-pannello:fullscreen { width: 100%; height: 100%; }
/* Mentre la finestra e' aperta la pagina sotto non scorre. */
body.sbam-modale-aperta { overflow: hidden; }

/* == I preferiti (M16-bis) ==================================================
   ⚠️ Il pulsante nasce SPENTO e si accende dopo il caricamento: la pagina puo'
   arrivare dalla memoria delle pagine, quindi il suo stato non puo' stare nel
   markup. Qui c'e' solo come si vede da acceso. */
/* ── Le due azioni della scheda su una riga sola ─────────────────────
   Sono due `<form>` distinti - uno posta al carrello, l'altro ai preferiti -
   quindi la fila la fa il contenitore, non si possono fondere.
   ⚠️ `align-items: center` e non `stretch`: il pulsante secondario e' piu'
   basso di proposito, e stirarlo all'altezza del primo gli restituirebbe il
   peso che gli si vuole togliere.
   ⚠️ `flex-wrap` resta: sotto i 900px la colonna della scheda si stringe e i
   due pulsanti vanno a capo da se', che sul telefono e' quello che serve. */
.azioni-prodotto {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2);
  /* `.stato-scorta` ha solo `margin-top` e `.etichette` (tema) solo
     `margin-bottom`: senza uno stacco da QUESTA parte, quel che segue - lo
     stato scorta o direttamente categorie/tag - restava incollato ai
     pulsanti. */
  margin-bottom: var(--s3);
}
.riga-preferito { margin-top: 0; }
.riga-preferito .btn[aria-pressed="true"],
.riga-preferito .e-preferito {
  /* 🔴 `--rosso-testo` e non `--rosso`: qui il rosso e' INCHIOSTRO, non una
     superficie, e sono due token diversi apposta - #dd3333 su bianco fa 4,57:1,
     cioe' passa il minimo per un pelo, #c62828 fa 5,62:1. La regola vecchia
     scriveva `var(--rosso, #c62828)`, col token sbagliato e il ripiego giusto:
     l'intenzione era questa.
     ⚠️ Finche' il pulsante era rosso pieno questo colore non si vedeva
     affatto - era rosso su rosso - quindi il difetto era invisibile per un
     difetto piu' grosso. */
  border-color: var(--rosso-testo, #c62828);
  color: var(--rosso-testo, #c62828);
  font-weight: 600;
}
/* 🔴 `hidden` da solo NON basta: `.contatore` del tema dichiara
   `display: inline-block`, e una regola d'autore vince sul `display: none`
   che il browser da' all'attributo. Senza questa riga il cuore della testata
   mostrerebbe un pallino vuoto a chi non ha preferiti. */
.contatore[hidden],
.vai-preferiti[hidden] { display: none; }
.vai-preferiti { font-size: .9rem; }
/* ⚠️ Col cuore le icone della barra mobile sono quattro, e a 360px la fila
   occupava la larghezza ESATTA dello schermo (misurato: 360 su 360). Bastava
   un numero a due cifre sopra carrello e preferiti per farla uscire.
   Si stringe il margine interno e non l'area di tocco: `min-width: 48px` del
   tema resta. */
@media (max-width: 400px) {
  .barra-mobile .icona-btn { padding: 0 10px; }
}
.shop-preferiti .shop-righe td { vertical-align: middle; }
.shop-preferiti .shop-righe form { display: inline-block; margin: 0 .35rem 0 0; }

/* == I titoli dei prodotti in Oswald =======================================
   Scelta aperta n. 4 della consegna, decisa dall'utente il 2026-09-02 dopo
   averli visti affiancati (`_DEVELOP/tema-consegna/confronto-titoli.html`):
   **tutti i titoli del sito nello stesso carattere**.

   🔴 La regola sta QUI e non in `site.css`: quello e' la consegna di Claude
   Design e non si tocca: le aggiunte vivono in questo file, caricato dopo.

   ⚠️ Serve una riga sola perche' era una sola l'eccezione. Il titolo della
   SCHEDA (`h1` dentro `.fascia-titolo`) e i titoli delle card di news erano
   gia' in Oswald, ereditandolo dalla regola degli `h1..h6`: l'unico punto in
   cui il tema dichiarava esplicitamente `--f-testo` era la mattonella del
   catalogo. E' anche il posto dove si vede di piu': in scheda il titolo e'
   uno, in catalogo sedici per pagina. */
.prodotto-titolo { font-family: var(--f-titoli); }

/* == Il menu principale ====================================================
   Due rifiniture chieste dall'utente il 2026-09-02, guardando il sito reso.

   1) VIA IL SEGNO SOTTO LA VOCE ATTIVA. Il tema disegnava la voce corrente con
      `box-shadow: inset 0 -4px 0` - una barretta scura sul fondo del bottone -
      per non affidare lo stato al solo colore. ⚠️ Togliendola lo stato resta
      comunque distinguibile in tre modi: il fondo rosso, il `font-weight: 700`
      e - quello che conta per chi non vede - l'`aria-current="page"` che il
      menu scrive gia' su quella voce.

   2) IL CORPO PIU' GRANDE. Le voci erano a 12px (13px sopra i 1280px): troppo
      piccole per un menu in maiuscolo, che perde leggibilita' piu' in fretta
      del testo normale. +2px su entrambe le misure.
      🔴 Il `@media` va RIPETUTO qui: `site.css` porta la propria regola a
      1280px con la stessa specificita', e senza questo blocco tornerebbe a
      vincere lei sopra quella larghezza. */
.menu .attivo > a { box-shadow: none; }

.menu a { font-size: 14px; }
@media (min-width: 1280px) {
  /* 🔴 A 14px il padding del tema (12px per lato sopra i 1280) non ci sta PIU'.
     Misurato sulle undici voci vere: lo spazio utile dentro il contenitore e'
     1140px, e la barra - menu piu' carrello e lente - viene 1139px. Un pixel
     di margine non e' margine: basta una lettera in piu' in una voce e il menu
     scorre di lato, dentro un contenitore che nasconde la barra di scorrimento
     (`scrollbar-width: none`) - cioe' voci irraggiungibili senza che si veda
     perche'. Con 10px la barra viene 1095 e il margine e' di 45px.
     ⚠️ Se un domani si aggiunge una voce, questo numero va rimisurato.
     🔴 E NON E' STATO RIMISURATO quando e' arrivata l'icona dell'area
     cliente: da allora la barra sforava di 27px sopra i 1280 e di 37px fra
     1140 e 1279, e la LENTE usciva tagliata a meta' senza che si vedesse.
     ⭐ Dal 2026-09-14 le icone non stanno piu' nella barra: vedi il blocco
     «Le icone del negozio nella fascia del logo» qui sotto. */
  .menu a { font-size: 14px; padding: 0 7px; }
}

/* == Le icone del negozio nella fascia del logo (2026-09-14) =================
   Area cliente, preferiti, carrello e lente stanno in alto a destra, sul
   grigio della fascia del logo, invece che in coda alla barra scura (deciso
   con Antonio). La ragione e' lo spazio: con quattro icone accanto al menu la
   barra era al pixel, e la voce «Pubblica con noi» non ci sarebbe entrata.
   ⚠️ Nessuna fascia di colore nuova: stesso grigio, icone scure e numeri in
   un pallino rosso, cioe' la stessa grammatica della barra del telefono.
   🔴 Il pallino e' `--rosso-testo` e non `--rosso`: il bianco a 11px sul rosso
   di marchio fa 4,19:1, sotto AA; su `--rosso-testo` fa 5,62:1.
   ⚠️ Solo da 1140px in su, cioe' dove c'e' la barra scura: sotto, la fascia
   del logo e' piu' bassa e le stesse icone stanno nella barra del telefono.
   ⚠️ Il contenitore e' largo quanto la fascia, e senza `pointer-events` il
   suo rettangolo coprirebbe il logo e lo renderebbe non cliccabile. */
.testa-logo { position: relative; }
.testa-azioni { display: none; }
@media (min-width: 1140px) {
  .testa-azioni {
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    pointer-events: none;
  }
  .testa-azioni .contenitore {
    display: flex;
    justify-content: flex-end;
    padding-top: var(--s1);
  }
  /* 🔴 `display: flex` e `line-height` vanno RIDICHIARATI: `site.css` ha
     `.testa-logo a { display: block; line-height: 0 }`, scritta per il link
     del logo ma con un selettore che prende ogni link della fascia - e ha
     specificita' piu' alta di `.icona-btn`. I tre link (area cliente,
     preferiti, carrello) restavano blocchi con l'icona incollata in cima,
     mentre la lente, che e' un `<button>`, sfuggiva alla regola ed era l'unica
     centrata: sembrava storta lei, ed erano storte le altre tre. */
  .testa-azioni .icona-btn {
    position: relative;
    display: flex;
    line-height: normal;
    min-width: 48px;
    min-height: 48px;
    padding: 0 12px;
    color: var(--nero-menu);
    pointer-events: auto;
  }
  .testa-azioni .icona-btn:hover { background: #e4e4e4; color: var(--nero-menu); }
  /* Il separatore fra le icone: un filetto verticale che sfuma verso le
     estremita', a meta' altezza. Sta sul bordo sinistro di ogni icona tranne
     la prima, e non occupa spazio (e' posizionato). */
  .testa-azioni .icona-btn + .icona-btn::before {
    content: "";
    position: absolute;
    left: 0;
    top: 9px;
    bottom: 9px;
    width: 1px;
    background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.28), transparent);
    pointer-events: none;
  }
  /* Piu' aria sopra il logo (+12px), cosi' la fila delle icone non gli sta
     addosso. Solo qui, dove le icone ci sono. ⚠️ Il logo si sposta solo
     perche' il contenuto (133px + 11 + 11) riempie gia' esattamente la
     `min-height: 155px` del tema: e' il padding a decidere l'altezza. */
  .testa-logo { padding-top: 23px; }
  .testa-azioni .contatore {
    position: absolute;
    top: 5px;
    left: 50%;
    margin-left: 3px;
    background: var(--rosso-testo, #c62828);
    color: var(--bianco);
  }
}
@media print {
  .testa-azioni { display: none; }
}

/* == Il menu al centro della barra ==========================================
   Senza le icone in coda il menu starebbe tutto a sinistra con un vuoto a
   destra. 🔴 `margin-inline: auto` e NON `justify-content: center`: il
   contenitore scorre in orizzontale, e un contenuto centrato piu' largo del
   contenitore perderebbe il lato SINISTRO, che non si raggiunge scorrendo.
   Coi margini automatici, quando non c'e' spazio il margine va a zero e il
   menu riparte da sinistra.
   ⭐ Le voci si riallargano un po' (2026-09-14): compresse a 7px per lato
   (6px sotto i 1280) quando dovevano convivere con le icone, ora ne hanno 9
   (7 sotto i 1280). 🔴 I numeri sono MISURATI con la voce attiva piu' larga
   in grassetto: sopra i 1280 il contenitore e' fermo a 1140px, quindi lo
   spazio non cresce allargando la finestra. Misure nel report `1017`, e se si
   aggiunge una voce vanno rifatte. */
.barra-menu .menu { margin-inline: auto; }
@media (min-width: 1280px) {
  .menu a { padding: 0 9px; }
}
@media (max-width: 1279px) {
  .menu a { padding: 0 7px; }
}

/* == La pagina della newsletter =============================================
   Una regola sola: il resto lo fa `.prosa`, che stila il corpo editoriale per
   discendenza. `.nota` e' il testo di servizio sotto il pulsante - come
   cancellarsi, dove sta l'informativa - che va letto ma non guardato. */
.newsletter .nota { font-size: 14px; color: var(--testo-sec); }

/* == Il piede ===============================================================
   Due stacchi che il tema non prevedeva, perche' nel kit questi due pulsanti
   non stavano dove stanno adesso.

   1) «Tutte le news» seguiva l'ultima notizia senza respiro: l'ultima riga
      dell'elenco non ha il filetto di separazione (`:last-child`), quindi il
      pulsante sembrava attaccato al titolo sopra.
   2) «Iscriviti alla newsletter» e' stato spostato nella prima colonna, sotto
      il testo che nomina la «newsletter periodica»: li' vuole uno stacco piu'
      largo di quello fra due paragrafi, sennO' si legge come parte del discorso
      invece che come un comando. */
.piede-col .piede-news + p { margin-top: var(--s3); }
.piede-nl { margin-top: var(--s3); }

/* I grassetti del piede tornano del colore del testo ========================
   Il tema li schiariva a `#e4e4e4` mentre i link sono bianchi: due toni troppo
   vicini, e il risultato era che nel primo paragrafo **grassetti e collegamenti
   si somigliavano**, cioe' il lettore non capiva su cosa si puo' cliccare.

   ⭐ Il sito vivo fa esattamente il contrario, ed e' stato misurato dal vivo, non
   dedotto: testo `#808080` e grassetti **dello stesso identico colore**, con i
   link piu' chiari (`#cccccc`). Il grassetto li' pesa, non colora.

   🔴 `inherit` e non un colore fisso: cosi' un `<strong>` dentro un link prende
   il colore DEL LINK e resta visibile, mentre quelli nel testo corrente si
   allineano al testo. Una riga sola copre i due casi. */
.piede-col strong,
.piede-col em { color: inherit; }

/* I link del blocco di sinistra si dichiarano ==============================
   Con i grassetti riportati al colore del testo, in quella colonna i link
   restano distinti **solo dal bianco**: rapporto misurato **1,92:1** contro il
   3:1 che servirebbe perche' il colore da solo basti (WCAG 1.4.1). La
   sottolineatura e' l'indicazione non cromatica che chiude il conto.

   ⭐ Solo qui, per decisione dell'utente e perche' e' l'unico posto dove serve:
   nelle altre due colonne i collegamenti **sono gia' elenchi di collegamenti** -
   un menu, dei pulsanti social, dei titoli di notizia - e li' e' la posizione a
   dire che si clicca. Qui invece stanno in mezzo a un discorso, accanto a
   grassetti che ora hanno lo stesso identico colore.

   ⚠️ `:not(.btn)` perche' in fondo alla colonna c'e' il pulsante della
   newsletter, che e' gia' un pulsante: sottolinearlo lo farebbe sembrare rotto. */
.piede-col--intro a:not(.btn) {
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Un pulsante dentro il corpo editoriale resta un pulsante ==================
   🔴 `.prosa a` porta il rosso dei collegamenti e ha specificita' 0,2,0, mentre
   `.btn` ne ha 0,1,0: dentro `.prosa` **il colore del link vince su quello del
   pulsante**, e il testo usciva rosso `#c62828` su fondo rosso `#dd3333` -
   **contrasto 1,23:1**, cioe' una scritta che non si legge. Visto sulla pagina
   della newsletter, ma il difetto non e' di quella pagina: colpisce **qualunque
   pulsante** messo nel corpo di una pagina editoriale.

   ⚠️ Non e' una svista del tema: nel kit i pulsanti non stavano mai dentro
   `.prosa`. E' la stessa famiglia del componente riusato fuori dal suo contesto.

   Si ridichiarano i colori delle due varianti - `a.btn` porta la specificita' a
   0,2,1 - invece di alzare la posta con un `!important`, che poi si eredita a
   ogni stato successivo. */
.prosa a.btn { color: var(--bianco); }
.prosa a.btn:hover { color: var(--bianco); }
.prosa a.btn--contorno { color: var(--testo); }
.prosa a.btn--contorno:hover { color: var(--bianco); }

/* La riga di chiusura: le note del sito da una parte, la firma sotto =========
   Il tema mette i tre blocchi in fila (`1fr auto 1fr`), e il risultato era che
   la firma «Powered by lcDesign» si prendeva un terzo della larghezza mentre il
   copyright, schiacciato nel suo terzo, **andava a capo in mezzo alla ragione
   sociale**.

   Ora la riga sopra e' tutta delle note del sito - copyright a sinistra, pagine
   legali a destra - e la firma sta sotto, da sola, centrata.

   ⚠️ Solo da 900px in su: sotto, il tema impila gia' i tre blocchi al centro e
   va benissimo cosi'. */
@media (min-width: 900px) {
  .piede-copy .contenitore {
    grid-template-columns: 1fr auto;
    column-gap: var(--s3);
  }
  /* Il copyright si prende la prima riga per se'; sotto, le pagine legali a
     sinistra e la firma a destra. ⚠️ `1 / -1` e non «colonna 3»: con due
     colonne la terza non esiste. */
  .piede-copy .contenitore > :first-child { grid-column: 1 / -1; }
  .piede-copy .piede-legali { justify-content: flex-start; }
  .piede-copy .contenitore > :last-child {
    grid-column: 2;
    text-align: right;
  }
  /* Il punto fra una voce legale e l'altra: solo da qui in su, dove stanno in
     fila. Sotto i 900px il tema le impila gia' al centro e va bene cosi'. */
  .piede-legali a + a::before {
    content: "·";
    margin-right: var(--s2);
    color: #7a7a7a;
  }
}

/* Il testo introduttivo di una sezione del negozio ==========================
   Contenitore neutro: dentro ci arriva il markup che il cliente scrive nel
   campo «Top» della categoria, e le classi del tema (`.intro-negozio`,
   `.riga-promo`) devono comportarsi esattamente come in vetrina. L'unica cosa
   che serve qui e' che un testo scritto SENZA classi non resti attaccato alla
   griglia dei libri. */
.intro-sezione { margin-bottom: var(--s3); }
.intro-sezione > p:last-child { margin-bottom: 0; }

/* La fascia della spedizione gratuita =======================================
   Variante C delle prove del 2026-09-02 (`/prove/fascia-spedizione.html`),
   scelta dall'utente: riga sobria con icona, larga quanto il contenitore, fra
   le briciole e il contenuto. Non e' un annuncio pubblicitario - non urla e non
   colora il fondo - ma non e' nemmeno una nota a pie' di pagina: l'icona e
   l'importo in grassetto la fanno leggere di sfuggita, che e' quello che serve.

   🔴 Sta FUORI dal `<main>`, quindi non eredita gli stili del contenuto: la
   larghezza se la deve dare da se' (`--fascia`, la stessa del contenitore). */
.fascia-sped {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  max-width: var(--fascia);
  margin: 0 auto;
  padding: 12px var(--s2);
  border-bottom: 2px solid var(--filetto);
  font-family: var(--f-titoli);
  font-size: 16px;
  color: var(--testo-sec);
}
.fascia-sped .ico {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  color: var(--rosso-testo);
}
.fascia-sped b { color: var(--testo); font-weight: 700; }

/* Carrello: la soglia raggiunta si vede, senza cambiare colore ==============
   Stessa riga, con l'importo tolto di mezzo e il testo pieno: la fascia dice
   una buona notizia, non un avviso. ⚠️ Niente verde: nel tema non esiste, e
   introdurne uno per una riga vorrebbe dire aggiungere un colore al marchio. */
.fascia-sped--ok { color: var(--testo); font-weight: 700; }

/* == Le mattonelle del catalogo, tutte della stessa altezza =================
   🔴 Il tema aveva scelto il CONTRARIO, e c'e' scritto: «la griglia dei
   prodotti non pareggia le altezze: ogni copertina ha la sua»
   (`.griglia--prodotti { align-items: start }`). Su un catalogo vero quella
   scelta si vede male - le copertine hanno proporzioni diverse e i titoli vanno
   a una o due righe, quindi i riquadri finiscono sfalsati e i prezzi non stanno
   su una linea. E' un cambio consapevole della consegna, chiesto dall'utente.

   Tre pezzi, e nessuno dei tre ritaglia le copertine.

   1) LA COPERTINA IN UN RIQUADRO DI PROPORZIONE FISSA, intera dentro.
      ⭐ `7 / 10` non e' un numero scelto a occhio: e' la MEDIANA misurata sulle
      70 copertine vere (1,427). Quaranta stanno fra 1,42 e 1,44, cioe' riempiono
      il riquadro quasi esatto; undici sono piu' slanciate (~1,55) e restano un
      filo piu' strette; due sono ORIZZONTALI (0,71: sono i cofanetti) e si
      posano al centro con una banda sopra e sotto.
      🔴 `object-fit: contain` e non `cover`: `cover` pareggerebbe tutto ma
      taglierebbe via testate e titoli, cioe' proprio quello che di una copertina
      si deve vedere. Meglio una banda bianca che una copertina decapitata - ed
      e' anche la ragione per cui il fondo del riquadro e' bianco: le bande non
      si notano.

   2) LA CELLA SI ALLUNGA e la scheda la riempie tutta.

   3) PREZZO E SCORTA SCENDONO IN FONDO (`margin-top: auto`), cosi' stanno su una
      linea sola anche quando un titolo va a capo e un altro no. ⚠️ Senza
      questo, pareggiare le altezze non basterebbe: i riquadri sarebbero uguali
      ma i prezzi resterebbero sfalsati, che e' il difetto che si nota di piu'.
      Niente altezza minima sul titolo: lo spazio se lo prende chi ne ha
      bisogno, e le righe di soli titoli corti non sprecano una riga vuota. */
.griglia--prodotti { align-items: stretch; }
.griglia--prodotti > * { height: 100%; }

.prodotto-media {
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 7 / 10;
  overflow: hidden;
  /* ⭐ Lo stesso grigio del corpo della card (il tema qui mette `--bianco`):
     la mattonella si legge come un pezzo unico invece che come un riquadro
     bianco incollato sopra una fascia grigia. Si nota soprattutto perche' le
     copertine hanno proporzioni diverse fra loro e `object-fit: contain`
     lascia scoperto un margine sopra e sotto: quel margine era bianco, e
     disegnava una cornice che non c'era. */
  background: var(--grigio-card);
}
.prodotto-media img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.prodotto-corpo { display: flex; flex-direction: column; }
.prodotto-corpo .prezzo { margin-top: auto; }

/* == Le mattonelle delle categorie, tutte uguali in TUTTA la griglia ========
   Qui il punto di partenza era gia' migliore che nel catalogo: le immagini di
   categoria sono tutte **quadrate** e il tema le mette in un riquadro 1:1 con
   `object-fit: contain`, quindi dentro una stessa riga le mattonelle erano gia'
   della stessa altezza a ogni larghezza provata (1280, 940, 700, 480, 375).

   ⚠️ Restava una differenza fra RIGHE DIVERSE: sotto i 400px «Bambini e
   Ragazzi» e «Costume e Societa'» vanno a capo e la loro riga cresce di 18px
   (201 → 219). Poco, ma si vede scorrendo, perche' il filetto arancione in
   fondo alle mattonelle si sfalsa.

   🔴 `grid-auto-rows: 1fr` pareggia **tutte le righe della griglia**, non solo
   quelle affiancate: e' quello che serve qui e non nel catalogo, dove le schede
   sono sedici e un titolo lungo allungherebbe tutte e quattro le righe. Le
   categorie sono nove e le etichette sono corte: il costo e' al massimo la
   riga in piu' di due nomi. */
.griglia-mattonelle {
  grid-auto-rows: 1fr;
  align-items: stretch;
}
.griglia-mattonelle > .mattonella { height: 100%; }
/* L'etichetta scende in fondo: con le righe pareggiate, senza questo il nome
   resterebbe attaccato all'immagine e sotto ci sarebbe il vuoto. */
.mattonella-etichetta { margin-top: auto; }

/* == Gli elenchi laterali: colonna di destra e piede ========================
   Due difetti diversi, misurati e non supposti.

   1) 🔴 NEL PIEDE LE MINIATURE NON ERANO TUTTE UGUALI: 84x65 la prima, 84x56 le
      altre. `.piede-news > li` e' un flex senza `align-items`, quindi il default
      e' `stretch` e la miniatura **si allunga** quando il titolo va a due righe;
      e siccome il ritaglio e' `cover`, quella foto veniva pure tagliata in modo
      diverso dalle altre. `flex-start` la lascia della sua misura.
      ⚠️ Nel piede il ritaglio `cover` si TIENE, ed e' una scelta: in un
      francobollo da 84x56 il `contain` renderebbe una locandina verticale a
      42x56, cioe' illeggibile fra due bande. E' l'opposto di quel che si fa nel
      catalogo, dove la copertina e' il contenuto e va vista intera.

   2) Le righe erano di altezze diverse (88-93 nella colonna, 80-90 nel piede) a
      seconda che il titolo stesse su una o due righe. Il titolo ne riserva due
      sempre: le righe si pareggiano **senza troncare niente**, che e' la stessa
      scelta fatta ovunque oggi.
      ⚠️ Un titolo su TRE righe allunghera' comunque la sua riga: e' voluto,
      meglio una riga piu' alta di un titolo con i puntini. */
.piede-news > li,
.widget-lista > li { align-items: flex-start; }

.piede-news .titolo,
.widget-lista .titolo { min-height: calc(2 * 1.4em); }

/* Nel piede le immagini restano RITAGLIATE, ed e' una decisione ============
   Il 2026-09-02 le si era portate a «intere» (riquadro quadrato e `contain`),
   poi l'utente ha guardato le due versioni affiancate e ha scelto di tornare al
   ritaglio del tema, che e' anche quello del sito vivo: tagliate si', ma **tutte
   della stessa forma**, e in un elenco di francobolli la regolarita' conta piu'
   del vedere l'inquadratura intera. In piu' era gia' approvato.

   ⚠️ Quindi qui NON c'e' nessuna regola: vale `site.css` (`aspect-ratio: 3/2`,
   `object-fit: cover`). Resta scritto perche' e' una scelta presa guardando, non
   una dimenticanza - e perche' e' l'opposto di quel che si fa nel catalogo, dove
   la copertina e' il contenuto e va vista intera.

   ⭐ Quel che di quel giro si TIENE e' la correzione vera, poco sopra:
   `align-items: flex-start` sulle righe. Senza, il flex stirava la miniatura
   della riga col titolo a due capi - 84x65 invece di 84x56 - e col ritaglio
   `cover` quella foto veniva tagliata in modo diverso da tutte le altre. */

/* Anche i titoli degli elenchi laterali in Oswald ===========================
   Completa la scelta gia' fatta per le mattonelle del catalogo («tutti i titoli
   del sito nello stesso carattere», scelta aperta n. 4 della consegna): la barra
   laterale e il piede erano rimasti indietro, e misurandoli erano **gli unici
   due posti** con un titolo in Open Sans - le schede news, le intestazioni dei
   riquadri e i titoli di pagina erano gia' tutti in Oswald.

   ⚠️ Il piede si include anche se la richiesta parlava della barra laterale:
   e' lo stesso tipo di elenco, e lasciarlo fuori avrebbe reso il piede l'unica
   eccezione del sito - cioe' avrebbe avuto tutta l'aria di una dimenticanza. */
.widget-lista .titolo,
.piede-news .titolo { font-family: var(--f-titoli); }

/* Lo stacco bianco fra l'intestazione del riquadro e il suo corpo ===========
   C'era sul sito vivo e nell'innesto si era perso: il tema separa i due blocchi
   con un margine, ma quel margine lascia vedere il fondo del riquadro
   (`--grigio-card`, #f2f2f2) contro l'intestazione (`--grigio-fascia`, #f5f5f5)
   - due grigi cosi' vicini che lo stacco non si legge, e il corpo sembra
   attaccato al filetto rosso.

   🔴 La regola e' su `.widget-testa + *` e non sulla sola `.widget-lista`:
   i riquadri della colonna sono **tre** e il terzo - i social - non ha una
   `.widget-lista` ma una `.social-pila`. Puntando la classe si sarebbe sistemato
   due riquadri su tre, e il terzo sarebbe rimasto diverso senza che nessuno
   capisse perche'.

   ⚠️ E' un bordo e non un margine perche' il bordo lo dipinge l'elemento: un
   margine mostrerebbe di nuovo il grigio del contenitore. */
.widget .widget-testa { margin-bottom: 0; }
.widget .widget-testa + * { border-top: 15px solid var(--bianco); }

/* I social della colonna: badge in fila, come sul sito vivo =================
   Nel tema sono un elenco verticale di pulsanti scuri col nome accanto; sul sito
   vivo sono **solo i badge**, affiancati su una riga. In una colonna stretta la
   seconda forma dice la stessa cosa in un ottavo dello spazio.

   🔴 Il nome NON viene cancellato, viene tolto dalla vista: un link il cui unico
   contenuto e' una pastiglia marcata `aria-hidden` non avrebbe **nessun testo
   accessibile**, cioe' sarebbe un collegamento che chi legge con la voce non sa
   dove porta. Qui si usa la tecnica del tema (`.solo-lettori-schermo`), scritta
   a mano perche' la classe sta sul markup e questo e' un adattamento di
   contesto.

   ⚠️ Tutto sotto `.widget--social`, che e' il riquadro della colonna: nel PIEDE
   le stesse classi restano come sono - li' c'e' spazio e il nome per esteso e'
   piu' chiaro di otto quadratini.

   ⚠️ `flex-wrap` e non una riga forzata: i social sono otto e la colonna e'
   stretta, quindi su schermi piccoli vanno a capo invece di stringersi fino a
   diventare illeggibili. */
.widget--social .social-pila {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  padding: 0 var(--s2) var(--s2);
}
.widget--social .social-btn {
  min-height: 0;
  padding: 0;
  background: none;
  border: 0;
  gap: 0;
}
.widget--social .social-btn:hover { background: none; }
.widget--social .social-btn .pastiglia {
  width: 34px;
  height: 34px;
  font-size: 15px;
  border-radius: 6px;
}
.widget--social .social-btn:hover .pastiglia { opacity: .82; }
/* Il nome resta nel documento, ma fuori dalla vista. */
.widget--social .social-nome {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* == I loghi social veri, dal pacchetto Tabler gia' in casa =================
   Le pastiglie mostravano una SIGLA («f», «ig», «wa»): era la scelta n. 5 della
   consegna, in attesa che il cliente desse i loghi. ⭐ Non servivano: i loghi
   stanno gia' nel pacchetto **Tabler Icons 3.45.0** che il core usa per il
   pannello (`app/lib/tabler-icons/`, licenza MIT), e ci sono tutti e otto.

   🔴 Erano dentro un ICON FONT, non file SVG: i path sono stati estratti dai
   glifi del woff2 con fontTools - nessuna rete, nessuna icona ridisegnata a
   occhio - e portati qui come maschere. Le otto forme condividono un viewBox
   calcolato sui loro bounding box veri, quindi hanno tutte la stessa scala
   ottica invece di ballare l'una rispetto all'altra.

   🔴 Perche' nel CSS e non nell'HTML: come `<symbol>` inline peserebbero ~8 KB
   gzip **in ogni pagina**; qui stanno in un foglio che si scarica una volta e
   che l'`.htaccess` dichiara valido dieci anni.

   ⚠️ Tutto sotto `@supports`: dove le maschere CSS non esistono, la sigla resta
   al suo posto e si vede quella. Un ripiego che e' gia' scritto nel markup vale
   piu' di un quadrato bianco. */
@supports ((-webkit-mask-image: url("")) or (mask-image: url(""))) {
  /* ⚠️ La sigla si spegne con selettori ALMENO specifici quanto quelli che le
     danno un corpo: `.social-btn .pastiglia` nel tema (0,2,0) e
     `.widget--social .social-btn .pastiglia` qui sopra (0,3,0). Con la sola
     `.pastiglia` la regola c'era e non vinceva - la maschera si disegnava
     SOTTO la sigla, che restava visibile. */
  .pastiglia { position: relative; }
  .social-btn .pastiglia,
  .widget--social .social-btn .pastiglia,
  .piede .social-btn .pastiglia { font-size: 0; }
  .pastiglia::before {
    content: "";
    position: absolute;
    inset: 16%;
    background: currentColor;
    -webkit-mask: var(--sb-ico) center / contain no-repeat;
            mask: var(--sb-ico) center / contain no-repeat;
  }
  .pastiglia.s-facebook { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M292 525Q274 525 262.0 513.0Q250 501 250 483V317Q250 299 262.0 287.0Q274 275 291.5 275.0Q309 275 321.0 287.0Q333 299 333 317V483Q333 501 321.0 513.0Q309 525 292 525ZM250 317Q250 299 262.0 287.0Q274 275 292 275H417Q434 275 446.0 287.0Q458 299 458.0 316.5Q458 334 446.0 346.0Q434 358 417 358H292Q274 358 262.0 346.0Q250 334 250 317ZM417 358Q399 358 387.0 346.0Q375 334 375 317V25Q375 8 387.0 -4.5Q399 -17 416.5 -17.0Q434 -17 446.0 -4.5Q458 8 458 25V317Q458 334 446.0 346.0Q434 358 417 358ZM375 25Q375 8 387.0 -4.5Q399 -17 417 -17H583Q601 -17 613.0 -4.5Q625 8 625.0 25.0Q625 42 613.0 54.5Q601 67 583 67H417Q399 67 387.0 54.5Q375 42 375 25ZM583 -17Q601 -17 613.0 -4.5Q625 8 625 25V317Q625 334 613.0 346.0Q601 358 583.5 358.0Q566 358 554.0 346.0Q542 334 542 317V25Q542 8 554.0 -4.5Q566 -17 583 -17ZM542 317Q542 299 554.0 287.0Q566 275 583 275H708Q726 275 738.0 287.0Q750 299 750.0 316.5Q750 334 738.0 346.0Q726 358 708 358H583Q566 358 554.0 346.0Q542 334 542 317ZM698 276Q715 272 730.0 281.0Q745 290 749 307L790 473Q795 490 786.0 505.0Q777 520 760.0 524.0Q743 528 728.5 519.0Q714 510 710 493L668 327Q664 310 673.0 295.0Q682 280 698 276ZM792 483Q792 501 779.5 513.0Q767 525 750 525H583Q566 525 554.0 513.0Q542 501 542.0 483.5Q542 466 554.0 454.0Q566 442 583 442H750Q767 442 779.5 454.0Q792 466 792 483ZM583 442Q601 442 613.0 454.0Q625 466 625 483V567Q625 584 613.0 596.0Q601 608 583.5 608.0Q566 608 554.0 596.0Q542 584 542 567V483Q542 466 554.0 454.0Q566 442 583 442ZM625 650Q590 650 566.0 625.5Q542 601 542 567Q542 549 554.0 537.0Q566 525 583.5 525.0Q601 525 613.0 537.0Q625 549 625 567Q642 567 654.5 579.0Q667 591 667.0 608.5Q667 626 654.5 638.0Q642 650 625 650ZM583 608Q583 591 595.5 579.0Q608 567 625 567H750Q767 567 779.5 579.0Q792 591 792.0 608.5Q792 626 779.5 638.0Q767 650 750 650H625Q608 650 595.5 638.0Q583 626 583 608ZM750 567Q767 567 779.5 579.0Q792 591 792 608V775Q792 792 779.5 804.5Q767 817 750.0 817.0Q733 817 720.5 804.5Q708 792 708 775V608Q708 591 720.5 579.0Q733 567 750 567ZM792 775Q792 792 779.5 804.5Q767 817 750 817H625Q608 817 595.5 804.5Q583 792 583.0 775.0Q583 758 595.5 745.5Q608 733 625 733H750Q767 733 779.5 745.5Q792 758 792 775ZM625 817Q557 817 499.5 783.0Q442 749 408.5 692.0Q375 635 375 567Q375 549 387.0 537.0Q399 525 416.5 525.0Q434 525 446.0 537.0Q458 549 458 567Q458 612 480.5 650.5Q503 689 541.5 711.0Q580 733 625 733Q642 733 654.5 745.5Q667 758 667.0 775.0Q667 792 654.5 804.5Q642 817 625 817ZM417 608Q399 608 387.0 596.0Q375 584 375 567V483Q375 466 387.0 454.0Q399 442 416.5 442.0Q434 442 446.0 454.0Q458 466 458 483V567Q458 584 446.0 596.0Q434 608 417 608ZM458 483Q458 501 446.0 513.0Q434 525 417 525H292Q274 525 262.0 513.0Q250 501 250.0 483.5Q250 466 262.0 454.0Q274 442 292 442H417Q434 442 446.0 454.0Q458 466 458 483Z'/></svg>"); }
  .pastiglia.s-instagram { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M333 775Q277 775 229.0 747.0Q181 719 153.0 671.0Q125 623 125 567Q125 549 137.0 537.0Q149 525 166.5 525.0Q184 525 196.0 537.0Q208 549 208 567Q208 601 225.0 629.5Q242 658 270.5 675.0Q299 692 333 692Q351 692 363.0 704.0Q375 716 375.0 733.5Q375 751 363.0 763.0Q351 775 333 775ZM292 733Q292 716 304.0 704.0Q316 692 333 692H667Q684 692 696.0 704.0Q708 716 708.0 733.5Q708 751 696.0 763.0Q684 775 667 775H333Q316 775 304.0 763.0Q292 751 292 733ZM875 567Q875 623 847.0 671.0Q819 719 771.0 747.0Q723 775 667 775Q649 775 637.0 763.0Q625 751 625.0 733.5Q625 716 637.0 704.0Q649 692 667 692Q701 692 729.5 675.0Q758 658 775.0 629.5Q792 601 792 567Q792 549 804.0 537.0Q816 525 833.5 525.0Q851 525 863.0 537.0Q875 549 875 567ZM833 608Q816 608 804.0 596.0Q792 584 792 567V233Q792 216 804.0 204.0Q816 192 833.5 192.0Q851 192 863.0 204.0Q875 216 875 233V567Q875 584 863.0 596.0Q851 608 833 608ZM667 25Q723 25 771.0 53.0Q819 81 847.0 129.0Q875 177 875 233Q875 251 863.0 263.0Q851 275 833.5 275.0Q816 275 804.0 263.0Q792 251 792 233Q792 199 775.0 170.5Q758 142 729.5 125.0Q701 108 667 108Q649 108 637.0 96.0Q625 84 625.0 66.5Q625 49 637.0 37.0Q649 25 667 25ZM708 67Q708 84 696.0 96.0Q684 108 667 108H333Q316 108 304.0 96.0Q292 84 292.0 66.5Q292 49 304.0 37.0Q316 25 333 25H667Q684 25 696.0 37.0Q708 49 708 67ZM125 233Q125 177 153.0 129.0Q181 81 229.0 53.0Q277 25 333 25Q351 25 363.0 37.0Q375 49 375.0 66.5Q375 84 363.0 96.0Q351 108 333 108Q299 108 270.5 125.0Q242 142 225.0 170.5Q208 199 208 233Q208 251 196.0 263.0Q184 275 166.5 275.0Q149 275 137.0 263.0Q125 251 125 233ZM167 192Q184 192 196.0 204.0Q208 216 208 233V567Q208 584 196.0 596.0Q184 608 166.5 608.0Q149 608 137.0 596.0Q125 584 125 567V233Q125 216 137.0 204.0Q149 192 167 192ZM333 400Q333 355 355.5 316.5Q378 278 416.5 255.5Q455 233 500.0 233.0Q545 233 583.5 255.5Q622 278 644.5 316.5Q667 355 667 400Q667 417 654.5 429.5Q642 442 625.0 442.0Q608 442 595.5 429.5Q583 417 583 400Q583 365 559.0 341.0Q535 317 500.0 317.0Q465 317 441.0 341.0Q417 365 417 400Q417 417 404.5 429.5Q392 442 375.0 442.0Q358 442 345.5 429.5Q333 417 333 400ZM667 400Q667 445 644.5 483.5Q622 522 583.5 544.5Q545 567 500.0 567.0Q455 567 416.5 544.5Q378 522 355.5 483.5Q333 445 333 400Q333 383 345.5 370.5Q358 358 375.0 358.0Q392 358 404.5 370.5Q417 383 417 400Q417 435 441.0 459.0Q465 483 500.0 483.0Q535 483 559.0 459.0Q583 435 583 400Q583 383 595.5 370.5Q608 358 625.0 358.0Q642 358 654.5 370.5Q667 383 667 400ZM688 629Q670 629 658.0 617.0Q646 605 646 588V587Q646 570 658.0 557.5Q670 545 687.5 545.0Q705 545 717.0 557.5Q729 570 729 587V588Q729 605 717.0 617.0Q705 629 688 629Z'/></svg>"); }
  .pastiglia.s-whatsapp { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M108 -13Q124 -20 140.0 -13.5Q156 -7 163 8L232 167Q239 183 232.5 199.0Q226 215 210.5 221.5Q195 228 178.5 222.0Q162 216 156 200L87 42Q80 26 86.5 10.0Q93 -6 108 -13ZM317 25Q410 -20 513 -17Q614 -14 702 34Q792 84 848.5 170.5Q905 257 915 360Q925 460 887 553Q849 649 770.5 716.0Q692 783 591 806Q493 828 396 803Q296 777 219.5 707.0Q143 637 108 540Q74 446 87 346Q100 244 160 159Q170 145 187.0 142.0Q204 139 218.0 149.0Q232 159 235.0 176.0Q238 193 228 207Q180 275 169.5 356.0Q159 437 187.0 513.5Q215 590 276.0 645.5Q337 701 416.0 721.5Q495 742 574.5 724.5Q654 707 717.0 653.0Q780 599 810.0 523.5Q840 448 832.0 367.0Q824 286 779.0 216.5Q734 147 662.5 108.0Q591 69 509.5 66.0Q428 63 354 100Q338 107 322.0 101.5Q306 96 298.0 80.5Q290 65 296.0 49.0Q302 33 317 25ZM376 70Q373 87 359.0 97.0Q345 107 328 103L118 66Q101 63 91.0 49.0Q81 35 84.0 18.0Q87 1 101.0 -9.0Q115 -19 132 -16L343 22Q360 25 369.5 39.0Q379 53 376 70ZM333 483Q333 457 351.5 439.0Q370 421 396.0 421.0Q422 421 440.0 439.0Q458 457 458 483Q458 494 452.5 504.0Q447 514 437.5 519.5Q428 525 416.5 525.0Q405 525 396 519Q386 525 375.0 525.0Q364 525 354.5 519.5Q345 514 339.0 504.0Q333 494 333 483ZM417 442Q434 442 446.0 454.0Q458 466 458 483V525Q458 542 446.0 554.5Q434 567 416.5 567.0Q399 567 387.0 554.5Q375 542 375 525V483Q375 466 387.0 454.0Q399 442 417 442ZM458 525Q458 551 440.0 569.0Q422 587 396.0 587.0Q370 587 351.5 569.0Q333 551 333 525Q333 514 339.0 504.5Q345 495 354.5 489.0Q364 483 375.0 483.0Q386 483 396 489Q405 483 416.5 483.0Q428 483 437.5 489.0Q447 495 452.5 504.5Q458 514 458 525ZM375 567Q358 567 345.5 554.5Q333 542 333 525V483Q333 466 345.5 454.0Q358 442 375.0 442.0Q392 442 404.5 454.0Q417 466 417 483V525Q417 542 404.5 554.5Q392 567 375 567ZM333 483Q333 415 367.0 358.0Q401 301 458.0 267.0Q515 233 583 233Q601 233 613.0 245.5Q625 258 625.0 275.0Q625 292 613.0 304.5Q601 317 583 317Q538 317 499.5 339.0Q461 361 439.0 399.5Q417 438 417 483Q417 501 404.5 513.0Q392 525 375.0 525.0Q358 525 345.5 513.0Q333 501 333 483ZM542 275Q542 258 554.0 245.5Q566 233 583 233H625Q642 233 654.5 245.5Q667 258 667.0 275.0Q667 292 654.5 304.5Q642 317 625 317H583Q566 317 554.0 304.5Q542 292 542 275ZM625 233Q651 233 669.0 251.5Q687 270 687.0 296.0Q687 322 669.0 340.0Q651 358 625 358Q614 358 604.5 352.5Q595 347 589.0 337.5Q583 328 583.0 316.5Q583 305 589 296Q583 286 583.0 275.0Q583 264 589.0 254.5Q595 245 604.5 239.0Q614 233 625 233ZM667 317Q667 334 654.5 346.0Q642 358 625 358H583Q566 358 554.0 346.0Q542 334 542.0 316.5Q542 299 554.0 287.0Q566 275 583 275H625Q642 275 654.5 287.0Q667 299 667 317ZM583 358Q557 358 539.0 340.0Q521 322 521.0 296.0Q521 270 539.0 251.5Q557 233 583 233Q594 233 604.0 239.0Q614 245 619.5 254.5Q625 264 625.0 275.0Q625 286 619 296Q625 305 625.0 316.5Q625 328 619.5 337.5Q614 347 604.0 352.5Q594 358 583 358Z'/></svg>"); }
  .pastiglia.s-x { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M142 767Q128 757 125.5 740.0Q123 723 133 709L622 42Q632 28 649.0 25.5Q666 23 680.0 33.0Q694 43 696.5 60.0Q699 77 689 91L200 758Q190 772 173.0 774.5Q156 777 142 767ZM614 67Q614 49 626.0 37.0Q638 25 656 25H833Q851 25 863.0 37.0Q875 49 875.0 66.5Q875 84 863.0 96.0Q851 108 833 108H656Q638 108 626.0 96.0Q614 84 614 67ZM858 33Q872 43 874.5 60.0Q877 77 867 91L378 758Q368 772 351.0 774.5Q334 777 320.0 767.0Q306 757 303.5 740.0Q301 723 311 709L800 42Q810 28 827.0 25.5Q844 23 858 33ZM386 733Q386 751 374.0 763.0Q362 775 344 775H167Q149 775 137.0 763.0Q125 751 125.0 733.5Q125 716 137.0 704.0Q149 692 167 692H344Q362 692 374.0 704.0Q386 716 386 733ZM137 37Q149 25 166.5 25.0Q184 25 196 37L478 319Q490 331 490.0 348.5Q490 366 478.0 378.0Q466 390 448.5 390.0Q431 390 419 378L137 96Q125 84 125.0 66.5Q125 49 137 37ZM522 422Q534 410 551.0 410.0Q568 410 581 422L863 704Q875 716 875.0 733.5Q875 751 863.0 763.0Q851 775 833.5 775.0Q816 775 804 763L522 481Q510 468 510.0 451.0Q510 434 522 422Z'/></svg>"); }
  .pastiglia.s-tiktok { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M875 612Q858 612 845.5 599.5Q833 587 833 570V402Q833 385 845.5 372.5Q858 360 875.0 360.0Q892 360 904.5 372.5Q917 385 917 402V570Q917 587 904.5 599.5Q892 612 875 612ZM642 450Q692 412 750.5 389.5Q809 367 871 361Q888 359 901.5 370.0Q915 381 916.5 398.0Q918 415 907.0 428.5Q896 442 879 443Q775 454 692 517Q678 527 661.0 524.5Q644 522 633.5 508.5Q623 495 625.5 477.5Q628 460 642 450ZM667 525Q649 525 637.0 513.0Q625 501 625 483V296Q625 279 637.0 266.5Q649 254 666.5 254.0Q684 254 696.0 266.5Q708 279 708 296V483Q708 501 696.0 513.0Q684 525 667 525ZM324 600Q246 581 187.5 528.0Q129 475 102.0 401.0Q75 327 87.5 247.5Q100 168 148.0 105.5Q196 43 268.0 10.5Q340 -22 420.0 -15.5Q500 -9 566.0 34.0Q632 77 670.0 146.0Q708 215 708 296Q708 313 696.0 325.0Q684 337 666.5 337.0Q649 337 637.0 325.0Q625 313 625 296Q625 237 597.0 186.0Q569 135 520.5 103.5Q472 72 413.5 67.5Q355 63 302.0 87.0Q249 111 213.5 156.5Q178 202 169.0 260.5Q160 319 180.0 373.5Q200 428 243.0 466.5Q286 505 343 519Q360 523 369.0 537.5Q378 552 374.0 569.0Q370 586 355.5 595.0Q341 604 324 600ZM333 601Q316 601 304.0 589.0Q292 577 292 559V379Q292 362 304.0 350.0Q316 338 333.5 338.0Q351 338 363.0 350.0Q375 362 375 379V559Q375 577 363.0 589.0Q351 601 333 601ZM308 412Q267 382 254.5 332.0Q242 282 263.5 235.0Q285 188 331.0 165.0Q377 142 427.0 153.0Q477 164 509.5 204.0Q542 244 542 296Q542 313 529.5 325.0Q517 337 500.0 337.0Q483 337 470.5 325.0Q458 313 458 296Q458 274 444.5 256.5Q431 239 409.5 234.5Q388 230 368.0 240.0Q348 250 339.0 270.0Q330 290 335.5 311.5Q341 333 358 346Q372 356 374.5 373.0Q377 390 366.5 404.0Q356 418 339.0 420.5Q322 423 308 412ZM500 254Q517 254 529.5 266.5Q542 279 542 296V775Q542 792 529.5 804.5Q517 817 500.0 817.0Q483 817 470.5 804.5Q458 792 458 775V296Q458 279 470.5 266.5Q483 254 500 254ZM458 775Q458 758 470.5 745.5Q483 733 500 733H670Q687 733 699.5 745.5Q712 758 712.0 775.0Q712 792 699.5 804.5Q687 817 670 817H500Q483 817 470.5 804.5Q458 792 458 775ZM629 768Q639 707 672.5 656.5Q706 606 756.5 572.5Q807 539 868 529Q885 526 899.0 536.0Q913 546 916.0 563.0Q919 580 909.0 594.0Q899 608 882 611Q816 622 769.0 669.0Q722 716 711 782Q708 799 694.0 809.0Q680 819 663.0 816.0Q646 813 636.0 799.0Q626 785 629 768Z'/></svg>"); }
  .pastiglia.s-youtube { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M250 775Q193 775 145.5 747.0Q98 719 70.0 671.0Q42 623 42 567Q42 549 54.0 537.0Q66 525 83.5 525.0Q101 525 113.0 537.0Q125 549 125 567Q125 601 142.0 629.5Q159 658 187.5 675.0Q216 692 250 692Q267 692 279.5 704.0Q292 716 292.0 733.5Q292 751 279.5 763.0Q267 775 250 775ZM208 733Q208 716 220.5 704.0Q233 692 250 692H750Q767 692 779.5 704.0Q792 716 792.0 733.5Q792 751 779.5 763.0Q767 775 750 775H250Q233 775 220.5 763.0Q208 751 208 733ZM958 567Q958 623 930.0 671.0Q902 719 854.5 747.0Q807 775 750 775Q733 775 720.5 763.0Q708 751 708.0 733.5Q708 716 720.5 704.0Q733 692 750 692Q784 692 812.5 675.0Q841 658 858.0 629.5Q875 601 875 567Q875 549 887.0 537.0Q899 525 916.5 525.0Q934 525 946.0 537.0Q958 549 958 567ZM917 608Q899 608 887.0 596.0Q875 584 875 567V233Q875 216 887.0 204.0Q899 192 916.5 192.0Q934 192 946.0 204.0Q958 216 958 233V567Q958 584 946.0 596.0Q934 608 917 608ZM750 25Q807 25 854.5 53.0Q902 81 930.0 129.0Q958 177 958 233Q958 251 946.0 263.0Q934 275 916.5 275.0Q899 275 887.0 263.0Q875 251 875 233Q875 199 858.0 170.5Q841 142 812.5 125.0Q784 108 750 108Q733 108 720.5 96.0Q708 84 708.0 66.5Q708 49 720.5 37.0Q733 25 750 25ZM792 67Q792 84 779.5 96.0Q767 108 750 108H250Q233 108 220.5 96.0Q208 84 208.0 66.5Q208 49 220.5 37.0Q233 25 250 25H750Q767 25 779.5 37.0Q792 49 792 67ZM42 233Q42 177 70.0 129.0Q98 81 145.5 53.0Q193 25 250 25Q267 25 279.5 37.0Q292 49 292.0 66.5Q292 84 279.5 96.0Q267 108 250 108Q216 108 187.5 125.0Q159 142 142.0 170.5Q125 199 125 233Q125 251 113.0 263.0Q101 275 83.5 275.0Q66 275 54.0 263.0Q42 251 42 233ZM83 192Q101 192 113.0 204.0Q125 216 125 233V567Q125 584 113.0 596.0Q101 608 83.5 608.0Q66 608 54.0 596.0Q42 584 42 567V233Q42 216 54.0 204.0Q66 192 83 192ZM381 546Q372 532 376.0 515.0Q380 498 395 489L604 364Q613 359 624.0 358.5Q635 358 645.0 363.5Q655 369 660.5 378.5Q666 388 666.5 399.0Q667 410 661.5 420.0Q656 430 646 436L438 561Q423 570 406.5 565.5Q390 561 381 546ZM661 421Q652 436 635.0 440.5Q618 445 604 436L395 311Q380 302 376.0 285.0Q372 268 381.0 253.5Q390 239 406.5 234.5Q423 230 438 239L646 364Q661 373 665.5 390.0Q670 407 661 421ZM417 233Q434 233 446.0 245.5Q458 258 458 275V525Q458 542 446.0 554.5Q434 567 416.5 567.0Q399 567 387.0 554.5Q375 542 375 525V275Q375 258 387.0 245.5Q399 233 417 233Z'/></svg>"); }
  .pastiglia.s-linkedin { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M333 483Q316 483 304.0 471.0Q292 459 292 442V233Q292 216 304.0 204.0Q316 192 333.5 192.0Q351 192 363.0 204.0Q375 216 375 233V442Q375 459 363.0 471.0Q351 483 333 483ZM333 608Q316 608 304.0 596.0Q292 584 292 567V566Q292 549 304.0 537.0Q316 525 333.5 525.0Q351 525 363.0 537.0Q375 549 375 566V567Q375 584 363.0 596.0Q351 608 333 608ZM500 192Q517 192 529.5 204.0Q542 216 542 233V442Q542 459 529.5 471.0Q517 483 500.0 483.0Q483 483 470.5 471.0Q458 459 458 442V233Q458 216 470.5 204.0Q483 192 500 192ZM667 192Q684 192 696.0 204.0Q708 216 708 233V358Q708 376 696.0 388.0Q684 400 666.5 400.0Q649 400 637.0 388.0Q625 376 625 358V233Q625 216 637.0 204.0Q649 192 667 192ZM708 358Q708 392 691.5 421.0Q675 450 646.0 466.5Q617 483 583.0 483.0Q549 483 520.5 466.5Q492 450 475.0 421.0Q458 392 458 358Q458 341 470.5 329.0Q483 317 500.0 317.0Q517 317 529.5 329.0Q542 341 542.0 358.5Q542 376 554.0 388.0Q566 400 583.5 400.0Q601 400 613.0 388.0Q625 376 625.0 358.5Q625 341 637.0 329.0Q649 317 666.5 317.0Q684 317 696.0 329.0Q708 341 708 358ZM292 817Q235 817 187.0 789.0Q139 761 111.0 713.0Q83 665 83 608Q83 591 95.5 579.0Q108 567 125.0 567.0Q142 567 154.5 579.0Q167 591 167 608Q167 642 183.5 671.0Q200 700 229.0 716.5Q258 733 292 733Q309 733 321.0 745.5Q333 758 333.0 775.0Q333 792 321.0 804.5Q309 817 292 817ZM250 775Q250 758 262.0 745.5Q274 733 292 733H708Q726 733 738.0 745.5Q750 758 750.0 775.0Q750 792 738.0 804.5Q726 817 708 817H292Q274 817 262.0 804.5Q250 792 250 775ZM917 608Q917 665 889.0 713.0Q861 761 813.0 789.0Q765 817 708 817Q691 817 679.0 804.5Q667 792 667.0 775.0Q667 758 679.0 745.5Q691 733 708 733Q742 733 771.0 716.5Q800 700 816.5 671.0Q833 642 833 608Q833 591 845.5 579.0Q858 567 875.0 567.0Q892 567 904.5 579.0Q917 591 917 608ZM875 650Q858 650 845.5 638.0Q833 626 833 608V192Q833 174 845.5 162.0Q858 150 875.0 150.0Q892 150 904.5 162.0Q917 174 917 192V608Q917 626 904.5 638.0Q892 650 875 650ZM708 -17Q765 -17 813.0 11.0Q861 39 889.0 87.0Q917 135 917 192Q917 209 904.5 221.0Q892 233 875.0 233.0Q858 233 845.5 221.0Q833 209 833 192Q833 158 816.5 129.0Q800 100 771.0 83.5Q742 67 708 67Q691 67 679.0 54.5Q667 42 667.0 25.0Q667 8 679.0 -4.5Q691 -17 708 -17ZM750 25Q750 42 738.0 54.5Q726 67 708 67H292Q274 67 262.0 54.5Q250 42 250.0 25.0Q250 8 262.0 -4.5Q274 -17 292 -17H708Q726 -17 738.0 -4.5Q750 8 750 25ZM83 192Q83 135 111.0 87.0Q139 39 187.0 11.0Q235 -17 292 -17Q309 -17 321.0 -4.5Q333 8 333.0 25.0Q333 42 321.0 54.5Q309 67 292 67Q258 67 229.0 83.5Q200 100 183.5 129.0Q167 158 167 192Q167 209 154.5 221.0Q142 233 125.0 233.0Q108 233 95.5 221.0Q83 209 83 192ZM125 150Q142 150 154.5 162.0Q167 174 167 192V608Q167 626 154.5 638.0Q142 650 125.0 650.0Q108 650 95.5 638.0Q83 626 83 608V192Q83 174 95.5 162.0Q108 150 125 150Z'/></svg>"); }
  .pastiglia.s-threads { --sb-ico: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='42 -858 916 916'><path transform='scale(1,-1)' d='M830 603Q804 670 753.5 720.0Q703 770 636.5 795.5Q570 821 498 817Q480 816 468.5 803.0Q457 790 458.0 772.5Q459 755 472.0 743.5Q485 732 502 733Q557 737 607.0 717.5Q657 698 695.0 660.5Q733 623 753 572Q759 556 775.0 549.0Q791 542 807.0 548.5Q823 555 830.0 571.0Q837 587 830 603ZM502 817Q442 819 384.0 804.5Q326 790 275 759L273 758Q223 723 189.0 672.0Q155 621 143 561Q124 481 125 399Q125 382 137.5 370.0Q150 358 167.0 358.5Q184 359 196.5 371.0Q209 383 208 401Q207 472 224 542V543Q233 587 258.0 625.0Q283 663 319 689Q402 738 498 733Q515 733 528.0 744.5Q541 756 541.5 773.0Q542 790 530.5 803.0Q519 816 502 817ZM128 385Q131 378 133 371Q142 351 151 331Q170 292 191 253Q208 221 227 191Q288 88 386 19L387 18Q438 -15 499 -17Q516 -17 528.5 -5.0Q541 7 541.5 24.0Q542 41 530.0 53.5Q518 66 501 67Q464 68 433 88Q350 146 299 234L298 235Q280 263 264 293Q244 329 227 367Q218 385 210 404L205 415Q199 431 183.0 438.0Q167 445 151.0 438.5Q135 432 128.5 416.5Q122 401 128 385ZM517 -13Q523 -10 530 -7L569 11Q615 33 660 58L666 62Q718 90 764 126L773 134Q796 153 814.0 177.0Q832 201 833 231Q834 248 822.5 261.0Q811 274 794.0 275.0Q777 276 764.0 264.5Q751 253 750 236Q750 231 747 227L746 226Q735 210 720 198L712 192Q671 160 626 134L619 131Q577 107 533 86L483 63Q473 59 466.5 50.0Q460 41 458.5 30.0Q457 19 461.5 8.5Q466 -2 475.0 -8.5Q484 -15 495.0 -16.5Q506 -18 517 -13ZM748 234Q750 229 751 224Q755 208 769.5 198.5Q784 189 800.5 192.5Q817 196 826.5 210.5Q836 225 832 242Q830 251 828 260Q819 285 807 309Q792 338 772 363Q732 413 676 443Q620 472 558 480Q529 483 500 483Q483 483 470.5 471.0Q458 459 458.0 441.5Q458 424 470.5 412.0Q483 400 500 400Q524 400 547 397H548Q595 391 636.5 369.5Q678 348 707 312Q722 293 733 271Q742 254 748 234ZM503 483Q442 487 391 456L387 454Q359 433 344.5 401.0Q330 369 334 334Q335 317 348.5 306.0Q362 295 379.0 296.5Q396 298 407.0 311.0Q418 324 416 341Q415 354 420.0 366.0Q425 378 435 386Q464 402 497 400Q515 399 527.5 410.5Q540 422 541.5 439.0Q543 456 531.5 469.0Q520 482 503 483ZM333 340Q332 310 342.5 282.0Q353 254 374.0 232.5Q395 211 423.5 200.5Q452 190 482 192Q499 193 510.5 206.0Q522 219 521.0 236.0Q520 253 507.0 264.5Q494 276 477 275Q451 273 433.0 291.0Q415 309 417 335Q418 352 406.5 365.0Q395 378 377.5 379.0Q360 380 347.0 368.5Q334 357 333 340ZM475 192Q511 189 545.0 200.0Q579 211 605.5 235.0Q632 259 646.5 291.5Q661 324 661 360Q667 401 667 442Q666 459 654.0 471.0Q642 483 624.5 483.0Q607 483 595.0 471.0Q583 459 583 441Q584 405 578 369V363Q578 344 571.0 327.0Q564 310 550.0 297.5Q536 285 518.5 279.0Q501 273 483 275Q472 276 462.0 271.0Q452 266 445.5 257.0Q439 248 438.0 237.0Q437 226 441.5 216.0Q446 206 455.0 199.5Q464 193 475 192ZM662 460Q660 464 658 468L641 501Q628 524 614.0 546.5Q600 569 585 590Q568 614 545 632Q527 648 504 650Q487 651 474.0 640.5Q461 630 459.0 613.5Q457 597 466.5 583.5Q476 570 493 567Q507 556 517 541V540Q531 522 543 503Q556 482 568 460L588 423Q596 408 612.0 402.5Q628 397 643.5 404.5Q659 412 664.5 428.5Q670 445 662 460ZM492 649Q482 647 472 645Q451 640 430 632Q396 621 369 598Q356 587 354.5 570.0Q353 553 364.0 540.0Q375 527 392.5 525.5Q410 524 423.5 535.5Q437 547 455 553L457 554Q474 560 492 564L508 567Q525 571 534.5 585.0Q544 599 541.0 616.0Q538 633 523.5 642.5Q509 652 492 649Z'/></svg>"); }
}

/* Le miniature del widget su fondo trasparente =============================
   Il tema le mette su `--bianco`, quindi ogni copertina si porta dietro un
   quadratino bianco dentro la card grigia: un riquadro che si vede anche quando
   l'immagine e' piu' stretta di lui - ed e' quasi sempre, visto che le copertine
   sono verticali dentro un riquadro 1:1.

   Trasparente, il fondo che si vede e' quello della card e restano solo le
   copertine. ⚠️ Non e' solo estetica: cosi' l'unico rettangolo bianco in quella
   colonna torna a essere l'immagine vera, quando ce l'ha. */
.widget-miniatura { background: transparent; }

/* == Il piede: due rifiniture ===============================================

   1) I SOCIAL RESPIRANO UN PIXEL IN PIU'. `gap: 7px` invece di 6: nel piede la
      pila e' verticale e otto pulsanti attaccati sembrano un blocco unico.
      ⚠️ Tocca solo il piede: nella colonna la stessa classe ha gia' il suo
      `gap` (8px) in questo stesso foglio, e vince perche' e' piu' specifico.

   2) IL PUNTINO GRIGIO DIVENTA UNA FRECCETTA ROSSA. Il pallino di default e'
      l'unico segno del piede che non appartiene al tema - grigio di sistema, in
      una colonna dove tutto il resto e' rosso o bianco.
      ⭐ La freccetta e' **la stessa** che il tema usa nelle briciole di pane
      (`sbam_ico('chevron')`, lo stesso `polyline`): non e' un segno nuovo, e'
      quello del sito riusato dove serve.
      🔴 Come `background-image` e non come maschera: e' gia' del colore giusto
      e non deve cambiarlo, quindi non c'e' motivo di dipendere da `mask` (e dal
      suo `@supports`). Il colore e' `--rosso` scritto per esteso perche' dentro
      un `data:` URI le variabili CSS non arrivano.
      ⚠️ `list-style: none` e allineamento a mano: il segno va sulla PRIMA riga
      del testo, non centrato sulla voce, sennO' una voce che va a capo lo
      sposta a meta'. */
.sito-piede .social-pila { gap: 7px; }
/* ⭐ Lo stacco sopra il piede (2026-09-14). Finche' c'era la fila dei social
   tondi sopra (`.piede-social`, ~108px con il suo padding) lo spazio lo dava
   lei; tolta quella, il piede si incollava all'ultima sezione, a ~32px dai
   riquadri della home. Il margine sta sul piede e non sul `<main>`, perche' il
   `<main>` cambia forma da vista a vista (colonna singola, due colonne, negozio)
   mentre il piede e' uno solo. */
.sito-piede { margin-top: var(--s5); }

.piede-menu { list-style: none; padding-left: 0; }
.piede-menu li {
  position: relative;
  padding-left: 22px;
}
.piede-menu li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 0.45em;
  width: 11px;
  height: 11px;
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23dd3333' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='9 5 16 12 9 19'/></svg>") center / contain no-repeat;
}


/* ── La copertina in cima a una pagina editoriale ──────────────────────
   Nella bozza (`pagina.html`) l'immagine di apertura riempie la colonna, ma
   la' e' un caso: il file di esempio era largo 800px e la colonna ne misura
   750. Il file VERO del cliente e' 606px - lo stesso che il sito vivo serve
   dentro un riquadro da 750x400 - quindi senza questa riga uscirebbe a
   sinistra con 144px di bianco a destra: la stessa immagine, un'altra pagina.

   ⚠️ `width` e non `max-width`: l'ingrandimento e' voluto ed e' esattamente
   quello che fa gia' il sito da cui stiamo traslocando. Su un logo dai bordi
   morbidi non si vede; se un giorno il cliente ci desse il file grande, questa
   riga continuerebbe a fare la cosa giusta.
   Nella bozza il margine era a zero e lo stacco veniva dalla sola interlinea
   del sommario: sul vivo, col logo a fondo nero, il testo attaccava al bordo
   dell'immagine (visto il 2026-09-04). Ora sotto c'e' lo stesso spazio che
   `.prosa figure` mette attorno a una figura. */
.prosa .copertina-pagina { display: block; width: 100%; margin: 0 0 var(--s3); }

/* -- il modulo di recesso e la dichiarazione (R2) ----------------------------
   Il core stampa il modulo tipo e la dichiarazione dentro un `<pre>`: un testo
   che si stampa e si copia va lasciato a spaziatura fissa, ma sul telefono
   deve andare a capo, sennO' una riga di sottolineature esce dallo schermo. */
.modulo-recesso,
.shop-recedi pre {
  white-space: pre-wrap;
  word-break: break-word;
  background: #f5f5f5;
  padding: var(--s2);
  font-size: 14px;
  line-height: 1.45;
}
.shop-recedi-form input[type="text"],
.shop-recedi-form input[type="email"],
.shop-recedi-form select,
.shop-recedi-form textarea { width: 100%; max-width: 480px; }
.shop-recedi-form input[type="number"] { width: 5em; }

/* -- l'avviso armonizzato sulla garanzia legale (dal 27/09/2026) -------------
   Il core lo compone in tre tagli (`lcr_legal_avviso_garanzia`): «cassa» sopra
   il pulsante, «compatto» ripiegato nella scheda prodotto, «pieno» nella pagina
   Garanzia legale e nelle condizioni. L'immagine e' il modello ufficiale del
   MIMIT, 794x1123: a colori e leggibile e' un requisito, non una scelta. */
.shop-garanzia { margin: var(--s3) 0; }
.shop-garanzia img {
  display: block;
  max-width: 100%;
  height: auto;
  border: 1px solid var(--filetto);
  margin: 0 auto;
}
/* ⚠️ `min(…, 100%)` e non il solo tetto in px: con la stessa specificita' e
   dichiarato dopo, il tetto scavalcava il `max-width: 100%` qui sopra e
   l'immagine usciva dalla colonna sul telefono - il difetto trovato sui tre
   WordPress il 2026-09-06 (lc-recesso 1.2.1). */
.shop-garanzia--pieno img { max-width: min(560px, 100%); }

/* ⭐ 6.1 - IL PULSANTE CON LO SCUDO, in cassa e nella scheda: lo stesso dei tre
   WordPress (lc-recesso 1.3.0), che l'utente ha voluto anche qui. Apre
   l'avviso in una finestra; senza JavaScript e' un link alla pagina.
   Blu e giallo sono quelli dell'Unione, non del tema: e' un'informazione di
   legge e deve distinguersi dai pulsanti del negozio. #003399 su bianco fa
   12,6:1. */
.shop-garanzia--cassa,
.shop-garanzia--compatto { margin: var(--s2) 0; }
.shop-gar-btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  max-width: 100%;
  padding: 8px 14px;
  border: 2px solid #003399;
  border-radius: 6px;
  background: var(--bianco);
  color: #003399;
  line-height: 1.2;
  text-decoration: none;
}
.shop-gar-btn:hover,
.shop-gar-btn:focus-visible {
  background: #eef2fb;
  color: #003399;
  text-decoration: none;
}
.shop-gar-icona { flex: 0 0 28px; width: 28px; height: 28px; }
.shop-gar-testo {
  display: flex;
  flex-direction: column;
  min-width: 0;
  text-align: left;
}
.shop-gar-testo strong { font-size: 15px; font-weight: 700; }
.shop-gar-testo small { font-size: 13px; opacity: .85; }
/* In cassa sta a tutta larghezza, allineato al pulsante per comprare sotto. */
.shop-garanzia--cassa .shop-gar-btn { width: 100%; justify-content: center; }
/* ⭐ Nella SCHEDA PRODOTTO (2026-09-15) il pulsante diventa una riga discreta:
   scudo piccolo, niente bordo ne' fondo, testo grigio in corpo 13 e il
   «Leggi l'avviso» sottolineato perche' si capisca che si clicca. Il cliente
   lo trovava troppo in vista: bordato di blu, pesava quanto «Aggiungi al
   carrello». Lo script lo ha anche spostato in fondo alla scheda.
   ⚠️ Solo il taglio «compatto»: in CASSA resta il pulsante pieno, perche' li'
   l'avviso e' informazione precontrattuale e va dato ben visibile.
   #666 su bianco fa 5,74:1, e l'area cliccabile resta tutta la riga. */
.shop-garanzia--compatto .shop-gar-btn {
  gap: 6px;
  padding: 4px 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--testo-sec);
}
.shop-garanzia--compatto .shop-gar-btn:hover,
.shop-garanzia--compatto .shop-gar-btn:focus-visible {
  background: transparent;
  color: var(--rosso-testo);
}
.shop-garanzia--compatto .shop-gar-icona { flex-basis: 18px; width: 18px; height: 18px; }
.shop-garanzia--compatto .shop-gar-testo {
  flex-direction: row;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 .35em;
}
.shop-garanzia--compatto .shop-gar-testo strong { font-size: 13px; font-weight: 600; }
.shop-garanzia--compatto .shop-gar-testo small {
  font-size: 13px;
  opacity: 1;
  text-decoration: underline;
}

/* -- la finestra dell'avviso (una per pagina, la stampa il piede) --------- */
.shop-gar-finestra[hidden] { display: none; }
.shop-gar-finestra {
  position: fixed;
  inset: 0;
  z-index: 2147483000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--s2);
}
.shop-gar-sfondo {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, .65);
}
.shop-gar-riquadro {
  position: relative;
  width: 100%;
  max-width: 640px;
  max-height: calc(100vh - 32px);
  overflow: auto;
  padding: 48px var(--s2) var(--s2);
  border-radius: 8px;
  background: var(--bianco);
  box-shadow: 0 10px 40px rgba(0, 0, 0, .4);
}
.shop-gar-riquadro img {
  display: block;
  width: 100%;
  height: auto;
  border: 1px solid var(--filetto);
}
/* ⚠️ `button.` davanti per battere lo stile che il tema da' ai pulsanti in
   generale: questa X deve restare un cerchietto. */
button.shop-gar-chiudi {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 36px;
  height: 36px;
  min-width: 0;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: #eee;
  color: #222;
  font-size: 24px;
  line-height: 36px;
  text-align: center;
  cursor: pointer;
}
button.shop-gar-chiudi:hover,
button.shop-gar-chiudi:focus-visible { background: #ddd; }
body.shop-gar-aperta { overflow: hidden; }
.shop-garanzia-didascalia {
  font-size: 14px;
  color: var(--grigio-testo, #555);
  margin: var(--s1) 0 0;
  text-align: center;
}
/* la riga «Consegna: solo in … Pagamenti accettati: …» in testa al carrello
   (art. 51 c.3): informazione, non avviso - quindi niente giallo */
.shop-inizio {
  font-size: 15px;
  border-left: 3px solid var(--filetto);
  padding-left: var(--s2);
  margin: 0 0 var(--s3);
}

/* == I riquadri scuri della home: il titolo si vedeva bianco su grigio =======
   Difetto del kit, visto solo con la home montata: `.modulo-testa` dichiara la
   fascia del titolo a `rgba(0,0,0,.25)` - pensata per i riquadri scuri - ma
   subito dopo `.modulo .modulo-testa` la rimette a `--grigio-fascia` per TUTTI
   i riquadri, scuri compresi, e il titolo bianco sparisce su #f5f5f5. Qui si
   ripristina la fascia scura sui soli `.modulo--scuro` (e' il pezzo che sul
   sito vivo e' nero con la scritta bianca). */
.modulo--scuro .modulo-testa { background: rgba(0, 0, 0, 0.25); }

/* Il titolo dell'articolo in grande nei riquadri scuri: il tema sbianca solo
   `.card-titolo a` e `.titolo`, e l'`<h3><a>` di `.modulo-articolo` non ha
   nessuna delle due classi, quindi usciva col rosso e la sottolineatura dei
   link di default - sul sito vivo e' bianco, come il resto del riquadro. */
.modulo--scuro .modulo-articolo h3 a { color: var(--bianco); text-decoration: none; }
.modulo--scuro .modulo-articolo h3 a:hover { color: var(--bianco); text-decoration: underline; }

/* ── L'indice dei tag (`/it/tag/`) ─────────────────────────────────────────
   La pastiglia `.etichetta` e' del tema e non si tocca: qui si impagina solo
   l'elenco che la contiene e il numero che le sta accanto.
   ⚠️ `list-style: none` con `padding: 0` sulla `<ul>`: senza, i pallini e il
   rientro dell'elenco si sommano alle pastiglie e la nuvola va a scale. */
.nuvola-tag {
	display: flex;
	flex-wrap: wrap;
	gap: .5rem;
	list-style: none;
	margin: 1.5rem 0;
	padding: 0;
}
.nuvola-tag .quanti {
	opacity: .65;
	font-size: .85em;
	font-variant-numeric: tabular-nums;
}
.torna-tag { margin-top: 2rem; text-align: center; }

/* ── La pagina della newsletter (`/it/newsletter.html`, 2026-09-14) ────────
   Il riquadro e' il `.modulo` chiaro della home (testa grigia col filetto
   rosso), quindi non e' una forma nuova: e' una che il sito ha gia'.
   ⚠️ La pagina non ha la colonna di destra, e a tutta larghezza un testo corre
   su 1140px: la sezione si ferma a una misura da lettura, come la colonna
   editoriale delle altre pagine, e sta al centro sotto il titolo, che nella
   fascia e' centrato anche lui.
   🔴 L'`h2` sta dentro `.prosa`, che gli mette margine grande, maiuscolo e
   filetto sotto: nella testa del riquadro va riportato alla misura del
   modulo, sennO' la testa diventa alta il doppio con due righe. */
.newsletter { max-width: 760px; margin-left: auto; margin-right: auto; }
.newsletter-box { margin: 0 0 var(--s3); }
/* 🔴 La spunta del consenso e' una `<label>` figlia diretta di `.campo`, e
   `.campo > label` (del tema) la veste da etichetta di campo: blocco,
   maiuscolo, carattere dei titoli. Qui torna testo corrente con la casella a
   fianco, come `.consenso` vuole - serve la specificita' in piu'. */
.newsletter-box .campo > label.consenso {
	display: flex;
	margin-bottom: 0;
	font-family: var(--f-testo);
	font-size: 14px;
	letter-spacing: 0;
	text-transform: none;
}
.prosa .newsletter-box .modulo-testa h2 {
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 17px;
	letter-spacing: 0.14em;
}
.newsletter-box .modulo-corpo { padding: var(--s3); }
.newsletter-box form { margin: 0; }
.newsletter-box .conferma p:last-child,
.newsletter-box .avviso:last-child { margin-bottom: 0; }
.newsletter-box .consenso { line-height: 1.5; }
.newsletter-box .btn { margin-top: var(--s1); }
@media (max-width: 480px) {
	.newsletter-box .modulo-corpo { padding: var(--s2); }
	.newsletter-box .btn { width: 100%; }
}
/* La trappola per i programmi: fuori dallo schermo e non `display:none`,
   che alcuni riconoscono e saltano. */
.nl-trappola {
	position: absolute;
	left: -10000px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* ── In coda agli articoli: i due inviti e i post correlati (2026-09-15) ───
   Erano sul WordPress e la migrazione non li aveva rifatti: li ha chiesti
   indietro il cliente. La forma e' quella di allora - due fasce a tutta
   larghezza una sopra l'altra, poi quattro riquadri col titolo sull'immagine -
   con due correzioni di leggibilita' sui colori.
   🔴 Il verde del WordPress (#5cb82f) col bianco sopra fa 2,5:1: qui e' #2f7d1a,
   5,16:1. Il rosso sul rosa e' `--rosso-testo`, 4,6:1 sul fondo #fbe3e3. */
.inviti-articolo {
	display: grid;
	gap: var(--s2);
	margin: var(--s4) 0;
}
.invito {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	padding: 14px var(--s2);
	border-radius: 4px;
	font-family: var(--f-testo);
	font-size: 17px;
	line-height: 1.3;
	text-align: center;
	text-decoration: none;
}
.invito .ico { flex: 0 0 auto; }
.invito--catalogo { background: #fbe3e3; color: var(--rosso-testo); }
.invito--newsletter { background: #2f7d1a; color: var(--bianco); }
/* Al passaggio si sottolinea e non si scurisce il fondo del rosa: un rosa piu'
   carico porterebbe il rosso sotto 4,5:1. */
.invito--catalogo:hover,
.invito--catalogo:focus-visible { color: var(--rosso-testo); text-decoration: underline; }
.invito--newsletter:hover,
.invito--newsletter:focus-visible { background: #256414; color: var(--bianco); text-decoration: underline; }

/* ⚠️ `.titolo-sezione` e' quella del tema, la stessa dei titoli della home:
   non una forma nuova per un titolo solo. */
.correlati { margin-top: var(--s5); }
.correlati-griglia {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--s3);
	margin: 0;
	padding: 0;
	list-style: none;
}
@media (min-width: 600px) {
	.correlati-griglia { grid-template-columns: repeat(2, 1fr); }
}
.correlati-griglia > li { min-width: 0; }
.correlato {
	position: relative;
	display: block;
	aspect-ratio: 3 / 2;
	overflow: hidden;
	background: var(--nero-menu);
	color: var(--bianco);
	text-decoration: none;
}
.correlato img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform .3s ease;
}
/* 🔴 La sfumatura e' piena (0,85) gia' a meta' altezza della fascia di testo:
   il titolo bianco sta sopra una fotografia qualunque - anche una locandina
   bianca - e deve leggersi comunque. */
.correlato-testo {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	padding: 56px var(--s2) var(--s2);
	background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, .85) 55%, rgba(0, 0, 0, .9) 100%);
	text-align: center;
}
.correlato--senza-media .correlato-testo { top: 0; justify-content: center; background: none; }
.correlato-titolo {
	font-family: var(--f-titoli);
	font-size: 17px;
	line-height: 1.3;
	letter-spacing: .04em;
	text-transform: uppercase;
	overflow-wrap: anywhere;
}
.correlato-data {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font-size: 13px;
	color: #e6e6e6;
}
.correlato:hover .correlato-titolo,
.correlato:focus-visible .correlato-titolo { text-decoration: underline; }
.correlato:hover img { transform: scale(1.04); }
@media (prefers-reduced-motion: reduce) {
	.correlato img { transition: none; }
	.correlato:hover img { transform: none; }
}

/* ─── MEGAMENU' DELLA VOCE «NEWS» (2026-09-26) ─────────────────────────────
   Come sul sito vecchio: passando sulla voce «News» si apre sotto la barra un
   pannello scuro con l'articolo IN PRIMO PIANO a sinistra e i sei RECENTI a
   destra. Il markup lo fa `sbam_mega_news()` (inc/func.inc.php).
   🔴 Il pannello sta nella <nav> e NON dentro la voce: la fila delle voci ha
   `overflow-x: auto` (site.css) e lo taglierebbe. Lo apre `:has()` guardando la
   voce `.con-mega`, e resta aperto finche' il puntatore ci sta sopra.
   ⚠️ Si chiude con un attimo di ritardo (la `visibility` passa dopo 0,18 s): e'
   il tempo di scendere dalla voce al pannello senza che si richiuda per strada.
   ⚠️ Nascosto con `visibility`, quindi a pannello chiuso i suoi link non sono
   raggiungibili col tasto Tab: chi usa la tastiera ha la voce «News», che porta
   all'elenco completo. La barra da computer esiste solo sopra i 1140px, e con
   lei il pannello.
   Contrasto: titoli bianchi su #2d2d2d, date #bbbbbb su #2d2d2d = 7,2:1. */
.barra-menu { position: relative; }
.mega-news {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 80;                       /* sotto il banner dei cookie (90) e la ricerca (100) */
  visibility: hidden;
  opacity: 0;
  transition: opacity .12s ease, visibility 0s linear .18s;
}
.barra-menu:has(.con-mega:hover) .mega-news,
.barra-menu:has(.con-mega:focus-within) .mega-news,
.mega-news:hover {
  visibility: visible;
  opacity: 1;
  transition-delay: 0s;
}
.mega-griglia {
  display: grid;
  grid-template-columns: 400px 1fr;
  max-width: calc(var(--contenitore) + 2 * var(--s2));
  margin: 0 auto;
  background: var(--nero-modulo);
  box-shadow: 0 12px 28px rgba(0, 0, 0, .35);
}
.mega-primo { padding: 26px 20px 28px; border-right: 1px solid var(--filetto-scuro); }
.mega-recenti { padding: 26px 30px 28px; }
.mega-titolo {
  margin: 0 0 22px;
  font-family: var(--f-titoli);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  text-align: center;
  color: var(--bianco);
}
.mega-titolo::after {
  content: "";
  display: block;
  width: 72px;
  height: 3px;
  margin: 10px auto 0;
  background: var(--rosso);
}
.mega-meta {
  display: flex;
  align-items: center;
  gap: 5px;
  font-family: var(--f-titoli);
  font-size: 12px;
  letter-spacing: .03em;
  color: var(--testo-piede);
}
/* in primo piano: l'immagine col titolo sopra, su una sfumatura scura */
.mega-primo-link {
  position: relative;
  display: block;
  color: var(--bianco);
  text-decoration: none;
  background: var(--nero-menu);
}
.mega-primo-link img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
}
.mega-primo-testo {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 48px 16px 14px;
  text-align: center;
  background: linear-gradient(to top, rgba(0, 0, 0, .88) 0%, rgba(0, 0, 0, .7) 45%, rgba(0, 0, 0, 0) 100%);
}
.mega-primo-testo .mega-meta { color: #dddddd; justify-content: center; flex-wrap: wrap; }
.mega-primo-nome {
  font-family: var(--f-titoli);
  font-size: 21px;
  line-height: 1.2;
  letter-spacing: .02em;
}
.mega-primo-link:hover .mega-primo-nome,
.mega-primo-link:focus-visible .mega-primo-nome { text-decoration: underline; text-underline-offset: 3px; }
/* recenti: due colonne, miniatura 80x60 e titolo */
.mega-recenti ul {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px 30px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.mega-rec {
  display: grid;
  grid-template-columns: 80px 1fr;
  column-gap: 16px;
  align-items: center;
  color: var(--bianco);
  text-decoration: none;
}
.mega-rec img,
.mega-rec-vuota {
  display: block;
  width: 80px;
  height: 60px;
  object-fit: cover;
  background: var(--nero-menu);
}
.mega-rec-testo { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.mega-rec-nome {
  font-family: var(--f-titoli);
  font-size: 15px;
  line-height: 1.3;
  letter-spacing: .02em;
}
.mega-rec:hover .mega-rec-nome,
.mega-rec:focus-visible .mega-rec-nome { text-decoration: underline; text-underline-offset: 3px; }
@media (prefers-reduced-motion: reduce) {
  .mega-news { transition: none; }
}
@media print {
  .mega-news { display: none; }
}

/* ── I BANNER DELLA COLONNA DI DESTRA (lcBanners, posizione «colonna», 2026-09-27)
   In cima alla colonna, uno sotto l'altro, a tutta larghezza (360 px) e senza la
   scheda grigia dei riquadri: un banner ha gia' la sua grafica, e dentro una
   cornice sembrerebbe un contenuto del sito. L'immagine e' 6:5, 360x300 a video. */
.widget-banner { display: grid; gap: var(--s3); }
.banner-colonna { display: block; }
.banner-colonna img { display: block; width: 100%; height: auto; }

/* ── L'ANTEPRIMA CALAMEO DELLA SCHEDA LIBRO (2026-09-27) ────────────────────
   Come la presenta Calameo stesso, su un'immagine data da Luca («un po' piu'
   grande»): la copertina, con una linguetta grigia a destra e il triangolo.
   La copertina e' la nostra (nessuna richiesta esterna prima del clic); al clic
   `sbam.js` apre la finestra grande (`data-incorpora` + `data-modale`).
   L'altezza si riduce sugli schermi stretti, e la larghezza non supera mai lo
   spazio: una copertina larga non sfonda la colonna. */
.sfoglia-riquadro {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--s1);
  margin: var(--s3) 0;
}
.sfoglia {
  display: inline-flex;
  align-items: stretch;
  max-width: 100%;
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
}
.prosa .sfoglia-copertina img,
.sfoglia-copertina img {
  display: block;
  position: relative;
  z-index: 1;
  width: auto;
  height: clamp(240px, 62vw, 340px);
  max-width: calc(100vw - 120px);
  margin: 0;
  object-fit: contain;
  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.28);
}
.sfoglia-linguetta {
  flex: none;
  width: 54px;
  margin: 14px 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(to bottom, #b4b4b4, #8c8c8c);
  border-radius: 0 12px 12px 0;
  transition: background 0.15s;
}
.sfoglia-linguetta svg { width: 28px; height: 28px; fill: var(--bianco); }
.sfoglia:hover .sfoglia-linguetta,
.sfoglia:focus-visible .sfoglia-linguetta { background: var(--rosso); }
.sfoglia:focus-visible { outline: 3px solid var(--rosso-testo); outline-offset: 4px; }
.sfoglia-nota { font-size: 13px; color: var(--testo-sec); text-align: center; }
@media (prefers-reduced-motion: reduce) { .sfoglia-linguetta { transition: none; } }
