/*
Theme Name: Utat Viaggi
Description: Tema custom del nuovo utat.it — design system v5 approvato (bozze S2), Sidea X blu/oro/sabbia, leggibilità over-60.
Version: 1.0.0
Author: Caldana / Utat
Text Domain: utat
*/

/* ============================================================
   NUOVO UTAT.IT — design system v3 (bozze S2, revisione 2026-07-31)
   Brand Sidea X: blu #193C6C · oro #ECAE2D (contagocce) · grigio #EFEFEF (solo fondo)
   Font: Zalando Sans Expanded (titoli) + Inter (testo)
   v3 = v2 (raggi 3-4px, hairline, niente ombre a riposo, maiuscoletto solo su
   etichette) + scala immagini più grande: hero quasi a tutto schermo, caroselli,
   galleria a mosaico sul tour, itinerario con foto per giorno, tipografia display.
   Regole senior invariate: corpo ≥18px, contrasto AAA, tap target ≥48px
   ============================================================ */

:root {
  --blu: #193C6C;
  --blu-scuro: #10294D;
  --blu-tinta: #F2F5FA;          /* tinta freddissima per selezioni/fondi attivi */
  --oro: #ECAE2D;
  --oro-scuro: #8A6512;          /* per testo oro su bianco. Non #B8860B: a 12.8px gli
                                    occhielli non sono "large text", serve AA pieno (4.5:1)
                                    e #B8860B si ferma a 3.25:1 (2.89 su sabbia). Questo
                                    e' lo stesso oro gia' usato da .stato-ultimi: 5.32:1
                                    su bianco, 4.72:1 su sabbia. */
  --sabbia: #F6F1E7;             /* TERZO COLORE (v4, da validare con Dario): sabbia calda
                                    per i fondi alternati — scalda il bianco, sposa blu e oro
                                    (Turisanda #f0edea e Boscolo usano neutri caldi identici) */
  --sabbia-bordo: #E8DFCC;       /* bordi/righe su fondo sabbia */
  --stella-spenta: #CFC4AB;      /* il binario delle stelle non accese (badge recensioni):
                                    sabbia-bordo non si vedeva ne' su bianco (1.27:1) ne'
                                    su sabbia (1.05:1) e il voto sembrava tronco. Due passi
                                    piu' scuro: si percepisce su tutt'e due i fondi senza
                                    fare concorrenza alle stelle piene. */
  --grigio: #EFEFEF;             /* fondo alternato sezioni (da brand manual) */
  --testo: #23303F;
  /* #49525F e non #5A6675: il vecchio grigio si fermava a 5,85:1 su bianco e
     5,19:1 su sabbia, cioe' AA — ma il brief di questo sito chiede AAA (7:1) e
     il pubblico e' per il 59% over-60. Questo arriva a 7,01:1 su bianco e
     7,00:1 su sabbia, i due fondi su cui compare. Resta un grigio: contro
     --testo (#23303F) la gerarchia si legge ancora. */
  --testo-soft: #49525F;
  /* La misura di lettura, in caratteri e non in rem: una colonna da 46rem a
     17px fa 82 caratteri per riga, ben oltre i 75 oltre i quali l'occhio
     sbaglia il ritorno a capo. In "ch" la misura resta giusta anche se il
     corpo del testo cambia.
     62 e' verificato a pagina aperta, non dedotto: "ch" e' la larghezza dello
     zero, che in Inter e' piu' largo della media dei caratteri, quindi il
     numero non si legge come "62 caratteri". Contando le righe vere, 62ch
     danno 71-73 caratteri per riga sui paragrafi lunghi — dentro i 75. Chi lo
     abbassa a occhio manda gli occhielli e le introduzioni sotto i 45, che e'
     l'altro limite. Se si cambia il carattere del sito, si rimisura. */
  --misura-lettura: 62ch;
  --bianco: #FFFFFF;
  --hairline: #E4E8EE;           /* il "collante": bordi sottili al posto delle ombre */
  --verde: #1E7B45;
  --rosso: #B3382C;
  --ombra-hover: 0 18px 40px rgba(16, 41, 77, .12);
  --raggio: 4px;                 /* card e pannelli: appena arrotondati */
  /* Qui stavano i token del velo degli hero (--velo-hero-alto, --velo-hero,
     --tinta-velo): tolti il 27/08/2026 insieme al velo, v. il capitolo "Hero". */
  --raggio-s: 3px;               /* bottoni, input, chip */
  --misura: 76rem;
  --transizione-foto: transform .7s cubic-bezier(.25,.1,.25,1);
}

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

html { scroll-behavior: smooth; }
/* Lo scorrimento morbido e' un'animazione come le altre, e per chi soffre di
   disturbi vestibolari una pagina che scivola da sola non e' un vezzo: e'
   nausea. Mancava l'alternativa ferma, e valeva per ogni ancora del sito. */
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  font-size: 1.0625rem;           /* 17px — ridotto da 18 su richiesta (v5); non scendere oltre: 59% del pubblico è over-60 */
  line-height: 1.65;
  color: var(--testo);
  background: var(--bianco);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, .font-titolo {
  font-family: 'Zalando Sans Expanded', 'Inter', sans-serif;
  color: var(--blu);
  line-height: 1.12;
  font-weight: 600;
  letter-spacing: 0;              /* mai spaziatura sui titoli (census riferimenti) */
}
h1 { font-size: clamp(2.3rem, 4.6vw, 3.5rem); }
h2 { font-size: clamp(1.7rem, 3.1vw, 2.45rem); }
h3 { font-size: clamp(1.15rem, 2vw, 1.4rem); }
h4 { font-size: 1.1rem; color: var(--blu); font-weight: 600; }
.display { font-size: clamp(2.6rem, 5.4vw, 4.2rem); font-weight: 700; line-height: 1.05; }

p + p { margin-top: .95em; }

/* height:auto non e' un dettaglio: le foto dentro i testi migrati arrivano con
   width e height scritti negli attributi (width="600" height="400") mentre il file
   servito e' la miniatura 300x200. Con la sola max-width la larghezza scendeva a
   358px su un telefono e l'altezza restava 400: le foto dei giorni erano stirate in
   verticale del 66% (misurato: rapporto 1,50 nel file, 0,90 a schermo). Su desktop
   la colonna e' larga 600px e il difetto non si vedeva.
   Chi ha un'altezza sua nel foglio (logo, card, slider) vince per specificita'. */
img { max-width: 100%; height: auto; display: block; }

a { color: var(--blu); }
.prose a { text-decoration: underline; text-underline-offset: 3px; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, summary:focus-visible, label:focus-visible {
  outline: 3px solid var(--oro);
  outline-offset: 2px;
  border-radius: 2px;
}
/* La casella data e' l'unica che restava senza anello arrivandoci col
   tabulatore (misurato sul modulo reclami: 1 passaggio su 32). Il motivo e'
   che il fuoco non finisce sulla casella ma su un suo pezzo interno — giorno,
   mese, anno — e :focus-visible sulla casella non scatta. :focus-within lo
   vede, perche' guarda anche dentro.
   ⚠ La verifica col codice (elemento.focus()) diceva che l'anello c'era: e'
   il tabulatore vero che scopre il buco. Le due cose non sono la stessa. */
input[type="date"]:focus-within, input[type="date"]:focus {
  outline: 3px solid var(--oro);
  outline-offset: 2px;
  border-radius: 2px;
}

.contenitore { max-width: var(--misura); margin: 0 auto; padding: 0 1.5rem; }
/* v5: ritmo ancora più compatto (Turisanda sta a 32-50px) e fondi alternati CALDI, non bianchi */
.sezione { padding: 4rem 0; }
.sezione-grigia, .sezione-sabbia { background: var(--sabbia); }
.sezione-grigia .pannello, .sezione-sabbia .pannello,
.sezione-grigia .card-tour, .sezione-sabbia .card-tour { border-color: var(--sabbia-bordo); }
.sezione-blu-chiara { background: var(--blu-tinta); }
@media (max-width: 760px) { .sezione { padding: 2.75rem 0; } }
/* le ancore interne non devono finire sotto la testata sticky */
/* .programma-acc details: i pin della mappa puntano al singolo giorno, e senza margine
   il menu ancore appiccicato in alto coprirebbe il giorno appena aperto. */
/* 9,5rem e non 8,5: sulla pagina di un tour le barre appiccicate sono DUE
   (testata + barra delle sezioni) e a tavoletta arrivano a 145px, mentre il
   margine ne teneva 136 — le prime righe di "Partenze", "Mappa", "Programma"
   e "Cosa comprende" finivano sotto la barra (misurato il 20/08/2026). */
section[id], div[id^="tutte"], #programma,
.programma-acc details { scroll-margin-top: 9.5rem; }
/* Da 1180px in su sul catalogo e sulla destinazione si aggiunge la barra dei
   filtri appiccicata (117px): la pila arriva a 210 e 9,5rem non bastano piu'. */
@media (min-width: 1180px) {
  section[id], div[id^="tutte"], #programma,
  .programma-acc details { scroll-margin-top: 14rem; }
}

/* Occhiello: l'UNICO posto (coi bottoni) dove vive il maiuscoletto spaziato */
.occhiello {
  display: inline-block;
  font-weight: 700;
  font-size: .8rem;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--oro-scuro);
  margin-bottom: .9rem;
}
/* max-width era 46em, cioe' 46 volte il corpo del testo — non 46 caratteri:
   faceva 87 caratteri per riga. In "ch" la misura e' quella che si voleva. */
.sottotitolo { color: var(--testo-soft); font-size: 1.08rem; max-width: var(--misura-lettura); line-height: 1.6; }
/* Le introduzioni di pagina che passano dal contenuto (.sottotitolo.prose):
   un titolo scritto li' in bacheca usciva con le misure degli ARTICOLI — su
   Recensioni un h2 da 25,6px (quarta misura di h2 del sito), su Reclami un h4
   che faceva da paragrafo. Qui dentro un titolo e' una riga d'apertura: stessa
   misura del testo, solo piu' scura e pesata. */
.sottotitolo.prose h2, .sottotitolo.prose h3, .sottotitolo.prose h4, .sottotitolo.prose h5 {
  font-size: inherit; font-family: inherit; line-height: inherit;
  font-weight: 600; color: var(--testo); margin: 0 0 .4rem;
}

/* Testa di sezione: centrata, stretta (alla Boscolo) */
.testa-sezione { margin-bottom: 2.1rem; }
.sezione .contenitore > .testa-sezione:not(.sinistra) { text-align: center; }
.sezione .contenitore > .testa-sezione:not(.sinistra) .sottotitolo { margin-left: auto; margin-right: auto; }
.testa-sezione .rigo-oro { width: 3rem; height: 2px; background: var(--oro); margin: 1.1rem auto 0; }
.testa-sezione.sinistra .rigo-oro { margin-left: 0; }

/* Ingresso morbido allo scroll (rispetta prefers-reduced-motion) */
.appare { opacity: 0; transform: translateY(14px); transition: opacity .55s ease, transform .55s ease; }
.appare.visibile { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .appare { opacity: 1; transform: none; transition: none; } }

/* ---------- Barra bozza (solo per la review, sparirà) ---------- */
.barra-bozza {
  background: #1B2431;
  color: #C7D0DC;
  font-size: .85rem;
  font-weight: 500;
  text-align: center;
  padding: .5rem 1rem;
}
.barra-bozza a { color: var(--oro); }

/* ---------- Header ---------- */
.testata {
  background: var(--bianco);
  border-bottom: 1px solid var(--hairline);
  position: sticky; top: 0; z-index: 50;
}
.testata-riga {
  display: flex; align-items: center; gap: 2rem;
  min-height: 5.75rem;
}
/* flex-shrink: 0 — senza, sotto i 430px il flex schiacciava il logo a larghezza ZERO
   (misurato) e la testata restava col solo numero di telefono. */
.logo { flex-shrink: 0; }
.logo img { height: 46px; width: auto; }
.tel-nel-menu { display: none; }
.nav-principale { display: flex; gap: .5rem; flex: 1; justify-content: center; flex-wrap: wrap; }
.nav-principale a {
  text-decoration: none;
  font-weight: 500;
  font-size: 1rem;
  color: var(--testo);
  padding: .85rem 1.05rem;
  border-bottom: 2px solid transparent;
}
.nav-principale a:hover { color: var(--blu); }
.nav-principale a[aria-current="page"] { color: var(--blu); font-weight: 600; border-bottom-color: var(--oro); }
/* La ricerca in testata, in due vesti (stessa meta: la pagina con ?s= vuoto):
   - .cerca-nel-menu vive DENTRO la nav e si vede solo nel pannello del panino
     (sotto i 1180px), come voce fra le voci. Da nona voce in riga andava a capo
     da sola: le otto voci piu' il telefono riempiono gia' la riga (misurato
     20/08/2026 — a 1440 e 1920 la testata cresceva a 114-119px con "Cerca"
     centrato su una seconda riga).
   - .cerca-testata sta accanto al telefono, solo da 1180 in su: li' non puo'
     mandare a capo niente. */
.nav-principale .cerca-nel-menu { display: inline-flex; align-items: center; gap: .45rem; }
.cerca-nel-menu .ico, .cerca-testata .ico { width: 1.05em; height: 1.05em; flex-shrink: 0; }
.cerca-testata { display: none; }
@media (min-width: 1180px) {
  .nav-principale .cerca-nel-menu { display: none; }
  .cerca-testata {
    display: flex; align-items: center; gap: .5rem;
    text-decoration: none; font-weight: 500; font-size: 1rem; color: var(--testo);
    padding: .6rem .5rem; min-height: 48px;   /* bersaglio pieno, come il telefono */
  }
  .cerca-testata:hover { color: var(--blu); }
}

/* ---------- Voce con tendina (menu su due livelli, senza JS) ---------- */
.voce-gruppo { position: relative; display: flex; align-items: center; }
.voce-gruppo > .voce-gruppo-testo {
  font-weight: 500; font-size: 1rem; color: var(--testo);
  padding: .85rem .35rem .85rem 1.05rem; cursor: default;
  border-bottom: 2px solid transparent;
}
.voce-gruppo > .ico-tendina { width: .9em; height: .9em; color: var(--testo-soft); margin-right: .55rem; flex-shrink: 0; }
.voce-gruppo.gruppo-attivo > .voce-gruppo-testo,
.voce-gruppo.gruppo-attivo > .ico-tendina { color: var(--blu); }
.voce-gruppo .sotto-menu {
  display: none; position: absolute; top: 100%; left: 0; z-index: 70;
  min-width: 17rem; padding: .4rem 0;
  background: #fff; border: 1px solid var(--hairline); border-radius: var(--raggio-s);
  box-shadow: 0 14px 30px rgba(13, 28, 54, .12);
}
.voce-gruppo:hover .sotto-menu,
.voce-gruppo:focus-within .sotto-menu { display: block; }
.voce-gruppo .sotto-menu a { display: block; padding: .7rem 1.1rem; border-bottom: 0; white-space: nowrap; }
.voce-gruppo .sotto-menu a:hover { background: var(--grigio); }
.voce-gruppo .sotto-menu a[aria-current="page"] { border-bottom: 0; background: var(--grigio); }
.testata-contatto { display: flex; align-items: center; gap: 1.2rem; }
.tel-testata {
  text-decoration: none; font-weight: 700; color: var(--blu); font-size: 1.05rem;
  display: flex; align-items: center; gap: .6rem; white-space: nowrap;
  /* 48px pieni: il telefono in testata misurava 47, un pixel sotto la soglia
     dei bersagli per un pubblico over-60. */
  padding: .6rem .2rem; min-height: 48px;
}
.tel-testata small { display: block; font-weight: 400; color: var(--testo-soft); font-size: .78rem; line-height: 1.2; letter-spacing: .02em; }
.tel-testata svg { flex-shrink: 0; }
/* 1080px e non 900: con 8 voci sotto quella soglia il menu non ci sta in una riga
   nemmeno stretto (misurato: ne servono 698, a 1000px ne restano 576). */
@media (max-width: 1179px) {
  .nav-principale { display: none; }
  .testata-riga { justify-content: space-between; }
}

/* ---------- Icone a filo (inline SVG, stroke currentColor) ---------- */
.ico { width: 1.15em; height: 1.15em; stroke: currentColor; stroke-width: 1.8; fill: none; stroke-linecap: round; stroke-linejoin: round; vertical-align: -0.18em; }
.ico-g { width: 2.6rem; height: 2.6rem; stroke-width: 1.4; }

/* ---------- Bottoni: squadrati (3px), uppercase, spaziati ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .6rem;
  min-height: 3.25rem;
  padding: .85rem 2.2rem;
  border-radius: var(--raggio-s);
  border: 2px solid transparent;
  font-family: 'Inter', sans-serif;
  font-size: .92rem; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase;
  text-decoration: none; cursor: pointer;
  transition: background .2s, color .2s, border-color .2s;
}
.btn-oro { background: var(--oro); border-color: var(--oro); color: var(--blu-scuro); }
.btn-oro:hover { background: #DDA01F; border-color: #DDA01F; }
.btn-blu { background: var(--blu); border-color: var(--blu); color: var(--bianco); }
.btn-blu:hover { background: var(--blu-scuro); border-color: var(--blu-scuro); }
.btn-contorno { background: transparent; color: var(--blu); border-color: var(--blu); }
.btn-contorno:hover { background: var(--blu); color: var(--bianco); }
.btn-grande { font-size: 1rem; padding: 1rem 2.8rem; }
.btn-mini { min-height: 2.7rem; padding: .5rem 1.1rem; }
/* .btn-solo: un bottone che sta per conto suo, senza altri bottoni di fianco.
   Sotto i 560px va a tutta larghezza e perde i 2,2rem laterali — quel padding
   serve a dare forma a un bottone che si misura da sé, ma su uno schermo
   stretto toglie 70px alle parole e ogni etichetta italiana un po' lunga
   finisce su due righe, che si legge come una cosa rotta. */
@media (max-width: 560px) {
  .btn-solo { width: 100%; padding-left: 1rem; padding-right: 1rem; }
}

/* Riquadro d'invito al contatto: sostituisce la CTA sui viaggi senza date in vendita.
   Riquadro e non bottone di proposito — un bottone oro accanto a "Date non disponibili"
   prometterebbe un preventivo che non si può fare. Regole del brief: raggio 4px, bordo
   1px al posto dell'ombra, altezza sopra i 48px di area cliccabile, oro come accento. */
.riquadro-contatti {
  display: inline-flex; align-items: center; gap: .8rem;
  min-height: 3.25rem; padding: .95rem 1.6rem;
  background: var(--sabbia); border: 1px solid var(--sabbia-bordo);
  border-left: 3px solid var(--oro); border-radius: var(--raggio);
  color: var(--blu); text-decoration: none;
  font-weight: 700; font-size: 1.05rem;
  transition: background .2s ease, border-color .2s ease;
}
.riquadro-contatti:hover { background: var(--bianco); border-color: var(--oro); }
.riquadro-contatti .ico { flex-shrink: 0; }

/* Link con freccia (alternativa quieta al bottone) */
.link-freccia {
  display: inline-flex; align-items: center; gap: .5rem;
  font-weight: 700; color: var(--blu); text-decoration: none;
  font-size: .95rem; letter-spacing: .06em; text-transform: uppercase;
  border-bottom: 2px solid var(--oro); padding-bottom: .25rem;
}
.link-freccia:hover { color: var(--oro-scuro); }

/* ---------- Hero ---------- */
.hero {
  position: relative; color: var(--bianco);
  display: flex; align-items: center;
  min-height: 38rem;
  background-size: cover; background-position: center;
}
/* NIENTE VELO SUGLI HERO (27/08/2026, Vlad: «togli la sfumatura all'inizio
   delle pagine, a sto punto va bene la scritta bianca, fa schifo la
   sfumatura»). Qui c'erano due velature nere: una su tutto l'hero
   (.18 -> .12 -> .28) e una fascia piu' profonda appesa al blocco di testo
   (0 -> .48 in 7rem). Sono state TOLTE, non abbassate: la fotografia arriva
   in pagina com'e', e il testo si regge sulle sue ombre.

   QUANTO COSTA, detto in chiaro, perche' non e' una questione di gusto e chi
   rimette mano qui deve saperlo. Metro: scripts/velo_hero_0826.mjs, 64 misure
   su 16 pagine con hero, a 390 e a 1440. Col velo: 0 misure sotto il 4,5:1 di
   legge. Senza: 59 su 64 sotto (60 a 390px), e non di poco — Mauritius,
   Tunisia, Giordania, Oman ed Emirati hanno il cielo o un muro bianco proprio
   dove passa il titolo, e li' il bianco su bianco misura 1,00:1: la scritta
   NON SI VEDE. Provato anche a caricare le ombre (fino a .95 di nero sullo
   strato stretto): non cambia niente, perche' non c'e' ombra che salvi il
   bianco sul bianco.
   La home e' quella che se la cava meglio a occhio — il titolo e' enorme e la
   Muraglia e' scura a meta' altezza — ed e' la pagina che Vlad aveva davanti
   quando l'ha chiesto; ma anche li' il punto peggiore misura 1,61:1, e il
   sottotitolo passa sul muro di pietra chiara.

   Se un domani si vuole tornare leggibili senza rimettere una sfumatura, la
   strada non e' un velo piu' furbo: e' togliere il testo dalla fotografia
   (titolo nella fascia bianca sotto, come fa il vecchio sito con le mete). */
.hero .contenitore { position: relative; z-index: 1; }
/* Occhiello sopra una fotografia: bianco, col filetto d'oro sopra. Il colore
   sta in UNA regola sola — qui c'era anche `.hero .occhiello { color: oro }`,
   piu' specifica, che vinceva in silenzio: la classe nel markup diceva bianco
   e la pagina restava oro (visto misurando, non rileggendo il diff). */
.occhiello-foto, .hero .occhiello, .fascia-emozione .occhiello { color: var(--bianco); }
.hero .rigo-oro, .fascia-emozione .rigo-oro {
  width: 2.2rem; height: 3px; background: var(--oro); border-radius: 2px; margin: 0 0 .75rem;
}
.fascia-emozione .rigo-oro { margin-left: auto; margin-right: auto; }
/* NIENTE OMBRA SULLE SCRITTE, IN TUTTO IL SITO (02/09/2026, Razvan:
   "togli solo l'ombra da tutte le scritte; se su una foto la scritta non si
   legge, cambieremo a mano l'immagine"). Qui riguarda titolo, sottotitolo e
   occhiello dell'hero; tolta nello stesso giro anche a briciole sull'hero,
   fascia emozione, velo dei gesti della mappa e didascalia dei Momenti del
   tour. Il testo e' bianco pieno e basta.

   ⚠️ LA REGOLA D'ORA IN POI E' SULLA FOTOGRAFIA, NON SUL CSS. Se un titolo non
   si legge non si rimette l'ombra: si cambia l'immagine con una che sia scura
   dove passa il testo. Chi carica una foto di hero se ne assume la verifica —
   prima bastava guardare che fosse bella.

   COSA COSTA, e va saputo da chi rimette mano qui, perche' non e' gusto ma
   una misura. Gli hero non hanno piu' nemmeno il velo (tolto il 27/08, v. il
   commento su .hero): da oggi il bianco poggia sulla fotografia NUDA. Metro:
   scripts/velo_hero_0826.mjs, 64 misure su 16 pagine, a 390 e a 1440.
   Senza velo ma CON queste tre ombre, 59 misure su 64 stavano gia' sotto il
   4,5:1 di legge; le ombre erano l'unica cosa rimasta a tenere il bordo delle
   lettere. Senza, resta il colore della fotografia: dove il titolo passa su
   cielo o su un muro chiaro — Mauritius, Tunisia, Giordania, Oman, Emirati —
   il bianco su bianco misura 1,00:1, cioe' la scritta NON SI VEDE. Sulle
   pagine guardate quando e' stato chiesto (home, Cina, Washington) la foto e'
   scura dove passa il testo e il problema non si vede: e' un caso, non la
   regola.

   Per rimettere l'ombra bastano le tre righe qui sotto, una per selettore:
     .hero h1          text-shadow: 0 1px 2px rgba(0,0,0,.6), 0 0 6px rgba(0,0,0,.55), 0 2px 28px rgba(0,0,0,.5);
     .hero .sottotitolo text-shadow: 0 1px 2px rgba(0,0,0,.75), 0 0 5px rgba(0,0,0,.65), 0 1px 20px rgba(0,0,0,.5);
     .hero .occhiello   text-shadow: 0 1px 1px rgba(0,0,0,.85), 0 0 4px rgba(0,0,0,.8), 0 0 14px rgba(0,0,0,.6);
   La strada per essere leggibili SENZA ne' velo ne' ombra e' una sola, ed e'
   la stessa gia' scritta sopra: togliere il testo dalla fotografia e portarlo
   nella fascia bianca sotto, come faceva il vecchio sito con le mete. */
.hero h1 {
  color: var(--bianco); max-width: 15em;
}
.hero .sottotitolo {
  color: #EAF0F8; font-size: 1.3rem; margin-top: 1.2rem;
}
/* Il filetto d'oro e' pieno, quindi l'ombra gli va INTORNO: un pelo di contorno
   scuro piu' un alone. Senza, su una fotografia chiara scendeva a 2,5:1 —
   sotto il 3:1 che si chiede a un elemento grafico. */
.hero .rigo-oro { box-shadow: 0 0 0 1px rgba(0,0,0,.5), 0 2px 10px rgba(0,0,0,.75); }
/* v3: la home è quasi a tutto schermo, la destinazione molto alta */
.hero-max { min-height: clamp(38rem, 88svh, 56rem); }
/* v4: testo dell'hero home ancorato in basso (richiesta Razvan) */
.hero-basso { align-items: flex-end; }
.hero-alta { min-height: clamp(28rem, 62svh, 40rem); align-items: flex-end; }
.hero-alta .contenitore { padding-bottom: 4.5rem; padding-top: 8rem; }
.hero-piccola { min-height: 26rem; }
/* Hero delle pagine interne (dal riquadro "Banner", come sul vecchio sito):
   titolo centrato sulla foto, briciole di pane sotto. Oggi NON usato: provato
   sui cataloghi e scartato (2026-08-07); resta pronto se l'hero tornera'. */
.hero-centro { justify-content: center; text-align: center; }
.hero-centro .contenitore { padding-top: 3rem; padding-bottom: 3rem; }
.hero-centro h1 { margin: 0 auto; max-width: 18em; }
/* Le briciole SULL'HERO sono bianche sulla foto; fuori dall'hero vale il
   componente base (v. sezione Breadcrumb), che su fondo chiaro resta grigio/blu. */
.hero .briciole {
  margin-top: 1.05rem; padding: 0; display: flex; gap: .3rem;
  /* align-items: il link "Home" e' alto 48px (bersaglio tattile), il resto e'
     testo semplice: senza centratura verticale la riga viene storta. */
  justify-content: center; align-items: center;
  font-size: .98rem; color: #EAF0F8;
}
/* l'imbottitura porta il bersaglio del link a 48px anche in larghezza
   ("Home" da solo misura 44); il gap ridotto compensa il distacco visivo */
.hero .briciole a { color: var(--bianco); text-decoration: underline; text-underline-offset: 3px; padding: 0 .4rem; }
.hero .briciole a:hover { color: var(--bianco); }
.hero .briciole span[aria-current] { color: var(--bianco); font-weight: 600; }
@media (max-width: 560px) { .hero-centro { min-height: 20rem; } }
/* L'introduzione della pagina cataloghi: larga quanto la colonna, cioe' quanto
   il titolo sopra e quanto la griglia dei cataloghi sotto (marketing,
   26/08/2026). Prima era stretta a 62ch come sul vecchio sito, e finiva
   incolonnata al centro di una testata larga il doppio.
   ⚠ Cosi' la riga arriva intorno ai 120 caratteri, contro i 62 che il BRIEF
   fissa come misura di lettura — stessa deroga gia' presa per il testo di
   apertura di /destinazioni/ (.testo-apertura-mete, qui sopra). Regge perche'
   sono quattro righe di presentazione che si scorrono; se un domani quel testo
   diventa lungo, va rimesso in colonna. */
.intro-cataloghi { margin: 1.6rem auto 0; text-align: center; }

/* ---------- Il testo d'apertura largo quanto la colonna ----------
   Chiesto dal marketing il 26/08/2026 per /viaggi/, le pagine di tipologia
   (Viaggi Firmati Utat e sorelle), /viaggi-in-partenza/ e /blog/: l'apertura
   comincia dove comincia il titolo e finisce dove finisce la riga dei filtri
   sotto, invece di fermarsi a meta' schermata.
   Classe a se' e non un ritocco a .sottotitolo, che vale su mezzo sito — nelle
   schede dei tour e nelle fasce quella misura stretta serve ancora.
   ⚠ Cosi' la riga arriva intorno ai 120 caratteri, contro i 62 che il BRIEF
   fissa come misura di lettura. E' la terza volta che si prende questa deroga
   (prima .testo-apertura-mete su /destinazioni/, poi .intro-cataloghi): regge
   perche' sono aperture di due o tre righe, allineate a sinistra, che si
   scorrono invece di leggerle riga per riga. Se uno di quei testi diventa
   lungo, quella pagina va rimessa in colonna. */
.testo-largo,
.sottotitolo.testo-largo,
.prose.testo-largo { max-width: none; }
/* Titolo di pagina che pesa come un titolo di sezione: e' il testo grande
   centrato dei cataloghi ("Pagine che racchiudono..."), H1 per la semantica
   ma con la misura dell'h2, come sul vecchio sito.
   SOLO per h2 (21/08/2026): quattro pagine la mettevano sull'H1 e il titolo
   della pagina pesava esattamente quanto un titolo di sezione qualunque —
   su "Chi siamo" il titolo pesava quanto "I nostri valori" che gli sta sotto.
   Misurato: 39,2px l'h1 vestito, 39,2px ogni h2. Ora gli h1 vanno nudi (56px)
   come le pagine sorelle. */
.titolo-di-sezione { font-size: clamp(1.7rem, 3.1vw, 2.45rem); }
/* Descrizione ricca sotto la testa (destinazioni): colonna stretta al centro,
   testo a bandiera — lunga e piena di link, centrata sarebbe faticosa. */
.colonna-descrizione { max-width: var(--misura-lettura); margin: 1.6rem auto 0; }
/* Il testo di apertura dell'indice /destinazioni/: largo quanto il titolo e la griglia
   delle mete, chiesto dal marketing. Classe a se' e non .colonna-descrizione, che serve
   ancora a "chi siamo".
   ⚠ Cosi' la riga arriva intorno ai 120 caratteri, contro i 62 che il BRIEF fissa come
   misura di lettura. Regge perche' sono due paragrafi corti e mezzi fatti di
   collegamenti — cioe' un elenco travestito da frase, che si scorre invece di leggerlo.
   Se un domani quel testo diventa lungo, va rimesso in colonna. */
.testo-apertura-mete { margin-top: 1.6rem; }

/* ---------- Le sotto-mete senza card: solo nome e collegamento, in colonne ----------
   Modello Boscolo. Gli Stati Uniti ne hanno 34 e di card ce ne stanno sei: qui passano
   le altre. Colonne che si contano da sole, cosi' l'elenco regge tanto 3 voci quanto 30. */
.elenco-sottomete {
  list-style: none; margin-top: 2.6rem;
  display: grid; gap: .2rem 2rem;
  grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
  /* 15px, chiesto dal marketing: sotto il minimo di 17px del BRIEF, ma qui non e'
     testo da leggere — sono nomi di citta' di due parole. L'area cliccabile resta
     alta 44px (sotto), quindi il dito e il mouse non ci perdono niente. */
  font-size: .9375rem;
}
.elenco-sottomete a {
  /* 48 e non 44: sono trentaquattro nomi di citta' uno sotto l'altro, e chi
     sbaglia riga finisce su un'altra meta. Il testo resta di 15px, cresce solo
     la riga che si tocca (misurato il 20/08/2026). */
  display: flex; align-items: center; min-height: 48px;
  color: var(--blu); font-weight: 600; text-decoration: underline; text-underline-offset: 3px;
}
.elenco-sottomete a:hover { color: var(--oro-scuro); }

/* ---------- Informazioni utili complete: capitoli a linguette ----------
   In fondo alla pagina destinazione; il link nel riquadro in alto scorre qui.
   Linguette "a cartellina" alla Turisanda (appunti di viaggio): la scheda
   attiva è un tab bianco con l'orlo d'oro in alto, FUSO col pannello sotto
   (la riga delle linguette scavalca di 1px il bordo del pannello, e il tab
   attivo, bianco e senza bordo in basso, lo interrompe); le altre appoggiano
   sul fondo pagina. Quando non ci stanno si scorrono col dito o coi
   cerchietti-freccia ai lati; la barra di scorrimento resta nascosta. */
.linguette-riga {
  display: flex; align-items: stretch;
  position: relative; z-index: 2; margin-bottom: -1px;
}
.schede-linguette {
  display: flex; gap: .25rem; overflow-x: auto; flex: 1;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.schede-linguette::-webkit-scrollbar { display: none; }
.linguetta {
  display: inline-flex; align-items: center; gap: .5rem; white-space: nowrap;
  background: none; font: inherit; font-weight: 600; color: var(--blu);
  padding: .9rem 1.15rem; min-height: 48px; cursor: pointer;
  border: 1px solid transparent; border-bottom: 0;
  border-top: 3px solid transparent; border-radius: 10px 10px 0 0;
}
.linguetta .ico { width: 1.15em; height: 1.15em; flex-shrink: 0; }
.linguetta:hover { color: var(--oro-scuro); }
.linguetta.attiva {
  background: var(--bianco); border-color: var(--sabbia-bordo); border-bottom: 0;
  border-top: 3px solid var(--oro); color: var(--blu);
}
/* I cerchietti stanno FUORI dal flusso, a cavallo del bordo della riga (metà
   dentro, metà fuori come su Turisanda): così non rubano spazio alle
   linguette e non le "tagliano". Sporgono nel margine del contenitore
   (24px, 16px sotto i 420px): mai oltre lo schermo. */
.linguette-freccia {
  display: flex; align-items: center; justify-content: center;
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
  /* 48px come la gemella della barra delle sezioni: erano gli ultimi due
     comandi del sito sotto la soglia del polpastrello. */
  width: 48px; height: 48px; border-radius: 50%;
  border: 1px solid var(--sabbia-bordo); background: var(--bianco); color: var(--blu);
  cursor: pointer; box-shadow: 0 6px 16px rgba(16, 41, 77, .10);
}
.linguette-freccia[hidden] { display: none; }
/* Quanto sporgono: fin dove arriva lo spazio senza creare scorrimento
   orizzontale. Dai 1280px in su (pagina centrata, almeno 56px d'aria per
   lato: 24 di padding + il margine) il cerchietto sta TUTTO fuori dal
   pannello, con un filo d'aria; sotto, resta nel padding del contenitore
   (24px; 14 dei 16 sotto i 420px). */
.linguette-freccia:first-child { left: -24px; }
.linguette-freccia:last-child { right: -24px; }
@media (min-width: 1280px) {
  .linguette-freccia:first-child { left: -54px; }
  .linguette-freccia:last-child { right: -54px; }
}
@media (max-width: 420px) {
  .linguette-freccia:first-child { left: -14px; }
  .linguette-freccia:last-child { right: -14px; }
}
.linguette-freccia .ico { width: 1.2em; height: 1.2em; }
.scheda-info {
  background: var(--bianco); border: 1px solid var(--sabbia-bordo);
  border-radius: var(--raggio); box-shadow: 0 16px 40px rgba(16, 41, 77, .07);
  padding: 2rem 2.2rem; max-width: 100%;
}
@media (max-width: 560px) { .scheda-info { padding: 1.2rem; } }

/* ---------- Barra di ricerca: orizzontale, a cavallo del fondo hero ---------- */
.box-ricerca {
  background: var(--bianco); border-radius: var(--raggio);
  border: 1px solid var(--hairline);
  box-shadow: 0 24px 60px rgba(16,41,77,.16);
  padding: .6rem;
  /* Tre scomparti dal 20/08/2026 (era 1fr 1fr auto): il campo libero, che e'
     quello che si usa per primo, poi le due tendine. Al campo si da' piu'
     spazio — ci si scrive dentro, mentre nelle tendine si sceglie e basta.
     La scatola cresce da 56 a 64rem: misurato, sotto quella misura "DOVE VUOI
     ANDARE?" andava a capo e delle tre domande una sola stava su due righe. */
  display: grid; grid-template-columns: 1.15fr 1fr 1fr auto; align-items: stretch;
  max-width: 64rem; margin: 0 auto;
  position: relative; z-index: 5;
}
.box-ricerca > div { padding: .55rem 1.3rem; border-right: 1px solid var(--hairline); }
.box-ricerca > div:last-of-type { border-right: 0; }
.box-ricerca label {
  font-weight: 700; color: var(--blu); display: block; margin-bottom: .1rem;
  font-size: .78rem; letter-spacing: .14em; text-transform: uppercase;
}
/* Il campo di testo si veste come le tendine che ha di fianco: niente cornice
   sua, e' la scatola bianca a fare da cornice a tutti e tre. 17px pieni: sotto
   i 16 il telefono ingrandisce da solo al primo tocco. */
.box-ricerca select.campo,
.box-ricerca input.campo { border: 0; padding-left: 0; min-height: 3rem; font-size: 1.08rem; background: transparent; }
.box-ricerca input.campo::placeholder { color: var(--testo-soft); opacity: 1; }
.box-ricerca .btn { align-self: center; margin: .35rem; }
.ricerca-flottante { margin-top: -3.4rem; padding: 0 1.5rem; }
/* Tre scomparti in una riga sola vogliono spazio: finche' la scatola non ha la
   sua misura piena (64rem + i 3rem di margine della fascia = 1072px di finestra)
   passa a due righe — campo largo sopra, tendine sotto — invece di strizzare le
   domande fino a mandarle a capo. Misurato: a 1000px "DOVE VUOI ANDARE?" si
   spezzava in due righe mentre le altre due domande restavano su una. */
@media (min-width: 761px) and (max-width: 1071px) {
  .box-ricerca { grid-template-columns: 1fr 1fr; }
  .box-ricerca > div:first-child { grid-column: 1 / -1; border-right: 0; border-bottom: 1px solid var(--hairline); }
  .box-ricerca .btn { grid-column: 1 / -1; margin: .6rem .35rem .35rem; }
}
@media (max-width: 760px) {
  .box-ricerca { grid-template-columns: 1fr; }
  .box-ricerca > div { border-right: 0; border-bottom: 1px solid var(--hairline); }
  /* impilate a tutta larghezza lo spazio verticale non manca: 52px come i bottoni */
  .box-ricerca select.campo,
  .box-ricerca input.campo { min-height: 3.25rem; }
  /* "DOVE VUOI ANDARE?" era a 12.5px: sono le domande del modulo, non didascalie.
     17px come le etichette dei filtri (stessa regola dei 720px piu' sotto);
     la spaziatura si stringe perche' a questa misura .14em allarga troppo. */
  .box-ricerca label { font-size: 1.0625rem; letter-spacing: .08em; }
}
/* Sui telefoni piu' stretti (320px, l'iPhone SE e chi ingrandisce il testo di
   sistema) "CHE VIAGGIO CERCHI?" chiedeva 239px e ne aveva 209: andava a capo
   da solo mentre le altre due domande restavano su una riga. Si stringe la
   spaziatura delle lettere e lo scomparto, non il corpo del testo. */
@media (max-width: 400px) {
  .box-ricerca label { letter-spacing: .02em; }
  .box-ricerca > div { padding-left: 1rem; padding-right: 1rem; }
}

/* ---------- Campi form ---------- */
.campo, select.campo, input.campo, textarea.campo {
  width: 100%;
  min-height: 3.25rem;
  padding: .7rem .95rem;
  font: inherit; color: var(--testo);
  border: 1px solid #C6CDD8; border-radius: var(--raggio-s);
  background: var(--bianco);
  transition: border-color .2s;
}
select.campo { cursor: pointer; }
.campo:hover, .campo:focus { border-color: var(--blu); }
label.etichetta { display: block; font-weight: 600; color: var(--blu); margin-bottom: .4rem; font-size: 1rem; }
.campo-gruppo { margin-bottom: 1.3rem; }
.obbligatorio::after { content: " *"; color: var(--rosso); }

/* ---------- Il modulo della pagina di ricerca (search.php) ---------- */
/* Campo e bottone sulla stessa riga, in colonna sotto i 640. Il campo a 18px:
   e' IL campo della pagina, e sotto i 16px iOS zoomerebbe da solo al tocco. */
.modulo-ricerca { max-width: 40rem; margin-top: 1.6rem; }
.modulo-ricerca-riga { display: flex; gap: .8rem; }
.modulo-ricerca .campo { flex: 1; min-width: 0; font-size: 1.125rem; }
@media (max-width: 640px) { .modulo-ricerca-riga { flex-direction: column; } }

/* ---------- Striscia fiducia: sottile, tipografica, su sabbia ---------- */
/* Fondo bianco (chiesto dal marketing, era sabbia): dentro ci sono i soli badge delle
   recensioni, coi marchi di Google e Trustpilot, e quelli sono nati per stare sul
   bianco. Il filo di separazione passa da sabbia a hairline, perche' sul bianco il
   bordo sabbia non si vedrebbe. */
.barra-fiducia { background: var(--bianco); border-bottom: 1px solid var(--hairline); }
.barra-fiducia .contenitore {
  display: flex; flex-wrap: wrap; gap: .6rem 3.5rem;
  justify-content: center; padding-top: 1.5rem; padding-bottom: 1.5rem;
  font-weight: 600; font-size: .85rem;
  letter-spacing: .1em; text-transform: uppercase;
  color: var(--blu);
}
/* Dentro la barra ci sono i badge (.prove): il maiuscoletto e la spaziatura
   della fascia non li riguardano — il voto e' un numero, non un'etichetta. */
.barra-prove { text-transform: none; letter-spacing: 0; gap: 1rem 3rem; }
/* Nella barra il badge si scrive IN RIGA - marchio, stelle, voto uno accanto
   all'altro (Vlad, 21/08/2026). La barra e' una striscia alta poche decine di
   pixel: in colonna la faceva crescere e i due badge diventavano due colonnine
   in mezzo al bianco. L'ordine e' lo stesso di sempre, cambia solo il verso.
   Nel piede e nella pagina recensioni restano in colonna: li' lo spazio e'
   stretto e alto, e il verso giusto e' quello. */
.barra-prove .prova { flex-direction: row; align-items: center; gap: .6rem; min-width: 0; padding: .5rem .3rem; }
.barra-prove .prova-marchio { height: auto; }
.barra-prove .prova-voto { line-height: 1; }
/* Le voci coi voti vestite da badge: la G di Google o le stelle verdi di
   Trustpilot accanto al testo di bacheca, e tutta la voce porta alla scheda
   dove il voto si controlla. Stesso colore delle sorelle: che sia un
   collegamento lo dicono il marchio e la sottolineatura al passaggio. */
.barra-fiducia .fiducia-prova {
  display: flex; align-items: center; gap: .55rem;
  color: inherit; text-decoration: none;
  /* Sono diventate collegamenti: l'area di tocco sale a ~48px col padding
     rimborsato dal margine, senza spostare niente (stesso giro dei consensi). */
  padding: .65rem .4rem; margin: -.65rem -.4rem;
}
a.fiducia-prova:hover .fiducia-testo, a.fiducia-prova:focus-visible .fiducia-testo,
a.fiducia-prova:hover .fiducia-parola, a.fiducia-prova:focus-visible .fiducia-parola { text-decoration: underline; text-underline-offset: .22em; }
.fiducia-marchi { display: flex; align-items: center; gap: .55rem; }
/* La parola del giudizio ("Eccellente") esce dal maiuscoletto della barra:
   minuscola vera, un gradino piu' grande, blu pieno — come la scrive Caldana. */
.fiducia-parola { text-transform: none; letter-spacing: 0; font-size: 1.2rem; font-weight: 600; color: var(--blu-scuro); }
.fiducia-prova .stelle-voto { font-size: 1.1rem; letter-spacing: .06em; }
.fiducia-prova .logo-google, .fiducia-prova .stelle-trustpilot { display: block; }
@media (max-width: 760px) {
  /* In verticale ogni voce e' una riga centrata; i badge vanno in colonna
     (marchi sopra, testo sotto) perche' in riga, a questa larghezza, il testo
     andava a capo DI FIANCO alle stelle e la barra usciva sfrangiata. */
  .barra-fiducia .contenitore { flex-direction: column; align-items: center; gap: 1.1rem; }
  .barra-fiducia .contenitore > span, .barra-fiducia .fiducia-prova { justify-content: center; text-align: center; }
  .barra-fiducia .fiducia-prova { flex-direction: column; gap: .4rem; }
}
@media (max-width: 760px) {
  /* Sul telefono le voci stanno una sotto l'altra e 13.6px era il testo piu'
     piccolo della prima schermata: 17px, come il corpo (pubblico 59% over-60). */
  .barra-fiducia .contenitore { font-size: 1.0625rem; letter-spacing: .06em; }
}

/* ---------- Card tour: flat, bordo hairline, hover con vita ---------- */
.griglia-card {
  display: grid; gap: 2.25rem;
  grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));
}
/* Nel catalogo ogni scheda sta dentro un contenitore che serve ai filtri. La
   griglia allungava QUEL contenitore fino all'altezza della riga, ma la scheda
   dentro restava alta quanto il suo testo: misurato a 1440px, tre schede della
   stessa riga erano 527, 551 e 555px, e i tre prezzi stavano a 1193, 1217 e
   1221 — 28px di sfalsamento. In un catalogo il prezzo e' il dato che si
   confronta, e se ogni volta sta a un'altezza diversa l'occhio deve cercarlo.
   La scheda ha gia' "margin-top:auto" sul fondo: bastava lasciarla riempire. */
