/* ===========================================================================
   WoH Forum — homepage
   Traduzione del frame Figma "homepage definitiva" (node 314:5129).
   Le misure nei commenti sono quelle del frame a 1440px di larghezza.
   =========================================================================== */

/* ---------- Font ----------------------------------------------------------
   Il kit Adobe Fonts `qjj4epd` è collegato con un <link> in testa a
   index.html. Le famiglie si chiamano "ivyepic" e "ivypresto-display"
   (minuscole): sono i nomi che serve Typekit, non quelli di Figma.

   Il kit però contiene oggi solo quattro tagli — ivyepic 900 tondo, ivyepic
   800 e 900 corsivo, ivypresto-display 700 corsivo — e il design non ne usa
   nessuno dei quattro. Se si punta alle famiglie Typekit adesso, il matching
   CSS ripiega sull'unico taglio disponibile e l'intero sito viene in IvyEpic
   Black, con la citazione in corsivo grassetto.

   Perciò le due variabili in `:root` restano sui ripieghi di sistema, e le
   famiglie Typekit si accendono da sole: `main.js` controlla quali tagli il
   kit dichiara davvero e, solo se ci sono tutti e dieci, mette `font-kit` su
   <html>. Nessuna riga da scambiare a mano — appena il progetto web viene
   pubblicato completo, al ricarico successivo il sito usa i font veri.
   La lista dei dieci è in assets/README.md.

   Nota sui pesi: Adobe numera IvyPresto Display Thin come **100**, non 200.
   Quindi la citazione e i sottotitoli lo chiedono a 100. Ivy Epic invece
   segue la numerazione attesa: Light 300, Regular 400, Medium 500,
   SemiBold 600, Bold 700.

   Il ripiego del sans è Avenir Next, non Optima: Optima ha le aste svasate e
   dà a tutto il sito un'aria calligrafica che con IvyEpic non c'entra nulla.
   Avenir Next è geometrico-umanista come IvyEpic e regge il confronto molto
   meglio. Per il serif Didot resta la scelta giusta: è quello col contrasto
   più alto fra i font di sistema, vicino al carattere di IvyPresto.

   Suisse Intl (--font-ui, solo le etichette della fascia loghi) non è nel
   kit e non è su Adobe Fonts: resta comunque sul fallback.                */


/* ---------- I font installati sul computer ---------------------------------
   Chi ha IvyEpic e IvyPresto Display attivi via Adobe Creative Cloud li ha
   installati come font di sistema: e' il motivo per cui Figma li mostra
   giusti. Il browser puo' usarli, ma va chiesto per nome — e non con il nome
   `ivyepic`, che il kit Typekit ha gia' occupato: lo dichiara con soli
   quattro tagli e oscurerebbe quelli locali. Da qui il nome distinto.

   Se il font non e' installato la sorgente `local()` fallisce e si passa alla
   famiglia successiva della pila: nessun effetto collaterale.

   ATTENZIONE: questo vale solo su chi ha i font installati — chi progetta.
   Per i visitatori del sito non cambia nulla: a loro i font arrivano solo dal
   progetto web Adobe. Vedi assets/README.md.                                */

@font-face { font-family: 'IvyEpic Locale'; src: local('IvyEpic-Light');    font-weight: 300; font-style: normal; }
@font-face { font-family: 'IvyEpic Locale'; src: local('IvyEpic-Regular');  font-weight: 400; font-style: normal; }
@font-face { font-family: 'IvyEpic Locale'; src: local('IvyEpic-Medium');   font-weight: 500; font-style: normal; }
@font-face { font-family: 'IvyEpic Locale'; src: local('IvyEpic-SemiBold'); font-weight: 600; font-style: normal; }
@font-face { font-family: 'IvyEpic Locale'; src: local('IvyEpic-Bold');     font-weight: 700; font-style: normal; }
/* IvyEpic Medium Italic non risulta installato: per "Magnifica Humanitas" il
   browser inclina da se' il Medium. Non dichiariamo una faccia corsiva con
   sorgente tonda, altrimenti resterebbe dritta. */

@font-face { font-family: 'IvyPresto Locale'; src: local('IvyPrestoDisplay-Thin');        font-weight: 100; font-style: normal; }
@font-face { font-family: 'IvyPresto Locale'; src: local('IvyPrestoDisplay-Light');       font-weight: 300; font-style: normal; }
@font-face { font-family: 'IvyPresto Locale'; src: local('IvyPrestoDisplay-LightItalic'); font-weight: 300; font-style: italic; }
@font-face { font-family: 'IvyPresto Locale'; src: local('IvyPrestoDisplay-Regular');     font-weight: 400; font-style: normal; }

/* ---------- Variabili di tema --------------------------------------------- */

:root {
  --sand:       #d8d8ca;
  --sand-soft:  rgba(216, 216, 201, .6);
  --red:        #ba4637;   /* box primo dialogo, accenti */
  --red-warm:   #bb4637;   /* bottone hero, "forum" nel titolo */
  --grey:       #d9d9d9;   /* quadrato dietro al chevron dell'intro */
  --verdino:    #dadaca;   /* fondo del footer */
  --ink:        #000;
  --ink-soft:   #1d1d1b;   /* etichette e filetti della fascia loghi */
  --on-red:     #fff;
  --btn-text:   #f2f1df;   /* testo del bottone "Vai al programma" */
  --on-panel:   #fcfcf9;   /* testo sui pannelli delle card */
  --ardesia:    #2e3b46;   /* banda della citazione, Versione 2 */

  --font-sans:  'IvyEpic Locale', 'Avenir Next', 'Avenir', 'Segoe UI', system-ui, sans-serif;
  --font-serif: 'IvyPresto Locale', 'Didot', 'Bodoni 72', Georgia, serif;
  --font-ui:    'Suisse Intl', system-ui, -apple-system, 'Helvetica Neue', Arial, sans-serif;

  /* Larghezza del frame Figma. I margini di 50px li fa il padding dei
     contenitori, non questa misura: sottrarli qui li conterebbe due volte e
     spingerebbe tutto il contenuto verso il centro. */
  --maxw:   1440px;
  --gutter: clamp(20px, 3.5vw, 50px);
}

/* Acceso da main.js solo quando il kit Adobe dichiara tutti i tagli che il
   design usa. Finché ne manca uno restano i ripieghi: meglio un carattere di
   sistema coerente che IvyEpic Black su tutto il sito. */
html.font-kit {
  --font-sans:  "ivyepic", 'IvyEpic Locale', 'Avenir Next', 'Avenir', 'Segoe UI', system-ui, sans-serif;
  --font-serif: "ivypresto-display", 'IvyPresto Locale', 'Didot', 'Bodoni 72', Georgia, serif;
}

/* ---------- Base ----------------------------------------------------------- */

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

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;   /* il chevron dell'intro porta al sito */
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

body {
  margin: 0;
  background: #fff;
  color: var(--ink);
  font-family: var(--font-sans);
  font-weight: 400;
  line-height: 1.4;
}

img { max-width: 100%; display: block; }

a { color: inherit; }

h1, h2, h3, h4, p, ul, blockquote, figure { margin: 0; }
ul { padding: 0; list-style: none; }

.accent { color: var(--red); }

.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

