/* ============================================================
   DAVID VALMORI — DESIGN SYSTEM (home definitiva, sintesi A+B+C)
   Base: variante A "Editoriale" (vincitrice). Innesti:
   B → griglia compatta "Quattro strade", chip a pillola,
       filosofia a tutta pagina, progress bar, parallax hero.
   C → doppia didascalia hero, marker puntiformi timeline,
       ritratto in colonna in "Chi sono".
   Palette: #0a0a0b / #101010 / #000 / bianco / #EC8666 (hover #ef9d80)
   Font: Gotham (corpo) · Bebas Neue (display) — via fonts.css locale.

   INDICE DEI BLOCCHI
   01 · Token & reset
   02 · Primitive editoriali (wrap, eyebrow, sec-head, h-display, lead)
   03 · Bottoni
   04 · Cornice foto (.frame)
   05 · Reveal (solo html.js + motion gradito)
   06 · Progress bar di lettura
   07 · Header + menu mobile
   08 · 01 Hero (+ doppia didascalia, parallax hook)
   09 · 02 Chi sono (timeline puntiforme, ritratto fermo in colonna)
   10 · 03 Metodo E.T.I.C.O. (+ card keyline coral)
   11 · 04 A chi mi rivolgo (chip a pillola)
   12 · 05 Quattro strade (griglia compatta 4-up)
   13 · 06 Evento
   14 · 07 Risultati (ledger, note sotto il nome)
   15 · 08 Filosofia (momento isolato, tipografia pacata)
   16 · 09 Contenuti
   17 · 10 CTA finale
   18 · Footer
   ============================================================ */

/* ============ 01 · TOKEN & RESET ============ */
:root{
  --bg:#0a0a0b;
  --bg-2:#101010;
  --ink:#ffffff;
  --ink-70:rgba(255,255,255,.70);
  --ink-55:rgba(255,255,255,.55);
  --line:rgba(255,255,255,.10);
  --line-soft:rgba(255,255,255,.06);
  --line-strong:rgba(255,255,255,.25);
  --coral:#EC8666;
  --coral-hi:#ef9d80;
  --coral-12:rgba(236,134,102,.12);
  --coral-35:rgba(236,134,102,.35);
  --font-body:"Gotham","Helvetica Neue",Helvetica,Arial,sans-serif;
  --font-display:"Bebas Neue","Arial Narrow",Impact,sans-serif;
  --ease:cubic-bezier(.22,.61,.36,1);
  /* curva lunga e morbida: parte decisa e si posa piano, senza scatto finale */
  --ease-soft:cubic-bezier(.16,1,.3,1);
  --pad:clamp(1.5rem,5vw,4.5rem);
  --max:1240px;
  --sec-y:clamp(4.75rem,10.2vh,8.5rem);   /* respiro delle sezioni, accorciato del 14% */
}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:no-preference){
  html{scroll-behavior:smooth}
  /* Quando si clicca una voce del menu la sezione non deve incollarsi al bordo
     alto: sotto la barra fissa ci vuole aria, se no la testatina finisce
     mezza coperta. Questo stacco vale per tutte le ancore della pagina. */
  html{scroll-padding-top:76px}
}
/* ============ NIENTE SCORRIMENTO LATERALE, MAI ============
   Regola di ferro: la pagina non si sposta di lato né da desktop né da
   telefono. La garanzia sta qui, sulla radice, e non nella speranza che ogni
   singolo elemento non sfori: se qualcosa esce, viene tagliato e basta.
   `clip` e non `hidden` perché hidden sulla radice crea un contenitore di
   scorrimento e manda in tilt gli elementi che si agganciano (position:sticky).
   `hidden` resta come rete per i browser vecchi che non conoscono `clip`. */
html,body{max-width:100%;overflow-x:hidden}
@supports (overflow-x:clip){
  html,body{overflow-x:clip}
}
body{
  background:var(--bg);
  color:var(--ink);
  font-family:var(--font-body);
  font-weight:400;
  font-size:clamp(.9375rem,.9rem + .15vw,1.0625rem);
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
}
::selection{background:var(--coral);color:#0a0a0b}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
ul{list-style:none}
:focus-visible{outline:2px solid var(--coral);outline-offset:3px}

/* ============ 02 · PRIMITIVE EDITORIALI ============ */
.wrap{max-width:var(--max);margin:0 auto;padding-inline:var(--pad)}
.eyebrow{
  font-family:var(--font-body);font-weight:700;
  font-size:.6875rem;letter-spacing:.38em;text-transform:uppercase;
  color:var(--coral);
}
.sec{padding-block:var(--sec-y);position:relative}
.sec + .sec{border-top:1px solid var(--line-soft)}
/* testata di sezione: numero · etichetta · linea */
.sec-head{
  display:flex;align-items:baseline;gap:1.25rem;
  margin-bottom:clamp(2.35rem,5.1vw,3.8rem);
}
/* testatine di sezione: un filo più grandi, numero ed etichetta insieme così
   il rapporto fra i due resta quello di prima */
.sec-num{
  font-family:var(--font-display);font-weight:400;
  font-size:1.18rem;letter-spacing:.14em;
  color:var(--coral);
}
/* Lo spazio fra le lettere resta quello scelto finché c'è posto: sotto i 523px
   di finestra si stringe da solo, in proporzione. Serve perché l'etichetta sta
   su una riga sola e le più lunghe ("Formazione, ricerca e studio") a 360px
   uscivano dallo schermo di 57px, allargando la pagina. Su desktop non cambia
   niente: lì .38em è sempre il valore più piccolo dei due. */
.sec-label{
  font-weight:700;font-size:min(.775rem,2.9vw);letter-spacing:min(.38em,.45vw);
  text-transform:uppercase;color:var(--ink-55);white-space:nowrap;
}
.sec-head::after{content:"";flex:1;height:1px;background:var(--line);transform:translateY(-.35em)}
.h-display{
  font-family:var(--font-display);font-weight:400;
  letter-spacing:.015em;line-height:.96;
  font-size:clamp(2.75rem,6.2vw,5.25rem);
  text-transform:uppercase;
}
.h-display em{font-style:normal;color:var(--coral)}
.lead{color:var(--ink-70);max-width:56ch}

/* ============ 03 · BOTTONI ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.7em;
  font-weight:700;font-size:.75rem;letter-spacing:.22em;text-transform:uppercase;
  padding:1.05em 2.1em;border:1px solid transparent;
  transition:background-color .3s ease,color .3s ease,border-color .3s ease;
  cursor:pointer;white-space:nowrap;
}
/* schermi piccolissimi (iPhone SE di prima generazione, 320px): i bottoni
   stanno su una riga sola, e i più lunghi non ci entravano. Qui e solo qui
   respiro e spaziatura si stringono, quel tanto che basta. */
@media (max-width:340px){
  .btn{padding-inline:1.3em;letter-spacing:.14em}
}
.btn-solid{background:var(--coral);color:#0a0a0b;border-color:var(--coral)}
/* hover: il pieno si svuota, restano bordo e testo salmone */
.btn-solid:hover{background:transparent;border-color:var(--coral);color:var(--coral)}
.btn-line{border-color:var(--line-strong);color:var(--ink)}
.btn-line:hover{border-color:var(--coral);color:var(--coral)}
.btn .arr{font-family:var(--font-body);font-weight:400;transition:transform .3s ease}
.btn:hover .arr{transform:translateX(4px)}

/* ============ 04 · CORNICE FOTO (mai full-bleed) ============ */
.frame{
  position:relative;border:1px solid var(--line);
  padding:.625rem;background:var(--bg-2);
}
.frame img{width:100%;height:100%;object-fit:cover}
/* involucro interno: e' lui a tagliare la foto che sborda per il movimento,
   cosi' la cornice non taglia il proprio angolo salmone */
.frame-in{display:block;position:relative;width:100%;height:100%;overflow:hidden}
.frame figcaption{
  position:absolute;left:.625rem;bottom:-1.9rem;
  font-size:.625rem;font-weight:500;letter-spacing:.3em;text-transform:uppercase;
  color:var(--ink-55);
}
.frame::after{ /* segno d'angolo coral, dettaglio editoriale */
  content:"";position:absolute;top:-1px;right:-1px;width:1.5rem;height:1.5rem;
  border-top:1px solid var(--coral);border-right:1px solid var(--coral);
}

/* ============ 05 · REVEAL — pattern no-JS ============
   Gli stati nascosti valgono SOLO se il JS ha marcato <html class="js">
   e il motion è gradito: a JS spento la pagina è interamente visibile. */
@media (prefers-reduced-motion:no-preference){
  html.js .rev{opacity:0;transform:translateY(26px);
    transition:opacity .8s var(--ease),transform .8s var(--ease);
    transition-delay:var(--d,0s)}
  html.js .rev.in{opacity:1;transform:none}
}

/* ============ 06 · PROGRESS BAR DI LETTURA (da B) ============ */
#progress{
  position:fixed;top:0;left:0;height:2px;width:0;z-index:120;
  background:var(--coral);pointer-events:none;
}
@media (prefers-reduced-motion:reduce){#progress{display:none}}

/* ============ 07 · HEADER + MENU MOBILE ============ */
.hdr{
  position:fixed;inset:0 0 auto 0;z-index:100;
  border-bottom:1px solid transparent;
  transition:background-color .35s ease,border-color .35s ease;
}
.hdr.on{background:rgba(10,10,11,.88);border-bottom-color:var(--line-soft);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.hdr-in{
  max-width:var(--max);margin:0 auto;padding:1.1rem var(--pad);
  display:flex;align-items:center;justify-content:space-between;gap:2rem;
}
.hdr-logo img{height:32px;width:auto;aspect-ratio:1000/168}
.hdr-nav{display:flex;align-items:center;gap:2rem}
.hdr-nav a{
  font-weight:500;font-size:.75rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--ink-70);transition:color .25s ease;
}
.hdr-nav a:hover{color:var(--coral)}
/* Evento: la voce piu' importante del sito — logica colore INVERTITA:
   coral di default, si spegne sul grigio del menu quando ci passi sopra */
/* Nessuna voce e' salmone per partito preso: il salmone segna dove sei.
   La voce si accende quando la sezione corrispondente e' quella che stai
   guardando, e si spegne appena la superi. */
.hdr-nav a.qui{color:var(--coral)}
.hdr-nav a.qui:hover{color:var(--coral)}
/* il selettore .hdr-nav a è più specifico: il bottone va scritto allo stesso
   livello, se no eredita il grigio del menu e in hover diventa salmone su salmone */
.hdr-nav a.hdr-cta{
  font-weight:700;font-size:.75rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--coral);border:1px solid var(--coral-35);padding:.7em 1.5em;
  transition:background-color .25s ease,color .25s ease,border-color .25s ease;
}
.hdr-nav a.hdr-cta:hover{background:var(--coral);border-color:var(--coral);color:#0a0a0b}
/* "CONTATTAMI" (David, 22/08): voce di menu come le altre, senza cornice, a
   sinistra di Candidati. Candidati resta l'unica azione con il rettangolo,
   cosi' l'occhio ha un solo bersaglio forte.
   TERZO GIRO: il grassetto NON e' piu' su Contattami, e' su EVENTO (sotto).
   Togliendo la cornice e la voce "Metodo" la fila si e' accorciata di 133px, e
   il bottone non ha piu' bisogno di sparire sugli schermi piccoli: la regola
   che lo nascondeva sotto i 1500px e' stata eliminata. */
.hdr-nav a.hdr-contatta:hover{color:var(--coral)}

/* "EVENTO" IN EVIDENZA (David, 22/08): grassetto BIANCO, perche' e' la voce
   che porta soldi. Niente colore diverso: nella barra l'unica cosa colorata
   resta il bottone Candidati.
   NIENTE MISURE PROPRIE: corpo, spaziatura e stampatello restano quelli delle
   altre voci, cambia solo il peso. Se qui si mette un font-size, la voce stona
   e si scolla dalle regole che stringono la barra sugli schermi medi. */
.hdr-nav a.nav-evt{
  font-weight:700;color:var(--ink);
}
.hdr-nav a.nav-evt:hover{color:var(--coral)}
.burger{
  display:none;background:none;border:0;cursor:pointer;padding:.5rem;
  flex-direction:column;gap:6px;
}
.burger span{display:block;width:26px;height:1px;background:var(--ink);transition:transform .3s ease,opacity .3s ease}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
/* BLOCCO DELLO SFONDO. Solo overflow:hidden non basta da telefono: se la
   pagina e' gia' scorsa, il dito continua a muoverla sotto al pannello aperto.
   Qui il body viene proprio fissato, e site.js si segna a che altezza era per
   rimetterlo esattamente li' alla chiusura. */
body.nav-lock{overflow:hidden;position:fixed;left:0;right:0;width:100%}
/* IL MENU A PANINO ARRIVA FINO A 1299px (David, 22/08). Prima si fermava a 900
   e fra 901 e 1299 restava la fila di voci, che pero' in quello spazio non ci
   sta: per farcela stare era stata stretta fino a 9,6px, cioe' illeggibile, ed
   e' proprio quello che David ha visto aprendo il sito da una finestra piu'
   piccola. Misurato: a 901px la fila a grandezza piena sborda di 306 pixel, a
   1260 di 16.
   Non c'era una terza strada: o testo minuscolo o panino. Meglio il panino.
   LA SOGLIA E' 1300 E NON 1290 PERCHE' A 1290 SBORDAVA DI UN PIXEL ESATTO
   (misurato: 1227 su 1226). Da 1292 in su ci sta; 1300 lascia sei pixel di
   margine, che con i caratteri e' meglio non tirare al filo.
   ATTENZIONE: qui e' cambiata SOLO la soglia della barra. Tutto il resto del
   sito continua a passare a mobile a 900px, e non e' un errore: sono due cose
   diverse, la barra ha un problema suo di spazio. */
@media (max-width:1299px){
  /* il pattern overlay vale solo con JS attivo; a JS spento niente
     burger morto né pannello nascosto (i link restano nel footer) */
  html.js .burger{display:flex}
  html:not(.js) .hdr-nav{display:none}
  html.js .hdr-nav{
    /* height:100dvh e non inset:0: da telefono la barra degli indirizzi si
       apre e si chiude, e con inset:0 il pannello restava della misura di
       prima. dvh e' l'altezza VERA della finestra in quel momento. */
    position:fixed;left:0;right:0;top:0;height:100dvh;z-index:50;
    background:#0a0a0b;
    flex-direction:column;justify-content:center;gap:1.35rem;
    overflow-y:auto;overscroll-behavior:contain;
    opacity:0;visibility:hidden;transition:opacity .28s ease,visibility .28s ease;
  }
  html.js .hdr-nav.open{opacity:1;visibility:visible}
  /* le voci stavano a 2,2rem l'una dall'altra e il blocco veniva cosi' alto che
     la prima finiva quasi sotto al logo (David, 23/08: "chi sono e' troppo in
     alto"). A 1,35rem il blocco si accorcia e si centra davvero. */
  .hdr-nav a{font-size:1.1rem;letter-spacing:.3em;padding:.35rem 0}
  .hdr-logo,.burger{position:relative;z-index:60}
}

/* ============ 08 · 01 HERO ============ */
.hero{
  min-height:100svh;display:flex;flex-direction:column;justify-content:flex-end;
  padding-top:7rem;padding-bottom:0;
}
.hero-grid{
  display:grid;grid-template-columns:minmax(0,7fr) minmax(0,4.4fr);
  gap:clamp(2.5rem,6vw,6rem);align-items:end;
}
.hero-title{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(4.6rem,13.2vw,12.5rem);
  line-height:.86;letter-spacing:.01em;text-transform:uppercase;
  margin:1.6rem 0 2.2rem;
}
.hero-title .l2{display:block;color:var(--coral)}
.hero-roles{display:flex;flex-direction:column;gap:.35rem;margin-bottom:2rem}
.hero-role-main{font-weight:700;font-size:.9375rem;letter-spacing:.14em;text-transform:uppercase}
.hero-role-sub{font-weight:500;font-size:.75rem;letter-spacing:.26em;text-transform:uppercase;color:var(--ink-55)}
.hero-quote{
  font-style:italic;font-weight:400;color:var(--ink-70);
  max-width:44ch;padding-left:1.4rem;border-left:1px solid var(--coral);
  margin-bottom:2.8rem;
}
/* fascia ridotta: meno vuoto tra il rail e la sezione 02 */
.hero-ctas{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:clamp(2.2rem,4.5vh,3.2rem)}
.hero-ph{position:relative;margin-bottom:clamp(2.2rem,4.5vh,3.2rem)}
.hero-ph .frame{aspect-ratio:4/5;max-height:min(62vh,580px)}
.hero-ph .frame img{object-position:46% 22%}
/* doppia didascalia sotto la cornice (da C) */
.hero-plate{
  display:flex;justify-content:space-between;align-items:center;gap:.9rem;
  margin-top:.9rem;
  font-size:.625rem;font-weight:700;letter-spacing:.26em;text-transform:uppercase;
  color:var(--ink-55);
}
.hero-plate .dot{width:4px;height:4px;background:var(--coral);transform:rotate(45deg);flex:none}
.hero-meta{
  border-top:1px solid var(--line);
  display:flex;justify-content:space-between;align-items:center;
  padding-block:1.1rem;
  font-size:.625rem;font-weight:500;letter-spacing:.3em;text-transform:uppercase;color:var(--ink-55);
}
.hero-meta .n{font-family:var(--font-display);font-size:.95rem;letter-spacing:.14em;color:var(--coral)}
/* MOBILE: apre l'impatto tipografico, la foto arriva dopo */
@media (max-width:900px){
  .hero{min-height:auto;padding-top:6.5rem}
  .hero-grid{grid-template-columns:1fr;align-items:start}
  .hero-title{margin-top:1.2rem;font-size:clamp(4.2rem,19vw,7.5rem)}
  .hero-ph{max-width:420px;margin-bottom:2.4rem}
  .hero-ph .frame{aspect-ratio:4/5;max-height:52vh}
}
@media (max-width:520px){
  .hero-ctas .btn{flex:1 1 100%}
}

/* ============ 09 · 02 CHI SONO ============ */
#chi-sono.sec{padding-top:clamp(2rem,4vh,3.2rem)} /* la testata 02 sale verso la firma */
.chi-grid{
  display:grid;grid-template-columns:minmax(0,7fr) minmax(0,4.4fr);
  gap:clamp(2.5rem,6vw,6rem);align-items:start;
}
.chi-grid .h-display{margin-bottom:1.8rem;max-width:14ch}
.chi-grid .lead{margin-bottom:3.2rem}
.tl{border-top:1px solid var(--line)}
.tl li{
  display:grid;grid-template-columns:9.5rem 1fr;gap:1.5rem;
  padding:1.35rem 0 1.35rem 1.3rem;border-bottom:1px solid var(--line);
  align-items:baseline;position:relative;
}
/* marker puntiforme coral (da C) */
.tl li::before{
  content:"";position:absolute;left:0;top:2rem;
  width:5px;height:5px;border-radius:50%;background:var(--coral);
}
.tl-year{
  font-family:var(--font-display);font-size:1.5rem;line-height:1;
  letter-spacing:.05em;color:var(--coral);white-space:nowrap;
}
.tl-txt{font-size:.9em;color:var(--ink-70)}
/* ritratto fermo nella colonna foto.
   Era sticky, ma non si è mai visto: l'overflow:hidden della sezione lo teneva
   neutralizzato. Quando la sezione è passata a overflow:visible per la nebbia,
   lo sticky si è svegliato e la foto ha iniziato ad agganciarsi e staccarsi a
   scatti. Uno sticky non si rallenta, è un aggancio: quindi resta ferma. */
.chi-ph{align-self:stretch}
.chi-ph .frame{aspect-ratio:2/3}
/* respiro leggero dentro la cornice, come nella sezione 05: la foto è appena
   più alta del riquadro e usa quel margine per muoversi con lo scorrimento.
   Poco, così non scopre i bordi e non taglia la mano che indica. */
.chi-ph .frame img{
  position:relative;object-position:38% 46%;
  height:107%;top:-3.5%;will-change:transform;
}
@media (max-width:900px){
  .chi-grid{grid-template-columns:1fr}
  .chi-ph{max-width:420px}
  .tl li{grid-template-columns:6.5rem 1fr;gap:1rem;padding-left:1.1rem}
  .tl li::before{top:1.9rem}
  .tl-year{font-size:1.25rem}
}
/* Da telefono la colonna dell'anno era larga 104px per scriverci "2016", che
   ne occupa 36: 68px di vuoto rubati al testo, che restava in 204px su 342 e
   andava a capo ogni tre parole (una voce arrivava a sette righe).
   Con "auto" la colonna si stringe sul contenuto e il testo passa a ~272px.
   La griglia resta a due colonne: gli anni restano incolonnati come prima. */
@media (max-width:560px){
  .tl li{grid-template-columns:auto 1fr;gap:1.1rem}
}

/* ============ 10 · 03 METODO ============ */
.met-head{max-width:30ch;margin-bottom:1.8rem}
.met-intro{margin-bottom:clamp(3rem,6vw,4.5rem)}
.met-grid{
  display:grid;grid-template-columns:repeat(3,1fr);
  border-top:1px solid var(--line);border-left:1px solid var(--line);
}
.met-card{
  border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  padding:clamp(1.75rem,3vw,2.75rem);
  display:flex;flex-direction:column;gap:1.1rem;min-height:15rem;
  background:transparent;
  transition:background-color .4s ease;
  position:relative;
}
.met-card:hover{background:var(--bg-2)}
.met-card::after{
  content:"";position:absolute;left:0;bottom:-1px;height:1px;width:0;
  background:var(--coral);transition:width .45s ease;
}
.met-card:hover::after{width:100%}
.met-letter{
  font-family:var(--font-display);font-size:clamp(3rem,4.5vw,4.25rem);
  line-height:.9;color:var(--coral);
}
/* card "+ Vendita etica": keyline coral, MAI campitura piena */
.met-plus{box-shadow:inset 0 0 0 1px var(--coral-35)}
.met-plus:hover{box-shadow:inset 0 0 0 1px var(--coral)}
.met-plus .met-letter{color:var(--coral);font-size:clamp(2.2rem,3.4vw,3rem)}
.met-name{font-weight:700;font-size:.8125rem;letter-spacing:.2em;text-transform:uppercase}
.met-txt{font-size:.875em;color:var(--ink-55);line-height:1.7}
@media (max-width:900px){.met-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:600px){.met-grid{grid-template-columns:1fr}.met-card{min-height:0}}

/* ============ 11 · 04 A CHI MI RIVOLGO ============ */
/* il titolo ha bisogno di larghezza, se no si spezza in troppe righe:
   la foto gli lascia spazio e recupera sconfinando oltre il margine destro */
.chi2-grid{
  display:grid;grid-template-columns:minmax(0,6.4fr) minmax(0,5.6fr);
  gap:clamp(2.5rem,5vw,4.5rem);align-items:center;
}
/* qui il titolo non ha margine sotto: glielo dà il testo che lo accompagna */
.chi2-grid .lead{margin-top:clamp(1.8rem,3vw,2.6rem)}
.chi2-grid .lead + .lead{margin-top:1.15rem}
.chips{display:flex;flex-wrap:wrap;gap:.75rem;margin:2.4rem 0 2.6rem}
/* chip a pillola (da B) */
.chip{
  font-weight:500;font-size:.75rem;letter-spacing:.18em;text-transform:uppercase;
  padding:.72em 1.5em;border:1px solid var(--line);border-radius:100px;color:var(--ink-70);
  transition:border-color .3s ease,color .3s ease,background-color .3s ease;
}
.chip:hover{border-color:var(--coral-35);color:var(--coral);background:var(--coral-12)}
.nota{
  font-style:italic;color:var(--ink-70);font-size:.9em;
  padding-left:1.4rem;border-left:1px solid var(--coral);max-width:46ch;
}
/* la nota può essere su più blocchi: la barra salmone li abbraccia tutti */
.nota p + p{margin-top:1.05rem}
/* 3/2 invece di 4/3: è il formato nativo dello scatto, quindi niente ritaglio.
   Il ritaglio sta su .ph-clip e non sulla cornice: overflow:hidden sulla
   cornice mangerebbe il segno d'angolo salmone, che sporge di un pixel. */
.ph-clip{display:block;position:relative;overflow:hidden;aspect-ratio:3/2}
.chi2-ph .ph-clip img{
  position:absolute;left:0;top:-11%;width:100%;height:122%;object-fit:cover;
  will-change:transform;                 /* il movimento lo dà site.js */
}
/* spostata di 12px verso sinistra. La foto è larga esattamente quanto il
   riquadro, quindi object-position in orizzontale non farebbe nulla: si
   allarga di 24px e la si sposta di 12, così non scopre il bordo destro. */
.chi2-ph .frame img{object-position:22% 40%}
/* la foto esce dal margine destro: si sposta verso il bordo dello schermo e
   restituisce al titolo la larghezza che gli serviva */
.chi2-ph{margin-right:calc(-1 * clamp(1rem,6vw,7rem))}
@media (max-width:900px){
  .chi2-grid{grid-template-columns:1fr}
  .chi2-ph{margin-right:0}   /* a una colonna lo sconfinamento sborderebbe */
}

/* ============ 12 · 05 QUATTRO STRADE (griglia compatta 4-up, da B) ============ */
.per-title{margin-bottom:clamp(2.55rem,5.1vw,3.8rem)}
/* le card escono dalla colonna del sito e usano tutta la larghezza utile:
   restano quattro, ma molto più grandi. Il margine negativo le ricentra,
   perché margin auto non centra un blocco più largo del suo contenitore. */
.strade{
  --larghezza:min(1320px,calc(var(--vw,100vw) - 2 * var(--pad)));
  width:var(--larghezza);margin-left:calc((100% - var(--larghezza))/2);
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:clamp(1rem,1.8vw,1.7rem);
  /* una sola curva e una sola durata per tutto quello che si muove qui dentro:
     è l'incoerenza fra tempi diversi che faceva sembrare l'insieme a scatti */
  --t:.75s;
}
.strada{
  position:relative;display:block;overflow:hidden;
  border:1px solid var(--line);background:var(--bg-2);
  transition:border-color var(--t) var(--ease-soft),transform var(--t) var(--ease-soft),box-shadow var(--t) var(--ease-soft);
}
/* il bordo salmone in hover è un filo più spesso: l'ombra interna aggiunge
   mezzo pixel al bordo vero senza spostare di una virgola il contenuto */
.strada:hover{
  border-color:var(--coral-35);transform:translateY(-7px);
  box-shadow:0 26px 60px rgba(0,0,0,.5),inset 0 0 0 1.2px var(--coral-35);
}
.strada .ph{position:relative;display:block;aspect-ratio:3/4.35;overflow:hidden}
/* viraggio salmone leggerissimo: le quattro foto vengono da luci e giornate
   diverse, e questo velo le porta tutte nella stessa temperatura */
.strada .ph::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:var(--coral);opacity:.17;mix-blend-mode:soft-light;
}
.strada .ph img{
  width:100%;height:100%;object-fit:cover;
  transition:transform var(--t) var(--ease-soft),opacity var(--t) var(--ease-soft);
}
.strada:hover .ph img{transform:scale(1.06)}
.strada::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgba(10,10,11,.05) 0%,rgba(10,10,11,.22) 46%,rgba(10,10,11,.92) 100%);
}
.strada-idx{
  position:absolute;top:.9rem;left:.9rem;z-index:2;
  font-family:var(--font-display);font-size:.85rem;letter-spacing:.14em;
  color:var(--ink);background:rgba(10,10,11,.6);padding:.25em .7em;
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
}
.strada .info{display:block;position:absolute;left:0;right:0;bottom:0;z-index:2;padding:clamp(1rem,1.8vw,1.5rem)}
.strada .kick{
  font-weight:700;font-size:.6875rem;letter-spacing:.3em;text-transform:uppercase;
  color:var(--coral);display:block;margin-bottom:.45rem;
}
.strada .nome{
  display:block;font-family:var(--font-display);font-weight:400;
  font-size:clamp(1.6rem,2.3vw,2.3rem);line-height:1.04;letter-spacing:.02em;text-transform:uppercase;
}
/* la descrizione si apre sulla sua altezza vera (da 0fr a 1fr), non su un
   max-height a occhio: era quello a far finire la transizione prima del tempo
   e a chiudere con uno scatto. */
.strada .desc{
  display:grid;grid-template-rows:0fr;opacity:0;margin-top:0;
  transition:grid-template-rows var(--t) var(--ease-soft),opacity var(--t) var(--ease-soft),margin-top var(--t) var(--ease-soft);
}
.strada .desc > span{
  display:block;overflow:hidden;
  font-size:.9375rem;line-height:1.6;color:var(--ink-70);
}
.strada:hover .desc{grid-template-rows:1fr;opacity:1;margin-top:.7rem}
.strada .linea{
  display:block;width:1.75rem;height:1px;background:var(--coral);margin-top:.9rem;
  transition:width var(--t) var(--ease-soft);
}
.strada:hover .linea{width:3.5rem}
/* dove non c'è l'hover (telefono, tablet) la descrizione sta sempre aperta.
   Va aperta con grid-template-rows, non con max-height: da quando la card si
   apre sull'altezza vera, max-height non ha più alcun effetto e le descrizioni
   restavano invisibili su tutti i telefoni. */
@media (hover:none){
  .strada .desc{grid-template-rows:1fr;opacity:1;margin-top:.6rem}
}
@media (max-width:1000px){.strade{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){
  .strade{grid-template-columns:1fr}
  .strada .ph{aspect-ratio:4/3.4}
  .strada .desc{grid-template-rows:1fr;opacity:1;margin-top:.6rem}
}

/* ============ 13 · 06 EVENTO ============ */
.evt{background:var(--bg-2)}
.evt-grid{
  display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6.4fr);
  gap:clamp(2.5rem,6vw,6rem);align-items:center;
}
.evt-title{
  font-family:var(--font-display);font-size:clamp(3.2rem,7vw,6.5rem);
  line-height:.92;letter-spacing:.015em;text-transform:uppercase;
  margin-bottom:1.6rem;
}
.evt-title .l2{display:block;color:var(--coral)}
/* variante con il logo ufficiale al posto del lettering */
.evt-title--logo{margin-bottom:1.9rem;line-height:0}
.evt-title--logo img{width:clamp(260px,34vw,470px);height:auto}
.evt-txt{margin-bottom:2.4rem;max-width:46ch}
.evt-ph .frame{aspect-ratio:3/2}
.evt-ph .frame img{object-position:50% 28%}
@media (max-width:900px){
  .evt-grid{grid-template-columns:1fr}
  /* la foto stava PRIMA del testo (order:-1): David la vuole dopo il bottone
     "Scopri l'evento", cioe' nell'ordine in cui e' scritta (23/08) */
}

/* ============ 14 · 07 RISULTATI (ledger) ============ */
.ris-title{margin-bottom:1.8rem;max-width:16ch}
.ris-list{border-top:1px solid var(--line)}
.ris-row{
  display:grid;
  grid-template-columns:minmax(11rem,16rem) 1fr;
  gap:1.5rem;align-items:baseline;
  padding-block:1.6rem;border-bottom:1px solid var(--line);
  transition:background-color .35s ease,padding-left .35s ease;
}
.ris-row:hover{background:var(--bg-2);padding-left:1rem}
.ris-val{
  font-family:var(--font-display);font-size:clamp(1.9rem,3.4vw,3rem);
  line-height:1;letter-spacing:.02em;color:var(--coral);white-space:nowrap;
}
.ris-val--long{font-size:clamp(1.5rem,2.3vw,2.1rem);white-space:normal;line-height:1.1}
.ris-who{font-weight:700;font-size:.9375rem;letter-spacing:.04em}
.ris-role{display:block;font-weight:400;font-size:.8125rem;color:var(--ink-55);margin-top:.2rem}
/* nota temporale sotto il nome, in small caps — mai orfana a destra */
.ris-note{
  display:block;font-weight:500;font-size:.6563rem;letter-spacing:.26em;
  text-transform:uppercase;color:var(--ink-55);margin-top:.5rem;
}
.disclaimer{
  margin-top:2.2rem;font-size:.75rem;color:var(--ink-55);max-width:72ch;line-height:1.8;
}
@media (max-width:768px){
  .ris-row{grid-template-columns:minmax(8rem,10rem) 1fr}
  .ris-row:hover{padding-left:0}
}
@media (max-width:480px){
  .ris-row{grid-template-columns:1fr;row-gap:.4rem}
}

/* ============ 15 · 08 FILOSOFIA — momento isolato (respiro da B, voce di A) ============ */
/* La coda era clamp(7rem,16vh,12rem): su una finestra alta 900 faceva 144px
   contro i 91,8 di tutte le altre sezioni, e su uno schermo piu' alto arrivava
   a 192 (David, 23/08: "troppo spazio prima del blocco sotto").
   Serviva a lasciare posto alla didascalia sotto la cornice, che pero' QUI NON
   C'E': la foto dell'abbraccio non ha didascalia. Quindi si usa la coda
   normale delle sezioni. */
.fil{background:#060607;padding-block:clamp(2.6rem,6vh,4.4rem) var(--sec-y)}
/* fra la punta della freccia e il numero della sezione non ci va nessuna riga */
.exp + .fil{border-top:0}
.fil .sec-head{margin-bottom:clamp(2.2rem,4.6vh,3.4rem)}
.fil-quote{
  font-family:var(--font-body);font-weight:500;font-style:italic;
  font-size:clamp(1.22rem,2.7vw,1.88rem);line-height:1.45;
  max-width:40ch;margin:0 auto;text-align:center;
}
.fil-quote .mark{color:var(--coral);font-style:normal}
.fil-sign{
  margin:2.6rem auto 0;display:flex;align-items:center;justify-content:center;gap:1.1rem;
  font-weight:500;font-size:.6875rem;letter-spacing:.3em;text-transform:uppercase;color:var(--ink-55);
}
.fil-sign::before,.fil-sign::after{content:"";width:3rem;height:1px;background:var(--coral)}
/* l'abbraccio B/N: contenuto e sobrio, mai monumentale */
.fil-ph{max-width:760px;margin:clamp(3rem,7vh,5rem) auto 0}
.fil-ph .frame{aspect-ratio:3/2;background:var(--bg-2)}

.fil-ph .frame img{object-position:50% 46%;filter:grayscale(1);height:110%;position:relative;top:-5%;will-change:transform}
.fil-ph .frame figcaption{bottom:-1.9rem}

/* ============ 16 · 09 CONTENUTI ============ */
/* col testo di presentazione sotto, il titolo non deve piu' tenere tutta
   l'aria: la stacca lui dalle card */
.con-title{margin-bottom:clamp(1.1rem,2vw,1.6rem)}
.con-intro{max-width:62ch;margin-bottom:clamp(2.6rem,5vw,3.8rem)}
.con-grid{
  display:grid;grid-template-columns:repeat(3,1fr);
  border-top:1px solid var(--line);border-left:1px solid var(--line);
}
.con-card{
  border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  padding:clamp(1.75rem,3vw,2.5rem);
  display:flex;flex-direction:column;gap:1rem;min-height:18rem;
  transition:background-color .4s ease;position:relative;
}
.con-card:hover{background:var(--bg-2)}
.con-kick{
  font-weight:700;font-size:.625rem;letter-spacing:.32em;text-transform:uppercase;color:var(--coral);
}
.con-name{font-weight:700;font-size:1.0625rem;line-height:1.45;letter-spacing:.01em;max-width:26ch}
.con-txt{font-size:.875em;color:var(--ink-55);line-height:1.7}
.con-more{
  margin-top:auto;font-weight:700;font-size:.6875rem;letter-spacing:.26em;text-transform:uppercase;
  color:var(--ink-55);display:flex;align-items:center;gap:.6rem;
  transition:color .3s ease;
}
.con-card:hover .con-more{color:var(--coral)}
.con-more .arr{transition:transform .3s ease}
.con-card:hover .con-more .arr{transform:translateX(5px)}
@media (max-width:900px){.con-grid{grid-template-columns:1fr}.con-card{min-height:0}}

/* ============ PAGINA CONTATTI · le strade ============
   Tab rettangolari in colonna, bandierati a sinistra, con gli angoli appena
   stondati (David, 22/08). Prima erano le card a tre colonne del blog e
   sembravano anteprime di articoli.
   AL PASSAGGIO DEL MOUSE SI ACCENDE SOLO IL BORDO (David, secondo giro: "non
   tutto quanto compreso il testo"). Titolo, descrizione ed etichetta restano
   del loro colore; la freccia si sposta ma non cambia tinta, perche' il
   movimento dice "ci si clicca" senza aggiungere un altro colore.
   Niente fondo acceso: quello illuminava tutta la riga ed era troppo. */
.ct-strade{display:flex;flex-direction:column;gap:1.15rem;margin-top:clamp(2rem,4vw,3rem)}
.ct-strada{
  display:flex;align-items:center;gap:1.5rem;
  padding:clamp(1.25rem,2.3vw,1.7rem) clamp(1.35rem,2.4vw,1.9rem);
  /* IL BORDO E' GIA' SALMONE (David, 22/08, quarto giro: "preferisco, proviamo").
     Prima era grigio e diventava salmone col mouse sopra. Adesso la riga si
     presenta gia' accesa e col mouse cambia il TITOLO, che passa da bianco a
     salmone. Cosi' si vede da subito che sono cinque cose su cui si clicca. */
  border:1px solid var(--coral);border-radius:12px;background:transparent;
  /* il bagliore che si accende col mouse: e' box-shadow e non un bordo piu'
     spesso, se no la riga cambierebbe misura e le altre si sposterebbero */
  box-shadow:0 0 0 rgba(236,134,102,0);
  transition:box-shadow .38s var(--ease-soft);
}
.ct-in{flex:1;display:block;min-width:0}
.ct-testo{
  display:block;font-weight:700;line-height:1.35;
  font-size:clamp(1rem,1.5vw,1.22rem);letter-spacing:-.005em;color:var(--ink);
  transition:color .38s var(--ease-soft);
}
.ct-desc{
  display:block;margin-top:.42rem;max-width:64ch;
  color:var(--ink-55);font-size:clamp(.86rem,.95vw,.94rem);line-height:1.6;
}
/* CHI TI RISPONDE (David, 22/08): una riga salmone sotto la descrizione, solo
   sulle strade dove non risponde David in persona. Serve a togliere la sorpresa
   di trovarsi a scrivere a un nome che non ti aspetti.
   Resta salmone anche col mouse sopra: sulla riga si accende solo il bordo. */
.ct-chi{
  display:block;margin-top:.45rem;color:var(--coral);
  font-size:clamp(.8rem,.9vw,.88rem);line-height:1.5;font-weight:700;
}
/* IL SEGNO DI MARCHIO accanto al nome del videocorso (David, 22/08:
   Testimonianze che vendono e' ®, Offerta Irresistibile e' ©).
   Piu' piccolo e alzato, e con la spaziatura fra le lettere azzerata: dentro
   un titolo in stampatello spaziato, un ® a grandezza piena pesa come una
   parola e si porta dietro lo spazio dell'ultima lettera. */
.vc-marchio{
  font-size:.62em;letter-spacing:0;vertical-align:super;margin-left:.12em;
}

/* l'etichetta che dice dove si va a finire: piccola, grigia, mai in mezzo */
.ct-dove{
  flex:none;font-weight:700;font-size:.625rem;letter-spacing:.28em;
  text-transform:uppercase;color:var(--ink-40,rgba(255,255,255,.38));
}
.ct-strada .arr{
  flex:none;color:var(--ink-55);
  transition:transform .38s var(--ease-soft);
}
/* col mouse sopra cambia SOLO il titolo: descrizione, riga salmone di chi ti
   risponde ed etichetta restano dove sono. La freccia si sposta ma non cambia
   colore: il movimento dice "ci si clicca" senza aggiungere un'altra tinta. */
.ct-strada:hover .ct-testo{color:var(--coral)}
/* col mouse sopra la riga di chi ti risponde diventa BIANCA (David, 22/08):
   restando salmone faceva a botte col titolo, che col mouse diventa salmone
   anche lui, e nella riga si leggevano due salmoni uguali uno sopra l'altro. */
.ct-strada:hover .ct-chi{color:var(--ink)}
.ct-strada:hover .arr{transform:translateX(6px)}
/* IL BORDO SI ILLUMINA (David, 22/08, quinto giro). Il bordo e' gia' salmone
   pieno, quindi non poteva "accendersi" cambiando colore: non c'era piu' colore
   da dare. Si accende con un alone salmone tutto intorno, che e' quello che
   l'occhio legge come luce. Due strati: uno stretto che ispessisce il bordo
   senza spostare niente, e uno largo e morbido che sfuma nel nero. */
.ct-strada:hover{
  box-shadow:0 0 0 1px rgba(236,134,102,.55), 0 0 22px rgba(236,134,102,.22);
}
/* da telefono l'etichetta va sotto il testo: in riga stringeva il titolo a
   due parole per riga */
@media (max-width:560px){
  .ct-strada{flex-wrap:wrap;gap:.6rem 1rem}
  .ct-in{flex:1 0 100%}
  .ct-dove{order:2}
  .ct-strada .arr{order:3;margin-left:auto}
}

/* la riga di esito sotto ai moduli: "Un attimo..." mentre spedisce, oppure
   l'errore se ActiveCampaign risponde male o non risponde. In condizioni
   normali non si vede mai. */
.nl-esito{
  margin:.2rem 0 .6rem;font-size:.8125rem;line-height:1.5;color:var(--ink-55);
}
.nl-esito[hidden]{display:none}
.nl-esito--male{color:var(--coral);font-weight:700}
.nl-sec .nl-esito--male{color:#c0392b}

/* ============ I DUE POP-UP (David, 22/08) ============
   Stessa meccanica del pannello video che c'e' gia' (.vp): il velo e il
   riquadro entrano in dissolvenza, mai a scatto. Il bottone di chiusura e'
   quello di casa, la parola "Chiudi" con la freccia: mai la crocetta bianca
   del browser. */
.pop{position:fixed;inset:0;z-index:140;display:grid;place-items:center;
     padding:clamp(1rem,4vw,2.4rem)}
.pop[hidden]{display:none}
.pop-velo{position:absolute;inset:0;background:rgba(8,8,9,.86);opacity:0;
     transition:opacity .45s var(--ease-soft)}
.pop.aperta .pop-velo{opacity:1}
.pop-in{
  position:relative;width:min(470px,100%);
  background:var(--bg-2);border:1px solid var(--coral);border-radius:14px;
  padding:clamp(1.7rem,3.4vw,2.4rem);
  opacity:0;transform:translateY(16px) scale(.985);
  transition:opacity .5s var(--ease-soft),transform .5s var(--ease-soft);
}
.pop.aperta .pop-in{opacity:1;transform:none}
/* il pannello riceve il fuoco all'apertura ma non deve mostrare il contorno:
   non e' una cosa su cui si clicca, e' solo il punto in cui si entra */
.pop-in:focus,.pop-in:focus-visible{outline:none}
.pop-kick{
  font-weight:700;font-size:.625rem;letter-spacing:.32em;text-transform:uppercase;
  color:var(--coral);margin-bottom:.6rem;
}
.pop-titolo{font-size:clamp(2rem,4.4vw,2.7rem);line-height:.95;margin-bottom:.9rem}
.pop-titolo em{font-style:normal;color:var(--coral)}
/* nella finestra della conferma anche il punto del titolo e' verde: se restasse
   salmone farebbe a pugni con la spunta due centimetri sopra */
.pop--ok .pop-titolo em{color:var(--ok)}
.pop-txt{color:var(--ink-70);font-size:.9375rem;line-height:1.65;margin-bottom:1.4rem}
.pop-txt strong{color:var(--ink)}
.pop-form{display:flex;flex-direction:column;gap:.85rem}
/* I CAMPI DENTRO IL POP-UP SONO SCURI. Riusano la classe .nl-in del modulo in
   pagina, che pero' e' nata dentro una sezione CHIARA: sul pannello nero
   uscivano due rettangoli grigio chiaro che sembravano incollati sopra.
   Qui il fondo e' quasi nero, il bordo e' un salmone appena acceso e il testo
   e' bianco. Il colore del testo va detto per esteso: i campi ereditano il nero
   della sezione chiara e su fondo scuro non si leggerebbe piu' niente. */
.pop-form .nl-in{
  background:rgba(255,255,255,.04);
  border:1px solid rgba(236,134,102,.28);
  color:var(--ink);
  transition:border-color .3s var(--ease-soft),background-color .3s var(--ease-soft);
}
.pop-form .nl-in:focus{
  outline:none;border-color:var(--coral);background:rgba(255,255,255,.06);
}
.pop-form .nl-lab{color:var(--ink-55)}
.pop-privacy{font-size:.8125rem;color:var(--ink-55);display:flex;align-items:flex-start;gap:.6rem}
.pop-privacy a{color:var(--ink-70);text-decoration:underline;text-underline-offset:3px}
.pop-privacy a:hover{color:var(--coral)}
/* la casella da spuntare: quella di serie e' bianca e sul nero fa da faro.
   accent-color la porta sul salmone del sito. */
.pop-privacy input{accent-color:var(--coral);margin-top:.15rem;flex:none}
.pop-campo{display:block}
.pop-privacy{margin-top:.1rem}
.pop-invia{justify-content:center;text-align:center}
/* "No, grazie": deve esserci ma non deve competere col bottone salmone */
.pop-no{
  display:block;margin:1.1rem auto 0;background:none;border:0;cursor:pointer;
  font:inherit;font-size:.8125rem;letter-spacing:.06em;color:var(--ink-55);
  text-decoration:underline;text-underline-offset:3px;
  transition:color .3s var(--ease-soft);
}
.pop-no:hover,.pop-no:focus-visible{color:var(--ink)}

/* --- la finestra della conferma --- */
.pop--webinar .pop-in{width:min(520px,100%);text-align:center}
/* "NUOVO WEBINAR!" sopra al computer */
/* "NUOVO WEBINAR!" grosso (David, 22/08: era piccolissimo). Non e' piu' un
   occhiello da .6875rem: e' il carattere dei titoloni, in salmone, e fa da
   insegna sopra al computer. La spaziatura fra le lettere scende a .06em
   perche' a questo corpo quella larga sfonderebbe la finestra. */
.pop-nuovo{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(1.6rem,3.4vw,2.15rem);line-height:1;
  letter-spacing:.06em;text-transform:uppercase;
  color:var(--coral);margin-bottom:1rem;
}
/* IL BAGLIORE CHE LAMPEGGIA PIANO (David, 22/08). E' un alone dietro al
   computer, non un'ombra sul bordo del pannello: il mockup e' un PNG senza
   sfondo, quindi il bagliore deve stargli dietro e vedersi attraverso.
   Sette secondi a giro e opacita' fra .35 e 1: deve respirare, non pulsare.
   Se uno ha chiesto meno animazioni resta acceso fisso, non lampeggia. */
.pop-mockup-giro{
  display:block;position:relative;width:82%;margin:0 auto .4rem;
}
.pop-mockup-giro::before{
  content:"";position:absolute;left:50%;top:52%;translate:-50% -50%;
  width:118%;height:112%;border-radius:50%;pointer-events:none;z-index:0;
  background:radial-gradient(50% 50% at 50% 50%,rgba(236,134,102,.42),rgba(236,134,102,.12) 55%,transparent 72%);
  animation:pop-respiro 7s var(--ease-soft) infinite;
}
@keyframes pop-respiro{
  0%,100%{opacity:.35;transform:scale(.94)}
  50%    {opacity:1;transform:scale(1.04)}
}
@media (prefers-reduced-motion:reduce){
  .pop-mockup-giro::before{animation:none;opacity:.7}
}
.pop-mockup{
  display:block;position:relative;z-index:1;width:100%;max-width:none;height:auto;
}
/* la data sta su UNA riga sola (David): niente <br> nell'HTML e qui il
   white-space che impedisce al browser di mandarla a capo per conto suo. Il
   corpo e' un filo piu' piccolo del titolo di prima proprio per farcela stare
   dentro i 520px del pannello. */
.pop--webinar .pop-titolo{
  font-size:clamp(1.45rem,3vw,1.95rem);line-height:1.02;white-space:nowrap;
}
/* il conto alla rovescia: piccolo, in fila, coi numeri a larghezza fissa se no
   passando da 10 a 9 secondi la riga si sposta */
.pop-conto{
  display:flex;justify-content:center;gap:.9rem;flex-wrap:wrap;
  margin:.9rem 0 1.1rem;
  font-weight:700;font-size:.6875rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-55);
}
.pop-conto[hidden]{display:none}
.pop-conto b{
  display:block;font-weight:700;font-size:1.45rem;letter-spacing:.02em;
  color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.1;
}
.pop--webinar .pop-txt{margin-bottom:0}
.pop--webinar .pop-invia{display:flex;margin-top:1.5rem}

.pop--ok .pop-in{text-align:center}
.pop-spunta{display:block;width:74px;height:74px;margin:0 auto 1.1rem}
.pop-spunta svg{width:100%;height:100%;display:block}
/* LA SPUNTA E' VERDE (David, 22/08). Non il verde acceso dei messaggi di
   sistema, che su questo sito urlerebbe: un verde smorzato, #52c091, che sta
   accanto al salmone senza litigarci. E' l'unico verde del sito, e sta qui
   perche' deve dire "e' andata" a colpo d'occhio. */
:root{--ok:#52c091}
.pop-spunta-giro{
  fill:none;stroke:rgba(82,192,145,.35);stroke-width:2;
  stroke-dasharray:183;stroke-dashoffset:183;
  transition:stroke-dashoffset .7s var(--ease-soft);
}
.pop-spunta-segno{
  fill:none;stroke:var(--ok);stroke-width:4.5;
  stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:52;stroke-dashoffset:52;
  transition:stroke-dashoffset .5s var(--ease-soft) .28s;
}
/* il tratto si scrive quando la finestra e' gia' aperta: prima il cerchio,
   poi la spunta. Se uno ha chiesto meno animazioni, si vede e basta. */
.pop--ok.aperta .pop-spunta-giro,
.pop--ok.aperta .pop-spunta-segno{stroke-dashoffset:0}
@media (prefers-reduced-motion:reduce){
  .pop-spunta-giro,.pop-spunta-segno{transition:none;stroke-dashoffset:0}
}
.pop-chiudi{
  margin-top:1.4rem;background:none;border:0;cursor:pointer;font:inherit;
  font-weight:700;font-size:.6875rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--ink-55);transition:color .3s var(--ease-soft);
}
.pop-chiudi:hover,.pop-chiudi:focus-visible{color:var(--coral)}
.pop-chiudi-t{display:inline-flex;align-items:center;gap:.5em}


/* ============ 17 · 10 CTA FINALE ============ */
.cta-grid{
  display:grid;grid-template-columns:minmax(0,7fr) minmax(0,3.6fr);
  gap:clamp(2.5rem,6vw,6rem);align-items:center;
}
.cta-title{margin-bottom:1.6rem;max-width:14ch}
.cta-title em{font-style:normal;color:var(--coral)}
.cta-title .l2{display:block;color:var(--coral)}
.cta-txt{margin-bottom:2.6rem;max-width:40ch}
.cta-ctas{display:flex;flex-wrap:wrap;gap:1rem}
/* la sezione finale ha l'aula alle spalle: mani alzate, velo scuro sopra
   perche' il titolo resti leggibile */
.cta-sec{position:relative;overflow:hidden}
.cta-sec > .cta-bg{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.cta-bg img{width:100%;height:112%;object-fit:cover;object-position:50% 46%;
  position:relative;top:-6%;opacity:.9;will-change:transform}
.cta-bg::after{content:"";position:absolute;inset:0;background:
  linear-gradient(180deg,rgba(10,10,11,.94) 0%,rgba(10,10,11,.5) 26%,rgba(10,10,11,.5) 70%,rgba(10,10,11,.94) 100%),
  /* solo dietro al testo, e solo per un terzo di schermo */
  linear-gradient(90deg,rgba(10,10,11,.72) 0%,rgba(10,10,11,.25) 34%,transparent 52%)}
.cta-sec .wrap{position:relative;z-index:1}
/* nella pagina Formazione il titolo della chiusura e' in Bebas come le altre */
#candidati .cta-title{font-family:var(--font-display);font-weight:400;text-transform:uppercase;line-height:.92;
  font-size:clamp(2.4rem,5.4vw,4.4rem);letter-spacing:.01em}
#candidati .cta-title .l2{display:block;color:var(--coral)}

.cta-ph .frame{aspect-ratio:3/4}

.cta-ph .frame img{object-position:50% 38%;height:107%;position:relative;top:-3.5%;will-change:transform}
@media (max-width:900px){
  .cta-grid{grid-template-columns:1fr}
  .cta-ph{max-width:340px}
}
@media (max-width:520px){
  .cta-ctas .btn{flex:1 1 100%}
}

/* ============ 18 · FOOTER ============ */
.ftr{position:relative;overflow:hidden;border-top:1px solid var(--line);background:#000;padding-block:clamp(2.4rem,4.5vw,3.4rem) 0}
/* due aloni salmone in diagonale: uno in alto a sinistra, uno in basso a destra */
.ftr::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(56% 82% at 2% 4%,rgba(236,134,102,.18),transparent 72%),
    radial-gradient(56% 82% at 98% 96%,rgba(236,134,102,.18),transparent 72%);
}
/* colonna del footer più raccolta della griglia del sito */
.ftr .wrap{position:relative;z-index:1;max-width:880px}
.ftr-top{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:1.2rem;margin-bottom:2rem;
}
/* logo + tagline: colonna centrata (l'immagine block non si centra col solo text-align) */
.ftr-top > div{display:flex;flex-direction:column;align-items:center}
/* logo footer: centrale e ben visibile (feedback David) */
.ftr-logo img{height:42px;width:auto;aspect-ratio:1000/168}
.ftr-tag{margin-top:1.2rem;font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-55);font-weight:500}
.ftr-nav{display:flex;flex-wrap:wrap;justify-content:center;gap:1.8rem}
/* desktop: link del footer tutti su una riga */
@media (min-width:768px){.ftr-nav{flex-wrap:nowrap}.ftr-nav a{white-space:nowrap}}
.ftr-nav a{
  font-weight:500;font-size:.6875rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--ink-55);transition:color .25s ease;
}
.ftr-nav a:hover{color:var(--coral)}
/* la riga in fondo esce dalla colonna e va da un bordo all'altro della pagina:
   la firma tutta a sinistra, il nome della pagina tutto a destra */
.ftr-btm{
  border-top:1px solid var(--line-soft);
  padding:1rem var(--pad);margin-top:0;
  width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
  display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.8rem;
  font-size:.6875rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-55);
}
.ftr-btm .n{font-family:var(--font-display);letter-spacing:.14em;color:var(--ink-55)}

/* ============================================================
   PAGINE INTERNE — chi-è (entità) + legali (privacy, cookie)
   Stesso sistema della home: primitive riusate (.sec-head, .tl,
   .met-grid, .ris-list, .frame). Qui solo ciò che la home non ha.
   ============================================================ */

/* --- hero compatto di pagina interna (sotto header fisso) --- */
.pg-hero{padding-top:clamp(8.5rem,15vh,11rem);padding-bottom:clamp(3rem,6vh,4.5rem)}
/* hero con foto di sfondo: la foto sta sotto tutto, la nebbia salmone sopra di
   lei, il testo sopra a tutti. La dissolvenza verso il nero è volutamente lunga
   (parte a un terzo di altezza) così l'immagine non finisce mai di netto */
/* senza il riquadro foto l'hero vive di immagine: si dà un'altezza propria e
   appoggia il testo in basso, così la foto ha spazio e non restano vuoti */
.pg-hero--foto{
  min-height:min(82vh,800px);
  display:flex;flex-direction:column;justify-content:flex-end;
  padding-top:clamp(7rem,12vh,9rem);
  padding-bottom:clamp(2rem,4vh,3.25rem);  /* l'aria in cui muore la sfumatura */
}
/* invito a scorrere: etichetta + filo verticale con una scintilla che scende */
.scroll-hint{
  display:inline-flex;flex-direction:column;align-items:flex-start;gap:.75rem;
  margin-top:clamp(1.6rem,3.5vh,2.6rem);
  font-weight:700;font-size:.625rem;letter-spacing:.3em;text-transform:uppercase;
  color:var(--ink-55);transition:color .3s ease;
}
.scroll-hint:hover{color:var(--coral)}
.scroll-line{position:relative;display:block;width:1px;height:56px;background:rgba(255,255,255,.16);overflow:hidden}
.scroll-line::after{
  content:"";position:absolute;left:0;top:0;width:1px;height:20px;background:var(--coral);
  animation:scroll-run 2.6s cubic-bezier(.4,0,.2,1) infinite;
}
@keyframes scroll-run{
  0%{transform:translateY(-24px);opacity:0}
  22%{opacity:1}
  78%{opacity:1}
  100%{transform:translateY(56px);opacity:0}
}
@media (prefers-reduced-motion:reduce){
  .scroll-line::after{animation:none;height:100%;opacity:.45}
}
.pg-hero--foto .pg-title{margin-bottom:1.5rem}
.pg-hero--foto .lead{max-width:62ch}
.pg-hero--foto .lead + .lead{margin-top:1.15rem}
/* gli a capo voluti valgono da tablet in su; su schermo stretto il testo
   si impagina da solo, se no restano righe mozze */
@media (max-width:760px){.brk{display:none}}
/* i capitoli attaccano subito: l'aria sopra il primo la dà già l'hero */
#capitoli.sec{padding-top:0;padding-bottom:clamp(1.5rem,3vh,2.5rem)}
#capitoli .storia-cap:first-of-type{padding-top:clamp(1.2rem,3vw,2.2rem)}
.pg-hero--foto>.pg-hero-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.pg-hero-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 15%;opacity:.58}
/* tre veli sovrapposti: 1) scudo scuro sotto il testo · 2) vignetta con il
   "buco" sul viso, che resta la zona più leggibile · 3) dissolvenza finale */
.pg-hero-bg::after{content:"";position:absolute;inset:0;background:
  radial-gradient(74% 40% at 30% 70%,rgba(10,10,11,.95) 0%,rgba(10,10,11,.68) 45%,rgba(10,10,11,.20) 78%,transparent 95%),
  radial-gradient(58% 46% at 46% 26%,transparent 0%,rgba(10,10,11,.22) 55%,rgba(10,10,11,.62) 100%),
  linear-gradient(180deg,rgba(10,10,11,.45) 0%,rgba(10,10,11,.10) 20%,rgba(10,10,11,.16) 50%,rgba(10,10,11,.3) 68%,rgba(10,10,11,.52) 82%,rgba(10,10,11,.78) 93%,var(--bg) 100%)}
.pg-hero--foto.fog::before{z-index:1}
.pg-hero--foto>.wrap{position:relative;z-index:2;width:100%}
@media (max-width:900px){
  .pg-hero-bg img{object-position:58% 24%;opacity:.28}
}
/* la nebbia dell'hero di pagina nasce dal bordo sinistro dello schermo e si
   ridimensiona in percentuale: mai un taglio netto sulla colonna di testo */
.pg-hero.fog::before{
  inset:0;
  background:
    radial-gradient(58% 82% at 0% 16%,rgba(236,134,102,.24),transparent 72%),
    radial-gradient(34% 52% at 24% 0%,rgba(236,134,102,.10),transparent 74%);
}
/* ============ CHI E' DAVID: apertura con la foto dell'aula ============
   Chiesta da David il 23/08: la foto prende lo schermo da sinistra a destra e
   sfuma sotto al titolo. Sopra si vede l'aula, sotto c'e' il nero pieno su cui
   si leggono ruoli, testo, valutazioni e pastiglie.
   Le fermate della sfumatura NON sono a occhio: sono misurate sulla posizione
   vera del titolo (vedi RIPRESA). */
.pg-hero--aula{position:relative;overflow:hidden;isolation:isolate}
.pg-hero--aula>.pg-hero-bg{position:absolute;left:0;right:0;top:0;height:100%;z-index:0;pointer-events:none}
/* la foto e' quasi tutta dentro il riquadro (2400x1600 in un box piu' largo che
   alto): cosi' com'e', il quarto superiore e' soffitto e controsoffitto, e la
   parte viva (David con la mano alzata e l'aula che alza le mani) finiva nella
   zona che la sfumatura spegne. Si stringe l'inquadratura verso il basso: il
   soffitto esce, David e le mani salgono nella fascia che resta accesa.
   1,3 di ingrandimento su una foto da 2400px non perde nitidezza. */
.pg-hero--aula .pg-hero-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 50%;opacity:.66;
  transform:scale(1.24);transform-origin:62% 92%}
/* due veli: uno scuro leggero su tutta la foto perche' il bianco del soffitto
   non spari, e la discesa al nero che si chiude appena sotto al titolo.
   MISURATO: da schermo il titolo finisce al 52,6% dell'altezza dell'apertura e
   i ruoli cominciano al 55,8%, quindi il nero e' pieno al 62%. Da telefono le
   stesse due misure sono 34,6% e 37,5%, percio' li' la discesa e' piu' corta e
   si chiude al 46%: con le fermate del desktop la foto sarebbe rimasta accesa
   dietro al testo. Se il titolo cambia lunghezza, queste fermate vanno rimisurate. */
.pg-hero--aula .pg-hero-bg::after{
  content:"";position:absolute;inset:0;background:
    linear-gradient(180deg,rgba(10,10,11,.62) 0%,rgba(10,10,11,.28) 16%,rgba(10,10,11,.34) 34%,rgba(10,10,11,.62) 46%,rgba(10,10,11,.93) 56%,var(--bg) 62%);
}
.pg-hero--aula>.wrap{position:relative;z-index:2}
@media (max-width:900px){
  /* Da telefono la foto NON prende tutta l'altezza dell'apertura: se lo fa,
     un riquadro 390x1000 su una foto 2400x1600 mostra una fessura verticale
     fatta di soffitto, e David sparisce. Qui la foto e' una fascia alta ~420px:
     cosi' si vede tutta l'altezza della foto e si taglia solo di lato, dove
     c'e' aula da perdere. Il titolo cade dentro la fascia (dal 25% al 35%
     dell'apertura, misurato) e la fascia muore poco sotto. */
  .pg-hero--aula>.pg-hero-bg{height:clamp(360px,46vh,460px)}
  .pg-hero--aula .pg-hero-bg img{object-position:62% 88%;transform:none;opacity:.82}
  .pg-hero--aula .pg-hero-bg::after{
    background:linear-gradient(180deg,rgba(10,10,11,.40) 0%,rgba(10,10,11,.14) 18%,rgba(10,10,11,.42) 58%,rgba(10,10,11,.88) 84%,var(--bg) 100%);
  }
}

.pg-title{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(3.4rem,8vw,7rem);line-height:.9;
  letter-spacing:.01em;text-transform:uppercase;
  margin:1.4rem 0 1.8rem;
}
.pg-title .l2{display:block;color:var(--coral)}
/* quando i formatori aprono la pagina, serve l'aria che aveva l'intestazione */
.pg-apre{padding-top:clamp(8.5rem,15vh,11rem)}
.pg-apre .pg-grid{margin-top:.6rem}
.pg-apre .mentori{margin-top:clamp(2rem,4vw,3rem)}
.pg-grid{
  display:grid;grid-template-columns:minmax(0,7fr) minmax(0,3.4fr);
  gap:clamp(2.5rem,6vw,6rem);align-items:start;
}
/* foto di pagina: contenute su desktop (feedback David: mai enormi) */
/* width:100% e non solo max-width: con justify-self:end la colonna si
   restringe al contenuto, e finche' la foto "lazy" non e' caricata la
   cornice collassa a una ventina di pixel e la didascalia sborda. Con la
   larghezza dichiarata la cornice sta in piedi da sola. */
.pg-ph{width:100%;max-width:340px;justify-self:end}
.pg-ph .frame{aspect-ratio:2/3}
.pg-ph .frame img{object-position:50% 30%}
@media (max-width:900px){
  .pg-grid{grid-template-columns:1fr}
  .pg-ph{max-width:320px;justify-self:start}
}

/* --- valutazioni + badge del metodo (respiro generoso: feedback David) --- */
.pg-rating{
  display:flex;flex-wrap:wrap;align-items:center;gap:.9rem;
  margin-top:2.4rem;
  font-size:.8125rem;font-weight:500;letter-spacing:.06em;color:var(--ink-70);
}
.pg-rating .stars{color:var(--coral);letter-spacing:.18em;font-size:.9375rem}
/* il puntino di mezzo fra Google e Trustpilot: da telefono la riga va a capo
   e il separatore restava appeso in fondo alla prima riga. Sotto i 700px
   sparisce: le due valutazioni stanno gia' su due righe distinte.
   Le stelle hanno anche loro aria-hidden, per questo sono escluse. */
@media (max-width:700px){.pg-rating > span[aria-hidden="true"]:not(.stars){display:none}}
.pg-badges{display:flex;flex-wrap:wrap;gap:1.2rem;margin:2.6rem 0 1rem}
.pg-badge{
  font-weight:700;font-size:.6875rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--ink-70);border:1px solid var(--line-strong);
  padding:1.05em 1.9em;white-space:nowrap;
}
@media (max-width:520px){.pg-badge{white-space:normal;text-align:center;flex:1 1 100%}}

/* --- scheda "in sintesi": ledger a due colonne --- */
.sheet{border-top:1px solid var(--line)}
.sheet-row{
  display:grid;grid-template-columns:minmax(9rem,15rem) 1fr;gap:1.5rem;
  padding-block:1.25rem;border-bottom:1px solid var(--line);
  align-items:baseline;margin:0;
}
.sheet-row dt{
  font-weight:700;font-size:.6875rem;letter-spacing:.3em;
  text-transform:uppercase;color:var(--coral);
}
.sheet-row dd{color:var(--ink-70);font-size:.9em;margin:0}
@media (max-width:640px){.sheet-row{grid-template-columns:1fr;row-gap:.35rem}}

/* --- enfasi bianca dentro un paragrafo attenuato (feedback David) --- */
.pg-strong{color:var(--ink);font-weight:700}
/* --- enfasi salmone su una porzione di frase --- */
.hl-coral{color:var(--coral)}

/* --- nota fonti a fine pagina --- */
.pg-fonti{
  margin-top:clamp(2.5rem,5vw,3.5rem);
  font-size:.75rem;color:var(--ink-55);max-width:72ch;line-height:1.8;
}

/* --- pagine legali: colonna di lettura sobria --- */
.legal{max-width:760px}
.legal-updated{
  margin-top:1.6rem;
  font-weight:500;font-size:.6875rem;letter-spacing:.26em;
  text-transform:uppercase;color:var(--ink-55);
}
.legal h2{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(1.7rem,2.8vw,2.3rem);line-height:1.05;
  letter-spacing:.03em;text-transform:uppercase;
  margin:clamp(2.8rem,5vw,3.6rem) 0 1.1rem;
}
.legal h2 em{font-style:normal;color:var(--coral)}
.legal p{color:var(--ink-70);margin-bottom:1.1rem;font-size:.9375em}
.legal ul{margin:0 0 1.1rem}
.legal li{
  color:var(--ink-70);font-size:.9375em;
  position:relative;padding-left:1.3rem;margin-bottom:.55rem;
}
.legal li::before{
  content:"";position:absolute;left:0;top:.8em;
  width:5px;height:5px;border-radius:50%;background:var(--coral);
}
.legal a{color:var(--coral);border-bottom:1px solid var(--coral-35);transition:border-color .25s ease}
.legal a:hover{border-bottom-color:var(--coral)}
.legal strong{color:var(--ink)}
/* placeholder visibile per i dati mancanti — da compilare prima del cutover */
.da-completare{
  background:var(--coral-12);border:1px dashed var(--coral-35);
  padding:.08em .45em;color:var(--coral);font-style:normal;
}

/* ============================================================
   V2 — REVISIONE DA FEEDBACK DAVID (doc "MODIFICHE SITO", 11/07)
   Nebbia salmone · sezioni bianche · hero full-bleed · V-divider
   fasce foto · recensioni · videotestimonianze · word-cloud ·
   formazione/attestati · storia · articoli blog · badge UE
   ============================================================ */

/* --- logo header: mai schiacciato (il flex lo comprimeva) --- */
.hdr-logo{flex:none;display:block}
.hdr-logo img{height:32px;width:auto;max-width:none}
.ftr-logo img{max-width:none}
/* nav più fitto: niente voci spezzate su due righe */
.hdr-nav{gap:clamp(1.1rem,1.8vw,1.9rem)}
.hdr-nav a{white-space:nowrap}
/* desktop: menu centrato nella barra (spazio uguale a sx e dx), logo ancorato a sinistra */
@media (min-width:1300px){
  .hdr-in{display:grid;grid-template-columns:1fr auto 1fr;gap:1.5rem;max-width:none}
  .hdr-logo{grid-column:1;justify-self:start}
  .hdr-nav{grid-column:2;justify-self:center;gap:clamp(1rem,1.6vw,1.7rem)}
  .hdr-nav a,.hdr-cta{letter-spacing:.16em}
}

/* ATTENZIONE ALL'ORDINE: il blocco qui sotto DEVE stare dopo le regole della
   barra scritte sopra. A parita' di peso vince chi sta piu' in basso nel
   foglio: messo vicino a .hdr-cta, cinquecento righe piu' su, veniva ignorato
   e la barra continuava a sbordare (ci sono cascato il 22/08, ed e' la stessa
   trappola gia' scritta per il blocco europeo e per la foto del capitolo
   2016). */

/* SUGLI SCHERMI LARGHI LA BARRA CRESCE (David, 22/08: aperto il sito da un
   Chrome piu' largo del suo, "il menu e' piccolissimo").
   IL CONTO CHE LO SPIEGA: il corpo era fisso a 12px sopra i 1260, quindi la
   fila restava larga 1001px sempre, e la fetta di schermo che occupava
   crollava: 64,6% a 1512, 57,9% a 1728, 52,1% a 1920, 39,1% a 2560. Non era
   il menu a rimpicciolirsi, era lo schermo a crescere sotto.
   Adesso corpo e logo salgono con la larghezza, ma con un tetto: .73vw fino a
   un massimo di 1rem per le voci, 1,9vw fino a 42px per il logo. Sotto i
   1640px circa non cambia NIENTE, perche' li' il valore in vw e' ancora piu'
   piccolo del minimo: lo schermo di David resta identico a prima.
   Verificato che la fila continui a stare dentro il margine fino a 2560. */
@media (min-width:1300px){
  .hdr-nav a{font-size:clamp(.75rem,.73vw,1rem)}
  .hdr-logo img{height:clamp(32px,1.9vw,42px)}
}

/* --- nebbia salmone: alone morbido coral su fondo scuro --- */
.fog{position:relative;overflow:hidden}
/* eccezione: solo la sezione delle recensioni lascia uscire la sua nebbia in
   basso, ed e' quella delle card, non quella della sezione */
#dicono.fog{overflow:hidden;overflow-x:clip;overflow-y:visible}
#dicono.fog::before{inset:0 -10%}
.fog::before{
  content:"";position:absolute;inset:-20% -10%;pointer-events:none;z-index:0;
  background:
    radial-gradient(52% 42% at 18% 8%,rgba(236,134,102,.20),transparent 68%),
    radial-gradient(46% 38% at 86% 92%,rgba(236,134,102,.13),transparent 70%),
    radial-gradient(30% 26% at 70% 18%,rgba(236,134,102,.07),transparent 75%);
}
.fog > *{position:relative;z-index:1}
/* scia di nebbie dentro una sezione lunga: una a metà (tenue, a sinistra),
   una verso la fine (centro-sinistra). Posizione in percentuale sull'altezza,
   così resta al posto giusto qualunque sia la lunghezza della pagina */
.fog-trail{position:relative;overflow:hidden}
.fog-trail>*{position:relative;z-index:1}
.fog-trail::before,.fog-trail::after{content:"";position:absolute;left:0;right:0;pointer-events:none;z-index:0}
.fog-trail::before{inset:0;
  background:
    radial-gradient(34% 15% at 4% 21%,rgba(236,134,102,.12),transparent 70%),
    radial-gradient(40% 18% at 100% 50%,rgba(236,134,102,.13),transparent 72%)}
.fog-trail::after{bottom:4%;height:36%;
  background:radial-gradient(48% 62% at 24% 60%,rgba(236,134,102,.16),transparent 70%)}
/* LA NEBBIA DELLA PAGINA CONTATTI (David, 22/08: "cosi' fanno schifo, lascia
   solo le prime due in alto e non farle schiacciate ma normali come nel resto
   del sito").
   PERCHE' LI' VENIVANO SCHIACCIATE, ed e' un conto, non un gusto: i raggi di
   .fog-trail sono in PERCENTUALE sul riquadro, e la sezione dei casi studio e'
   alta 5758px mentre questa e' alta 990. Lo stesso alone "34% x 15%" diventa
   514x864 pixel di la' (tondo alto) e 514x148 di qua (una striscia 3,5 a 1).
   Qui i raggi sono rifatti in modo che in PIXEL vengano tondi come quelli del
   resto del sito: circa 480x415 e 450x375, cioe' il rapporto 1,2 di .fog.
   VIA IL TERZO, quello in basso (.fog-trail::after): David ne vuole due sole.
   ATTENZIONE se si ritoccano: il centro verticale non puo' salire piu' di
   tanto. La nebbia deve spegnersi PRIMA del bordo alto, se no si legge una
   riga netta contro la sezione di sopra (regola gia' scritta per Chi sono e
   per le recensioni di Experience). Il conto: il centro deve stare almeno al
   70% del raggio verticale, cioe' non sopra il 30% circa. */
body.pg-contatti .fog-trail::before{
  background:
    radial-gradient(32% 42% at 6% 34%,rgba(236,134,102,.13),transparent 70%),
    radial-gradient(30% 38% at 96% 30%,rgba(236,134,102,.10),transparent 72%);
}
body.pg-contatti .fog-trail::after{content:none}

/* variante leggera: presenza appena percepibile, per le sezioni di testo */
.fog--soft::before{
  background:
    radial-gradient(46% 42% at 6% 15%,rgba(236,134,102,.13),transparent 70%),
    radial-gradient(30% 30% at 64% 4%,rgba(236,134,102,.06),transparent 74%);
}
/* "Chi sono": qui la nebbia deve morire da sola, mai contro un bordo.
   La riga netta non la faceva l'overflow ma la geometria: il secondo alone
   aveva il centro al 4% dell'altezza, quindi sul bordo alto era ancora acceso
   e lì si tagliava. Ora tutti e due i cerchi stanno dentro il riquadro, con il
   pieno tenuto lontano dal bordo alto: il primo vive fra il 2% e il 70%, il
   secondo fra il 2% e il 46%, così in cima arrivano già spenti.
   La manopola è la seconda cifra di "at": più bassa, più in alto sale il
   salmone. Non deve mai scendere sotto il raggio che la segue, se no il
   cerchio esce dal riquadro e la riga netta torna. */
/* Verticalmente la nebbia deve restare libera di uscire, se no torna la riga
   netta. Orizzontalmente no: il ::before sborda del 10% per lato (inset -10%)
   e quella parte cade comunque fuori dalla finestra, non si vede, allarga
   soltanto la pagina. Quindi si taglia solo in orizzontale: "clip" permette di
   tenere l'altro asse visible, cosa che "hidden" non consente. */
#chi-sono.fog{overflow:visible}
@supports (overflow:clip){
  #chi-sono.fog{overflow-x:clip;overflow-y:visible}
}
#chi-sono.fog--soft::before{
  background:
    radial-gradient(42% 34% at 8% 36%,rgba(236,134,102,.15),transparent 72%),
    radial-gradient(30% 22% at 62% 24%,rgba(236,134,102,.07),transparent 76%);
}
/* variante bassa: nebbia che sale dal fondo (fascia firma del brand) */
.fog--rise::before{
  inset:auto -10% -30% -10%;height:90%;
  background:
    radial-gradient(60% 55% at 50% 100%,rgba(236,134,102,.22),transparent 72%),
    radial-gradient(38% 40% at 82% 96%,rgba(236,134,102,.10),transparent 70%);
}

/* --- sezione bianca di stacco --- */
.sec--light{
  background:#f7f4f1;color:#131313;
  --ink:#131313;
  --ink-70:rgba(19,19,19,.74);
  --ink-55:rgba(19,19,19,.56);
  --line:rgba(19,19,19,.14);
  --line-soft:rgba(19,19,19,.08);
  --line-strong:rgba(19,19,19,.30);
  --bg-2:#efeae5;
  --coral-12:rgba(236,134,102,.14);
}
/* anche qui la selezione resta salmone come nel resto del sito: sul crema il
   testo quasi nero sopra il salmone si legge benissimo */
.sec--light ::selection{background:var(--coral);color:#0a0a0b}
.sec--light .frame{background:#fff}
.sec + .sec--light,.sec--light + .sec{border-top:0}

/* --- divisore a V (bordo della sezione scura che scende a punta) --- */
.vcut{
  height:clamp(3rem,7vw,5.5rem);background:#f7f4f1;position:relative;
}
.vcut::before{
  content:"";position:absolute;inset:-1px 0 0;   /* sborda di 1px in alto */
  background:var(--vcut-bg,#101010);
  clip-path:polygon(0 0,100% 0,100% 22%,50% 100%,0 22%);
}
/* V al contrario: la sezione chiara scende a punta e riporta al nero */
.vcut--down{background:var(--bg)}
.vcut--grigia{background:#161514}
.vcut--down::before{background:#f7f4f1}
/* la V sta fra due sezioni, quindi spezza il selettore che toglie il bordo fra
   sezione scura e chiara: va rimesso a mano, se no ricompare la riga grigia */
.vcut + .sec,.vcut + .sec--light{border-top:0}
/* la nebbia di questa sezione deve morire prima del fondo: sotto attacca la V,
   e un alone tagliato sul bordo si legge come una banda di colore diverso */
#per-chi.fog::before{
  background:
    radial-gradient(52% 32% at 18% 24%,rgba(236,134,102,.20),transparent 68%),
    radial-gradient(46% 24% at 86% 58%,rgba(236,134,102,.13),transparent 70%),
    radial-gradient(30% 18% at 70% 28%,rgba(236,134,102,.07),transparent 75%);
}
/* blocco UE su fondo scuro: il badge blu e il testo bianco si leggono meglio */
/* fondo piu' scuro (David, 22/08): era #161514, cioe' (22,21,20). Adesso e'
   var(--bg-2), il grigio scuro che il sito usa gia' altrove: (16,16,16). Resta
   staccato dal nero della pagina, che e' (10,10,11), ma di poco. */
/* IL BLOCCO UE STA SOPRA LA NEBBIA DELLE RECENSIONI (David, 22/08: "la
   sfumatura NON DEVE toccare il blocco della Commissione Europea").
   La sezione "Dicono di me" e' l'unica del sito a cui e' concesso di far uscire
   la nebbia dal bordo di sotto (#dicono.fog ha overflow-y:visible, e' scritto
   apposta piu' su): serviva ad ammorbidire il passaggio. Da quando il blocco UE
   le sta subito sotto, quella nebbia gli finiva addosso e sul grigio si vedeva
   come una macchia calda.
   Misurato: al centro del blocco era (31,24,22) invece del (16,16,16) di
   fianco. Portandolo sopra con lo z-index e' tornato (16,16,16) ovunque.
   NON e' stato tolto lo scarico della nebbia: quello resta, serve altrove. */
.sec--ue{
  padding-top:clamp(2.5rem,5vw,4rem);background:var(--bg-2);
  position:relative;z-index:1;isolation:isolate;
}
/* il marchio sta sul nero della sezione: niente riquadro blu dietro */
.sec--ue .ue-badge{background:none;border:0;padding:0}
/* --- fascia foto divisoria, stretta e responsiva --- */
.band{
  position:relative;height:clamp(180px,26vw,320px);overflow:hidden;
}
/* l'immagine è più alta della fascia: le serve un margine sopra e sotto per
   respirare col movimento della pagina senza scoprire mai i bordi.
   Lo scostamento vero lo dà site.js, agganciato allo scroll. */
.band img{position:absolute;left:0;top:-20%;width:100%;height:140%;object-fit:cover;will-change:transform}
.band::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(10,10,11,.42),rgba(10,10,11,.08) 45%,rgba(10,10,11,.46));
}
.band--fog::after{
  background:linear-gradient(180deg,rgba(10,10,11,.48),rgba(10,10,11,.12) 50%,rgba(10,10,11,.5)),
             radial-gradient(60% 90% at 50% 100%,rgba(236,134,102,.28),transparent 70%);
}
/* variante per le sezioni chiare: nessun velo.
   Sul nero il velo serve a far sprofondare la foto, sul crema faceva l'opposto:
   sbiancava i bordi e sporcava l'immagine di lattiginoso. Qui la foto è già
   chiara e luminosa, quindi si appoggia pulita sul fondo, come una stampa. */
.band--light::after{content:none}

/* fascia video: come la fascia foto, ma più alta (circa metà dell'altezza che
   il video avrebbe a tutta pagina) e con dentro un <video> al posto della
   <img>. Il respiro allo scroll è lo stesso, glielo dà site.js. */
.band--video{height:clamp(280px,38vw,540px)}
/* niente velo scuro sopra il video: qui l'immagine si vede pulita, come è */
/* la striscia video prende il colore del brand: un velo salmone leggero che
   la lega alle sezioni intorno invece di lasciarla come un blocco a se' */
.band--video::after{
  content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  background:rgba(198,96,64,.15);
}
.band--video .vm-fit{filter:saturate(.88) contrast(1.03)}
/* i 20px in piu' li ha chiesti David il 22/08 guardando la striscia PL2: la
   testa era tagliata in cima. SOLO QUI: .vm-fit lo usa anche il video di sfondo
   della sezione Evento, e li' l'inquadratura era gia' a posto (ci ero cascato,
   avevo messo i 20px sulla regola comune e si erano spostati tutt'e due).
   E' un valore fisso e non una percentuale: e' un ritocco d'inquadratura, non
   deve crescere col monitor. */
.band--video .vm-fit{top:calc((100% - (var(--vw,100vw) * 9 / 16)) / 2 + (var(--vw,100vw) * 9 / 16) * .05 + 20px)}
/* Il player di Vimeo resta 16:9: per farlo comportare come una foto ritagliata
   lo si tiene largo quanto la fascia e alto quanto vuole il suo rapporto, poi
   lo si centra. Quello che avanza sopra e sotto esce dal riquadro, ed è anche
   il margine che serve al respiro dello scroll. */
.vm-fit{
  position:absolute;left:0;width:100%;
  height:calc(var(--vw,100vw) * 9 / 16);
  /* il player scende un po': quello che si perde è la parte bassa, non le teste */
  top:calc((100% - (var(--vw,100vw) * 9 / 16)) / 2 + (var(--vw,100vw) * 9 / 16) * .05);
  will-change:transform;
}
.vm-fit iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
/* stessa regola per un video nostro: dal 22/08 la sezione Evento non usa piu'
   Vimeo ma un file locale, e deve riempire il riquadro allo stesso identico
   modo. object-fit cover perche' un <video> di suo non si allarga come un
   iframe. */
.vm-fit video{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;object-fit:cover}

/* --- HERO full-bleed (v2): foto a tutto schermo, niente nome gigante --- */
.hero2{
  position:relative;min-height:100svh;display:flex;flex-direction:column;
  justify-content:flex-end;overflow:hidden;
}
.hero2-bg{position:absolute;inset:0;z-index:0}
.hero2-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 30%}
/* hero slideshow: 5 foto impilate, dissolvenza morbida (mai brusca) */
.hero2-bg .hero2-slide{position:absolute;inset:0;opacity:0;transition:opacity 1.4s ease}
.hero2-bg .hero2-slide.is-active{opacity:1}
/* slide 5 (sala larga): inquadra più le persone, meno soffitto */
/* REGOLA MORTA, trovata il 23/08: era scritta con $= ("il src FINISCE per"),
   ma versione.py attacca ?v=... in coda a ogni src, quindi non ha mai preso.
   Da qui in avanti per le foto si usa sempre *= ("il src CONTIENE"). */
.hero2-bg .hero2-slide[src*="hero-david-pl3-5"]{object-position:50% 60%}
.hero2-bg::after{
  content:"";position:absolute;inset:0;z-index:5;
  background:
    linear-gradient(180deg,rgba(10,10,11,.62) 0%,rgba(10,10,11,.18) 38%,rgba(10,10,11,.34) 62%,rgba(10,10,11,.9) 100%),
    linear-gradient(75deg,rgba(10,10,11,.78) 0%,rgba(10,10,11,.28) 46%,rgba(10,10,11,.05) 72%),
    radial-gradient(56% 44% at 8% 100%,rgba(236,134,102,.26),transparent 70%);
}
.hero2-in{
  position:relative;z-index:1;
  max-width:var(--max);margin:0 auto;width:100%;
  padding:0 var(--pad) 0;
}
.hero2 .eyebrow{font-size:.82rem}
.hero2-roles{display:flex;flex-direction:column;gap:.4rem;margin:.55rem 0 1.8rem}
.hero2-roles .hero-role-main{font-size:clamp(1.15rem,2.4vw,1.75rem);letter-spacing:.12em}
.hero2-quote{
  font-style:italic;color:var(--ink-70);max-width:46ch;
  padding-left:1.4rem;border-left:1px solid var(--coral);margin-bottom:2.4rem;
}
.hero2-ctas{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:clamp(2.4rem,5vh,3.4rem)}
.hero2 .hero-meta{position:relative;z-index:1;max-width:var(--max);margin:0 auto;width:100%;
  padding-inline:var(--pad);border-top:1px solid rgba(255,255,255,.16)}
@media (max-width:900px){
  .hero2{min-height:92svh}
  /* DA TELEFONO OGNI FOTO HA LA SUA INQUADRATURA (David, 23/08: "le foto in
     hero sono da centrare bene in modo che mi si veda"). Il riquadro e' 390 di
     largo per 844 di alto su foto 2400x1600: si vede una fessura verticale, e
     con un'inquadratura sola per tutte e cinque David finiva fuori campo in
     tre casi su cinque. Ogni riga qui sotto punta dove sta LUI in quella foto.
     Si usa *= e non $=, per via del ?v= che versione.py attacca in coda. */
  .hero2-bg img{object-position:62% 30%}
  .hero2-bg .hero2-slide[src*="hero-david-pl3-3"]{object-position:20% 55%}
  /* secondo giro di taratura (David: "alzare"). Alzare vuol dire far salire il
     soggetto, cioe' mostrare piu' roba del BASSO della foto: il secondo numero
     cresce. La prima prende anche un ingrandimento, perche' li' David e'
     lontano. */
  .hero2-bg .hero2-slide[src*="hero-david-pl3.jpg"],
  .hero2-bg .hero2-slide[src*="hero-david-pl3?"]{object-position:62% 46%;transform:scale(1.12)}
  /* il pugno sale ancora e la foto si stringe un po', cosi' la faccia non
     resta appiccicata alla riga del nome (David, 23/08) */
  .hero2-bg .hero2-slide[src*="hero-david-pl3-4"]{object-position:36% 70%;transform:scale(1.1)}
  .hero2-bg .hero2-slide[src*="hero-david-pl3-5"]{object-position:23% 88%}
  /* IL TESTO SOPRA LA FOTO SI DEVE LEGGERE (David, 23/08). Da computer il velo
     scuro arriva soprattutto da sinistra, perche' li' il testo sta in una
     colonna e la foto respira a destra. Da telefono il testo prende tutta la
     larghezza e sotto ci puo' capitare una platea illuminata: il velo va preso
     dal BASSO, dove stanno le scritte, e va piu' deciso. */
  .hero2-bg::after{
    background:
      linear-gradient(180deg,rgba(10,10,11,.58) 0%,rgba(10,10,11,.12) 26%,rgba(10,10,11,.42) 52%,rgba(10,10,11,.88) 76%,rgba(10,10,11,.96) 100%),
      radial-gradient(70% 40% at 20% 100%,rgba(236,134,102,.22),transparent 72%);
  }
  /* la riga sotto il titolo era grigia al 55%: su una foto chiara spariva */
  .hero2 .hero-role-sub{color:var(--ink-70)}
}
@media (max-width:520px){
  .hero2-ctas .btn{flex:1 1 100%}
}

/* --- fascia nera: il principio (frase spostata dalla hero) --- */
/* sotto la firma serve meno aria che sopra la citazione: padding asimmetrico */
.quote-band{position:relative;overflow:hidden;background:var(--bg);padding-block:clamp(2.6rem,6vw,4.6rem) clamp(1.4rem,3vw,2.4rem);text-align:center}
.quote-band>.wrap{position:relative;z-index:1}
.quote-sign{display:block;margin:1.15rem auto 0;width:clamp(172px,27vw,240px);height:auto;opacity:.92}
.quote-band-txt{
  font-style:normal;font-weight:400;color:var(--ink);
  font-size:clamp(1.22rem,2.7vw,1.88rem);line-height:1.4;
  max-width:44ch;margin:0 auto;
}
.quote-band-txt strong{font-weight:400;color:inherit}
/* i due fuochi della frase: grassetto + salmone */
.quote-band-txt strong.hl{font-weight:700;color:var(--coral)}
.quote-band-txt::before{content:"";display:block;width:46px;height:2px;background:var(--coral);margin:0 auto 1.9rem}

/* --- word-cloud categorie (per-chi) --- */
/* --- nicchie: il titolo che introduce l'elenco dei mestieri --- */
.nicchie{position:relative;text-align:center;margin-top:clamp(3rem,6vw,5rem)}
/* sfondo con lo stesso impianto dei capitoli della Storia: misura propria (mai
   legata all'altezza del blocco, se no la foto viene tagliata sulle facce),
   maschera radiale che sfuma su tutti i lati e libertà di sconfinare. */
.nicchie-bg{
  position:absolute;left:50%;bottom:-14%;
  transform:translateX(calc(-50% - clamp(150px,17vw,390px)));  /* scostata a sinistra */
  width:min(1560px,138vw);z-index:-1;pointer-events:none;
}
.nicchie-bg img{
  width:100%;height:auto;max-width:none;opacity:.24;
  /* pieno largo e sfumatura corta: la foto resta leggibile e si spegne solo
     sul bordo, invece di essere mangiata dalla vignettatura */
  -webkit-mask-image:radial-gradient(closest-side at 50% 56%,#000 66%,rgba(0,0,0,.6) 86%,transparent 100%);
  mask-image:radial-gradient(closest-side at 50% 56%,#000 66%,rgba(0,0,0,.6) 86%,transparent 100%);
}
/* l'elenco chiude la sezione: sotto basta un respiro corto, se no fra l'ultima
   riga e la punta della V resta un buco nero lungo mezzo schermo */
#per-chi{padding-bottom:clamp(.9rem,1.8vw,1.6rem)}
/* i percorsi fanno eccezione: lì si arriva un po' più in basso, come prima */
#percorsi{scroll-margin-top:-76px}
.nicchie-h{
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  line-height:1.02;letter-spacing:.02em;font-size:clamp(1.6rem,3.1vw,2.7rem);
  max-width:30ch;margin:0 auto;
}
.nicchie-h em{font-style:normal;color:var(--coral)}

/* la nuvola esce dalla colonna E dal wrap: prende tutta la larghezza dello
   schermo, da bordo a bordo. Righe giustificate: gli spazi fra le voci si
   allargano quanto serve perché ogni riga arrivi in fondo, e l'ultima resta
   centrata. Niente flex qui: solo il testo giustificato sa fare questo. */
.cloud{
  width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);margin-right:calc(50% - var(--vw,100vw)/2);
  padding-inline:var(--pad);
  margin-block:clamp(3rem,6vw,4.5rem) 0;
  text-align:justify;text-align-last:center;
  word-spacing:.6em;line-height:2.2;
}
/* Gotham in stampatello al posto del Bebas: il condensato da titoli, ripetuto
   111 volte, faceva muro. Qui serve una lista che respiri, non un titolone.
   Peso 500 e lettere distanziate, come le pillole del resto del sito. */
.cloud span{
  font-family:var(--font-body);text-transform:uppercase;font-weight:500;
  letter-spacing:.09em;
  /* inline-block: il giustificato allarga gli spazi FRA le voci e non dentro,
     se no "consulente immobiliare" si sfilaccerebbe al suo interno */
  display:inline-block;white-space:nowrap;word-spacing:normal;
}
/* una sola misura per tutte: cambia solo il colore, così la lista si legge
   come un elenco e non come una gara fra parole grosse e piccole.
   Più piccola di quando era in Bebas: il Gotham maiuscolo è molto più largo
   a parità di corpo, e senza calare il blocco raddoppierebbe di righe. */
.cloud span{font-size:clamp(.8rem,1.05vw,1rem)}
/* ogni mestiere aspetta sfocato e un filo più in basso: si accende quando
   l'onda dello scroll lo raggiunge (site.js). Nessun delay a tempo: con 122
   voci una cascata a cronometro partirebbe sempre sfasata da dove guardi. */
html.js .cloud span{
  opacity:0;transform:translateY(9px);filter:blur(5px);
  transition:opacity .5s var(--ease),transform .5s var(--ease),filter .5s var(--ease);
}
html.js .cloud span.on{opacity:1;transform:none;filter:none}
@media (prefers-reduced-motion:reduce){
  html.js .cloud span{opacity:1;transform:none;filter:none;transition:none}
}
.cloud .c1{color:var(--coral)}
.cloud .c2{color:var(--ink-70)}
.cloud .c3{color:var(--coral-hi);opacity:.85}
/* su schermo stretto il giustificato aprirebbe voragini fra due sole voci:
   meglio righe centrate e passo più corto */
@media (max-width:640px){
  .cloud{text-align:center;word-spacing:.3em;line-height:1.9}
}

/* --- sezione manifesto (perché solo freelance / allenatore mentale) --- */
.man-grid{
  display:grid;grid-template-columns:minmax(0,6.2fr) minmax(0,5fr);
  gap:clamp(2.5rem,5vw,4.5rem);align-items:start;
}
.man-grid .h-display{margin-bottom:1.8rem}
.man-grid .lead{margin-bottom:1.4rem}
.man-quote{
  font-style:italic;font-weight:700;font-size:clamp(1.15rem,1.9vw,1.5rem);line-height:1.6;
  color:var(--ink);
  padding-left:1.4rem;border-left:1px solid var(--coral);max-width:40ch;
  margin-top:clamp(2.6rem,3.4vw,3.6rem);   /* respiro fra l'ultima frase e la citazione */
}
/* parole in salmone dentro un testo: solo le lettere cambiano colore, niente
   sfondo. Vale uguale su desktop e su telefono. */
/* Il Gotham incorporato ha una sola faccia corsiva, quindi dentro una citazione
   in corsivo salire di peso (700 -> 900) non cambia un pixel: il browser rende
   la stessa faccia. Per ingrassare davvero si ispessisce il tratto. */
.man-quote .hl{color:var(--coral);-webkit-text-stroke:.03em currentColor}
/* sfondo del bootcamp: qui il fondo è chiaro, quindi la foto va tenuta molto
   più bassa che sul nero (una velatura, non un'immagine) e sfumata su tutti i
   lati. Sta sotto al testo, che resta sopra col suo z-index. */
#perche-freelance{overflow:hidden}
#perche-freelance > .wrap{position:relative;z-index:1}
/* NON IN USO dal 21/08: David ha chiesto di togliere la foto di sfondo, e il
   div e' stato tolto da index.html. Le regole restano qui perche' rimetterla
   e' solo questione di ridare il div (dentro c'e' il lavoro sulla doppia
   maschera che tiene fuori il roll-up "Elite Class"). */
.man-bg{
  /* spostata a destra il 20/08: con il testo nuovo, piu' corto, il cuore della
     foto finiva dietro alla cornice del ritratto e non si vedeva piu' niente.
     Cosi' invece si affaccia dal bordo destro, accanto alla cornice, e il testo
     resta sul crema pulito. Il taglio lo tiene #perche-freelance{overflow:hidden}. */
  position:absolute;right:calc(50% - var(--vw,100vw)/2 - 650px);bottom:calc(-18% - 63px);
  width:min(1450px,96vw);z-index:0;pointer-events:none;
}
.man-bg img{
  width:100%;height:auto;max-width:none;opacity:.55;
  /* il pieno si stringe su David e si sposta a destra: così il roll-up scuro
     cade fuori dalla maschera e sparisce, invece di essere schiarito da un velo
     che spegneva anche lui. Il testo torna sul crema pulito. */
  /* la foto si è spostata di 65px a destra e 8px in basso: il centro della
     maschera torna indietro di altrettanto, così la sfumatura resta ferma sulla
     pagina e a muoversi è solo l'immagine sotto. Raggi e stop invariati. */
  /* due maschere che si incrociano. La prima e' l'alone tondo di sempre. La
     seconda taglia via tutto quello che sta a sinistra del 42% dell'immagine,
     cioe' il roll-up "Elite Class Bootcamp": senza, sui monitor larghi la
     scritta rientrava in campo, e sul sito ufficiale Elite Class non deve
     comparire. Il taglio da solo non basterebbe a un'ancora in pixel: quanto
     si vede dipende dalla larghezza dello schermo, la percentuale no. */
  -webkit-mask-image:radial-gradient(38% 46% at calc(64% - 65px) calc(50% + 37px),#000 44%,rgba(0,0,0,.4) 76%,transparent 100%),linear-gradient(to right,transparent 42%,#000 49%);
  mask-image:radial-gradient(38% 46% at calc(64% - 65px) calc(50% + 37px),#000 44%,rgba(0,0,0,.4) 76%,transparent 100%),linear-gradient(to right,transparent 42%,#000 49%);
  -webkit-mask-composite:source-in;mask-composite:intersect;
}
.man-ph{width:100%;max-width:640px;justify-self:end}
.man-ph .frame{aspect-ratio:3/4;background:var(--bg-2)}
/* respiro leggero dentro la cornice: la foto è appena più alta del riquadro,
   e quel poco di margine le basta per muoversi con lo scorrimento senza mai
   scoprire i bordi né tagliare le mani. Lo scostamento lo dà site.js. */
.man-ph .frame img{
  position:relative;height:107%;top:-3.5%;will-change:transform;
}
@media (max-width:900px){
  /* minmax(0,1fr) e non 1fr: una colonna "1fr" non scende mai sotto la
     larghezza del suo contenuto più largo, e su schermi molto stretti era lei
     ad allargare la pagina. Con lo zero davanti la colonna può stringersi. */
  .man-grid{grid-template-columns:minmax(0,1fr)}
  .man-ph{width:100%;max-width:420px;justify-self:start}
}
/* badge percorsi coach (allenatore mentale) */
.coach-badges{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2.4rem}
.coach-badge{
  font-weight:700;font-size:.6875rem;letter-spacing:.22em;text-transform:uppercase;
  border:1px solid var(--line-strong);color:var(--ink-70);padding:.95em 1.6em;
}

/* --- risultati v2: monogramma/foto accanto al nome --- */
.ris-row{grid-template-columns:minmax(11rem,16rem) auto 1fr;align-items:center}
.ris-face{
  width:3.4rem;height:3.4rem;border-radius:50%;overflow:hidden;flex:none;
  background:var(--coral-12);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-size:1.15rem;color:var(--coral);letter-spacing:.06em;
}
.ris-face img{width:100%;height:100%;object-fit:cover}
@media (max-width:768px){.ris-row{grid-template-columns:minmax(8rem,10rem) auto 1fr}}
@media (max-width:480px){
  .ris-row{grid-template-columns:auto 1fr;row-gap:.6rem}
  .ris-row .ris-val{grid-column:1 / -1}
}

/* --- videotestimonianze (facade Vimeo, click-to-play) --- */
.vt-grid{
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:clamp(.8rem,1.4vw,1.2rem);
}
.vt{
  position:relative;aspect-ratio:16/9;overflow:hidden;cursor:pointer;
  border:1px solid var(--line);background:#000;padding:0;display:block;width:100%;
}
.vt img{width:100%;height:100%;object-fit:cover;opacity:.88;transition:opacity .35s ease,transform .8s var(--ease)}
.vt:hover img{opacity:1;transform:scale(1.04)}
.vt .play{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  z-index:1;pointer-events:none;
}
.vt .play span{
  width:3.2rem;height:3.2rem;border-radius:50%;
  background:rgba(10,10,11,.62);border:1px solid var(--coral);
  display:flex;align-items:center;justify-content:center;
  transition:background-color .3s ease;
}
.vt:hover .play span{background:var(--coral)}
.vt .play svg{width:1rem;height:1rem;fill:#fff;margin-left:2px}
.vt iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
@media (max-width:1000px){.vt-grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:700px){.vt-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:460px){.vt-grid{grid-template-columns:1fr}}

/* --- dicono di me: card recensione --- */
/* ---- 09 · recensioni: tre file che camminano ----
   Card tutte della stessa altezza, in fila. Il testo si ferma dove finisce
   lo spazio invece di allungare la card: cosi' le file restano dritte. */
.dico-file{display:flex;flex-direction:column;gap:clamp(.9rem,1.6vw,1.4rem);margin-top:clamp(1.6rem,3vw,2.4rem)}
/* le file escono dalla colonna e vanno da un bordo all'altro dello schermo,
   come la fila dei casi studio: si usa la larghezza vera della finestra */
.dico-full{
  width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
}
.dico-full .dico-fila{padding-inline:clamp(1rem,4vw,3rem)}
/* LA FILA NON SCORRE PIU' DA SOLA: la posizione la scrive il transform sulla
   pista (motore unico dei nastri, site.js). Due motivi, tutti e due di David:
   il movimento a scatti (scrollLeft arrotonda al pixel) e il dito che
   impediva di scorrere la pagina (touch-action:pan-x vuol dire "qui si va
   solo in orizzontale"). Adesso pan-y: il su e giu' resta al browser. */
.dico-fila{
  overflow:hidden;
  padding:.3rem .3rem 1rem;margin:-.3rem -.3rem 0;
  cursor:grab;touch-action:pan-y;
}
/* la pista sta dentro un contenitore flex in colonna: `width:max-content` da
   solo, li' dentro, puo' essere letto come "quanto ti dice il padre" e
   schiacciare tutte le card. Con flex:0 0 auto e min-width la pista tiene la
   sua larghezza vera. */
.dico-pista{
  display:flex;gap:clamp(.9rem,1.6vw,1.4rem);
  width:max-content;min-width:max-content;flex:0 0 auto;
}
.dico-fila::-webkit-scrollbar{display:none}
.dico-fila.in-mano{cursor:grabbing}
/* una nebbia salmone dietro le file, come nelle altre sezioni */
.dico-file{position:relative}
.dico-file::before{
  content:"";position:absolute;inset:-16% 0 -46%;pointer-events:none;z-index:0;
  background:
    /* ogni alone si spegne PRIMA di ogni bordo del riquadro: se lo tocca ancora
       acceso, il taglio si vede come una macchia squadrata */
    radial-gradient(48% 26% at 16% 38%,rgba(236,134,102,.19),transparent 100%),
    radial-gradient(42% 26% at 58% 64%,rgba(236,134,102,.14),transparent 100%);
}
.dico-file > *{position:relative;z-index:1}
.dico{
  flex:0 0 clamp(268px,74vw,340px);
  min-width:0;   /* se no un mestiere lungo allarga la card oltre le altre */
  display:flex;flex-direction:column;
  min-height:clamp(320px,34vw,360px);   /* stessa aria per tutte, nessun testo tagliato */
  border:1px solid var(--line);background:var(--bg-2);
  padding:clamp(1.2rem,1.9vw,1.6rem);
  transition:border-color .5s var(--ease-soft),box-shadow .5s var(--ease-soft);
}
.dico:hover{border-color:var(--coral-35);box-shadow:0 0 28px rgba(236,134,102,.18)}
.dico-head{display:flex;align-items:center;gap:.8rem;margin-bottom:.9rem}
.dico-head img{width:3rem;height:3rem;border-radius:50%;object-fit:cover;flex:none;
  -webkit-user-drag:none;user-select:none;pointer-events:none}
.dico-chi{min-width:0}
/* nome e cognome sulla stessa riga: se serve si stringe la spaziatura, non
   si va a capo */
.dico-name{
  display:block;font-weight:700;font-size:.9375rem;letter-spacing:.02em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.dico-role{display:block;font-size:.75rem;color:var(--ink-55);margin-top:.1rem;
  overflow-wrap:anywhere}
.dico-voto{display:flex;align-items:baseline;gap:.55rem;margin:0 0 .7rem}
.dico-stars{color:var(--coral);letter-spacing:.12em;font-size:.875rem}
.dico-txt{margin:0;font-size:.875em;color:var(--ink-70);line-height:1.65}
@media (max-width:640px){
  .dico{min-height:clamp(300px,86vw,340px)}
  /* sul telefono la card e' stretta: nome un filo piu' piccolo, lettere non
     spaziate e un po' meno aria attorno al ritratto, cosi' i nomi lunghi
     entrano interi invece di finire nei puntini */
  .dico-head{gap:.6rem}
  .dico-head img{width:2.75rem;height:2.75rem}
  .dico-name{font-size:.85rem;letter-spacing:0}
}

/* --- filosofia: testo argomentativo sotto la citazione + foto più grande --- */
.fil-arg{
  max-width:none;margin:2.8rem 0 0;text-align:left;
  /* Misurato: era .9375em, cioe' 15,63px da computer contro i 16,67 del testo
     del Metodo. Adesso e' 1em, quindi eredita esattamente come tutti gli altri
     paragrafi del sito: 15px da telefono, 16,67 da computer.
     COLORE: il grigio di casa, e bianchi solo i grassetti (David, 23/08).
     Ci ho messo tre giri ad arrivarci: prima l'avevo alzato a 17px e messo in
     bianco per compensare il fatto che il chiaro su scuro sembra piu' sottile,
     e cosi' era diventato piu' grande di tutti gli altri. La risposta giusta
     era la piu' semplice: uguale agli altri. */
  color:var(--ink-70);font-size:1em;line-height:1.75;
}
/* testo a sinistra, foto a destra: il ragionamento si legge accanto
   all'immagine invece che sopra */
.fil-basso{
  display:grid;grid-template-columns:minmax(0,.82fr) minmax(0,1.35fr);
  gap:clamp(2rem,4.5vw,4rem);align-items:center;
  margin-top:clamp(2.6rem,5vw,4rem);
}
.fil-basso .fil-arg{margin-top:0}
/* i due paragrafi stanno in una sola cella della griglia, se no la foto
   scivola su una riga tutta sua */
.fil-testo .fil-arg + .fil-arg{margin-top:1.1rem}
.fil-basso .fil-ph{max-width:none;margin:0}
@media (max-width:900px){
  .fil-basso{grid-template-columns:1fr}
  .fil-basso .fil-ph{margin-top:1.4rem}
}
.fil-ph{max-width:900px}

/* --- badge UE / Pact for Skills --- */
.ue-grid{
  display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);
  gap:clamp(1.8rem,3.4vw,3rem);align-items:center;
}
/* il blocco stava largo il doppio del necessario: testo alla misura di
   lettura, corpo normale e meno aria sopra e sotto */
.sec--ue .lead{font-size:.9375rem;line-height:1.7;max-width:56ch}
/* titolo e marchio erano troppo piccoli rispetto al peso della notizia:
   alzati tutt'e due di un gradino il 20/08, su richiesta di David */
.sec--ue .storia-kick{font-size:clamp(1.6rem,2.8vw,2.3rem)}
/* la coda sotto era uguale alla testa (54px da computer, 35 da telefono), ma
   sotto ci finisce il bottone e restava incollato alla fine del blocco (David,
   23/08). Sopra resta compatta, sotto respira: 89,6px da computer e 57,6 da
   telefono. */
.sec--ue{padding-block:clamp(2.2rem,4.5vw,3.4rem) clamp(3.6rem,6vw,5.6rem)}
/* niente riquadro blu: il marchio sta sul nero della sezione, piu' grande */
.ue-badge{background:none;padding:0;border:0}
.ue-badge img{width:100%;max-width:560px;height:auto;margin:0 auto}
/* per far crescere davvero il marchio non basta il max-width: e' la colonna
   che lo stringe, quindi si allarga anche quella */
.sec--ue .ue-grid{grid-template-columns:minmax(0,5fr) minmax(0,7fr)}
.sec--ue .ue-badge img{max-width:700px}
/* nella pagina della formazione il marchio ha piu' spazio: la colonna che lo
   ospita si allarga, se no l'immagine resta piccola comunque */
#pact-for-skills .ue-grid{grid-template-columns:minmax(0,5.6fr) minmax(0,6.4fr)}
#pact-for-skills .ue-badge img{max-width:640px}
@media (max-width:900px){
  #pact-for-skills .ue-grid{grid-template-columns:minmax(0,1fr)}
  #pact-for-skills .ue-badge img{max-width:520px}
}
@media (max-width:900px){
  .ue-grid{grid-template-columns:1fr}.ue-badge{max-width:560px}
  /* serve la stessa specificita' della regola qui sopra, se no da telefono
     il blocco resta a due colonne e il marchio sfonda la pagina */
  .sec--ue .ue-grid{grid-template-columns:minmax(0,1fr)}
  .sec--ue .ue-badge img{max-width:520px}
}
/* fra il bottone della formazione e la punta della V c'era un buco: qui la
   sezione chiara chiude prima */
#formazione{padding-bottom:clamp(2.4rem,5vw,4rem)}

/* --- formazione: timeline attestati --- */
.att{
  display:grid;grid-template-columns:minmax(9rem,12rem) minmax(0,5fr) minmax(0,6fr);
  gap:clamp(1.5rem,3vw,3rem);padding-block:clamp(2.2rem,4vw,3.2rem);
  border-bottom:1px solid var(--line);align-items:start;
}
.att-year{
  font-family:var(--font-display);font-size:clamp(2.2rem,4vw,3.4rem);line-height:1;
  color:var(--coral);position:sticky;top:6.5rem;
}
.att-name{font-weight:700;font-size:1.0625rem;letter-spacing:.02em;margin-bottom:.6rem}
.att-with{font-size:.8125rem;color:var(--coral);font-weight:500;letter-spacing:.06em;margin-bottom:1rem}
.att-txt{font-size:.875em;color:var(--ink-70);line-height:1.75}
.att-ph{border:1px solid var(--line);background:var(--bg-2);padding:.55rem}
.att-ph img{width:100%;height:auto}
@media (max-width:900px){
  .att{grid-template-columns:1fr}
  .att-year{position:static}
  .att-ph{max-width:520px}
}
/* l'indice degli anni: fisso all'estrema sinistra della pagina, a mezza altezza.
   E' una cosa in piu': l'anno grande accanto a ogni attestato resta dov'era.
   Compare solo se a sinistra della colonna di lettura c'e' posto (da 1440px),
   se no si sovrapporrebbe al testo (soglia 1480px). Da telefono non c'e' mai. */
.att-anni{display:none}
@media (min-width:1480px){
  .att-anni{
    display:block;position:fixed;z-index:5;
    left:clamp(.9rem,1.7vw,2.4rem);top:50%;transform:translateY(-50%);
    opacity:0;visibility:hidden;
    transition:opacity .5s var(--ease-soft),visibility .5s var(--ease-soft);
  }
  .att-anni.si-vede{opacity:1;visibility:visible}
  /* mentre scendi, gli anni compaiono uno alla volta da sotto la fascia nera
     e allo stesso modo ci scivolano sotto in fondo: le due misure le calcola
     site.js in base a dove sono i bordi della sezione chiara */
  .att-anni{
    --su:0px; --giu:0px;
    /* La dissolvenza sta TUTTA DALLA PARTE CHIARA e finisce esatta sul bordo
       del nero: l'anno e' gia' spento quando lo tocca, non ci sfuma sopra.
       Identica in alto e in basso. Funziona solo perche' site.js lascia --su e
       --giu andare in negativo quando il nero e' lontano: cosi' la sfumatura
       esce fuori dall'indice e nessun anno resta sbiadito (se li si blocca a
       zero, "nero lontano" e "nero sul bordo" diventano la stessa cosa). */
    -webkit-mask-image:linear-gradient(to bottom,
      transparent var(--su), #000 calc(var(--su) + 46px),
      #000 calc(100% - var(--giu) - 46px), transparent calc(100% - var(--giu)));
            mask-image:linear-gradient(to bottom,
      transparent var(--su), #000 calc(var(--su) + 46px),
      #000 calc(100% - var(--giu) - 46px), transparent calc(100% - var(--giu)));
  }
  .att-anni ul{list-style:none;margin:0;padding:0}
  .att-anno{
    position:relative;display:block;text-decoration:none;
    font-family:var(--font-display);font-size:clamp(1.45rem,1.62vw,2.3rem);
    line-height:1.34;letter-spacing:.02em;color:var(--ink-55);
    padding-left:1.45em;
    transition:color .4s var(--ease-soft);
  }
  /* il trattino che segna l'anno acceso */
  .att-anno::before{
    content:"";position:absolute;left:0;top:.64em;width:.95em;height:2px;
    background:var(--coral);transform:scaleX(0);transform-origin:left center;
    opacity:0;transition:transform .45s var(--ease-soft),opacity .45s var(--ease-soft);
  }
  .att-anno:hover,.att-anno:focus-visible{color:var(--coral)}
  .att-anno.attivo{color:var(--coral)}
  .att-anno.attivo::before{transform:scaleX(1);opacity:1}
}
@media (prefers-reduced-motion:reduce){
  .att-anni,.att-anno,.att-anno::before{transition-duration:.01ms}
}

/* attestato senza immagine: il testo occupa anche la colonna della foto */
@media (min-width:901px){
  .att--noimg{grid-template-columns:minmax(9rem,12rem) minmax(0,11fr)}
}

/* --- EXPERIENCE (teaser home, identità salmone) — sfondo montaggio drammatico --- */
/* la V in fondo: il taglio a punta che c'era prima e che David ha voluto
   rimettere. Leggera apposta, circa la meta' di quella della hero Experience:
   sotto si vede il nero della sezione Filosofia. */
.exp{
  background:#0d0d0e;position:relative;overflow:hidden;min-height:86vh;
  display:flex;align-items:center;
  --v:clamp(22px,3vw,52px);
  clip-path:polygon(0 0,100% 0,100% calc(100% - var(--v)),50% 100%,0 calc(100% - var(--v)));
}
/* Il taglio scopre quello che sta DIETRO alla sezione, che di suo e' il nero
   della pagina: piu' chiaro di quello della Filosofia qui sotto, e ai lati
   restavano due coni grigi. Si tira su la sezione seguente di quanto e'
   profonda la V, cosi' sotto il taglio c'e' il suo nero. */
/* ATTENZIONE: tirando su la sezione seguente, quella COPRIVA la punta della V,
   perche' viene dopo nel documento e ha un fondo suo. Serve dire che la
   sezione con la foto sta sopra. Ci sono cascato una volta: la V spariva. */
/* Il margine negativo tira su la sezione di quanto e' profonda la V, cosi'
   sotto il taglio si vede il nero di QUESTA sezione e non quello, piu' chiaro,
   della pagina (i due coni grigi del 20/08). Ma cosi' l'etichetta finiva a 38px
   dalla punta, mentre in tutte le altre sezioni fra il bordo e l'etichetta ce
   ne sono 123: il padding qui sotto restituisce i pixel mangiati dal margine e
   riporta lo stacco alla misura del sito. Le due righe vanno insieme. */
/* ATTENZIONE, il selettore e' ".exp + #filosofia" e NON "#filosofia" da solo:
   questa taratura ha senso SOLO quando la Filosofia sta subito sotto la sezione
   Experience, perche' serve a mettere il suo nero sotto la punta della V.
   Il 22/08 David ha spostato la Filosofia sotto il Metodo: scritta come regola
   secca, si sarebbe portata dietro il margine negativo e avrebbe morso la
   sezione di sopra. Cosi' invece si spegne da sola, e se un giorno si torna
   alla disposizione iniziale si riaccende da sola. */
.exp + #filosofia{
  margin-top:calc(-1 * clamp(22px,3vw,52px));position:relative;z-index:0;
  padding-top:calc(clamp(2.6rem,6vh,4.4rem) + clamp(22px,3vw,52px) + 2.5rem);
}
/* LA V DELLA SEZIONE EXPERIENCE, secondo capitolo (22/08). Da quando David ha
   spostato la Filosofia sotto il Metodo, sotto la V non c'e' piu' lei ma la
   striscia video, e i coni ai lati tornavano a farsi vedere: misurati, erano
   (10,10,11), il nero neutro della pagina, contro il (30,14,10) piu' caldo
   della striscia. Vent'unita' di scarto sul rosso, e si legge.
   Rimedio identico a quello di prima, spostato sulla striscia: la si tira su
   di quanto e' profonda la V, cosi' sotto il taglio c'e' il SUO fondo.
   Se un giorno si torna alla disposizione iniziale questa regola non fa danno:
   li' dopo .exp non c'e' nessuna .band e non si applica a niente. */
.exp + .band{margin-top:calc(-1 * clamp(22px,3vw,52px));position:relative;z-index:0}
/* I CONI DELLA V, RIEMPITI COL CREMA (David, 22/08: "per far vedere la V
   dobbiamo riempire i coni grigio scuro laterali con il bianco di sfondo").
   La V e' un clip-path su .exp: dove taglia, di .exp non resta niente e si vede
   quello che sta DIETRO, cioe' il nero della pagina. Per avere il crema non si
   colora la V: si tira su la sezione chiara che viene dopo, di quanto e'
   profondo il taglio, cosi' e' lei a stare sotto ai coni.
   Il padding-top rimette i pixel mangiati dal margine negativo, se no
   l'etichetta della sezione si alzerebbe rispetto a tutte le altre. E' la
   stessa coppia di righe gia' usata per la Filosofia: si cambiano INSIEME. */
.exp + .sec--light{
  margin-top:calc(-1 * clamp(22px,3vw,52px));
  padding-top:calc(var(--sec-y) + clamp(22px,3vw,52px));
  position:relative;z-index:0;
}
.exp{z-index:1}
.exp + .sec{border-top:0}
.exp-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.exp-bg{overflow:hidden}
/* la foto e' piu' alta del riquadro e si muove appena con lo scorrimento: lo
   scostamento lo passa site.js. Un filo piu' tenue, cosi' il testo respira. */
.exp-bg img{width:100%;height:112%;object-fit:cover;object-position:62% 52%;
  position:relative;top:-6%;opacity:.82;will-change:transform}
/* velo di leggibilita': solo due sfumature continue, una da sinistra e una
   dall'alto verso il basso. Niente aloni con salti bruschi: erano quelli a
   disegnare una riga netta in mezzo alla foto. */
/* Velo di leggibilita'. I passaggi sono a scaletta fitta e sempre nella stessa
   direzione: se un gradiente ha un tratto piatto e poi uno ripido, nel punto in
   cui cambia pendenza l'occhio legge una riga netta. Era quella la "sfumatura
   che taglia" segnalata da David. */
.exp-bg::after{content:"";position:absolute;inset:0;background:
  linear-gradient(90deg,rgba(13,13,14,.93) 0%,rgba(13,13,14,.8) 14%,rgba(13,13,14,.64) 30%,rgba(13,13,14,.48) 46%,rgba(13,13,14,.36) 62%,rgba(13,13,14,.28) 80%,rgba(13,13,14,.24) 100%),
  linear-gradient(180deg,rgba(13,13,14,.86) 0%,rgba(13,13,14,.6) 8%,rgba(13,13,14,.42) 18%,rgba(13,13,14,.33) 30%,rgba(13,13,14,.31) 46%,rgba(13,13,14,.35) 60%,rgba(13,13,14,.45) 72%,rgba(13,13,14,.6) 84%,rgba(13,13,14,.78) 94%,rgba(13,13,14,.88) 100%)}
/* min-width:0 perché qui il wrap è un elemento flex: senza, non si stringe
   sotto la parola più lunga che contiene e su schermi stretti sborda */
.exp>.wrap{position:relative;z-index:1;min-width:0}

.exp-title{margin-bottom:1.1rem}
.exp-intro{max-width:50ch;margin-bottom:0}
.exp-more{margin-top:clamp(1.6rem,3.5vw,2.4rem);color:var(--ink-70);font-size:.98rem;letter-spacing:.01em;max-width:none}
/* la frase chiave: la prima riga in corsivo, la seconda accesa */
.exp-claim{max-width:52ch;font-style:italic;font-size:1.05rem;line-height:1.6;color:var(--ink-80,rgba(255,255,255,.8))}
.exp-claim span{display:block;margin-top:.5rem;font-style:normal;font-weight:700;color:var(--coral)}
.exp-cta{margin-top:1.9rem;margin-bottom:clamp(2.4rem,5vw,4rem)}
@media (max-width:820px){
  .exp{min-height:0}
  .exp-bg img{object-position:70% 42%}
  .exp-bg::after{background:
    linear-gradient(180deg,rgba(13,13,14,.82) 0%,rgba(13,13,14,.62) 45%,rgba(13,13,14,.9) 100%),
    radial-gradient(80% 50% at 50% 108%,rgba(236,134,102,.2),transparent 62%)}
}

/* --- METODO E.T.I.C.O. — sezione a tutta pagina, timeline animata --- */
.metodo{position:relative;overflow:hidden;isolation:isolate}
.metodo-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.metodo-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 42%;filter:blur(4px);opacity:.14;transform:scale(1.06)}
.metodo-bg::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#f7f4f1 0%,rgba(247,244,241,.86) 11%,rgba(247,244,241,.4) 28%,rgba(247,244,241,.24) 100%)}
.metodo>.wrap{position:relative;z-index:1}

.etico{position:relative;z-index:1;padding:0 clamp(1.5rem,5vw,5rem);margin-top:clamp(2.6rem,6vw,4.5rem)}
.etico-track{list-style:none;margin:0;padding:0;display:flex;align-items:stretch;position:relative}
.etico-step,.etico-edge{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;padding-bottom:3rem}
.etico-step{flex:1 1 0;min-width:0}
.etico-edge{flex:0 0 auto;justify-content:flex-end}
/* binario lungo + riempimento coral.
   La punta non va a tempo: la muove site.js con --fill, in base allo scroll.
   Così la linea e le lettere sono sincronizzate per costruzione. */
.etico-track::before,.etico-track::after{content:"";position:absolute;left:.5rem;bottom:1.1rem;height:3px;border-radius:3px;transform:translateY(50%)}
.etico-track::before{right:.5rem;background:var(--line)}
.etico-track::after{
  width:var(--fill,0px);
  background:linear-gradient(90deg,var(--coral) 0%,var(--coral) 78%,var(--coral-hi) 100%);
  box-shadow:0 0 14px rgba(236,134,102,.4);
}
/* il bagliore che corre sulla punta della linea */
.etico-spark{
  position:absolute;left:calc(.5rem + var(--fill,0px));bottom:1.1rem;
  width:30px;height:30px;border-radius:50%;transform:translate(-50%,50%);
  pointer-events:none;z-index:3;opacity:0;transition:opacity .35s ease;
  background:radial-gradient(circle,rgba(236,134,102,.9) 0%,rgba(236,134,102,.32) 40%,transparent 72%);
}
.etico.is-live .etico-spark{opacity:1}
/* lettere + titoli ordinati (area titolo ad altezza fissa) */
.etico-letter{font-family:var(--font-display);font-weight:400;line-height:1;color:var(--ink);font-size:clamp(2.6rem,4.6vw,4.4rem);letter-spacing:.02em;margin-bottom:.9rem}
.etico-name{font-weight:700;font-size:.74rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink);line-height:1.4;min-height:3.1rem;max-width:15ch}
.etico-cap{font-weight:700;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-55)}
/* pallini che si illuminano */
.etico-step::after,.etico-edge::after{content:"";position:absolute;left:50%;bottom:1.1rem;transform:translate(-50%,50%) scale(.3);width:16px;height:16px;border-radius:50%;background:var(--coral);z-index:2;opacity:0;box-shadow:0 0 9px 2px rgba(236,134,102,.4)}
.etico-edge::after{background:var(--ink);width:12px;height:12px;box-shadow:none}
/* freccia coral appena prima di "decisione" */
.etico-edge--end::before{content:"";position:absolute;left:-4px;bottom:1.1rem;transform:translate(-100%,50%);border-left:12px solid var(--coral);border-top:8px solid transparent;border-bottom:8px solid transparent;z-index:2;opacity:0;filter:drop-shadow(0 0 6px rgba(236,134,102,.7))}
/* stato iniziale: la lettera aspetta sfocata e un filo più in basso */
html.js .etico-letter,html.js .etico-name,html.js .etico-cap{
  opacity:0;transform:translateY(16px);filter:blur(7px);
  transition:opacity .55s var(--ease),transform .55s var(--ease),filter .55s var(--ease);
}
html.js .etico-letter{transform:translateY(20px) scale(.94)}
html.js .etico-step::after,html.js .etico-edge::after{
  transition:opacity .35s ease,transform .5s cubic-bezier(.2,1.7,.4,1);   /* lo scatto del pallino */
}
html.js .etico-edge--end::before{transition:opacity .4s ease}
/* acceso: lo decide site.js quando la punta della linea arriva qui */
.etico-step.on .etico-letter,.etico-step.on .etico-name,
.etico-edge.on .etico-cap{opacity:1;transform:none;filter:none}
.etico-step.on .etico-name{transition-delay:.14s}
/* il lampo salmone che si posa sul nero, al passaggio della punta */
.etico-step.on .etico-letter{animation:etico-lampo 1s var(--ease)}
@keyframes etico-lampo{
  0%{color:var(--coral);text-shadow:0 0 28px rgba(236,134,102,.9)}
  55%{color:var(--coral);text-shadow:0 0 12px rgba(236,134,102,.4)}
  100%{color:var(--ink);text-shadow:none}
}
.etico-step.on::after,.etico-edge.on::after{opacity:1;transform:translate(-50%,50%) scale(1)}
.etico-edge--end.on::before{opacity:1}
/* --- mobile: timeline verticale, la linea scende dall'alto --- */
@media (max-width:760px){
  .etico{padding:0 clamp(1rem,4vw,1.6rem);margin-top:clamp(2rem,7vw,2.8rem)}
  .etico-track{flex-direction:column;align-items:stretch}
  /* i punti erano troppo vicini fra loro (David, 23/08): l'aria sopra e sotto
     passa da .72rem a 1.15rem, cioe' 14px in piu' fra un punto e il seguente. */
  .etico-step,.etico-edge{flex:0 0 auto;flex-direction:row;align-items:center;justify-content:flex-start;text-align:left;gap:1.1rem;padding:1.15rem 0 1.15rem 2.4rem}
  .etico-track::before,.etico-track::after{left:.55rem;right:auto;top:.6rem;width:3px;height:auto;transform:translateX(-50%)}
  .etico-track::before{bottom:.6rem}
  /* qui la punta scende invece di avanzare: stessa --fill, altro asse */
  .etico-track::after{bottom:auto;height:var(--fill,0px);
    background:linear-gradient(180deg,var(--coral) 0%,var(--coral) 78%,var(--coral-hi) 100%)}
  .etico-spark{left:.55rem;bottom:auto;top:calc(.6rem + var(--fill,0px));transform:translate(-50%,-50%)}
  .etico-step::after,.etico-edge::after{left:.55rem;top:50%;bottom:auto;transform:translate(-50%,-50%) scale(.3)}
  .etico-step.on::after,.etico-edge.on::after{transform:translate(-50%,-50%) scale(1)}
  .etico-edge--end::before{display:none}
  .etico-letter{margin:0;min-width:1.5ch;font-size:2.3rem}
  .etico-name{min-height:0;max-width:none;text-align:left}
}
/* riduci movimento: la timeline si vede tutta e ferma, niente lampi né corse */
@media (prefers-reduced-motion:reduce){
  html.js .etico-letter,html.js .etico-name,html.js .etico-cap,
  html.js .etico-step::after,html.js .etico-edge::after,html.js .etico-edge--end::before{
    opacity:1;transform:none;filter:none;transition:none;animation:none}
  html.js .etico-step::after,html.js .etico-edge::after{transform:translate(-50%,50%) scale(1)}
  .etico-spark{display:none}
}
/* nomi formatori */
/* i formatori riempiono la riga da un bordo all'altro: le pastiglie si
   distribuiscono e l'ultima riga resta allineata a sinistra */
/* Le pastiglie si comportano come parole di un testo giustificato: le righe
   arrivano dritte anche a destra, l'ultima resta allineata a sinistra. */
.mentori{
  /* TUTTE le righe vanno da bordo a bordo, ULTIMA COMPRESA (David, 21/08:
     "non devono essere tutti schiacciati a sinistra"). Lo fanno due cose
     insieme: text-align-last sulle righe interrotte dalla scheda aperta, e il
     riempitivo ::after largo quanto la riga, che rende "intermedia" anche
     l'ultima riga di pastiglie e quindi la fa giustificare.
     Quanto si aprono gli spazi dipende da quante pastiglie restano nell'ultima
     riga, e quello cambia con la larghezza dello schermo: a 1512px ne resta
     una, a 1280 quattro, a 1024 cinque. Non e' un difetto, e' la giustificazione. */
  display:block;text-align:justify;text-align-last:justify;
  margin-top:2.2rem;
  width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
  padding-inline:var(--pad);
  font-size:0;            /* toglie lo spazio fra le pastiglie... */
}
.mentori::after{content:"";display:inline-block;width:100%}
.mentore{
  display:inline-block;margin:0 .34rem .62rem 0;
  font-weight:500;font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;
  padding:.66em 1.3em;border:1px solid var(--line);border-radius:100px;
  color:var(--ink-55);   /* tutti in grigio */
  transition:color .3s var(--ease-soft),border-color .3s var(--ease-soft),background-color .3s var(--ease-soft);
  cursor:default;
}
/* usata solo durante lo spostamento della scheda, per non far saltare le righe */
/* will-change solo mentre le pastiglie si spostano davvero: lasciarlo
   sempre acceso su 53 elementi costa memoria per niente */
.mentore.scivola{will-change:transform;transition:transform .5s var(--ease-soft),color .3s var(--ease-soft),border-color .3s var(--ease-soft),background-color .3s var(--ease-soft)}
.mentore-scheda.scivola{transition:transform .5s var(--ease-soft),opacity .45s var(--ease-soft)}
/* al passaggio del mouse si accendono di salmone */
.mentore:hover{color:var(--coral);border-color:var(--coral-35);background:var(--coral-12)}
.mentore--big{font-weight:700}
/* i nomi che aprono una scheda si riconoscono: hanno un puntino salmone */
.mentore--apre{cursor:pointer;background:none;font-family:inherit}
.mentore--apre.acceso{color:var(--coral);border-color:var(--coral-35);background:var(--coral-12)}

/* la scheda che si apre sotto la riga */
.mentore-scheda{
  display:grid;grid-template-rows:0fr;width:100%;font-size:1rem;
  /* la scheda sta SOPRA le pastiglie e ha il fondo della sezione: quando si
     sposta da una riga all'altra, le pastiglie che scivolano le passano
     dietro invece che attraverso. Senza, per mezzo secondo si leggevano dei
     nomi sopra al testo del formatore. */
  position:relative;z-index:1;background:var(--bg);
  text-align:left;text-align-last:auto;   /* se no eredita la giustificazione delle pastiglie */
  transition:grid-template-rows .78s var(--ease-soft),opacity .5s var(--ease-soft),margin .78s var(--ease-soft);
  opacity:0;margin:0;
}
.mentore-scheda.aperta{grid-template-rows:1fr;opacity:1;margin:.4rem 0 1.1rem}
/* la dissolvenza del contenuto e' piu' svelta dell'apertura: e' un passaggio,
   non un'animazione a se'. Se dura quanto tutto il resto il cambio di nome
   sembra lento e a scatti. */
.mentore-scheda.cambio .ms-in{opacity:0;transform:translateY(10px);transition-duration:.2s}

.ms-in{
  overflow:hidden;position:relative;
  /* il contenuto entra appena appena dal basso, con calma: senza questo
     l'apertura sembra uno scatto */
  transform:translateY(14px);
  transition:opacity .5s var(--ease-soft),transform .72s var(--ease-soft);
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(1.2rem,2.6vw,2.4rem);
  align-items:end;
}
.mentore-scheda.aperta .ms-in{padding:clamp(1rem,2vw,1.6rem) 0 0;transform:translateY(0)}
.ms-foto{margin:0;width:clamp(210px,27vw,340px);flex:none;position:relative;isolation:isolate}
/* il bagliore salmone e' disegnato dentro l'immagine, cosi' la foto resta leggera */
.ms-foto img{
  display:block;width:100%;height:auto;
  /* Gli ultimi pixel dei tre lati sfumano. Li' l'immagine e' gia' esattamente
     del colore della pagina, quindi non si perde nessun pezzo di bagliore: si
     toglie solo il rischio che un livello di scarto del JPEG disegni il
     rettangolo della foto sul nero della sezione (David lo vedeva). In fondo
     NON si sfuma: li' c'e' la riga salmone. */
  -webkit-mask-image:
    linear-gradient(to right,transparent 0,#000 9px,#000 calc(100% - 9px),transparent 100%),
    linear-gradient(to bottom,transparent 0,#000 9px,#000 100%);
          mask-image:
    linear-gradient(to right,transparent 0,#000 9px,#000 calc(100% - 9px),transparent 100%),
    linear-gradient(to bottom,transparent 0,#000 9px,#000 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect;
}
/* di uno dei formatori non esiste una foto: la scheda resta di solo testo e
   la colonna del ritratto non c'e' proprio, cosi' non si vede un buco */
.ms-foto[hidden]{display:none}
.mentore-scheda.senza-foto .ms-in{grid-template-columns:minmax(0,1fr)}
.ms-testo{padding-bottom:clamp(.4rem,1.4vw,1.2rem);max-width:64ch}
.ms-nome{
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;line-height:.95;
  font-size:clamp(1.9rem,3.6vw,3rem);color:#fff;margin:0 0 .3rem;letter-spacing:.01em;
}
.ms-ruolo{
  margin:0 0 .9rem;font-size:.7rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase;
  color:var(--coral);
}
.ms-bio{margin:0;font-size:.95rem;line-height:1.7;color:var(--ink-70)}
/* il corso frequentato con quel formatore: porta alla voce qui sotto */
.ms-corso{
  display:inline-flex;align-items:center;gap:.6em;margin-top:1.1rem;
  font-size:.68rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--coral);text-decoration:none;
  border-bottom:1px solid var(--coral-35);padding-bottom:.35em;
  transition:border-color .3s var(--ease-soft),gap .3s var(--ease-soft);
}
.ms-corso:hover,.ms-corso:focus-visible{border-color:var(--coral);gap:.9em}
.ms-corso[hidden]{display:none}
.ms-freccia{font-style:normal;display:inline-block;transition:transform .35s var(--ease-soft)}
.ms-corso:hover .ms-freccia{transform:translateY(3px)}
/* la voce raggiunta si accende un attimo, cosi' si capisce dove sei finito */
.att.evidenzia{animation:att-accendi 2.2s var(--ease-soft)}
@keyframes att-accendi{
  0%,12%{background:rgba(236,134,102,.14)}
  100%{background:transparent}
}
.att{scroll-margin-top:6.5rem}

.ms-chiudi{
  position:absolute;top:.2rem;right:0;background:none;border:0;cursor:pointer;
  font:inherit;font-size:.66rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-55);display:inline-flex;align-items:center;gap:.5em;
  transition:color .3s var(--ease-soft);
}
.ms-chiudi:hover,.ms-chiudi:focus-visible{color:var(--coral)}
@media (max-width:760px){
  .ms-in{grid-template-columns:1fr;gap:1rem}
  .ms-foto{width:min(72vw,300px)}
  .ms-chiudi{position:static;margin-top:.8rem}
}
@media (prefers-reduced-motion:reduce){
  .mentore-scheda{transition:none}
}

@media (max-width:760px){
  .mentore{font-size:.7rem;padding:.6em 1.05em;letter-spacing:.12em}
}

/* --- storia: capitoli narrativi --- */
.storia-cap{
  display:grid;grid-template-columns:minmax(0,6.6fr) minmax(0,5fr);
  gap:clamp(2.5rem,6vw,6rem);align-items:start;
  padding-block:clamp(2.6rem,5vw,4rem);border-bottom:1px solid var(--line);
}
.storia-cap:last-of-type{border-bottom:0}
.storia-cap.flip{grid-template-columns:minmax(0,5fr) minmax(0,6.6fr)}
.storia-cap.flip .storia-txt{order:2}
.storia-kick{
  font-family:var(--font-display);font-size:clamp(1.6rem,2.6vw,2.2rem);line-height:1;
  letter-spacing:.03em;text-transform:uppercase;margin-bottom:1.2rem;
}
.storia-kick em{font-style:normal;color:var(--coral)}
.storia-txt p{color:var(--ink-70);margin-bottom:1.05rem;font-size:.9375em}
/* foto dei capitoli: entrano di lato (dal lato in cui stanno) e l'animazione
   è agganciata allo scroll, quindi va avanti e indietro col movimento */
html.js .slide-x{opacity:0;will-change:transform,opacity}
/* effetto polaroid: l'inclinazione la dà il JS, l'ombra fa "appoggiare" la foto */
.slide-x .frame{box-shadow:0 18px 44px rgba(0,0,0,.5)}
@media (prefers-reduced-motion:reduce){
  html.js .slide-x{opacity:1;transform:none}
}
.storia-ph{max-width:480px}
.storia-ph .frame{aspect-ratio:3/4}
/* capitolo con foto di sfondo: esce dalla colonna e prende tutta la larghezza,
   poi si spegne nel nero sopra, sotto e sul lato del testo */
.storia-cap{position:relative}
.storia-cap--bg .storia-bg{
  position:absolute;top:0;bottom:0;width:min(62vw,900px);
  z-index:-1;                       /* sotto agli aloni salmone della sezione */
  pointer-events:none;overflow:visible;
}
.storia-cap--bg.flip .storia-bg{left:calc(50% - var(--vw,100vw)/2)}
.storia-cap--bg:not(.flip) .storia-bg{right:calc(50% - var(--vw,100vw)/2)}
/* misura propria, mai legata all'altezza del capitolo, e maschera tonda:
   così la foto non viene ritagliata e non mostra bordi su nessun lato */
.storia-cap--bg .storia-bg img{
  position:absolute;bottom:-10%;
  width:clamp(480px,54vw,780px);height:auto;max-width:none;margin:0;opacity:.52;
  -webkit-mask-image:radial-gradient(closest-side at 50% 44%,#000 56%,rgba(0,0,0,.5) 82%,transparent 100%);
  mask-image:radial-gradient(closest-side at 50% 44%,#000 56%,rgba(0,0,0,.5) 82%,transparent 100%);
}
.storia-cap--bg.flip .storia-bg img{left:clamp(-155px,-8vw,-70px)}
.storia-cap--bg:not(.flip) .storia-bg img{right:clamp(-115px,-5vw,-40px)}
.storia-cap--bg .storia-bg::after{content:none}
.storia-cap--bg > .storia-txt,.storia-cap--bg > .storia-ph{position:relative;z-index:1}

/* La seconda foto di sfondo del 2016, quella in cui David dorme (21/08).
   Sta a SINISTRA, dietro al testo, con la stessa maschera tonda delle altre.
   La sorgente e' una foto piccola (720x960) ritagliata sulla testa: mostrata
   larga poco piu' di 400px resta pulita, e comunque e' una velatura.
   Opacita' piu' bassa delle altre perche' qui sotto ci passa il testo. */
/* ATTENZIONE alla specificita': la taratura del capitolo qui sotto e' scritta
   con l'id (#cap-2016 .storia-bg img) e batterebbe qualunque regola di sole
   classi. Percio' anche questa usa l'id, se no la foto esce larga 1320px.
   E' la stessa trappola gia' vista col blocco europeo in home. Non basta
   nemmeno pareggiare la specificita': a parita' vince chi sta DOPO nel foglio,
   e la taratura del capitolo sta piu' sotto. Quindi qui si scrivono DUE classi
   (.storia-bg.storia-bg--sx), cosi' vince a prescindere dall'ordine. */
#cap-2016 .storia-bg.storia-bg--sx{
  left:calc(50% - var(--vw,100vw)/2);right:auto;width:min(46vw,620px);
}
#cap-2016 .storia-bg.storia-bg--sx img{
  right:auto;left:clamp(-80px,-4.7vw,-24px);top:8%;bottom:auto;
  width:clamp(340px,36vw,540px);opacity:.46;
  /* DUE maschere che si incrociano.
     1) l'ovale allungata: raggio 44% in larghezza contro 86% in altezza,
        centrata sul soggetto (30% dell'altezza).
     2) una sfumatura verticale che spegne SEMPRE il primo e l'ultimo pezzo
        dell'immagine. Serve perche' l'ovale e' piu' alta della foto
        (30 piu' 86 sfora il 100%), quindi da sola veniva TAGLIATA
        di netto dal bordo sopra e sotto: e' il difetto che David ha visto.
     Si uniscono con mask-composite:intersect, come .man-bg in home. */
  -webkit-mask-image:radial-gradient(44% 86% at 50% 30%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.35) 7%,#000 20%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
          mask-image:radial-gradient(44% 86% at 50% 30%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.35) 7%,#000 20%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect;
}


@media (max-width:900px){ .storia-bg--sx{display:none} }

/* Le foto di sfondo dei capitoli compaiono in DISSOLVENZA (David, 21/08).
   Usano lo stesso osservatore delle altre cose (.rev), ma senza lo spostamento
   verticale: uno sfondo che scivola si nota troppo. Solo opacita', e piu' lenta. */
@media (prefers-reduced-motion:no-preference){
  html.js .bg-fade.rev{transform:none;transition:opacity 1.25s var(--ease)}
  html.js .bg-fade.rev.in{transform:none}
}

/* il filmato dentro la cornice si comporta come una foto: riempie il riquadro
   3/4 e viene tagliato ai lati (e' 16:9), come fa object-fit cover con le img */
.storia-ph .frame .ph-video{display:block;width:100%;height:100%;object-fit:cover}

/* 2018: la foto del Vietnam dietro al testo. Il capitolo e' flip, quindi il
   testo sta a DESTRA ed e' li' che va la foto. Due classi per la specificita'
   (vedi la nota qui sopra). */
#cap-2018 .storia-bg.storia-bg--dx{
  right:calc(50% - var(--vw,100vw)/2);left:auto;width:min(46vw,640px);
}
#cap-2018 .storia-bg.storia-bg--dx img{
  left:auto;right:clamp(-80px,-4.4vw,-24px);top:10%;bottom:auto;
  width:clamp(360px,38vw,560px);opacity:.38;
  /* DUE maschere che si incrociano.
     1) l'ovale allungata: raggio 50% in larghezza contro 86% in altezza,
        centro spostato a destra (58% in larghezza, 58% in altezza): David sta li'.
     2) una sfumatura verticale che spegne SEMPRE il primo e l'ultimo pezzo
        dell'immagine. Serve perche' l'ovale e' piu' alta della foto
        (58 piu' 86 sfora il 100%), quindi da sola veniva TAGLIATA
        di netto dal bordo sopra e sotto: e' il difetto che David ha visto.
     Si uniscono con mask-composite:intersect, come .man-bg in home. */
  -webkit-mask-image:radial-gradient(50% 86% at 58% 58%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.22) 8%,rgba(0,0,0,.62) 19%,#000 31%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
          mask-image:radial-gradient(50% 86% at 58% 58%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.22) 8%,rgba(0,0,0,.62) 19%,#000 31%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect;
}


/* 2019: la foto col gimbal esce dalla cornice (li' ora c'e' il filmato) e
   diventa lo sfondo a SINISTRA, dal lato del testo. La sorgente e' 488x651,
   quindi si mostra alla sua misura vera: ingrandirla la sgranerebbe. */
#cap-2019 .storia-bg.storia-bg--sx{
  left:calc(50% - var(--vw,100vw)/2);right:auto;width:min(46vw,640px);
}
#cap-oggi .storia-bg.storia-bg--sx{
  left:calc(50% - var(--vw,100vw)/2);right:auto;width:min(46vw,640px);
}
#cap-2019 .storia-bg.storia-bg--sx img{
  right:auto;left:clamp(-60px,-3.4vw,-16px);top:12%;bottom:auto;
  width:clamp(340px,36vw,520px);opacity:.60;
  /* DUE maschere che si incrociano.
     1) l'ovale allungata: raggio 50% in larghezza contro 86% in altezza,
        centrata sul soggetto (40% dell'altezza).
     2) una sfumatura verticale che spegne SEMPRE il primo e l'ultimo pezzo
        dell'immagine. Serve perche' l'ovale e' piu' alta della foto
        (40 piu' 86 sfora il 100%), quindi da sola veniva TAGLIATA
        di netto dal bordo sopra e sotto: e' il difetto che David ha visto.
     Si uniscono con mask-composite:intersect, come .man-bg in home. */
  -webkit-mask-image:radial-gradient(50% 86% at 50% 40%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.12) 10%,rgba(0,0,0,.55) 24%,#000 38%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
          mask-image:radial-gradient(50% 86% at 50% 40%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.12) 10%,rgba(0,0,0,.55) 24%,#000 38%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect;
}
#cap-oggi .storia-bg.storia-bg--sx img{
  right:auto;left:clamp(-95px,-5.4vw,-26px);top:12%;bottom:auto;
  width:clamp(430px,45vw,650px);opacity:.60;
  /* DUE maschere che si incrociano.
     1) l'ovale allungata: raggio 50% in larghezza contro 86% in altezza,
        centrata SULLA TESTA (24%): David ha chiesto che il viso non sia mai sfumato.
     2) una sfumatura verticale che spegne SEMPRE il primo e l'ultimo pezzo
        dell'immagine. Serve perche' l'ovale e' piu' alta della foto
        (40 piu' 86 sfora il 100%), quindi da sola veniva TAGLIATA
        di netto dal bordo sopra e sotto: e' il difetto che David ha visto.
     Si uniscono con mask-composite:intersect, come .man-bg in home. */
  -webkit-mask-image:radial-gradient(50% 86% at 50% 24%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.6) 4%,#000 10%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
          mask-image:radial-gradient(50% 86% at 50% 24%,#000 14%,rgba(0,0,0,.84) 34%,rgba(0,0,0,.54) 54%,rgba(0,0,0,.26) 74%,rgba(0,0,0,.08) 89%,transparent 100%),linear-gradient(to bottom,transparent 0,rgba(0,0,0,.6) 4%,#000 10%,#000 80%,rgba(0,0,0,.35) 93%,transparent 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect;
}


@media (max-width:900px){ .storia-bg--dx{display:none} }

/* taratura per capitolo */
#cap-2016 .storia-bg img{width:clamp(760px,88vw,1320px);opacity:.52;
  right:clamp(-230px,-10vw,-80px);   /* ancora più a destra */
  /* il pieno scende e si allarga: tiene dentro sia il viso sia la chitarra */
  -webkit-mask-image:radial-gradient(closest-side at 68% 46%,#000 76%,rgba(0,0,0,.42) 92%,transparent 100%);
  mask-image:radial-gradient(closest-side at 68% 46%,#000 76%,rgba(0,0,0,.42) 92%,transparent 100%)}
#cap-2018 .storia-bg img{opacity:.66;width:clamp(430px,48vw,700px)}
/* il ritaglio scende: la foto di Gerusalemme resta scoperta più a lungo */
#cap-2018 .storia-ph--duo{padding-bottom:34%}
#cap-2018 .frame--clip{bottom:-16%}
/* il secondo scatto scende e rientra: non copre più il viso dello sfondo */
#cap-2019 .storia-ph--duo{padding-bottom:38%}
#cap-2019 .frame--clip{left:2%;bottom:-18%}
/* l'inquadratura scorre verso destra: Loredana entra meglio nella cornice */
#cap-2019 .frame--clip img{object-position:70% 50%}
#cap-2019 .storia-bg img{opacity:.42;right:clamp(-205px,-9vw,-80px);
  -webkit-mask-image:radial-gradient(closest-side at 48% 50%,#000 66%,rgba(0,0,0,.5) 88%,transparent 100%);
  mask-image:radial-gradient(closest-side at 48% 50%,#000 66%,rgba(0,0,0,.5) 88%,transparent 100%)}
/* spostato molto a sinistra: il viso esce da sotto la polaroid.
   Il pieno della maschera scende sul viso, così il muro sopra la testa
   si spegne nel nero invece di restare visibile */
#cap-2021 .storia-bg img{opacity:.5;left:clamp(-360px,-22vw,-180px);bottom:-20%;
  -webkit-mask-image:radial-gradient(closest-side at 50% 60%,#000 50%,rgba(0,0,0,.42) 78%,transparent 100%);
  mask-image:radial-gradient(closest-side at 50% 60%,#000 50%,rgba(0,0,0,.42) 78%,transparent 100%)}
#cap-2022 .storia-bg img{right:clamp(-400px,-17vw,-150px);bottom:-20%}
#cap-2024 .storia-bg img{width:clamp(620px,72vw,1080px);opacity:.5}
#cap-oggi .storia-bg img{width:clamp(560px,64vw,940px);opacity:.6;
  right:clamp(-480px,-21vw,-180px);bottom:-26%}

/* capitolo con due scatti: il ritaglio di giornale appoggiato sulla foto */
.storia-ph--duo{position:relative;padding-bottom:18%}
.storia-ph--duo .frame--clip{
  position:absolute;right:-12%;bottom:-2%;width:60%;aspect-ratio:860/1310;
  transform:rotate(4deg);box-shadow:0 18px 44px rgba(0,0,0,.6);
}
@media (max-width:900px){
  .storia-ph--duo .frame--clip{width:52%;right:-4%}
  /* A una colonna il testo passa sotto le foto, e il ritaglio di giornale
     che sborda in basso finiva sopra al titolo del capitolo: 26px di parole
     coperte, uguali da 320px fino a 900px. Non si tocca lo sbordo, che è il
     bello di quel collage: scende il testo. Allargare invece il padding sotto
     la foto non serve a niente, perché il ritaglio è agganciato al fondo e
     scenderebbe insieme a lui. */
  #cap-2018 .storia-txt{margin-top:18%}   /* lo sbordo cresce con la colonna: serve una misura che cresca con lei */
}
@media (max-width:900px){
  .storia-cap,.storia-cap.flip{grid-template-columns:1fr}
  .storia-cap.flip .storia-txt{order:0}
}

/* --- telefono e tablet: a una colonna lo sfondo finisce dietro al testo ---
   Le tarature qui sopra sono fatte per la colonna laterale del desktop e
   hanno il minimo in pixel: su schermo stretto vince sempre il minimo, e la
   foto viene più larga dello schermo (il 2016 arrivava a 760px su un telefono
   da 390px). Qui si rimisura tutto in vw e si abbassa l'opacità, così resta
   una presenza dietro le parole e non un fondale.
   Gli id vanno ripetuti: se no vince la taratura desktop per specificità. */
@media (max-width:900px){
  .storia-cap--bg .storia-bg{width:min(88vw,540px)}
  .storia-cap--bg .storia-bg img,
  #cap-2016 .storia-bg img,#cap-2018 .storia-bg img,#cap-2019 .storia-bg img,
  #cap-2021 .storia-bg img,#cap-2022 .storia-bg img,#cap-2024 .storia-bg img,
  #cap-oggi .storia-bg img{
    width:min(112vw,560px);opacity:.26;bottom:-8%;
    -webkit-mask-image:radial-gradient(closest-side at 50% 44%,#000 48%,rgba(0,0,0,.38) 78%,transparent 100%);
    mask-image:radial-gradient(closest-side at 50% 44%,#000 48%,rgba(0,0,0,.38) 78%,transparent 100%);
  }
  /* gli scatti verticali si tengono più stretti, se no vengono altissimi:
     il capitolo "oggi" (900x1350) sarebbe alto 840px su un telefono */
  #cap-2018 .storia-bg img,#cap-2021 .storia-bg img,
  #cap-2022 .storia-bg img,#cap-oggi .storia-bg img{width:min(80vw,400px)}
  /* ogni capitolo tiene il suo lato, agganciato al bordo dello schermo */
  .storia-cap--bg:not(.flip) .storia-bg img,
  #cap-2016 .storia-bg img,#cap-2019 .storia-bg img,
  #cap-2022 .storia-bg img,#cap-oggi .storia-bg img{right:-14%;left:auto}
  .storia-cap--bg.flip .storia-bg img,
  #cap-2018 .storia-bg img,#cap-2021 .storia-bg img,#cap-2024 .storia-bg img{left:-14%;right:auto}
  /* a colonna piena la polaroid si centra invece di restare a sinistra */
  .storia-ph{margin-inline:auto}
}

/* --- articolo blog --- */
.art{max-width:720px}
/* in cima all'articolo: la freccia indietro che riporta all'elenco del blog */
.art-kick a{color:inherit;text-decoration:none;transition:color .3s var(--ease-soft)}
.art-kick a:hover{color:var(--coral)}
.art-kick .arr-back{display:inline-block;margin-right:.45em;transition:transform .3s var(--ease-soft)}
.art-kick a:hover .arr-back{transform:translateX(-4px)}
.art-kick{
  font-weight:700;font-size:.6875rem;letter-spacing:.32em;
  text-transform:uppercase;color:var(--coral);
}
.art-meta{
  margin-top:1.4rem;font-weight:500;font-size:.6875rem;letter-spacing:.26em;
  text-transform:uppercase;color:var(--ink-55);
  /* la foto tonda accanto alla firma: chi arriva dal blog non sa chi sia */
  display:flex;align-items:center;gap:.7rem;
}
.art-meta img{
  width:76px;height:76px;border-radius:50%;object-fit:cover;
  /* il file e' gia' ritagliato sul volto (david-avatar-tondo.jpg): la foto
     profilo intera, a 38px, mostrava mezzo roll-up e tagliava la faccia */
  flex:none;border:1px solid rgba(236,134,102,.42);
}
@media (max-width:520px){ .art-meta img{width:64px;height:64px} }
/* le foto dentro un articolo: escono un po' dalla colonna di lettura, cosi'
   respirano, e hanno la didascalia sotto in piccolo. Da telefono stanno nella
   colonna come il testo. */
.art-fig{
  margin:2.6rem 0;width:100%;
}
.art-fig img{
  /* TUTTE LE FOTO DELLA STESSA MISURA (David, 21/08): larghezza piena e
     rapporto fisso, il ritaglio lo fa object-fit cover. Le sorgenti hanno
     formati diversi (2:1, 2,18:1, 3:2) e senza questo si vedevano di tre
     altezze diverse una sotto l'altra.
     DAL 22/08 il rapporto e' 2:1 da telefono e 16:5 da computer (David: "piu'
     lunghe da sinistra a destra e leggermente piu' strette in altezza").
     ATTENZIONE, e' il contrario di quello che sembra: la cornice piu' STRETTA
     di prima (16:9) tagliava i FIANCHI delle foto, che sono tutte piu' larghe
     di cosi'. Allargando il rapporto si vede PIU' foto, non meno.
     object-position al 22% e non al centro: il taglio mangia sopra e sotto, e
     sopra e' dove stanno le teste e i loghi (nella foto del caffe' il marchio
     My Autogrill sta fra il 7% e il 25% dell'altezza: centrato si troncava). */
  display:block;width:100%;aspect-ratio:2/1;object-fit:cover;
  object-position:50% 22%;
  border-radius:14px;
}
.art-fig figcaption{
  margin-top:.7rem;font-size:.78rem;line-height:1.5;color:var(--ink-55);
}
@media (min-width:960px){
  /* DA COMPUTER LE FOTO ESCONO DALLA COLONNA DI LETTURA (David, 22/08: "devono
     prendere una porzione maggiore di schermo"). Prima stavano dentro, all'88%.
     LA MISURA NON E' A CASO: e' esattamente la larghezza utile di .wrap, cioe'
     il contenitore di tutto il sito. Siccome .art e' allineata a SINISTRA
     dentro .wrap, la foto parte dal bordo del testo e si allunga verso destra
     fino al bordo del contenitore: siccome .wrap e' centrato nello schermo, il
     risultato e' una foto CENTRATA nella pagina e allineata al testo a
     sinistra. A 1512px va da 208 a 1304, cioe' 1096px invece di 634.
     Sotto i 960px la stessa formula vale 100% e la foto torna larga quanto il
     testo, senza bisogno di un'altra regola.
     margin-left:0 e' obbligatorio: con margin-inline:auto un elemento piu'
     largo del genitore sborda tutto a destra e la pagina scorre di lato. */
  .art-fig{
    width:calc(min(var(--max), 100vw) - 2 * var(--pad));
    /* SPOSTATE A SINISTRA (David, 22/08: "mi piacciono di piu'"). Il margine
       negativo vale esattamente il padding di .wrap, quindi la foto parte dal
       bordo ESTERNO del contenitore invece che dal bordo del testo: a 1512
       comincia a 136 invece che a 208, e lo spazio guadagnato va tutto a
       destra. Da 1240px in giu' il contenitore tocca gia' i bordi e la foto
       arriva a filo schermo: e' voluto, non e' uno sforamento (misurato). */
    margin-left:calc(-1 * var(--pad));margin-right:0;
  }
  .art-fig img{aspect-ratio:16/5}
}
.art h2{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(1.8rem,3vw,2.5rem);line-height:1.05;
  letter-spacing:.03em;text-transform:uppercase;
  margin:clamp(2.6rem,5vw,3.4rem) 0 1.1rem;
}
.art h2 em{font-style:normal;color:var(--coral)}
.art p{color:var(--ink-70);margin-bottom:1.15rem;font-size:.9375em;line-height:1.85}
.art strong{color:var(--ink)}
.art ul{margin:0 0 1.15rem}
.art li{
  color:var(--ink-70);font-size:.9375em;line-height:1.8;
  position:relative;padding-left:1.3rem;margin-bottom:.6rem;
}
.art li::before{
  content:"";position:absolute;left:0;top:.75em;
  width:5px;height:5px;border-radius:50%;background:var(--coral);
}
.art blockquote{
  font-style:italic;font-weight:500;font-size:1.0625em;line-height:1.7;
  padding-left:1.4rem;border-left:1px solid var(--coral);
  margin:1.8rem 0;color:var(--ink);max-width:52ch;
}
.art-next{
  margin-top:clamp(3rem,6vw,4.5rem);padding-top:2rem;border-top:1px solid var(--line);
  display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;align-items:center;
}
/* da telefono i due rimandi si impilano e il testo può andare a capo dentro al
   bottone: "Leggi anche: i 5 tipi di clienti" su una riga sola usciva dallo
   schermo e allargava la pagina */
@media (max-width:520px){
  .art-next{flex-direction:column;align-items:stretch}
  .art-next .btn{white-space:normal;text-align:center}
}

/* --- percorsi: hover con velo più scuro (testo leggibile, foto attenuata) --- */
.strada::after{transition:background-color var(--t) var(--ease-soft),opacity var(--t) var(--ease-soft)}
.strada:hover::after{
  background:linear-gradient(180deg,rgba(10,10,11,.45) 0%,rgba(10,10,11,.62) 46%,rgba(10,10,11,.96) 100%);
}
.strada:hover .ph img{opacity:.55}
.strada .ph img{transition:transform var(--t) var(--ease-soft),opacity var(--t) var(--ease-soft)}

/* --- evento: aula in trasparenza sotto la sezione --- */
.evt{position:relative;overflow:hidden}
.evt-bg{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
/* come le fasce foto: l'immagine è più alta della sezione, e quel margine le
   serve per respirare col movimento della pagina senza scoprire i bordi.
   Lo scostamento vero lo dà site.js, agganciato allo scroll. */
.evt-bg img{
  position:absolute;left:0;top:-13%;width:100%;height:126%;
  object-fit:cover;object-position:50% 42%;opacity:.4;will-change:transform;
}
.evt-bg::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(16,16,17,.72) 0%,rgba(16,16,16,.3) 45%,rgba(16,16,17,.78) 100%);
}
.evt .wrap{position:relative;z-index:1}
.evt-sub{
  font-weight:700;font-size:.8125rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--coral);margin-bottom:1.2rem;
}

/* ============================================================
   PAGINA EXPERIENCE — brand salmone, cinematografica e dinamica
   ============================================================ */
.xp{background:#0b0a0a}
.xp-scene{position:relative;min-height:92vh;display:flex;align-items:flex-end;overflow:hidden}
.xp-scene--hero{
  /* svh e non vh: su iPhone "100vh" comprende la barra degli indirizzi, che
     compare e sparisce mentre scorri. La scena cambiava altezza da sola e il
     filmato, che la riempie ritagliandosi, cambiava inquadratura di colpo:
     e' lo "scatto" che David vedeva appena aperta la pagina. svh e' l'altezza
     vera, quella con le barre gia' contate. */
  min-height:calc(100svh - 10px);align-items:center;text-align:center;
  --v:clamp(42px,6vw,110px);
  clip-path:polygon(0 0,100% 0,100% calc(100% - var(--v)),50% 100%,0 calc(100% - var(--v)));
}
.xp-scene>img,.xp-scene>.xp-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
/* le scene con la foto: l'immagine e' piu' alta della sezione e scorre piano
   mentre scorri la pagina. L'abbondanza sopra e sotto (14% per parte) e' pari
   allo spostamento massimo, cosi' non compare mai una striscia vuota. */
html.js .xp-scene:not(.xp-scene--hero)>img{
  height:128%;top:-14%;bottom:auto;
  will-change:transform;
}
@media (prefers-reduced-motion:reduce){
  html.js .xp-scene:not(.xp-scene--hero)>img{height:100%;top:0;transform:none!important}
}
/* il filmato sta sopra la sua immagine di scorta: se non parte, resta il fermo
   immagine e non un buco nero */
.xp-scene>.xp-video{z-index:1;pointer-events:none}
.xp-scene--hero::after{z-index:2}
.xp-scene--hero>.wrap{z-index:3}
@media (prefers-reduced-motion:reduce){
  .xp-scene>.xp-video{display:none}
}
/* grade salmone + scurita per il testo */
.xp-scene::after{content:"";position:absolute;inset:0;z-index:1;background:
  radial-gradient(95% 75% at 50% 100%,rgba(236,134,102,.24),transparent 60%),
  linear-gradient(180deg,rgba(11,10,10,.5) 0%,rgba(11,10,10,.08) 34%,rgba(11,10,10,.55) 66%,rgba(11,10,10,.95) 100%)}
.xp-scene--hero>img,.xp-scene--hero>.xp-video{filter:brightness(.92)}
.xp-scene--hero::after{background:
  radial-gradient(80% 62% at 50% 80%,rgba(236,134,102,.3),transparent 62%),
  radial-gradient(135% 100% at 50% 38%,rgba(11,10,10,.28),rgba(11,10,10,.88))}
.xp-scene>.wrap{position:relative;z-index:2;width:100%;padding-top:7rem;padding-bottom:clamp(3rem,8vh,6rem)}
.xp-scene--hero>.wrap{padding:7rem var(--pad)}
.xp-kick{display:inline-flex;align-items:center;gap:.75em;font-weight:700;font-size:.74rem;letter-spacing:.28em;text-transform:uppercase;color:var(--coral);margin-bottom:1.2rem}
.xp-kick::before{content:"";width:34px;height:2px;background:var(--coral)}
.xp-scene--hero .xp-kick,.xp-band .xp-kick,.xp-end .xp-kick{justify-content:center}
.xp-h{font-family:var(--font-display);font-weight:400;line-height:.9;letter-spacing:.01em;text-transform:uppercase;color:#fff;font-size:clamp(3rem,8.5vw,7rem)}
.xp-scene--hero .xp-h{font-size:clamp(3.7rem,13.6vw,10.2rem);line-height:.86}
/* la firma sotto il titolo e il motto in stampatello */
.xp-firma{
  margin:clamp(.1rem,.45vw,.35rem) 0 0;
  font-size:clamp(.82rem,1.1vw,1rem);font-weight:700;
  letter-spacing:.42em;text-transform:uppercase;text-indent:.42em;
  color:rgba(255,255,255,.82);
}
.xp-motto{
  margin:clamp(1.4rem,3vw,2.2rem) auto 0;max-width:38ch;
  font-size:clamp(1rem,1.7vw,1.5rem);font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;line-height:1.35;
  color:#fff;
}
.xp-h em{font-style:normal;color:var(--coral)}
.xp-p{max-width:58ch;margin-top:1.4rem;color:rgba(255,255,255,.86);font-size:clamp(1.05rem,1.45vw,1.24rem);line-height:1.6}
.xp-scene--hero .xp-p{margin-left:auto;margin-right:auto}
/* --- galleria collage: muro di momenti intensi (dinamismo) --- */
.xp-gallery{background:#0b0a0a;padding:clamp(2.5rem,6vw,5rem) 0}
.xp-gallery .wrap,.xp-shots{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(.5rem,1vw,1rem);grid-auto-rows:clamp(160px,19.5vw,300px)}

/* --- la striscia di voci in coda a una galleria --- */
/* chi non ha ancora il ritratto: cerchio con le iniziali, non un buco */
.dico-ini{
  width:3rem;height:3rem;border-radius:50%;flex:none;
  display:grid;place-items:center;
  background:rgba(236,134,102,.14);color:var(--coral);
  font-weight:700;font-size:.8rem;letter-spacing:.06em;
}
@media (max-width:640px){
  .dico-ini{width:2.75rem;height:2.75rem}
}

/* --- lo stacco fra la hero e le esperienze: una V, poi nero e respiro --- */
.xp-gate{
  background:#0b0a0a;text-align:center;
  padding:clamp(2.6rem,5.5vw,4.4rem) 0 clamp(2.6rem,5.5vw,4.4rem);
}
/* nello stacco il titolo e' piu' contenuto e il testo respira sotto */
.xp-gate-h{font-size:clamp(2rem,4.4vw,3.9rem);margin-top:.2rem}
/* il simbolo di marchio registrato non deve gridare */
.xp-reg{
  font-size:.26em;color:var(--coral);letter-spacing:0;margin-left:.1em;
  position:relative;top:-2.05em;   /* la testa del simbolo sale fino a quella della O */
  vertical-align:baseline;
}
.xp-gate-p strong{color:#fff;font-weight:700}
.xp-gate-p{
  margin-top:clamp(1.6rem,3.2vw,2.4rem);
  max-width:56ch;margin-left:auto;margin-right:auto;
  color:rgba(255,255,255,.86);
  font-size:clamp(1.02rem,1.4vw,1.2rem);line-height:1.7;
}
.xp-gate-p.da-scrivere{color:rgba(255,255,255,.42);font-style:italic}
/* --- sotto ogni scena: il testo che scalda, poi le foto di quell'esperienza --- */
.xp-extra{
  background:#0b0a0a;padding:clamp(3rem,7vw,5.5rem) 0 clamp(2rem,4vw,3rem);
  /* la fila di voci sborda di mezzo centimetro per via del suo margine
     negativo: qui la si taglia, come gia' si fa in home */
  overflow-x:hidden;overflow-x:clip;
}
.xp-extra .wrap + .xp-shots{margin-top:clamp(2rem,4vw,3rem)}
.xp-extra-p strong{color:#fff;font-weight:700}
.xp-extra-p{
  max-width:64ch;margin:0;
  color:rgba(255,255,255,.86);
  font-size:clamp(1.02rem,1.35vw,1.18rem);line-height:1.65;
}
/* segnaposto: si vede a colpo d'occhio che quel testo e' ancora da scrivere.
   Quando David lo sostituisce, basta togliere la classe. */
.xp-extra-p.da-scrivere{
  color:rgba(255,255,255,.42);font-style:italic;
  border-left:2px solid var(--coral-35);padding-left:1.1rem;
}
.xp-shot{position:relative;overflow:hidden;border-radius:6px;cursor:zoom-in}
/* Qualche foto va guardata piu' da vicino di come la ritaglia la casella:
   --zoom dice quanto avvicinarsi e --fuoco su cosa. Si mettono a mano sulla
   singola <img>. Sta qui e non in un file ritagliato apposta, cosi' il pannello
   a tutto schermo continua a mostrare la foto intera. Attenzione: il file
   sorgente e' 933x1400, quindi oltre 1,5 di zoom su uno schermo retina la foto
   comincia a perdere nitidezza. */
.xp-shot img{
  width:100%;height:100%;object-fit:cover;cursor:zoom-in;
  transform-origin:var(--fuoco,50% 50%);transform:scale(var(--zoom,1));
  transition:transform .9s var(--ease);
}
.xp-shot:hover img{transform:scale(calc(var(--zoom,1) * 1.028))}
.xp-shot::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 52%,rgba(236,134,102,.16),rgba(11,10,10,.5))}
/* casella senza foto: tiene l'ingombro giusto invece di far collassare la griglia */
.xp-shot.xp-shot--vuoto{
  background:#131011;border:1px dashed rgba(255,255,255,.16);
  display:grid;place-items:center;
}
.xp-shot.xp-shot--vuoto::after{
  content:attr(data-vuoto);position:static;inset:auto;background:none;
  font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;
  color:rgba(236,134,102,.55);
}
.xp-shot.xp-shot--vuoto:hover{border-color:var(--coral-35)}

.xp-shot--tall{grid-column:span 5;grid-row:span 2}
.xp-shot--wide{grid-column:span 7;grid-row:span 1}
.xp-shot--mid{grid-column:span 7;grid-row:span 1}
.xp-shot--quad{grid-column:span 3;grid-row:span 1}
/* altri tagli, per non ritrovarsi una parete di quadrati:
   --alta tre verticali affiancate, --meta due orizzontali larghe, --terzo tre medie */
.xp-shot--alta{grid-column:span 4;grid-row:span 2}
.xp-shot--meta{grid-column:span 6;grid-row:span 1}
.xp-shot--terzo{grid-column:span 4;grid-row:span 1}
/* --- fascia dichiarazione (alone salmone) --- */
.xp-band{position:relative;background:#0b0a0a;padding:clamp(4rem,10vw,8rem) 0;text-align:center;overflow:hidden}
.xp-band::before{content:"";position:absolute;inset:0;background:radial-gradient(58% 120% at 50% 50%,rgba(236,134,102,.18),transparent 70%)}
.xp-band .wrap{position:relative;z-index:1}
.xp-band .xp-h{font-size:clamp(2.4rem,5.5vw,4.8rem)}
.xp-band .xp-p{margin:1.5rem auto 0}
.xp-band .xp-p--coda{color:rgba(255,255,255,.66);font-size:clamp(.98rem,1.25vw,1.1rem)}
/* --- chiusura: l'unica porta --- */
.xp-end{position:relative;background:#0b0a0a;text-align:center;padding:clamp(2.4rem,6vh,4.2rem) 0 clamp(4rem,10vh,7rem);overflow:hidden;overflow-x:clip;overflow-y:visible}
.xp-end::before{
  content:"";position:absolute;inset:-70% 0 0;pointer-events:none;
  background:radial-gradient(64% 96% at 50% 62%,rgba(236,134,102,.24),transparent 68%);
}
/* nella pagina Experience: una nebbia in alto a sinistra e una che scende
   sotto la sezione seguente, senza i gradini che si vedevano prima */
body.xp .dico-file::before{
  inset:-20% 0 -46%;
  /* il primo alone era centrato al 26% dell'altezza con raggio 32%: sopra
     sforava il riquadro ed era ancora acceso, quindi il bordo si vedeva come
     una riga netta orizzontale sul nero. Portato il centro al 36%, l'alone si
     spegne prima del bordo e la sfumatura prosegue omogenea. Stessa regola del
     blocco base: nessun alone deve toccare acceso un bordo del riquadro. */
  background:
    radial-gradient(50% 32% at 4% 36%,rgba(236,134,102,.2),transparent 100%),
    radial-gradient(46% 30% at 54% 62%,rgba(236,134,102,.16),transparent 100%);
}
.xp-end .wrap{position:relative;z-index:1}
.xp-end .xp-h{font-size:clamp(2.6rem,6vw,4.8rem)}
.xp-end .xp-p{margin:1.4rem auto 2.4rem}
.xp-btn{display:inline-flex;align-items:center;gap:.7em;background:var(--coral);color:#0b0a0a;font-weight:700;font-size:.8rem;letter-spacing:.18em;text-transform:uppercase;padding:1.15em 2.5em;border-radius:3px;
  transition:transform .25s var(--ease),box-shadow .25s ease,background-color .25s ease}
.xp-btn:hover,.xp-btn:focus-visible{
  background:transparent;color:var(--coral);
  box-shadow:inset 0 0 0 1px var(--coral);
  transform:none;
}
@media (max-width:760px){
  .xp-scene{min-height:80vh}
  .xp-scene--hero{min-height:calc(92vh - 10px)}
  /* sul telefono il ritaglio verticale mangiava l'aquila: sposto il fuoco a
     sinistra e in alto, dove stanno il volo e la vetta */
  .xp-scene--hero>img{object-position:34% 34%}
  .xp-scene>.wrap{padding-top:5.5rem}
  .xp-gallery .wrap,.xp-shots{grid-template-columns:repeat(2,1fr);grid-auto-rows:clamp(180px,50vw,300px)}
  /* sul telefono la foto alta prende tutta la riga: a mezza larghezza lasciava
     un buco nero accanto */
  .xp-shot--tall{grid-column:span 2;grid-row:span 2}
  .xp-shot--wide,.xp-shot--mid{grid-column:span 2;grid-row:span 1}
  /* i quadrati restano a due per riga: quattro fanno due file piene */
  .xp-shot--quad{grid-column:span 1;grid-row:span 1}
  .xp-shot--meta{grid-column:span 1;grid-row:span 1}
  .xp-shot--alta{grid-column:span 2;grid-row:span 2}
  .xp-shot--terzo{grid-column:span 2;grid-row:span 1}
}

/* --- videotestimonianze: popup grande (lightbox) --- */
.vt-modal{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  padding:clamp(1rem,4vw,3rem);background:rgba(7,7,8,.93);
  opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}
.vt-modal.open{opacity:1;visibility:visible}
.vt-modal-frame{position:relative;width:min(100%,1120px);aspect-ratio:16/9;background:#000;
  border-radius:10px;overflow:hidden;box-shadow:0 30px 90px rgba(0,0,0,.65);
  transform:scale(.95);transition:transform .35s var(--ease)}
.vt-modal.open .vt-modal-frame{transform:none}
.vt-modal-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.vt-modal-close{position:absolute;top:clamp(.7rem,3vw,1.5rem);right:clamp(.7rem,3vw,1.5rem);z-index:2;
  width:46px;height:46px;border-radius:50%;border:0;cursor:pointer;color:#0a0a0b;background:var(--coral);
  display:flex;align-items:center;justify-content:center;transition:transform .2s ease,background-color .2s ease}
.vt-modal-close:hover{transform:scale(1.08);background:var(--coral-hi)}
.vt-modal-close svg{width:18px;height:18px;display:block}

/* ============ 15 · NEWSLETTER "VENDITA ETICA" ============
   Due colonne su desktop (a sinistra il perché, a destra il modulo), una sola
   colonna sul telefono. Sfondo chiaro come le altre sezioni --light, quindi i
   campi sono bianchi con bordo sottile e il salmone resta solo sull'azione. */
.nl-grid{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.32fr);
  gap:clamp(1.8rem,3.4vw,3rem);align-items:start;
}
.nl-testo .h-display{margin-bottom:1.6rem}
.nl-nota{margin-top:1.4rem;font-size:.9375rem;color:var(--ink-55);max-width:38ch}
.nl-form{
  position:relative;
  background:rgba(255,255,255,.92);border:1px solid var(--line);
  padding:clamp(.9rem,1.4vw,1.2rem);
  box-shadow:0 18px 50px rgba(19,19,19,.07);
  /* Largo abbastanza da far stare un'email INTERA dentro il campo.
     ATTENZIONE a width:100%: dentro una griglia il solo margin-left:auto fa
     RESTRINGERE il riquadro al contenuto invece di riempire la colonna, ed era
     per quello che restava stretto anche alzando il max-width. */
  width:100%;max-width:620px;margin-left:auto;
}
/* L'aula sta dietro a tutta la sezione, sfocata forte e appena accennata:
   parte dal basso a sinistra e si spegne nel chiaro verso l'alto a destra. */
/* la fascia era alta il doppio del contenuto: aria tagliata sopra e sotto,
   e il titolo attaccato al testo. Ora e' una fascia, non una sezione. */
/* RESPIRO ALLINEATO AL RESTO DEL SITO (David, 22/08: "la parte bassa non
   rispetta gli spazi del resto del sito"). Aveva un padding suo di 43px sopra e
   sotto, mentre tutte le altre sezioni ne hanno 92 (--sec-y): misurato, non a
   occhio. Adesso usa la misura di serie come le altre.
   La sezione resta comunque corta: la sfoltita del 20/08 non si perde, perche'
   li' erano stati messi i campi del modulo a due a due invece che in colonna,
   ed e' quella la cosa che l'aveva accorciata da 646 a 422px. */
.nl-sec{position:relative;overflow:hidden}
.nl-sec .sec-head{margin-bottom:clamp(1.1rem,2vw,1.6rem)}
.nl-sec .nl-testo .h-display{margin-bottom:1rem}
.nl-sec .nl-nota{margin-top:1rem}
.nl-sfondo{
  position:absolute;inset:0;z-index:0;pointer-events:none;
  background:url("img/aula-sfocata.jpg") center/cover no-repeat;
  filter:blur(12px);transform:scale(1.1);
  opacity:.42;
  -webkit-mask-image:linear-gradient(to top right,#000 0%,rgba(0,0,0,.42) 46%,transparent 78%);
  mask-image:linear-gradient(to top right,#000 0%,rgba(0,0,0,.42) 46%,transparent 78%);
}
/* SFONDO SPENTO (David, 22/08: "la sezione non mi convince, magari togliendo
   lo sfondo direttamente?"). La foto sfocata sotto la sezione chiara la
   sporcava e basta: il riquadro bianco del modulo ci galleggiava sopra e il
   titolo perdeva stacco. Le altre sezioni chiare del sito (Metodo, Risultati)
   sono fondo pieno, quindi cosi' e' anche piu' coerente.
   PER RIMETTERLA basta togliere questa riga: la regola .nl-sfondo qui sopra e'
   rimasta intera, e la foto assets/img/aula-sfocata.jpg e' ancora al suo posto. */
.nl-sfondo{display:none}
.nl-sec > .wrap{position:relative;z-index:1}
.nl-form-t{
  font-weight:700;font-size:.6875rem;letter-spacing:.26em;text-transform:uppercase;
  color:var(--coral);margin-bottom:.7rem;line-height:1.4;
}
.nl-lab{
  display:block;font-size:.5625rem;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-55);margin-bottom:.18rem;
}
.nl-in{
  display:block;width:100%;font:inherit;font-size:.9375rem;color:var(--ink);
  /* colore esplicito e non var(--bg): dentro una sezione chiara quella
     variabile vale ancora il nero della pagina e i campi venivano neri */
  background:rgba(250,248,247,.86);border:1px solid var(--line);
  padding:.42em .75em;margin-bottom:.42rem;
  transition:border-color .35s var(--ease-soft),background-color .35s var(--ease-soft);
}
.nl-in:focus{outline:none;border-color:var(--coral);background:#fff}
/* telefono e professione stanno su una riga sola: due campi in meno di altezza */
.nl-due{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}
@media (max-width:420px){.nl-due{grid-template-columns:1fr;gap:0}}
.nl-check{
  display:flex;align-items:flex-start;gap:.55rem;
  font-size:.78rem;line-height:1.4;color:var(--ink-70);margin:.25rem 0 .8rem;cursor:pointer;
}
.nl-check input{margin-top:.25em;accent-color:var(--coral);flex:none;width:1rem;height:1rem}
.nl-check a{text-decoration:underline;text-underline-offset:.2em}
.nl-check a:hover{color:var(--coral)}
.nl-btn{width:100%}
@media (max-width:820px){
  .nl-grid{grid-template-columns:minmax(0,1fr)}
}

/* ============ PANNELLO VIDEOCORSI (si apre dalla card III) ============
   Si apre sull'altezza vera con grid-template-rows, come le descrizioni delle
   card: niente altezze a occhio, niente scatto in chiusura. Stessa curva e
   stessa durata del resto della sezione. */
.strada--apri{
  -webkit-appearance:none;appearance:none;
  font:inherit;color:inherit;text-align:left;width:100%;cursor:pointer;
  padding:0;
}
.strada--apri:focus-visible{outline:2px solid var(--coral);outline-offset:3px}

.vc-wrap{
  display:grid;grid-template-rows:0fr;
  --larghezza:min(1320px,calc(var(--vw,100vw) - 2 * var(--pad)));
  width:var(--larghezza);margin-left:calc((100% - var(--larghezza))/2);
  transition:grid-template-rows .75s var(--ease-soft);
}
.vc-wrap.aperto{grid-template-rows:1fr}
.vc-in{
  overflow:hidden;opacity:0;
  transition:opacity .75s var(--ease-soft);
}
.vc-wrap.aperto .vc-in{opacity:1}
/* Il video sta dietro a tutto il pannello, con un velo scuro sopra perché il
   testo resti leggibile, e sfuma sui bordi invece di finire con una riga netta.
   L'inquadratura è tenuta in alto: lì c'è il viso, ed è la parte che deve
   restare scoperta sopra le schede. */
.vc-wrap{position:relative}
.vc-bg{
  /* da un bordo all'altro della finestra, non largo quanto il pannello.
     Si usa la larghezza vera della finestra (--vw), come le altre fasce a
     tutta pagina, se no la barra di scorrimento fa sforare. */
  position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:var(--vw,100vw);height:clamp(520px,82vh,1020px);
  z-index:0;pointer-events:none;overflow:hidden;
  opacity:0;transition:opacity 1.1s var(--ease-soft);
}
/* Non basta accendere lo sfondo quando il pannello si apre: il video in quel
   momento sta ancora partendo, e il passaggio dal fotogramma fermo alla prima
   immagine in movimento si vedeva come uno scatto. Adesso lo sfondo resta
   invisibile finché il video non sta già andando, poi entra in dissolvenza. */
.vc-bg{transition:opacity 1.2s var(--ease-soft)}
.vc-wrap.aperto .vc-bg.pronto{opacity:1}
/* A pannello chiuso lo sfondo deve sparire SUBITO. Lo sfondo è posizionato in
   assoluto e alto quasi mille pixel: se se ne va con calma, nel passaggio da
   un pannello all'altro resta sopra al nuovo per un secondo buono, e si vedono
   le due immagini una sull'altra. */
.vc-wrap:not(.aperto) .vc-bg{opacity:0;visibility:hidden;transition:none}
.vc-bg video{
  /* il taglio parte dall'alto: quando la fascia è più bassa del video, quello
     che si perde è la parte in basso (la scrivania) e non la testa */
  width:100%;height:100%;object-fit:cover;object-position:50% 16%;
  /* sopra una sfumatura corta (6%), sotto una lunga che parte a metà e muore
     dietro alle schede. Ai lati un velo corto. */
  -webkit-mask-image:
    linear-gradient(180deg,transparent 0,#000 6%,#000 46%,rgba(0,0,0,.55) 76%,transparent 100%),
    linear-gradient(90deg,transparent 0,#000 4%,#000 96%,transparent 100%);
  -webkit-mask-composite:source-in;
  mask-image:
    linear-gradient(180deg,transparent 0,#000 6%,#000 46%,rgba(0,0,0,.55) 76%,transparent 100%),
    linear-gradient(90deg,transparent 0,#000 4%,#000 96%,transparent 100%);
  mask-composite:intersect;
}
/* il velo è scuro dove c'è del testo (la riga in cima e le schede in basso) e
   si alza proprio in mezzo, all'altezza del viso */
.vc-bg::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,
    rgba(10,10,11,.62) 0%,
    rgba(10,10,11,.3) 10%,
    rgba(10,10,11,.2) 30%,
    rgba(10,10,11,.42) 56%,
    rgba(10,10,11,.82) 78%,
    rgba(10,10,11,.98) 100%);
}
.vc-in{position:relative}
.vc-in > *:not(.vc-bg){position:relative;z-index:1}
/* le schede scendono: sopra di loro resta una finestra aperta sul video */
.vc-grid{margin-top:clamp(11rem,25vw,20rem)}

.vc-grid{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(1rem,1.8vw,1.7rem);
}
/* le tre schede non compaiono di colpo: salgono di un soffio e si accendono in
   dissolvenza, una dietro l'altra. Il ritardo sta solo nello stato aperto, così
   in chiusura se ne vanno tutte insieme senza code. */
.vc-card{
  /* niente bordo qui: lo disegna il ::after, che sta SOPRA la copertina.
     Con il bordo sull'elemento, l'immagine gli finiva sopra e la linea
     spariva lungo il lato della foto. */
  position:relative;display:block;border:0;background:var(--bg-2);
  border-radius:14px;overflow:hidden;
  opacity:0;transform:translateY(16px);
  /* una sola durata per tutto quello che si muove al passaggio del mouse:
     bordo, sollevamento e zoom della copertina partono e finiscono insieme */
  transition:opacity .55s var(--ease-soft),transform .55s var(--ease-soft),
             box-shadow .55s var(--ease-soft);
}
.vc-card::after{
  content:"";position:absolute;inset:0;z-index:3;pointer-events:none;
  border:1px solid var(--line);border-radius:14px;
  transition:border-color .55s var(--ease-soft),box-shadow .55s var(--ease-soft);
}
.vc-wrap.aperto .vc-card{opacity:1;transform:none;transition-delay:.18s}
.vc-wrap.aperto .vc-card:nth-child(2){transition-delay:.3s}
.vc-wrap.aperto .vc-card:nth-child(3){transition-delay:.42s}
/* I ritardi servono solo all'entrata, per farle comparire una dietro l'altra.
   Se restassero, se li porterebbe dietro anche il passaggio del mouse: la
   scheda si sollevava con quattro decimi di ritardo sul bordo e sullo zoom.
   A entrata finita site.js mette "pronte" e i ritardi spariscono. */
.vc-wrap.pronte .vc-card,
.vc-wrap.pronte .vc-card:nth-child(2),
.vc-wrap.pronte .vc-card:nth-child(3){transition-delay:0s}
.vc-chiudi{opacity:0;transition:opacity .8s var(--ease-soft)}
.vc-wrap.aperto .vc-chiudi{opacity:1;transition-delay:.5s}
/* vale per tutte e tre, anche per le due che non sono link: la scheda si
   solleva sulle altre e il bordo si accende */
/* il selettore tiene dentro anche .vc-wrap.aperto, se no quella regola (che ha
   la meglio per quante classi ha) rimetteva transform:none e la scheda non si
   sollevava mai */
.vc-wrap .vc-card:hover{
  transform:translateY(-10px);
  box-shadow:0 30px 60px rgba(0,0,0,.55);
}
.vc-wrap .vc-card:hover::after{
  border-color:var(--coral);box-shadow:inset 0 0 0 1px var(--coral);
}
.vc-cover{
  display:block;aspect-ratio:16/9;overflow:hidden;
  border-bottom:1px solid var(--line);background:#0d0d0e;
}
.vc-cover img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .55s var(--ease-soft),filter .55s var(--ease-soft)}
.vc-wrap .vc-card:hover .vc-cover img{transform:scale(1.04)}

/* corsi che si aprono solo su richiesta: da fermi la scheda resta spenta, in
   grigio, e si accende tutta quando ci passi sopra (copertina a colori,
   etichetta salmone, testo pieno), come le schede disponibili */
.is-req .vc-cover img{filter:grayscale(1) brightness(.82)}
.is-req .vc-kick{color:rgba(247,244,241,.42);transition:color .55s var(--ease-soft)}
.is-req .vc-txt{color:var(--ink-55);transition:color .55s var(--ease-soft)}
/* i tre bottoni sono lo stesso oggetto: stesso rettangolo, stessa misura.
   Cambia solo il colore, acceso per il corso disponibile e spento per gli
   altri due, che si accendono quando ci passi sopra. */
.vc-btn{
  display:inline-grid;margin-top:1.1rem;
  border:1px solid var(--line);color:var(--ink-55);background:transparent;
  font-weight:700;font-size:.625rem;letter-spacing:.22em;text-transform:uppercase;
  padding:.85em 1.4em;
  transition:border-color .55s var(--ease-soft),color .55s var(--ease-soft),
             background-color .55s var(--ease-soft);
}
.vc-btn:hover,.vc-btn:focus-visible{
  border-color:var(--coral);color:var(--coral);background:var(--coral-12);
}
/* versione accesa: il corso è già disponibile */
.vc-btn--on{border-color:var(--coral-35);color:var(--coral)}
.vc-wrap .vc-card:hover .vc-btn--on{border-color:var(--coral);background:var(--coral-12)}
/* le due scritte stanno nella stessa casella, una sopra l'altra: così il
   bottone non cambia larghezza quando il testo diventa "Richiedi" */
.vc-btn-t{grid-area:1/1;transition:opacity .45s var(--ease-soft)}
.vc-btn-t--hover{opacity:0}
.vc-btn:hover .vc-btn-t,.vc-btn:focus-visible .vc-btn-t{opacity:0}
.vc-btn:hover .vc-btn-t--hover,.vc-btn:focus-visible .vc-btn-t--hover{opacity:1}
/* al passaggio del mouse la copertina torna ai suoi colori: il grigio è lo
   stato di riposo, non un marchio fisso. Vale anche quando si arriva col
   tasto di tabulazione, se no chi naviga da tastiera resta al buio. */
.vc-wrap .is-req:hover .vc-cover img,
.vc-wrap .is-req:focus-within .vc-cover img{filter:none}
.vc-wrap .is-req:hover .vc-kick,
.vc-wrap .is-req:focus-within .vc-kick{color:var(--coral)}
.vc-wrap .is-req:hover .vc-txt,
.vc-wrap .is-req:focus-within .vc-txt{color:var(--ink-70)}
/* il bottone si accende passando ovunque sulla scheda, non solo su di lui */
.vc-wrap .is-req:hover .vc-btn,
.vc-wrap .is-req:focus-within .vc-btn{
  border-color:var(--coral);color:var(--coral);background:var(--coral-12);
}
.vc-wrap .is-req:hover .vc-btn-t,
.vc-wrap .is-req:focus-within .vc-btn-t{opacity:0}
.vc-wrap .is-req:hover .vc-btn-t--hover,
.vc-wrap .is-req:focus-within .vc-btn-t--hover{opacity:1}
.vc-info{display:block;padding:clamp(1rem,1.6vw,1.4rem)}
.vc-kick{
  display:block;font-weight:700;font-size:.75rem;letter-spacing:.28em;
  text-transform:uppercase;color:var(--coral);margin-bottom:.5rem;
}
/* il NOME del videocorso/ebook sotto l'occhiello (David, 22/08: prima si
   leggeva solo "Ebook" o "Guida" e il nome stava soltanto dentro la copertina,
   che da telefono e' piccola). Stesso carattere e stesso stampatello
   dell'occhiello, ma bianco e un gradino piu' grande, cosi' fa da titolo. */
.vc-nome{
  /* 22/08: David li voleva "leggermente piu' piccoli", da .9375rem (15px) a
     .8125rem (13px). La spaziatura fra le lettere resta .14em: stringendo anche
     quella la parola si sarebbe rimpicciolita due volte. */
  display:block;font-weight:700;font-size:.8125rem;letter-spacing:.14em;
  line-height:1.35;text-transform:uppercase;color:var(--ink);
  margin-bottom:.75rem;
}
.vc-txt{display:block;font-size:.9375rem;line-height:1.6;color:var(--ink-70)}
.vc-more{
  display:block;margin-top:1rem;
  font-weight:700;font-size:.6875rem;letter-spacing:.22em;text-transform:uppercase;color:var(--coral);
}
.vc-more .arr{display:inline-block;transition:transform .75s var(--ease-soft)}
.vc-wrap .vc-card:hover .vc-more .arr{transform:translateX(5px)}
/* La chiusura non deve somigliare ai bottoni delle risorse, se no sembra
   un'altra offerta. Qui niente cornice: un tratto salmone e la parola sotto,
   che si allunga quando ci passi sopra. On-brand, mai la crocetta di serie. */
.vc-chiudi{
  display:inline-flex;flex-direction:column;align-items:flex-start;gap:.55rem;
  margin-top:clamp(1.6rem,2.8vw,2.4rem);
  background:none;border:0;padding:0;cursor:pointer;
  color:var(--ink-55);
  font-weight:700;font-size:.6875rem;letter-spacing:.24em;text-transform:uppercase;
  transition:color .55s var(--ease-soft);
}
.vc-chiudi::before{
  content:"";display:block;width:2.2rem;height:1px;background:var(--coral);
  transition:width .55s var(--ease-soft);
}
/* testo e freccia sulla stessa riga, sotto al tratto */
.vc-chiudi-t{display:inline-flex;align-items:center;gap:.5em;white-space:nowrap}
.vc-chiudi:hover,.vc-chiudi:focus-visible{color:var(--coral)}
.vc-chiudi:hover::before,.vc-chiudi:focus-visible::before{width:3.6rem}
.vc-chiudi .arr{transition:transform .55s var(--ease-soft);display:inline-block}
.vc-chiudi:hover .arr{transform:translateY(-3px)}
@media (max-width:1000px){.vc-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){
  .vc-grid{grid-template-columns:minmax(0,1fr);margin-top:clamp(8rem,44vw,14rem)}
  .vc-bg{height:clamp(420px,66vh,620px)}
}
@media (prefers-reduced-motion:reduce){
  .vc-wrap,.vc-in,.vc-card,.vc-chiudi{transition:none}
  .vc-card{transform:none}
}

/* ============ PANNELLO EBOOK & GUIDE (si apre dalla card IV) ============
   Stessa impalcatura del pannello videocorsi: cambia lo sfondo, che qui è una
   foto ferma, e la copertina, che non è un'immagine al vivo ma un mockup con
   il fondo trasparente, quindi va contenuto e non ritagliato. */
.eb-bg img{
  width:100%;height:100%;object-fit:cover;object-position:50% 44%;
  -webkit-mask-image:
    linear-gradient(180deg,transparent 0,#000 6%,#000 46%,rgba(0,0,0,.55) 76%,transparent 100%),
    linear-gradient(90deg,transparent 0,#000 4%,#000 96%,transparent 100%);
  -webkit-mask-composite:source-in;
  mask-image:
    linear-gradient(180deg,transparent 0,#000 6%,#000 46%,rgba(0,0,0,.55) 76%,transparent 100%),
    linear-gradient(90deg,transparent 0,#000 4%,#000 96%,transparent 100%);
  mask-composite:intersect;
}
/* i tre mockup hanno proporzioni diverse fra loro: si dà a tutti lo stesso
   riquadro e dentro ognuno si appoggia intero, senza tagli. La scala per
   occhio pareggia le grandezze, perché nei file il libro non occupa la stessa
   porzione di immagine. */
/* niente riquadro qui: le tre risorse stanno direttamente sul fondo scuro.
   Resta solo la linea che separa il mockup dall'etichetta sotto. */
/* la foto qui è ferma e non ha bisogno di tutto lo spazio del video: fascia
   più corta e risorse più in alto, così non resta quel vuoto in mezzo */
.eb-wrap .vc-bg{height:clamp(360px,56vh,660px)}
.eb-wrap .vc-grid{margin-top:clamp(3.5rem,7.5vw,6rem)}   /* metà di prima: i mockup salgono */
.eb-card{background:transparent;border-radius:0;overflow:visible !important}
/* Il contenitore torna a ritagliare su tutti i lati: senza il ritaglio, il
   pannello non si richiude più (resta alto anche da chiuso) ed è da lì che
   nasceva lo spazio nero sotto le card. La luce quindi non deve arrivare ai
   bordi: si tiene dentro la sua colonna, e infatti è più stretta. */
.eb-wrap .vc-grid{overflow:visible}
@supports (overflow:clip){
  #percorsi{overflow-x:clip;overflow-y:visible}
}
.eb-card::after{content:none}          /* la cornice non serve più */
.eb-card .vc-info{padding-inline:0}
.eb-cover{
  /* riquadro identico per tutte e tre: il mockup ci si appoggia dentro e non
     lo può allargare, se no la linea di separazione finisce a tre altezze
     diverse (il secondo file è più alto degli altri) */
  position:relative;display:grid;place-items:center;
  aspect-ratio:4/3;min-height:0;overflow:hidden;
  padding:clamp(.8rem,1.6vw,1.4rem) 0 clamp(2.2rem,3.6vw,3.2rem);
  border-bottom:1px solid var(--line);
}
/* Il bagliore sta sulla risorsa, non dentro il riquadro della copertina:
   quello ritaglia, ed è lì che la luce si tagliava di netto sui bordi. Qui
   invece non c'è niente che la contenga e si spande oltre, anche fuori dalla
   colonna, come una lampada accesa dietro al libro.
   Due strati: un cuore acceso e stretto, e un alone largo e diffuso. */
.eb-card::before{
  content:"";position:absolute;z-index:0;pointer-events:none;
  /* La misura tiene conto anche della sfocatura: un alone largo il 92% con 38px
     di sfumatura finisce comunque venti pixel oltre il bordo della colonna, e
     sulla prima e sull'ultima quel bordo è anche il bordo del pannello, che
     taglia. Con 78% e 30px di sfocatura la luce resta tutta dentro. */
  left:50%;top:0%;transform:translateX(-50%);
  width:78%;height:50%;border-radius:50%;
  /* Più acceso senza allargarsi di un pixel: il cuore resta pieno molto più a
     lungo prima di spegnersi (prima si smorzava già al 34%), e sotto c'è un
     secondo alone che regge la base. Diametro e sfocatura restano identici,
     quindi non torna nessun taglio ai bordi. */
  background:
    radial-gradient(44% 48% at 50% 58%,rgba(255,226,208,1) 0%,rgba(255,190,160,1) 30%,rgba(246,150,116,.9) 52%,rgba(236,134,102,0) 78%),
    radial-gradient(76% 76% at 50% 58%,rgba(240,146,112,.9) 0%,rgba(236,134,102,.35) 46%,rgba(236,134,102,0) 76%);
  filter:blur(26px);opacity:0;
  transition:opacity .55s var(--ease-soft);
}
.vc-wrap .eb-card:hover::before{opacity:1}
.eb-cover{position:relative;z-index:2;background:transparent}
.eb-cover img{position:relative;z-index:3}
.eb-card .vc-info{position:relative;z-index:2}
/* qui non si alza la scheda intera: sale solo il mockup, e dalla linea in giù
   resta tutto fermo. Il bottone si accende, ma non si sposta. */
.vc-wrap .eb-card:hover{transform:none;box-shadow:none}
.vc-wrap .eb-card:hover::after{border-color:transparent;box-shadow:none}

/* testi pareggiati: etichetta, titolo e descrizione partono alla stessa
   altezza in tutte e tre, anche quando il titolo sta su una riga sola */
.eb-card .vc-txt{min-height:4.9em}
.eb-cover img{
  width:auto;height:auto;max-width:100%;max-height:100%;display:block;
  filter:drop-shadow(0 18px 34px rgba(0,0,0,.55));
  transition:transform .55s var(--ease-soft);
}
/* le scale pareggiano le grandezze fra i tre file, che sono diversi fra loro.
   Al passaggio del mouse NON si ingrandiscono: fanno solo un passo verso
   l'alto, mantenendo la loro misura. */
.eb-card:nth-child(1) .eb-cover img{transform:scale(.86)}
/* il file di "Negoziare" ha proporzioni diverse dagli altri due e, centrato
   nel riquadro, cadeva più in basso: qui recupera quei pochi pixel */
.eb-card:nth-child(2) .eb-cover img{transform:translateY(-16px) scale(.8)}
.eb-card:nth-child(3) .eb-cover img{transform:scale(.81)}
.vc-wrap .eb-card:hover:nth-child(1) .eb-cover img{transform:translateY(-14px) scale(.86)}
.vc-wrap .eb-card:hover:nth-child(2) .eb-cover img{transform:translateY(-30px) scale(.8)}
.vc-wrap .eb-card:hover:nth-child(3) .eb-cover img{transform:translateY(-14px) scale(.81)}

/* schede alte uguali e bottoni allineati sulla stessa riga, anche se i testi
   hanno lunghezze diverse */
.vc-card{display:flex;flex-direction:column}
.vc-info{flex:1;display:flex;flex-direction:column}
.vc-info .vc-btn{margin-top:auto;align-self:flex-start}
/* i bottoni erano appiccicati al testo: qui si garantisce l'aria anche quando
   il testo è lungo e non avanza spazio da distribuire */
.vc-txt{margin-bottom:clamp(1.5rem,2.6vw,2.2rem)}
.vc-cover,.eb-cover{flex:none}

/* dissolvenza al nero nel passaggio fra un pannello e l'altro: sparisce solo
   il pannello (sfondo e schede), le quattro card restano dove sono */
.vc-wrap{transition:grid-template-rows .75s var(--ease-soft),opacity .33s var(--ease-soft)}
.vc-wrap.in-nero{opacity:0}
.vc-wrap.no-anim.in-nero{transition:none}
@media (prefers-reduced-motion:reduce){
  .vc-wrap.in-nero{opacity:0;transition:none}
}
/* Usata nel passaggio fra pannelli: blocca SOLO l'altezza del pannello, che
   deve cambiare di colpo perché la pagina sia subito alla misura definitiva.
   Il contenuto dentro conserva le sue dissolvenze, quindi il pannello nuovo
   entra morbido invece di apparire di scatto. */
.vc-wrap.no-anim{transition:none !important}

/* ============ BOTTONI RECENSIONI (Google e Trustpilot) ============
   Due riquadri col bordo salmone: portano alle recensioni vere, per chi vuole
   controllare. Su schermi stretti si impilano. */
.rec-link{
  display:flex;flex-wrap:wrap;gap:clamp(.8rem,1.6vw,1.2rem);
  margin:clamp(1.8rem,3.4vw,2.6rem) 0 clamp(2.5rem,5vw,3.5rem);
}
.rec-box{
  display:flex;align-items:center;gap:.95rem;
  border:1px solid var(--coral-35);border-radius:14px;
  padding:.95rem 1.5rem;min-width:min(100%,270px);
  transition:border-color .5s var(--ease-soft),background-color .5s var(--ease-soft),
             transform .5s var(--ease-soft);
}
.rec-box:hover{
  border-color:var(--coral);background:var(--coral-12);transform:translateY(-3px);
}
.rec-logo{width:34px;height:34px;flex:none}
.rec-testo{display:block;line-height:1.25}
.rec-voto{
  display:block;font-weight:700;font-size:1.0625rem;color:var(--ink);letter-spacing:.01em;
}
.rec-stelle{color:var(--coral);font-size:.95em;letter-spacing:.06em;margin-left:.2em}
.rec-nota{display:block;font-size:.8125rem;color:var(--ink-55);margin-top:.15rem}
@media (max-width:520px){
  .rec-box{width:100%;justify-content:flex-start}
}

/* sfondo della sezione evento con un video al posto della foto: stessa
   opacità, stesso taglio, e lo stesso respiro allo scroll che aveva la foto */
.evt-bg--video{overflow:hidden}
.evt-bg--video .vm-fit{z-index:1}
/* Il video riempie tutto il blocco come farebbe una foto in "cover": prende
   il lato che serve e lascia uscire l'altro, tanto il contenitore ritaglia.
   Prima era alto quanto un 16:9 e centrato, quindi sopra e sotto restavano
   due fasce scoperte: arrivando dal menu si vedeva il chiaro della sezione
   dopo, tagliato come una striscia. */
.evt-bg--video .vm-fit{
  /* centrato con inset+margin auto e NON con transform: il respiro allo
     scroll usa proprio transform, e sovrascrivendolo mandava il video
     fuori squadro */
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:max(100%, calc(100svh * 16 / 9));
  height:max(100%, calc(var(--vw,100vw) * 9 / 16));
  opacity:.4;
}
/* il blocco riempie la finestra: arrivando dal menu non resta piu' una
   striscia di sezione seguente in fondo allo schermo */
.evt{min-height:calc(100svh - 76px);display:flex;align-items:center}
.evt > .wrap{width:100%}
@media (max-width:760px){
  .evt{min-height:calc(100svh - 60px)}
}
.evt-bg--video iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}

/* titolo del pannello, in alto a sinistra sopra allo sfondo */
.vc-tit{
  position:absolute;top:clamp(1.4rem,2.6vw,2.4rem);left:0;z-index:2;
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  font-size:clamp(1.5rem,2.6vw,2.4rem);line-height:1.04;letter-spacing:.02em;
  color:#fff;margin:0;
}

/* ============ 08 · CASI STUDIO (le grafiche pubblicate) ============
   Una fila che cammina piano da destra a sinistra, da un bordo all'altro
   dello schermo. Regola non negoziabile: lo scorrimento vive DENTRO la fila,
   la pagina non si muove di un pixel. Le card non si aprono e non si girano:
   quelle grafiche sono gia' complete di cifra, frase, nome e profilo. */
.casi-wrap{
  position:relative;
  /* da bordo a bordo: si usa la larghezza vera della finestra, se no la barra
     di scorrimento fa sforare la pagina */
  width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
  padding-block:clamp(1.4rem,3vw,2.6rem);
  margin-top:clamp(1.2rem,2.6vw,2rem);
}
/* La foto dietro: l'aula piena, sfocata forte e virata al salmone del brand.
   Serve a staccare le grafiche chiare che ci stanno sopra, non a farsi
   guardare: si spegne su tutti e quattro i lati e non ha bordi da nessuna
   parte. Il colore lo da' un velo salmone in "multiply" sopra la foto tenuta
   in scala di grigi: cosi' la tinta e' uniforme e non dipende dai colori
   originali dello scatto. */
.casi-sfondo{
  position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0;
  isolation:isolate;              /* il miscuglio resta qui dentro */
}
/* La foto riempie tutta la fascia, da bordo a bordo, senza sfumature ai lati:
   e' l'aula piena, appena sfocata quel tanto che basta a non rubare la scena
   alle grafiche. Sopra ci passa un velo salmone che tiene il colore del brand
   e fa da stacco per le card chiare. */
.casi-sfondo img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:50% 58%;
  /* la sfocatura e' gia' nel file (e' una miniatura ingrandita): nessun
     filtro da calcolare a ogni fotogramma mentre la fila cammina */
  filter:saturate(.9);
}
/* Niente miscelazione qui sotto: con una fila che scorre di continuo sopra un
   livello in "multiply" il browser sbaglia i ridisegni e le card lasciano
   fantasmi sfalsati. Lo stesso colore si ottiene con un velo normale. */
.casi-sfondo::after{
  content:"";position:absolute;inset:0;
  background:rgba(198,96,64,.6);
}
.casi-sfondo::before{
  content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(10,10,11,.28),rgba(10,10,11,.08) 40%,rgba(10,10,11,.3));
}
.casi-fila{
  position:relative;z-index:1;isolation:isolate;
  /* finestra ferma: dentro scorre il nastro. Niente contenitore che scorre,
     cosi' il trackpad a due dita muove la pagina e non resta impigliato qui,
     e il browser non deve ridisegnare la fascia a ogni fotogramma. */
  overflow:hidden;
  padding:2rem clamp(1rem,4vw,3rem) 2.6rem;
  margin-block:-2rem -2.6rem;
  cursor:grab;touch-action:pan-y;
}
.casi-fila.in-mano{cursor:grabbing}
.casi-nastro{
  display:flex;gap:clamp(.8rem,1.6vw,1.4rem);
  will-change:transform;
}
.caso{
  flex:0 0 clamp(230px,68vw,320px);
  margin:0;border-radius:6px;overflow:hidden;background:#fff;
  /* ogni card sul proprio piano, con il disegno confinato dentro: cosi' lo
     scorrimento non lascia scie ne' fantasmi */
  transform:translateZ(0);backface-visibility:hidden;
  contain:paint;will-change:transform;
  box-shadow:0 12px 30px rgba(20,16,14,.14);
  transition:transform .55s var(--ease-soft),box-shadow .55s var(--ease-soft);
}
.caso img{width:100%;height:auto;display:block;border-radius:6px;
  -webkit-user-drag:none;user-select:none;pointer-events:none}
/* col mouse la fila si trascina come una foto sul tavolo */
/* La vetrina si trascina col dito, ma il su e giu' resta al browser: con
   pan-x il dito appoggiato sulla vetrina bloccava lo scorrimento della pagina
   e il trascinamento si interrompeva a meta' (David, 24/08: "ho problemi di
   scorrimento da sinistra a destra e viceversa"). */
.casi-fila{cursor:grab;touch-action:pan-y}
.casi-fila.in-mano{cursor:grabbing}
.casi-fila.in-mano .caso{transition:none}
.caso:hover{transform:translateY(-6px);box-shadow:0 20px 44px rgba(20,16,14,.22)}
.casi-cta{margin-top:clamp(1.8rem,3.4vw,2.8rem)}
/* Questo bottone ha la scritta piu' lunga del sito: sui telefoni stretti su
   una riga sola sfonderebbe il bordo destro. Qui, e solo qui, puo' andare a
   capo e si stringe la spaziatura. */
.casi-cta .btn{white-space:normal;text-align:center;max-width:100%}
@media (max-width:430px){
  .casi-cta .btn{letter-spacing:.14em;padding-inline:1.4em;line-height:1.5}
}
@media (prefers-reduced-motion:reduce){
  .caso{transition:none}
  .caso:hover{transform:none}
}

/* ============ PAGINA CASI STUDIO (fondo nero) ============
   Le stesse grafiche della home, qui tutte insieme e ferme. Sotto a ognuna
   il posto per il video e il profilo del professionista. */
/* Qui la colonna di lettura non basta: quattro grafiche affiancate hanno
   bisogno di piu' respiro, quindi questa pagina esce dalla misura del resto
   del sito e arriva quasi ai bordi dello schermo. */
#tutti > .wrap{max-width:min(1760px, calc(var(--vw,100vw) - 2 * var(--pad)))}
/* La prima riga deve entrare nello schermo appena si apre la pagina: qui
   l'apertura si tiene bassa e la sezione parte subito sotto. */
/* CONTATTI: meno vuoto fra il testo dell'apertura e "01 Scegli la strada"
   (David, 22/08: "c'e' troppo spazio"). Misurato prima di toccare: 154px,
   contro i 55 della pagina casi studio, che ha gia' i suoi ritocchi. Non era
   una regola sbagliata, era quella di serie (57 di coda all'hero piu' 97 di
   testa alla sezione) su una pagina che sopra ha tre righe soltanto.
   Le due righe si cambiano INSIEME, se no il conto non torna piu'. */
.pg-contatti .pg-hero{padding-bottom:clamp(1.4rem,2.8vh,2.2rem)}
.pg-contatti #strade{padding-top:clamp(1.4rem,2.8vw,2.2rem)}

.pg-casi .pg-hero{padding-top:clamp(6rem,10vh,7.5rem);padding-bottom:clamp(1.2rem,2.4vh,2rem)}
.pg-casi #tutti{padding-top:clamp(1.2rem,2.4vw,2rem)}
.pg-casi .pg-title{margin-bottom:.9rem}
.cs-griglia{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  column-gap:clamp(1.4rem,2.4vw,2.2rem);row-gap:0;
}
/* Le schede della stessa riga vanno allineate riga per riga: grafica, nome,
   mestiere, profilo e bottone partono tutti alla stessa altezza anche quando
   un mestiere occupa due righe di testo. Lo fa la sotto-griglia; dove non
   c'e', piu' sotto, il mestiere si prende comunque lo spazio di due righe. */
/* Le schede non compaiono e basta: arrivano da sinistra e si posano, una
   dietro l'altra lungo la riga. Il ritardo lo calcola site.js in base alla
   colonna, cosi' l'ingresso si legge come un movimento solo. */
/* html.js davanti: se no vince la regola generale delle entrate, che porta
   gli elementi dal basso, e queste devono arrivare di lato */
html.js .cs-caso.rev{
  opacity:0;transform:translateX(-38px);
  transition:opacity .75s var(--ease-soft),transform .75s var(--ease-soft);
  transition-delay:var(--d,0s);
}
html.js .cs-caso.rev.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  .cs-caso.rev{transition:none;transform:none;opacity:1}
}
.cs-caso{
  display:grid;grid-row:span 5;grid-template-rows:subgrid;
  align-content:start;row-gap:0;
  /* lo stacco fra una riga di schede e l'altra sta qui dentro: se lo mettessi
     come spazio della griglia, si infilerebbe anche fra nome, mestiere,
     profilo e bottone di ogni scheda */
  padding-bottom:clamp(2rem,3.4vw,3rem);
}
/* i quattro pezzi sotto la grafica devono stare sulle stesse quattro righe di
   tutte le schede della riga: senza questo, un mestiere lungo due righe
   sposta in basso profilo e bottone solo della sua scheda */
.cs-info{display:grid;grid-row:span 4;grid-template-rows:subgrid;row-gap:0;align-content:start}
.cs-card{
  margin:0;border-radius:6px;overflow:hidden;background:#fff;
  box-shadow:0 14px 34px rgba(0,0,0,.5);
  transition:transform .5s var(--ease-soft),box-shadow .5s var(--ease-soft);
}
.cs-card img{width:100%;height:auto;display:block;border-radius:6px}
.cs-caso[data-video]{cursor:pointer}
.cs-nome{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(1.3rem,1.5vw,1.6rem);line-height:1.05;
  margin:clamp(.9rem,1.6vw,1.2rem) 0 0;align-self:start;
}
.cs-ruolo{margin:.3rem 0 0;font-size:.875rem;color:var(--ink-55);align-self:start}
.cs-ig{
  justify-self:start;align-self:start;
  display:inline-flex;align-items:center;gap:.45em;margin-top:.35rem;
  font-size:.8125rem;letter-spacing:.02em;color:var(--ink-70);
  transition:color .5s var(--ease-soft);
}
.cs-ig::before{
  content:"";width:1em;height:1em;flex:none;background:currentColor;
  -webkit-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2'%3E%3Crect x='2.5' y='2.5' width='19' height='19' rx='5.5'/%3E%3Ccircle cx='12' cy='12' r='4.6'/%3E%3Ccircle cx='17.6' cy='6.4' r='1.3' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2'%3E%3Crect x='2.5' y='2.5' width='19' height='19' rx='5.5'/%3E%3Ccircle cx='12' cy='12' r='4.6'/%3E%3Ccircle cx='17.6' cy='6.4' r='1.3' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
}
.cs-ig:hover,.cs-ig:focus-visible{color:var(--coral)}
.cs-vedi{
  justify-self:start;align-self:end;
  display:inline-block;margin-top:1rem;cursor:pointer;
  border:1px solid var(--coral-35);background:transparent;color:var(--coral);
  padding:.9em 1.5em;white-space:nowrap;
  font-weight:700;font-size:.6875rem;letter-spacing:.18em;text-transform:uppercase;
  transition:border-color .55s var(--ease-soft),background-color .55s var(--ease-soft);
}
.cs-vedi:hover,.cs-vedi:focus-visible{border-color:var(--coral);background:var(--coral-12)}
/* col mouse nessun contorno: resta solo il bordo del bottone */
.cs-vedi:focus{outline:none}
.cs-vedi:focus:not(:focus-visible){box-shadow:none}
.cs-vedi:focus-visible{outline:1px solid var(--coral);outline-offset:3px}
/* 4) niente cornice attorno alla chiusura: ne' quella del browser ne' altre */
.vp-chiudi{outline:none}
/* chi arriva da tastiera lo vede acceso, senza righe attorno */
.vp-chiudi:focus-visible{color:var(--coral)}

/* Al passaggio del mouse la scheda sale di un soffio e si accende di un
   bagliore salmone tutto attorno; il bottone si accende con lei, cosi' e'
   chiaro che il clic porta al video. */
.cs-caso:hover .cs-card{
  transform:translateY(-8px);
  box-shadow:0 0 0 1px var(--coral-35), 0 18px 46px rgba(236,134,102,.42), 0 0 64px rgba(236,134,102,.3);
}
.cs-caso:hover .cs-vedi{border-color:var(--coral);background:var(--coral-12)}
@supports not (grid-template-rows: subgrid){
  .cs-caso{display:flex;flex-direction:column}
  .cs-ruolo{min-height:2.6em}          /* due righe di mestiere, sempre */
  .cs-vedi{margin-top:auto}
}
@media (prefers-reduced-motion:reduce){
  .cs-card,.cs-vedi{transition:none}
  .cs-caso:hover .cs-card{transform:none}
}

/* ---- la finestra con il video della testimonianza ---- */
.vp[hidden]{display:none}
.vp{position:fixed;inset:0;z-index:120;display:grid;place-items:center;padding:clamp(1rem,4vw,2.4rem)}
.vp-velo{position:absolute;inset:0;background:rgba(8,8,9,.88);opacity:0;transition:opacity .45s var(--ease-soft)}
.vp.aperta .vp-velo{opacity:1}
.vp-in{
  position:relative;width:min(940px,100%);
  opacity:0;transform:translateY(14px);
  transition:opacity .5s var(--ease-soft),transform .5s var(--ease-soft);
}
.vp.aperta .vp-in{opacity:1;transform:none}
/* chi parla, in alto a sinistra, allineato al bordo del video */
.vp-testa{display:flex;align-items:center;gap:.9rem;margin-bottom:1rem}
.vp-foto{
  width:3.1rem;height:3.1rem;flex:none;border-radius:50%;overflow:hidden;
  background:var(--bg-2);border:1px solid var(--line);
  display:grid;place-items:center;
}
.vp-foto img{width:100%;height:100%;object-fit:cover;display:block}
.vp-foto img[src=""],.vp-foto img:not([src]){display:none}
.vp-foto::before{
  content:attr(data-iniziali);
  font-weight:700;font-size:.8125rem;letter-spacing:.06em;color:var(--coral);
}
.vp-foto:has(img[src]:not([src=""]))::before{content:none}
.vp-chi{display:flex;flex-direction:column;gap:.15rem;min-width:0}
.vp-chi strong{font-size:.9375rem;font-weight:700;letter-spacing:.02em;color:#f7f4f1}
.vp-chi span{font-size:.8125rem;color:rgba(247,244,241,.6)}
.vp-cornice{
  position:relative;aspect-ratio:16/9;background:#000;
  border:1px solid var(--line);border-radius:8px;overflow:hidden;
}
.vp-cornice iframe{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:8px}
/* chiusura come nel resto del sito: un tratto salmone e la parola sotto */
.vp-chiudi{
  display:inline-flex;align-items:center;gap:.55rem;
  margin-top:1.4rem;background:none;border:0;padding:0;cursor:pointer;
  color:rgba(247,244,241,.62);
  font-weight:700;font-size:.6875rem;letter-spacing:.24em;text-transform:uppercase;
  transition:color .55s var(--ease-soft);
}
.vp-chiudi:hover,.vp-chiudi:focus-visible{color:var(--coral)}
.vp-chiudi-t{display:inline-flex;align-items:center;gap:.5em;white-space:nowrap}
.vp-chiudi .arr{display:inline-block;transition:transform .55s var(--ease-soft)}
.vp-chiudi:hover .arr{transform:translateY(-3px)}
@media (prefers-reduced-motion:reduce){
  .vp-velo,.vp-in,.vp-chiudi{transition:none}
  .vp-in{transform:none}
}
@media (max-width:1200px){.cs-griglia{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:900px){.cs-griglia{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.cs-griglia{grid-template-columns:minmax(0,1fr)}}

/* ============ PRE FOOTER · le due strade ============
   Due mezze schermate affiancate, senza cornici: la foto sta dentro, il testo
   appoggia in basso. Fra le due resta una riga sottile, come una piega. */
.due{
  display:grid;grid-template-columns:1fr 1fr;
  width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
  border-top:1px solid var(--line);
}
.due-lato{
  position:relative;isolation:isolate;overflow:hidden;
  display:flex;align-items:flex-end;
  min-height:clamp(380px,46vw,560px);
  padding:clamp(1.8rem,3.4vw,3rem);
}
.due-lato + .due-lato{border-left:1px solid var(--line)}
.due-ph{position:absolute;inset:0;z-index:-2;overflow:hidden;display:block}
.due-ph img{
  width:100%;height:100%;object-fit:cover;object-position:50% 34%;
  transform:scale(1.02);
  transition:transform 1.1s var(--ease-soft),filter 1.1s var(--ease-soft);
  filter:grayscale(.35) brightness(.62);
}
/* il velo tiene leggibile il testo e scende piu' scuro verso il basso */
.due-lato::after{
  content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(180deg,rgba(8,8,9,.28) 0%,rgba(8,8,9,.62) 52%,rgba(8,8,9,.92) 100%);
  transition:background 1.1s var(--ease-soft);
}
.due-testo{display:flex;flex-direction:column;max-width:30ch}
.due-kick{
  font-weight:700;font-size:.6875rem;letter-spacing:.3em;text-transform:uppercase;
  color:var(--coral);margin-bottom:.9rem;
}
.due-tit{
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  font-size:clamp(1.6rem,2.8vw,2.4rem);line-height:1.04;letter-spacing:.01em;
  color:#f7f4f1;
}
.due-nota{margin-top:.9rem;font-size:.9375rem;line-height:1.6;color:rgba(247,244,241,.72)}
.due-btn{
  margin-top:1.6rem;display:inline-flex;align-items:center;gap:.7em;
  font-weight:700;font-size:.6875rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--coral);
}
.due-btn .arr{display:inline-block;transition:transform .55s var(--ease-soft)}
.due-lato:hover .due-btn .arr,.due-lato:focus-visible .due-btn .arr{transform:translateX(6px)}
.due-lato:hover .due-ph img,.due-lato:focus-visible .due-ph img{
  transform:scale(1.06);filter:grayscale(0) brightness(.74);
}
.due-lato:hover::after,.due-lato:focus-visible::after{
  background:linear-gradient(180deg,rgba(8,8,9,.2) 0%,rgba(8,8,9,.54) 52%,rgba(8,8,9,.9) 100%);
}
.due-lato:focus-visible{outline:1px solid var(--coral);outline-offset:-3px}
/* la seconda foto ha il soggetto in basso: l'inquadratura scende, se no si
   vede mezzo soffitto e la faccia finisce dietro al testo */
.due-lato:nth-child(2) .due-ph img{object-position:50% 62%}
@media (max-width:820px){
  .due{grid-template-columns:1fr}
  .due-lato{min-height:clamp(320px,72vw,420px)}
  .due-lato + .due-lato{border-left:0;border-top:1px solid var(--line)}
}
@media (prefers-reduced-motion:reduce){
  .due-ph img,.due-lato::after,.due-btn .arr{transition:none}
}

/* --- experience: la foto a tutto schermo, con avanti e indietro --- */
.lb[hidden]{display:none}
.lb{position:fixed;inset:0;z-index:120;display:grid;place-items:center;padding:clamp(1rem,4vw,3rem)}
.lb-velo{position:absolute;inset:0;background:rgba(8,8,9,.93);opacity:0;transition:opacity .45s var(--ease-soft)}
.lb.aperta .lb-velo{opacity:1}
.lb-in{
  position:relative;z-index:1;max-width:min(1400px,92vw);max-height:86vh;
  opacity:0;transform:translateY(14px) scale(.985);
  transition:opacity .5s var(--ease-soft),transform .5s var(--ease-soft);
}
.lb.aperta .lb-in{opacity:1;transform:none}
.lb-in img{display:block;max-width:100%;max-height:86vh;width:auto;height:auto;border-radius:6px}
.lb-conta{
  position:absolute;left:0;bottom:-2.1rem;font-size:.74rem;letter-spacing:.22em;
  text-transform:uppercase;color:rgba(255,255,255,.55);
}
.lb-freccia,.lb-chiudi{
  position:absolute;z-index:2;display:grid;place-items:center;
  border:1px solid rgba(255,255,255,.22);background:rgba(8,8,9,.55);
  color:#fff;cursor:pointer;border-radius:50%;
  transition:border-color .35s var(--ease-soft),background .35s var(--ease-soft),color .35s var(--ease-soft);
}
.lb-freccia{width:3rem;height:3rem;top:50%;transform:translateY(-50%)}
.lb-freccia svg{width:1.1rem;height:1.1rem;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.lb-prec{left:clamp(.4rem,2vw,1.4rem)}
.lb-succ{right:clamp(.4rem,2vw,1.4rem)}
.lb-chiudi{width:2.6rem;height:2.6rem;top:clamp(.6rem,2vw,1.4rem);right:clamp(.6rem,2vw,1.4rem);font-size:1.1rem;line-height:1}
.lb-freccia:hover,.lb-chiudi:hover,.lb-freccia:focus-visible,.lb-chiudi:focus-visible{
  border-color:var(--coral);color:var(--coral);background:rgba(8,8,9,.8)
}
@media (max-width:760px){
  .lb-freccia{width:2.6rem;height:2.6rem}
  .lb-conta{bottom:-1.8rem;font-size:.68rem}
}
@media (prefers-reduced-motion:reduce){
  .lb-velo,.lb-in{transition:none}
  .lb-in{transform:none}
}

.con-vai{margin-top:clamp(2rem,4vw,3rem);text-align:center}

/* ============ BLOG: l'elenco degli articoli ============
   Titolo grande, due righe di descrizione sotto, una linea a chiudere.
   Da telefono resta una colonna sola, con il titolo piu' piccolo. */
/* --- testata del blog: fascia bassa a tutta larghezza, foto sotto il titolo ---
   Bassa apposta: e' una testata, non una hero da mezza schermata. La foto sta
   sotto due veli, uno da sinistra (perche' il titolo resti leggibile sopra il
   legno chiaro) e uno dall'alto in basso che la chiude nel fondo pagina, cosi'
   non finisce mai di netto. */
.bl-hero{
  position:relative;overflow:hidden;
  padding-top:clamp(8rem,15vh,11rem);
  /* +30px in fondo per far scendere la sfumatura (David, 21/08). Non sposta
     niente: .bl-sec qui sotto risale degli stessi 30px. Le due righe si
     cambiano SEMPRE insieme, se no il blog si muove tutto. */
  padding-bottom:calc(clamp(3rem,6vh,4.6rem) + 30px);
}
.bl-hero-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
/* il taglio e' scelto perche' la testa resti tutta dentro la fascia, con
   aria sopra: e' la regola dei ritagli di David */
.bl-hero-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 28.7%;opacity:.92}
.bl-hero-bg::after{
  content:"";position:absolute;inset:0;background:
    linear-gradient(to right,rgba(10,10,11,.84) 0%,rgba(10,10,11,.5) 40%,rgba(10,10,11,.1) 100%),
    linear-gradient(180deg,rgba(10,10,11,.5) 0%,rgba(10,10,11,.05) 42%,rgba(10,10,11,.16) 74%,rgba(10,10,11,.42) 88%,rgba(10,10,11,.82) 96%,var(--bg) 100%);
}
.bl-hero>.wrap{position:relative;z-index:2}
.bl-hero-h{margin-bottom:.7rem}
.bl-hero-p{
  margin:0;font-size:.7rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase;
  color:var(--ink-55);
}
/* l'elenco attacca subito: l'aria sopra la da' gia' la testata.
   Il margine negativo compensa i 30px in piu' della fascia qui sopra. */
.bl-sec{padding-top:clamp(1.6rem,3.5vw,2.6rem);margin-top:-30px;position:relative;z-index:1}
@media (max-width:760px){
  /* da telefono la foto e' quasi solo una texture: il titolo prima di tutto */
  .bl-hero-bg img{object-position:58% 24%;opacity:.5}
}
/* --- ricerca fra gli articoli --- */
.bl-cerca{display:block;margin-bottom:clamp(1.4rem,2.6vw,2.2rem)}
.bl-cerca-lab{
  display:block;font-size:.62rem;font-weight:700;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink-55);margin-bottom:.55rem;
}
.bl-cerca-riga{
  display:flex;align-items:center;gap:.6rem;max-width:34rem;
  border-bottom:1px solid var(--line-strong);
  transition:border-color .35s var(--ease-soft);
}
.bl-cerca-riga:focus-within{border-color:var(--coral)}
.bl-cerca-in{
  flex:1 1 auto;min-width:0;font:inherit;font-size:1rem;color:#fff;
  background:none;border:0;padding:.5em 0 .6em;
}
.bl-cerca-in::placeholder{color:var(--ink-40,rgba(255,255,255,.34))}
.bl-cerca-in:focus{outline:none}
/* la crocetta di serie del campo "search" e' quella bianca del browser: via */
.bl-cerca-in::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.bl-cerca-x{
  flex:none;background:none;border:0;cursor:pointer;font:inherit;
  font-size:.62rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-55);padding:.4em 0;transition:color .3s var(--ease-soft);
}
.bl-cerca-x:hover,.bl-cerca-x:focus-visible{color:var(--coral)}
.bl-cerca-esito{
  margin:.7rem 0 0;font-size:.8rem;color:var(--ink-55);min-height:1.2em;
}
.bl-cerca-esito em{font-style:normal;color:var(--coral)}
.bl-voce[hidden]{display:none}


/* ---- Blog: il menu delle categorie -------------------------------------
   SOLE PAROLE, niente pastiglie (David, 21/08): la riga dei filtri non deve
   pesare come i bottoni dei formatori. Quella scelta e' salmone.
   Da telefono e' una riga sola che scorre: scorre il CONTENITORE, mai la
   pagina (regola non negoziabile). Ai bordi una sfumatura accesa da site.js
   solo dal lato dove c'e' ancora roba, se no l'ultima parola sembra tagliata. */
.bl-cats{margin:0 0 2.6rem}
/* il conto degli articoli sta SOTTO il menu e sopra la prima riga grigia */
.bl-cats .bl-cerca-esito{margin:1.5rem 0 0}
/* il bottone che azzera tutto, in fondo all'elenco: c'e' solo quando filtri */
.bl-reset{
  display:inline-block;margin:2.4rem 0 0;font-family:inherit;
  font-size:.68rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink);background:none;cursor:pointer;
  border:1px solid rgba(236,134,102,.55);border-radius:100px;padding:.9em 1.7em;
  transition:color .3s ease,border-color .3s ease,background-color .3s ease;
}
.bl-reset:hover{color:var(--coral);border-color:var(--coral)}
.bl-reset[hidden]{display:none}
.bl-cats-in{display:flex;flex-wrap:wrap;gap:.5rem 1.9rem;align-items:baseline}
.bl-cat{
  font-family:inherit;font-size:.6875rem;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink-55);
  background:none;border:0;padding:.2em 0;cursor:pointer;white-space:nowrap;
  position:relative;transition:color .28s ease;
}
/* niente riga sotto la voce accesa (David, 21/08): il salmone basta */
.bl-cat:hover{color:var(--ink)}
.bl-cat.is-on{color:var(--coral)}
.bl-voce[hidden]{display:none}
@media (max-width:700px){
  .bl-cats-in{
    flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
    -webkit-overflow-scrolling:touch;padding-bottom:.3rem;
    scroll-snap-type:x proximity;gap:1.5rem;
  }
  .bl-cats-in::-webkit-scrollbar{display:none}
  .bl-cat{scroll-snap-align:start;font-size:.65rem}
  .bl-cats-in{
    --sx:0px; --dx:0px;
    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--sx),
            #000 calc(100% - var(--dx)),transparent 100%);
            mask-image:linear-gradient(to right,transparent 0,#000 var(--sx),
            #000 calc(100% - var(--dx)),transparent 100%);
  }
  .bl-cats-in.ha-dx{--dx:28px}
  .bl-cats-in.ha-sx{--sx:28px}
}

.bl-lista{border-top:1px solid var(--line)}
/* voci un filo piu' contenute (20/08): con 18 articoli in fila quelle di prima
   riempivano mezzo schermo l'una e per arrivare in fondo si scorreva troppo */
/* un gradino piu' compatte: cosi' in una schermata ne entrano di piu' */
.bl-voce{
  display:block;text-decoration:none;color:inherit;position:relative;
  padding-block:clamp(1.05rem,1.9vw,1.45rem);
  border-bottom:1px solid var(--line);
}
.bl-kick{
  display:block;font-size:.58rem;font-weight:700;letter-spacing:.2em;
  text-transform:uppercase;color:var(--coral);margin-bottom:.4rem;
}
.bl-titolo{
  font-size:clamp(1.15rem,1.95vw,1.55rem);line-height:1.25;font-weight:700;
  letter-spacing:-.01em;max-width:32ch;
  transition:color .35s var(--ease-soft);
}
/* IL NUMERO FISSO DELL'ARTICOLO (David, 22/08: "non invadente"). Grigio, un
   filo piu' piccolo del titolo e senza grassetto, cosi' si legge come una
   targhetta e non come parte del titolo. Resta grigio anche quando il titolo
   si accende al passaggio del mouse: quello e' il punto di "non invadente". */
.bl-num{
  font-weight:400;color:var(--ink-40,rgba(255,255,255,.38));
  font-size:.86em;letter-spacing:0;
  font-variant-numeric:tabular-nums;
}
.bl-txt{
  margin-top:.42rem;max-width:70ch;color:var(--ink-70);
  font-size:clamp(.86rem,.95vw,.94rem);line-height:1.6;
}
.bl-more{
  display:inline-flex;align-items:center;gap:.6em;margin-top:.55rem;
  font-size:.62rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-55);transition:color .35s var(--ease-soft),gap .35s var(--ease-soft);
}
.bl-voce:hover .bl-titolo,.bl-voce:focus-visible .bl-titolo{color:var(--coral)}
.bl-voce:hover .bl-more,.bl-voce:focus-visible .bl-more{color:var(--coral);gap:1em}
.bl-more .arr{transition:transform .35s var(--ease-soft)}
.bl-voce:hover .bl-more .arr{transform:translateX(4px)}

/* ============ ARTICOLO: piede con il prossimo e chi sono ============ */
.art-next{
  display:flex;align-items:baseline;gap:.8em 1.1em;flex-wrap:wrap;
  margin-top:clamp(2.6rem,5vw,3.6rem);padding-top:clamp(1.6rem,3vw,2.2rem);
  border-top:1px solid var(--line);text-decoration:none;color:inherit;
}
.art-next-eti{
  font-size:.66rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--coral);flex:0 0 auto;transition:color .35s var(--ease-soft);
}
.art-next-tit{
  font-size:clamp(1.05rem,1.7vw,1.35rem);font-weight:700;line-height:1.3;
  flex:1 1 14ch;min-width:0;transition:color .35s var(--ease-soft);
}
.art-next-arr{flex:0 0 auto;color:var(--coral);transition:transform .35s var(--ease-soft)}
.art-next:hover .art-next-tit,.art-next:focus-visible .art-next-tit{color:var(--coral)}
.art-next:hover .art-next-eti{color:var(--coral)}
.art-next:hover .art-next-arr{transform:translateX(5px)}

/* da telefono l'etichetta sta sopra, titolo e freccia sulla stessa riga:
   se no la freccia resta da sola in fondo */
@media (max-width:600px){
  .art-next{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem .9rem;align-items:center}
  .art-next-eti{grid-column:1 / -1}
  .art-next-arr{align-self:center}
}

/* chi sono: per chi arriva da fuori e non mi conosce */
/* Il piede dell'articolo: una STRISCIA da bordo a bordo, attaccata al footer.
   Sta FUORI dalla colonna di lettura (e' figlia diretta di <main>), cosi' non
   servono trucchi di margini negativi per farla arrivare ai bordi: e' larga
   quanto la pagina di suo. Dentro, il contenuto torna nella colonna. */
.art-io{
  background:var(--bg-2);border-top:1px solid var(--line);
  padding-block:clamp(1.9rem,3.6vw,3rem);margin:0;
}
.art-io-in{
  max-width:var(--max);margin:0 auto;padding-inline:var(--pad);
  display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:clamp(1.4rem,3vw,2.4rem);align-items:center;
}
/* la foto e' piu' grande di prima: David la vedeva piccola */
.art-io-foto{
  width:clamp(110px,13vw,168px);height:clamp(110px,13vw,168px);
  border-radius:50%;object-fit:cover;display:block;
  border:2px solid var(--coral);
}
/* il nome sta solo nella chiocciola: la riga "David Valmori" e' stata tolta */
.art-io-tag{color:var(--coral);font-size:1rem;font-weight:700;letter-spacing:.06em}
.art-io-riga{color:var(--ink-70);font-size:.9375rem;line-height:1.6;margin-top:.7rem;max-width:52ch}
.art-io-btn{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:1.2rem}
.art-io-btn .btn{font-size:.68rem}
@media (max-width:640px){
  .art-io-in{grid-template-columns:minmax(0,1fr);justify-items:center;text-align:center}
  .art-io-riga{margin-inline:auto}
  .art-io-btn{justify-content:center;width:100%}
  .art-io-btn .btn{width:100%;justify-content:center}
}

/* ============ FORMAZIONE: apertura e fascia dei nomi ============ */
/* Tre pezzi affiancati dentro la stessa apertura: la foto attaccata al bordo
   sinistro dello schermo, il titolo con i suoi testi al centro, il filmato dei
   formatori a destra. Niente cornice sulla foto: taglia da bordo a bordo. */
#formatori{background:#000000;overflow:hidden}
.fm-apre-sec{padding-block:0}
.fm-apre{
  display:grid;
  grid-template-columns:clamp(200px,19vw,340px) minmax(0,1.3fr) minmax(0,1.75fr);
  gap:clamp(1.8rem,3vw,3.4rem);
  align-items:center;
  min-height:clamp(34rem,86vh,54rem);
}
.fm-foto{align-self:stretch;position:relative;min-height:100%}
.fm-foto img{
  width:100%;height:100%;object-fit:cover;object-position:82% 34%;display:block;
}
/* in fondo la foto finiva con un taglio netto sull'orizzontale. Una sfumatura
   corta la fa sparire nel nero della sezione: corta apposta, cosi' non arriva
   ad annerire l'orologio e il braccio, che stanno piu' in alto (e' lo stesso
   motivo per cui sul lato destro la sfumatura non c'e'). */
.fm-foto::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:15%;
  background:linear-gradient(to top,#000,rgba(0,0,0,0));pointer-events:none;
}
.fm-testo{padding-block:clamp(8.5rem,15vh,11rem) clamp(3rem,7vh,5rem)}
.fm-testo .sec-head{margin-bottom:clamp(1.4rem,3vw,2.2rem)}
.fm-testo .lead{max-width:52ch}
.fm-testo .lead strong{color:var(--ink);font-weight:700}

/* il filmato dei formatori: grande, con i bordi che si perdono nel nero */
/* quadrato, ma senza sfondare lo schermo: su un monitor largo l'altezza si
   ferma e il filmato resta proporzionato perche' e' object-fit:cover */
.fm-video{position:relative;width:100%;aspect-ratio:1/1;max-height:74vh;margin:0}
.fm-video video{width:100%;height:100%;object-fit:cover;display:block}
/* un velo salmone leggerissimo sul filmato: lo lega al resto del sito invece
   di lasciarlo come un pezzo di video estraneo. Sta sotto alla sfumatura dei
   bordi, quindi non ne cambia il disegno. */
.fm-video::before{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:var(--coral);opacity:.18;mix-blend-mode:soft-light;
}
.fm-video video{position:relative;z-index:0}
.fm-video::after{
  content:"";position:absolute;inset:-2px;pointer-events:none;
  background:
    linear-gradient(to right,#000 0%,rgba(0,0,0,0) 34%),
    linear-gradient(to left,#000 0%,rgba(0,0,0,0) 34%),
    linear-gradient(to bottom,#000 0%,rgba(0,0,0,0) 30%),
    linear-gradient(to top,#000 0%,rgba(0,0,0,0) 30%);
}
@media (prefers-reduced-motion:reduce){.fm-video video{display:none}}

/* da telefono va tutto in colonna: foto in alto a tutta larghezza, poi il
   testo, poi il filmato */
@media (max-width:900px){
  .fm-apre{
    grid-template-columns:minmax(0,1fr);gap:0;min-height:0;
    padding-inline:0;
  }
  .fm-foto{height:56vh;min-height:0}
  .fm-foto img{object-position:60% 30%}
  /* la sfumatura in fondo e' la stessa del desktop: qui non serve un caso a parte
     (la vecchia riga non disegnava niente, le mancava il content) */
  .fm-testo{padding:clamp(2rem,6vw,3rem) var(--pad) 0}
  .fm-video{margin:clamp(1.8rem,5vw,2.6rem) var(--pad) 0;width:auto}
}

/* la fascia dei nomi: un filo piu' chiara, staccata da una riga grigia */
.fm-nomi{
  /* ESATTAMENTE il nero del fondo dei ritratti (#0a0a0a, neutro): se i due neri
     non coincidono si vede il rettangolo della foto sulla sezione. Vale la
     regola: si cambia questo colore SOLO insieme a BASE in fondo2.py. */
  background:#0a0a0a;border-top:1px solid rgba(255,255,255,.14);
  padding-top:clamp(2.4rem,5vw,3.6rem);padding-bottom:clamp(2.4rem,5vw,3.6rem);
}
.fm-nomi .mentori{margin-top:0}
/* la V fra i nomi e gli attestati: piu' bassa e piu' larga delle altre,
   quindi molto meno marcata */
.vcut--leggera{
  height:clamp(1.6rem,3vw,2.6rem);background:#f7f4f1;
}
.vcut--leggera::before{
  background:var(--bg);
  clip-path:polygon(0 0,100% 0,100% 0,50% 100%,0 0);
}

/* ============ RIFINITURE DA TELEFONO (David, 23/08) ============
   Tutte nate da misure, non da impressioni: i numeri stanno in RIPRESA. */

/* 1 · BLOG: il menu delle categorie al posto del nastro che scorreva.
   Sotto i 700px si vedevano tre categorie su sei e niente diceva che ce
   n'erano altre; in piu' le pastiglie erano alte 15px, contro i 44 che vuole
   un dito. Le voci del menu le costruisce site.js dalle pastiglie che ci sono
   gia': una sola fonte, un solo filtro. */
.bl-catmenu{display:none}
@media (max-width:700px){
  .bl-cats-in{display:none}
  .bl-catmenu{display:block;position:relative}
  .bl-catmenu-apre{
    display:flex;align-items:center;gap:.7rem;width:100%;
    font-family:inherit;color:var(--ink);background:none;cursor:pointer;
    border:1px solid var(--line-strong);border-radius:2px;
    padding:.95rem 1.1rem;text-align:left;
    transition:border-color .3s var(--ease-soft);
  }
  .bl-catmenu.is-aperto .bl-catmenu-apre{border-color:var(--coral)}
  .bl-catmenu-eti{
    font-size:.6875rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
    color:var(--ink-55);flex:none;
  }
  .bl-catmenu-val{
    flex:1 1 auto;min-width:0;font-size:.875rem;font-weight:500;
    letter-spacing:.04em;color:var(--coral);
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;
  }
  /* la freccia: due tratti, e gira quando il menu si apre */
  .bl-catmenu-frec{
    flex:none;width:9px;height:9px;margin-left:.1rem;
    border-right:1.5px solid var(--ink-55);border-bottom:1.5px solid var(--ink-55);
    transform:translateY(-2px) rotate(45deg);
    transition:transform .38s var(--ease-soft);
  }
  .bl-catmenu.is-aperto .bl-catmenu-frec{transform:translateY(1px) rotate(-135deg)}
  /* si apre e si chiude morbido, mai un salto secco */
  .bl-catmenu-voci{
    max-height:0;opacity:0;visibility:hidden;overflow:hidden;
    border:1px solid var(--line-strong);border-top:0;
    transition:max-height .42s var(--ease-soft),opacity .26s ease,visibility 0s linear .42s;
  }
  .bl-catmenu.is-aperto .bl-catmenu-voci{
    max-height:26rem;opacity:1;visibility:visible;transition-delay:0s,0s,0s;
  }
  .bl-catvoce{
    display:block;width:100%;min-height:48px;
    font-family:inherit;font-size:.8125rem;font-weight:500;letter-spacing:.1em;
    text-transform:uppercase;color:var(--ink-70);text-align:left;
    background:none;border:0;border-bottom:1px solid var(--line);
    padding:.9rem 1.1rem;cursor:pointer;
    transition:color .25s ease,background-color .25s ease;
  }
  .bl-catvoce.is-on{color:var(--coral);background:rgba(236,134,102,.07)}
  .bl-catmenu-voci li:last-child .bl-catvoce{border-bottom:0}
  @media (prefers-reduced-motion:reduce){
    .bl-catmenu-voci,.bl-catmenu-frec{transition:none}
  }
}

/* 2 · BLOG: i testi piu' piccoli del sito stavano qui. Misurati: l'etichetta
   della ricerca 9,9px, l'occhiello sopra i titoli 9,3px. Da telefono salgono. */
@media (max-width:700px){
  .bl-cerca-lab{font-size:.72rem}
  .bl-kick{font-size:.6875rem}
}

/* 3 · HOME: la riga in fondo all'apertura. Tre cose su una riga sola a 10px con
   .3em di spaziatura: "Scorri" andava a capo e la freccia restava sola.
   Da telefono va su due righe, l'invito a scorrere tutto a destra, e non si
   spezza mai. */
@media (max-width:700px){
  .hero2 .hero-meta{
    flex-wrap:wrap;row-gap:.5rem;column-gap:.7rem;
    font-size:.6875rem;letter-spacing:.1em;
  }
  .hero2 .hero-meta .n{flex:none}
  .hero2 .hero-meta>span:nth-child(2){flex:1 1 auto;min-width:0}
  /* "Scorri" va a sinistra come tutto il resto della riga (David, 23/08), e la
     freccia scende e risale in salmone: e' l'unica cosa che si muove, quindi
     dice da sola cosa fare. Con le animazioni ridotte resta ferma e colorata. */
  .hero2 .hero-meta>span:last-child{flex:0 0 100%;text-align:left;white-space:nowrap}
  .freccia-giu{
    display:inline-block;color:var(--coral);margin-left:.35em;
    animation:freccia-scende 1.9s var(--ease-soft) infinite;
  }
  @keyframes freccia-scende{
    0%,100%{transform:translateY(0);opacity:.85}
    50%{transform:translateY(5px);opacity:1}
  }
  @media (prefers-reduced-motion:reduce){.freccia-giu{animation:none}}
}

/* 4 · FORMAZIONE: le 59 pastiglie dei formatori erano alte 27px, una accanto
   all'altra. Da telefono crescono a ~36 e in piu' hanno un bersaglio
   invisibile che le porta a 44: si guadagna il dito senza allungare di 17px
   per riga una lista gia' lunga. */
@media (max-width:900px){
  .mentore{position:relative;padding:.95em 1.25em}
  .mentore::after{content:"";position:absolute;inset:-4px -3px}
}

/* 5 · CASI STUDIO: il link a Instagram era alto 23px e non aveva niente che
   dicesse che si puo' toccare. Da telefono prende aria (41px) e la riga sotto,
   che e' il modo piu' leggero per dire "questo e' un link". */
@media (max-width:900px){
  .cs-ig{
    padding:.55rem 0;
    text-decoration:underline;text-underline-offset:.35em;
    text-decoration-thickness:1px;text-decoration-color:rgba(255,255,255,.3);
  }
}

/* 6 · FOOTER, tutte le pagine: i link erano alti 19px. L'aria sopra e sotto li
   porta a 44 senza cambiare niente di come si vedono; lo spazio fra le righe
   cala di altrettanto, cosi' il footer non si allunga. */
@media (max-width:767px){
  .ftr-nav{gap:.15rem 1.5rem}
  .ftr-nav a{display:inline-block;padding:.78rem .2rem}
}

/* 7 · LE ETICHETTE SOTTO GLI 11 PIXEL (David, 23/08: "facciamolo").
   Le targhette in maiuscolo che fanno da cartellino: sopra i campi di un
   modulo, sotto una foto, sopra un titolo. Misurate a 390: si andava dai 9px
   delle scritte del modulo newsletter ai 10,5 delle note dei risultati.
   Da telefono salgono tutte a 11,5. **Da computer non cambia niente.**
   La spaziatura fra le lettere scende di quel tanto che basta a non far
   crescere la riga: un'etichetta e' larga quanto il corpo PER la spaziatura,
   e questi testi in maiuscolo stanno spesso in spazi stretti.
   Restano a 11 le altre (numeri di sezione, occhielli, pastiglie): in
   maiuscolo e spaziate si leggono, e toccarle vorrebbe dire rimisurare mezzo
   sito. */
@media (max-width:700px){
  .nl-lab{font-size:.72rem;letter-spacing:.14em}          /* era 9px, il modulo newsletter */
  .vc-btn{font-size:.72rem;letter-spacing:.18em}          /* i bottoni dei videocorsi (e .vc-btn-t, che eredita) */
  .con-kick{font-size:.72rem;letter-spacing:.24em}        /* "Articolo" nel blocco del blog */
  .pop-kick{font-size:.72rem;letter-spacing:.24em}        /* "La newsletter" dentro il pop-up */
  .frame figcaption{font-size:.72rem;letter-spacing:.22em}/* le didascalie sotto le foto */
  .scroll-hint{font-size:.72rem;letter-spacing:.24em}     /* "Scorri la storia" */
  .ct-dove{font-size:.72rem;letter-spacing:.22em}         /* Candidatura · WhatsApp · Email a David */
  .ris-note{font-size:.72rem;letter-spacing:.2em}         /* "In 21 giorni", sotto ogni risultato */
}

/* 8 · I TITOLI DI SEZIONE, un filo piu' grandi da telefono (David, 23/08:
   "un poco piu' grandi, ma proprio pochissimo"). A 390 il clamp era gia' al
   suo minimo, 44px: sotto i 700px diventano 47,2, cioe' il 7% in piu'.
   Le varianti che hanno una misura loro (newsletter, blog, chiusura) non sono
   toccate: hanno un selettore piu' forte e si tengono la loro. */
@media (max-width:700px){
  .h-display{font-size:2.95rem}
}

/* 9 · SEZIONE 02: LA FOTO SALE SOPRA A "02 CHI SONO" (David, 23/08).
   La foto sta dentro .chi-grid, quindi da sola non puo' scavalcare la testata
   di sezione, che e' una sua zia. Con display:contents la griglia sparisce
   come scatola e i suoi due figli diventano figli diretti di .wrap: da li' in
   poi basta l'ordine. La griglia perde il suo spazio interno, che viene
   rimesso a mano qui sotto.
   La foto e' anche un po' piu' piccola, come chiesto: 290px invece dei 342
   che prendeva tutta la colonna. */
@media (max-width:900px){
  #chi-sono>.wrap{display:flex;flex-direction:column}
  #chi-sono .chi-grid{display:contents}
  #chi-sono .chi-ph{order:1;max-width:290px;margin:0 auto 2.2rem}
  #chi-sono .sec-head{order:2}
  #chi-sono .chi-grid>div:not(.chi-ph){order:3}
}

/* 10 · LE STRISCE DI FOTO, piu' alte da telefono (David, 23/08: "allarghiamole
   un po', da telefono possiamo permettercelo"). Erano ferme al minimo del
   clamp, 180px: su uno schermo da 390 vuol dire una fessura con tanto nero
   sopra e sotto. A 250px il rapporto della striscia si avvicina a quello della
   foto e la scena si vede. */
@media (max-width:700px){
  .band{height:250px}
}

/* 11 · LE 122 PROFESSIONI DA TELEFONO: SETTE FILE CHE CAMMINANO
   (David, 23/08). Da computer l'elenco giustificato resta identico: qui sotto
   si spegne solo sotto i 700px, dove diventava una striscia infinita con una o
   due voci per riga. Le file le costruisce site.js con le stesse voci.
   Ogni pista contiene due volte la stessa fetta e scorre di meta' larghezza:
   arrivata in fondo si ritrova al punto di partenza e il giro non si vede. */
.cloud-file{display:none}
@media (max-width:700px){
  .cloud{display:none}
  .cloud-file{
    display:block;
    width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
    margin-block:clamp(2.2rem,6vw,3rem) 0;
  }
  /* la fila SCORRE davvero, cosi' il dito ci si puo' appoggiare sopra e
     portarsela avanti e indietro (David). Con un'animazione CSS non si poteva:
     la posizione la decide l'animazione e vince su tutto. */
  .cloud-fila{
    overflow:hidden;
    touch-action:pan-y;cursor:grab;
  }
  .cloud-fila::-webkit-scrollbar{display:none}
  .cloud-fila:active{cursor:grabbing}
  .cloud-pista{display:flex;width:max-content;gap:1.7rem;padding:.42rem 0}
  .cloud-file .c1{color:var(--coral)}
  .cloud-file .c2{color:var(--ink-70)}
  .cloud-file .c3{color:var(--coral-hi);opacity:.85}
  .cloud-file span{
    font-family:var(--font-body);text-transform:uppercase;font-weight:500;
    letter-spacing:.09em;font-size:.8rem;
    display:inline-block;white-space:nowrap;
  }
  @media (prefers-reduced-motion:reduce){
    .cloud-fila{overflow-x:auto;scrollbar-width:none}
  }
}

/* 12 · IL TITOLO DELLE NICCHIE era 25,6px contro i 47 dei titoli di sezione
   (David, 23/08: "questo titolo e' scritto in piccolissimo"). Da telefono
   passa a 35, cioe' a meta' strada: resta un sottotitolo, ma si vede. */
@media (max-width:700px){
  .nicchie-h{font-size:2.2rem;line-height:1.06}
}

/* 13 · LO SPAZIO NERO SOTTO LA FILOSOFIA: adesso la misura giusta ce l'ha gia'
   la regola di partenza (var(--sec-y), come tutte le sezioni), quindi qui non
   serve piu' niente. La nota resta per ricordare com'era: 222px contro i 172
   delle altre sezioni. */

/* 14 · LA FOTO DELLA SEZIONE 06, un po' piu' piccola da telefono (David).
   Prendeva tutta la colonna; adesso si ferma a 290px come quella della 02,
   cosi' le due foto ritratto della home hanno la stessa misura. */
@media (max-width:900px){
  /* 290 era troppo poco (David, 23/08 sera): 330. Vale per tutt'e due le
     cornici che usano questa classe, la 06 e la 12. */
  .man-ph{max-width:330px;margin-left:auto;margin-right:auto}
}

/* 15 · IL PANNELLO SI APRE SOTTO LA CARD CHE LO CHIAMA (David, 23/08: "quando
   apro videocorsi e masterclass, ha senso che il blocco ebook e guide scorra in
   basso, sotto al bottone chiudi"). Ha senso, si': prima il pannello dei
   videocorsi nasceva DOPO tutte e quattro le card, quindi cliccando la terza si
   apriva sotto alla quarta, con la card degli ebook incastrata in mezzo.
   Le card stanno in .strade e i due pannelli sono fuori: con display:contents la
   scatola sparisce e i due gruppi diventano fratelli, cosi' l'ordine si puo'
   scrivere. Vale solo da telefono, dove le card sono incolonnate; da computer
   sono quattro in fila e il pannello sotto va bene com'e'. */
@media (max-width:560px){
  #percorsi>.wrap{display:flex;flex-direction:column}
  #percorsi .strade{display:contents}
  #percorsi .sec-head{order:1}
  #percorsi .per-title{order:2}
  /* TRAPPOLA: nth-of-type NON va bene qui. Le prime due card sono <a> e le
     altre due <button>, e nth-of-type conta per tipo: la "terza .strada" non
     esisteva e l'ordine non prendeva. Si conta la posizione dentro .strade. */
  #percorsi .strade>:nth-child(1){order:3}
  #percorsi .strade>:nth-child(2){order:4}
  #percorsi .strade>:nth-child(3){order:5}
  #percorsi #vc-panel{order:6}
  #percorsi .strade>:nth-child(4){order:7}
  #percorsi #eb-panel{order:8}
  /* .strade aveva il suo spazio interno: sparita la scatola, va rimesso qui */
  #percorsi .strada{margin-bottom:1rem}
}

/* 16 · LE SCHEDE DEI VIDEOCORSI ERANO GIGANTI da telefono (David, 23/08):
   421px l'una, tre di fila. Si stringono da tre parti insieme: la copertina
   passa da 16:9 a 2:1, l'aria interna cala, e il vuoto sopra il titolo del
   pannello scende da 176px a 112. Restano leggibili, ma il pannello smette di
   essere lungo quanto una pagina. */
@media (max-width:700px){
  /* la prima scheda tagliava la faccia di David nel filmato di sfondo
     (David, 23/08: "abbassiamo un po' il primo tab"): scende di 4,5rem. */
  .vc-grid{margin-top:clamp(11.5rem,30vw,14rem)}
  .vc-cover{aspect-ratio:2/1}
  .vc-info{padding:1rem 1.05rem 1.15rem}
  .vc-txt{font-size:.875rem;line-height:1.55;margin-bottom:1.1rem}
  .vc-nome{margin-bottom:.55rem}
}

/* ============ RIFINITURE DA TELEFONO, secondo giro (David, 23/08) ============ */

/* 17 · IL PRIMO EBOOK SCENDE. La frase stampata sulla pagina del libro, nella
   foto di sfondo, restava coperta dalla prima scheda. */
@media (max-width:700px){
  .eb-wrap .vc-grid{margin-top:9.5rem}
}

/* 18 · IL BLOCCO EUROPEO: titolo piu' grande e marchio spostato sopra al
   bottone (David). Il marchio sta in una colonna e il bottone in un'altra,
   dentro un div che non e' suo fratello: con display:contents spariscono
   tutt'e due le scatole e i pezzi diventano fratelli, e da li' basta l'ordine.
   Il titolo passa da 25,6 a 33,6px. */
@media (max-width:900px){
  .sec--ue .storia-kick{font-size:2.1rem;line-height:1.08}
  .sec--ue>.wrap{display:flex;flex-direction:column}
  /* TRAPPOLA: ".ue-grid>div" prendeva ANCHE il marchio, che e' un div pure
     lui. Diventato display:contents spariva come scatola e a ordinarsi
     restava la sua immagine, con ordine 0: il marchio non si spostava.
     Va escluso a mano. */
  .sec--ue .ue-grid,.sec--ue .ue-grid>div:not(.ue-badge){display:contents}
  /* .ue-grid ha anche la classe .rev, cioe' nasce trasparente e si accende
     quando entra nello schermo. Diventata display:contents non ha piu' un
     riquadro: l'osservatore non la vede mai entrare e la classe "in" non
     arriva. Non si vede perche' senza riquadro opacita' e spostamento non si
     applicano, ma e' una mina: se un domani si toglie display:contents, il
     blocco resta invisibile. Qui si spegne la partenza in trasparenza. */
  html.js .sec--ue .ue-grid.rev{opacity:1;transform:none}
  .sec--ue .storia-kick{order:1}
  .sec--ue .lead{order:2}
  .sec--ue .ue-badge{order:3;margin:1.8rem 0 1.6rem}
  .sec--ue .ue-grid>div>p:last-child{order:4;margin-top:0}
}

/* 19 · EXPERIENCE: la foto di sfondo punta su David, che nell'inquadratura
   larga sta a sinistra e da telefono restava tagliato fuori. */
@media (max-width:900px){
  /* nel collage David (quello che urla col pugno alzato) sta fra il 42 e il
     62% della larghezza, centro 52: l'inquadratura del computer, ferma al
     62%, da telefono lo spingeva contro il bordo sinistro */
  .exp-bg img{object-position:52% 52%}
}

/* 20 · LA STRISCIA DEL VIDEO (David: "allarghiamo un po' e non ci deve essere
   la banda nera sopra"). Il player e' 16:9: dentro una fascia alta 280px su
   uno schermo da 390 ne riempiva 219 e i 61 che restavano erano nero, per meta'
   in cima. Adesso il video si comporta come una foto ritagliata: alto quanto la
   fascia, largo quanto vuole il suo rapporto, e centrato. Il nero sparisce
   perche' non avanza piu' niente. Salta anche il ritocco dei 20px, che serviva
   solo a spostare il video dentro la banda. */
@media (max-width:700px){
  .band--video{height:300px}
  /* NIENTE transform QUI: site.js muove .vm-fit con lo scorrimento scrivendo
     un transform in linea, e sovrascriveva il translateX(-50%) che serviva a
     centrare. Risultato: il video partiva a meta' schermo con mezzo riquadro
     vuoto a sinistra. Si centra con left e margine, che nessuno tocca.
     533 = 300 di altezza per il rapporto 16:9. */
  .band--video .vm-fit{
    top:0;height:100%;width:533px;left:50%;margin-left:-266px;
  }
}

/* 21 · BLOG IN HOME: via le due righe grigie di presentazione (David). Restano
   occhiello, titolo e "Leggi": da telefono le tre schede si leggono a colpo
   d'occhio invece di essere tre muri di testo. */
@media (max-width:700px){
  .con-card .con-txt{display:none}
}

/* 22 · IL MODULO DELLA NEWSLETTER IN COLONNA (David: "da mobile lo voglio in
   lunghezza, verticale"). I campi stavano a due a due: su 342px di larghezza
   ognuno restava largo 160, e in un campo email non ci sta un indirizzo. */
@media (max-width:700px){
  .nl-due{grid-template-columns:1fr;gap:0}
}

/* 23 · SEZIONE 15: la foto di sfondo punta su David (nell'originale sta a
   sinistra, di spalle) e la cornice va a destra, come chiesto. */
@media (max-width:900px){
  .cta-bg img{object-position:22% 50%}
  /* per stare "a destra" deve prima essere piu' stretta della colonna: a 340
     su 342 disponibili restava attaccata a tutt'e due i bordi */
  .cta-ph{max-width:330px;margin-left:auto;margin-right:auto}
}

/* ============ TERZO GIRO DA TELEFONO (David, 23/08 sera) ============ */

/* 24 · IL MENU: il blocco scende e "Candidati" diventa un bottone vero.
   Le voci erano centrate sull'altezza intera e la prima restava troppo vicina
   al logo; il bottone era alto 40px, meno del dito. */
@media (max-width:1299px){
  html.js .hdr-nav{padding-top:4.5rem;justify-content:center}
  .hdr-nav a.hdr-cta{font-size:.9rem;padding:1em 2.6em;letter-spacing:.28em}
}

/* 25 · IL TESTO DELLA FILOSOFIA deve essere uguale a tutti gli altri
   paragrafi della pagina (David: "pareggia"). Era una misura fissa a 15px:
   adesso che il corpo da telefono e' salito a 17 la misura fissa lo lasciava
   indietro, quindi eredita e basta, come fa il testo del Metodo. */
@media (max-width:700px){
  .fil-arg{font-size:1em}
}

/* 26 · LA FOTO DIETRO ALLE NICCHIE si sposta a destra (David). Era spinta a
   sinistra di 150px per lasciare spazio al titolo su schermo largo; da telefono
   quello spazio non serve e mangiava mezza scena. */
@media (max-width:700px){
  .nicchie-bg{transform:translateX(calc(-50% + 40px))}
}

/* 27 · LA CARD "EBOOK & GUIDE" era appiccicata al bottone Chiudi del pannello
   dei videocorsi, che le sta appena sopra (David). */
@media (max-width:560px){
  #percorsi .strade>:nth-child(4){margin-top:2.6rem}
}

/* 28 · SEZIONE EVENTO: il testo sopra il video aveva poco stacco e il logo era
   piccolo (David: "meno trasparenza sotto, ingrandiamo il logo"). Il velo si
   chiude di piu' verso il basso, dove stanno testo e bottone, e il marchio
   passa da 260 a 320px. */
@media (max-width:700px){
  /* TRAPPOLA: il velo scuro della sezione (.evt-bg::after) NON copre il video.
     Il video ha z-index:1 e il velo non ce l'ha, quindi il velo gli sta SOTTO
     e non lo scurisce di un'unghia. Ci ho perso un giro: cambiavo il gradiente
     e la misura del contrasto non si spostava di un decimo.
     Si agisce dove serve davvero, sull'opacita' del video: da .4 a .26. */
  .evt-bg--video .vm-fit{opacity:.26}
  .evt-title--logo img{width:320px}
}

/* 29 · IL TITOLO DEL BLOCCO EUROPEO era schiacciato fra la sezione di sopra e
   il testo (David: "troppo appiccicato sopra e sotto"). */
@media (max-width:900px){
  .sec--ue .storia-kick{margin:1.4rem 0 1.5rem}
}

/* 30 · IL TITOLO DELLA SEZIONE 15 era 38,4px contro i 47,2 di tutti gli altri
   titoli di sezione: pareggiato (David: "titolo troppo piccolo"). */
@media (max-width:700px){
  /* David, 23/08 sera: "titolo troppo piccolo, davvero". Pareggiarlo agli
     altri titoli di sezione non bastava, perche' qui il titolo e' stretto a
     14ch e va su tre righe corte: sale a 57,6px. */
  /* TRAPPOLA: ".cta-title" da sola non prendeva. La misura vera la scrive
     #candidati .cta-title, che ha un id e vince per specificita': il titolo
     restava a 38,4px mentre io credevo di averlo portato a 57. Qui si scrive
     con l'id, e si pareggia a "Da timido e introverso a formatore" (47,2px),
     che e' la misura che David ha indicato. */
  #candidati .cta-title{font-size:2.95rem}
}

/* ============ LA MIA STORIA, DA TELEFONO (David, 23/08 sera) ============ */

/* 31 · IL LOGO IN CIMA era alto 32px su tutte le pagine: da telefono e' poco
   (David). Sotto i 700px passa a 40. */
@media (max-width:700px){
  .hdr-logo img{height:40px}
}

/* 32 · L'APERTURA DELLA STORIA: la foto si vedeva appena (opacita' .28) e il
   titolo era al minimo del suo clamp, 54px. Adesso la foto si vede (.55) e il
   titolo e' 64px. */
@media (max-width:700px){
  .pg-hero--foto .pg-hero-bg img{opacity:.55}
  .pg-hero--foto .pg-title{font-size:4rem}
}

/* 33 · 2016: LA FOTO CON LA CHITARRA SI VEDE (David: "dando un po' piu' di
   opacita' cosi' si vede meglio"). Gli sfondi dei capitoli da telefono stavano
   tutti a .26, cioe' una velatura appena percettibile. Qui sale a .5 e la foto
   diventa piu' grande. Serve l'id perche' la taratura generale usa gli id.
   34 · 2018: stessa cosa per il ponte in Vietnam, che David vuole piu' grande
   ma sempre come sfondo. */
@media (max-width:900px){
  /* e va messa IN ALTO, di fianco a "Uno come tanti": la taratura da telefono
     le ancora tutte al fondo (bottom:-8%), e con un capitolo alto 1100px la
     chitarra finiva 900px sotto al titolo, dove non la vedeva nessuno. */
  #cap-2016 .storia-bg img{opacity:.5;width:min(104vw,520px);top:-3%;bottom:auto}
  #cap-2018 .storia-bg img{opacity:.44;width:min(104vw,520px)}
}

/* 35 · LE FOTO VANNO SEMPRE SOTTO AL TESTO (David, per il 2018 e "per tutte le
   doppie foto"). A una colonna il capitolo 2018 metteva le due polaroid PRIMA
   del racconto, perche' e' un capitolo "flip" e nell'HTML stanno prima. */
@media (max-width:900px){
  .storia-cap .storia-txt{order:1}
  .storia-cap .storia-ph{order:2}
}

/* 36 · LE DOPPIE FOTO, DA TELEFONO: IN FILA E GRANDI UGUALI.
   Da computer la seconda e' una polaroid piccola appoggiata sull'angolo della
   prima, ruotata e sovrapposta: su 342px di larghezza diventava un francobollo
   illeggibile (il ritaglio del giornale non si poteva proprio leggere).
   Qui esce dalla sovrapposizione, si mette sotto e prende tutta la colonna.
   Gli id servono perche' la taratura per capitolo li usa. */
@media (max-width:900px){
  #cap-2018 .storia-ph--duo,#cap-2019 .storia-ph--duo{
    padding-bottom:0;display:flex;flex-direction:column;gap:1.6rem;
  }
  #cap-2018 .frame--clip,#cap-2019 .frame--clip{
    position:static;left:auto;right:auto;bottom:auto;
    width:100%;transform:rotate(-1.5deg);
  }
  /* 37 · e si accende per conto suo, dopo la prima (David: "un'animazione a se'
     dopo quella di gerusalemme scorrendo"). La classe .rev e' nell'HTML: qui
     le si da' lo stato di partenza e il ritardo. */
  html.js .storia-ph--duo .frame--clip.rev{
    opacity:0;transform:translateY(26px) rotate(-1.5deg);
    transition:opacity .8s var(--ease),transform .8s var(--ease);
    transition-delay:.22s;
  }
  html.js .storia-ph--duo .frame--clip.rev.in{opacity:1;transform:rotate(-1.5deg)}
}
/* DA COMPUTER NON CAMBIA NIENTE: la classe .rev accesa in pagina farebbe
   partire la polaroid trasparente anche li'. Qui si spegne. */
@media (min-width:901px){
  html.js .storia-ph--duo .frame--clip.rev{opacity:1;transform:rotate(4deg);transition:none}
}

/* ============ LA MIA STORIA, secondo giro da telefono (David, 23/08) ============ */

/* 38 · 2019: IL FILMATO VA PRIMA DEL TITOLO, LOREDANA DOPO IL RACCONTO
   (David). Le due cornici stanno nello stesso contenitore, che e' fratello del
   testo: da sole non possono finire una prima e una dopo. Con display:contents
   il contenitore sparisce come scatola e le due cornici diventano sorelle del
   testo, e da li' basta l'ordine. */
@media (max-width:900px){
  #cap-2019 .storia-ph{display:contents}
  #cap-2019 .storia-ph .frame:not(.frame--clip){order:0;margin-bottom:1.8rem}
  #cap-2019 .storia-txt{order:1}
  #cap-2019 .frame--clip{order:2;margin-top:1.8rem}
}

/* 39 · GLI SFONDI DEI CAPITOLI VERTICALI ERANO I PIU' PICCOLI: 312px, contro i
   437 di quelli orizzontali. David li vuole piu' grandi (il bianco e nero a
   luce soffusa del 2021, la scrivania del 2022, l'aula di oggi). */
@media (max-width:900px){
  #cap-2018 .storia-bg img,#cap-2021 .storia-bg img,
  #cap-2022 .storia-bg img,#cap-oggi .storia-bg img{width:min(104vw,500px)}
}

/* 40 · 2022: LA SCRIVANIA SALE NEL VUOTO SOTTO AL TITOLO (David: "dove vedi
   questo nero, cosi' poi ci va sopra la cornice"). Come tutti gli sfondi da
   telefono era ancorata al fondo del capitolo; qui si aggancia in alto. */
@media (max-width:900px){
  #cap-2022 .storia-bg img{top:14%;bottom:auto}
}

/* 41 · 2019: LA FOTO CON LA VIDEOCAMERA torna a vedersi da telefono, sotto al
   racconto. Gli sfondi laterali sono spenti sotto i 900px perche' sul desktop
   stanno a fianco del testo e su una colonna non avrebbero senso: questo si
   riaccende e si mette dove serve. */
@media (max-width:900px){
  #cap-2019 .storia-bg.storia-bg--sx{display:block;left:auto;right:calc(50% - var(--vw,100vw)/2);width:min(96vw,460px)}
  #cap-2019 .storia-bg.storia-bg--sx img{
    left:auto;right:-10%;top:auto;bottom:6%;width:min(96vw,460px);opacity:.42;
    -webkit-mask-image:radial-gradient(closest-side at 50% 46%,#000 48%,rgba(0,0,0,.38) 78%,transparent 100%);
    mask-image:radial-gradient(closest-side at 50% 46%,#000 48%,rgba(0,0,0,.38) 78%,transparent 100%);
    -webkit-mask-composite:source-over;mask-composite:add;
  }
}

/* 42 · OGGI: IL BOTTONE SCORRE SOTTO AL FILMATO (David). Il bottone e'
   l'ultimo paragrafo del racconto, quindi sta dentro il blocco di testo: si
   apre anche quello con display:contents e lo si manda in fondo. */
@media (max-width:900px){
  #cap-oggi .storia-txt{display:contents}
  #cap-oggi .storia-txt>*{order:1}
  #cap-oggi .storia-ph{order:2}
  #cap-oggi .storia-txt>p:last-child{order:3;margin-top:2.2rem}
  /* TRAPPOLA: aperto il blocco di testo, i suoi paragrafi diventano celle
     della griglia del capitolo e si beccano lo spazio DELLA GRIGLIA, che qui
     e' 2,5rem: fra un paragrafo e l'altro si apriva una voragine. Lo spazio
     fra le righe si azzera e ognuno si tiene il suo margine. */
  #cap-oggi{row-gap:0}
  #cap-oggi .storia-ph{margin-top:1.6rem}
}

/* ============ EXPERIENCE E ALTRE PAGINE, DA TELEFONO (David, 23/08) ============ */

/* gli a capo che valgono solo da telefono: da computer le righe sono gia'
   composte come vuole David e non vanno spezzate */
.brk-m{display:none}
@media (max-width:900px){
  .brk-m{display:inline}
}

/* 43 · L'APERTURA DI EXPERIENCE: il titolo cresce e il claim scende. */
@media (max-width:900px){
  /* secondo giro (David: "molto piu' grande, e il claim piu' in basso").
     5,6rem = 89,6px: e' la misura piu' grande che tiene la parola dentro la
     colonna a 390px (misurata, "EXPERIENCE" e' larga 3,67px per ogni px di
     corpo, quindi 330 di larghezza utile diviso 3,67 fa 90). */
  .xp-scene--hero .xp-h{font-size:5.6rem;line-height:.9}
  .xp-motto{margin-top:clamp(4.5rem,12vh,7rem)}
}

/* 44 · LO STACCO "PER CRESCERE COME PROFESSIONISTA": il titolo era 32px, cioe'
   piu' piccolo dei titoli di sezione della home. Sale a 41,6. E il testo sotto
   va a bandiera a sinistra, non centrato (David). */
@media (max-width:900px){
  .xp-gate-h{font-size:2.6rem;line-height:1.02}
  .xp-gate-p{text-align:left}
}

/* 45 · LE SCENE: piu' nero sotto, dove stanno titolo e testo. Il velo era
   pensato per il computer, dove il testo occupa meno altezza. */
@media (max-width:900px){
  .xp-scene::after{background:
    radial-gradient(95% 75% at 50% 100%,rgba(236,134,102,.2),transparent 60%),
    linear-gradient(180deg,rgba(11,10,10,.5) 0%,rgba(11,10,10,.14) 26%,rgba(11,10,10,.62) 52%,rgba(11,10,10,.9) 74%,rgba(11,10,10,.97) 100%)}
}

/* 46 · LE FOTO DELLE GALLERIE, RITOCCHI SOLO DA TELEFONO (David).
   Si scelgono col contenuto (:has) e non con la posizione: se un domani la
   galleria si riordina, la regola resta attaccata alla foto giusta. */
@media (max-width:900px){
  /* la corda annodata: NIENTE zoom (David, 23/08: "troppo zoommata, torna
     indietro e mostrala bene"). Si guarda intera come le altre. */
  /* i rametti in mano: da riquadro alto a striscia bassa. La striscia taglia
     in orizzontale, quindi la mano finiva sotto al bordo: l'inquadratura si
     alza (object-position al 62% invece che al centro). */
  .xp-shot:has(img[src*="survival-08"]){grid-column:span 2;grid-row:span 1}
  .xp-shot:has(img[src*="survival-08"]) img{object-position:50% 62%}
  /* fuori il bianco e nero e il fuoco della sopravvivenza, fuori il lago del
     bootcamp: David li vuole via SOLO da telefono, da computer restano */
  .xp-shot:has(img[src*="survival-14"]),
  .xp-shot:has(img[src*="survival-15"]),
  .xp-shot:has(img[src*="bootcamp-21"]){display:none}
  /* darkness: i bendati vanno nel riquadro GRANDE e sopra, l'abbraccio in
     quello piccolo e sotto. Non basta scambiare l'ordine: la forma del
     riquadro se la porta dietro ogni foto, quindi si scambiano anche quelle,
     se no si ottiene solo di spostare i due buchi. */
  .xp-shot:has(img[src*="darkness-10"]){order:1;grid-column:span 2;grid-row:span 2}
  .xp-shot:has(img[src*="darkness-01"]){order:2;grid-column:span 2;grid-row:span 1}
}

/* 47 · CASI STUDIO: il titolo di pagina era piu' piccolo dei titoli di sezione
   della home. Da telefono si pareggia. */
@media (max-width:700px){
  .pg-title{font-size:4rem}
}

/* 48 · FORMAZIONE: il racconto sale, l'apertura aveva troppa aria sotto la
   foto (David: "tira su un po' il testo"). */
@media (max-width:900px){
  .fm-testo{margin-top:-1.4rem}
}

/* 49 · I FORMATORI IN FILE CHE CAMMINANO, SOLO DA TELEFONO (David, 23/08).
   Stessa idea dei 122 mestieri. Le pastiglie vere restano nella prima meta' di
   ogni pista (cosi' il clic apre la scheda come sempre); la seconda meta' e'
   fatta di copie che chiudono il giro. Tenendo premuto, la fila si ferma: lo
   fa site.js mettendo in pausa l'animazione. */
.mentore-file{display:none}
@media (max-width:700px){
  .mentori.a-file{overflow:visible}
  .mentori.a-file>.mentore:not(.mentore--copia){display:none}
  .mentore-file{
    display:block;
    width:var(--vw,100vw);margin-left:calc(50% - var(--vw,100vw)/2);
  }
  /* la fila SCORRE davvero: il movimento automatico lo aggiunge site.js un
     pizzico per fotogramma, e il dito ci si appoggia sopra come su qualunque
     cosa che scorre. Con un'animazione CSS il dito non poteva entrare. */
  .mentore-fila{
    overflow:hidden;
    touch-action:pan-y;cursor:grab;
  }
  .mentore-fila::-webkit-scrollbar{display:none}
  .mentore-fila:active{cursor:grabbing}
  .mentore-pista{display:flex;width:max-content;gap:.55rem;padding:.3rem 0}
  .mentore-pista .mentore{margin:0;flex:none}
  /* rete di sicurezza: se per qualunque motivo la scheda finisse dentro il
     blocco a tutta larghezza, i suoi testi arriverebbero attaccati ai due bordi
     dello schermo (e' successo, David l'ha visto). Il posto giusto glielo da'
     fineRiga in site.js; questa riga e' li' per non ricascarci. */
  .mentore-file .mentore-scheda{padding-inline:var(--pad)}
}

/* 50 · BLOG: il titolo cresce e la foto sotto si vede di piu' (David). */
@media (max-width:700px){
  .bl-hero-h{font-size:4.4rem}
  .bl-hero-bg img{opacity:.62}
}

/* 51 · IL MENU DELLE CATEGORIE SI APRIVA DI SCATTO (David: "troppo
   bruscamente"). La colpa era del max-height: da 0 a 26rem il pannello corre
   molto piu' del suo contenuto vero (circa 19rem), quindi l'ultimo tratto e'
   un salto a vuoto e l'occhio legge uno strappo. Adesso la corsa e' quella
   giusta, la curva e' quella morbida di casa e le voci entrano una dietro
   l'altra invece che tutte insieme. */
@media (max-width:700px){
  .bl-catmenu-voci{
    transition:max-height .5s var(--ease-soft),opacity .34s ease,visibility 0s linear .5s;
  }
  .bl-catmenu.is-aperto .bl-catmenu-voci{max-height:20rem}
  .bl-catvoce{
    opacity:0;transform:translateY(-6px);
    transition:opacity .3s ease,transform .3s var(--ease-soft),color .25s ease,background-color .25s ease;
  }
  .bl-catmenu.is-aperto .bl-catvoce{opacity:1;transform:none}
  .bl-catmenu.is-aperto li:nth-child(1) .bl-catvoce{transition-delay:.06s}
  .bl-catmenu.is-aperto li:nth-child(2) .bl-catvoce{transition-delay:.11s}
  .bl-catmenu.is-aperto li:nth-child(3) .bl-catvoce{transition-delay:.16s}
  .bl-catmenu.is-aperto li:nth-child(4) .bl-catvoce{transition-delay:.21s}
  .bl-catmenu.is-aperto li:nth-child(5) .bl-catvoce{transition-delay:.26s}
  .bl-catmenu.is-aperto li:nth-child(6) .bl-catvoce{transition-delay:.31s}
  @media (prefers-reduced-motion:reduce){
    .bl-catvoce{opacity:1;transform:none;transition:none}
  }
}

/* 52 · IL BOTTONE "TORNA IN CIMA" in fondo all'elenco del blog (David). */
.bl-su{display:none}
@media (max-width:900px){
  .bl-su{
    display:inline-flex;align-items:center;gap:.7rem;
    margin:2.6rem auto 0;
    font-weight:700;font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;
    color:var(--ink-70);background:none;font-family:inherit;cursor:pointer;
    border:1px solid var(--line-strong);border-radius:100px;padding:1.3em 2.2em;
    transition:color .3s ease,border-color .3s ease;
  }
  .bl-su .arr-su{color:var(--coral);font-size:1.1em;line-height:1}
  .bl-su:hover{color:var(--ink);border-color:var(--coral)}
  .bl-su-riga{display:flex;justify-content:center}
}

/* 55 · BLOG: la foto dell'apertura ancora piu' presente (David: "si vede
   ancora poco"): da .62 a .78, e il velo scuro si alleggerisce. */
@media (max-width:700px){
  .bl-hero-bg img{opacity:.78}
}

/* 56 · CONTATTI: il titolo di ogni strada cresce e la descrizione esce dal
   bottone (David: "occupano troppo spazio"). Lo spostamento vero lo fa
   site.js, perche' un testo non si tira fuori da un link col foglio di stile.
   Qui c'e' come si veste una volta uscito. */
@media (max-width:700px){
  .ct-testo{font-size:1.0625rem;line-height:1.35}
  .ct-fuori{
    display:block;margin:.7rem 0 1.9rem;padding-inline:.2rem;
    font-size:.82rem;line-height:1.6;color:var(--ink-55);
  }
  .ct-strada{margin-bottom:0}
}

/* 57 · la scheda su cui si atterra arrivando dalla vetrina si accende un
   momento, se no in mezzo a trentasette casi non si capisce qual e'. */
.caso-arrivo .cs-card{box-shadow:0 0 0 2px var(--coral),0 0 34px rgba(236,134,102,.35)}
.caso-arrivo .cs-card{transition:box-shadow .5s var(--ease-soft)}

/* ============================================================
   58 · TIPOGRAFIA DA TELEFONO: TUTTO PIU' GRANDE
   David, 24/08: "ho aperto da mobile e tutti i testi sono troppo piccoli".
   Misurato prima di toccare, a 390px: il corpo stava a 15px (il MINIMO del
   clamp del body, cioe' da telefono il sito aveva il testo piu' piccolo che
   da computer, dove sono 16,67), i testi delle recensioni 13,1, i corpi degli
   articoli 14,1, i bottoni 12, le pastiglie dei formatori 11,2, il "Leggi"
   dell'elenco del blog 9,9.
   QUI SI ALZA TUTTO IN UN COLPO SOLO, con una scala unica: il corpo va a 17px
   e nessun testo di lettura resta sotto i 13.
   VALE SOLO SOTTO I 900px: da computer non cambia un pixel (David: "il
   computer e' assolutamente perfetto").
   ============================================================ */
@media (max-width:900px){

  /* il corpo. Da qui ereditano .lead, i paragrafi delle sezioni, .fil-arg e
     tutto quello che e' scritto in em: alzando questo si alzano loro. */
  body{font-size:17px;line-height:1.72}

  /* i testi lunghi di lettura: articoli, storia, pagine legali.
     Erano .9375em, cioe' sempre un filo sotto al corpo. Adesso pari al corpo. */
  .art p,.art li,.storia-txt p,.legal p,.legal li{font-size:1em}
  .art blockquote{font-size:1.15em}

  /* etichette e occhielli: sotto i 12px non si leggono */
  .sec-label{font-size:.8rem;letter-spacing:.3em}
  .eyebrow,.pg-badge,.art-kick,.art-meta,.bl-kick,.due-kick,.vc-kick,.kick,
  .xp-kick,.art-next-eti,.bl-hero-p{font-size:.8rem}

  /* bottoni: erano 12px, e i piu' piccoli 10,9 */
  .btn{font-size:.85rem;letter-spacing:.16em}
  .art-io-btn .btn{font-size:.8rem}
  .cs-vedi,.due-btn,.vc-btn,.bl-su,.xp-btn{font-size:.84rem}

  /* recensioni (home ed experience) */
  .dico-txt{font-size:.92em}
  .dico-name{font-size:.95rem;letter-spacing:0}
  .dico-role{font-size:.82rem}
  .dico-stars{font-size:.95rem}
  .rec-nota{font-size:.85rem}

  /* videocorsi ed ebook */
  .vc-txt{font-size:.97rem;line-height:1.6}
  .vc-nome{font-size:.9rem}

  /* newsletter e modulo */
  .nl-lab{font-size:.82rem}
  .nl-form-t{font-size:.82rem}

  /* le professioni che scorrono, il metodo, il piede */
  .c1,.c2,.c3{font-size:.88rem}
  .etico-name{font-size:.85rem}
  .disclaimer,.pg-fonti{font-size:.82rem}
  .ftr-tag,.ftr-nav a,.ftr-legal,.ftr-legal a,.ftr-copy{font-size:.8rem}

  /* blog: elenco e schede */
  .bl-txt{font-size:.95rem;line-height:1.6}
  .bl-more{font-size:.82rem}
  .bl-cerca-lab{font-size:.82rem}

  /* casi studio */
  .cs-ruolo{font-size:.93rem}
  .cs-ig{font-size:.85rem}
  .due-nota{font-size:.95rem}

  /* chi e' David Valmori */
  .ris-role{font-size:.9rem}
  .ris-note{font-size:.82rem}
  .met-txt,.met-name,.tl-txt,.nota{font-size:.95rem}
  .pg-scheda dt{font-size:.8rem}
  .pg-scheda dd{font-size:.95rem}
  figcaption{font-size:.82rem}

  /* formazione */
  .att-txt{font-size:.95rem;line-height:1.65}
  .att-with{font-size:.88rem}

  /* experience e contatti */
  .xp-firma{font-size:.95rem}
  .ct-desc,.ct-fuori{font-size:.9rem}
  .ct-chi{font-size:.88rem}
  .ct-dove{font-size:.82rem}
}

/* 59 · SECONDO GIRO DELLA TIPOGRAFIA DA TELEFONO.
   Dopo il blocco 58 ho rimisurato pagina per pagina: questi erano rimasti
   indietro perche' la loro misura la scrive un selettore piu' forte
   (.cloud-file span batte .c1, .strada .kick batte .kick, e cosi' via).
   Regola imparata: non basta scrivere la classe, va scritta con lo stesso
   peso di chi comanda oggi. */
@media (max-width:900px){
  .cloud-file span{font-size:.88rem}      /* i 122 mestieri che scorrono */
  .strada .kick{font-size:.8rem}          /* occhielli delle quattro card */
  .strada .desc > span{font-size:1rem}    /* descrizione dentro le card */
  .ftr-btm{font-size:.8rem}               /* riga della partita IVA */
  .hero-role-sub{font-size:.84rem}        /* sottotitolo sotto al nome */
  .nl-nota{font-size:1rem}                /* "niente spam, solo valore" */
  .art-io-riga{font-size:1rem}            /* il piede degli articoli */
  .sec--ue .lead{font-size:1rem}          /* blocco europeo */
  .hero-meta .n,.ftr-btm .n{font-size:1rem}
}

/* 60 · TERZO GIRO: gli ultimi rimasti sotto i 13px.
   Stessa storia del blocco 59: la misura la scriveva un selettore piu' forte
   (.frame figcaption, .sheet-row dt) oppure non c'era proprio una classe. */
@media (max-width:900px){
  .mentore{font-size:.88rem}                    /* le 59 pastiglie dei formatori */
  .frame figcaption,.art-fig figcaption{font-size:.82rem;letter-spacing:.16em}
  .sheet-row dt{font-size:.82rem}
  .sheet-row dd{font-size:.95em}
  .hero-meta span,.hero-scorri,.scroll-hint span{font-size:.82rem}
}

/* 61 · QUARTO GIRO: quello che l'ingrandimento aveva stretto troppo.
   Misurato a 390, 360 e 320 dopo i blocchi 58-60. Due guai veri, tutti e due
   sugli schermi piu' stretti:
   1. I BOTTONI USCIVANO DALLO SCHERMO. Sono a riga unica (white-space:nowrap):
      a 360 "Scopri l'evento dal vivo" arrivava a 363 su 360 disponibili, a 320
      sforava di 21px. Non e' il corpo del testo a pesare, e' la SPAZIATURA
      DELLE LETTERE: a .22em ogni carattere si porta dietro quasi un quarto di
      se stesso. Stringendola a .13em il bottone e' piu' stretto di prima
      ANCHE col testo piu' grande (9,02px per carattere contro i 9,24 di
      quando il testo era 12px).
   2. I NOMI DELLE RECENSIONI TORNAVANO NEI PUNTINI ("Angelo Gabriele
      Epifani", "Estefani Carneiro Da Silva"). La card e' larga fissa e il nome
      sta su una riga sola: la misura non puo' essere fissa, deve seguire la
      larghezza dello schermo. */
@media (max-width:430px){
  .btn{font-size:min(.85rem,3.4vw);letter-spacing:.13em;padding-inline:1.5em}
  .cs-vedi,.due-btn,.vc-btn,.xp-btn,.bl-su{font-size:min(.84rem,3.3vw)}
}
@media (max-width:900px){
  .dico-name{font-size:clamp(.8rem,3.7vw,.95rem)}
}

/* ============================================================
   62 · LA PAGINA DEI LINK (link.html)
   Il taplink della bio di Instagram. Secondo giro, con le otto cose chieste
   da David: bordo lucido come i bottoni del sito attuale, nessun bottone
   pieno, fondo dei bottoni trasparente, tre sfumature salmone di sottofondo,
   la foto dell'aula da bordo a bordo e sfumata in cima, la dicitura europea,
   il separe' con la V e la sua foto che si intravede nell'apertura.
   Prefisso .lk- (il .tl- era gia' preso dalla linea del tempo di "Chi e'
   David Valmori").

   COME SONO IMPILATI I PIANI, dal fondo verso l'alto:
   0. .lk-hero-bg  la foto di David
   1. .lk-glow     le tre sfumature salmone (David: la foto sta SOTTO)
   2. il contenuto (main, la foto dell'aula, il piede)
   ============================================================ */
.lk-page{background:var(--bg);position:relative;overflow-x:clip}
.lk{
  position:relative;z-index:2;
  max-width:560px;margin:0 auto;
  /* il logo parte piu' in alto (David): erano 38px dal bordo, adesso 24 */
  padding:clamp(1.5rem,4.6vw,2.4rem) clamp(1.25rem,5vw,2rem) 0;
}

/* --- la foto di David dietro all'apertura --- */
.lk-hero-bg{
  /* scesa di 10px (David). La maschera in cima parte comunque da trasparente,
     quindi il bordo alto della foto non si vede mai come una riga netta. */
  position:absolute;top:10px;left:50%;transform:translateX(-50%);
  width:min(620px,100%);height:min(760px,86vh);z-index:0;
  pointer-events:none;
}
.lk-hero-bg::after{
  /* IL NERO CHE AIUTA A LEGGERE (David): sta SOPRA la foto ma SOTTO le
     sfumature salmone, che restano dove sono. Serve perche' la foto nuova e'
     chiara (la parete di legno accesa) e il logo ci si perdeva dentro. */
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(10,10,11,.86) 0%,rgba(10,10,11,.62) 26%,rgba(10,10,11,.2) 52%,transparent 78%);
}
.lk-bg-sx{display:none}
.lk-hero-bg img{
  width:100%;height:100%;object-fit:cover;object-position:50% 16%;
  opacity:.3;
  /* niente bordi netti da nessun lato: la maschera tonda spegne i fianchi e
     il basso, quella dritta spegne anche la riga in cima. Le due si
     moltiplicano (intersect), se no il bordo alto resta tagliato netto:
     ci sono cascato al primo giro e da computer si vedeva benissimo. */
  -webkit-mask-image:
    radial-gradient(122% 80% at 50% 36%,#000 36%,transparent 84%),
    linear-gradient(to bottom,transparent 0%,#000 14%,#000 62%,transparent 100%);
  -webkit-mask-composite:source-in;
  mask-image:
    radial-gradient(122% 80% at 50% 36%,#000 36%,transparent 84%),
    linear-gradient(to bottom,transparent 0%,#000 14%,#000 62%,transparent 100%);
  mask-composite:intersect;
}
@media (min-width:901px){
  .lk-hero-bg::after{
  /* IL NERO CHE AIUTA A LEGGERE (David): sta SOPRA la foto ma SOTTO le
     sfumature salmone, che restano dove sono. Serve perche' la foto nuova e'
     chiara (la parete di legno accesa) e il logo ci si perdeva dentro. */
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(10,10,11,.86) 0%,rgba(10,10,11,.62) 26%,rgba(10,10,11,.2) 52%,transparent 78%);
}
.lk-hero-bg img{opacity:.24}
}

/* --- le tre sfumature salmone --- */
.lk-glow{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    /* in alto a sinistra */
    radial-gradient(460px 380px at 4% 0%,rgba(236,134,102,.34),transparent 72%),
    /* a meta' pagina, sulla destra */
    radial-gradient(420px 520px at 102% 50%,rgba(236,134,102,.24),transparent 74%),
    /* leggera, sul piede */
    radial-gradient(760px 300px at 50% 100%,rgba(236,134,102,.14),transparent 76%);
}

/* --- intestazione --- */
.lk-testa{text-align:center;position:relative}
.lk-logo{width:min(280px,72vw);height:auto;margin:0 auto}
.lk-role{
  margin-top:1.5rem;font-size:.82rem;font-weight:500;text-wrap:balance;
  letter-spacing:.14em;text-transform:uppercase;color:var(--coral);
  line-height:1.7;
}
.lk-claim{
  /* e si stacca dalla riga sopra: 16px erano pochi, il blocco sembrava uno */
  margin-top:2.1rem;color:var(--ink-70);line-height:1.62;text-wrap:balance;
  max-width:34ch;margin-inline:auto;
}
.lk-claim strong{color:var(--ink);font-weight:700}

/* --- i bottoni: fondo trasparente e bordo lucido --- */
.lk-btns{margin-top:clamp(2.4rem,6.5vw,3.2rem)}
.lk-btn{
  position:relative;z-index:0;display:block;
  padding:1.25rem 3rem 1.3rem 1.5rem;border-radius:12px;
  /* il fondo lascia intravedere quello che c'e' sotto (David) */
  background:rgba(255,255,255,.055);
  -webkit-backdrop-filter:blur(9px) saturate(120%);
  backdrop-filter:blur(9px) saturate(120%);
  color:var(--ink);
  box-shadow:0 4px 20px rgba(108,58,0,.28);
  transition:background-color .32s var(--ease-soft),transform .32s var(--ease-soft),
             box-shadow .32s var(--ease-soft);
}
/* IL BORDO LUCIDO. E' la stessa ricetta dei bottoni del sito attuale
   (letta dal vivo su davidvalmori.com): un gradiente a 45 gradi tutto salmone
   con UNA fascia bianca in mezzo, largo quattro volte il bottone, che scorre
   in venti secondi. Li' il centro lo copre un fondo pieno; qui il fondo deve
   restare trasparente, quindi il gradiente viene ritagliato a cornice con due
   maschere in sottrazione: resta solo la riga di bordo. */
.lk-btn::before{
  content:"";position:absolute;inset:0;border-radius:inherit;padding:2.4px;
  background:linear-gradient(45deg,
    var(--coral),var(--coral),var(--coral),var(--coral),var(--coral),
    #ffffff,
    var(--coral),var(--coral),var(--coral),var(--coral),var(--coral));
  background-size:400% 400%;
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;
          mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
          mask-composite:exclude;
  pointer-events:none;
}
/* IL RIFLESSO CHE CAMMINA CE L'HA SOLO IL PRIMO (David): gli altri due tengono
   il bordo salmone e basta, cosi' l'occhio va dove deve andare. */
.lk-btn--brilla::before{animation:lk-lucido 20s linear infinite}
.lk-btn:not(.lk-btn--brilla)::before{
  background:var(--coral);background-size:auto;
}
@keyframes lk-lucido{
  0%{background-position:0% 0%}
  50%{background-position:400% 0%}
  100%{background-position:0% 0%}
}
@media (prefers-reduced-motion:reduce){
  .lk-btn::before{animation:none}
}
.lk-t{
  display:block;font-family:var(--font-display);font-weight:400;
  font-size:1.7rem;line-height:1.04;letter-spacing:.02em;text-transform:uppercase;
}
.lk-s{
  display:block;margin-top:.5rem;text-wrap:balance;
  font-size:.965rem;line-height:1.5;color:var(--ink-55);
}
.lk-arr{
  position:absolute;right:1.35rem;top:50%;transform:translateY(-50%);
  font-size:1.1rem;color:var(--coral);
  transition:transform .32s var(--ease-soft);
}
.lk-btn + .lk-btn{margin-top:1rem}
/* ENTRANO UNO DOPO L'ALTRO (David: "così sono fermi, sono tristi").
   Sono in cima alla pagina, quindi non serve aspettare che entrino in vista:
   partono all'apertura, con un pizzico di ritardo l'uno dall'altro. */
html.js .lk-btn{animation:lk-entra 1.05s var(--ease-soft) both}
html.js .lk-btn:nth-of-type(1){animation-delay:.2s}
html.js .lk-btn:nth-of-type(2){animation-delay:.34s}
html.js .lk-btn:nth-of-type(3){animation-delay:.48s}
html.js .lk-sep{animation:lk-entra 1.05s var(--ease-soft) both;animation-delay:.28s}
/* piu' lunga e con meno strada da fare: dieci pixel e un filo di scala, cosi'
   e' un affiorare invece di un salto (David: "piu' elegante e meno scattosa") */
@keyframes lk-entra{
  from{opacity:0;transform:translateY(10px) scale(.988)}
  to{opacity:1;transform:none}
}
@media (prefers-reduced-motion:reduce){
  html.js .lk-btn,html.js .lk-sep{animation:none}
}
@media (hover:hover){
  .lk-btn:hover{
    background:rgba(255,255,255,.09);transform:translateY(-2px);
    box-shadow:0 8px 26px rgba(108,58,0,.38);
  }
  .lk-btn:hover .lk-arr{transform:translateY(-50%) translateX(4px)}
}
.lk-btn:active{transform:translateY(0)}

/* il separe': piu' aria sopra e sotto, e una V che punta in basso (David) */
.lk-sep{display:flex;align-items:center;gap:1.1rem;margin:2.9rem .4rem}
.lk-sep span{flex:1;height:2px;background:var(--line-strong);border-radius:2px}
.lk-sep svg{width:26px;height:15px;flex:none;display:block}

/* --- striscione europeo --- */
.lk-ue{
  margin-top:clamp(2.8rem,7.5vw,3.6rem);padding:1.8rem 1.4rem;
  background:rgba(255,255,255,.04);
  -webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px);
  border:1px solid var(--line-soft);border-radius:12px;
  text-align:center;
}
.lk-ue-badge{width:min(340px,86%);height:auto;margin:0 auto}
.lk-ue-txt{
  margin-top:1.2rem;font-size:.88rem;line-height:1.65;color:var(--ink-70);
  text-align:left;      /* a bandiera a sinistra: cosi' e' in ordine (David) */
}
.lk-ue-link{
  display:inline-block;margin-top:1rem;
  font-size:.8rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--coral);border-bottom:1px solid var(--coral-35);padding-bottom:.2rem;
  transition:border-color .3s ease;
}
.lk-ue-link:hover{border-bottom-color:var(--coral)}

/* --- la foto dell'aula: da bordo a bordo e sfumata in cima ---
   Sta FUORI dalla colonna, quindi e' larga quanto il corpo della pagina:
   niente 100vw, che con la barra di scorrimento aprirebbe uno spostamento
   laterale (regola di ferro del sito). */
.lk-foto{position:relative;z-index:2;margin-top:clamp(2.6rem,7vw,3.4rem)}
.lk-foto img{
  width:100%;height:auto;display:block;
  -webkit-mask-image:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.55) 16%,#000 42%);
  mask-image:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.55) 16%,#000 42%);
}

/* --- piede --- */
.lk-ftr{
  position:relative;z-index:2;
  padding:2.4rem clamp(1.25rem,5vw,2rem) 2.8rem;text-align:center;
}
.lk-ftr-logo{width:min(220px,60vw);height:auto;margin:0 auto 1.5rem}
.lk-ftr-copy{margin-top:0;font-size:.8rem;color:var(--ink-55);line-height:1.6}
.lk-ftr-nav{margin-top:1.1rem;display:flex;justify-content:center;gap:2.2rem;flex-wrap:wrap}
.lk-ftr-nav a{
  font-size:.85rem;color:var(--ink-70);
  border-bottom:1px solid transparent;padding-bottom:.15rem;
  transition:color .3s ease,border-color .3s ease;
}
.lk-ftr-nav a:hover{color:var(--coral);border-bottom-color:var(--coral-35)}

/* schermi stretti: il titolo del bottone non deve mai finire sotto la freccia */
@media (max-width:400px){
  .lk-btn{padding:1.15rem 2.6rem 1.2rem 1.25rem}
  .lk-t{font-size:1.5rem}
  .lk-s{font-size:.9rem}
}

/* ============================================================
   63 · IL GIRO DEL 24/08 DA TELEFONO (David, venticinque punti)
   Qui stanno le misure; quello che si muove sta in site.js.
   Tutto sotto i 900px: da computer non cambia niente.
   ============================================================ */
@media (max-width:900px){

  /* 1 e 19 · I TITOLI DELLE SEZIONI SONO PIU' GRANDI, E TUTTI UGUALI.
     "Da timido e introverso a formatore" stava a 47,2px; adesso 57,6, che e'
     la misura che David aveva gia' scelto per il titolo della sezione 15.
     Chi ha una misura sua (il titolo del blog, quello dei casi studio, i
     titoli di pagina) resta dov'e': quelli sono gia' piu' grandi. */
  .h-display{font-size:3.6rem}

  /* 5 · FILOSOFIA: aria fra la firma "David Valmori" e il testo sotto
     (David: "troppo appiccicato"). */
  .fil-basso{margin-top:2.6rem}

  /* 6 · IL TITOLO DELLE NICCHIE respira sopra e sotto */
  .nicchie{margin-top:clamp(3.6rem,9vw,5rem);padding-bottom:2.2rem}
  .nicchie-h{margin-block:.6rem 1.4rem}

  /* 9 · fra le file dei mestieri e la V che chiude la sezione ci vuole aria */
  .cloud-file{margin-block:3.1rem 4.2rem}

  /* 12 · I TITOLI DENTRO I PANNELLI (Professionista Libero, Coaching
     individuale, Videocorsi & Masterclass) erano 24px */
  .vc-tit{font-size:1.9rem}

  /* 24 · i titoli degli articoli nella sezione blog della home */
  .con-name{font-size:1.2rem;line-height:1.25}

  /* 25 · NEWSLETTER: la distanza fra "La newsletter" e il titolo era meta' di
     quella di tutte le altre sezioni (1,1rem contro 2,35): pareggiata. */
  .nl-sec .sec-head{margin-bottom:clamp(2.35rem,5.1vw,3.8rem)}
}

/* ============================================================
   64 · LA MIA STORIA, DA TELEFONO (David, 24/08)
   ============================================================ */
@media (max-width:900px){

  /* 2a · VIA LA FOTO DI SOTTOFONDO CON LA CHITARRA (David). Era lo sfondo del
     capitolo 2016, riacceso apposta il 23/08: adesso non la vuole piu'. */
  #cap-2016 .storia-bg{display:none}

  /* 2b · LE CORNICI ERANO ENORMI: misurate, 391px di larghezza su uno schermo
     da 390, cioe' da bordo a bordo, fuori dalla colonna di lettura.
     Adesso stanno dentro la colonna e sono centrate. Vale anche per le due
     cornici col filmato (2019 e oggi). */
  .storia-ph .frame{width:min(300px,86vw);margin-inline:auto}
  #cap-2018 .frame--clip,#cap-2019 .frame--clip{width:min(300px,86vw);margin-inline:auto}

  /* 2c · NON DEVONO PENDERE TUTTE DALLA STESSA PARTE (David: "quella con la
     cupola di Gerusalemme e quella sotto pendono allo stesso modo, stona").
     La seconda coppia si inclina dalla parte opposta. */
  html.js #cap-2019 .storia-ph--duo .frame--clip.rev{transform:translateY(26px) rotate(1.6deg)}
  html.js #cap-2019 .storia-ph--duo .frame--clip.rev.in{transform:rotate(1.6deg)}
  #cap-2019 .frame--clip{transform:rotate(1.6deg)}

  /* 4 · LE SFUMATURE DEGLI SFONDI DEVONO ESSERE TONDE, NON LUNGHE (David,
     sulla sezione 2024). La maschera era un'ellisse: `closest-side` da solo,
     su un'immagine larga il doppio di quanto e' alta, disegna un ovale
     schiacciato che sembra una striscia. Con `circle` il raggio e' uno solo.
     E la foto del 2024 era la piu' larga di tutte: 620px su uno schermo da
     390. Adesso sta nella misura delle altre. */
  .storia-cap--bg .storia-bg img{
    -webkit-mask-image:radial-gradient(circle closest-side at 50% 44%,#000 52%,rgba(0,0,0,.45) 80%,transparent 100%);
    mask-image:radial-gradient(circle closest-side at 50% 44%,#000 52%,rgba(0,0,0,.45) 80%,transparent 100%);
  }
  #cap-2024 .storia-bg img{width:min(96vw,460px)}
}

/* ============================================================
   65 · EXPERIENCE, DA TELEFONO (David, 24/08)
   ============================================================ */
/* le due parole che David vuole in salmone dentro il motto */
.xp-motto em{font-style:normal;color:var(--coral)}

@media (max-width:900px){
  /* 15 · "EXPERIENCE" ANCORA PIU' GRANDE. Il tetto vero non e' il gusto, e' la
     colonna: la parola e' larga 3,67px per ogni px di corpo, quindi a 89,6
     occupava 329 dei 342 disponibili. Per crescere ancora bisogna prima
     allargare il posto: il titolo esce dal respiro laterale della scena e si
     prende quasi tutto lo schermo, e la misura segue la larghezza (25,5vw),
     cosi' su ogni telefono resta dentro senza toccare i bordi. */
  .xp-scene--hero .xp-h{
    font-size:min(6.2rem,25.5vw);line-height:.88;letter-spacing:0;
    margin-inline:-.9rem;
  }

  /* 19 · i titoli delle scene erano 48px contro i 57,6 dei titoli di sezione
     della home: pareggiati, cosi' fra le pagine c'e' una misura sola. */
  /* TRAPPOLA, ci sono cascato subito: `.xp-scene .xp-h:not(...)` pesa tre
     classi e batteva `.xp-scene--hero .xp-h` che ne pesa due, cosi' anche
     "EXPERIENCE" era tornato a 57,6. L'hero va escluso a mano. */
  .xp-scene:not(.xp-scene--hero) .xp-h:not(.xp-gate-h){font-size:3.6rem;line-height:.98}
}

/* ============================================================
   66 · FORMAZIONE (David, 24/08)
   ============================================================ */
/* 20b · la riga che spiega come si usano le pastiglie dei formatori */
.fm-invito{
  color:var(--ink-55);margin-bottom:2.9rem;text-align:center;
  font-size:.95rem;line-height:1.5;
}
@media (max-width:900px){
  /* 20a · VIA IL RITRATTO IN CIMA (David: "togli la mia foto in cima").
     Da computer resta dov'e': la pagina li' e' impaginata su tre colonne. */
  .fm-apre .fm-foto{display:none}
  .fm-invito{margin-bottom:2.2rem}
}

/* ============================================================
   67 · IL SECONDO GIRO DEL 24/08 (David, diciotto punti)
   ============================================================ */

/* 6 · IL MENU DIVENTA UN VETRO SCURO: si intravede la pagina sotto, ma
   sfocata. Il fondo pieno diventa quasi trasparente e la sfocatura fa il
   resto; resta scurissimo, se no le voci bianche non si leggerebbero.
   Se il browser non sa sfocare (vecchio Android), il fondo torna pieno:
   meglio opaco che illeggibile. */
@media (max-width:900px){
  html.js .hdr-nav{background:rgba(10,10,11,.72)}
  @supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
    html.js .hdr-nav{
      background:rgba(10,10,11,.58);
      -webkit-backdrop-filter:blur(22px) saturate(130%);
      backdrop-filter:blur(22px) saturate(130%);
    }
  }
  @supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
    html.js .hdr-nav{background:#0a0a0b}
  }
}

/* 16 · dentro il visore delle foto il pizzicotto non deve fare niente */
#lb{touch-action:none}
#lb img{touch-action:none}

@media (max-width:900px){

  /* 1 · NEWSLETTER: il titoletto del modulo era 13,12px e il primo campo gli
     stava addosso (11px). Adesso 15,2px e 26px di stacco. */
  .nl-form-t{font-size:.95rem;line-height:1.45;margin-bottom:1.6rem}

  /* 2 · FOOTER: aria fra il marchio e la riga sotto (erano 19px) */
  .ftr-logo{margin-bottom:.85rem}

  /* 3a · LA MIA STORIA: i titoli dei capitoli ("2019 · Posso fare il
     videomaker") erano 25,6px, cioe' meno della meta' dei titoli di sezione. */
  .storia-kick{font-size:2.2rem;line-height:1.04}

  /* 5 · FORMAZIONE: il titolo finiva sotto la barra fissa. La prima sezione
     della pagina parte da zero: qui si scosta di quanto serve. */
  .fm-apre-sec{padding-top:6.4rem}

  /* 9 · "Diventa un professionista libero" era 47,2 contro i 57,6 di
     "Newsletter Vendita Etica" (comanda l'id #candidati, che batte la classe). */
  #candidati .cta-title{font-size:3.6rem}

  /* 10 · FILOSOFIA: ancora piu' aria fra la firma e il testo (erano 42px) */
  .fil-basso{margin-top:4.4rem}

  /* 11 · il titolo delle nicchie cresce e si avvicina alle file dei ruoli */
  .nicchie-h{font-size:2.6rem;margin-block:.6rem .9rem}
  .nicchie{padding-bottom:.6rem}
  .cloud-file{margin-block:1.6rem 4.2rem}

  /* 15 · EXPERIENCE: "Per crescere come professionista" era 41,6px, cioe' piu'
     piccolo di "Faccia a faccia coi tuoi limiti". Adesso sono uguali. */
  .xp-gate-h{font-size:3.6rem;line-height:.98}

  /* 18 · anche "Tutto comincia da Professionista Libero" e' un titolo di
     pagina: stava fuori dalle scene (.xp-end) e la regola non lo prendeva. */
  .xp-end .xp-h{font-size:3.6rem;line-height:.98}
}

/* 3b e 4 · LE DUE CORNICI INCLINATE ENTRANO DI LATO, E OGNUNA PER CONTO SUO
   (David: l'articolo "da destra a sinistra", Loredana "da sinistra a destra").
   Prima salivano tutt'e due dal basso, insieme.
   Le inclinazioni sono opposte fra loro, cosi' non pendono mai allo stesso
   modo: l'articolo del 2018 verso destra, Loredana verso sinistra. */
@media (max-width:900px){
  html.js #cap-2018 .storia-ph--duo .frame--clip.rev{
    opacity:0;transform:translateX(64px) rotate(1.6deg);
    transition:opacity .85s var(--ease-soft),transform .85s var(--ease-soft);
    transition-delay:.42s;
  }
  html.js #cap-2018 .storia-ph--duo .frame--clip.rev.in{opacity:1;transform:rotate(1.6deg)}
  #cap-2018 .frame--clip{transform:rotate(1.6deg)}

  html.js #cap-2019 .storia-ph--duo .frame--clip.rev{
    opacity:0;transform:translateX(-64px) rotate(-1.6deg);
    transition:opacity .85s var(--ease-soft),transform .85s var(--ease-soft);
    /* entra un secondo dopo: se arriva subito copre la foto sotto e quella
       non si vede mai (David, 24/08) */
    transition-delay:1.05s;
  }
  html.js #cap-2019 .storia-ph--duo .frame--clip.rev.in{opacity:1;transform:rotate(-1.6deg)}
  #cap-2019 .frame--clip{transform:rotate(-1.6deg)}
}

/* ============================================================
   68 · TERZO GIRO DEL 24/08 (David, dodici punti)
   ============================================================ */

/* 8a · IL MENU: vetro scuro che non sparisce, e un'entrata meno banale.
   DUE COSE IMPARATE:
   1. LA SFOCATURA SPARIVA APPENA IL DITO SI MUOVEVA. Su iPhone il filtro
      messo sull'elemento agganciato alla finestra viene mollato da Safari
      appena c'e' un gesto di scorrimento. Adesso il vetro non e' piu' il
      pannello: e' un suo strato interno (::before), che non e' agganciato a
      niente e quindi non viene ricalcolato.
   2. LA SFOCATURA ERA TROPPA: da 26 a 14px (David).
   L'entrata non e' piu' una dissolvenza secca: il vetro si apre, e le voci
   salgono una dopo l'altra, sei centesimi l'una dall'altra. Uscendo se ne
   vanno tutte insieme, subito: nessuno vuole aspettare un menu che si chiude. */
@media (max-width:900px){
  html.js .hdr-nav{background:rgba(10,10,11,.9)}
  @supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
    html.js .hdr-nav{background:transparent}
    html.js .hdr-nav::before{
      content:"";position:absolute;inset:0;z-index:-1;
      background:rgba(10,10,11,.8);
      -webkit-backdrop-filter:blur(5px) saturate(112%);
      backdrop-filter:blur(5px) saturate(112%);
      transform:translateZ(0);
    }
  }
  /* le voci entrano a cascata */
  html.js .hdr-nav a{
    opacity:0;transform:translateY(16px);
    transition:opacity .24s var(--ease-soft),transform .32s var(--ease-soft);
  }
  html.js .hdr-nav.open a{opacity:1;transform:none}
  html.js .hdr-nav.open a:nth-of-type(1){transition-delay:0.040s}
  html.js .hdr-nav.open a:nth-of-type(2){transition-delay:0.075s}
  html.js .hdr-nav.open a:nth-of-type(3){transition-delay:0.110s}
  html.js .hdr-nav.open a:nth-of-type(4){transition-delay:0.145s}
  html.js .hdr-nav.open a:nth-of-type(5){transition-delay:0.180s}
  html.js .hdr-nav.open a:nth-of-type(6){transition-delay:0.215s}
  html.js .hdr-nav.open a:nth-of-type(7){transition-delay:0.250s}
  html.js .hdr-nav.open a:nth-of-type(8){transition-delay:0.285s}
  html.js .hdr-nav.open a:nth-of-type(9){transition-delay:0.320s}
  @media (prefers-reduced-motion:reduce){
    html.js .hdr-nav a{transition:none;opacity:1;transform:none}
  }
}

@media (max-width:900px){
  /* 1 · LA CORNICE COL FILMATO DEL 2019 STA FERMA (David: "non deve avere
     animazione, sta fissa con il video che va perennemente in loop"). */
  #cap-2019 .storia-ph .frame--ferma{
    opacity:1;transform:none;transition:none;animation:none;
  }

  /* 4 · AVEVO SPOSTATO LA FOTO SBAGLIATA. Quella con la videocamera in mano e'
     la BIANCO E NERO (storia-2019-videomaker) e deve restare dov'era: qui non
     si tocca piu'. Quella a colori (storia-2019-bg, David accosciato con la
     videocamera e il microfono) era l'altra di sottofondo, e David la vuole
     via da telefono. */
  #cap-2019 .storia-bg:not(.storia-bg--sx){display:none}

  /* 6 · la foto a luce soffusa del 2021 sale di 85px (60 piu' altri 25) */
  #cap-2021 .storia-bg img{transform:translateY(-85px)}

  /* 7 · la foto in cui David versa l'acqua in faccia sale in tutto di 170px */
  #cap-oggi .storia-bg:not(.storia-bg--sx) img{transform:translateY(-170px)}

  /* 2 · IL CAPITOLO 2019 NON ENTRA PIU' IN DISSOLVENZA TUTTO INSIEME.
     La cornice col filmato continuava a comparire in dissolvenza anche se
     "ferma": l'opacita' non gliela metteva lei, gliela metteva il CAPITOLO,
     che e' .rev. Un figlio non puo' disfare l'opacita' del padre, quindi si
     spegne l'entrata del padre e restano quelle dei figli (i tre paragrafi e
     la cornice di Loredana). */
  html.js #cap-2019.rev,html.js #cap-2019.rev.in{opacity:1;transform:none;transition:none}

  /* 1 · LA HERO: il blocco di testo scende e le foto respirano (David: "sul
     fondo c'e' dello spazio nero che possiamo recuperare").
     Il nero recuperato stava in tre posti: l'apertura si fermava al 92% dello
     schermo, sotto al bottone c'erano 42px e la riga finale ne occupava 147.
     Adesso l'apertura prende tutta l'altezza vera della finestra (100svh, che
     tiene gia' conto delle barre di Safari). */
  .hero2{min-height:100svh}
  .hero2-ctas{margin-bottom:1.1rem}
  .hero2 .hero-meta{padding-block:.75rem}
  /* il numero e la riga stanno insieme: con flex-basis:auto il testo pretende
     la sua larghezza intera e spingeva "01" su una riga tutta sua. Con 0 si
     stringe e va a capo dentro di se'. */
  .hero2 .hero-meta>span:nth-child(2){flex:1 1 0}
}

/* 10 · DA COMPUTER: "Diventa un professionista libero" era 70,4px mentre tutti
   gli altri titoli della home sono 84. Pareggiato (David: "sì, portalo a 84"). */
@media (min-width:901px){
  #candidati .cta-title{font-size:5.25rem}
}

/* 9 · lo zoom della foto dentro il visore: il browser non ci mette mano
   (touch-action:none), lo facciamo noi con un transform sulla foto. */
#lb{touch-action:none}
#lb-img{
  touch-action:none;
  transform-origin:50% 50%;
  will-change:transform;
}
/* la transizione SOLO quando la mettiamo noi (doppio tocco, ritorno): durante
   il pizzico deve seguire il dito senza un decimo di ritardo */
#lb-img.anima{transition:transform .24s var(--ease-soft)}
#lb.ingrandita .lb-prec,#lb.ingrandita .lb-succ{opacity:.25}

/* ============================================================
   69 · TAPLINK, secondo giro (David, 24/08) + DA COMPUTER
   ============================================================ */

/* 5 · LA ® DI "PROFESSIONISTA LIBERO" era enorme e appoggiata a terra: in
   Bebas il simbolo eredita il corpo del titolo, cioe' 27px. Adesso e' un terzo,
   sta in alto e appena staccata dal vertice della O. */
.lk-o{position:relative;display:inline-block}
.lk-reg{
  position:absolute;top:-.12em;right:-.92em;
  font-size:.3em;line-height:1;letter-spacing:0;
  font-family:var(--font-body);font-weight:500;
}

/* 7 · LA FOTO DELL'AULA: la sfumatura in cima e' piu' lunga e il riquadro
   europeo ci finisce leggermente sopra. */
/* la foto si avvicina, ma il riquadro europeo non ci si appoggia sopra:
   fra i due resta un dito d'aria (David: "crea un po' di confusione") */
.lk-foto{margin-top:-1.2rem;padding-top:0}
.lk-foto img{
  -webkit-mask-image:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.28) 18%,rgba(0,0,0,.7) 38%,#000 58%);
  mask-image:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.28) 18%,rgba(0,0,0,.7) 38%,#000 58%);
}
.lk-ue{position:relative;z-index:3}

/* 8 · DA COMPUTER. La pagina nasce per il telefono, ma se qualcuno ha
   Instagram sul computer si apre li': la colonna resta stretta e centrata
   (un taplink largo mille pixel non e' un taplink), pero' tutto respira di
   piu' e il vetro dei bottoni si vede meglio, perche' sotto c'e' la foto. */
@media (min-width:901px){
  /* DA COMPUTER (secondo giro, David).
     La colonna resta al centro, ma i bottoni si allungano e si ammorbidiscono,
     la foto prende tutto lo schermo e le sfumature salmone diventano larghe e
     appena accennate: da vicino il taplink deve sembrare una pagina, non un
     elenco di rettangoli. */
  .lk{max-width:680px;padding-top:clamp(2.4rem,5vh,3.8rem);min-height:auto}
  /* 1 · DUE FOTO, UNA PER LATO (David). Ognuna occupa la sua meta' e si
     spegne verso il centro, dove passa la colonna dei bottoni: non si
     sovrappongono mai, si incontrano nel nero. Le maschere sono due e si
     moltiplicano (intersect): una orizzontale che spegne verso il centro, una
     verticale che spegne in basso, cosi' nessun bordo resta netto. */
  .lk-hero-bg{width:100%;max-width:none;height:min(900px,92vh);left:0;transform:none}
  .lk-hero-bg img{position:absolute;top:0;height:100%;width:52%;opacity:.34}
  .lk-bg-dx{
    right:0;left:auto;object-position:46% 40%;   /* David di spalle sta al centro della sua foto */
    -webkit-mask-image:linear-gradient(to left,#000 34%,rgba(0,0,0,.55) 62%,transparent 100%),
                       linear-gradient(to bottom,#000 46%,rgba(0,0,0,.5) 74%,transparent 100%);
    -webkit-mask-composite:source-in;
            mask-image:linear-gradient(to left,#000 34%,rgba(0,0,0,.55) 62%,transparent 100%),
                       linear-gradient(to bottom,#000 46%,rgba(0,0,0,.5) 74%,transparent 100%);
            mask-composite:intersect;
  }
  .lk-bg-sx{
    display:block;left:0;right:auto;object-position:56% 42%;   /* il palco sta al centro della sala */
    -webkit-mask-image:linear-gradient(to right,#000 34%,rgba(0,0,0,.55) 62%,transparent 100%),
                       linear-gradient(to bottom,#000 46%,rgba(0,0,0,.5) 74%,transparent 100%);
    -webkit-mask-composite:source-in;
            mask-image:linear-gradient(to right,#000 34%,rgba(0,0,0,.55) 62%,transparent 100%),
                       linear-gradient(to bottom,#000 46%,rgba(0,0,0,.5) 74%,transparent 100%);
            mask-composite:intersect;
  }
  .lk-logo{width:300px}
  .lk-role{font-size:.88rem;margin-top:1.7rem}
  .lk-claim{font-size:1.08rem;max-width:38ch}
  /* 3 · bottoni piu' larghi, piu' bassi e con gli angoli piu' morbidi */
  .lk-btn{padding:1.15rem 3.6rem 1.2rem 2rem;border-radius:18px}
  .lk-t{font-size:1.92rem}
  .lk-s{font-size:1rem}
  .lk-arr{right:1.8rem}
  .lk-sep{margin:2.6rem .4rem}
  /* 4 · lo stesso trattamento al riquadro europeo */
  .lk-ue{padding:1.7rem 2.4rem;border-radius:18px}
  .lk-ue-txt{font-size:.95rem}
  .lk-ftr{padding-bottom:3.4rem}
  /* 5 · la foto dell'aula diventa una striscia: si vedono le persone e il
     palco, e sopra continua a sfumare nel nero */
  .lk-foto{margin-top:-1.8rem}
  .lk-foto img{aspect-ratio:16/4.6;object-fit:cover;object-position:50% 46%}
  /* 2 · sfumature molto piu' larghe e molto piu' leggere */
  .lk-glow{
    background:
      radial-gradient(1100px 760px at 0% 0%,rgba(236,134,102,.16),transparent 72%),
      radial-gradient(950px 900px at 100% 44%,rgba(236,134,102,.12),transparent 74%),
      radial-gradient(1500px 520px at 50% 100%,rgba(236,134,102,.08),transparent 78%);
  }
}

/* ============================================================
   70 · CONTATTI E MENU (David, 24/08, punti 18-20)
   ============================================================ */
/* 18 · IL TESTO ENTRA INSIEME AL SUO BOTTONE. La descrizione, da telefono,
   viene tirata fuori dal link: qui la si aggancia allo stato del bottone che
   le sta subito sopra, cosi' partono insieme e non con due effetti sfalsati. */
@media (max-width:700px){
  html.js .ct-fuori{
    opacity:0;transform:translateY(26px);   /* identico al bottone, cosi' si muovono uguali */
    transition:opacity .72s var(--ease),transform .72s var(--ease);
  }
  html.js .ct-strada.in + .ct-fuori{opacity:1;transform:none}
  @media (prefers-reduced-motion:reduce){
    html.js .ct-fuori{opacity:1;transform:none;transition:none}
  }
}

/* 20 · DENTRO IL MENU APERTO NON SI SCORRE.
   Era l'ultimo motivo per cui il vetro spariva: la pagina sotto e' bloccata,
   ma il PANNELLO poteva scorrere, e appena il dito lo muoveva Safari smetteva
   di rifare la sfocatura. Le voci ci stanno tutte, quindi non c'e' niente da
   scorrere: si toglie la possibilita' e basta.
   L'unica eccezione e' su una finestra bassissima (sotto i 560px di altezza,
   per esempio un telefono girato), dove il menu deve poter scorrere per forza:
   li' si accetta che il vetro sfarfalli. */
@media (max-width:900px){
  html.js .hdr-nav{overflow:hidden;touch-action:none;overscroll-behavior:none}
  @media (max-height:560px){
    html.js .hdr-nav{overflow-y:auto;touch-action:pan-y}
  }
}

/* ============================================================
   71 · IL MODULO DELLA NEWSLETTER DA COMPUTER, IN COLONNA
   (David, 24/08: "visto che adesso c'e' spazio, facciamolo in linea, non con i
   campi uno a fianco all'altro"). I campi erano a due a due; adesso stanno uno
   sotto l'altro, come da telefono, e il modulo si allunga invece di allargarsi.
   Da telefono non cambia niente: li' era gia' cosi'.
   ============================================================ */
@media (min-width:901px){
  .nl-form .nl-due{display:block}
  .nl-form .nl-due > span{display:block}
  .nl-form .nl-due > span + span{margin-top:.9rem}
  .nl-form .nl-due + .nl-due{margin-top:.9rem}
  .nl-form{max-width:560px}
}