.griglia-card > .slot-tour { display: grid; }
/* ...ma un elemento con l'attributo "hidden" deve restare nascosto. Questa riga
   non e' un dettaglio: "display: grid" qui sopra VINCE sul display:none che il
   browser da' a [hidden] (una regola scritta nel foglio batte sempre quella
   predefinita), e il filtro della pagina destinazione — che nasconde proprio
   con .hidden = true — contava giusto ("1 tour") lasciando tutte le schede a
   schermo. Segnalato da Vlad il 20/08/2026 cercando "the new" sugli Stati Uniti:
   il contatore diceva 1 e sotto c'erano California, Citta' Montagne e Musica,
   Cow Boys & Indians. */
.griglia-card > .slot-tour[hidden] { display: none; }
/* height:100% + il titolo bloccato a due righe (piu' sotto) = TUTTE LE CARD ALTE
   UGUALE, quindi il prezzo di ognuna alla stessa altezza. Prima le sfalsavano la riga
   descrittiva (1 o 2 righe secondo il testo) e il titolo; la riga descrittiva e' stata
   tolta dal marketing, il resto lo tengono queste due regole.
   position:relative regge il collegamento del titolo, che si allarga su tutta la card. */
.card-tour {
  position: relative; height: 100%;
  background: var(--bianco); border-radius: var(--raggio); overflow: hidden;
  border: 1px solid var(--hairline);
  text-decoration: none; color: var(--testo);
  display: flex; flex-direction: column;
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s;
}
.card-tour:hover { transform: translateY(-4px); box-shadow: var(--ombra-hover); border-color: transparent; }
.card-tour figure { position: relative; aspect-ratio: 4 / 3; overflow: hidden; }
.card-tour figure img { width: 100%; height: 100%; object-fit: cover; transition: var(--transizione-foto); }
/* Fondo del riquadro foto su TUTTE le schede: una JPEG si dipinge dall'alto,
   e finche' non e' arrivata tutta il fondo resta in vista — grigio brand,
   non bianco crudo che pare un difetto (foto «a meta'» colta da Vlad su una
   scheda India, 25/08/2026: file e tagli erano sani, era solo il viaggio). */
.card-tour figure, .card-catalogo figure, .card-tipologia figure, .card-blog figure { background: var(--grigio); }
.card-tour:hover figure img { transform: scale(1.05); }
.chip-foto {
  position: absolute; bottom: 0; left: 0;
  background: rgba(16,41,77,.82); color: var(--bianco);
  font-size: .75rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
  padding: .45rem .9rem;
}
.chip-offerta {
  position: absolute; top: 1rem; right: 0;
  background: var(--oro); color: var(--blu-scuro);
  font-size: .75rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  padding: .4rem .9rem;
}
/* Il bollino della collezione con accompagnatore: in alto a destra come il
   sigillo del vecchio sito. Rettangolo a spigoli vivi, uguale al chip che il sito
   usa sulle fotografie; fondo blu e scritta bianca. Sta a destra perche' a sinistra
   c'e' gia' il cartellino dello sconto, e i due non devono accavallarsi. */
.bollo-firmato {
  position: absolute; top: .8rem; right: .8rem; z-index: 2;
  display: inline-flex; align-items: center; gap: .32rem;
  background: rgba(16,41,77,.82); color: var(--bianco);
  font-size: .75rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
  padding: .45rem .9rem;
}
.bollo-firmato svg { width: .85em; height: .85em; flex: none; }
.card-tour .corpo { padding: 1.6rem 1.5rem 1.5rem; display: flex; flex-direction: column; gap: .5rem; flex: 1; }
/* Il titolo occupa SEMPRE due righe, anche quando ne basta una: e' quello che teneva
   disallineato tutto il resto della card. Oltre le due righe si taglia. */
.card-tour h3 {
  font-size: 1.16rem; line-height: 1.3; min-height: calc(2 * 1.3em);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.card-tour h3 a { color: inherit; text-decoration: none; }
/* Il collegamento del titolo si allarga su tutta la card: si clicca dappertutto come
   quando la card era un <a> sola, ma senza annidare un <a> dentro un altro <a> — cosi'
   il bottone "Scopri il tour" puo' essere un collegamento vero. */
.card-tour h3 a::after { content: ""; position: absolute; inset: 0; z-index: 1; }
.card-tour .dest { color: var(--oro-scuro); font-size: .78rem; font-weight: 600; text-transform: uppercase; letter-spacing: .14em; }
/* La durata, che prima stava stampata sulla fotografia */
.card-tour .durata-card {
  font-size: .82rem; font-weight: 600; letter-spacing: .1em;
  text-transform: uppercase; color: var(--testo-soft);
}
/* Quante partenze si possono ancora prenotare. Niente icona, quindi niente flex. */
.card-tour .quando-card { display: block; color: var(--testo); margin-top: .15rem; }
.card-tour .quando-card strong { font-weight: 600; }
.card-tour .fondo {
  margin-top: auto; padding-top: 1.05rem; border-top: 1px solid var(--hairline);
  display: flex; align-items: center; justify-content: space-between; gap: .9rem;
}
/* "Scopri il tour". Sopra al collegamento del titolo (z-index), altrimenti il clic lo
   prenderebbe la card e il bottone sarebbe finto.
   ⚠ Bianco su #ECAE2D fa 1,98:1 di contrasto, sotto il 4,5:1 che il BRIEF chiede per il
   testo. Scelta del marketing, guardata sul cantiere e confermata. Se un giorno si
   rivede: lo stesso oro col blu scuro fa 7,3:1 ed e' quello dei bottoni oro del sito. */
.btn-scopri {
  position: relative; z-index: 2;
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 48px; padding: .6rem 1.15rem;
  /* Blu scuro e non bianco: ovunque il sito scrive su fondo oro (.btn-oro,
     .chip-offerta, .bollino) il testo e' --blu-scuro, e c'e' un perche' —
     il bianco su --oro si ferma a 1,97:1, sotto perfino il 3:1 dei testi
     grandi, mentre --blu-scuro arriva a 7,33:1. Questo era l'unico bottone
     rimasto bianco, sul bersaglio primario di ogni scheda. */
  background: var(--oro); color: var(--blu-scuro);
  border-radius: var(--raggio); text-decoration: none; white-space: nowrap;
  font-size: .92rem; font-weight: 700; letter-spacing: .04em;
  transition: background .25s ease;
}
/* #DDA01F e' l'hover ufficiale dell'oro (.btn-oro:hover), non il #D89A1C che
   stava qui: una terza tonalita' per lo stesso gesto era una variante in piu'. */
.btn-scopri:hover, .btn-scopri:focus-visible { background: #DDA01F; color: var(--blu-scuro); }
/* Sotto i 380px il prezzo e il bottone affiancati si strizzano a vicenda */
@media (max-width: 380px) {
  .card-tour .fondo { flex-direction: column; align-items: stretch; }
  .card-tour .btn-scopri { width: 100%; }
}
.prezzo-da { font-size: .82rem; color: var(--testo-soft); letter-spacing: .06em; text-transform: uppercase; }
.prezzo-da strong { display: block; font-size: 1.35rem; color: var(--blu); font-family: 'Zalando Sans Expanded', sans-serif; font-weight: 600; letter-spacing: 0; text-transform: none; }
.partenze-num { font-size: .92rem; color: var(--testo-soft); text-align: right; }

/* ---------- Cataloghi da sfogliare: griglia a due colonne ----------
   Stesso impianto del vecchio sito (copertina, titolo, riga, due pulsanti),
   ma con la pelle del tema: raggio 4px invece delle pillole, bordo hairline
   invece dell'ombra a riposo, blu/oro invece del bordeaux.
   26rem di minimo = due colonne sul contenitore pieno, una sotto i 900px. */
.griglia-cataloghi {
  display: grid; gap: 2.25rem;
  grid-template-columns: repeat(auto-fill, minmax(26rem, 1fr));
}
@media (max-width: 560px) { .griglia-cataloghi { grid-template-columns: 1fr; gap: 1.75rem; } }
.card-catalogo {
  background: var(--bianco); border-radius: var(--raggio); overflow: hidden;
  border: 1px solid var(--hairline);
  display: flex; flex-direction: column;
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s;
}
.card-catalogo:hover { transform: translateY(-4px); box-shadow: var(--ombra-hover); border-color: transparent; }
.card-catalogo figure { aspect-ratio: 3 / 2; overflow: hidden; }
.card-catalogo figure img { width: 100%; height: 100%; object-fit: cover; transition: var(--transizione-foto); }
.card-catalogo:hover figure img { transform: scale(1.05); }
.card-catalogo .corpo {
  padding: 1.9rem 1.6rem 1.7rem; flex: 1;
  display: flex; flex-direction: column; gap: .7rem; text-align: center;
}
.card-catalogo h2 { font-size: 1.5rem; line-height: 1.25; }
.card-catalogo p, .card-catalogo .testo-scheda { color: var(--testo-soft); }
.card-catalogo .testo-scheda p + p { margin-top: .6em; }
/* I pulsanti in fondo restano allineati fra schede di altezza diversa. */
.card-catalogo .azioni {
  margin-top: auto; padding-top: 1.2rem;
  display: flex; flex-wrap: wrap; gap: .75rem; justify-content: center;
}
/* Su schermo stretto i due pulsanti vanno a tutta larghezza: il pubblico e'
   over-60, meglio due bersagli grandi che due bottoncini affiancati. */
@media (max-width: 420px) { .card-catalogo .azioni .btn { flex: 1 1 100%; } }

/* ---------- Carosello (destinazioni alla Boscolo, scroll-snap) ---------- */
.carosello { position: relative; }
.carosello-traccia {
  display: flex; gap: 1.75rem;
  overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;
  padding: .25rem .25rem 1rem;
  scrollbar-width: none;
}
.carosello-traccia::-webkit-scrollbar { display: none; }
.carosello-traccia > * { scroll-snap-align: start; flex: 0 0 auto; }
.carosello-frecce { display: flex; gap: .7rem; justify-content: flex-end; margin-bottom: 1.4rem; }
.freccia-car {
  width: 3.25rem; height: 3.25rem; border-radius: 50%;
  border: 1px solid #C6CDD8; background: var(--bianco); color: var(--blu);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; transition: background .2s, color .2s, border-color .2s;
}
.freccia-car:hover { background: var(--blu); border-color: var(--blu); color: var(--bianco); }

/* Card destinazione grande, verticale. Nata per il carosello della home, ora e' anche
   la card dell'indice /destinazioni/: una sola card per tutt'e due i posti, cosi' non
   possono divergere. La larghezza fissa serve al carosello, dove le card scorrono in
   orizzontale; in griglia la toglie .griglia-dest qui sotto. */
.card-dest-g {
  position: relative; border-radius: var(--raggio); overflow: hidden;
  width: clamp(17rem, 24vw, 22rem); aspect-ratio: 3 / 4;
  display: flex; align-items: flex-end; text-decoration: none;
}
/* L'indice delle destinazioni: le stesse card, ma in griglia. Senza width:auto
   resterebbero ferme a 22rem lasciando buchi a destra. */
.griglia-dest {
  display: grid; gap: 2rem;
  grid-template-columns: repeat(auto-fill, minmax(min(19rem, 100%), 1fr));
}
.griglia-dest .card-dest-g { width: auto; }
.card-dest-g img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: var(--transizione-foto); }
.card-dest-g:hover img { transform: scale(1.05); }
.card-dest-g .velo {
  position: relative; width: 100%;
  background: linear-gradient(180deg, transparent, rgba(13,28,54,.86));
  color: var(--bianco); padding: 5rem 1.6rem 1.5rem;
}
.card-dest-g h3 { color: var(--bianco); font-size: 1.7rem; }
.card-dest-g .velo span { font-size: .95rem; opacity: .92; }
.card-dest-g .velo .rigo { width: 2rem; height: 2px; background: var(--oro); margin: .6rem 0 .5rem; transition: width .3s; }
.card-dest-g:hover .velo .rigo { width: 3.4rem; }

/* ---------- Card destinazione (griglie interne, v2) ---------- */
.card-dest {
  position: relative; border-radius: var(--raggio); overflow: hidden;
  aspect-ratio: 4 / 3; display: flex; align-items: flex-end;
  text-decoration: none;
  transition: transform .3s ease, box-shadow .3s ease;
}
.card-dest:hover { transform: translateY(-4px); box-shadow: var(--ombra-hover); }
.card-dest img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: var(--transizione-foto); }
.card-dest:hover img { transform: scale(1.05); }
.card-dest .velo {
  position: relative; width: 100%;
  background: linear-gradient(180deg, transparent, rgba(13,28,54,.82));
  color: var(--bianco); padding: 3rem 1.4rem 1.2rem;
}
.card-dest h3 { color: var(--bianco); font-size: 1.3rem; }
.card-dest .velo span { font-size: .92rem; opacity: .9; }

/* ---------- Tipologie di viaggio ---------- */
.griglia-tipologie { display: grid; gap: 1.75rem; grid-template-columns: repeat(auto-fit, minmax(12.5rem, 1fr)); }
.card-tipologia {
  background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio);
  overflow: hidden; text-decoration: none; color: var(--testo);
  display: flex; flex-direction: column;
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s;
}
.card-tipologia:hover { transform: translateY(-4px); box-shadow: var(--ombra-hover); border-color: transparent; }
.card-tipologia figure { aspect-ratio: 16 / 10; overflow: hidden; }
.card-tipologia figure img { width: 100%; height: 100%; object-fit: cover; transition: var(--transizione-foto); }
.card-tipologia:hover figure img { transform: scale(1.05); }
.card-tipologia .corpo { padding: 1.5rem 1.5rem 1.4rem; display: flex; flex-direction: column; gap: .45rem; flex: 1; }
.card-tipologia h3 { font-size: 1.2rem; }
/* La categoria sopra al nome ("Città", "Natura"…) nelle card di "cosa vedere": stesso
   occhiello oro delle card tour, chiesto dal marketing. Prima era grigio e scritto negli
   stili della pagina, dove nessuno lo trovava. --oro-scuro e non --oro: a 12px l'oro del
   marchio sul bianco non si legge (v. la nota accanto alla variabile). */
.card-tipologia .dest { color: var(--oro-scuro); font-size: .78rem;   /* come .card-tour .dest: stesso ruolo, stessa misura */ font-weight: 600; text-transform: uppercase; letter-spacing: .14em; }
.card-tipologia p { font-size: .96rem; color: var(--testo-soft); line-height: 1.55; }
.card-tipologia .fondo { margin-top: auto; padding-top: 1rem; font-size: .85rem; font-weight: 700; color: var(--blu); letter-spacing: .08em; text-transform: uppercase; }

/* ---------- Il carosello delle tipologie (home) ----------
   Dal 27/08/2026 (Vlad) le schede delle tipologie SONO le schede delle
   destinazioni: stessa card (.card-dest-g), stesso contenitore (.carosello),
   stesse misure per costruzione. Qui non serve piu' nessuna regola: la
   vestizione "quasi tutta fotografia con la fascia bianca" (.card-tip-foto,
   .carosello-tip a --per-vista) e' stata tolta insieme al suo markup —
   sta nella storia di git se dovesse tornare utile. */

/* I pallini. Il bersaglio e' 44px pieni anche se il disegno e' un dischetto di 11: il
   pubblico e' over-60 e un pallino da 11px non si becca. Lo spazio fra i bersagli e'
   negativo di proposito, se no due dischetti vicini sembrerebbero lontanissimi. */
/* I pallini vanno a capo invece di stringersi. Con otto pagine di carosello
   servono 8x48 = 384px e su un telefono da 390 ne restano 358: il flex li
   schiacciava a 36px di larghezza, cioe' sotto il polpastrello, e per giunta
   attaccati fra loro (misurato il 20/08/2026). Meglio due righe di pallini
   giusti che una riga di pallini che si sbagliano. */
/* "margin-inline: auto" e non solo margin-top: quando i pallini vanno a capo, il
   JavaScript stringe il contenitore per pareggiare le righe (4+4 invece di 7+1),
   e un contenitore stretto senza margini automatici si incolla a sinistra. */
/* I PUNTINI DEL CAROSELLO (quarta versione, approvata — Vlad 27/08/2026):
   pieni, fitti, sempre tutti su una riga. Sul telefono sono spie e basta
   (pointer-events spenti: il comando e' il dito, e un bersaglio da 8px non
   sarebbe mai onesto); sulla scrivania crescono a 13px e si cliccano, e la
   traccia si trascina col mouse (vedi sito.js). */