.wrap {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* ---------- Testata -------------------------------------------------------
   Versione 2, frame 580:8420. La landing si apre su questa composizione: nella
   Versione 1 era la schermata di intro a parte, con la sua lastra a tutto
   schermo e il chevron. Qui e' una banda normale nel flusso, su bianco.

   Il frame e' 1440x982 e tutto dentro sta in posizione assoluta. Per non
   inseguire i numeri uno per uno c'e' una sola scala, `--u`, che vale 1/1440
   della larghezza utile: ogni misura e' il numero di Figma moltiplicato per
   `--u`, e sopra i 1440 la composizione smette di crescere e si centra.
   Marchi 81x81 a (172,50) e (62,150), logotipo 665x285 a (163,280),
   mappamondo 759 a x=856 — che sborda di 175px oltre il bordo.            */

.testata {
  position: relative;
  overflow-x: clip;            /* il mappamondo sborda a destra */
  background: #fff;
}

.testata-inner {
  --u: calc(min(100vw, var(--maxw)) / 1440);
  position: relative;
  /* la larghezza segue la scala: riducendo `--u` la composizione rimpicciolisce
     e resta centrata, invece di appoggiarsi al margine sinistro */
  width: calc(1440 * var(--u));
  max-width: 100%;
  margin-inline: auto;
  height: calc(982 * var(--u));
}

/* ---- i due marchi ---- */

/* I due marchi sono una coppia gia' composta dentro a un file solo: la forma
   in alto a destra e quella in basso a sinistra stanno nella stessa immagine.
   Il riquadro e' largo 191 — la distanza fra il bordo sinistro dell'asterisco
   (x=62) e quello destro della croce (x=253) nel frame — cosi' ogni forma
   viene 81, la misura del frame. */
.marchi {
  position: absolute;
  z-index: 1;
  left: calc(62 * var(--u));
  top: calc(50 * var(--u));
  width: calc(191 * var(--u));
  aspect-ratio: 370 / 312;
  display: block;
}

.marchi img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

/* ---- il logotipo ---- */

/* Il logotipo e' una griglia 2x3: tre righe da 333x95 dentro a un riquadro di
   665x285. WORDS a sinistra, of HOPE a destra, FORUM a sinistra. A tutta
   larghezza le righe verrebbero alte il doppio e il blocco sconfinerebbe sul
   testo sotto. */
.wordmark {
  position: absolute;
  z-index: 1;
  left: calc(163 * var(--u));
  top: calc(197 * var(--u));
  width: calc(665 * var(--u));
  height: calc(285 * var(--u));
  margin: 0;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-rows: repeat(3, 1fr);
  gap: 0;
}

.wordmark img { width: 100%; height: auto; display: block; }
.wordmark-words   { grid-area: 1 / 1; }
.wordmark-of-hope { grid-area: 2 / 2; }
.wordmark-forum   { grid-area: 3 / 1; }

/* ---- il titolo esteso e il payoff ----
   Stanno fra il logotipo e "Primo dialogo": (163,522) nella schermata
   desktop, larghi 640 perche' il titolo cada su due righe come li'. */

.testata-claim {
  position: absolute;
  z-index: 1;
  left: calc(163 * var(--u));
  top: calc(522 * var(--u));
  width: calc(640 * var(--u));
}

.testata-titolo {
  font-weight: 700;
  font-size: calc(34 * var(--u));
  line-height: 1.05;
  letter-spacing: -.01em;
  color: var(--ink-soft);
}

/* Le due schermate spezzano il titolo in punti diversi: due righe sul
   desktop, dove l'a capo lo fa da solo la colonna da 640, e tre su mobile,
   dopo "Innovation:" e dopo "for". Quelli sono a capo voluti, non di
   larghezza — a 353 il testo starebbe su due righe — quindi stanno
   nell'HTML e qui restano spenti.

   Lo spazio prima di ogni `<br>` serve: spegnendolo con `display: none`
   l'a capo sparisce e con lui l'unico stacco fra le due parole, che
   finivano attaccate ("Innovation:Words"). Su mobile e' uno spazio a fine
   riga, che non si vede. */
.testata-titolo br { display: none; }

.testata-payoff {
  margin-top: calc(10 * var(--u));
  font-weight: 400;
  font-size: calc(20 * var(--u));
  line-height: 1.2;
  color: var(--ink-soft);
}

/* ---- quando e dove ---- */

.testata-quando {
  position: absolute;
  z-index: 1;
  left: calc(163 * var(--u));
  top: calc(652 * var(--u));
  width: calc(600 * var(--u));
}

/* Tagli letti dal frame: etichetta SemiBold 16, "23-25" SemiBold 45 in rosso,
   il mese SemiBold 40. Stavano nel blocco dell'intro e vanno rimessi qui. */
.intro-label {
  font-weight: 600;
  font-size: calc(16 * var(--u));
  line-height: 1.375;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.intro-dates {
  margin-top: calc(13 * var(--u));
  display: flex;
  align-items: baseline;
  gap: calc(14 * var(--u));
  line-height: 1;
}

.intro-day   { font-weight: 600; font-size: calc(45 * var(--u)); color: var(--red-warm); }
.intro-month { font-weight: 600; font-size: calc(40 * var(--u)); color: var(--ink-soft); }

/* Il bottone: 215x39 nel frame, e il testo non scala con --u perche' sotto
   una certa misura diventerebbe illeggibile. */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: calc(215 * var(--u));
  height: calc(39 * var(--u));
  padding-inline: calc(22 * var(--u));
  background: var(--red-warm);
  color: var(--btn-text);
  font-weight: 600;
  font-size: max(12px, calc(16 * var(--u)));
  letter-spacing: .02em;
  text-transform: uppercase;
  text-decoration: none;
}

.btn:hover { background: var(--red); }

.testata-luogo {
  margin-top: calc(19 * var(--u));
  font-weight: 700;
  font-size: calc(25 * var(--u));
  line-height: 1.05;
  color: var(--ink-soft);
}

.testata-luogo span {
  font-weight: 400;
  font-size: calc(20 * var(--u));
  text-transform: uppercase;
}

.testata-quando .btn { margin-top: calc(34 * var(--u)); }

/* ---- il mappamondo ----
   Il fondo della testata e' bianco come il filmato, quindi qui non serve ne'
   la maschera ne' la fusione: il bianco del video sparisce da solo.        */

.testata-globe {
  position: absolute;
  z-index: 0;               /* su mobile il logotipo gli passa sopra */
  /* Ancorato a destra e centrato in verticale, non fissato con l'angolo in
     alto a sinistra. Nel frame e' gia' cosi' — sborda di 175 oltre il blocco e
     il suo centro cade a meta' banda — e serve perche' rimpicciolendolo non
     scappi verso l'alto e verso sinistra. */
  left: auto;
  right: calc(-175 * var(--u));
  top: 50%;
  translate: 0 -50%;
  /* `--globo` permette di ridurre il mappamondo piu' del resto, senza toccare
     la scala della composizione */
  width: calc(759 * var(--u) * var(--globo, 1));
  aspect-ratio: 1;
  margin: 0;
  pointer-events: none;
}

.testata-globe video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* mai reso trasparente: Safari nega l'autoplay agli elementi invisibili */
}

.testata-globe::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background: url('../assets/img/mondo.jpg') center / cover no-repeat;
  transition: opacity .4s ease;
}

.testata-globe.sta-suonando::before { opacity: 0; }