.carosello-punti { display: flex; flex-wrap: nowrap; justify-content: center; gap: 9px; margin: 1.1rem auto 0; }
.carosello-punti[hidden] { display: none; }
.punto-car {
  flex: 0 0 auto; width: 8px; height: 8px; border-radius: 50%;
  border: 0; padding: 0; background: #C9D1DD;
  transition: background .2s, transform .2s;
  pointer-events: none;
}
.punto-car.attivo { background: var(--blu); transform: scale(1.3); }
@media (hover: hover) and (pointer: fine) {
  /* Il pallino DISEGNATO e' 13px (il ::before), ma il bersaglio del clic e' il
     bottone intero: 26px, invisibile. Facile da centrare senza ingrossare il segno. */
  .carosello-punti { gap: 4px; }
  .punto-car {
    width: 26px; height: 26px; pointer-events: auto; cursor: pointer;
    background: none; transform: none;
    display: inline-flex; align-items: center; justify-content: center;
  }
  .punto-car::before {
    content: ""; width: 13px; height: 13px; border-radius: 50%;
    background: #C9D1DD; transition: background .2s, transform .2s;
  }
  .punto-car:hover::before { background: #9DB0CC; transform: scale(1.15); }
  .punto-car.attivo { background: none; transform: none; }
  .punto-car.attivo::before, .punto-car.attivo:hover::before { background: var(--blu); transform: scale(1.25); }
  .punto-car:focus-visible { outline: 2px solid var(--blu); outline-offset: 1px; border-radius: 50%; }
  /* la traccia dice con la mano che si puo' trascinare */
  .carosello-traccia { cursor: grab; }
  .carosello-traccia.trascina { cursor: grabbing; }
}
/* durante il trascinamento col mouse lo scatto si spegne (combatterebbe con la
   mano), lo scorrimento diventa SECCO (scroll-behavior auto: con smooth ogni
   spostamento animerebbe e la traccia arrancherebbe dietro al mouse invece di
   seguirlo 1:1) e niente si seleziona; riaccende tutto sito.js a scheda raggiunta */
.carosello-traccia.trascina { scroll-snap-type: none; scroll-behavior: auto; user-select: none; }

/* ---------- Blocco di presentazione (home, fra la barra della fiducia e i viaggi) ----
   Titolo grande a sinistra, testo a destra.
   LE DUE COLONNE COPRONO LA STESSA ALTEZZA. Sono due caselle della stessa riga di
   griglia, quindi sono alte uguale per costruzione; il titolo pero' e' piu' corto del
   testo, e da solo lascerebbe un vuoto in fondo. Le sue righe sono <span> e si
   distribuiscono sull'altezza della riga: il titolo comincia e finisce dove comincia e
   finisce il testo di fianco. */
.blocco-intro { display: grid; gap: 1.6rem 4rem; grid-template-columns: 1fr 1fr; }
.blocco-intro h2 { margin: 0; display: flex; flex-direction: column; justify-content: space-between; }
.blocco-intro h2 span { display: block; }
/* Giustificato su richiesta (Vlad, 28/08/2026). Con la sillabazione: senza,
   il giustificato su una colonna da mezza pagina apre fiumi bianchi. */
.blocco-intro p { margin: 0; text-align: justify; hyphens: auto; }
@media (max-width: 860px) {
  /* Incolonnate non c'e' piu' niente da pareggiare: il titolo torna un titolo normale,
     righe attaccate, altrimenti sul telefono si sfilaccerebbe in tre righe lontane. */
  .blocco-intro { grid-template-columns: 1fr; gap: 1.2rem; }
  .blocco-intro h2 { display: block; }
}

/* ---------- "Cosa rende speciale un tour": tre colonne ----------
   Qui di fianco alle colonne c'era il video di YouTube, con la finestra che si apriva
   al clic: tolto su richiesta del marketing il 18/08/2026, e con lui tutto il vestito
   che serviva solo a lui (riquadro, bollo di riproduzione, finestra). In git c'e'. */
.colonne-speciale { display: grid; gap: 2.2rem; grid-template-columns: repeat(3, minmax(0, 1fr)); }
/* Icona e titolo al centro della colonna (chiesto dal marketing), il testo sotto resta
   giustificato: la testa della colonna fa da insegna, il testo si legge come un
   paragrafo. La centratura dell'icona la fa il margine automatico ai lati — il riquadro
   ha una misura sua, quindi "auto" ha spazio da spartire. */
.voce-speciale .icona { color: var(--blu); width: 3.2rem; height: 3.2rem; margin: 0 auto 1rem; }
.voce-speciale h3 { font-size: 1.08rem; margin-bottom: .5rem; text-align: center; }
/* Giustificato, come chiesto, e NIENTE sillabazione: le parole non si spezzano col
   trattino a fine riga (chiesto dal marketing dopo averla vista su "cu-rate").
   Il prezzo e' quello che la sillabazione serviva a evitare: in colonne strette il
   giustificato, senza poter spezzare, allarga gli spazi fra le parole e ogni tanto si
   vede una riga piu' arieggiata delle altre. Fra i due difetti il marketing ha scelto
   questo, ed e' anche quello che si nota meno leggendo. */
.voce-speciale p {
  font-size: .98rem; color: var(--testo-soft); line-height: 1.6;
  text-align: justify; hyphens: none;
}
@media (max-width: 700px) {
  .colonne-speciale { grid-template-columns: 1fr; gap: 2.4rem; }
  /* Su una colonna sola il giustificato non serve piu' e i buchi fra le parole si
     vedrebbero il doppio: si torna a bandiera. */
  .voce-speciale p { text-align: left; }
}

/* ---------- Download: le locandine dei Firmati ----------
   La pagina era prosa d'editor (titoletto, riga di date, due collegamenti
   mignon in fila): qui ogni locandina e' una scheda con i due comandi da
   bottone, e il PDF viene per primo perche' la pagina si chiama Download. */
/* ---------- Download: l'elenco delle locandine ----------
   Una colonna, righe divise da un filetto, nessuna scatola. Le schede
   servono dove c'e' una fotografia da mostrare (Cataloghi); qui c'e' solo un
   nome, una riga di date e un PDF da prendere, e in una card da 19rem quella
   riga si spezzava in cinque monconi da 36 caratteri. Vedi la nota in cima a
   page-download.php. */
.elenco-locandine { list-style: none; margin-top: 2.75rem; border-top: 1px solid var(--hairline); }
.voce-locandina {
  display: grid; gap: 1rem 3rem;
  padding: 1.7rem 0;
  border-bottom: 1px solid var(--hairline);
}
.voce-locandina h2 { font-size: 1.35rem; line-height: 1.25; }
.voce-dati {
  color: var(--testo-soft); font-size: 1.0625rem; line-height: 1.6;
  max-width: var(--misura-lettura); margin-top: .4rem;
}
/* Date e prezzo sono gia' in grassetto dall'editor: e' l'unica cosa che si
   cerca davvero, e in questo colore risalta senza aggiungere niente. */
.voce-dati strong { color: var(--testo); font-weight: 600; }
.voce-comandi { display: flex; flex-direction: column; align-items: flex-start; gap: .1rem; }
.voce-comandi .btn .ico { width: 1.05rem; height: 1.05rem; flex: 0 0 auto; }
/* Il bottone non si stringe con la colonna: l'etichetta piu' la nota stanno su
   una riga sola fino a 560px, poi il bottone va a tutta larghezza. */
.btn-scarica { padding-left: 1.6rem; padding-right: 1.6rem; white-space: nowrap; }
/* ⚠ Questi due @media stanno DOPO le regole base di .voce-comandi, non prima:
   messi sopra perdevano nella cascata a parita' di specificita' e i bottoni non
   si allargavano davvero (visto: 393px in una colonna da 400, gli otto ancora
   di larghezze diverse). */
/* Da 900px in su i comandi vanno a destra: le righe restano alte due sole righe
   di testo e gli otto bottoni si incolonnano sul filo destro, che e' il modo
   piu' veloce di scorrere un elenco di cose da scaricare.
   La colonna ha larghezza FISSA e i bottoni la riempiono: larghi quanto il loro
   contenuto venivano uno diverso dall'altro, perche' il peso del file cambia
   (475,1 KB, 1,0 MB, 859,9 KB). Etichette allineate a sinistra, cosi' le otto
   scritte partono dallo stesso punto. (Il distintivo "PDF" in fondo al bottone
   non c'e' piu' — tolto il 25/08 su ordine di Vlad.) */
@media (min-width: 900px) {
  .voce-locandina { grid-template-columns: minmax(0, 1fr) 25rem; align-items: center; }
  .voce-comandi { align-items: stretch; }
  /* Lo stiramento vale per il bottone, non per il collegamento sotto: tirato a
     400px il suo rigo d'oro diventava una riga che attraversa mezza pagina e si
     leggeva come un divisorio, non come la sottolineatura di due parole. */
  .voce-comandi .link-freccia { align-self: flex-start; }
  .voce-comandi .btn-scarica { justify-content: flex-start; }
}
/* Da telefono il bottone prende tutta la riga, di UNA riga sola. */
@media (max-width: 560px) {
  .btn-scarica { width: 100%; white-space: normal; padding-left: 1rem; padding-right: 1rem; }
}
/* Sotto i 380 "SCARICA LA LOCANDINA" in maiuscoletto spaziato non ci sta: a
   320px chiedeva 309px in un contenitore da 288 e faceva sbordare la pagina di
   5px. Si stringe la spaziatura, non il corpo — stesso rimedio gia' usato per
   .btn-solo e .btn-grande poco piu' sopra.
   Anche cosi' restava in bilico per un pelo: misurato a 320px servivano 256px
   esatti e ce n'erano 256, quindi bastava un arrotondamento per mandarlo a
   capo. L'ultimo filo lo danno il margine interno e lo stacco fra icona ed
   etichetta: su un bottone gia' largo quanto la riga non danno forma, rubano
   parole (la stessa ragione scritta per .btn-solo). */
@media (max-width: 380px) {
  .btn-scarica { letter-spacing: .04em; gap: .45rem; padding-left: .8rem; padding-right: .8rem; }
}

/* ---------- Recensioni ---------- */
.recensioni { display: flex; gap: 2.5rem; flex-wrap: wrap; }
.recensione-badge { display: flex; align-items: center; gap: .9rem; }
.recensione-badge .voto { font-family: 'Zalando Sans Expanded', sans-serif; font-size: 1.6rem; font-weight: 600; color: var(--blu); }
.recensione-badge .fonte { font-size: .92rem; color: var(--testo-soft); line-height: 1.35; }
.stelle { color: var(--oro); letter-spacing: .08em; }
.griglia-recensioni { display: grid; gap: 1.75rem; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); }
.card-recensione {
  background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio);
  padding: 2rem 2rem 1.7rem; display: flex; flex-direction: column; gap: 1rem;
}
.card-recensione .virgolette { color: var(--oro); font-family: Georgia, serif; font-size: 3rem; line-height: .5; height: 1.4rem; }
/* Quando la card porta una recensione vera di Trustpilot, al posto delle
   virgolette ci sono le SUE stelle verdi: un dato (il voto di quella
   recensione), non un ornamento. Stessa altezza di riga delle virgolette,
   cosi' le card vive e quelle di scorta restano allineate. */
.card-recensione .stelle-card { height: 1.4rem; display: flex; align-items: center; }
.card-recensione footer a { color: inherit; text-underline-offset: .18em; }
.card-recensione blockquote { font-size: 1.02rem; line-height: 1.65; color: var(--testo); }
.card-recensione footer { margin-top: auto; padding-top: 1rem; border-top: 1px solid var(--hairline); font-size: .9rem; color: var(--testo-soft); }
.card-recensione footer strong { color: var(--blu); display: block; font-size: .98rem; }
.citazione-tour { text-align: center; max-width: 46rem; margin: 0 auto; }
.citazione-tour blockquote { font-family: 'Zalando Sans Expanded', sans-serif; font-size: clamp(1.25rem, 2.4vw, 1.7rem); font-weight: 600; color: var(--blu); line-height: 1.4; }
.citazione-tour figcaption { margin-top: 1.2rem; color: var(--testo-soft); font-size: .95rem; }

/* ---------- Blog ---------- */
.card-blog {
  background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio);
  overflow: hidden; text-decoration: none; color: var(--testo);
  display: flex; flex-direction: column;
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s;
}
.card-blog:hover { transform: translateY(-4px); box-shadow: var(--ombra-hover); border-color: transparent; }
.card-blog figure { aspect-ratio: 16 / 9; overflow: hidden; }
.card-blog figure img { width: 100%; height: 100%; object-fit: cover; transition: var(--transizione-foto); }
.card-blog:hover figure img { transform: scale(1.05); }
/* gap .85rem e non .5rem (marketing, 24/08/2026): argomento, titolo e bottone
   erano appiccicati. È il gap a fare la distanza minima fra titolo e bottone —
   il bottone ha margin-top:auto e sulle schede dal titolo corto si stacca da
   solo, ma su quelle da tre righe è il gap l'unica cosa che lo tiene giù. */
.card-blog .corpo { padding: 1.6rem 1.5rem 1.5rem; display: flex; flex-direction: column; gap: .85rem; flex: 1; }
/* L'ARGOMENTO AL POSTO DELLA DATA (marketing, 21/08/2026): stessa riga, stessa
   misura, stesso oro. La data diceva quando e' stato scritto, che su un pezzo
   del 2023 lo invecchia e basta; l'argomento dice di che parla. */
.card-blog .argomento { font-size: .78rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--oro-scuro); }
/* TUTTE LE SCHEDE DELLA STESSA ALTEZZA, sulla misura di un titolo da tre righe
   (chiesto dal marketing). Servono tutt'e due le regole: il min-height tiene su
   le schede dal titolo corto — se no la loro riga si accorcia e la griglia va a
   gradini — e il clamp ferma a tre righe i titoli lunghi, che qui arrivano a
   cinque. Il titolo intero si legge sulla pagina dell'articolo, dove non lo
   taglia niente.
   Il 3 e l'1.35 vanno insieme: 1.35 e' la line-height qui sotto, e cambiandola
   va cambiato anche il calc. */
.card-blog h3, .card-blog h2 {
  font-size: 1.12rem; line-height: 1.35;
  min-height: calc(1.35em * 3);
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;
}
/* "LEGGI L'ARTICOLO" CON LA FACCIA DI UN BOTTONE. E' uno <span>, non un
   <button>: dentro alla scheda, che e' gia' tutta un collegamento, un secondo
   elemento cliccabile sarebbe HTML rotto e due bersagli uno sopra l'altro. A
   cliccare resta tutta la scheda — sotto il dito e' un bersaglio molto piu'
   grande di un bottone, e col pubblico di questo sito conta.
   Si riempie di blu quando il mouse passa sulla scheda: il bottone e' finto,
   ma deve rispondere come quello vero di fianco. */
.card-blog .fondo.btn { margin-top: auto; align-self: start; }
.card-blog:hover .fondo.btn { background: var(--blu); color: var(--bianco); }

/* ---------- Barra degli argomenti (/blog/) ----------
   Fa il lavoro che su /viaggi/ si dividono la barra dei filtri e l'indice delle
   tipologie, ma in una riga sola: qui i gruppi non ci sono — gli articoli stanno
   in una griglia unica — quindi le etichette filtrano invece di portare a
   un'ancora. L'aspetto e' quello dell'indice delle tipologie di proposito: due
   barre che fanno la stessa cosa devono somigliarsi. */
.barra-argomenti { background: var(--sabbia); border-top: 1px solid var(--bianco); padding: .9rem 0 1.1rem; }
.barra-argomenti-riga { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1.6rem; }
.argomenti-voci { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem 1.6rem; }
/* Un <button> nudo: eredita il carattere (i browser gli darebbero il loro) e
   non porta nessuno sfondo. I 48px di altezza sono il bersaglio minimo del
   sito, e valgono anche qui che la scritta e' alta la meta'. */
.voce-argomento {
  display: inline-flex; align-items: baseline; gap: .45rem; min-height: 48px;
  background: none; border: 0; border-bottom: 2px solid transparent; padding: 0;
  cursor: pointer; font-family: inherit; font-size: 1rem; font-weight: 600; color: var(--blu);
}
.voce-argomento:hover, .voce-argomento:focus-visible,
.voce-argomento[aria-pressed="true"] { border-bottom-color: var(--oro); }
.voce-argomento span { font-weight: 500; font-size: .88rem; color: var(--testo-soft); font-variant-numeric: tabular-nums; }
.argomenti-cerca { margin-left: auto; flex: 0 1 22rem; min-width: 15rem; }
.argomenti-cerca .campo { width: 100%; }
.barra-argomenti .conta-filtri { margin: 0; }
/* Sullo stretto la casella va a capo e prende tutta la riga: spinta a destra da
   margin-left:auto restava una fessura di sei centimetri. */
@media (max-width: 780px) {
  .argomenti-cerca { margin-left: 0; flex: 1 1 100%; }
  .argomenti-voci { gap: .2rem 1.2rem; }
}
.torna-blog { color: var(--blu); font-weight: 600; text-decoration: none; }
.torna-blog:hover { text-decoration: underline; }

/* ---------- Numeri di pagina (archivi del blog) ----------
   WordPress stampa un <h2 class="screen-reader-text"> dentro la navigazione:
   è per chi usa lo schermo letto ad alta voce e va nascosto agli occhi, non
   rimosso. Senza la regola qui sotto quel titolo si vedeva grande come un
   titolo di sezione, con i numeri nudi sotto. */
.screen-reader-text {
  position: absolute !important; width: 1px; height: 1px; overflow: hidden;
  clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%);
  white-space: nowrap; border: 0; padding: 0; margin: -1px;
}
.navigazione-pagine .nav-links { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; align-items: center; }
.navigazione-pagine .page-numbers {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 3rem; min-height: 3rem; padding: 0 1rem;
  border: 1px solid var(--hairline); border-radius: 999px;
  background: var(--bianco); color: var(--blu);
  font-weight: 600; text-decoration: none;
  transition: border-color .18s ease, background .18s ease, color .18s ease;
}
.navigazione-pagine a.page-numbers:hover { border-color: var(--blu); background: var(--blu-tinta); }
.navigazione-pagine .page-numbers.current { background: var(--blu); border-color: var(--blu); color: var(--bianco); }
.navigazione-pagine .page-numbers.dots { border-color: transparent; background: none; min-width: 1.5rem; padding: 0; color: var(--testo-soft); }
.navigazione-pagine .page-numbers.prev, .navigazione-pagine .page-numbers.next { font-weight: 700; }
@media (max-width: 560px) {
  /* Su un telefono i tondi si stringono (restando sopra i 44px del dito) e
     vanno a capo da soli: quanti numeri stampare lo decide gia' mid_size. */
  .navigazione-pagine .page-numbers { min-width: 2.75rem; min-height: 2.75rem; padding: 0 .7rem; }
}

/* ---------- Slider foto del tour (v4): stessa altezza della colonna info, niente link ---------- */
/* Niente overflow nascosto: le frecce stanno a cavallo del bordo della fotografia, meta'
   dentro e meta' fuori, e qui verrebbero tagliate. L'angolo arrotondato passa alle slide,
   che ritagliano gia' da sole per via dello scorrimento orizzontale. */
.slider-tour {
  position: relative; height: 100%; min-height: 28rem;
  border-radius: var(--raggio); border: 1px solid var(--hairline);
}
.slider-tour .slides {
  display: flex; height: 100%; border-radius: var(--raggio);
  overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;
  scrollbar-width: none;
}
.slider-tour .slides::-webkit-scrollbar { display: none; }
.slider-tour figure { flex: 0 0 100%; min-width: 0; height: 100%; position: relative; scroll-snap-align: start; }
.slider-tour img { width: 100%; height: 100%; object-fit: cover; }
.slider-tour .freccia-car {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  box-shadow: 0 4px 16px rgba(0,0,0,.2); border-color: transparent;
}
.slider-tour .freccia-prev { left: 0; transform: translate(-50%, -50%); }
.slider-tour .freccia-next { right: 0; transform: translate(50%, -50%); }
/* Da 880px in giu' la testata va a colonna singola e la fotografia arriva a filo del
   contenitore: la freccia destra sporgerebbe 26px contro i 24 di margine, cioe' 2px oltre
   il bordo dello schermo, e basta quello per far scorrere di lato tutta la pagina.
   Sotto quella soglia le frecce rientrano. */
@media (max-width: 880px) {
  .slider-tour .freccia-prev { left: .6rem; transform: translateY(-50%); }
  .slider-tour .freccia-next { right: .6rem; transform: translateY(-50%); }
}
@media (max-width: 880px) { .slider-tour { min-height: 19rem; height: 19rem; } }

/* ---------- Info del viaggio (v5): niente tabella — elenco con icone a filo ---------- */
.info-viaggio {
  background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio);
  padding: 1.7rem 1.8rem; display: grid; gap: 1rem;
}
.info-viaggio .voce { display: flex; gap: 1rem; align-items: flex-start; }
.info-viaggio .voce + .voce { border-top: 1px solid var(--hairline); padding-top: 1rem; }
.info-viaggio .ico { width: 1.5rem; height: 1.5rem; stroke-width: 1.6; color: var(--oro-scuro); flex-shrink: 0; margin-top: .15rem; }
.info-viaggio .eti { display: block; font-size: .78rem;   /* .78 e' il gradino piccolo delle etichette (pubblico over-60: 11,5px era il testo piu' minuto del sito) */ font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--testo-soft); }
.info-viaggio .val { font-weight: 600; color: var(--blu); font-size: .98rem; line-height: 1.45; }
.info-viaggio .val .nota-piccola { font-weight: 400; font-size: .85rem; }

/* ---------- Fascia emozionale: foto a tutta larghezza + claim (v5) ---------- */
.fascia-emozione {
  position: relative; min-height: clamp(26rem, 66svh, 38rem);
  display: flex; align-items: center; text-align: center;
  background-size: cover; background-position: center;
  color: var(--bianco);
}
@media (min-width: 1024px) { .fascia-emozione { background-attachment: fixed; } }
.fascia-emozione::before {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(13,28,54,.35), rgba(13,28,54,.62));
}
.fascia-emozione .contenitore { position: relative; z-index: 1; padding-top: 5rem; padding-bottom: 5rem; }
/* Il colore dell'occhiello sopra le fotografie sta tutto in una regola sola,
   su in alto accanto a .occhiello-foto (25/08/2026): qui non si ripete. */
.fascia-emozione .claim {
  font-family: 'Zalando Sans Expanded', sans-serif; font-weight: 600;
  font-size: clamp(1.7rem, 3.6vw, 2.7rem); line-height: 1.2;
  color: var(--bianco); max-width: 22em; margin: 0 auto;
}
.fascia-emozione .sotto { color: #E8EEF7; margin-top: 1rem; font-size: 1.02rem; }
.fascia-emozione .btn { margin-top: 1.8rem; }

/* ---------- Blocco col video di fianco alla frase ---------- */
/* Due colonne a tutta larghezza, senza contenitore: il video arriva fino al bordo
   dello schermo, come nel modello. La colonna del video tiene le proporzioni 16:9
   e quella del testo si allunga fino alla stessa altezza. L'alternativa era
   ritagliare il video in una striscia piu' bassa: ma di un video il soggetto e'
   quello che si vede, e tagliarlo sopra e sotto vuol dire buttare via meta'
   inquadratura. */
.blocco-video { display: grid; grid-template-columns: 1fr 1fr; align-items: stretch; }
.video-parola {
  background: var(--bianco); color: var(--testo);
  display: flex; align-items: center; justify-content: center;
  padding: 3rem clamp(1.5rem, 4vw, 3.5rem);
}
.video-testo { text-align: center; }
/* La frase sta su una riga sola, come chiesto. Il corpo e' in vw e non in rem
   perche' anche la colonna e' meta' schermo: crescono insieme, e la riga resta
   intera dal portatile stretto al monitor grande. Il tetto in rem impedisce che
   su uno schermo da ufficio diventi un'insegna.
   ATTENZIONE: se la frase si allunga di molto, la riga sola esce dalla colonna.
   In quel caso si abbassa il 2vw qui sotto, non si toglie il nowrap. */
.video-parola .claim {
  font-family: 'Zalando Sans Expanded', sans-serif; font-weight: 600;
  font-size: min(2vw, 2.6rem); line-height: 1.2;
  color: var(--blu); margin: 0; white-space: nowrap;
}
.video-parola .rigo-oro { width: 3rem; height: 2px; background: var(--oro); margin: 1.3rem auto 0; }
.video-parola .sotto {
  margin: 1.3rem auto 0; max-width: 30ch;
  font-size: 1.1rem; line-height: 1.55; color: var(--testo-soft);
}
/* IL RIQUADRO DEL VIDEO TIENE LA SUA ALTEZZA ANCHE SUI TELEFONI VECCHI.
   Con la sola aspect-ratio il riquadro collassava a ZERO pixel dove quella
   proprieta' non c'e' (Safari sotto iOS 15, cioe' ogni iPhone rimasto indietro):
   il video non diventava nero, spariva — e infatti Vlad non lo vedeva dal
   telefono mentre sul PC in vista mobile c'era (19/08/2026). Misurato: 219px
   di altezza col browser nuovo, 0 senza.
   Il 56,25% e' il 9 diviso 16 del vecchio metodo, che regge ovunque; dove
   aspect-ratio esiste, prende il suo posto e il padding torna a zero. */
.video-quadro { position: relative; padding-top: 56.25%; background: #000; }
@supports (aspect-ratio: 16 / 9) {
  .video-quadro { padding-top: 0; aspect-ratio: 16 / 9; }
}
/* RETE DI SICUREZZA. Il 19/08 il riquadro era ancora alto zero sul telefono di
   Vlad anche dopo il padding: si vedeva la frase e la riga dorata (cioe' il
   blocco c'era) ma del video nemmeno il nero del fondo. Quale delle due
   tecniche gli fallisca non lo so — non ho il suo telefono — ma non serve
   saperlo: con un'altezza minima il riquadro non PUO' sparire, qualunque cosa
   succeda sopra. 12rem sta sotto ai 219px che il 16/9 chiede a 390px, quindi
   dove le tecniche funzionano questa riga non si fa sentire. */
/* width: 100% NON e' pleonastico, e' la correzione di un guasto che ho
   causato io con la riga qui sopra. Con un'altezza minima e un rapporto 16:9,
   Safari calcola la LARGHEZZA dall'altezza (192 x 16/9 = 341px) invece di
   prendere quella della colonna: sull'iPhone di Vlad il video usciva largo
   343px su uno schermo da 393 e appoggiato a sinistra, con la striscia bianca
   a destra (misurato sulla sua foto, 19/08/2026). Chrome allarga alla colonna
   e il difetto da noi non si vedeva. Con la larghezza dichiarata al 100% e'
   il rapporto a ricavare l'altezza, non il contrario. */
.video-quadro { width: 100%; min-height: 12rem; overflow: hidden; }
/* top/right/bottom/left per esteso PRIMA di inset: la scorciatoia inset e'
   arrivata su Safari solo con iOS 14.5, e senza le quattro righe il riquadro
   dell'iframe non si aggancia ai bordi. */
.video-quadro iframe {
  position: absolute; top: 0; right: 0; bottom: 0; left: 0; inset: 0;
  /* width: 1px + min-width: 100% e non il solo width: 100%. Sembra un
     capriccio ed e' il rimedio noto al modo in cui Safari su iOS misura gli
     iframe: li fa grandi quanto il loro contenuto invece che quanto la
     casella, e il video finiva storto rispetto al riquadro (visto da Vlad sul
     suo iPhone, iOS 26.4.1, il 19/08/2026; su Android era gia' a posto —
     e' un modo di misurare di Safari, non una questione di versione). Con una larghezza
     dichiarata minuscola e un minimo al 100% l'iframe non puo' piu' decidere
     da solo: ovunque fa 100%. Stessa cosa in altezza. */
  width: 1px; min-width: 100%;
  height: 1px; min-height: 100%;
  border: 0; display: block;
}
/* Il tasto per fermare il video. 44px pieni di bersaglio anche se il segno dentro
   e' piccolo: il pubblico di questo sito ha per lo piu' passati i sessanta. */
.video-pausa {
  position: absolute; right: .9rem; bottom: .9rem; z-index: 2;
  /* 48px pieni (era 2,75rem = 44): e' il comando che ferma un video partito da
     solo — proprio quello che deve prendersi al primo tentativo. */
  width: 3rem; height: 3rem; border-radius: 50%;
  border: 0; background: rgba(13,28,54,.55); color: var(--bianco);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; transition: background .2s;
}
.video-pausa:hover, .video-pausa:focus-visible { background: rgba(13,28,54,.85); }
.video-pausa svg { width: 1.15rem; height: 1.15rem; fill: currentColor; }
.video-pausa .segno-avvio { display: none; }
.video-pausa[data-fermo] .segno-pausa { display: none; }
.video-pausa[data-fermo] .segno-avvio { display: inline; }
@media (max-width: 820px) {
  /* In colonna: prima la frase, poi il video. Affiancati sotto gli 820px la frase
     starebbe su tre parole per riga e il video sarebbe un francobollo. */
  .blocco-video { grid-template-columns: 1fr; }
  .video-parola { padding: 2.5rem 1.5rem; }
  /* In colonna la larghezza e' tutta lo schermo, non piu' meta': il corpo legato
     al 2vw diventerebbe minuscolo. Qui torna una misura normale, e la frase puo'
     andare a capo — su un telefono stretto la riga sola non ci sta comunque. */
  .video-parola .claim { font-size: clamp(1.5rem, 6vw, 2rem); white-space: normal; }
}

/* ---------- Ancore interne pagina tour ---------- */
.ancore { position: sticky; top: 5.75rem; z-index: 40; background: var(--bianco); border-bottom: 1px solid var(--hairline); }
/* TELEFONO GIRATO DI LATO: lo schermo e' alto 390px e le due barre appiccicate
   (testata 93 + sezioni 52) ne mangiavano 145, cioe' il 37% — il contenuto
   leggeva da una feritoia. In orizzontale la barra delle sezioni smette di
   attaccarsi: resta in cima al suo posto, dove la si trova scorrendo, e lo
   schermo torna al contenuto. La testata resta appiccicata: da li' si esce. */
@media (orientation: landscape) and (max-height: 500px) {
  .ancore { position: static; }
  section[id], div[id^="tutte"], #programma,
  .programma-acc details { scroll-margin-top: 6.5rem; }
}
.ancore .contenitore { display: flex; gap: .25rem; overflow-x: auto; scrollbar-width: none; }
.ancore .contenitore::-webkit-scrollbar { display: none; }
.ancore a {
  padding: .85rem 1rem; font-size: .82rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--testo-soft); text-decoration: none; white-space: nowrap;
  border-bottom: 2px solid transparent;
}
.ancore a:hover { color: var(--blu); border-bottom-color: var(--oro); }
/* I cerchietti-freccia della barra: stessi delle linguette (44px, bianchi,
   bordo sabbia) ma DENTRO la barra, sul filo dei bordi — qui la barra e' a
   tutta larghezza e mezzo cerchio fuori finirebbe oltre lo schermo. Il disco
   e' opaco: copre lui il testo che ci passa sotto, senza altre sfumature.
   Compaiono solo dal lato dove c'e' altro da vedere (sito.js), quindi da
   scrivania, dove la fila ci sta tutta, non esistono. */
.ancore-freccia {
  display: flex; align-items: center; justify-content: center;
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
  /* 48px pieni, come tutti i comandi del sito: a 44 era sotto la soglia del
     polpastrello (misurato il 20/08/2026 sulla pagina di un tour). */
  width: 48px; height: 48px; border-radius: 50%;
  border: 1px solid var(--sabbia-bordo); background: var(--bianco); color: var(--blu);
  cursor: pointer; box-shadow: 0 6px 16px rgba(16, 41, 77, .10);
}
.ancore-freccia[hidden] { display: none; }
.ancore-freccia:first-child { left: .35rem; }
.ancore-freccia:last-child { right: .35rem; }
.ancore-freccia .ico { width: 1.2em; height: 1.2em; }
/* Niente parole mozzate sotto il cerchietto — due mosse insieme:
   1. la corsa atterra SEMPRE sull'inizio di una voce, oltre la zona del
      cerchio (scroll-snap coi 3,75rem di scroll-padding: lo stesso snap dei
      caroselli del sito). Una sfumatura non salva una parola tagliata a
      meta' — "ROGRAMMA" restava leggibile e sbagliato (Vlad, 18/08/2026);
   2. la coda che resta fuori muore in dissolvenza prima del disco. Le
      classi .taglio-* le accende sito.js solo dal lato dove c'e' altro —
      stessa condizione delle frecce, quindi niente media query. */
.ancore .contenitore { scroll-snap-type: x mandatory; scroll-padding: 0 3.75rem; }
.ancore .contenitore a { scroll-snap-align: start; }
.ancore .contenitore.taglio-dx {
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 4.5rem), transparent calc(100% - .75rem));
          mask-image: linear-gradient(to right, #000 calc(100% - 4.5rem), transparent calc(100% - .75rem));
}
.ancore .contenitore.taglio-sx {
  -webkit-mask-image: linear-gradient(to right, transparent .75rem, #000 3.5rem);
          mask-image: linear-gradient(to right, transparent .75rem, #000 3.5rem);
}
.ancore .contenitore.taglio-sx.taglio-dx {
  -webkit-mask-image: linear-gradient(to right, transparent .75rem, #000 3.5rem, #000 calc(100% - 4.5rem), transparent calc(100% - .75rem));
          mask-image: linear-gradient(to right, transparent .75rem, #000 3.5rem, #000 calc(100% - 4.5rem), transparent calc(100% - .75rem));
}
/* Sotto i 420px la testata e' piu' bassa (min-height 4.75rem): la barra delle
   ancore si aggancia li', senno' resta una fessura in cui il contenuto scorre. */
@media (max-width: 420px) { .ancore { top: 4.75rem; } }

/* ---------- Fatti chiave del tour ---------- */
.fatti { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: 1.5rem; }
.fatto { border-left: 2px solid var(--oro); padding-left: 1.1rem; }
.fatto .valore { display: block; font-family: 'Zalando Sans Expanded', sans-serif; font-weight: 600; color: var(--blu); font-size: 1.35rem; line-height: 1.2; }
.fatto .nome { display: block; font-size: .8rem; letter-spacing: .12em; text-transform: uppercase; color: var(--testo-soft); font-weight: 600; margin-top: .15rem; }

/* ---------- Tabella partenze: bianca, hairline, testata tipografica ---------- */
.tab-partenze { width: 100%; border-collapse: collapse; background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio); overflow: hidden; }
.tab-partenze th {
  background: var(--bianco); color: var(--testo-soft); text-align: left;
  padding: 1rem 1.1rem; font-size: .78rem; font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase;
  border-bottom: 2px solid var(--blu);
}
.tab-partenze td { padding: 1.05rem 1.1rem; border-bottom: 1px solid var(--hairline); vertical-align: middle; }
.tab-partenze tr:last-child td { border-bottom: 0; }
.tab-partenze tbody tr:hover { background: var(--blu-tinta); }
.tab-partenze .prezzo { font-weight: 600; color: var(--blu); font-size: 1.12rem; white-space: nowrap; font-family: 'Zalando Sans Expanded', sans-serif; }
.tab-partenze .barrato { color: var(--testo-soft); text-decoration: line-through; font-weight: 400; font-size: .92rem; margin-right: .4rem; font-family: 'Inter', sans-serif; }
/* L'etichetta dello sconto va sotto la data, non di fianco: cosi' tutte le righe hanno
   la data alla stessa altezza e l'etichetta non spinge il resto della cella. */
.tab-partenze .badge-offerta { display: block; width: fit-content; margin-top: .4rem; }
.vedi-tutte { text-align: center; padding: 1.1rem; background: var(--bianco); border: 1px solid var(--hairline); border-top: 0; border-radius: 0 0 var(--raggio) var(--raggio); }
.tab-partenze.compatta { border-radius: var(--raggio) var(--raggio) 0 0; }
/* v5: righe più basse per la tabella "prossime partenze" */
.tab-partenze.snella th { padding: .7rem 1rem; }
.tab-partenze.snella td { padding: .55rem 1rem; }
.tab-partenze.snella .btn-mini { min-height: 2.4rem; padding: .35rem .9rem; font-size: .82rem; }

/* Stato: pallino + testo, niente pillole colorate */
.stato { display: inline-flex; align-items: center; gap: .5rem; font-size: .95rem; font-weight: 600; white-space: nowrap; }
.stato::before { content: ""; width: .55rem; height: .55rem; border-radius: 50%; flex-shrink: 0; }
.stato-ok { color: var(--verde); } .stato-ok::before { background: var(--verde); }
.stato-ultimi { color: #8A6512; } .stato-ultimi::before { background: var(--oro); }
.stato-richiesta { color: var(--blu); } .stato-richiesta::before { background: var(--blu); }
.stato-completa { color: var(--rosso); } .stato-completa::before { background: var(--rosso); }

.badge-offerta {
  display: inline-block; background: var(--oro); color: var(--blu-scuro);
  font-size: .78rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  padding: .3rem .7rem; border-radius: 2px;
}

/* ---------- Preventivatore v3: a tendina, pannello sobrio ---------- */
.preventivatore {
  background: var(--bianco); border: 1px solid var(--hairline);
  border-radius: var(--raggio); overflow: hidden;
}
.preventivatore-testa { padding: 2.2rem 2.2rem 1.6rem; border-bottom: 1px solid var(--hairline); text-align: center; }
.preventivatore-testa h3 { font-size: 1.5rem; }
.preventivatore-testa p { color: var(--testo-soft); font-size: 1.02rem; margin-top: .5rem; }
.preventivatore-corpo { padding: 2.2rem; display: grid; gap: 2.4rem; }
/* I passi sono caselle di una griglia, e una casella di griglia non scende mai
   sotto la larghezza che il suo contenuto pretende: bastava il riepilogo — le
   sue righe lunghe ("Quota base (camera doppia): 2 × € 1.849") ne chiedevano
   266 — perche' TUTTI e quattro i passi si allargassero a 266 e la finestra
   scorresse di lato di 7 pixel a 320px. Non e' un difetto dei contatori: si
   misurava anche prima. Con min-width:0 la casella puo' stringersi e il testo
   va a capo, che e' quello che deve fare. */
.preventivatore-corpo > .passo { min-width: 0; }
.riepilogo table { table-layout: auto; }
.riepilogo td { overflow-wrap: anywhere; }
@media (max-width: 640px) { .preventivatore-corpo, .preventivatore-testa { padding-left: 1.2rem; padding-right: 1.2rem; } }

/* Il preventivatore non e' una sezione della pagina: sta in una finestra che si apre dai
   bottoni "Preventivo" delle tabelle. La <dialog> fa da sola sfondo scuro, tasto Esc e
   fuoco che non esce: nessuna delle tre cose andava riscritta a mano. */
.finestra-prev {
  width: min(58rem, 94vw); max-height: 92svh; overflow: auto;
  /* margin: auto va rimesso a mano. La <dialog> nasce centrata proprio grazie ai suoi
     margini automatici, ma il reset in cima al foglio ("* { margin: 0 }") li azzera
     insieme a tutti gli altri, e la finestra finisce incollata all'angolo in alto a
     sinistra invece che al centro dello schermo. */
  margin: auto;
  padding: 0; border: 0; background: transparent; color: var(--testo);
}
.finestra-prev::backdrop { background: rgba(13, 28, 54, .6); }
/* overflow visibile sul pannello: e' la finestra a scorrere, e solo cosi' la testata
   puo' restare appiccicata in alto col suo tasto di chiusura. */
.finestra-prev .preventivatore { overflow: visible; }
.finestra-prev .preventivatore-testa {
  position: sticky; top: 0; z-index: 3; background: var(--bianco);
  border-radius: var(--raggio) var(--raggio) 0 0;
}
.chiudi-finestra {
  position: absolute; top: .5rem; right: .5rem;
  width: 48px; height: 48px; border-radius: 50%;
  border: 1px solid var(--hairline); background: var(--bianco); color: var(--blu);
  font-size: 1.9rem; line-height: 1; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .2s, color .2s, border-color .2s;
}
.chiudi-finestra:hover { background: var(--blu); border-color: var(--blu); color: var(--bianco); }
/* Passi numerati e scelte a card (stile v2, ripristinato su richiesta) */
.passo > .passo-titolo {
  display: flex; align-items: center; gap: .8rem;
  font-weight: 600; color: var(--blu); font-size: 1.12rem; margin-bottom: 1.1rem;
  font-family: 'Zalando Sans Expanded', sans-serif;
}
.passo-numero {
  width: 2rem; height: 2rem; border-radius: 50%; flex-shrink: 0;
  border: 2px solid var(--oro); color: var(--blu); background: transparent;
  display: inline-flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: .95rem; font-family: 'Inter', sans-serif;
}
.scelta-data { display: grid; gap: .65rem; }
.scelta-data .riga-data {
  border: 1px solid #C6CDD8; border-radius: var(--raggio-s); background: var(--bianco);
  transition: border-color .2s, background .2s;
}
.scelta-data .riga-data:hover { border-color: var(--blu); }
.scelta-data .riga-data.attiva {
  border-color: var(--blu); background: var(--blu-tinta); box-shadow: inset 0 0 0 1px var(--blu);
}
.scelta-data .riga-data > label {
  display: flex; align-items: center; gap: .9rem; flex-wrap: wrap;
  padding: .9rem 1.1rem; cursor: pointer;
}
.scelta-data input, .scelta-aeroporto input { width: 1.3rem; height: 1.3rem; accent-color: var(--blu); flex-shrink: 0; }
.scelta-data .data-g { font-weight: 600; color: var(--blu); min-width: 10.5rem; }
.scelta-data .data-p { font-weight: 600; margin-left: auto; white-space: nowrap; color: var(--blu); }
.scelta-data .data-p .barrato { color: var(--testo-soft); text-decoration: line-through; font-weight: 400; font-size: .9rem; margin-right: .35rem; }
/* sotto-scelta aeroporto: FUORI dalla label della data (dentro, il click sull'aeroporto
   attiverebbe il radio della data), visibile solo sulla riga attiva */
.scelta-aeroporto {
  display: flex; gap: 1.4rem; flex-wrap: wrap;
  border-top: 1px dashed #C6CDD8; margin: 0 1.1rem; padding: .7rem 0 .9rem;
}
.riga-data:not(.attiva) .scelta-aeroporto { display: none; }
.scelta-aeroporto span.eti { font-size: .82rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--testo-soft); align-self: center; }
.scelta-aeroporto label { display: inline-flex; align-items: center; gap: .5rem; font-weight: 600; color: var(--blu); cursor: pointer; }
/* ---- I CONTATORI "− n +" di persone e camere (27/08/2026) ----
   Vlad, col preventivatore di Caldana davanti: «voglio che la struttura
   grafica sia come quella del Caldana, per la scelta di numero di persone e
   camere con -+». Prima: sei riquadri da spuntare per le persone e un elenco
   di sistemazioni per le camere. Occupavano 330px di finestra e sul telefono
   erano due griglie da scorrere per arrivare al prezzo; adesso sono tre righe.
   I bottoni sono 48×48 — la misura del dito, la stessa che il sito si e' dato
   dappertutto — e non si stringono sui telefoni stretti: a restringersi e'
   l'etichetta, che va a capo sopra. */
/* NIENTE CORNICI E NIENTE FONDI (Vlad, 27/08/2026, terzo giro: «non voglio che
   rimanga il blu strano, e togli quel leggero riquadro — minimalismo e coerenza
   col sito»). Erano due cose aggiunte per ammorbidire: un riquadro attorno alle
   righe e una pastiglia azzurrina sotto i tondi. Tolte tutte e due: restano
   l'etichetta, due tondi e il numero, sul bianco.
   Il tondo si accende come ogni altra cosa del sito — il BORDO che passa a blu,
   non un pieno di colore: e' l'unico modo che il sito usa per dire "sei qui
   sopra" (righe delle date, riquadri dei contatti, card). Un cerchio blu pieno
   era un secondo linguaggio in una finestra sola. */
.scelta-pax, .scelta-camere { display: grid; gap: .55rem; }
.riga-contatore { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.riga-contatore .cnt-eti { font-weight: 600; color: var(--blu); flex: 0 0 auto; min-width: 11rem; }
.contatore { display: inline-flex; align-items: center; gap: .2rem; flex: 0 0 auto; }
.contatore .cnt-btn {
  width: 48px; height: 48px; flex: 0 0 auto;
  /* Lo stesso grigio del bordo delle righe delle date, due passi piu' su in
     questa stessa finestra: il filo piu' chiaro del sito (--hairline) qui
     sparisce, e un comando che non si vede non e' minimalismo. */
  border: 1px solid #C6CDD8; border-radius: 50%;
  background: var(--bianco); color: var(--blu);
  font-size: 1.35rem; line-height: 1; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  transition: border-color .2s, color .2s;
}
.contatore .cnt-btn:hover:not(:disabled) { border-color: var(--blu); }
/* Un bottone spento resta un tondo — se sparisse, il comando diventerebbe
   storto e sembrerebbe rotto — ma sbiadisce: si vede che non si puo' premere. */
.contatore .cnt-btn:disabled { border-color: #EDF0F4; color: #A6AEBA; cursor: default; }
.contatore .cnt-btn:focus-visible { outline: 2px solid var(--blu); outline-offset: 2px; }
.contatore .cnt-valore {
  min-width: 2.6rem; padding: 0 .2rem;
  display: inline-flex; align-items: center; justify-content: center;
  font-weight: 700; color: var(--blu); font-size: 1.25rem; font-variant-numeric: tabular-nums;
}
/* Il supplemento e' un dato, non un'etichetta: sta in fondo alla riga, allineato
   a destra come i prezzi del riepilogo. */
.riga-contatore .cnt-nota { font-weight: 600; color: var(--testo-soft); white-space: nowrap; }
.cnt-oltre { margin-top: .1rem; }
/* Sotto i 480px l'etichetta prende una riga sua: il contatore non si tocca,
   perche' rimpicciolire i bottoni e' esattamente quello che non si fa. */
@media (max-width: 480px) {
  /* SUL TELEFONO L'ETICHETTA NON VA A CAPO SOPRA IL COMANDO (Vlad, 27/08/2026,
     con Caldana affiancato: «bello ma confusionario, li' e' molto piu' chiaro»).
     Su Caldana ogni comando e' UNA riga sola: il nome a sinistra, i tondi a
     destra, allineati fra loro. Mandando l'etichetta a capo, come faceva questa
     regola, ogni comando ne prendeva due e i tre comandi diventavano sei righe
     sfalsate: e' quello che si leggeva come confusione.
     I tondi restano 48: a stringersi sono le distanze e la casella del numero,
     e la nota del supplemento — che a Caldana sta sotto — va a capo da sola. */
  /* Griglia e non flex: in flex, quando il nome e' lungo, il browser preferisce
     mandare A CAPO il comando invece di stringere il testo — ed e' cosi' che a
     320px i tondi finivano sotto l'etichetta, sfalsati riga per riga. Con due
     colonne (nome che si stringe · comando che non si stringe) il comando resta
     dov'e', sempre alla stessa altezza del suo nome, e a andare a capo e' il
     testo, che e' quello che deve fare. */
  .riga-contatore { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .15rem .6rem; }
  /* min-width: 0 e' quello che permette al nome di andare a capo: senza, resta
     la larghezza minima di 11rem della regola grande e il testo esce dalla sua
     colonna, passando SOTTO i tondi. */
  .riga-contatore .cnt-eti { grid-column: 1; min-width: 0; }
  .contatore { grid-column: 2; gap: 0; }
  .contatore .cnt-valore { min-width: 2rem; font-size: 1.2rem; }
  .riga-contatore .cnt-nota { grid-column: 1 / -1; }
}
.riepilogo {
  background: #F6F7F9; border: 1px solid var(--hairline);
  border-radius: var(--raggio-s); padding: 1.6rem 1.7rem;
}
.riepilogo table { width: 100%; border-collapse: collapse; font-size: 1.03rem; }
.riepilogo td { padding: .45rem 0; }
.riepilogo td:last-child { text-align: right; font-weight: 600; white-space: nowrap; }
.riepilogo tr.sconto td { color: var(--verde); font-weight: 600; }
.riepilogo tr.totale td {
  border-top: 2px solid var(--blu); padding-top: .9rem;
  font-size: 1.3rem; font-weight: 600; color: var(--blu);
  font-family: 'Zalando Sans Expanded', sans-serif;
}
.riepilogo .per-persona { text-align: right; color: var(--testo-soft); font-size: .95rem; margin-top: .3rem; }
/* Nelle "note" passano tasse aeroportuali, recapiti e avvisi veri: non possono
   stare a 14.7px su un pubblico over-60. 1rem per le note, corpo pieno per l'avviso. */
.nota-piccola { font-size: 1rem; color: var(--testo-soft); }
.avviso-adulti {
  background: var(--blu-tinta); border-left: 3px solid var(--oro);
  padding: 1rem 1.3rem; font-size: 1.0625rem; color: var(--testo);
  border-radius: 0 var(--raggio-s) var(--raggio-s) 0; margin-top: 1.6rem;
}
.mini-form { border-top: 1px solid var(--hairline); margin-top: 2rem; padding-top: 2rem; }
/* Quando "Richiedi questo preventivo" scorre fin qui, il titolo del modulo
   deve fermarsi SOTTO la testata sticky del dialogo, non sparirci dietro.
   Misurata il 19/08/2026: 125px da scrivania, 208px a 390 (il titolo va a
   capo) — il margine sta un pelo abbondante, che male non fa. */
.mini-form { scroll-margin-top: 9rem; }
@media (max-width: 640px) { .mini-form { scroll-margin-top: 15rem; } }
.mini-form .due { display: grid; grid-template-columns: 1fr 1fr; gap: 1.1rem; }
@media (max-width: 640px) { .mini-form .due { grid-template-columns: 1fr; } }

/* ---------- Programma di viaggio (v4, alla WeRoad): accordion coi giorni,
     miniatura da chiuso → foto GRANDE quando si espande ---------- */
/* Niente cornice attorno ai giorni: resta la sola riga che separa un giorno dall'altro,
   il grigio sottile che divide tutto il resto del sito. Riga FRA i giorni, non sotto
   l'ultimo, e nessuna imbottitura laterale: senza bordi scollava i giorni dal resto della
   pagina. Niente fondo colorato al passaggio del mouse: su una riga aperta e' una macchia. */
.programma-acc details { overflow: hidden; }
.programma-acc details + details { border-top: 1px solid var(--hairline); }
.programma-acc summary {
  list-style: none; cursor: pointer;
  display: flex; align-items: center; gap: 1.2rem;
  padding: .9rem 0;
}
.programma-acc summary::-webkit-details-marker { display: none; }
.programma-acc .mini {
  width: 4.6rem; height: 4.6rem; border-radius: var(--raggio); object-fit: cover; flex-shrink: 0;
}
.programma-acc .mini-vuota {
  width: 4.6rem; height: 4.6rem; border-radius: var(--raggio); flex-shrink: 0;
  background: var(--blu-tinta); color: var(--blu);
  display: inline-flex; align-items: center; justify-content: center;
}
.programma-acc .giorno-eti {
  display: block; font-size: .78rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase;
  color: var(--oro-scuro);
}
.programma-acc .giorno-titolo { font-weight: 600; color: var(--blu); font-size: 1.1rem; font-family: 'Zalando Sans Expanded', sans-serif; }
.programma-acc .freccia { margin-left: auto; transition: transform .25s; color: var(--blu); font-size: 2rem; line-height: 1; }
.programma-acc details[open] summary .freccia { transform: rotate(180deg); }
.programma-acc details[open] .mini, .programma-acc details[open] .mini-vuota { display: none; }
.programma-acc .contenuto { padding: 0 0 1.6rem; }
.programma-acc .foto-grande {
  width: 100%; aspect-ratio: 16 / 7; object-fit: cover;
  border-radius: var(--raggio); margin-bottom: 1.2rem;
}
.programma-acc .contenuto p { font-size: 1rem; }
@media (max-width: 640px) { .programma-acc .foto-grande { aspect-ratio: 16 / 10; } }

/* ---------- Info utili destinazione (alla Boscolo) ---------- */
.info-utili { background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio); padding: 1.9rem 2rem; }
.info-utili h3 { margin-bottom: 1.2rem; font-size: 1.2rem; }
.info-utili dl { display: grid; gap: .85rem; }
.info-utili .voce { display: flex; gap: .9rem; align-items: baseline; border-bottom: 1px solid var(--hairline); padding-bottom: .85rem; }
.info-utili .voce:last-child { border-bottom: 0; padding-bottom: 0; }
.info-utili dt { font-size: .76rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--testo-soft); min-width: 7.5rem; }
.info-utili dd { font-weight: 600; color: var(--blu); }

/* Griglia card più grande (pagina destinazione, v4) */
/* Blocco di tour ridotto alle prime sei card (pagina destinazione). La classe la mette il
   JavaScript, mai il PHP: senza JavaScript si vedono tutte le card e il bottone non
   compare nemmeno.
   ⚠ n+7 = la settima in poi, cioe' UTAT_CARD_GRUPPO + 1 in utat-core.php. Il CSS non sa
   leggere le costanti PHP: se cambia una, va cambiata l'altra. */
.gruppo-ridotto .griglia-card > .slot-tour:nth-child(n+7) { display: none; }
.riga-mostra-tutti { margin-top: 2.2rem; }

/* LA RIGA FRA UNA TIPOLOGIA E L'ALTRA (Firmati / Escorted / Fly & Drive). I tre blocchi
   sono tutti bianchi, quindi senza un segno si leggono come un elenco unico lunghissimo.
   Colore sabbia (--sabbia-bordo): il sabbia pieno #F6F1E7 sul bianco non si vedrebbe.
   LARGA QUANTO LE CARD, non quanto lo schermo: sta sulla testa di sezione, che e' dentro
   il contenitore e quindi misura esattamente la colonna delle card (il contenitore
   avrebbe in piu' i suoi 1.5rem di imbottitura per lato).
   L'imbottitura passa dalla sezione alla testa cosi' la riga cade a meta' dello stacco
   fra i due blocchi, non attaccata al titolo di sotto. */
.gruppo-tour + .gruppo-tour { padding-top: 0; }
.gruppo-tour + .gruppo-tour > .contenitore > .testa-sezione {
  border-top: 1px solid var(--sabbia-bordo);
  padding-top: 4rem;
}
/* Col filtro acceso un blocco puo' sparire: se quello sopra non c'e', la riga resterebbe
   sospesa sopra il nulla. Allora torna l'imbottitura normale e la riga se ne va. */
.gruppo-tour[hidden] + .gruppo-tour { padding-top: 4rem; }
.gruppo-tour[hidden] + .gruppo-tour > .contenitore > .testa-sezione {
  border-top: 0; padding-top: 0;
}

.griglia-card-grande { grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr)); gap: 2.25rem; }
@media (max-width: 560px) { .griglia-card-grande { grid-template-columns: 1fr; } }

/* ---------- Mappa del tour ---------- */
.mappa-tour {
  background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio);
  padding: 2.5rem 2.5rem 2rem; text-align: center;
}
.mappa-tour img.mappa { max-width: 46rem; width: 100%; margin: 1.2rem auto 0; display: block; }
.mappa-tour .ico-g { color: var(--blu); margin: 0 auto 1rem; display: block; }

/* ---------- Mappa interattiva (MapLibre): inquadratura fissa, pin per tappa ---------- */
.mappa-interattiva {
  width: 100%; height: clamp(22rem, 58svh, 32rem);
  margin-top: 1.2rem; border-radius: var(--raggio); overflow: hidden;
  border: 1px solid var(--hairline); background: #EDEBE6;   /* colore d'attesa: il fondo delle tile positron */
}
/* Il cursore dice che si può trascinare: mano aperta, e chiusa mentre si tira. */
.mappa-interattiva canvas { cursor: grab; }
.mappa-interattiva canvas:active { cursor: grabbing; }

/* Il blocco della mappa: banda bianca sopra col titolo, e sotto la cartina fino al bordo —
   resta il margine superiore (è la banda), non c'è quello inferiore.
   Il guscio ripete .contenitore, e qui viene annullato: la mappa esce dai margini senza
   ricorrere a 100vw, che su Windows conta anche la barra di scorrimento e farebbe
   comparire uno scorrimento orizzontale su tutta la pagina. */
.mappa-piena { padding: 3rem 0 0; }
.mappa-piena .mappa-guscio { max-width: none; padding: 0; }
.mappa-piena .mappa-interattiva { border-radius: 0; border-left: 0; border-right: 0; }
/* Segnaposto a goccia: la punta sta sul luogo, quindi cresce verso l'alto e non dal centro,
   altrimenti l'ingrandimento lo staccherebbe dal punto che indica. L'ombra è un drop-shadow
   e non un box-shadow: la forma non è un rettangolo. */
.pin-tappa {
  width: 1.85rem; height: 2rem;
  background: none; border: 0; padding: 0; line-height: 0;
  cursor: pointer;
  filter: drop-shadow(0 2px 5px rgba(16, 41, 77, .4));
}
/* L'ingrandimento sta sul disegno, non sul pulsante: il transform del pulsante lo scrive
   MapLibre a ogni ridisegno per tenere il pin sul suo punto, e ce lo cancellerebbe. */
.pin-tappa svg {
  width: 100%; height: 100%; display: block; overflow: visible;
  transform-origin: bottom center;
  transition: transform .15s ease;
}
.pin-tappa svg path { fill: var(--blu); stroke: #fff; stroke-width: 1.4; }
.pin-tappa svg circle { fill: #fff; }
.pin-tappa:hover svg, .pin-tappa.attivo svg { transform: scale(1.15); }
.pin-tappa.attivo svg path { fill: var(--oro); }
.pin-tappa.attivo svg circle { fill: var(--blu-scuro); }
/* Finestrella dei pin: tipografia del sito, non quella di default della libreria */
.maplibregl-popup-content {
  font-family: 'Inter', sans-serif; padding: .9rem 1.1rem;
  border-radius: var(--raggio); box-shadow: 0 10px 28px rgba(13, 28, 54, .18);
}
.maplibregl-popup-content .pop-eti {
  display: block; font-size: .72rem; font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase; color: var(--oro-scuro);
}
.maplibregl-popup-content .pop-luogo { display: block; font-size: 1.05rem; color: var(--blu); margin: .15rem 0 .3rem; }
.maplibregl-popup-content .pop-link { font-size: .92rem; font-weight: 600; color: var(--blu); text-decoration: none; display: inline-block; margin-right: .55rem; }
.maplibregl-popup-content .pop-link:hover { text-decoration: underline; }
.maplibregl-popup-close-button { font-size: 1.3rem; padding: 0 .45rem; color: var(--testo-soft); }
.mappa-interattiva .maplibregl-ctrl-attrib { font-size: .68rem; background: rgba(255, 255, 255, .75); }
.tappe { display: flex; flex-wrap: wrap; gap: .6rem; justify-content: center; margin-top: 1.6rem; }
.tappa {
  background: var(--bianco); border: 1px solid var(--hairline); border-radius: 2px;
  padding: .45rem 1rem; font-size: .95rem; font-weight: 600; color: var(--blu);
}

/* ---------- Itinerario/FAQ ad accordion (righe hairline) ---------- */
.itinerario details {
  background: var(--bianco); border: 1px solid var(--hairline); border-bottom: 0;
  overflow: hidden;
}
.itinerario details:first-of-type { border-radius: var(--raggio) var(--raggio) 0 0; }
.itinerario details:last-of-type { border-radius: 0 0 var(--raggio) var(--raggio); border-bottom: 1px solid var(--hairline); }
.itinerario summary {
  list-style: none; cursor: pointer;
  display: flex; align-items: center; gap: 1.1rem;
  padding: 1.15rem 1.4rem;
  font-weight: 600; color: var(--blu); font-size: 1.06rem;
  transition: background .2s;
}
.itinerario summary:hover { background: var(--blu-tinta); }
.itinerario summary::-webkit-details-marker { display: none; }
.itinerario summary .giorno-num {
  color: var(--oro-scuro); font-size: .78rem; font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase;
  min-width: 5.2rem; flex-shrink: 0;
}
.itinerario summary .freccia { margin-left: auto; transition: transform .25s; color: var(--testo-soft); font-size: 1.1rem; }
.itinerario details[open] summary .freccia { transform: rotate(180deg); }
.itinerario details > div { padding: .2rem 1.4rem 1.4rem; color: var(--testo); }
/* La risposta si scrive con l'editor, quindi può avere più paragrafi ed elenchi: senza
   .prose gli elenchi perderebbero il rientro (il reset in cima azzera anche quello del
   browser) e i pallini finirebbero fuori dal riquadro. L'ultimo blocco non porta con sé
   il suo margine, che sommato all'imbottitura lascerebbe un vuoto in fondo. */
.itinerario .prose > :last-child { margin-bottom: 0; }
/* LE DOMANDE FREQUENTI, tour, destinazione e Info tour insieme (#faq e' la sezione del
   tour, #domande-frequenti quella della destinazione, .fisarmonica-nuda i blocchi di
   /info-tour/). Niente riquadro attorno: resta la sola riga fra una domanda e l'altra,
   la domanda si accende sul sabbia al passaggio del cursore e la freccia e' quella
   grande e blu del programma di viaggio.
   Un blocco solo per tutt'e tre, e non tre copie: sono la stessa cosa in tre pagine, e
   tenute separate divergevano alla prima modifica fatta da una parte sola.
   Le prime due restano legate all'id della sezione e non a .itinerario, che e' anche il
   programma giorno per giorno del tour: quello il riquadro ce l'ha ancora. Info tour ha
   una classe invece di un id perche' le fasce sono cinque, e un id si usa una volta sola.
   L'ORDINE CONTA: "border: 0" azzera anche gli angoli tondi di :first-of-type e
   :last-of-type, che pesano piu' di un selettore di elemento e altrimenti resterebbero
   attaccati agli spigoli — e' lo stesso inciampo gia' pagato sul programma del tour. */
#faq .itinerario details,
#domande-frequenti .itinerario details,
.fisarmonica-nuda details {
  border: 0; border-radius: 0; background: transparent;
}
#faq .itinerario details + details,
#domande-frequenti .itinerario details + details,
.fisarmonica-nuda details + details { border-top: 1px solid var(--hairline); }
#faq .itinerario summary:hover,
#domande-frequenti .itinerario summary:hover,
.fisarmonica-nuda summary:hover { background: var(--sabbia); }
/* ⚠ "summary" nel mezzo non e' decorazione: la regola di base che rende la
   freccia piccola e grigia e' ".itinerario summary .freccia", e un selettore
   con un elemento dentro pesa piu' di uno di sole classi — a parita' di posto
   nel file. Le prime due righe qui sotto hanno un id e vincono comunque;
   ".fisarmonica-nuda .freccia" da sola no, e su /info-tour/ le frecce restavano
   quelle piccole e grigie (visto dal marketing, 20/08/2026). E' lo stesso
   inciampo dei bordi qui sopra, in un altro punto. */
#faq .itinerario .freccia,
#domande-frequenti .itinerario .freccia,
.fisarmonica-nuda summary .freccia { color: var(--blu); font-size: 2rem; line-height: 1; }

/* Su fondo sabbia l'accensione sabbia del cursore non si vedrebbe: la'
   la riga si accende in bianco. Oggi su /info-tour/ il sabbia e' solo
   l'apertura, che domande non ne ha â ma i fondi di questa pagina sono
   cambiati tre volte in un giorno, e questa riga costa una riga. */
.sezione-sabbia .fisarmonica-nuda summary:hover { background: var(--bianco); }
/* 19px per la domanda, SOLO qui (marketing, 20/08/2026: prima 18, poi 19;
   riconfermato da Vlad il 21/08/2026 durante la revisione tipografica:
   discrepanza VOLUTA, non allineare agli altri titoli).
   Altrove la riga da
   cliccare e' 1.06rem, cioe' il corpo del sito: qui le domande sono l'indice
   della pagina — sono piu' di venti e si scorrono tutte prima di aprirne una —
   e un gradino sopra al testo si distinguono senza doverle mettere in evidenza
   in un altro modo. Sulle domande frequenti del tour e della destinazione
   restano com'erano: la' il gruppo e' uno solo e chiude la pagina.
   1.1875rem e non 19px: le misure del sito si scrivono in rem, cosi' seguono
   l'ingrandimento del carattere impostato nel browser — che con un pubblico
   over-60 qualcuno usa davvero. */
.fisarmonica-nuda summary { font-size: 1.1875rem; }
/* Una riga sopra la prima domanda e una sotto l'ultima: cosi' il gruppo si legge
   come un elenco chiuso e non come righe che finiscono nel vuoto. Sulle domande
   frequenti del tour e della destinazione non c'erano perche' li' il gruppo e'
   uno solo e chiude la pagina; qui i gruppi sono cinque, uno dopo l'altro. */
.fisarmonica-nuda { border-top: 1px solid var(--hairline); border-bottom: 1px solid var(--hairline); }
/* Stessa faccenda della freccia, e per lo stesso motivo: ".itinerario
   details:last-of-type" rimette una riga sotto all'ultima domanda, e pesa piu'
   del "border: 0" qui sopra. Sommata a quella del gruppo faceva una riga doppia
   in fondo a ogni blocco. Una sola, ed e' quella del gruppo. */
.fisarmonica-nuda details:last-of-type { border-bottom: 0; }
/* LARGHEZZA PIENA, domanda e risposta. Era stretta a 58rem per tenere corta la
   riga, poi il limite era rimasto sulla sola risposta: in tutt'e due i casi la
   colonna di /info-tour/ si vedeva piu' stretta di quella di /destinazioni/ e
   di ogni altra pagina. Deciso dal marketing il 20/08/2026, prima sulle domande
   e poi anche sulle risposte.
   Il limite serviva a non far correre le condizioni di vendita — mille caratteri
   di legge — su righe da centoquaranta caratteri. Resta un rischio vero e
   scritto qui perche' non si ripresenti come una scoperta: se un giorno una di
   quelle risposte risultasse illeggibile, il posto dove rimettere una misura e'
   questo, e va rimessa SOLO su quella e non su tutta la pagina. */
/* La riga introduttiva della risposta: e' il riassunto, sta sopra al resto e si
   distingue dal corpo senza gridare. */
.fisarmonica-nuda .risposta-guida { color: var(--testo); font-weight: 600; }
/* L'avviso "risposta da scrivere": lo vede solo chi ha fatto l'accesso alla
   bacheca, e deve distinguersi a colpo d'occhio dal testo vero — se no si
   rischia di scambiarlo per una risposta e lasciarlo lì. */
.fisarmonica-nuda .risposta-manca {
  color: var(--oro-scuro); font-weight: 600;
  border-left: 3px solid var(--oro); padding-left: .9rem;
}

/* ---------- Comprende / non comprende ---------- */
/* minmax(0,…) e non 1fr secco: 1fr = minmax(auto,1fr), e il minimo automatico e'
   la parola piu' lunga. "Assicurazione medico/bagaglio/annullamento" (Chrome non
   spezza sulle barre) teneva il pannello a 349px dentro una colonna da 273. */
.due-colonne { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 2rem; }
@media (max-width: 820px) { .due-colonne { grid-template-columns: minmax(0, 1fr); } }
.pannello { background: var(--bianco); border: 1px solid var(--hairline); border-radius: var(--raggio); padding: 2rem 2.1rem; }
.pannello h3 { margin-bottom: 1.2rem; }
.lista-si, .lista-no { list-style: none; display: grid; gap: .6rem; }
.lista-si li, .lista-no li { padding-left: 2rem; position: relative; min-width: 0; overflow-wrap: break-word; }
.lista-si li::before { content: "✓"; position: absolute; left: 0; font-weight: 700; color: var(--verde); }
.lista-no li::before { content: "—"; position: absolute; left: 0; font-weight: 700; color: var(--testo-soft); }

/* Due sezioni color sabbia una sull'altra si leggono come un blocco solo: una riga
   bianca le divide senza aggiungere un bordo scuro.
   Vale per QUALSIASI coppia di blocchi sabbia attaccati, non piu' solo per "Tutte le
   partenze" + "Cosa comprende": la regola di prima nominava quei due riquadri e bastava
   che si spostasse qualcosa perche' la riga sparisse senza che nessuno se ne accorgesse.
   Copre anche la pagina destinazione, dove "cosa vedere" e le informazioni utili si
   toccano sulle mete senza la fascia con la fotografia.
   1px, la misura di sempre (il marketing l'ha rivoluta cosi' dopo aver provato 2 e 3):
   deve essere un filo, non uno stacco. Non e' un problema di contrasto — bianco e sabbia
   sono due colori quasi uguali, 1.13:1 — ma di intenzione: quella riga serve a far capire
   che i blocchi sono due, non a dividerli con forza.
   ⚠ ATTENZIONE A COSA SI INFILA FRA DUE SEZIONI. Il "+" vuole i due blocchi ATTACCATI, e
   uno <script> in mezzo e' un elemento come gli altri: basta quello e la riga sparisce.
   E' gia' successo con lo script delle pillole dei mesi, che ora sta dentro la sua
   sezione apposta. Gli script vanno dentro il blocco che comandano, non fra un blocco e
   l'altro. */
.sezione-sabbia + .sezione-sabbia { border-top: 1px solid var(--bianco); }
/* CONFERMATA il 26/08/2026. Il marketing l'aveva notata su /blog/, fra la testa
   e la barra degli argomenti, e ha chiesto se ci fosse anche altrove: c'e', ed e'
   questa regola — vale per qualunque coppia di sezioni sabbia attaccate, non e'
   una riga scritta a mano su quella pagina. Su /viaggi/ non si vede perche' li'
   l'indice delle tipologie non e' una sezione sabbia. Decisione: si lascia. */
/* Le quote non stanno in due riquadri bianchi: il fondo e' quello della sezione. Le icone
   sono spunte PIATTE (segno colorato, niente disco): ✓ verde per il compreso, ✗ rossa per
   il non compreso — come chiesto da Vlad (02/09/2026). Il segno e' disegnato (SVG) e non
   scritto: un carattere di spunta cambia forma, peso e centratura da un font all'altro.
   Il colore sta nel tratto (stroke) dell'SVG: dentro il data-URI il '#' dell'esadecimale
   va scritto '%23'. Solo qui: le note di viaggio usano la stessa lista, ma non sono un
   "non compreso". */
#comprende .pannello { background: transparent; border: 0; padding: 0; }
#comprende .lista-si li,
#comprende .lista-no li { padding-left: 1.95rem; }
#comprende .lista-si li::before,
#comprende .lista-no li::before {
  content: ""; top: .12rem; width: 1.3rem; height: 1.3rem;
  background-position: center; background-repeat: no-repeat; background-size: contain;
}
#comprende .lista-si li::before {
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%231E7B45" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5 10 17.5 19 6.5"/></svg>');
}
#comprende .lista-no li::before {
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23B3382C" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M7 7 17 17M17 7 7 17"/></svg>');
}