.testata-globe video::-webkit-media-controls,
.testata-globe video::-webkit-media-controls-enclosure,
.testata-globe video::-webkit-media-controls-start-playback-button { display: none !important; }

/* ---------- Testata: sequenza di composizione -----------------------------
   E' la stessa della schermata di intro della Versione 1: i marchi entrano,
   poi il logotipo riga per riga, poi le scritte. Qui in piu' entrano anche il
   luogo e il bottone, che nella Versione 1 stavano nella hero.            */

@keyframes intro-pop     { from { opacity: 0; scale: .72; }         to { opacity: 1; scale: 1; } }
@keyframes intro-from-l  { from { opacity: 0; translate: -28px 0; } to { opacity: 1; translate: 0; } }
@keyframes intro-from-r  { from { opacity: 0; translate: 28px 0; }  to { opacity: 1; translate: 0; } }
@keyframes intro-rise    { from { opacity: 0; translate: 0 18px; }  to { opacity: 1; translate: 0; } }

.marchi                 { animation: intro-pop    .5s ease-out  .10s both; }
.wordmark-words         { animation: intro-from-l .6s ease-out  .45s both; }
.wordmark-of-hope       { animation: intro-from-r .6s ease-out  .62s both; }
.wordmark-forum         { animation: intro-from-l .6s ease-out  .79s both; }
.testata-claim          { animation: intro-rise   .5s ease-out  .90s both; }
.intro-label            { animation: intro-rise   .5s ease-out 1.00s both; }
.intro-dates            { animation: intro-rise   .5s ease-out 1.12s both; }
.testata-luogo          { animation: intro-rise   .5s ease-out 1.24s both; }
.testata-quando .btn    { animation: intro-rise   .5s ease-out 1.40s both; }

/* Il mappamondo entra in dissolvenza come gli altri, ma l'opacita' NON puo'
   stare sul riquadro: e' il contenitore del <video>, e un contenitore
   trasparente fa rifiutare l'autoplay ai browser che lo condizionano alla
   visibilita'. Quindi il riquadro resta sempre opaco e a sfumare e' un velo
   bianco sopra: stesso effetto a schermo, nessun effetto sull'autoplay.   */
.testata-globe::after {
  content: '';
  position: absolute;
  inset: 0;
  background: #fff;
  pointer-events: none;
  z-index: 2;
  animation: velo-via 1.1s ease-out .50s both;
}

@keyframes velo-via { from { opacity: 1; } to { opacity: 0; } }

@media (prefers-reduced-motion: reduce) {

  .marchi,
  .wordmark img,
  .testata-claim,
  .intro-label,
  .intro-dates,
  .testata-luogo,
  .testata-quando .btn {
    animation: none;
    opacity: 1;
    translate: none;
    scale: none;
  }

  .testata-globe::after  { animation: none; opacity: 0; }
  .testata-globe::before { opacity: 1; }
}

/* ---------- Citazione -----------------------------------------------------
   Blocco 1263px a (49, 960). Testo IvyPresto Thin 50/55.                   */

.quote {
  background: var(--ardesia);
  color: #fff;
  padding-block: clamp(40px, 5.56vw, 80px) clamp(56px, 9.72vw, 140px);
}