/* ---------- Fascia contatto: blu, tipografica ---------- */
.fascia-cta { background: var(--blu-scuro); color: var(--bianco); }
.fascia-cta .contenitore { padding-top: 5rem; padding-bottom: 5rem; text-align: center; }
.fascia-cta h2 { color: var(--bianco); }
/* 1,2rem e non 1,15: qui sopra il blu scuro passano frasi che si devono
   leggere davvero (la promessa dei consulenti, gli orari), e il pubblico e'
   per il 59% oltre i sessanta. */
.fascia-cta p { color: #C3CFDF; font-size: 1.2rem; margin: 1rem auto 2rem; max-width: 40em; }
.tel-grande {
  font-family: 'Zalando Sans Expanded', sans-serif;
  font-size: clamp(1.6rem, 4vw, 2.5rem); font-weight: 600;
  color: var(--bianco); text-decoration: none;
  display: inline-flex; align-items: center; gap: .9rem;
  transition: color .2s;
}
.tel-grande:hover { color: var(--oro); }
/* L'alternativa scritta, sotto il numero: unico posto dei contatti da quando il
   piede non li ripete piu'. Stessa famiglia del telefono, un gradino sotto:
   a 1,15rem sembrava una notina, non una sorella del numero. Sottolineata
   perche' su fondo blu un bianco pieno non si riconosce da solo come
   collegamento. */
.fascia-cta .cta-email { margin: .6rem auto 0; }
/* Gli orari chiudono il blocco dei contatti: stessa distanza dall'email che
   l'email ha dal numero, e il grigio-azzurro di prima (era scritto in riga
   nell'HTML, che non e' il posto dei colori). */
.fascia-cta .cta-orari { color: #B9C6DB; margin: .8rem auto 0; }
.fascia-cta .cta-email a {
  font-family: 'Zalando Sans Expanded', sans-serif;
  font-size: clamp(1.35rem, 2.2vw, 1.75rem);
  color: var(--bianco); font-weight: 600;
  text-decoration: underline; text-underline-offset: 3px;
  display: inline-flex; align-items: center; min-height: 48px;
}
.fascia-cta .cta-email a:hover { color: var(--oro); }

/* ---------- Punti di forza: icona fine, niente scatole colorate ---------- */
.griglia-punti { display: grid; gap: 3rem 2.5rem; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
.punto { text-align: center; }
.punto .icona {
  color: var(--blu); margin: 0 auto 1.2rem;
  width: 3.2rem; height: 3.2rem;
  display: flex; align-items: center; justify-content: center;
}
/* anche h2: su Contatti i riquadri stanno DIRETTAMENTE sotto l'h1 (prima erano
   h3, un gradino saltato per chi naviga coi titoli); l'aspetto e' lo stesso. */
.punto h3, .punto h2 { font-size: 1.08rem; margin-bottom: .5rem; }
.punto p { font-size: .98rem; color: var(--testo-soft); }
.punto .rigo-oro { width: 2.2rem; height: 2px; background: var(--oro); margin: 0 auto .9rem; }
/* "Perché con noi" in home: icona e titolo restano al centro (ci pensa .punto), il testo
   sotto va giustificato, come nel blocco "Cosa rende speciale un tour". Niente
   sillabazione: le parole non si spezzano col trattino a fine riga — il prezzo e' che
   ogni tanto una riga ha gli spazi fra le parole piu' larghi, ed e' quello che il
   marketing ha preferito. Su una colonna sola il giustificato non serve piu' e i buchi
   si vedrebbero il doppio: si torna a bandiera. */
.punti-giustificati .punto p { text-align: justify; hyphens: none; line-height: 1.6; }
@media (max-width: 700px) { .punti-giustificati .punto p { text-align: left; } }

/* ---------- Le prove da fuori: Trustpilot e Google ----------
   Due righe con il marchio di chi certifica il voto, al posto delle stelline
   disegnate da noi. Il riquadro Trustpilot arriva dentro un iframe loro: si
   governa la scatola che lo contiene, non quello che c'e' dentro. */
/* Due colonne uguali: marchio, voto, quante recensioni. Il voto sta alla
   stessa misura del numero di telefono della scheda accanto (1.5rem/800):
   sono la stessa cosa — il dato per cui esiste la scheda. */
.prove { display: flex; justify-content: center; align-items: flex-start; gap: 1rem 2.2rem; flex-wrap: wrap; }
.prova {
  display: flex; flex-direction: column; align-items: center; gap: .3rem;
  min-width: 6.5rem; padding: .4rem .3rem; color: inherit; text-decoration: none;
  border-radius: var(--raggio);
}
/* I due marchi hanno forme diverse — una lettera quadrata, una scritta lunga:
   la riga alta uguale li tiene sulla stessa linea di base ottica. */
.prova-marchio { height: 24px; display: flex; align-items: center; justify-content: center; }
/* "Google" accanto alla G: il marchio di Trustpilot il nome ce l'ha dentro, e
   senza questo i due badge non erano la stessa cosa. Scritto col carattere del
   sito, in scuro pieno (sul blu diventa bianco, piu' giu'): il logotipo vero e'
   un carattere di Google e ridisegnarlo a mano sarebbe peggio. */
.marchio-google { display: inline-flex; align-items: center; gap: .35rem; }
/* peso 500 e non 700: accanto alla scritta di Trustpilot, che ha aste sottili,
   un Google in nero pieno sembrava un altro carattere e tirava tutto lo sguardo
   (Vlad, 21/08/2026: "troppo spessa la scritta google"). */
.marchio-google-nome { font-weight: 500; font-size: 1.05rem; line-height: 1; color: var(--testo); letter-spacing: -.01em; }
.prova-marchio img, .prova-marchio svg { display: block; }
.prova-stelle { display: flex; align-items: center; justify-content: center; height: 20px; }
.prova-stelle img { display: block; }
/* Le stelle disegnate dal sito (Google, che non pubblica la sua striscia):
   cinque stelle spente e sopra le stesse accese, tagliate al voto. Il taglio è
   su una copia sovrapposta, non sul testo sotto, così mezza stella si vede
   davvero invece di essere arrotondata per finta. */
.stelle-voto { position: relative; display: inline-block; line-height: 1; letter-spacing: .1em;
  font-size: 1.15rem; white-space: nowrap; }
.stelle-vuote { color: var(--stella-spenta); }
/* Oro del marchio, lo stesso dei bottoni: chiesto dal marketing e da Vlad
   nello stesso giorno (18/08/2026, 'piu' belle e piu' chiare'), era --oro-scuro.
   Qui si puo': le stelle sono un disegno, non un testo da leggere — il voto in
   cifre sta sempre accanto ed e' quello che porta l'informazione, la stella e'
   rinforzo. Su un testo lo stesso oro non basterebbe (1.98:1 sul bianco): per
   quello serve --oro-scuro. */
.stelle-piene { position: absolute; left: 0; top: 0; overflow: hidden; color: var(--oro); }
.prova-voto { font-size: 1.5rem; font-weight: 800; color: var(--blu); line-height: 1.1; }
/* 1.0625rem e non meno: "49 recensioni" e' il dato che rende credibile il
   voto, non una didascalia — e il pubblico e' per il 59% over-60 (17px). */
.prova-su { font-size: 1.0625rem; font-weight: 600; color: var(--testo-soft); }
/* Che sia un collegamento lo dicono il marchio e la sottolineatura al
   passaggio: due colonne sottolineate da ferme, dentro una scheda, sarebbero
   due blocchi di rumore. Col fuoco da tastiera resta il contorno di sistema. */
a.prova:hover, a.prova:focus-visible { background: rgba(25, 60, 108, .05); }
a.prova:hover .prova-voto, a.prova:focus-visible .prova-voto { text-decoration: underline; text-underline-offset: .18em; }

/* ---------- L'esito dei moduli e l'esca antispam ---------- */
/* L'esito sta SOPRA il modulo, dove atterra l'ancora #modulo dopo l'invio:
   un riquadro che si legge al volo, col capoverso in grassetto che dice
   tutto da solo ("Messaggio inviato." / "L'invio non e' riuscito."). */
.avviso-modulo {
  max-width: 44rem; margin: 0 auto 1.5rem;
  padding: 1rem 1.25rem; border-radius: var(--raggio);
  background: var(--bianco); border: 1px solid var(--hairline);
  font-size: 1.0625rem;
}
.avviso-modulo.avviso-ok { border-left: 3px solid var(--oro); }
.avviso-modulo.avviso-no { border-left: 3px solid #B3541E; }
.avviso-modulo strong { color: var(--blu); }
/* Il campo-esca dei robot: fuori dallo schermo, non dal DOM. display:none
   sarebbe piu' facile da fiutare per i compilatori automatici. */
.campo-esca { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; }

/* Nei pannelli contatti i punti restano allineati a sinistra */
.pannello .icona { margin-left: 0; text-align: left; justify-content: flex-start; }

/* ---------- Breadcrumb ---------- */
.briciole { font-size: .9rem; padding: 1.2rem 0 0; color: var(--testo-soft); }
/* l'imbottitura porta "Home" a 48px anche in larghezza (misurava 40);
   il margine negativo sul primo link tiene il testo allineato al contenitore */
.briciole a { color: var(--testo-soft); text-decoration: none; padding: 0 .4rem; }
.briciole a:first-child { margin-left: -.4rem; }
.briciole a:hover { color: var(--blu); text-decoration: underline; }
.briciole span[aria-current] { color: var(--blu); font-weight: 600; }
/* Briciole messe sopra una foto a tutta larghezza (pagina destinazione): dopo di loro
   non c'e' una sezione con la sua imbottitura, quindi lo spazio se lo devono dare da
   sole, altrimenti la riga tocca il bordo della fotografia. */
.briciole-sopra-foto .briciole { padding-bottom: 1.1rem; }

/* ---------- Footer ---------- */
.pie { background: var(--blu-scuro); color: #AEBDD2; font-size: .98rem; }
.pie .contenitore { padding-top: 4.5rem; padding-bottom: 2rem; }
.pie-griglia { display: grid; gap: 2.5rem; grid-template-columns: 1.4fr 1fr 1fr 1.2fr; }
@media (max-width: 900px) { .pie-griglia { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .pie-griglia { grid-template-columns: 1fr; } }
.pie img.logo-pie { height: 42px; width: auto; margin-bottom: 1.2rem; }
.pie h3 {
  color: var(--bianco); font-family: 'Inter', sans-serif;
  font-size: .78rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase;
  margin-bottom: 1.1rem;
}
.pie ul { list-style: none; display: grid; gap: .6rem; }
.pie a { color: #AEBDD2; text-decoration: none; transition: color .2s; }
.pie a:hover { color: var(--oro); text-decoration: underline; text-underline-offset: 3px; }
/* Il colore era #7E92AF scritto a mano: 4,58:1 sul blu del pie', il contrasto
   piu' basso di tutto il sito, proprio sul testo piu' piccolo. #A6B6CD sta a
   7,05:1 e resta piu' tenue del testo del pie' (#AEBDD2). */
.pie-fondo { border-top: 1px solid rgba(255,255,255,.12); margin-top: 3rem; padding-top: 1.4rem; font-size: .85rem; color: #A6B6CD; }

/* I pezzi vivi del piede (v. footer.php): newsletter, riquadro Trustpilot,
   social, collegamenti istituzionali. Struttura: la grafica fine la decide
   Vlad, pagina per pagina. */
.pie-news { margin-top: 1.4rem; }
/* .pie .pie-news-btn e non .pie-news-btn: il colore dei collegamenti del piede
   (#AEBDD2) vinceva sul bottone e ISCRIVITI usciva grigio su oro (1.9:1,
   misurato). Sul fondo oro il testo e' SEMPRE blu-scuro (7.33:1): e' la regola
   scritta accanto ai token. */
.pie .pie-news-btn { margin-top: .8rem; color: var(--blu-scuro); }
/* Il riquadro di Trustpilot si disegna coi suoi colori scuri: sul blu del
   piede sarebbe illeggibile, quindi sta su un cartellino bianco, come sul
   sito vecchio. fit-content: largo quanto serve a lui, non quanto la colonna. */
/* .pie .pie-social e non .pie-social da solo: .pie ul (griglia verticale)
   vincerebbe per specificita' e impilerebbe le icone una sotto l'altra. */
.pie .pie-social { list-style: none; display: flex; gap: .9rem; margin-top: 2.5rem; padding: 0; }
.pie-social a {
  display: flex; align-items: center; justify-content: center;
  width: 3rem; height: 3rem; border-radius: 50%;
  border: 1px solid rgba(255,255,255,.25); color: #AEBDD2;
  transition: color .2s, border-color .2s;
}
.pie-social a:hover, .pie-social a:focus-visible { color: var(--bianco); border-color: var(--bianco); }
.ico-social { width: 1.35rem; height: 1.35rem; fill: currentColor; }
/* I due collegamenti in fondo al piede erano alti 22px: righe di testo nude, e
   sono proprio quelli che si cercano col dito quando servono (mappa del sito,
   dichiarazione di accessibilita'). Ora hanno l'altezza di un comando vero.
   Il margine negativo tiene la riga dov'era: l'imbottitura cresce dentro, non
   spinge in basso il pavimento del piede. */
/* column-gap e non gap: con quattro voci («Preferenze cookie» dal 28/08) sul
   telefono si va a capo, e il gap verticale sommato ai bersagli da 48px
   lasciava la voce a capo orfana con una riga d'aria sopra. I 48px di
   altezza-tocco danno gia' il respiro giusto tra le righe. */
.pie-istituzionali { display: flex; column-gap: 1.6rem; row-gap: 0; flex-wrap: wrap; margin-top: 0; }
.pie-istituzionali a {
  color: inherit;
  display: inline-flex; align-items: center; min-height: 48px;
}

/* ---------- Pagina recensioni ----------
   Tutto vivo: il riquadro Trustpilot si aggiorna a ogni visita, le card di
   Google una volta al giorno dalla Places API. Le card scorrono nel carosello
   del sito (stesse frecce delle destinazioni in home). */
.titolo-fonte { display: flex; align-items: center; gap: .6rem; font-size: 1.35rem; }
.titolo-fonte .logo-google, .titolo-fonte .logo-trustpilot { display: block; }
.card-rec-scorre { flex: 0 0 auto; width: clamp(17rem, 78vw, 26rem); }
.card-rec-scorre .stelle-card .stelle-voto { font-size: 1.3rem; }
.mappa-sito { display: grid; gap: 2.5rem; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); align-items: start; }
.mappa-sito h2 { font-size: 1.2rem; margin-bottom: 1rem; }
.mappa-sito .conta-mappa { font-size: 1rem; font-weight: 400; color: var(--testo-soft); }
.mappa-sito ul { list-style: none; display: grid; gap: .55rem; }
.mappa-sito a { color: var(--testo); text-decoration: none; }
.mappa-sito a:hover, .mappa-sito a:focus-visible { color: var(--blu); text-decoration: underline; text-underline-offset: .18em; }

/* ---------- Barra CTA sticky (appare dopo l'hero, alla Trafalgar) ----------
   visibility oltre al transform: da chiusa non deve prendere il focus col tab
   (due link invisibili fuori schermo sono la trappola classica da screen reader). */
.barra-sticky {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
  background: var(--bianco); border-top: 1px solid var(--hairline);
  box-shadow: 0 -8px 30px rgba(16,41,77,.08);
  transform: translateY(110%); visibility: hidden;
  transition: transform .35s ease, visibility 0s linear .35s;
}
.barra-sticky.visibile { transform: none; visibility: visible; transition: transform .35s ease, visibility 0s; }
.barra-sticky .contenitore {
  display: flex; align-items: center; gap: 1.5rem;
  padding-top: .7rem; padding-bottom: .7rem;
}
/* Nessun pezzo va a capo dentro se stesso: a cedere e' il titolo (con l'ellissi),
   che tanto e' gia' nell'H1 della pagina. Senza queste regole il flex stringeva
   prezzo e telefono al min-content: "€ 2.780" e "848 46 60 00" su piu' righe e
   barra alta 140px — un quinto di un telefono, in permanenza. */
.barra-sticky .titolo-mini {
  font-weight: 600; color: var(--blu); font-family: 'Zalando Sans Expanded', sans-serif;
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.barra-sticky .prezzo-mini { margin-left: auto; text-align: right; font-size: .78rem; color: var(--testo-soft); text-transform: uppercase; letter-spacing: .06em; white-space: nowrap; flex-shrink: 0; }
.barra-sticky .prezzo-mini strong { display: block; font-size: 1.3rem; color: var(--blu); font-family: 'Zalando Sans Expanded', sans-serif; text-transform: none; letter-spacing: 0; white-space: nowrap; }
.barra-sticky .btn { flex-shrink: 0; white-space: nowrap; }
/* Sul telefono: via il titolo, prezzo su una riga sola, telefono ridotto alla cornetta.
   Misurato a 390px: "a persona da" e il numero andavano a capo su 4 righe. */
@media (max-width: 700px) {
  .barra-sticky .titolo-mini { display: none; }
  .barra-sticky .contenitore { gap: .8rem; }
  .barra-sticky .prezzo-mini { margin-left: 0; margin-right: auto; text-align: left; white-space: nowrap; }
  .barra-sticky .btn { white-space: nowrap; padding-left: 1.2rem; padding-right: 1.2rem; }
  .barra-sticky .btn-mini { font-size: 0; padding: .6rem .8rem; }
  .barra-sticky .btn-mini::before {
    content: ""; display: block; width: 1.35rem; height: 1.35rem;
    background: currentColor;
    -webkit-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 2 .7 2.9a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.2-1.2a2 2 0 0 1 2.1-.5c.9.3 1.9.6 2.9.7a2 2 0 0 1 1.7 2z"/></svg>') center / contain no-repeat;
            mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 2 .7 2.9a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.2-1.2a2 2 0 0 1 2.1-.5c.9.3 1.9.6 2.9.7a2 2 0 0 1 1.7 2z"/></svg>') center / contain no-repeat;
  }
}

/* ---------- Utilità ---------- */
.centro { text-align: center; }
.mt-1 { margin-top: 1rem; } .mt-2 { margin-top: 2rem; } .mt-3 { margin-top: 3rem; }
.mb-1 { margin-bottom: 1rem; } .mb-2 { margin-bottom: 2rem; }
.nascosto { display: none !important; }

/* ============================================================
   Aggiunte del tema WP (non presenti nelle bozze statiche)
   ============================================================ */

/* Menu mobile: burger sotto i 900px, pannello a scomparsa */
.apri-menu { display: none; background: none; border: 1px solid var(--hairline); border-radius: var(--raggio-s); padding: .55rem .6rem; cursor: pointer; color: var(--blu); }
.apri-menu .ico { width: 1.5rem; height: 1.5rem; display: block; }
@media (max-width: 1179px) {
  .apri-menu { display: block; }
  /* NIENTE position:relative qui: annullava lo sticky della testata proprio su
     telefono e tablet, dove serve di piu' (su una scheda tour alta 13.000px il
     menu e la cornetta scorrevano via e non tornavano). Sticky e' comunque
     "positioned": il pannello in absolute continua ad agganciarsi alla testata. */
  /* Il pannello del panino e' un FOGLIO A TUTTO SCHERMO, non una tendina appesa
     alla testata. Prima era in absolute con un tetto (max-height: 100svh - 4.75rem):
     due difetti misurati il 21/08/2026 col menu aperto, e Vlad li ha visti tutti e
     due sul suo telefono —
       1. a 320px il contenuto (590px) non stava nel tetto (492px) e il pannello
          scorreva DENTRO SE STESSO: due scorrimenti sovrapposti;
       2. a 390/414/768 la pagina sotto scorreva lo stesso (misurato: scrollY da
          300 a 700 con il menu aperto), cioe' si spostava il sito sotto il menu.
     Ora: fisso da sotto la testata fino al bordo dello schermo, la pagina sotto
     bloccata da .menu-aperto (vedi piu' giu'), e se proprio il contenuto non ci
     sta scorre lui e basta, senza travasare (overscroll-behavior). */
  .testata.aperta .nav-principale {
    display: flex; flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 0;
    position: fixed; left: 0; right: 0;
    /* La tendina e' alta quanto il suo contenuto e si ferma PRIMA del fondo: sotto
       resta una striscia di pagina velata, ed e' quella che la fa leggere come un
       menu a tendina e non come una pagina nuova. Il tetto e' solo un tetto: se un
       giorno le voci non ci stessero (schermi molto bassi), si ferma li'.
       Il vh prima dello svh e' il ripiego per i Safari che svh non lo conoscono. */
    top: var(--h-testata, 4.75rem); bottom: auto;
    max-height: calc(100vh - var(--h-testata, 4.75rem) - 2.5rem);
    max-height: calc(100svh - var(--h-testata, 4.75rem) - 2.5rem);
    border-radius: 0 0 var(--raggio) var(--raggio);
    box-shadow: 0 18px 40px rgba(13, 28, 54, .18);
    /* width oltre a left+right: su WebKit un absolute dentro una testata sticky
       a volte non risolve right e il pannello si stringeva alla larghezza
       naturale delle voci (~57% dello schermo, visto sull'iPhone di Vlad il
       14/08, col telefono della testata che spuntava di fianco). Con la width
       esplicita il pannello resta a tutta larghezza anche li'. */
    width: 100%;
    background: #fff; z-index: 66;
    overflow-y: auto; -webkit-overflow-scrolling: touch;
    /* il dito che arriva in fondo all'elenco non deve mettere in moto la pagina dietro */
    overscroll-behavior: contain;
  }
  /* .72rem invece di .9rem: con 11 voci piu' il numero il contenuto chiedeva 690px
     e su un telefono vero, tolta la barra del browser, ne restano ~650. Cosi' sta
     tutto in una schermata a 390 e 414 senza scorrere, e la voce resta un bersaglio
     pieno (48px: il min-height qui sotto lo garantisce anche a caratteri piccoli). */
  .testata.aperta .nav-principale a { padding: .72rem 1.4rem; min-height: 48px; display: flex; align-items: center; border-bottom: 1px solid var(--hairline); }
  /* Sul telefono niente tendine: le sottovoci restano in elenco, rientrate.
     Toccare una voce che apre un menu è la trappola classica del touch. */
  .testata.aperta .voce-gruppo { display: block; }
  .testata.aperta .voce-gruppo > .ico-tendina { display: none; }
  .testata.aperta .voce-gruppo > .voce-gruppo-testo {
    display: block; padding: .9rem 1.4rem .4rem; font-size: .82rem; font-weight: 700;
    letter-spacing: .1em; text-transform: uppercase; color: var(--testo-soft);
  }
  .testata.aperta .voce-gruppo .sotto-menu {
    display: block; position: static; min-width: 0; padding: 0;
    border: 0; border-radius: 0; box-shadow: none;
  }
  .testata.aperta .voce-gruppo .sotto-menu a { padding-left: 2.4rem; }
  /* Il numero per esteso in fondo al pannello: sulla testata stretta resta la sola cornetta */
  /* Il numero chiude la tendina: fondo tinto, nessun margine che lo spinga via.
     Appoggiato al fondo dello schermo (com'era il 21/08 mattina) lasciava in
     mezzo un vuoto bianco di 200px: Vlad l'ha visto e ha detto "sembra triste". */
  .testata.aperta .tel-nel-menu {
    display: flex; align-items: center; gap: .7rem;
    padding: 1.1rem 1.4rem; text-decoration: none; color: var(--blu);
    background: var(--blu-tinta); border-top: 1px solid var(--hairline);
  }
  .testata.aperta .tel-nel-menu strong { display: block; font-size: 1.15rem; }
  .testata.aperta .tel-nel-menu small { display: block; color: var(--testo-soft); font-weight: 400; }
}

/* ---------- Schermi bassi: la tendina si stringe invece di scorrere ----------
   Dieci voci al minimo consentito per un dito (48px) fanno 480px da sole: sotto
   una certa altezza non c'e' impaginazione che tenga, e allora si recupera tutto
   il recuperabile SENZA scendere sotto i 48px. Due gradini, misurati:
   - sotto gli 800px di altezza utile (il telefono di Vlad, con la barra del
     browser aperta, ne ha ~730): righe a 48 tondi invece di 50 e etichetta del
     gruppo piu' bassa. Gli orari restano.
   - sotto i 700px (telefoni piccoli e vecchi, e l'orizzontale): fuori anche gli
     orari e la striscia scoperta scende a 1.25rem. Il numero resta, e la
     cornetta e' comunque in testata. */
@media (max-width: 1179px) and (max-height: 800px) {
  .testata.aperta .nav-principale a { padding-top: .45rem; padding-bottom: .45rem; }
  .testata.aperta .voce-gruppo > .voce-gruppo-testo { padding: .55rem 1.4rem .2rem; }
  .testata.aperta .tel-nel-menu { padding: .8rem 1.4rem; }
}
@media (max-width: 1179px) and (max-height: 700px) {
  .testata.aperta .nav-principale {
    max-height: calc(100vh - var(--h-testata, 4.75rem) - 1.25rem);
    max-height: calc(100svh - var(--h-testata, 4.75rem) - 1.25rem);
  }
  .testata.aperta .tel-nel-menu { padding: .55rem 1.4rem; }
  .testata.aperta .tel-nel-menu small { display: none; }
}

/* ---------- Il velo sotto la tendina ----------
   Serve a due cose insieme: dice che la pagina dietro c'e' ancora (e allora quello
   sopra e' una tendina, non un'altra pagina) e dice che per ora non si tocca.
   z-index 62: sopra la barra "Preventivo" (60) e il tondo "torna su" (55), sotto
   la testata (64) e la tendina (66), che restano vivi e cliccabili.
   Bottom -7rem: e' il velo, ora, l'elemento appoggiato al bordo basso, e la
   striscia che si scopre quando la barra del browser si ritira tocca a lui. */
.velo-menu {
  position: fixed; top: 0; left: 0; right: 0; bottom: -7rem;
  background: rgba(13, 28, 54, .45);
  z-index: 62;
}
@media (prefers-reduced-motion: no-preference) {
  .velo-menu { animation: velo-entra .18s ease-out; }
  @keyframes velo-entra { from { opacity: 0; } to { opacity: 1; } }
}

/* ---------- La finestra della ricerca ----------
   Un velo come quello del menu (stesso blu, stessa coda di -7rem sotto il
   bordo per la barra del browser che si ritira) e un pannello bianco in alto,
   centrato. z-index 80: sopra tutto, testata compresa — quando cerchi, cerchi.
   Il campo a 1.125rem (18px): sotto i 16 l'iPhone ingrandisce da solo. */
.cerca-finestra {
  position: fixed; top: 0; left: 0; right: 0; bottom: -7rem;
  background: rgba(13, 28, 54, .45); z-index: 80;
  display: flex; align-items: flex-start; justify-content: center;
  padding: clamp(4.5rem, 16vh, 9rem) 1rem 2rem;
}
.cerca-finestra[hidden] { display: none; }
.cerca-pannello {
  position: relative; width: 100%; max-width: 42rem;
  background: var(--bianco); border-radius: var(--raggio);
  box-shadow: 0 24px 60px rgba(13, 28, 54, .35);
  padding: 1.8rem 2rem 1.4rem;
}
.cerca-riga { display: flex; gap: .8rem; }
.cerca-riga .campo { flex: 1; min-width: 0; font-size: 1.125rem; min-height: 48px; }
.cerca-riga .btn { flex-shrink: 0; min-height: 48px; }
.cerca-aiuto { margin-top: .7rem; }
.cerca-chiudi {
  position: absolute; top: .6rem; right: .6rem;
  min-width: 48px; min-height: 48px;
  display: flex; align-items: center; justify-content: center;
  background: none; border: 0; cursor: pointer; color: var(--blu);
  border-radius: var(--raggio-s);
}
.cerca-chiudi .ico { width: 1.3rem; height: 1.3rem; }
.cerca-chiudi:hover { background: var(--grigio); }
@media (prefers-reduced-motion: no-preference) {
  .cerca-finestra { animation: velo-entra .18s ease-out; }
  .cerca-pannello { animation: pannello-entra .22s ease-out; }
  @keyframes pannello-entra { from { opacity: 0; transform: translateY(-.6rem); } to { opacity: 1; transform: none; } }
}
@media (max-width: 640px) {
  .cerca-pannello { padding: 1.4rem 1.2rem 1.1rem; }
  /* il bottone sotto il campo: di fianco, a 320px, restavano 150px di campo */
  .cerca-riga { flex-direction: column; }
  .cerca-chiudi { top: .35rem; right: .35rem; }
  .cerca-pannello .etichetta { padding-right: 3rem; }   /* la croce non copre l'etichetta */
}
html.ricerca-aperta, html.ricerca-aperta body { overflow: hidden; }
html.ricerca-aperta body { position: fixed; left: 0; right: 0; width: 100%; }

/* ---------- Con il menu aperto, la pagina sotto sta ferma ----------
   Il solo overflow: hidden sul body non basta su iOS: si blocca fissando il body
   e ricordandosi di quanto era sceso (lo fa sito.js, che rimette lo scorrimento
   dov'era alla chiusura). Il body fissato pero' porta via lo sticky della testata
   — che si ritroverebbe fuori schermo, in cima al documento — e allora qui la
   testata diventa fissa: resta dov'e', col suo bottone per richiudere. */
html.menu-aperto, html.menu-aperto body { overflow: hidden; }
html.menu-aperto body { position: fixed; left: 0; right: 0; width: 100%; }
html.menu-aperto .testata { position: fixed; top: 0; left: 0; right: 0; z-index: 64; }

/* Il panino si volta in croce quando il foglio e' aperto: stesso posto, stessa
   cornice, un elemento in meno da capire (regola della skill: dove ne basta uno
   che si volta, non se ne mettono due). */
.apri-menu .ico-chiudi { display: none; }
.testata.aperta .apri-menu .ico-panino { display: none; }
.testata.aperta .apri-menu .ico-chiudi { display: block; }

/* Telefono a sola cornetta quando la testata è stretta (il numero è nel pannello) */
@media (max-width: 640px) {
  .tel-testata .numero, .tel-testata small { display: none; }
  .tel-testata { border: 1px solid var(--hairline); border-radius: var(--raggio-s); padding: .55rem .7rem; }
  .tel-testata svg { width: 1.4rem; height: 1.4rem; }
  .logo img { height: 38px; }
}

/* La testata non è testo da leggere: prende tutta la larghezza utile, mentre il
   contenitore stretto (1216px) resta alle sezioni di contenuto. Misurato: con 8 voci
   il menu ne chiede 903 e ne aveva 638 — andava a capo su una seconda riga a QUALUNQUE
   risoluzione, seconda riga che finiva sopra la fotografia di apertura. */
.testata .testata-riga { max-width: 100rem; }

/* Il menu si stringe a gradini invece di andare a capo. Le soglie sono misurate sul
   menu vero (8 voci + la ricerca): larghezza richiesta = somma delle voci + i loro
   spazi + logo + blocco contatto.
   RITARATE il 20/08/2026, quando è entrata la voce "Cerca": i gradini erano
   calcolati su 8 voci senza ricerca e il budget non tornava più a nessuna
   larghezza. Nella stessa misura è saltato fuori che a 1366px — un portatile
   diffusissimo — la testata andava a capo GIÀ PRIMA della ricerca (114px invece
   di 92): il gradino di mezzo non bastava nemmeno per le sole 8 voci. */
@media (min-width: 1600px) {
  /* Anche il gradino largo ha bisogno di respiro: la riga si ferma a 100rem, e
     col menu di oggi (903px di voci + 56 di spazi) ne mancavano 47. */
  .testata-riga { gap: 1.5rem; }
  .nav-principale { gap: .3rem; }
  .nav-principale a { padding-left: .75rem; padding-right: .75rem; }
  /* La voce con la tendina resta sbilanciata a sinistra come nel disegno base:
     a destra ha la freccetta, e imbottirla come le altre la stacca dal testo. */
  .voce-gruppo > .voce-gruppo-testo { padding-left: .75rem; padding-right: .3rem; }
}
@media (min-width: 1180px) and (max-width: 1599px) {
  .testata-riga { gap: 1.25rem; }
  .nav-principale { gap: .35rem; }
  .nav-principale a, .voce-gruppo > .voce-gruppo-testo { padding-left: .55rem; padding-right: .55rem; font-size: .95rem; }
  .voce-gruppo > .voce-gruppo-testo { padding-right: .15rem; }
  .voce-gruppo .sotto-menu a { padding-left: 1.1rem; padding-right: 1.1rem; }
  .logo img { max-width: 11rem; }
  /* La nota degli orari sotto al numero è la prima a cedere: era così solo sotto
     i 1340px, ma il conto dice che serve fin qui — e gli orari si leggono
     comunque nella fascia contatto e nel piede, dove non tolgono spazio a nessuno. */
  .tel-testata small { display: none; }
}
/* Più stretto ancora: si stringono anche gli spazi fra logo, menu e contatto.
   L'ultimo gradino prima del panino: a 1180px il conto tornava per 19px in meno. */
@media (min-width: 1180px) and (max-width: 1339px) {
  .testata-riga { gap: .75rem; }
  .nav-principale { gap: .2rem; }
  .testata-contatto { gap: .6rem; }
  .nav-principale a, .voce-gruppo > .voce-gruppo-testo { padding-left: .32rem; padding-right: .32rem; font-size: .9rem; }
  .logo img { max-width: 9.5rem; }
}

/* ---------- Servizio navetta ---------- */
/* La misura di lettura su un blocco di prosa. Il token c'era gia' (62ch,
   misurato: 71-73 caratteri per riga, dentro i 75 della regola tipografica) ma
   viveva solo su .sottotitolo e su tre blocchi contati: la classe generica
   mancava, e i capoversi delle pagine lunghe uscivano a 131 caratteri. */
.prose-lettura { max-width: var(--misura-lettura); }

.nota-fermate { margin-bottom: 1.5rem; }
/* «Come funziona il servizio»: un h2 che fa da attacco di paragrafo, non da
   titolo di sezione. 1.5rem e' un gradino gia' nel sistema (.blocco-mese h2,
   .card-catalogo h2); a sinistra e senza filetto d'oro, perche' non apre una
   sezione — continua quella di sopra. */
.attacco {
  font-family: 'Zalando Sans Expanded', sans-serif;
  color: var(--blu); font-size: 1.5rem; margin: 1.8rem 0 .9rem;
}
/* Tre righe, non tre paragrafi: l'elenco delle regole sta stretto. */
.lista-regole { gap: .45rem; }
/* La casella per cercare la propria citta'. Non nasconde niente: senza
   JavaScript le fermate restano tutte in pagina. */
.cerca-fermate { max-width: 30rem; margin: 0 0 1.8rem; }
/* Come .conta-fermate: label.etichetta sta a 1rem in tutto il sito, e 16px sono
   sotto il pavimento dei 17 che questo sito si e' dato. Qui si rialza. */
.cerca-fermate .etichetta { font-size: 1.0625rem; }

/* Richiudendo si torna in cima al blocco: il titolo della regione non deve
   finire sotto la testata appiccicata (93px da scrivania, 77 sul telefono).
   Stessi valori di .gruppo-esiti e di #tutte-le-partenze. */
.blocco-regione { scroll-margin-top: 9.5rem; }
@media (max-width: 760px) { .blocco-regione { scroll-margin-top: 7rem; } }
/* 1,0625rem = 17px: e' il pavimento del testo su questo sito (pubblico over 60).
   .nota-piccola sta a 1rem, che sotto quel pavimento ci passa di un pelo: qui si
   rialza invece di ereditarlo. */
.conta-fermate { margin-top: .55rem; font-size: 1.0625rem; }
.nessuna-fermata { margin-top: 1.2rem; font-size: 1.0625rem; }

.blocco-regione + .blocco-regione { margin-top: 2.2rem; }
/* Etichetta di gruppo, non titolo di sezione: 1.5rem e' lo stesso gradino di
   .blocco-mese h2 sul calendario, che fa esattamente questo mestiere. */
.blocco-regione h2 {
  font-family: 'Zalando Sans Expanded', sans-serif;
  color: var(--blu); font-size: 1.5rem; margin-bottom: .9rem;
}
/* Le colonne: il punto di carico e' una frase e si prende lo spazio, le altre
   tre sono corte. Senza queste larghezze la citta' andava a capo su due righe
   mentre il codice si teneva mezza tabella.
   DENTRO la min-width, non fuori: sotto gli 880px le righe diventano schede e
   le celle non sono piu' colonne — un "9%" li' dentro strizzava il codice in
   29px (misurato a 390px prima di accorgersene). */
@media (min-width: 881px) {
  .tab-fermate th:nth-child(1), .tab-fermate td:nth-child(1) { width: 20%; }
  .tab-fermate th:nth-child(3), .tab-fermate td:nth-child(3) { width: 9%; }
  .tab-fermate th:nth-child(4), .tab-fermate td:nth-child(4) { width: 15%; white-space: nowrap; }
}
.tab-fermate .cella-testa strong { color: var(--blu); }
.tab-fermate .cella-punto { color: var(--testo-soft); }
/* Il codice della fermata e' un dato da leggere al telefono con l'operatore, non
   una parola: cartellino, carattere a spaziatura larga, e il corpo del testo del
   sito (17px) perche' resta testo. */
.cod-fermata {
  display: inline-block; font-size: 1.0625rem; font-weight: 600;
  letter-spacing: .05em; color: var(--testo);
  background: var(--grigio); border-radius: var(--raggio-s); padding: .1rem .5rem;
}

/* ---------- Calendario partenze (pagina "Tutte le partenze") ---------- */
/* La tabella ha 5 colonne: sotto i 760px scorre dentro il suo contenitore invece di
   sfondare la pagina (stesso accorgimento del Gantt della roadmap). */
.scorri-x { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.scorri-x .tab-partenze { min-width: 44rem; }
.tab-partenze .cella-data { font-weight: 600; color: var(--blu); white-space: nowrap; }
.tab-partenze .link-viaggio { font-weight: 600; color: var(--testo); text-decoration: none; }
.tab-partenze .link-viaggio:hover { color: var(--blu); text-decoration: underline; }
.tab-partenze .nota-riga { display: block; font-size: .86rem; color: var(--testo-soft); margin-top: .15rem; }
/* 1.5rem: un h2 che fa da etichetta di gruppo, non da titolo di sezione — ma
   sopra gli h3 (22,4px), perche' un h2 sotto un h3 e' una gerarchia rovesciata.
   Stava scritto in riga nell'HTML (1.35rem), unica misura di titolo del sito
   fuori dal foglio: era anche l'unica che qualcuno avrebbe scordato. 1.5rem e'
   un gradino gia' nel sistema (.card-catalogo h2). */
.blocco-mese h2 { font-family: 'Zalando Sans Expanded', sans-serif; color: var(--blu); font-size: 1.5rem; margin-bottom: .9rem; }

/* Badge offerta sopra la foto delle card: in BASSO a sinistra, a filo del bordo e a
   spigoli vivi. Stava in alto a sinistra perche' in basso c'era il chip della durata e
   il badge glielo copriva; ora la durata e' scesa sotto al titolo e quel posto e'
   libero — che e' anche il piu' visibile, ed e' il dato che fa fermare l'occhio. */
.card-tour figure { position: relative; }
.card-tour .badge-card {
  position: absolute; left: 0; bottom: 0; top: auto; right: auto; z-index: 2;
  border-radius: 0; padding: .45rem .9rem; font-size: .75rem;
}

/* Le griglie a due colonne di tour e destinazione stanno piu' sotto, in
   "IMPAGINAZIONI A DUE COLONNE": erano attributi style="" nell'HTML e da li'
   nessuna media query poteva raggiungerle. */

/* Barra admin di WordPress: la testata sticky scende sotto — ma SOLO dove la
   barra e' davvero fissa, cioe' da 783px in su, dove e' alta 32px.
   Da 782px in giu' WordPress la mette `position: absolute` e la fa scorrere via
   con la pagina: tenere l'offset lascia un varco vuoto sopra la testata, col
   contenuto che ci passa dentro. Lo vedono solo i redattori — i visitatori la
   barra non ce l'hanno — ed e' per questo che i collaudi da sloggato non lo
   trovano mai.
   La soglia era 600px ed era sbagliata: WordPress passa ad absolute a 782, non
   a 600. Misurato il 13/08/2026 da loggato: varco di 46px a 601, 650, 700 e
   782px; a 390 e 500 nessuno (li' la vecchia regola gia' arrivava); da
   sloggato mai, a nessuna larghezza. */
body.admin-bar .testata { top: 32px; }
@media (max-width: 782px) { body.admin-bar .testata { top: 0; } }
/* Chi si appiccica SOTTO la testata deve scendere degli stessi 32px, se no si
   infila dentro: misurato 33px di sovrapposizione sulla barra delle sezioni
   della pagina tour, da loggato, a 1440px. Sotto i 782 non serve, perche' li'
   la testata e' tornata a zero. */
@media (min-width: 783px) {
  body.admin-bar .ancore, body.admin-bar .barra-filtri { top: calc(5.75rem + 32px); }
}

/* Contenuti dal CMS (prose) — immagini mai fuori colonna */
.prose img { max-width: 100%; height: auto; border-radius: var(--raggio); }

/* ---------- Contenuti migrati dal vecchio sito (articoli e pagine) ---------- */
/* Il vecchio tema usava titoli molto grandi e testo giustificato: qui si riallineano
   al sistema tipografico v5 senza dover riscrivere 227 articoli a mano. */
.prose h2 { font-size: 1.6rem; margin: 2.2rem 0 .8rem; }
.prose h3 { font-size: 1.28rem; margin: 1.8rem 0 .6rem; }
.prose h4 { font-size: 1.1rem; margin: 1.5rem 0 .5rem; }
.prose p { margin: 0 0 1.1rem; }
.prose ul, .prose ol { margin: 0 0 1.2rem 1.3rem; }
.prose li { margin-bottom: .5rem; }
.prose img { display: block; margin: 1.6rem auto; }
.prose figure { margin: 1.6rem 0; }
.prose figcaption { font-size: .9rem; color: var(--testo-soft); text-align: center; margin-top: .5rem; }
.prose a { color: var(--blu); text-decoration: underline; text-underline-offset: 2px; }
/* display:block + overflow: una tabella migrata larga 602px (le fermate della
   navetta) trascinava di lato l'INTERA pagina, testata compresa, fino a +298px.
   Cosi' scorre lei dentro la propria scatola — stesso meccanismo di .scorri-x. */
.prose table {
  display: block; width: 100%; max-width: 100%;
  overflow-x: auto; -webkit-overflow-scrolling: touch;
  border-collapse: collapse; margin: 1.5rem 0;
}
.prose th, .prose td { border: 1px solid var(--hairline); padding: .6rem .8rem; text-align: left; }
.prose iframe, .prose video { max-width: 100%; }

/* ---------- Articoli del blog: la stessa mano del resto del sito ----------
   Le fotografie prendono il filo di bordo delle card, i capitoli respirano,
   i pallini delle liste sono oro e la prima riga delle tabelle migrate fa da
   intestazione (dal vecchio arrivano senza <th>, ma la prima riga lo è). */
.prose figure img, .prose > img, .prose p > img { border: 1px solid var(--hairline); }
.prose h2 { margin-top: 2.8rem; }
.prose li::marker { color: var(--oro); }
.prose table tr:first-child td { background: var(--blu-tinta); color: var(--blu); font-weight: 700; }
.prose blockquote {
  border-left: 3px solid var(--oro); padding: .2rem 0 .2rem 1.3rem;
  margin: 1.8rem 0; color: var(--testo-soft);
}

/* Il titolo di un articolo non è il titolo di una pagina: sta su una colonna
   da 46rem e i titoli del blog sono lunghi (qui uno andava su quattro righe
   alte 60px). Stessa famiglia, un gradino più basso. */
.titolo-articolo { font-size: clamp(1.9rem, 3.4vw, 2.5rem); line-height: 1.18; }

/* ---------- Articolo con la colonna di fianco (spunto dal vecchio) ----------
   Il testo resta sulle 46rem: è la misura di lettura, e allargarla per
   riempire lo schermo peggiora la lettura invece di migliorarla. La colonna
   accanto segue lo scorrimento (gli articoli sono lunghi) e sotto i 1080px
   scende in fondo. */
/* La colonna di fianco e' passata da 19 a 21rem il 21/08/2026, quando i
   riquadri sono diventati due: serviva un dito di respiro per tenere in una
   riga sola un titolo come "Potresti leggere anche…". Il totale resta sotto
   la misura del sito, e la colonna del testo non si muove — e' ferma a 46rem
   e la griglia e' centrata. */
.griglia-articolo {
  display: grid; grid-template-columns: minmax(0, 46rem) 21rem;
  gap: 3.5rem; align-items: start; justify-content: center;
}
/* Senza la colonna di fianco (riquadro spento in bacheca, o nessun altro
   articolo pubblicato) resta una colonna sola. Senza questa riga le due colonne
   ci sarebbero lo stesso, una vuota, e il testo si troverebbe spostato a
   sinistra di mezza colonna: sembrerebbe un guasto, non una scelta. */
.griglia-articolo.senza-lato { grid-template-columns: minmax(0, 46rem); }
.foto-articolo { border-radius: var(--raggio); overflow: hidden; border: 1px solid var(--hairline); }
/* NON PIU' APPICCICATA (21/08/2026). Con un riquadro solo seguiva lo
   scorrimento ed era comodo; con due la colonna e' alta piu' o meno come uno
   schermo di portatile, e position:sticky su una cosa piu' alta della finestra
   incolla il suo bordo di sopra e rende il fondo irraggiungibile: il secondo
   riquadro non si sarebbe potuto leggere fino in fondo. Meglio che scorra. */
.riquadro-lato {
  background: var(--bianco); border: 1px solid var(--hairline);
  border-radius: var(--raggio); padding: 1.6rem 1.5rem;
}
.riquadro-lato + .riquadro-lato { margin-top: 1.5rem; }
/* text-wrap: balance — se il titolo non ci sta in una riga, si spezza in due
   righe piene invece di lasciare una parola sola appesa sotto. */
.riquadro-lato h2 { font-size: 1.15rem; margin: .3rem 0 1.1rem; text-wrap: balance; }
.mini-articolo {
  display: grid; grid-template-columns: 5.5rem 1fr; gap: .9rem; align-items: start;
  padding: .9rem 0; border-top: 1px solid var(--hairline);
  text-decoration: none; color: var(--testo);
}
.mini-articolo:first-of-type { border-top: 0; padding-top: 0; }
.mini-articolo figure { border-radius: var(--raggio-s); overflow: hidden; }
/* height:auto è obbligatorio: WordPress stampa height="480" nell'attributo, e
   con un'altezza dichiarata il rapporto 4/3 non viene nemmeno guardato — la
   miniatura usciva alta 480px, una striscia verticale. */
.mini-articolo img { width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; display: block; }
/* Titoli a tre righe: i titoli del blog sono lunghi e per intero facevano un
   riquadro più alto dello schermo, che appiccicato non può scorrere. */
.mini-articolo h3 {
  font-size: .95rem; line-height: 1.32; color: var(--blu);
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
/* L'argomento al posto della data (21/08/2026), con la stessa veste che ha
   sulle schede grandi: stesso oro, stesse maiuscole, stessa spaziatura. La
   misura e' quella di .card-blog .argomento — la stessa informazione si deve
   riconoscere dovunque compaia, non somigliarsi e basta. */
.mini-articolo .argomento {
  display: block; margin-top: .35rem;
  font-size: .78rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  color: var(--oro-scuro);
}
.mini-articolo:hover h3 { text-decoration: underline; text-underline-offset: 2px; }
@media (max-width: 1080px) {
  .griglia-articolo { grid-template-columns: minmax(0, 46rem); gap: 2.5rem; }
  /* in fondo, dopo il testo: qui il riquadro è un invito a continuare a leggere */
  .riquadro-lato { background: var(--sabbia); border-color: var(--sabbia-bordo); }
}

/* Riquadro "Scopri i nostri viaggi" dentro gli articoli (utat_rifai_cta) */
.cta-viaggi {
  display: grid; grid-template-columns: 40% 1fr; align-items: stretch;
  margin: 2.6rem 0; background: var(--sabbia);
  border: 1px solid var(--sabbia-bordo); border-radius: var(--raggio); overflow: hidden;
}
.cta-viaggi-foto { background-size: cover; background-position: center; min-height: 13rem; }
.cta-viaggi-testo {
  display: flex; flex-direction: column; align-items: flex-start; justify-content: center;
  gap: 1.1rem; padding: 2.2rem 2rem;
}
.cta-viaggi .occhiello { margin: 0; }
/* Senza fotografia il riquadro non lascia mezzo spazio vuoto: una colonna
   sola, tutto in mezzo. */
.cta-viaggi.senza-foto { grid-template-columns: 1fr; }
.cta-viaggi.senza-foto .cta-viaggi-testo { align-items: center; text-align: center; padding: 2.4rem 2rem; }
/* Dentro .prose ogni link è blu e sottolineato: il bottone no, è un bottone.
   ".prose a" pesa più di ".btn-blu", quindi qui si pareggia il conto. */
.prose .btn { text-decoration: none; }
.prose .btn-blu { color: var(--bianco); }
.prose .btn-blu:hover { color: var(--bianco); }
@media (max-width: 560px) {
  .cta-viaggi { grid-template-columns: 1fr; }
  .cta-viaggi-foto { min-height: 12.5rem; }
  .cta-viaggi-testo { padding: 1.8rem 1.5rem; align-items: stretch; text-align: center; }
}

/* ---------- Chi siamo: il racconto accanto alla fotografia ----------
   Le due colonne non sono uguali: il testo prende piu' spazio dell'immagine,
   se no la riga di lettura si accorcia troppo e il racconto diventa una
   colonna di giornale. L'immagine si allinea in alto col primo paragrafo. */
.racconto { grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr); gap: 3rem; align-items: start; }
.foto-racconto { border-radius: var(--raggio); overflow: hidden; border: 1px solid var(--hairline); }
.foto-racconto img { display: block; width: 100%; height: auto; }
/* La prosa centrata dei blocchi di chiusura: il testo resta allineato a
   sinistra — centrare un paragrafo di sei righe lo rende difficile da leggere,
   perche' ogni riga comincia in un punto diverso — ma la colonna sta in mezzo. */
.centro-prosa { margin-left: auto; margin-right: auto; }
/* I due bottoni di chiusura: il pieno tiene in casa, il contorno porta fuori.
   In colonna sotto i 560px, cosi' restano due bersagli pieni invece di due
   mezzi bottoni affiancati. */
.azioni-chiusura {
  margin-top: 2rem; display: flex; flex-wrap: wrap; justify-content: center;
  align-items: center; gap: .9rem 1rem;
}
@media (max-width: 560px) {
  .azioni-chiusura { flex-direction: column; align-items: stretch; }
}
/* I valori su due colonne e non su quattro: i testi qui sono lunghi il doppio
   di quelli della home, e in quattro colonne stavano su 29 caratteri per riga —
   sotto i 45 la lettura si spezzetta. Su due colonne fanno 64. Allineati a
   sinistra: un paragrafo di sei righe centrato costringe l'occhio a cercare
   l'inizio di ogni riga in un punto diverso.
   Due classi nel selettore e non una: più avanti nel foglio c'è un'altra
   regola su .griglia-punti, e a parità di peso vince quella scritta dopo. */
.griglia-punti.griglia-valori { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2.6rem 3.5rem; }
.griglia-valori .punto { text-align: left; }
.griglia-valori .punto .icona { margin-left: 0; margin-right: 0; }
.griglia-valori .punto h3, .griglia-valori .punto h2 { font-size: 1.15rem; }
@media (max-width: 720px) { .griglia-punti.griglia-valori { grid-template-columns: minmax(0, 1fr); gap: 2.2rem; } }
/* Si impila a 1000px e non a 820: la fotografia e' orizzontale (1500x868), e
   fra gli 820 e i 1000 la colonna di destra la riduceva a 342px lasciando 300px
   di vuoto sotto — una fotografia piccola in mezzo al niente. Impilata prende
   tutta la larghezza ed e' finalmente grande quanto merita. */
@media (max-width: 1000px) {
  .racconto { grid-template-columns: minmax(0, 1fr); gap: 2rem; }
  /* la fotografia prima del testo su schermo stretto: apre la pagina */
  .racconto .foto-racconto { order: -1; }
  /* Impilato, il testo prendeva tutta la larghezza: misurato, faceva da 81 a
     122 caratteri per riga contro i 75 del limite. La fotografia resta larga,
     il testo no — sono due cose diverse e non devono avere la stessa misura. */
  .racconto .prose { max-width: var(--misura-lettura); }
}

/* ---------- Info tour ----------
   Sul vecchio sito erano cinque paragrafi in fila, distinti solo dal grassetto
   e da una puntina: per capire dove finiva l'assicurazione e dove cominciava la
   garanzia bisognava rileggere. Poi sono state cinque schede, una per voce.
   Dal 20/08/2026 sono blocchi di domande che si aprono (v. .fisarmonica-nuda
   piu' su): le voci sono passate da cinque a piu' di venti, e venti schede
   piene una sotto l'altra sono una pagina che nessuno scorre fino in fondo.
   Le schede se ne sono andate col loro foglio di stile: restano solo i due
   pezzi che vivono dentro la risposta aperta, l'elenco puntato e il bottone. */
/* Larga quanto il titolo e quanto i blocchi sotto, come il testo d'apertura di
   /destinazioni/ (.testo-apertura-mete): stretta a misura di lettura faceva
   sembrare piu' stretta tutta la pagina. */
.intro-info { margin-top: 1.5rem; text-align: center; }
.voce-info-punti { margin-top: 1.1rem; }
.voce-info-punti li { color: var(--testo-soft); }
.voce-info-azioni { margin-top: 1.5rem; display: flex; flex-wrap: wrap; align-items: center; gap: .9rem 1.1rem; }

/* Lo stacco fra i gruppi del catalogo. Sull'ultimo si toglie: se no la fascia
   finisce con 4,5rem di vuoto sotto l'ultima fila di schede, in piu' alla
   spaziatura che la fascia ha gia' di suo. */
#gruppi-tour .gruppo-tip { margin-bottom: 4.5rem; }
#gruppi-tour .gruppo-tip:last-child { margin-bottom: 0; }
/* Stesso stacco fra i blocchi di /info-tour/. Solo lo stacco: la riga era
   stata aggiunta anche li' e il marketing l'ha scartata (20/08/2026).
   A dividere un blocco dall'altro bastano 4,5rem di aria e il titolo. */
#blocchi-info .blocco-info { margin-bottom: 4.5rem; }
#blocchi-info .blocco-info:last-child { margin-bottom: 0; }

/* LA RIGA FRA UNA TIPOLOGIA E L'ALTRA. La stessa, identica, della pagina
   destinazione (vedi "LA RIGA FRA UNA TIPOLOGIA E L'ALTRA" piu' su, sui
   .gruppo-tour): stesso colore sabbia, stesso spessore, e messa nello stesso
   punto — sulla testa di sezione e non sul blocco. Due righe che dividono la
   stessa cosa in due pagine devono essere la stessa riga, altrimenti si nota
   che il sito e' stato fatto in due momenti.
   Sulla testa di sezione anche per un motivo pratico: cosi' e' larga quanto le
   schede, e l'imbottitura sopra fa cadere la riga a meta' dello stacco fra i
   due gruppi invece che attaccata al titolo di sotto.
   La classe .primo-visibile la mette il JavaScript sul primo gruppo rimasto in
   pagina: filtrando, i gruppi vuoti spariscono con display:none ma restano nel
   documento, e il "+" del foglio di stile li conta lo stesso — senza questa
   correzione, filtrando comparirebbe una riga appesa sotto ai filtri con niente
   sopra. */
#gruppi-tour .gruppo-tip + .gruppo-tip > .testa-sezione {
  border-top: 1px solid var(--sabbia-bordo);
  padding-top: 4.5rem;
}
#gruppi-tour .gruppo-tip.primo-visibile > .testa-sezione { border-top: 0; padding-top: 0; }

/* Quando dopo il rigo d'oro c'e' ancora qualcosa, la distanza era zero: il
   filetto sembrava barrare la prima riga del sottotitolo. Succedeva anche sui
   reparti della pagina contatti. Vale solo se qualcosa segue davvero, cosi' le
   sezioni che finiscono col filetto non cambiano di un pixel. */
.testa-sezione .rigo-oro + .sottotitolo,
.testa-sezione .rigo-oro + p { margin-top: 1.1rem; }

/* L'elenco delle altre tipologie: ogni voce sta su una riga sola col suo
   separatore attaccato, cosi' un nome lungo non si spezza a meta' e il punto
   non comincia mai una riga da solo. */
.elenco-tipologie { display: flex; flex-wrap: wrap; justify-content: center; column-gap: .9rem; row-gap: .15rem; }
.elenco-tipologie span { display: inline-flex; align-items: baseline; gap: .9rem; white-space: nowrap; }
.elenco-tipologie span:not(:last-child)::after { content: "·"; opacity: .5; }
/* Sul telefono le voci vanno a capo comunque (quattro voci su tre righe) e i
   separatori restavano appesi a fine riga: "Fly & Drive (32) ·" e poi a capo.
   Un "·" ha senso solo in mezzo a una riga continua: in colonna, una voce per
   riga e niente puntini — come l'indice delle tipologie e il conteggio dei
   gruppi, stessa regola dei 760px. */
@media (max-width: 760px) {
  .elenco-tipologie { flex-direction: column; }
  .elenco-tipologie span { justify-content: center; }
  .elenco-tipologie span::after { display: none; }
}

/* Il richiamo sotto al titolo di un gruppo del catalogo: porta alla pagina che
   racconta quella tipologia. Bersaglio da 48px perche' e' un collegamento che
   sta per conto suo, non dentro un paragrafo. */
/* Il collegamento dentro veste .link-freccia, la stessa di "Informazioni utili
   complete" sulle destinazioni: maiuscoletto blu col rigo oro, non una frase
   sottolineata come in un paragrafo — qui sta per conto suo, sotto un titolo.
   (La veste ad hoc che c'era prima, blu 600 con la sottolineatura del browser,
   e' stata bocciata a vista da Vlad il 14/08.) */
.richiamo-gruppo { margin-top: .5rem; }
.richiamo-gruppo .ico { flex: 0 0 auto; width: 1.05rem; height: 1.05rem; }

/* Formato e peso DENTRO il collegamento, non accanto: fuori si vedevano
   benissimo, ma chi si fa leggere il solo elenco dei link sentiva solo
   l'etichetta e si ritrovava 1,6 MB in una scheda aperta da sola.
   In tondo e minuscolo: è una precisazione dentro il nome, non una seconda
   etichetta che compete con la prima. */
.btn-nota {
  font-weight: 400; letter-spacing: normal; text-transform: none;
  font-size: .92em; opacity: .8; margin-left: .4em; white-space: nowrap;
}
/* Da telefono il bottone e' a tutta larghezza e l'etichetta piu' la nota non
   ci stanno su una riga. Invece di lasciarle spezzare dove capita — che si
   legge come una cosa rotta — la nota scende su una riga sua, centrata: due
   righe volute, non due righe subite. */
@media (max-width: 560px) {
  .btn-solo { flex-wrap: wrap; }
  /* text-align, non solo flex-basis: l'item prende tutta la riga ma il testo
     dentro partiva da sinistra — la "riga sua, centrata" promessa qui sopra
     usciva fuori asse rispetto all'etichetta (visto su info-tour a 390px). */
  .btn-solo .btn-nota { flex-basis: 100%; margin-left: 0; margin-top: .1rem; text-align: center; }
  /* bersaglio unico a tutta larghezza: il pubblico è over-60 */
  .voce-info-azioni { gap: .7rem; }
  .voce-info-azioni .btn { width: 100%; }
}
/* Sotto i 380px le etichette in maiuscoletto spaziato non ci stanno su una
   riga: un bottone che si spezza non si legge come una scelta di stile, si
   legge come una cosa rotta. Si stringe la spaziatura, non il corpo. */
@media (max-width: 380px) {
  .btn-solo, .btn-grande { letter-spacing: .04em; font-size: .82rem; }
}
/* A 320px il riquadro del modulo si teneva 67px di margine interno su 288 di
   larghezza: al bottone ne restavano 219 e "Invia il messaggio" andava su due
   righe. Non era il bottone a essere largo, era la scatola a essere golosa. */
@media (max-width: 420px) {
  .pannello { padding: 1.4rem 1.1rem; }
}

/* ============================================================
   MOBILE — correzioni misurate su Chrome a 320/360/390/414/768px
   Ogni regola qui sotto risponde a un problema MISURATO, non supposto.
   Vincolo di fondo (BRIEF-DESIGN.md): il pubblico e' 59% over-60 →
   testo di lettura mai sotto 17px, aree da toccare almeno 48px.
   Nota: la radice sta a 16px, quindi 17px = 1.0625rem. Scrivere .95rem
   (=15.2px) sembra "quasi 17" e invece e' sotto il pavimento: e' cosi'
   che erano nate .riga-card e .quando-card.
   ============================================================ */

/* ---------- Impaginazioni a due colonne ----------
   Erano scritte come style="" dentro l'HTML. Uno stile inline batte qualunque
   selettore del foglio di stile, quindi restavano a due colonne su ogni schermo:
   su /stati-uniti/ il pannello "informazioni utili" finiva in una colonna da
   120px e la pagina sborava a 494px su un telefono da 414. */
.griglia-perche     { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 3rem; align-items: start; }
/* Senza il riquadro "Informazioni utili" (destinazione senza dati: quasi tutte
   le sotto-mete) la griglia va a una colonna, ma il testo NON si allarga a
   tutto il contenitore: la misura di riga resterebbe fuori dalla regola dei
   45-75 caratteri. */
.griglia-perche.senza-info { grid-template-columns: minmax(0, 1fr); }
.griglia-perche.senza-info .prose { max-width: 70ch; }
.griglia-testa-tour { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 3rem; align-items: stretch; }
.griglia-breve      { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); gap: 3rem; align-items: start; }
.foto-perche        { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 1rem; margin-top: 1.8rem; }
@media (max-width: 880px) {
  .griglia-perche, .griglia-testa-tour, .griglia-breve { grid-template-columns: 1fr; gap: 2rem; }
}
/* Le due foto del blocco "perche' viaggiare": a fianco stanno strette e alte come
   francobolli (misurato: 111px e 90px di larghezza a 394). Sotto i 560 vanno in fila. */
@media (max-width: 560px) { .foto-perche { grid-template-columns: 1fr; } }

/* ---------- Griglie che non scendono sotto la propria misura minima ----------
   repeat(auto-fill, minmax(19rem, 1fr)) tiene la colonna a 19rem (304px) anche
   quando il contenitore ne ha 272: la card esce dallo schermo. min(...,100%)
   lascia che la traccia si stringa quanto serve. */
.griglia-card       { grid-template-columns: repeat(auto-fill, minmax(min(19rem, 100%), 1fr)); }
.griglia-card-grande{ grid-template-columns: repeat(auto-fill, minmax(min(22rem, 100%), 1fr)); }
.griglia-tipologie  { grid-template-columns: repeat(auto-fit,  minmax(min(12.5rem, 100%), 1fr)); }
.griglia-cataloghi  { grid-template-columns: repeat(auto-fill, minmax(min(26rem, 100%), 1fr)); }
.griglia-punti      { grid-template-columns: repeat(auto-fit,  minmax(min(14rem, 100%), 1fr)); }
/* Variante a card larghe dell'indice destinazioni e del "cosa vedere" */
.griglia-tip-larga  { grid-template-columns: repeat(auto-fill, minmax(min(19rem, 100%), 1fr)); }

/* ---------- Apertura delle pagine di catalogo ---------- */
/* 52rem faceva 93 caratteri per riga: e' il testo di presentazione della
   tipologia, cioe' il piu' letto della pagina. */
.testo-catalogo { max-width: var(--misura-lettura); margin-top: 1.4rem; }

/* Un paragrafo dell'apertura che contiene SOLO un collegamento diventa un
   bottone: e' il modo del vecchio sito di mettere "Scopri i punti di partenza"
   sotto il testo, senza bisogno di campi in piu' in bacheca. */
.testo-catalogo p > a:only-child:not([href^="#"]) {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 3rem; padding: .7rem 1.6rem;
  border: 1px solid var(--blu); border-radius: 999px;
  color: var(--blu); font-weight: 600; text-decoration: none;
  transition: background .18s ease, color .18s ease;
}
.testo-catalogo p > a:only-child:not([href^="#"]):hover { background: var(--blu); color: var(--bianco); }

/* ---------- Barra dei filtri (catalogo, partenze, destinazione) ---------- */
.barra-filtri {
  position: sticky; top: 5.75rem; z-index: 40;
  background: var(--bianco); border-bottom: 1px solid var(--hairline); padding: 1rem 0;
}
/* Sulla pagina destinazione la barra dei filtri fa blocco unico coi tre blocchi di tour
   qui sotto: fondo bianco come loro e NESSUNA riga, ne' sopra ne' sotto. A separare i
   blocchi ci pensa il cambio di fondo (sabbia sopra, sabbia sotto) e, fra una tipologia
   e l'altra, la riga sabbia qui sopra in "Blocchi di tour".
   Solo qui: nel catalogo e nel calendario partenze la barra resta com'era. */
#cerca-tour {
  background: var(--bianco);
  border-bottom: 0; border-top: 0;
}
/* Nel catalogo la barra dei filtri fa blocco unico con l'apertura sopra e con
   l'indice delle tipologie sotto: una fascia sabbia sola, e i tour sotto
   bianchi (chiesto dal marketing — prima era il contrario).
   Niente riga in fondo: divideva sabbia da bianco, adesso cadrebbe in mezzo al
   sabbia e taglierebbe la fascia in due. Quando la barra si stacca e scorre
   sopra ai tour non serve comunque: a staccarla basta il cambio di colore. */
#filtri-catalogo { background: var(--sabbia); border-bottom: 0; }
.barra-filtri-riga { display: flex; gap: 1rem; flex-wrap: wrap; align-items: end; }
.campo-filtro { min-width: 14rem; }
.campo-filtro-largo { min-width: 18rem; flex: 1; max-width: 26rem; }
.conta-filtri { margin-left: auto; align-self: center; }

/* Il conteggio accanto al titolo di un gruppo. Era scritto in riga nel modello,
   cioe' lo stesso valore ripetuto due volte a mano: qui e' una regola sola. */
.conta-gruppo { font-size: 1rem; font-weight: 500; color: var(--testo-soft); font-family: Inter, sans-serif; }

/* ---------- L'indice delle tipologie ----------
   Il catalogo completo e' alto 21.700 pixel: per arrivare all'ultimo gruppo
   bisognava scorrere tutto. Sono ancore vere, quindi funzionano anche senza
   JavaScript. Non e' appiccicato: e' un indice, si usa una volta — e la barra
   dei filtri sopra ne prende gia' 118px di schermo. */
/* Fondo sabbia come l'apertura e i filtri: l'indice chiude quella fascia, e i
   tour sotto sono bianchi. Nessuna riga in fondo — a separare la fascia dai
   tour c'e' gia' il cambio di colore, e una riga in piu' sarebbe un segno che
   non divide niente. */
.indice-tipologie { background: var(--sabbia); padding: .9rem 0 1.1rem; }
.indice-tipologie .contenitore { display: flex; flex-wrap: wrap; gap: .3rem 1.6rem; align-items: center; }
.indice-tipologie a {
  display: inline-flex; align-items: baseline; gap: .45rem; min-height: 48px;
  color: var(--blu); font-weight: 600; text-decoration: none;
  border-bottom: 2px solid transparent;
}
.indice-tipologie a:hover, .indice-tipologie a:focus-visible { border-bottom-color: var(--oro); }
.indice-tipologie a span {
  font-weight: 500; font-size: .88rem; color: var(--testo-soft); font-variant-numeric: tabular-nums;
}
.indice-tipologie a[hidden] { display: none; }
/* Il titolo del gruppo non deve finire sotto alle due barre appiccicate
   (testata 93px + filtri 118px): misurato, servono 211px. */
.gruppo-tip { scroll-margin-top: 14rem; }
@media (max-width: 760px) {
  /* la barra filtri non e' piu' appiccicata, resta solo la testata */
  .gruppo-tip { scroll-margin-top: 7rem; }
  /* In colonna stretta il flusso a capo faceva del sommario un paragrafo:
     righe da due, da due, da una — 178+141 / 113+183 / 178px, misurate a
     390 — cioe' testo sparso, non una navigazione. Un indice sul telefono
     e' una colonna: una tipologia per riga, il numero incolonnato a destra
     (tabular-nums c'e' gia'), il filetto hairline a legare le righe. */
  .indice-tipologie .contenitore { display: block; }
  .indice-tipologie a { display: flex; align-items: center; }
  .indice-tipologie a span { margin-left: auto; }
  /* Il filetto sta FRA le righe, mai sopra la prima — e la prima e' la prima
     VISIBILE: con un filtro attivo le voci svuotate spariscono ([hidden]) e
     il bordo non deve restare orfano su chi viene dopo. */
  .indice-tipologie a:not([hidden]) ~ a { border-top: 1px solid var(--sabbia-bordo); }
}

/* NON PIU' APPICCICATA finche' non sta in una riga sola.
   Prima la soglia era 760px, col ragionamento giusto ma il numero vecchio:
   testata + barra filtri lasciavano meno di due terzi di schermo al contenuto.
   Misurata di nuovo il 20/08/2026, con la casella di ricerca in piu': la barra
   sta su UNA riga solo da 1180px (117px); a 800 ne chiede 218 e a 1024 ne chiede
   185, e appiccicata mangiava fino a 311px con la testata — il 30% di un iPad in
   verticale. Sotto i 1180 resta dov'e', in cima ai risultati: la si ritrova
   scorrendo su, e intanto lo schermo e' tutto per i viaggi.
   1180 e' la stessa soglia del menu a panino: sotto, la testata si semplifica. */
@media (max-width: 1179px) {
  .barra-filtri { position: static; }
}
@media (max-width: 760px) {
  .barra-filtri-riga { flex-direction: column; align-items: stretch; gap: .75rem; }
  .campo-filtro, .campo-filtro-largo { min-width: 0; max-width: none; width: 100%; }
  .barra-filtri .btn { width: 100%; }
  .conta-filtri { margin-left: 0; text-align: center; }
}

/* ---------- Testo di lettura: il pavimento dei 17px ---------- */
/* (.card-tour .riga-card stava qui: la riga descrittiva e' uscita dalle card) */
.card-tour .quando-card,
.card-tipologia p,
.card-recensione blockquote,
.fascia-emozione .sotto,
.punto p,
.info-viaggio .val,
.preventivatore-testa p,
.testata.aperta .tel-nel-menu span,
.pie { font-size: 1.0625rem; }
/* Il programma giorno per giorno e' il testo piu' lungo del sito: stava a 1rem
   (16px), cioe' proprio sotto il pavimento, e proprio dove si legge di piu'. */
.programma-acc .contenuto p { font-size: 1.0625rem; line-height: 1.65; }
/* Gli articoli migrati dal vecchio sito usano gli h5 come sotto-titoli di
   paragrafo: senza una regola prendevano il default del browser (14px). */
.prose h5, .prose h6 { font-size: 1.0625rem; font-weight: 700; color: var(--blu); margin: 1.4rem 0 .5rem; }
/* Telefono ed email in mezzo a una frase (avviso del preventivatore, note piccole,
   testi, risposte delle FAQ): non possono diventare bottoni senza sfasciare la riga.
   Con .35rem di riempimento si fermavano a 34–39px: ancora mancabili, misurato.
   L'imbottitura porta il riquadro toccabile a 44–51px e il margine negativo la
   annulla nel flusso: la riga di testo resta dov'era, l'area che accetta il dito
   deborda sopra e sotto, su testo che tanto non si clicca. */
.avviso-adulti a, .nota-piccola a, .prose a[href^="tel:"], .prose a[href^="mailto:"],
.itinerario a[href^="tel:"], .itinerario a[href^="mailto:"] {
  display: inline-block; padding: .72rem .2rem; margin: -.45rem -.1rem;
}

/* ---------- Aree da toccare: almeno 48px ----------
   Misurati sotto soglia: il bottone del menu (45x44), le voci del pie' di pagina
   (91x19), le briciole (40x17), i mini-bottoni (128x38), le spunte del
   preventivatore (13x13). Su un dito sono tutti bersagli mancabili. */
.apri-menu { min-width: 48px; min-height: 48px; display: none; align-items: center; justify-content: center; }
@media (max-width: 1179px) { .apri-menu { display: flex; } }
.btn-mini { min-height: 48px; }
/* Il "Preventivo" dentro la tabella compatta stava a 2.4rem (38px). Quel selettore
   e' piu' specifico del mio, quindi vinceva a prescindere dall'ordine: qui lo
   pareggio. Sul desktop resta compatto, dove si punta col mouse e va bene. */
/* 1024 e non 760: anche un tablet si usa col dito, e li' la tabella compatta
   c'e' ancora. Sopra, si punta col mouse e il bottone puo' restare basso. */
@media (max-width: 1024px) {
  .tab-partenze.snella .btn-mini { min-height: 48px; padding: .5rem 1.1rem; }
}
.briciole a,
.link-viaggio { display: inline-flex; align-items: center; min-height: 48px; }
/* Il link-freccia ha il rigo oro sotto: coi 48px centrati il rigo si staccava di
   12px dal testo e sembrava un divisorio. L'altezza gliela da' l'imbottitura,
   sbilanciata verso l'alto, cosi' il rigo resta attaccato alle lettere. */
.link-freccia { padding: 1.05rem 0 .3rem; }
/* Nel pie' i link stanno in colonna: a tutta larghezza il bersaglio e' l'intera
   riga, non le poche lettere della parola ("Blog" era 36px di lato). */
.pie-griglia a { display: flex; align-items: center; min-height: 48px; }
.pie-griglia li { margin-bottom: 0; }
/* Il logo e' il ritorno alla home: era alto 38px perche' il link stringeva
   sull'immagine. */
.logo { display: inline-flex; align-items: center; min-height: 48px; }
/* Il numero grande della fascia "chiamaci": 42px di altezza, ed e' il gesto piu'
   importante della pagina per chi ha 70 anni. */
.tel-grande { display: inline-flex; align-items: center; min-height: 48px; }
/* Spunte e pallini dei moduli: 13x13 non si centrano col dito. */
input[type="radio"], input[type="checkbox"] { width: 24px; height: 24px; accent-color: var(--blu); }
/* Solo le OPZIONI del preventivatore (data, persone, camere, aeroporto): il
   48 di bersaglio senza toccare il loro flex, che ognuna si disegna da se'.
   Prima la regola prendeva TUTTE le label del dialogo, comprese quelle del
   modulo in fondo: la riga della privacy diventava un flex e il testo si
   spezzava a colonne — lo stesso incidente gia' documentato (e curato) piu'
   sotto per la pagina Contatti, riportato dentro dalla porta del dialogo. */
.scelta-data label, .scelta-aeroporto label { min-height: 48px; }
/* Consenso privacy: la spunta e' piccola, ma l'etichetta accanto e' cliccabile
   (for="c-privacy"), quindi il bersaglio vero e' tutta la riga. */
.campo-gruppo.consenso { display: flex; gap: .7rem; align-items: flex-start; }
.campo-gruppo.consenso input { margin-top: .2rem; flex-shrink: 0; }
/* Niente display:flex sull'etichetta: dentro c'e' testo e un collegamento, e il
   flex li trasformava in due colonne — "Ho letto l'" andava a capo per conto
   suo e "informativa privacy" finiva incolonnata di fianco. Blocco normale, e
   i 48px di bersaglio li fa il padding. */
.campo-gruppo.consenso label { min-height: 48px; padding: .55rem 0; }
/* Il collegamento all'informativa dentro la label: misurato 154x20px — e il
   dito che lo manca spunta la casella del consenso, che e' il tocco sbagliato
   piu' costoso della pagina. Il padding allarga l'area del tocco a ~46px e il
   margine negativo la ripaga: il testo intorno non si muove di un pixel. */
.campo-gruppo.consenso label a { display: inline-block; padding: .65rem .15rem; margin: -.65rem -.15rem; }
/* Il consenso facoltativo staccato dall'obbligatorio: attaccati si leggono come
   un blocco solo e si spuntano tutti e due senza guardare. */
.campo-gruppo.consenso-facoltativo { margin-top: -.4rem; padding-top: .9rem; border-top: 1px solid var(--hairline); }

/* "Sei un: cliente privato / agenzia viaggi" — la prima domanda del modulo.
   Due sole voci: si mostrano tutte e due invece di nasconderle in una tendina. */
.scelta-chi { border: 0; padding: 0; margin-bottom: 1.3rem; }
.scelta-chi legend { padding: 0; margin-bottom: .5rem; }
.scelta-riga { display: flex; align-items: center; gap: .6rem; min-height: 48px; cursor: pointer; }
.scelta-riga input { flex-shrink: 0; }

/* I reparti: nome, email e numero diretto. Non e' una griglia di schede — sono
   quattro voci di un elenco, tenute insieme da un filetto e non da un riquadro,
   come tutto il resto del sito. */
.griglia-reparti {
  list-style: none; display: grid; gap: 1.6rem 2.5rem;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  border-top: 1px solid var(--sabbia-bordo); padding-top: 1.8rem;
}
.reparto h3 { font-size: 1.08rem; line-height: 1.3; margin-bottom: .3rem; }
.reparto-riga {
  display: flex; align-items: center; gap: .5rem; min-height: 48px;
  color: var(--blu); text-decoration: none; word-break: break-word;
}
.reparto-riga:hover span, .reparto-riga:focus-visible span { text-decoration: underline; }
.reparto-riga .ico { flex: 0 0 auto; color: var(--oro-scuro); }

/* Telefono ed email nella pagina contatti: sono l'azione principale di quella
   pagina, e stavano a 24-29px di altezza. */
.punto-contatto {
  display: inline-flex; align-items: center; min-height: 48px;
  font-size: 1.2rem; font-weight: 700; text-decoration: none; color: var(--blu);
}
.punto-contatto-grande { font-size: 1.5rem; font-weight: 800; }

/* La barra CTA su schermo stretto sta piu' su, nel blocco @media 700px della
   barra-sticky (arrivato da main): titolo via, prezzo su una riga, telefono a
   sola cornetta. Il vecchio blocco a 480px che nascondeva il bottone telefono
   e' stato tolto nel merge: risolveva lo stesso problema, ma da qui avrebbe
   scavalcato la soluzione di main proprio sui telefoni. */

/* ---------- Testata su schermi molto stretti ----------
   A 320px logo + telefono + bottone menu chiedevano 338px: 18 in piu' di quanti
   ce ne fossero, e tutta la pagina scorreva di lato. */
@media (max-width: 420px) {
  .contenitore { padding: 0 1rem; }
  .testata-riga { gap: .75rem; min-height: 4.75rem; }
  .logo img { height: 38px; }
  .tel-testata small { display: none; }
  .tel-testata { font-size: .95rem; }
}
/* In testata, da 1179px in giu', il tema mostra la sola icona del telefono
   (regola piu' su: .tel-testata .numero { display: none }). Un'icona da 24px non
   e' un bersaglio: qui il tocco torna a 48x48. Il numero per esteso resta nella
   fascia "chiamaci", nel pie' di pagina e nei contatti. */
@media (max-width: 1179px) {
  .tel-testata { min-width: 48px; min-height: 48px; justify-content: center; }
}

/* ---------- Titoli e occhielli: mai piu' larghi dello schermo ----------
   .display con clamp fino a 4.2rem su una parola lunga non va a capo e allarga
   il contenitore (misurato in home: 380px su viewport da 320). */
h1, h2, h3, .display { overflow-wrap: break-word; }
/* Anche il testo dei contenuti migrati: catene di &nbsp; incollate da Word
   ("Holiday Inn, Intercontinental, Sheraton…") e URL scritti nudi formano
   "parole" da 440px che facevano scorrere di lato le pagine informazioni-utili.
   break-word e NON break-all: le parole normali restano intere. */
.prose p, .prose li, .prose td, .prose th, .prose dd { overflow-wrap: break-word; }
@media (max-width: 420px) {
  .display { font-size: clamp(2rem, 9vw, 2.6rem); }
  h1 { font-size: clamp(1.9rem, 8.5vw, 2.5rem); }
}

/* ---------- Indice destinazioni diviso per continente (?prova=2) ----------
   Nome del continente a sinistra, frecce a destra, sulla stessa riga: nel sito le
   frecce del carosello stanno da sole sopra la fila, allineate a destra. */
.blocco-continente + .blocco-continente { margin-top: 3.4rem; }
.testa-continente {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; margin-bottom: 1.1rem;
}
.testa-continente h2 { font-size: clamp(1.5rem, 2.6vw, 2rem); }
.testa-continente .carosello-frecce { margin-bottom: 0; flex: none; }
/* Le card qui scorrono come in home, quindi tengono la loro larghezza fissa: e'
   .griglia-dest (la versione in produzione) che gliela toglie. Niente da aggiungere. */

/* ============================================================
   LA PAGINA DEL TOUR SUL TELEFONO
   Misurata a 320 / 390 / 414 px su http://localhost/utat/ (Chrome, dito attivo).
   Ogni regola qui sotto risponde a un numero, e vale SOLO da 720px in giu':
   la versione da scrivania resta quella approvata, non la si tocca.
   ============================================================ */

/* .eti-cella: il nome della colonna scritto dentro la cella. Da scrivania la
   colonna ce l'ha gia' in testa alla tabella, quindi qui non si vede. */
.eti-cella { display: none; }
.scorri-tab { overflow-x: auto; }

/* ---------- Le partenze: righe di tabella che diventano schede ----------
   A 390px la tabella chiedeva 704px dentro un guscio da 358: suppl. singola,
   disponibilita' e il bottone "Preventivo" (bordo destro a 720px, cioe' 330
   oltre lo schermo) esistevano solo per chi indovinava di trascinare di lato.
   Niente piu' scorrimento orizzontale: una scheda per data, tutto in colonna.
   La soglia e' 880 e non 720 perche' la seconda tabella, quella con la colonna
   aeroporto, ne chiede 774: a 768 — l'iPad in verticale — scorreva ancora.
   880 e' anche il punto in cui la testata del tour va gia' a colonna singola. */
@media (max-width: 880px) {
  .scorri-tab { overflow-x: visible; }
  /* Larghe quanto lo schermo sul telefono, una colonna ordinata sul tablet:
     senza tetto, a 832px, "Aeroporto" e "Milano Malpensa" finivano ai due
     capi opposti di una riga vuota in mezzo. */
  .a-schede, .vedi-tutte { max-width: 34rem; margin-left: auto; margin-right: auto; }
  .a-schede, .a-schede tbody, .a-schede tr, .a-schede td { display: block; }
  .a-schede thead { display: none; }
  /* Il `display: block` qui sopra vince sull'attributo `hidden` del browser
     (stile d'autore batte quello dello user-agent): senza questa riga, sul
     telefono le righe che il filtro nasconde con tr.hidden restavano visibili
     e la ricerca delle fermate/partenze sembrava non filtrare (Vlad, 28/08). */
  .a-schede tr[hidden], .a-schede td[hidden] { display: none; }
  .a-schede,
  .a-schede.compatta { background: none; border: 0; border-radius: 0; overflow: visible; }

  .a-schede tr {
    background: var(--bianco);
    border: 1px solid var(--hairline); border-radius: var(--raggio);
    padding: 1.05rem 1.15rem 1.15rem;
  }
  .a-schede tr + tr { margin-top: .9rem; }
  /* La tinta al passaggio del mouse su una scheda e' una macchia: sul telefono
     il mouse non c'e', ma il tocco la fa comparire lo stesso. */
  .a-schede tbody tr:hover { background: var(--bianco); }
  /* .tab-partenze.a-schede e non .a-schede: `.tab-partenze.snella td` ha due
     classi e vinceva su una, quindi le celle si tenevano 1rem di margine
     laterale DENTRO la scheda, che ne ha gia' 1,15. Non si vedeva sulle voci
     (hanno una regola loro, piu' avanti) ma si vedeva sulla testa: la data —
     e da oggi la citta' — stava 16px piu' a destra delle etichette sotto.
     Misurato a 390px, non dedotto (26/08/2026). */
  .tab-partenze.a-schede td { padding: 0; border: 0; }

  /* La prima cella fa da titolo della scheda: la data sulle partenze, la citta'
     sulle fermate della navetta.
     Si chiamava .cella-quando, ed era un nome che diceva il CONTENUTO invece del
     RUOLO: appena il componente ha servito una seconda tabella (26/08/2026) quel
     nome mentiva. .cella-testa vale per tutt'e due — e' la testa della scheda. */
  .a-schede .cella-testa {
    padding-bottom: .85rem; margin-bottom: .35rem;
    border-bottom: 1px solid var(--hairline);
  }
  /* Il nowrap della cella-data (giusto sulle date secche, da scrivania) qui
     dentro fa sbordare la pagina coi PERIODI: "dal 1 Giugno al 31 Agosto
     2026" sono 126px oltre il bordo, misurati a 393. Nelle schede si va a capo. */
  .a-schede .cella-data { white-space: normal; }
  .a-schede .cella-testa strong {
    display: block;
    font-family: 'Zalando Sans Expanded', sans-serif;
    font-size: 1.3rem; font-weight: 600; color: var(--blu); line-height: 1.25;
  }
  .a-schede .cella-testa .nota-piccola { display: block; margin-top: .3rem; }

  /* Le voci: nome a sinistra, valore a destra, una riga per voce */
  .a-schede td:not(.cella-testa):not(.cella-azione):not(.cella-viaggio):not(.cella-punto) {
    display: flex; align-items: baseline; justify-content: space-between;
    gap: 1rem; padding: .5rem 0;
  }
  /* IL PUNTO DI CARICO NON E' UN VALORE, E' UNA FRASE (26/08/2026).
     Messo a destra come gli altri, "Uscita casello autostradale EST - Distr.Eni
     dentro Autoparco" usciva su tre righe allineate a destra: il margine
     sinistro frastagliato e l'occhio che ogni riga deve ricercare da capo. Qui
     va sotto la sua etichetta, a tutta larghezza e allineato a sinistra —
     stessa scelta gia' fatta per .cella-viaggio sul calendario, e per lo stesso
     motivo. A 390px passa da 3 righe strette a 2 righe piene. */
  .a-schede .cella-punto { padding: .6rem 0 .5rem; }
  .a-schede .cella-punto .eti-cella { margin-bottom: .1rem; }
  .a-schede .cella-punto .val-cella { display: block; text-align: left; }
  /* Nel calendario partenze la scheda ha anche il VIAGGIO: non e' una coppia
     nome/valore (un titolo lungo allineato a destra sarebbe illeggibile), e'
     la seconda riga del titolo — collegamento pieno, tipologia sotto. */
  .a-schede .cella-viaggio { padding: .6rem 0 .15rem; }
  /* E' il collegamento principale della scheda: tocco a ~48px col padding
     rimborsato dal margine, il disegno non si muove. */
  .a-schede .cella-viaggio .link-viaggio {
    font-size: 1.0625rem; display: inline-block;
    padding: .75rem .2rem; margin: -.6rem -.2rem;
  }
  .a-schede .cella-viaggio .nota-riga { font-size: 1.0625rem; margin-top: .2rem; }
  .a-schede td:not(.cella-testa):not(.cella-azione) + td { border-top: 1px solid var(--hairline); }
  /* Il filetto fra una voce e l'altra deve attraversare tutta la scheda: sul
     punto di carico, che ora e' un blocco e non una riga in flex, senza questo
     restava lungo quanto la sua etichetta. */
  .a-schede .cella-punto + td, .a-schede td + .cella-punto { border-top: 1px solid var(--hairline); }
  /* Il nome della voce non deve ereditare ne' il carattere ne' il blu del prezzo:
     e' un'etichetta, e sta sul pavimento dei 17px come il resto del testo letto. */
  .a-schede .eti-cella {
    display: block; flex: 0 0 auto;
    font-family: 'Inter', sans-serif; font-size: 1.0625rem; font-weight: 400;
    color: var(--testo-soft); letter-spacing: 0; text-transform: none; white-space: normal;
  }
  .a-schede .val-cella { text-align: right; }
  .a-schede .prezzo .val-cella { font-size: 1.35rem; }
  .a-schede .prezzo .barrato { display: block; font-size: 1rem; margin-right: 0; }

  /* Il bottone del preventivo: largo quanto la scheda, in fondo, dove finisce
     la lettura. Se la partenza e' esaurita la cella e' vuota e sparisce. */
  .a-schede .cella-azione { margin-top: 1rem; }
  .a-schede .cella-azione:empty { display: none; }
  .a-schede.snella .cella-azione .btn-mini {
    width: 100%; min-height: 3.25rem; font-size: .92rem; padding: .85rem 1.2rem;
  }

  /* "Vedi tutte le partenze" non e' piu' il fondo della tabella: e' un blocco a se' */
  .vedi-tutte {
    border: 1px solid var(--hairline); border-radius: var(--raggio);
    margin-top: .9rem;
  }
}

/* Da qui in giu' si parla del telefono, non del tablet: 720px. */
@media (max-width: 720px) {

  /* ---------- Testata del tour ----------
     I due bottoni erano larghi 358 e 213: un bordo destro frastagliato proprio
     nel punto della pagina che chiede di agire. Ora pari, uno sotto l'altro. */
  .griglia-testa-tour .btn { width: 100%; }
  /* A tutta larghezza l'imbottitura laterale non serve piu' a niente, e mangiava
     90px dei 358: "Calcola il tuo preventivo" andava a capo e il bottone era
     alto 76px. Con 1,2rem il testo sta su una riga sola. */
  .griglia-testa-tour .btn-grande { padding-left: 1.2rem; padding-right: 1.2rem; }

  /* L'offerta smette di travestirsi da bottone. Oro pieno a tutta larghezza
     appiccicato sopra la chiamata all'azione (anch'essa oro pieno, a tutta
     larghezza) faceva due bottoni oro uno sull'altro: il primo non si puo'
     premere e il secondo perdeva il primato. Qui diventa quello che e', un
     avviso: fondo sabbia, filetto oro, testo blu — e leggibile, non 11px
     maiuscoli spaziati su due righe. */
  .riga-offerta { flex: 1 1 100%; }
  .griglia-testa-tour .badge-offerta {
    display: block;
    background: var(--sabbia); color: var(--blu);
    border-left: 3px solid var(--oro); border-radius: 0 var(--raggio) var(--raggio) 0;
    padding: .75rem .95rem;
    font-size: 1.0625rem; font-weight: 600; line-height: 1.35;
    letter-spacing: 0; text-transform: none;
  }

}

/* ---------- Pillole dei mesi e partenze a scaglioni (pagina tour) ----------
   Vanno a capo invece di scorrere di lato: con sei mesi la fila chiederebbe piu'
   di uno schermo, e una fila che scorre nasconde proprio la cosa che deve far
   vedere (quali mesi ci sono). Squadrate come il resto dei comandi del sito
   (--raggio-s), non maiuscole: qui si legge un nome di mese, non un'etichetta. */
.pillole-mese {
  display: flex; flex-wrap: wrap; gap: .5rem;
  margin-bottom: 1.5rem;
}
.pillola {
  display: inline-flex; align-items: center; gap: .45rem;
  min-height: 48px; padding: .5rem 1.05rem;
  background: var(--bianco); color: var(--blu);
  border: 1px solid var(--hairline); border-radius: var(--raggio-s);
  font-family: 'Inter', sans-serif; font-size: 1.0625rem; font-weight: 600;
  cursor: pointer;
  transition: background .18s ease, border-color .18s ease, color .18s ease;
}
.pillola:hover { border-color: var(--blu); }
.pillola.attiva { background: var(--blu); border-color: var(--blu); color: var(--bianco); }

/* Quattro elenchi a scaglioni, un bottone solo: partenze, catalogo, blog
   (.altri-articoli, Maria Sole) e risultati della ricerca (.altri-esiti). */
.altre-partenze, .altri-viaggi, .altri-articoli, .altri-esiti { margin-top: 1.4rem; text-align: center; }
.altre-partenze .btn, .altri-viaggi .btn, .altri-articoli .btn, .altri-esiti .btn { min-width: 16rem; }
/* Il gruppo di risultati e' il bersaglio del ritorno quando si richiude lo
   scaglione: senza margine di scorrimento la testata appiccicata gli copriva il
   titolo. 9,5rem come tutte le altre ancore del sito. */
.gruppo-esiti { scroll-margin-top: 9.5rem; }
/* A 320px la scritta va a capo per forza: "Mostra tutte le 42 destinazioni"
   chiede 307px e dentro il bottone ce ne sono 231, e piu' corta smetterebbe di
   dire cosa apre. Allora le due righe si bilanciano invece di lasciarne una
   lunga e una con una parola sola. Il numero non si stacca mai dal nome: lo
   tiene attaccato lo spazio unificatore messo dal PHP. */
.altri-esiti .btn .testo { text-wrap: balance; }
.nessuna-partenza { margin-top: 1.4rem; }

/* La sezione e' il bersaglio del collegamento "Vedi le altre N partenze": senza
   margine di scorrimento le due barre appiccicate in alto (testata + ancore) le
   coprivano il titolo. 9,5rem come tutte le altre ancore del sito: a tavoletta
   le due barre arrivano a 145px e 8,5rem (136) non bastavano. */
#tutte-le-partenze { scroll-margin-top: 9.5rem; }

@media (max-width: 560px) {
  /* A tutta larghezza: con due pillole per riga i mesi lunghi ("Settembre")
     spezzavano la fila in modo diverso a ogni riga.
     E senza i 2,2rem laterali, per la stessa ragione di .btn-solo: su un
     bottone che gia' occupa tutta la riga quel padding non da' forma, ruba
     spazio alle parole — a 320px "Vedi tutti i 12 viaggi" finiva su due
     righe (misurato: 288x67px). */
  .altre-partenze .btn, .altri-viaggi .btn, .altri-articoli .btn, .altri-esiti .btn { width: 100%; min-width: 0; padding-left: 1rem; padding-right: 1rem; }
}

/* La riga degli anni comanda quella dei mesi, e si deve vedere che comanda: con
   lo stesso stile erano due pillole blu una sopra l'altra e non si capiva quale
   scelta contenesse l'altra. L'anno e' piu' grande e piu' pesante, e sotto ha
   l'aria che segna il gradino. */
.pillole-anno { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1.1rem; }
.pillole-anno .pillola { font-size: 1.2rem; font-weight: 700; padding: .55rem 1.3rem; }
/* I mesi sono la scelta dentro l'anno, e rientrano per dirlo — ma solo dove un
   anno da scegliere c'e' davvero: sui 44 tour con un anno solo la riga dei mesi
   e' l'unica, e un rientro sotto niente non vuol dire niente. */
.pillole-anno + .pillole-mese { padding-left: .9rem; border-left: 2px solid var(--sabbia-bordo); }

/* Su un telefono il :hover resta appiccicato dopo il tocco: il bottone contornato
   diventava blu pieno e ci restava, come se fosse premuto per sempre. Qui il
   passaggio del mouse non esiste, quindi non deve nemmeno colorare. */
@media (hover: none) {
  .pillola:hover { border-color: var(--hairline); }
  .pillola.attiva:hover { border-color: var(--blu); }
  /* I bottoni-freccia diventano blu pieno al passaggio del mouse. Col dito quel
     passaggio non finisce mai: il "torna in cima" restava blu, sopra il bottone
     blu del preventivo, e i due si confondevano in una macchia sola. */
  .freccia-car:hover { background: var(--bianco); border-color: #C6CDD8; color: var(--blu); }
  .slider-tour .freccia-car:hover { border-color: transparent; }
  /* I pallini del carosello: stessa trappola delle frecce, e sfuggita perche'
     il colore lo prende lo ::before. Toccando un pallino NON si cambia pagina —
     si scorre e si resta li' — quindi lo stato "sotto il mouse" non muore mai:
     restavano due pallini pieni, quello vero e quello toccato, e non si capiva
     piu' a che punto della fila si fosse. */
  .punto-car:hover::before { background: transparent; }
  .punto-car.attivo:hover::before { background: var(--blu); }
  /* La voce "Cerca" della testata (compare da 1180px in su, cioe' anche sui
     tablet col dito): toccandola si cambia pagina, ma tornando indietro col
     tasto del browser la pagina si riprende dalla memoria con l'hover acceso. */
  .cerca-testata:hover { color: var(--testo); }
  /* Stessa storia per tutti gli altri hover che ricolorano (misurati sui
     contatti: 8 regole scoperte). Col dito lo stato "sotto il mouse" comincia
     al tocco e non finisce piu': ogni comando restava acceso. Qui si torna
     esattamente ai valori di riposo dichiarati nelle regole base; il
     .btn-contorno generale assorbe il caso .altre-partenze/.altri-viaggi
     che stava scritto qui sopra. */
  .btn-contorno:hover { background: transparent; color: var(--blu); }
  .btn-oro:hover { background: var(--oro); border-color: var(--oro); }
  .btn-blu:hover { background: var(--blu); border-color: var(--blu); }
  .nav-principale a:hover { color: var(--testo); }
  .voce-gruppo .sotto-menu a:hover { background: transparent; }
  .riquadro-contatti:hover { background: var(--sabbia); border-color: var(--sabbia-bordo); border-left-color: var(--oro); }
  .link-freccia:hover { color: var(--blu); }
  .elenco-sottomete a:hover { color: var(--blu); }
  .linguetta:hover { color: var(--blu); }
  /* Il fuoco resta blu anche col dito (:not(:focus)): spegnere il bordo del
     campo che si sta compilando sarebbe peggio del difetto. */
  .campo:hover:not(:focus) { border-color: #C6CDD8; }
  .briciole a:hover { color: var(--testo-soft); text-decoration: none; }
  .hero .briciole a:hover { color: var(--bianco); }
  .tel-grande:hover { color: var(--bianco); }
  a.prova:hover { background: transparent; }
  a.prova:hover .prova-voto { text-decoration: none; }
  .pie a:hover { color: #AEBDD2; text-decoration: none; }
  .btn-scopri:hover { background: var(--oro); color: var(--blu-scuro); }
  /* Le card che si sollevano all'hover restano fuori apposta: il tocco su una
     card naviga alla sua pagina, e lo stato appiccicato muore con la pagina.
     Gli hover delle viste interne (tabelle partenze, scelte del preventivo,
     ancore) sono un giro a parte, da fare sulle loro pagine. */
}

/* La freccia del bottone gira quando l'elenco e' aperto: e' il segno che si
   richiude, lo stesso della fisarmonica dei giorni. */
.altre-partenze .btn .ico, .altri-viaggi .btn .ico, .altri-articoli .btn .ico, .altri-esiti .btn .ico { transition: transform .25s; }
.altre-partenze .btn.aperto .ico, .altri-viaggi .btn.aperto .ico, .altri-articoli .btn.aperto .ico, .altri-esiti .btn.aperto .ico { transform: rotate(180deg); }

/* ---------- La fessura sotto la barra CTA ----------
   In un viewport fermo la barra tocca il fondo esatto (misurato: 0px sotto).
   Sui telefoni veri no: mentre la barra degli indirizzi si ritira o ricompare,
   quello che sta "fissato in basso" resta indietro di un istante e scopre una
   striscia di pagina.
   Il primo rimedio era una coda finta (::after) sotto la barra, e non bastava.
   Qui a scendere sotto il bordo e' la barra stessa: il suo bianco vero arriva
   oltre il fondo dello schermo, e non c'e' piu' niente da scoprire.
   L'imbottitura in basso ricompensa esattamente la discesa, percio' il contenuto
   della barra resta dove stava — e ci somma la zona sicura, perche' sugli iPhone
   col trattino in basso i bottoni finivano sotto il trattino.

   LA CODA ERA CORTA. Vlad, 20/08/2026, dal browser dentro WhatsApp: sotto la
   barra del preventivo si vedeva una striscia di pagina alta a occhio un
   centinaio di pixel, con dentro la riga "Volo intercontinentale...". I 2,5rem
   di prima (40px) bastavano solo per la fessura piu' stretta: sui telefoni di
   oggi la barra in basso del browser misura da sola 44-50px, e il trattino di
   casa altri 34. Ora la coda e' di 7rem (112px), che li copre tutti insieme.
   Non costa niente: e' colore fuori schermo, e l'imbottitura riporta il
   contenuto della barra esattamente dov'era (il JavaScript del piede sottrae
   gia' la parte che sporge, vedi respira() in sito.js). */
.barra-sticky {
  bottom: -7rem;
  padding-bottom: calc(7rem + env(safe-area-inset-bottom, 0px));
}

/* I due badge nel piede: stessa struttura degli altri (marchio, stelle, voto)
   e stesso verso della barra della home — in riga, su fondo nudo (Vlad,
   21/08/2026: "anche questo in orizzontale e a fondo trasparente"). La scheda
   bianca di prima serviva a salvare la scritta nera di Trustpilot: adesso quel
   marchio ha la sua variante chiara e la scheda non serve piu'. Le scritte
   diventano bianche perche' sotto c'e' il blu, non per vezzo. */
/* Niente riquadro: i due badge stanno sul blu nudo (Vlad, 21/08/2026, dopo
   averlo provato con la cornice: "togli il riquadro"). Reggono da soli adesso
   che i marchi hanno tutti e due il loro nome e la scritta Trustpilot e'
   bianca — prima erano una G muta e una scritta nera che spariva. */
.pie-prove { margin-top: 1.4rem; }
.prove-piede { flex-direction: column; align-items: flex-start; gap: .2rem; }
.prove-piede .prova {
  flex-direction: row; align-items: center; gap: .7rem;
  min-width: 0; padding: .5rem .3rem; min-height: 48px; color: var(--bianco);
}
.prove-piede .prova-marchio { height: auto; width: 5.6rem; justify-content: flex-start; }  /* 90px: adesso il piu' largo e' Google col nome */
.prove-piede .marchio-google-nome { color: var(--bianco); font-size: .95rem; }
.prove-piede .prova-stelle { width: 5.5rem; justify-content: flex-start; }        /* 88px: la striscia verde ne misura 85 */
.prove-piede .logo-google { width: 18px; height: 18px; }
.prove-piede .logo-trustpilot { height: 15px; width: auto; }
.prove-piede .stelle-trustpilot { height: 16px; width: auto; }
.prove-piede .stelle-voto { font-size: 1rem; }
.prove-piede .prova-voto { color: var(--bianco); line-height: 1; font-size: 1.15rem; font-weight: 700; }
.prove-piede .prova-su { color: #B9C6DB; font-size: .85rem; }
/* Le stelle spente di Google sul blu: il grigio chiaro del fondo bianco qui
   sparirebbe nel blu, e cinque stelle tutte accese direbbero una bugia. */
.prove-piede .stelle-vuote { color: rgba(255, 255, 255, .38); }
.prove-piede a.prova:hover, .prove-piede a.prova:focus-visible { background: rgba(255, 255, 255, .08); }
@media (max-width: 760px) {
  .prove-piede { justify-content: center; }
}

/* ---------- Il piede sul telefono: a fisarmonica, e leggibile ----------
   Misurato a 390px: 1.781 pixel, il 17% della pagina del tour. Tre gruppi di
   collegamenti chiusi lo portano sotto gli 800; i contatti stanno nella fascia
   sopra il piede, non piu' anche qui.
   Il titolo del gruppo diventa un bottone che pero' NON cambia aspetto: stessa
   misura, stesso maiuscoletto spaziato, stesso bianco. Cambia solo la freccia. */
@media (max-width: 720px) {
  /* Il testo del pie' sta gia' a 17px per una regola piu' su, nel blocco del
     pavimento: qui non si ripete. */
  .pie .contenitore { padding-top: 3rem; }
  .pie-griglia { gap: 0; }

  .pie-gruppo-attivo { border-bottom: 1px solid rgba(255,255,255,.14); }
  .pie-gruppo-attivo:first-of-type { border-top: 1px solid rgba(255,255,255,.14); }
  .pie-gruppo-attivo h4 { margin: 0; }
  /* I titoletti del pie' arrivano a 12,5px dall'h4: per un'etichetta
     decorativa passerebbe, ma qui sono i bottoni della fisarmonica —
     comandi da toccare, non decorazioni. */
  .pie h3 { font-size: .875rem; }
  .pie-apri {
    display: flex; align-items: center; justify-content: space-between; gap: 1rem;
    width: 100%; min-height: 56px; padding: 0;
    background: none; border: 0; cursor: pointer;
    color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit;
    text-align: left;
  }
  .pie-apri .freccia { font-size: 1.5rem; line-height: 1; transition: transform .25s; }
  .pie-apri[aria-expanded="true"] .freccia { transform: rotate(180deg); }
  /* L'elenco aperto respira sotto il titolo e si chiude prima del gruppo dopo. */
  .pie-gruppo-attivo ul { padding-bottom: 1.1rem; }
  /* Ogni voce e' un bersaglio da dito, non una riga di testo alta 24px. */
  .pie-gruppo-attivo li a {
    display: inline-flex; align-items: center; min-height: 48px;
  }
  .pie-fondo { margin-top: 2rem; }
}

/* ---------- Il pavimento dei 17px, dove tocca il testo che si legge ----------
   La revisione ne aveva contati venti sotto soglia. Qui salgono i due che sono
   anche navigazione (le briciole si leggono E si toccano) e i due maiuscoletti
   piu' piccoli della pagina tour. Restano com'erano da scrivania: e' sul telefono,
   a mezzo metro dagli occhi e senza poter avvicinare la pagina, che 12,8px non
   bastano a un pubblico per il 59% oltre i sessant'anni. */
@media (max-width: 720px) {
  .briciole { font-size: 1.0625rem; }                   /* 14,4 → 17px */
  .occhiello { font-size: .92rem; letter-spacing: .16em; }  /* 12,8 → 14,7px */
  .fatto .nome { font-size: .92rem; }                   /* 12,8 → 14,7px */
  /* Due voci a 4px l'una dall'altra dentro una barra che scorre: si sbaglia
     sezione. Otto e' la distanza minima che questo progetto si e' dato. */
  .ancore .contenitore { gap: .5rem; }
}

/* ---------- Torna in cima ----------
   Sul telefono la pagina del tour e' alta novemila pixel: senza questo, per
   risalire non c'e' altro che il dito. E' lo stesso .freccia-car dei caroselli
   nella variante che sta sopra le fotografie (bordo via, ombra al suo posto):
   non un tondo nuovo, e non il blu pieno che usa mezzo mondo — bianco e freccia
   blu sono la lingua di questo sito.
   Nascosto anche alla tastiera finche' non serve: visibility, non solo opacita'
   (un bottone invisibile che prende il fuoco e' la trappola classica). */
.torna-su {
  position: fixed; right: 1rem; z-index: 55;
  bottom: calc(var(--alt-barra-cta, 0px) + 1rem);
  /* Il bordo resta (nel carosello sparisce, perche' li' sotto c'e' sempre una
     fotografia). Qui sotto passa di tutto — sabbia, bianco, il bottone blu del
     preventivo — e senza un contorno suo il tondo si confondeva con quello che
     aveva dietro. Bordo piu' ombra: e' un oggetto che galleggia, e si vede. */
  border-color: #C6CDD8;
  box-shadow: 0 6px 20px rgba(16, 41, 77, .28);
  opacity: 0; visibility: hidden; transform: translateY(.5rem);
  transition: opacity .25s ease, transform .25s ease, bottom .3s ease, visibility 0s linear .25s;
}
.torna-su.visibile { opacity: 1; visibility: visible; transform: none; transition: opacity .25s ease, transform .25s ease, bottom .3s ease, visibility 0s; }
.torna-su .ico { width: 1.5rem; height: 1.5rem; }
/* Da ferma la barra CTA non c'e': il bottone scende al suo posto normale. */
body:not(.con-barra-cta) .torna-su { bottom: 1rem; }
/* Da scrivania la pagina e' meta' e c'e' il mouse con la rotella: resta com'era. */
@media (min-width: 721px) { .torna-su { display: none; } }

/* Il conteggio accanto al titolo del gruppo. Prima toppa: nowrap, "va a capo
   tutto insieme o niente" (720px). Ma coi titoli lunghi a capo ci andava in 3
   gruppi su 5, e la riga si apriva col separatore: "· 12 viaggi" — punteggiatura
   orfana. Allora a capo SEMPRE, uniforme per tutti i gruppi, e senza puntino:
   un separatore ha senso solo in mezzo a una riga. Il "·" vive in uno span suo
   (.sep-conta) nel template proprio per poterlo spegnere qui. */
@media (max-width: 760px) {
  .testa-sezione .conta-gruppo { display: block; margin-top: .2rem; }
  .sep-conta { display: none; }
}

/* Nella barra dei filtri del catalogo restano sotto il pavimento due cose che
   si leggono davvero: il nome del campo e il numero dei risultati. Sedici pixel
   non sono un dramma, ma qui sopra il pavimento c'e' e vale 17. */
@media (max-width: 720px) {
  /* Vale anche per le etichette dei moduli ("Nome e cognome", "Telefono"),
     per il bottone grande dell'invio e per le note piccole: stessa ragione,
     misurati 16px sui contatti a 390. */
  .barra-filtri .etichetta, .barra-filtri .conta-filtri, .campo-gruppo .etichetta,
  .btn-grande, .nota-piccola { font-size: 1.0625rem; }
}

/* ==========================================================================
   RETE PER GLI iPHONE RIMASTI INDIETRO (iOS 14)
   --------------------------------------------------------------------------
   NATA DA UNA DIAGNOSI SBAGLIATA, TENUTA PERCHE' IL PROBLEMA E' VERO.
   Il 19/08/2026 il video non si vedeva dall'iPhone di Vlad e su Android si':
   avevo dedotto un iOS vecchio. Falso — il suo e' un iOS 26. Pero' nel
   frattempo, misurando il sito con aspect-ratio spenta, era saltato fuori un
   guasto autentico per chi ha davvero un telefono fermo a iOS 14:
     · schede "Scegli come partire": foto da 464px a ZERO — sparivano;
     · schede del blog: foto da 200px a 1500 — l'immagine a grandezza vera;
     · apertura e schede destinazione: altezze sbagliate.
   Su un pubblico per il 59% oltre i sessanta, i telefoni vecchi non sono un
   caso di scuola: la foto che sparisce e' un guasto vero e il rimedio non
   costa niente. Il blocco si applica SOLO dove aspect-ratio manca — sui
   telefoni aggiornati non esiste — quindi non e' la causa di nessun problema
   di oggi. Il giorno che iOS 14 sparira' dalle statistiche si cancella tutto
   in un colpo.
   ========================================================================== */
@supports not (aspect-ratio: 1 / 1) {
  .card-tour figure, .card-catalogo figure, .card-tipologia figure,
  .card-blog figure, .mini-articolo figure,
  .card-dest, .card-dest-g, .programma-acc .foto-grande {
    position: relative; height: 0; overflow: hidden;
  }
  /* il rapporto in percentuale: altezza diviso larghezza */
  .card-tour figure { padding-top: 75%; }          /* 4/3   */
  .card-catalogo figure { padding-top: 66.66%; }   /* 3/2   */
  .card-tipologia figure { padding-top: 62.5%; }   /* 16/10 */
  .card-blog figure { padding-top: 56.25%; }       /* 16/9  */
  .mini-articolo figure { padding-top: 75%; }      /* 4/3   */
  .card-dest { padding-top: 75%; }                 /* 4/3   */
  .card-dest-g { padding-top: 133.33%; }           /* 3/4   */
  .programma-acc .foto-grande { padding-top: 43.75%; }        /* 16/7  */
  @media (max-width: 640px) { .programma-acc .foto-grande { padding-top: 62.5%; } }

  /* Con l'altezza a zero il contenuto deve stendersi sopra il riquadro. */
  .card-tour figure img, .card-catalogo figure img, .card-tipologia figure img,
  .card-blog figure img, .mini-articolo img,
  .card-dest img, .card-dest-g img {
    position: absolute; top: 0; left: 0; width: 100%; height: 100%;
    object-fit: cover;
  }
  /* Nelle due schede-destinazione il testo sta SOPRA la foto, in basso: senza
     posizione esplicita finirebbe fuori dal riquadro alto zero. */
  .card-dest > *:not(img), .card-dest-g > *:not(img) {
    position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;
  }
}

/* Le unita' svh (altezza dello schermo al netto delle barre del browser) sono
   arrivate con iOS 15.4: prima, l'intera riga viene buttata via e il blocco
   resta senza altezza minima. La riga in vh subito sopra fa da rete — meno
   precisa mentre la barra degli indirizzi si ritira, ma c'e'. */
.hero-max { min-height: clamp(38rem, 88vh, 56rem); min-height: clamp(38rem, 88svh, 56rem); }
.hero-alta { min-height: clamp(28rem, 62vh, 40rem); min-height: clamp(28rem, 62svh, 40rem); }
.fascia-emozione { min-height: clamp(26rem, 66vh, 38rem); min-height: clamp(26rem, 66svh, 38rem); }

/* inset e' una scorciatoia per i quattro lati, arrivata con iOS 14.5: dove non
   c'e', un elemento assoluto senza lati resta dov'era e i riempimenti a tutta
   scheda (la fotografia, il velo, il collegamento che copre la card) non si
   agganciano piu' ai bordi. I quattro lati per esteso non costano niente. */
.card-tour h3 a::after,
.card-dest-g img, .card-dest img {
  top: 0; right: 0; bottom: 0; left: 0;
}

/* ---------- I suggerimenti di ricerca (assets/js/suggerimenti.js) ----------
   Un pannello sotto la casella: gruppi Destinazioni/Tour, ogni voce e' un
   collegamento vero. Stessa lingua del menu a tendina della testata
   (.sotto-menu): bianco, filetto, ombra morbida. */
.con-suggerimenti { position: relative; }
.pannello-sugg {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 60;
  margin-top: .35rem;
  background: var(--bianco); border: 1px solid var(--hairline);
  border-radius: var(--raggio-s);
  box-shadow: 0 14px 30px rgba(13, 28, 54, .12);
  max-height: min(24rem, 60vh); overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  text-align: left;
}
.sugg-gruppo {
  background: var(--blu-tinta); color: var(--blu);
  font-size: .72rem; font-weight: 700;
  letter-spacing: .14em; text-transform: uppercase;
  padding: .45rem .95rem;
}
.sugg-gruppo + .sugg-gruppo { border-top: 1px solid var(--hairline); }
/* Le voci sono <button> (scegliere COMPILA il campo, non naviga): si spoglia
   il vestito da bottone del browser e resta la riga da elenco. */
.sugg-voce {
  display: flex; align-items: baseline; justify-content: space-between; gap: 1rem;
  width: 100%; text-align: left; cursor: pointer;
  background: none; font: inherit; font-family: 'Inter', sans-serif;
  border: 0;
  padding: .7rem .95rem; min-height: 3rem;
  color: var(--testo); text-decoration: none;
  border-bottom: 1px solid var(--hairline);
  font-size: 1.0625rem;
}
.sugg-voce:last-child { border-bottom: 0; }
.sugg-voce:hover, .sugg-voce.attiva { background: var(--blu-tinta); color: var(--blu); }
.sugg-voce .sugg-nome { font-weight: 500; }
.sugg-voce .sugg-nota { color: var(--testo-soft); font-size: .86rem; white-space: nowrap; flex-shrink: 0; }
/* Nella scatola bianca della home gli scomparti hanno il bordo interno: il
   pannello deve sporgere oltre lo scomparto, non restarci dentro stretto. */
.box-ricerca .con-suggerimenti .pannello-sugg { min-width: min(26rem, 92vw); right: auto; width: max-content; max-width: min(30rem, 92vw); }
@media (max-width: 720px) {
  /* Sul telefono la scatola e' in colonna: il pannello prende tutta la riga
     e le voci salgono a 48px di tocco. */
  .box-ricerca .con-suggerimenti .pannello-sugg { left: 0; right: 0; width: auto; min-width: 0; max-width: none; }
  .sugg-voce { min-height: 3.25rem; padding-top: .85rem; padding-bottom: .85rem; }
}

/* ---------- Il banner cookie (Iubenda) parla la lingua del sito ----------
   I colori arrivano dalla configurazione (setup.php); qui tipografia e forme:
   Inter, titolo Zalando, i raggi di casa, bottoni da 48 punti. Gli interruttori
   delle finalita' NON stanno nel primo livello (showPurposesToggles: false):
   il primo livello e' testo + tre scelte, come Boscolo — il resto vive dietro
   «Scopri di piu' e personalizza». */
#iubenda-cs-banner, #iubenda-cs-banner button { font-family: 'Inter', sans-serif !important; }
#iubenda-cs-banner .iubenda-cs-content {
  border-radius: var(--raggio) !important;
  box-shadow: 0 14px 44px rgba(16, 41, 77, .38) !important;
}
/* Il titolo «Informativa» non si stampa (Boscolo non ce l'ha e il cartoncino
   si accorcia di una riga), ma NON si toglie dal documento: e' l'etichetta
   del dialogo per i lettori di schermo (aria-labelledby). */
#iubenda-cs-banner #iubenda-cs-title {
  position: absolute !important; width: 1px; height: 1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}
#iubenda-cs-banner .iub-p { font-size: .95rem !important; line-height: 1.55 !important; }
#iubenda-cs-banner a { color: #fff !important; text-underline-offset: 3px; }
/* L'attacco in voce Utat («Prima di partire, i cookie»): Zalando col rigo
   d'oro sotto, la stessa firma dei titoli di sezione del sito. Tutto
   !important e specificita' alta: il reset interno di Iubenda arriva dopo
   di noi e schiaccia qualunque regola normale. */
#iubenda-cs-banner .iubenda-cs-content .iubenda-banner-content .iub-testata-utat {
  display: block !important;
  font-family: 'Zalando Sans Expanded', 'Inter', sans-serif !important;
  font-weight: 600 !important;
  font-size: 1.02rem !important;
  letter-spacing: .01em !important;
  padding-bottom: .55rem !important;
  margin-bottom: .75rem !important;
  background: linear-gradient(var(--oro), var(--oro)) left bottom / 3rem 2px no-repeat !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button {
  border-radius: var(--raggio-s) !important;
  min-height: 3rem;
  padding: .7rem 1.7rem !important;
  font-weight: 600 !important;
  font-size: .95rem !important;
}
/* La X deve essere un bersaglio vero, non un puntino nell'angolo. */
#iubenda-cs-banner .iubenda-cs-close-btn {
  min-width: 48px; min-height: 48px;
  font-size: 1.5rem !important;
  line-height: 1 !important;
}

/* Home su telefono: l'hero a 88svh riempiva tutto lo schermo e la ricerca
   («Che viaggio cerchi?») restava ~25px sotto il bordo — l'utente non capiva
   di dover scorrere (confronto con Boscolo, misurato a 390x844, 28/08/2026).
   Un taglio gentile a 80svh alza la ricerca di ~68px: la label e l'inizio del
   campo sbucano sopra la piega, e si intuisce lo scorrimento. Solo sul telefono,
   e solo sull'hero della home (hero-max): le mete e i tour non si toccano. */
@media (max-width: 600px) {
  .hero-max { min-height: clamp(32rem, 74vh, 44rem); min-height: clamp(32rem, 74svh, 44rem); }
}

/* Il velo dei gesti cooperativi della mappa («Muovi la mappa con due dita»):
   MapLibre gli da' z-index 99999 e finiva SOPRA testata (z 50) e barra delle
   ancore (z 40) quando la mappa gli scorre sotto — scritta e grigio parevano
   traboccare dal riquadro (Vlad, 31/08). Sta dentro la mappa, sotto le barre,
   e parla la lingua del sito: velo blu, Inter, corpo da occhiello. */
.maplibregl-cooperative-gesture-screen {
  z-index: 2 !important;
  background: rgba(16, 41, 77, .45) !important;
  font-family: 'Inter', sans-serif !important;
  font-size: 1.0625rem !important;
  font-weight: 600;
  text-align: center;
}

/* ============================================================
   MOMENTI DEL TOUR — carosello delle foto degli accompagnatori
   Vive dentro #momenti (sezione-sabbia), dopo il programma. Una foto grande
   16:9 alla volta + striscia di miniature. La didascalia (facoltativa) sta in
   basso a sinistra su una velatura propria; il contatore in alto a destra ha
   la sua ombra e non dipende dalla didascalia. Colori e font dai token del sito.
   ============================================================ */
.momenti-caro { max-width: 840px; margin: 0 auto; }
.momenti-palco {
  position: relative; aspect-ratio: 16 / 9; border-radius: var(--raggio);
  overflow: hidden; background: var(--blu-tinta);
}
.momento-slide { position: absolute; inset: 0; margin: 0; opacity: 0; transition: opacity .4s ease; }
.momento-slide.on { opacity: 1; }
.momento-slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
.momento-slide figcaption {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
  padding: 2.2rem 1.1rem .9rem; color: var(--bianco);
  font-weight: 600; font-size: 1.05rem; line-height: 1.3;
  background: linear-gradient(to top, rgba(16, 41, 77, .78), rgba(16, 41, 77, 0));
}
.momenti-conta {
  position: absolute; top: .8rem; right: .8rem; z-index: 3;
  color: var(--bianco); font-size: .82rem; font-weight: 600;
  font-variant-numeric: tabular-nums; letter-spacing: .03em;
  background: rgba(16, 41, 77, .55); border-radius: 999px; padding: .18rem .6rem;
}
.momenti-frecc {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
  width: 2.9rem; height: 2.9rem; border: 0; border-radius: 50%;
  background: rgba(16, 41, 77, .6); color: var(--bianco); cursor: pointer;
  display: grid; place-items: center; transition: background .2s ease;
}
.momenti-frecc:hover { background: var(--blu); }
.momenti-frecc:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }
.momenti-frecc.prev { left: .8rem; }
.momenti-frecc.next { right: .8rem; }
.momenti-frecc svg { width: 1.3rem; height: 1.3rem; }
.momenti-strip {
  display: flex; gap: .5rem; margin-top: .7rem; overflow-x: auto;
  scroll-behavior: smooth;
  /* Via la barra di scorrimento nativa (grigia, fuori stile su Windows):
     le miniature restano scorribili col trackpad/dito, e cambiando foto la
     striscia scorre da sola per tenere in vista quella attiva (JS). */
  scrollbar-width: none; -ms-overflow-style: none;
}
.momenti-strip::-webkit-scrollbar { display: none; }
.momenti-mini {
  flex: 0 0 auto; width: 5.4rem; aspect-ratio: 16 / 9; padding: 0; cursor: pointer;
  border: 2px solid transparent; border-radius: var(--raggio-s); overflow: hidden;
  background: none; opacity: .6; transition: opacity .2s ease, border-color .2s ease;
}
.momenti-mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
.momenti-mini.on { opacity: 1; border-color: var(--oro); }
.momenti-mini:hover { opacity: 1; }
.momenti-mini:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }
.momenti-credito {
  text-align: center; color: var(--testo-soft); font-size: .85rem;
  font-style: italic; margin: 1.1rem 0 0;
}
@media (max-width: 600px) {
  .momento-slide figcaption { font-size: .98rem; padding: 1.8rem .9rem .8rem; }
  .momenti-frecc { width: 2.5rem; height: 2.5rem; }
  .momenti-mini { width: 4.4rem; }
}
@media (prefers-reduced-motion: reduce) {
  .momento-slide { transition: none; }
  .momenti-strip { scroll-behavior: auto; }
}