.quote-inner {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* nel frame il blocco della citazione e' largo 1263 e parte dallo stesso
   margine sinistro di tutto il resto */
.quote blockquote { max-width: 1263px; }

.quote blockquote p {
  font-family: var(--font-serif);
  font-weight: 100;
  font-size: clamp(24px, 3.5vw, 50px);
  line-height: 1.1;
}

.quote blockquote footer {
  margin-top: clamp(20px, 2.7vw, 39px);
  font-family: var(--font-serif);
  font-weight: 400;
}

.quote-source {
  display: block;
  font-style: normal;
  font-size: clamp(16px, 1.74vw, 25px);
  line-height: 1.33;
}

.quote-author {
  display: block;
  margin-top: clamp(12px, 1.6vw, 23px);
  font-size: clamp(19px, 2.1vw, 30px);
  line-height: 1.08;
  text-transform: uppercase;
}

/* ---------- Un forum, tre tappe -------------------------------------------
   Banda sabbia a tutta larghezza, y 1470 -> 2732.
   Titolo a (51, 87), testo a (51, 172), card a (50, 431).                  */

/* Versione 2: la sezione sta sul bianco della pagina. Nella Versione 1 aveva
   il fondo sabbia; nel frame 580:8420 fra la banda scura della citazione e il
   box rosso non c'e' nessun rettangolo, e il frame e' bianco. */
.forum {
  /* Nel frame la banda scura finisce a 1550 e il titolo comincia a 1688:
     138px. Prima erano 248, perche' al margine si sommava il padding interno
     della sezione — che serviva a dare aria dentro la banda sabbia, e senza
     quella banda non ha piu' motivo di esserci. */
  margin-top: clamp(56px, 9.58vw, 138px);
}

.forum-inner {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  /* niente padding sopra: lo stacco lo fa il margine della sezione. Sotto,
     nel frame fra le card e il box rosso restano 137px. */
  padding: 0 var(--gutter) clamp(60px, 9.5vw, 137px);
}

.forum h2 {
  font-weight: 500;
  font-size: clamp(28px, 2.8vw, 40px);
  line-height: 1.1;
  letter-spacing: -.03em;
}

.forum h2 .accent { color: var(--red-warm); }

/* I due paragrafi hanno la larghezza del riquadro di testo del frame, 821px,
   corpo 22 e interlinea 26. Gli a capo pero' stanno nell'HTML: alla stessa
   larghezza, corpo e crenatura, a video il testo rende un filo piu' stretto
   che in Figma, e il primo paragrafo si prendeva una parola in piu' per riga.
   Nessuna larghezza andava bene per tutti e due — al primo servivano 740, al
   secondo 821 — quindi gli a capo sono espliciti. */
.forum-intro p {
  margin-top: clamp(14px, 1.39vw, 20px);
  max-width: 821px;
  font-weight: 300;
  font-size: clamp(16px, 1.53vw, 22px);
  line-height: 1.18;
  letter-spacing: -.03em;
}

/* Gli a capo forzati valgono solo dove la colonna arriva davvero agli 821px
   del frame; sotto, il testo si riadatta da solo come qualunque paragrafo. */
.forum-intro br { display: none; }

@media (min-width: 1000px) {
  .forum-intro br { display: inline; }
}

.cards {
  margin-top: clamp(40px, 6.5vw, 94px);
  display: grid;
  gap: clamp(16px, 1.75vw, 25px);
}

/* I segni di posizione del carosello esistono solo su mobile: qui restano
   fuori campo, cosi' `main.js` puo' costruirli senza condizioni. */
.cards-punti { display: none; }

/* Le card hanno due facce. A riposo la foto con il marchio; al passaggio del
   mouse (o col focus da tastiera) un pannello a tinta piena con etichetta,
   titolo, foto e luogo — variante "Variant2" dei componenti Figma
   233:960, 243:1195 e 243:1300.

   Le misure del pannello sono quelle del frame, dove la card e' larga
   429,824px, espresse in `cqw`: 1cqw = 1% della larghezza della card, quindi
   il pannello si riscala con la card senza media query. Per questo la card
   dichiara `container-type: inline-size`.                                  */

.card {
  position: relative;
  aspect-ratio: 429.824 / 661.206;
  overflow: hidden;
  container-type: inline-size;
}

.card-inner {
  position: absolute;
  inset: 0;
  display: block;
  color: var(--on-panel);
  text-decoration: none;
}

/* ---- faccia a riposo ---- */

.card-cover { position: absolute; inset: 0; }

.card-bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* velature piatte sopra la foto, come nel frame */
.card-cover::after {
  content: '';
  position: absolute;
  inset: 0;
}

.card--simeri       { --panel: #bb4737; }
.card--sanfrancisco { --panel: #2d3b46; }
.card--gandolfo     { --panel: #3a2c28; }

.card--simeri       .card-cover::after { background: linear-gradient(rgba(186, 70, 55, .2), rgba(186, 70, 55, .2)), rgba(0, 0, 0, .3); }
.card--sanfrancisco .card-cover::after { background: linear-gradient(rgba(45, 59, 70, .5), rgba(45, 59, 70, .5)), rgba(0, 0, 0, .05); }
.card--gandolfo     .card-cover::after { background: linear-gradient(rgba(57, 43, 40, .5), rgba(57, 43, 40, .5)), rgba(0, 0, 0, .03); }

.card--gandolfo .card-bg { object-position: 30% center; }

.card-mark {
  position: absolute;
  top: 50%;
  left: 50%;
  translate: -50% -50%;
  z-index: 1;
  width: 24%;
  height: auto;
}

/* ---- faccia al passaggio del mouse ---- */

.card-panel {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  flex-direction: column;
  padding: 8.67cqw 5.61cqw 6cqw;      /* 37,27 e 24,1 nel frame */
  background: var(--panel);
  opacity: 0;
  transition: opacity .35s ease;
}

.card:hover .card-panel,
.card:focus-within .card-panel { opacity: 1; }

/* La data in cima alla card: nella Versione 2 ogni tappa la porta sopra
   all'etichetta (frame mobile, y32 contro y70). Come il resto del pannello e'
   in `cqw`, cioe' in percentuale della larghezza della card. */
.card-data {
  display: block;
  margin-bottom: 1.86cqw;             /* 8 */
  font-weight: 700;
  font-size: 5.95cqw;                 /* 21 su 353 */
  line-height: 1.15;
}

.card-tag {
  font-weight: 700;
  font-size: 4.67cqw;                 /* 20,085 */
  line-height: 1.29;
  letter-spacing: .01em;
  text-transform: uppercase;
}

/* Il filetto sta **fra la data e l'etichetta**, non sotto: nel frame Line 6
   cade a y77 e "PRIMO DIALOGO" a y85. */
.card-rule {
  display: block;
  width: 84.3cqw;                     /* 362,338 */
  margin-bottom: 1.86cqw;             /* 8 */
  border-top: 1px solid currentColor;
}

/* `margin-block: auto` centra il titolo fra l'etichetta e la fotografia, come
   nel frame, e fa una cosa in piu' che e' il motivo vero per cui sta qui: con
   due margini automatici uguali la quota della foto diventa
   `catena fissa in alto + (altezza libera)/2 + titolo + (altezza libera)/2`,
   dove l'altezza libera contiene il titolo col segno meno — i due termini si
   annullano e **la foto cade sempre alla stessa quota, qualunque sia il numero
   di righe del titolo**. E' cosi' che le tre card restano allineate anche se
   il secondo titolo ha una riga in piu'. */
.card-title {
  margin-block: auto;
  font-family: var(--font-serif);
  font-weight: 300;
  font-size: 7.24cqw;                 /* 31,108 */
  line-height: .976;                  /* 30,367 / 31,108 */
}

.card-title-sub { font-weight: 100; }

/* La fotografia ha **misura fissa**, uguale in tutte e tre le card: 378x245
   nel frame, cioe' 87,85% e 57,01% della larghezza della card. Prima l'altezza
   la dava `aspect-ratio`, che pero' in una colonna flex non fissa la misura
   sull'asse principale: la foto si prendeva lo spazio avanzato e veniva 256,
   254 e 285 nelle tre card — era questo il "la prima e' piu' grande".

   `min-height: 0` resta, ed e' la rete di sicurezza: la card ha proporzioni
   fisse e `overflow: hidden`, quindi quello che non ci sta sparisce, e a
   sparire sarebbe il piede. Senza, un flex item non scende sotto la sua
   altezza naturale; con il ripiego Didot (kit Adobe non caricato) il titolo
   passa da 3 righe a 5 e "Tiriolo -" restava tagliato a meta'. Ora a cedere e'
   la fotografia; il ritaglio lo fa `object-fit: cover`. */
.card-photo {
  width: 87.85cqw;                    /* 377,602 */
  height: 57.01cqw;                   /* 245,04 */
  flex: 0 1 auto;                     /* non cresce mai, si accorcia solo se serve */
  min-height: 0;
  object-fit: cover;
}

.card--gandolfo .card-photo { object-position: 40% center; }

/* Nel frame "vai al programma" non sta accanto al luogo: sta **sotto**, a
   destra (y620, mentre CATANZARO finisce a 611). E il `min-height` riserva
   quello spazio in tutte e tre le card, anche nelle due senza pulsante: se no
   il piede sarebbe piu' basso li' e la fotografia scenderebbe, rompendo
   l'allineamento fra le tre. */
.card-foot {
  margin-top: 7.21cqw;                /* 31 */
  min-height: 17cqw;                  /* 73: luogo + citta' + pulsante */
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2.1cqw;                        /* 9 */
}

.card-where { align-self: stretch; }

.card-place {
  display: block;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 300;
  font-size: 7.2cqw;                  /* 30,958 */
  line-height: .91;
}

.card-city {
  display: block;
  margin-top: 1.9cqw;
  font-size: 2.45cqw;                 /* 10,532 */
  line-height: 1.14;
  letter-spacing: .04em;
  text-transform: uppercase;
}

/* `line-height: 1` e niente padding: il pulsante deve stare dentro ai 73px che
   il piede riserva (`min-height` su `.card-foot`), se no e' la card col
   pulsante ad avere il piede piu' alto e la sua fotografia sale di 7px
   rispetto alle altre due. Nel frame il testo e' alto 13. */
.card-cta {
  display: inline-flex;
  align-items: center;
  gap: 1.6cqw;
  font-size: 2.99cqw;                 /* 12,855 */
  line-height: 1;
  white-space: nowrap;
}

.card-cta img { width: 3.55cqw; height: auto; }

.card-inner:focus-visible {
  outline: 2px solid var(--ink);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
  .card-panel { transition-duration: .01ms; }
}

/* ---------- Primo dialogo -------------------------------------------------
   Box rosso 1196x563 a (121, 2682): risale di 50px dentro la banda sabbia. */

/* Nella Versione 1 il box rosso risaliva sopra la banda sabbia con un margine
   negativo. Senza quella banda l'accavallamento non ha piu' senso: il box
   segue le card alla distanza del frame. */
.dialogo {
  position: relative;
  padding-inline: var(--gutter);
}

/* Il padding sta in tre variabili perche' la fotografia deve annullarlo: nel
   frame arriva a filo dei bordi del box, non dentro al suo margine. */
.dialogo-box {
  position: relative;
  overflow: hidden;
  width: 100%;
  max-width: 1196px;
  margin-inline: auto;
  --pad-x: clamp(22px, 5.2vw, 69px);
  --pad-t: clamp(24px, 2.9vw, 37px);
  --pad-b: clamp(32px, 5.1vw, 74px);
  padding: var(--pad-t) var(--pad-x) var(--pad-b);
  background: var(--red);
  color: var(--on-red);
  /* colonna flex per poter spostare la fotografia con `order`: nell'HTML sta
     prima di tutto, ma la sua posizione cambia col formato */
  display: flex;
  flex-direction: column;
}

.dialogo-head { display: block; }

.dialogo-date {
  font-weight: 700;
  font-size: clamp(17px, 1.55vw, 22.3px);
  line-height: 1.29;
}

.dialogo-label {
  font-weight: 400;
  font-size: clamp(13px, 1.12vw, 16px);
  line-height: 1.17;
  text-transform: uppercase;
}

/* "Location" e i due indirizzi, che sono link a Google Maps. Su mobile stanno
   sotto alla data, sul desktop di fianco (vedi il blocco da 900px). */
.dialogo-dove {
  margin-top: clamp(18px, 2vw, 26px);
}

.dialogo-dove-titolo {
  font-weight: 700;
  font-size: clamp(17px, 1.55vw, 22.3px);
  line-height: 1.29;
}

.dialogo-dove p + p { margin-top: 2px; }

.dialogo-dove a {
  font-weight: 400;
  font-size: clamp(15px, 1.25vw, 18px);
  line-height: 1.17;
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 3px;
}

.dialogo-dove a:hover,
.dialogo-dove a:focus-visible { text-decoration-thickness: 2px; }

.dialogo-rule {
  height: 0;
  margin: clamp(14px, 1.7vw, 22px) 0 0;
  border: 0;
  /* `<hr>` porta un colore proprio dal browser — grigio — quindi
     `currentColor` non ereditava il bianco del box: la riga veniva grigia su
     fondo rosso. `color: inherit` lo riallinea al testo. */
  color: inherit;
  border-top: 1px solid currentColor;
}

/* freccia sul filetto, a metà della sua larghezza */
.dialogo-body {
  margin-top: clamp(28px, 2.85vw, 41px);   /* filetto 138 -> titolo 179 */
  display: grid;
  gap: clamp(24px, 3vw, 40px);
}

.dialogo-title {
  font-family: var(--font-serif);
  font-weight: 400;
  font-size: clamp(20px, 2.1vw, 30px);
  line-height: .96;
}

.dialogo-title span { display: block; }
.dialogo-title-sub { font-weight: 100; }

.dialogo-copy p {
  margin-top: clamp(14px, 1.3vw, 18px);
  max-width: 701px;
  font-size: clamp(14px, 1.12vw, 16px);
  line-height: 1.11;
}

.dialogo-testo-inner > p:first-child { margin-top: clamp(20px, 2.4vw, 34px); }

/* Il pulsante "Continua a leggere" serve solo su schermo stretto: da 700px
   in su il testo e' sempre aperto e il pulsante non esiste a video. */
.dialogo-piu { display: none; }

/* La fotografia del box. Nel frame arriva a filo dei bordi: a tutta larghezza
   in fondo su mobile e tablet, a filo destro e per tutta l'altezza sul
   desktop. I margini negativi annullano il padding del box. */
.dialogo-foto {
  order: 1;                     /* in fondo al box: e' il caso del tablet */
  margin: 28px calc(-1 * var(--pad-x)) calc(-1 * var(--pad-b));
}

.dialogo-foto img {
  display: block;
  width: 100%;
  height: auto;
}

/* ---------- Pattern -------------------------------------------------------
   Fascia decorativa 1440x246 ricomposta dai 417 elementi del frame.        */

/* Versione 2: il pattern arriva da Figma come un solo SVG (nodo `580:9127`,
   1440x255,6). Vettoriale, quindi resta nitido a ogni misura e pesa meno del
   PNG che c'era prima. La fascia nel frame e' alta 256, non 246. */
.pattern {
  margin-top: clamp(40px, 5.2vw, 75px);
  height: clamp(96px, 17.78vw, 256px);
  background: url('../assets/img/pattern.svg') repeat-x center / auto 100%;
}

/* ---------- Loghi ---------------------------------------------------------
   Etichette Suisse Intl 19.6px #1d1d1b, filetto 0.73px #1d1d1b.            */

/* Fra l'ultimo logo e il footer il frame lascia 321px; prima erano 58. */
.loghi-inner {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding: clamp(80px, 13vw, 188px) var(--gutter) clamp(120px, 22.3vw, 321px);
}

.loghi-band + .loghi-band,
.loghi-duo + .loghi-band,
.loghi-band + .loghi-duo { margin-top: clamp(40px, 4.6vw, 66px); }

.loghi h3 {
  font-family: var(--font-ui);
  font-weight: 400;
  font-size: clamp(16px, 1.36vw, 19.6px);
  line-height: 1.28;
  color: var(--ink-soft);
}

.loghi-row {
  margin-top: clamp(16px, 1.9vw, 27px);
  padding-top: clamp(16px, 1.9vw, 27px);
  border-top: 1px solid var(--ink-soft);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  --stacco: clamp(28px, 4.4vw, 64px);
  gap: var(--stacco);
}

/* Capo riga dentro a un contenitore flex: un elemento largo quanto la riga e
   alto zero. Serve alla fascia dei media partner, che sul desktop va 5 + 3
   mentre da sola ne metterebbe sei sulla prima riga. Su telefono sparisce. */
.loghi-row li.loghi-acapo {
  flex: 0 0 100%;
  height: 0;
}

/* Quel capo riga aggiunge pero' una riga in mezzo, e il `row-gap` finisce
   contato due volte: una sopra e una sotto. Non si rimedia con un margine
   negativo sul segnaposto — la riga di un contenitore flex non puo' essere
   piu' bassa di zero, quindi il meno sparisce e restano i due stacchi interi
   (127px invece di 53, ed e' lo spazio bianco che si vedeva sotto ad
   Avvenire). Qui il `row-gap` e' meta' di quello voluto: sommandosi da' i
   53px che il frame lascia fra le due righe dei media partner. */
.loghi-band--media .loghi-row { row-gap: clamp(8px, 1.04vw, 15px); }

/* la misura del logo sta sul li: dentro un flex item a larghezza indeterminata
   una width in percentuale ricadrebbe sulla dimensione intrinseca dell'immagine */
.loghi-row li {
  position: relative;
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: 100%;
}

.loghi-row img {
  width: var(--logo-w, 160px);
  max-width: 100%;
  height: auto;
}

.tbc {
  font-style: normal;
  font-family: var(--font-ui);
  font-size: 28px;
  line-height: 1;
  color: var(--ink-soft);
  align-self: flex-start;
}

.loghi-note {
  margin-top: clamp(24px, 3vw, 42px);
  font-family: var(--font-ui);
  font-size: 16px;
  color: var(--ink-soft);
  text-align: right;
}

/* ---------- Footer --------------------------------------------------------
   Banda grigia 1440x414. Logo a (50, 90); colonne a x=500, 838, 1175.      */

.site-footer {
  background: var(--verdino);
  color: var(--ink-soft);
  padding: clamp(40px, 6.3vw, 91px) 0 clamp(24px, 2.4vw, 34px);
}

.footer-inner,
.footer-bottom {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.footer-inner {
  display: grid;
  gap: clamp(28px, 3vw, 40px);
}

.footer-brand img { width: clamp(110px, 10.8vw, 156px); height: auto; }

.footer-col h4 {
  font-weight: 600;
  font-size: clamp(17px, 1.4vw, 20px);
  line-height: .825;            /* 16,5 su 20 */
}

.footer-col ul { margin-top: clamp(16px, 2.3vw, 33px); }

.footer-col li + li { margin-top: 15px; }

/* `display: block` non e' un dettaglio: da inline l'interlinea non governa
   l'altezza della riga, che restava quella ereditata dal body (1.4) e
   distanziava le voci molto piu' del frame. */
.footer-col a {
  display: block;
  font-size: clamp(16px, 1.25vw, 18px);
  line-height: .92;             /* 16,5 su 18 */
  text-decoration: none;
}

.footer-col a:hover { text-decoration: underline; }

.footer-bottom {
  margin-top: clamp(40px, 8.2vw, 118px);
  display: flex;
  flex-wrap: wrap;
  gap: 8px 40px;
  font-size: 14px;
  line-height: 1.14;
}

.footer-legal a { text-decoration: none; }
.footer-legal a:hover { text-decoration: underline; }

/* ===========================================================================
   Mobile — traduzione del frame `mobile` (384:891), 393x5461
   Tre comportamenti che il desktop non ha: le card diventano un carosello che
   si scorre col dito, il testo del primo dialogo parte chiuso, i loghi vanno
   su due colonne. Tutto dentro a max-width 699px: il desktop non si tocca.
   =========================================================================== */

@media (max-width: 699px) {

  /* ---- 1. Le tappe: carosello a scorrimento ----
     Nel frame la pista parte dal margine di sinistra e sborda a destra fino al
     bordo dello schermo (card 353 su 393). I margini negativi le fanno
     attraversare il contenitore; `flex: 0 0 100%` da' alla card esattamente la
     larghezza del contenitore meno i due margini, cioe' i 353 del frame. */
  .cards {
    display: flex;
    gap: 20px;
    margin-inline: calc(-1 * var(--gutter));
    padding-inline: var(--gutter);
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: var(--gutter);
    overscroll-behavior-x: contain;   /* lo swipe non torna indietro nella cronologia */
    scrollbar-width: none;
  }

  .cards::-webkit-scrollbar { display: none; }

  .card {
    flex: 0 0 100%;
    scroll-snap-align: start;
  }

  /* Nel frame mobile le card si vedono gia' aperte: niente stato a riposo,
     il pannello e' sempre a video. Le sue misure sono in `cqw`, quindi a 353px
     di card cadono da sole sui valori del frame. */
  .card-cover { display: none; }
  .card-panel { opacity: 1; }

  /* I segni di posizione sotto la pista (Group 105 nel frame): li costruisce
     `main.js`, cosi' non restano comandi morti se il JS non parte. */
  .cards-punti {
    margin: 18px 0 0;
    padding: 0;
    display: flex;
    justify-content: center;
    gap: 8px;
    list-style: none;
  }

  .cards-punto {
    width: 24px;
    height: 8px;
    padding: 0;
    border: 1px solid var(--ink-soft);
    border-radius: 4px;
    background: none;
    cursor: pointer;
    transition: background-color .25s ease;
  }

  .cards-punto.is-corrente { background: var(--ink-soft); }

  .cards-punto:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }

  /* ---- 2. Primo dialogo: il testo si apre verso il basso ----
     La classe la mette `main.js`. Senza JS questo blocco non si applica: il
     testo resta aperto e il pulsante invisibile, come sul desktop. */
  .dialogo-collassabile .dialogo-piu {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-top: clamp(16px, 4vw, 22px);
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    font-weight: 300;
    font-size: 14px;
    line-height: 1.93;
    letter-spacing: -.03em;
    text-decoration: underline;
    cursor: pointer;
  }

  .dialogo-collassabile .dialogo-piu-freccia {
    width: 8px;
    height: 8px;
    border-right: 1.5px solid currentColor;
    border-bottom: 1.5px solid currentColor;
    rotate: 45deg;                 /* punta in giu': il testo si apre sotto */
    translate: 0 -2px;
    transition: rotate .3s ease, translate .3s ease;
  }

  .dialogo-collassabile.is-aperto .dialogo-piu-freccia {
    rotate: 225deg;                /* aperto: la punta torna su */
    translate: 0 1px;
  }

  .dialogo-collassabile .dialogo-piu:focus-visible { outline: 2px solid #fff; outline-offset: 4px; }

  /* Il passaggio 0fr -> 1fr anima l'altezza senza doverla misurare in JS. */
  .dialogo-collassabile .dialogo-testo {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows .45s ease;
  }

  .dialogo-collassabile.is-aperto .dialogo-testo { grid-template-rows: 1fr; }

  .dialogo-collassabile .dialogo-testo-inner { overflow: hidden; }

  /* ---- 3. Loghi: due colonne, come nel frame ----
     Nel frame le colonne stanno a x=1 e x=183, larghe circa 170. La misura la
     porta gia' `--logo-w` sul singolo logo: dentro una cella di griglia il
     `max-width: 100%` la limita alla colonna, e i loghi grandi — fino a 340px
     sul desktop — rientrano senza doverli riscrivere uno per uno. */
  .loghi-row {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: clamp(22px, 6vw, 30px) 12px;
    align-items: center;
  }

  /* Ogni logo ha la sua misura anche qui: `--logo-m`, letta dal frame mobile.
     Limitarli alla colonna non basterebbe — tutti quelli piu' larghi della
     colonna finirebbero appiattiti sulla stessa misura, e nel frame invece
     vanno da 34px (UNDP) a 170px (Entopan). */
  .loghi-row img { width: var(--logo-m, var(--logo-w, 160px)); }

  .loghi-row li { justify-self: start; }

  /* Su telefono i loghi stanno al massimo su due colonne, media partner
     compresi: la fascia usa la griglia come tutte le altre e il capo riga del
     desktop va tolto di mezzo. Il selettore porta due classi perche'
     `.loghi-row li` e' piu' specifico di `.loghi-acapo` da solo: senza, il
     segnaposto resterebbe a video — invisibile ma largo mezza colonna. */
  .loghi-row li.loghi-acapo { display: none; }

  /* La prima riga dei media partner sta piu' stretta delle altre: ANSA e'
     quadrata e alta 59, quindi col suo bordo arriva fin sotto, mentre gli
     altri loghi sono bassi e, centrati nella riga, lasciano aria da soli.
     Cinque pixel sotto ai primi due bastano a staccarla dalla seconda. */
  .loghi-band--media .loghi-row > li:nth-child(-n+2) { padding-bottom: 5px; }
}

/* Nella home la testata ha `padding-bottom: 0` perche' la banda sabbia
   prosegue senza stacco nell'hero. Nelle pagine di servizio sotto non c'e'
   nulla, quindi la banda finirebbe di netto sulla base del logo: qui il
   respiro sotto e' lo stesso che c'e' sopra.
   La classe sta sul `<body>` e non sulla testata di proposito — la testata e'
   copiata da `index.html`, e una classe li' si perderebbe alla prima
   ricopiatura. */
.pagina-servizio .site-header { padding-bottom: clamp(20px, 2.8vw, 40px); }

/* ---------- Mappa del sito (sitemap.html) ---------------------------------
   Pagina di servizio, non un frame Figma: riusa la testata e il footer di
   index.html e la scala tipografica gia' in uso, senza inventare misure.   */

.sitemap { padding-block: clamp(48px, 7vw, 100px) clamp(60px, 9vw, 130px); }

.sitemap h1 {
  font-weight: 500;
  font-size: clamp(32px, 3.85vw, 55px);
  line-height: 1;
  letter-spacing: -.03em;
}

.sitemap h1 em {
  font-style: italic;
  color: var(--red);
}

.sitemap-nota {
  margin-top: clamp(14px, 1.3vw, 18px);
  max-width: 52ch;
  font-weight: 300;
  font-size: clamp(17px, 1.5vw, 21px);
  line-height: 1.25;
}

.sitemap-griglia {
  margin-top: clamp(40px, 5vw, 72px);
  display: grid;
  gap: clamp(32px, 4vw, 56px);
}

.sitemap-gruppo h2 {
  padding-bottom: 14px;
  border-bottom: 1px solid currentColor;
  font-weight: 600;
  font-size: clamp(17px, 1.4vw, 20px);
  line-height: .825;
}

.sitemap-gruppo ul {
  margin-top: 20px;
  display: grid;
  gap: 14px;
  list-style: none;
  padding: 0;
}

.sitemap-gruppo a {
  font-size: clamp(16px, 1.25vw, 18px);
  line-height: 1.1;
  text-decoration: none;
}

.sitemap-gruppo a:hover { text-decoration: underline; }

.sitemap-tipo {
  margin-left: 8px;
  font-size: 12px;
  letter-spacing: .06em;
  vertical-align: 2px;
}

/* Voci senza destinazione: restano testo, non link morti. Niente colore
   nuovo — la palette e' quella, qui basta smorzarle. */
.sitemap-attesa li {
  opacity: .5;
  font-size: clamp(16px, 1.25vw, 18px);
  line-height: 1.1;
}

/* ===========================================================================
   Breakpoint — i media query aggiungono, non sottraggono
   =========================================================================== */

/* ---- 700px: card a tre colonne, footer a due ---- */
@media (min-width: 700px) {

  .cards { grid-template-columns: repeat(3, 1fr); }

  .sitemap-griglia { grid-template-columns: repeat(3, 1fr); }

  .footer-inner { grid-template-columns: repeat(2, 1fr); }
}

/* ---- 900px: layout desktop ---- */
@media (min-width: 900px) {

  /* Promosso da / Co-promosso da: nel frame desktop stanno sulla stessa riga
     sotto a un filetto solo. Qui sono due fasce affiancate — il filetto ce
     l'ha ognuna, ma le due etichette sono alte uguali, quindi i due tratti
     cadono alla stessa quota e senza stacco fra le colonne si leggono come
     una riga sola. Colonne allineate al frame: x=50, 798 e 1140. */
  /* Due fasce affiancate. Nel frame **ognuna tiene il suo filetto** e fra le
     due colonne resta un vuoto: da qui le tre colonne, quella di mezzo e' lo
     stacco. Le misure sono quelle del frame, riferite ai 1340 della colonna. */
  .loghi-duo {
    display: grid;
    align-items: start;
  }

  .loghi-duo > .loghi-band + .loghi-band {
    margin-top: 0;
    grid-column: 3;
  }

  .loghi-duo .loghi-row > li { justify-content: flex-start; }

  /* Co-promosso da / Con il gratuito patrocinio di: filetti 0..496 e 618..1340 */
  .loghi-duo--patrocinio {
    grid-template-columns: minmax(0, 496fr) minmax(0, 122fr) minmax(0, 722fr);
  }

  /* Partner "Words of Hope Forum" / Con la partecipazione istituzionale di:
     filetti 0..778 e 901..1340 */
  .loghi-duo--partner {
    grid-template-columns: minmax(0, 778fr) minmax(0, 123fr) minmax(0, 439fr);
  }

  /* I quattro loghi devono stare nei 778 del filetto: 152 + 138 + 105 + 194
     fanno 589, quindi tre stacchi da 63 al massimo. Qui 59, per non stare al
     pelo: con quello di serie (63,4) il quarto andava a capo. */
  .loghi-duo--partner > .loghi-band:first-child .loghi-row {
    --stacco: clamp(24px, 4.1vw, 59px);
  }


  /* La fotografia sta in posizione assoluta sul fianco destro, quindi il testo
     deve fermarsi prima da solo. Le misure sono **percentuali del box**, non
     pixel: sotto i 1196 del frame — un iPad orizzontale, per dire — il box si
     stringe, e con misure fisse il testo finiva sotto all'immagine.
     Attenzione: non si puo' fare col padding del box, perche' un padding in
     percentuale si misura sul contenitore e non su se stesso, e cresceva con
     la finestra. Per questo il testo ha un contenitore suo e il box, qui,
     rinuncia al padding orizzontale. Nel frame: testo da 69 a 771, foto da
     778 — su 1196 fanno 5,77%, 58,7% e 65,05%. */
  .dialogo-box { padding-inline: 0; }

  .dialogo-testo-col {
    margin-left: 5.77%;
    width: 58.7%;
  }

  /* Nel frame la testata ha "Location" a x=429, cioe' 360 dopo il bordo del
     testo, su una colonna utile di 702: non e' allineata a destra. */
  .dialogo-head {
    display: grid;
    grid-template-columns: minmax(0, 360fr) minmax(0, 342fr);
    align-items: start;
  }

  .dialogo-dove { margin-top: 0; }

  /* La fotografia esce dal flusso e si prende il fianco destro del box, dal
     bordo alto a quello basso: 418 su 1196 nel frame. */
  .dialogo-foto {
    position: absolute;
    inset: 0 0 0 auto;
    width: 34.95%;
    margin: 0;
  }

  .dialogo-foto img {
    height: 100%;
    object-fit: cover;
  }

  /* il filetto nel frame e' 638 su una colonna utile di 702 */
  .dialogo-rule { max-width: 90.9%; }

  /* colonne alle ascisse del frame: logo a 50, poi 500, 838, 1175 */
  .footer-inner,
  .footer-bottom {
    display: grid;
    /* cinque colonne da quando c'e' anche Contatti: la sua e' piu' larga
       perche' deve contenere l'indirizzo per intero senza andare a capo */
    grid-template-columns: 340fr 250fr 220fr 220fr 310fr;
    gap: 0;
  }

  /* nel frame la riga legale parte dalla colonna "Link utili" (x=838) */
  .footer-legal { grid-column: 3 / -1; }
}

/* ---------- Testata: le due misure di schermo grande --------------------- */

/* Sui portatili la composizione risultava ingombrante: scende di un decimo, e
   il mappamondo un po' di piu'. */
@media (min-width: 1280px) and (max-width: 1699px) {
  .testata-inner  { --u: calc(min(100vw, var(--maxw)) / 1440 * .9); }
  .testata-globe  { --globo: .86; }
}

/* Fra 1700 e 1919 il mappamondo veniva a piena misura e risultava ingombrante:
   scende un po' e si sposta leggermente a destra. */
@media (min-width: 1700px) and (max-width: 1919px) {
  .testata-globe {
    --globo: .85;
    right: calc(-215 * var(--u));
  }
}

/* Da 1920 in su la composizione smette di crescere e il blocco da 1440 resta
   centrato: il mappamondo finirebbe lontano dal bordo, con una fascia bianca a
   destra. Qui si rimpicciolisce ancora e si aggancia al bordo della finestra
   invece che a quello del blocco. */
@media (min-width: 1920px) {
  .testata-globe {
    --globo: .88;
    right: calc((var(--maxw) - 100vw) / 2 + 40px);
  }
}

/* ---------- Testata: la versione da telefono -------------------------------
   Frame mobile `384:891`, largo 393. E' una composizione diversa da quella
   desktop, non la stessa rimpicciolita: i marchi sono piu' piccoli, il
   logotipo occupa quasi tutta la larghezza e **il mappamondo gli sta dietro**
   invece che di fianco.

   Stessa tecnica del desktop: una sola scala `--u`, qui 1/393 della larghezza.
   Oltre i 520px smette di crescere e la composizione resta centrata, se no su
   un tablet verrebbe enorme.                                              */

@media (max-width: 899px) {

  .testata-inner {
    --u: calc(min(100vw, 520px) / 393);
    width: calc(393 * var(--u));
    max-width: none;
    /* Nel frame la banda finisce a 710, cioe' 130px sotto al bottone. E'
       sembrato troppo vuoto: qui lo stacco e' dimezzato a 65, su richiesta.
       E' una differenza voluta rispetto al frame. */
    height: calc(662 * var(--u));
  }

  /* marchi 40x40 a (91,10) e (38,110-60): il riquadro li contiene entrambi */
  .marchi {
    left: calc(38 * var(--u));
    top: calc(10 * var(--u));
    width: calc(93 * var(--u));
  }

  /* Mappamondo e logotipo sono **un gruppo solo**, e su richiesta qui stanno
     al 90% del frame mobile per lasciare piu' aria al titolo: globo da 278 a
     250, logotipo da 352x151 a 317x136. La riduzione e' presa dall'angolo in
     alto a sinistra del gruppo — x=20, cioe' il margine, e y=52, cioe' il
     bordo alto del globo — cosi' i due restano concentrici come nel frame
     (centro del logotipo 177, centro del globo 177). Ridurne uno solo li
     scentrerebbe.

     **Il gruppo e' poi centrato in larghezza**, su richiesta e solo qui: nel
     frame il logotipo e' a filo di margine (x=20) e dopo la riduzione lasciava
     tutto il vuoto a destra. Centrarlo vuol dire spostare tutti e due della
     stessa quantita' — logotipo a 38, globo a 71,5 — cosi' i due centri
     restano appaiati sulla meta' dello schermo, 196,5 su 393. Il testo sotto
     resta invece allineato a sinistra al margine, come nel frame. */
  .testata-globe {
    left: calc(71.5 * var(--u));
    right: auto;
    top: calc(52 * var(--u));
    translate: none;
    width: calc(250 * var(--u));
  }

  .wordmark {
    left: calc(38 * var(--u));
    top: calc(109 * var(--u));
    width: calc(317 * var(--u));
    height: calc(136 * var(--u));
  }

  /* il titolo esteso: qui va su tre righe invece che due, e il payoff sotto.
     Nella schermata mobile il blocco parte a (20,328). */
  .testata-claim {
    left: calc(20 * var(--u));
    top: calc(324 * var(--u));
    width: calc(353 * var(--u));
  }

  /* Nella schermata mobile il titolo e' 17 su 22: la larghezza delle tre
     righe lo dice al pixel. A video pero' veniva minuto — e' il nome del
     forum, la seconda voce della testata dopo la data — quindi **su richiesta
     e' portato a 24**, in due giri, col passo stretto a 1,15 perche' un corpo
     piu' grande ne vuole meno. Il payoff sale con lui, da 12 a 14. A 24 le tre
     righe misurano 250, 214 e 262: la colonna e' 353, quindi c'e' ancora
     margine prima che vadano a capo da sole. */
  .testata-titolo {
    font-size: calc(24 * var(--u));
    line-height: 1.15;
  }

  .testata-titolo br { display: inline; }

  .testata-payoff {
    margin-top: calc(12 * var(--u));
    font-size: calc(14 * var(--u));
  }

  .testata-quando {
    left: calc(20 * var(--u));
    top: calc(450 * var(--u));
    width: calc(353 * var(--u));
  }

  /* tagli letti dal frame mobile: qui "23-25" e il mese hanno lo stesso corpo,
     mentre sul desktop sono 45 e 40 */
  .intro-label { font-size: calc(12 * var(--u)); }
  .intro-dates { margin-top: calc(6 * var(--u)); gap: calc(8 * var(--u)); }
  .intro-day,
  .intro-month { font-size: calc(27 * var(--u)); }

  .testata-luogo {
    margin-top: calc(13 * var(--u));
    font-size: calc(15 * var(--u));
  }

  .testata-luogo span { font-size: calc(12 * var(--u)); }

  .testata-quando .btn {
    margin-top: calc(25 * var(--u));
    min-width: calc(176 * var(--u));
    height: calc(32 * var(--u));
    font-size: max(10px, calc(12 * var(--u)));
  }

  /* ---- Il box del programma, misure del frame mobile ----
     Nel frame (`box_primodialogo`, 353x857) il blocco e' piu' arioso di come
     veniva coi valori del desktop rimpiccioliti: "Location" a 105, il filetto
     a 199, il titolo a 234, "Continua a leggere" a 326 e la fotografia a 372,
     alta 484 e a filo dei tre bordi del box.                                 */
  .dialogo-box { --pad-x: 20px; --pad-t: 33px; --pad-b: 0px; }

  /* Nel frame la fotografia e' a filo dei tre bordi del box — 353x484 su un
     box largo 353 — e sta 19px sotto a "Continua a leggere". */
  .dialogo-foto { margin-top: 19px; }

  /* nel frame data, etichetta e luogo stanno incolonnati a sinistra: il
     `text-align: right` del desktop qui faceva sembrare "CATANZARO (ITALIA)"
     centrato sotto al luogo */
  .dialogo-head {
    display: block;
  }

  .dialogo-date  { font-size: 20px; line-height: 1.2; }
  .dialogo-label { font-size: 16px; line-height: 1.375; }

  /* nel frame: "Location" a y105, cioe' 26px sotto all'etichetta */
  .dialogo-dove { margin-top: 26px; }
  .dialogo-dove-titolo { font-size: 20px; line-height: 1.2; }
  .dialogo-dove a { font-size: 16px; line-height: 1.375; }

  .dialogo-rule  { margin-top: 26px; }

  /* `.dialogo-body` porta un margine sopra e un `gap` che si sommavano ai
     valori del frame. Qui li azzera: lo stacco lo fanno le misure sotto. */
  .dialogo-body {
    margin-top: 0;
    gap: 0;
  }

  .dialogo-title {
    margin-top: 35px;
    font-size: 26px;
    line-height: 1.05;
  }

  .dialogo-collassabile .dialogo-piu { margin-top: 20px; }

  /* L'etichetta della fascia e' lunga: su schermo stretto il luogo va a capo
     tutto intero, invece di lasciare "Crichi" da solo sulla seconda riga.
     Sul desktop resta su una riga sola, come nel frame. */
  .loghi-luogo { display: block; }



}
