/* ============================================================
   savorani.css — foglio di marca di Savorani Tourism, sopra il tema Antra
   (theme/antra/index-3.html, «versione 3», header-2).

   Modellato su sites/alpiadelmo/assets/css/alpi.css, che e' la ricetta
   approvata: fa le stesse cinque cose e basta.
     1. rimette in piedi lo strato di variabili del tema;
     2. sposta l'accento (l'oro di Antra -> il verde-acqua di Savorani) da UN
        punto solo, la variabile del tema;
     3. corregge la lingua (il Title Case inglese in italiano e' un errore);
     4. garantisce leggibilita' e contrasti dove il tema conta su una
        fotografia che noi non abbiamo o su un colore che non passa AA;
     5. veste i pochi componenti NOSTRI (.eg-*) che il tema non conosce.
   Quello che NON fa: ridisegnare sezioni, cambiare spaziature
   (pt-130/pb-130 sono criterio di collaudo), sostituire icone, inventare
   una scala tipografica o un sistema di spaziature. Il tema decide.

   ORDINE DI CARICAMENTO (lo scrive tools/savorani-shell.mjs):
     bootstrap · fontawesome · venobox · nice-select · carouselTicker ·
     animation · swiper · main.css   (il TEMA, intatto)
     -> variables.css       (solo :root, i token di marca)
     -> savorani-guscio.css (le riparazioni strutturali del guscio, GENERATO)
     -> savorani.css        (questo file)
   components/shared/base.css NON e' nella catena.
   ============================================================ */


/* ============================================================
   1. LO STRATO DI VARIABILI DEL TEMA E L'ACCENTO
   ------------------------------------------------------------
   CONTRASTI MISURATI SULLE SUPERFICI VERE (non su bianco): il fondo di
   pagina del tema e' #F6F6F6 (`body{background-color:#f6f6f6}`, e
   `.tl-bg-color` idem), non #FFFFFF; le fasce scure sono #191919 / #1C1C1D.
     #2E8C86 (accento, --ramo-affitti)   su #F6F6F6 3,73 · su #EEEEEE 3,47
                                          su #191919 4,36 · bianco sopra 4,03
       -> SEGNI GRAFICI (soglia 3:1) e TESTO GRANDE (>=24px) su chiaro: ok
       -> testo piccolo su chiaro: NO · fondo col bianco sopra a 16px: NO
     #2B837D (--color-primary-strong)     su #F6F6F6 4,18 -> NON basta per il
                                          testo piccolo sul fondo del tema;
                                          bianco sopra 4,52 -> FONDO di componente
     #257470                              su #F6F6F6 5,10 · #EEEEEE 4,75 · #F2F2F2 4,92
       -> TESTO PICCOLO su chiaro (AA sul peggiore dei chiari)
     #339A93 (--color-primary-on-dark)    su #191919 5,18 · su #1C1C1D 5,01
       -> testo e segni su fascia scura
   docs/contrast-report.md calcola su bianco: qui i valori sono ricalcolati
   sulle superfici del tema, che e' quello che si vede.
   ============================================================ */
:root{
  --tl-color-theme-primary: #2E8C86;     /* L'ACCENTO: cambia tutto insieme */
  --sav-accento-fondo: #2B837D;          /* fondo di componente col bianco sopra (4,52) */
  --sav-accento-scuro: #257470;          /* testo < 24px su fondo chiaro */
  --sav-accento-grande: #2E8C86;         /* testo >= 24px su fondo chiaro (3,73) */
  --sav-accento-su-scuro: #339A93;       /* testo e segni su fondo scuro PIENO (#191919: 5,18) */
  /* CORREZIONI 2026-09-07 (art-direction §2.2): sulle fasce FOTOGRAFICHE
     velate (servizi, CTA) il fondo non e' piu' nero ma un grigio medio, e le
     parole evidenziate dentro i titoli bianchi devono essere PIU' CHIARE del
     fondo e vicine al bianco per luminosita', non piu' scure del bianco
     accanto. #7FC9C2 e' un gradino chiaro dello stesso verde-acqua, variabile
     locale del satellite (nessun token core cambia). MISURATO dopo la build
     sul punto piu' chiaro dietro il titolo: vedi docs/savorani-regia.md §7. */
  --sav-accento-chiaro: #7FC9C2;         /* parole evidenziate nei titoli su foto velata */
  --sav-accento-soft: #E8F7F6;           /* solo sfondo (--color-primary-soft) */
  --sav-blu-gruppo: #0F70B7;             /* SOLO firma endorsed e footer di gruppo */
  --sav-blu-gruppo-chiaro: #7FB6E0;      /* la firma sulle superfici scure */

  /* caratteri del tema; corretto solo il fallback (il tema scrive `serif`) */
  --tl-ff-heading: 'Cal Sans', system-ui, sans-serif;
  --tl-ff-body: 'Golos Text', system-ui, sans-serif;
  --tl-ff-p: 'Golos Text', system-ui, sans-serif;

  /* colori del tema ridichiarati: se il :root di main.css non arrivasse
     (e' successo sul portale), qui c'e' la rete. Valori del tema. */
  --tl-color-common-white: #ffffff;
  --tl-color-common-black: #000000;
  --tl-color-heading-primary: #191919;
  --tl-color-text-body: #4D4D52;
  --tl-color-bg-1: #1C1C1D;
  --tl-color-grey-1: #59585D;
  --tl-color-grey-2: #9F9FA4;
  --tl-color-border-1: #E3E3E8;
  --tl-color-bg-2: #252627;
  --tl-color-border-6: #2E2F31;
  --tl-color-text-black: #191919;
  --tl-fw-normal: normal;  --tl-fw-thin: 100;    --tl-fw-elight: 200;
  --tl-fw-light: 300;      --tl-fw-regular: 400; --tl-fw-medium: 500;
  --tl-fw-sbold: 600;      --tl-fw-bold: 700;    --tl-fw-ebold: 800;
  --tl-fw-black: 900;
  --tl-fs-body: 16px;  --tl-fs-p: 16px;  --tl-fs-p-bold: 20px;
  --tl-fs-h1: 80px;    --tl-fs-h2: 60px; --tl-fs-h3: 50px;
  --tl-fs-h4: 40px;    --tl-fs-h5: 30px; --tl-fs-h6: 20px;
  /* le FAQ del tema scrivono `--lt-` invece di `--tl-` */
  --lt-color-heading-primary: #191919;
  --lt-color-text-body: #4D4D52;
}
body{ font-family: 'Golos Text', system-ui, sans-serif; }
h1, h2, h3, h4, h5, h6,
.section-title, .sub-heading, .tl-primary-btn{
  font-family: 'Cal Sans', system-ui, sans-serif;
}


/* ============================================================
   2. LINGUA — via il Title Case, «edilgetica» minuscolo
   ============================================================ */
.section-heading .section-title,
.header .primary-header-inner .header-menu-wrap ul li a,
.tl-primary-btn,
.project-item-3 .project-content .title,
.service-item-3 .service-content .title,
.banner-process-title,
h1, h2, h3, h4, h5, h6{
  text-transform: none;
}
/* L'OCCHIELLO E' UN <p>: rimette la geometria dell'h4 del tema (misurato su
   alpi: la pillola cresceva da 30 a 44px sotto le regole di paragrafo). */
.section-heading .sub-heading,
.section-heading.section-heading-2 .sub-heading,
.slider-content-wrap .section-heading .sub-heading{
  font-size: 12px;
  font-weight: 400;
  line-height: 1.2;
  margin-top: 0;
  margin-bottom: 20px;
}
.eg-marchio{ text-transform: lowercase; }


/* ============================================================
   3. IL LOCKUP — simbolo reale + wordmark (+ firma endorsed, ma non in testata)
   ------------------------------------------------------------
   Il simbolo e' il PNG ritagliato ai margini utili (62x60: il file
   consegnato, 180x60, aveva il segno largo 60px in mezzo a 120px di
   trasparente, e a 90px CSS leggeva ~36px ottici — art-direction §2.3).
   Mostrato a 46px di larghezza = ~44px ottici: piccolo e netto. `height:auto`
   rimette la proporzione che l'attributo height fisserebbe (main.css:
   img{max-width:100%} e basta).
   LA FIRMA «· gruppo edilgetica» NON sta piu' nella barra dell'header
   (desktop e mobile): faceva del centro della testata un blocco di tre
   righe e su mobile era il link piu' in alto che porta fuori dal sito
   (art-direction §2.3, ux §1.4). Vive nel preloader (testo), nel pannello
   del menu mobile e nel footer, che e' su ogni pagina (regola di rete).
   In header-2 il lockup vive DENTRO `li.site-logo` della <ul> del menu: le
   regole del tema per `ul li a` (display:block, padding:36px 0, 16px,
   capitalize) arrivano anche al nostro <a> e vanno azzerate qui, con la
   stessa specificita' (0,5,2)+.
   ============================================================ */
.eg-lockup{ display: inline-flex; align-items: center; gap: 12px; }
.eg-lockup__nome{ display: inline-flex; align-items: center; gap: 10px; padding: 6px 0; }
.eg-simbolo{ width: 46px; height: auto; flex: 0 0 auto; }
.eg-wordmark{
  display: flex;
  flex-direction: column;
  justify-content: center;
  line-height: 1;
}
.eg-wordmark__nome{
  font-family: var(--tl-ff-heading);
  font-size: 22px;
  line-height: 1;
  color: #FFFFFF;
  letter-spacing: .2px;
  white-space: nowrap;       /* il nome non si spezza mai */
}
.eg-wordmark__ruolo{
  font-family: var(--tl-ff-body);
  font-size: 12px;           /* 12 e non meno: minimo di piattaforma */
  line-height: 1.1;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .72);
  margin-top: 4px;
}
.eg-lockup__firma{
  display: inline-flex;
  align-items: center;
  min-height: 44px;          /* controllo autonomo */
  font-family: var(--tl-ff-heading);
  font-size: 14px;
  line-height: 1.2;
  color: var(--sav-blu-gruppo-chiaro);
  white-space: nowrap;
}
.eg-lockup__firma:hover{ color: #FFFFFF; }
/* nel preloader la firma e' testo, non un link: niente bersaglio da 44 */
.eg-lockup__firma--testo{ min-height: 0; }

/* --- nel menu (header-2): azzera le regole di voce di menu sull'<a> del marchio --- */
.header .primary-header-inner .header-menu-wrap ul li.site-logo{
  display: inline-flex;
  align-items: center;
  margin: 0 30px;
  vertical-align: middle;
}
.header .primary-header-inner .header-menu-wrap ul li.site-logo a.eg-lockup__nome{
  display: inline-flex;
  padding: 6px 0;
  font-size: inherit;
  letter-spacing: inherit;
}
/* la voce «attiva» del tema colora `li.active a` in accento: sul logo no */
.header .primary-header-inner .header-menu-wrap ul li.site-logo a:hover .eg-wordmark__nome{ color: var(--tl-color-theme-primary); }

/* --- il lockup mobile, nello slot della lente (solo sotto i 993, guscio §8) ---
   Senza la firma sta su UNA riga anche a 360 (simbolo 46 + wordmark ~150 +
   tondo 56 in 336 utili) e la testata torna alle due righe del tema. */
.eg-lockup-mobile .eg-lockup{ gap: 10px; }
.eg-lockup-mobile .eg-lockup__nome{ min-height: 44px; }
@media only screen and (max-width: 575px){
  .eg-lockup-mobile .eg-wordmark__nome{ font-size: 19px; }
}

/* --- pannello off-canvas: fondo BIANCO, la wordmark si scurisce, la firma
   sotto il nome col blu di gruppo (#0F70B7 su bianco 5,22:1) --- */
.mobile-side-menu .eg-lockup--side{ display: inline-flex; flex-direction: column; align-items: flex-start; gap: 0; }
.mobile-side-menu .eg-lockup--side .eg-lockup__nome{ padding: 0; }
.mobile-side-menu .eg-lockup--side .eg-simbolo{ max-width: none; }
.mobile-side-menu .eg-lockup--side .eg-wordmark__nome{ color: var(--tl-color-heading-primary); font-size: 19px; }
.mobile-side-menu .eg-lockup--side .eg-wordmark__ruolo{ color: var(--tl-color-grey-1); }
.mobile-side-menu .eg-lockup--side .eg-lockup__firma{ color: var(--sav-blu-gruppo); padding: 0; }
.mobile-side-menu .eg-lockup--side .eg-lockup__firma:hover{ color: var(--tl-color-heading-primary); }

/* --- footer: firma SOTTO il nome, la colonna e' larga un quarto --- */
.footer-section .eg-lockup{ flex-direction: column; align-items: flex-start; gap: 4px; }
.footer-section .eg-lockup__firma{ min-height: 44px; padding: 12px 0; color: var(--sav-blu-gruppo-chiaro); }

/* --- preloader: il tema scriveva «ANTRA» a 80px; il marchio tiene la stessa
   presenza, con la firma sotto --- */
.eg-site-name{ display: inline-flex; flex-direction: column; align-items: center; gap: 6px; }
.eg-site-name .eg-lockup__nome{ gap: 16px; }
.eg-site-name .eg-simbolo{ width: 84px; }
.eg-site-name .eg-wordmark__nome{ font-size: 40px; }
.eg-site-name .eg-wordmark__ruolo{ font-size: 13px; letter-spacing: 4px; margin-top: 8px; }
/* il preloader del tema mette tutto in maiuscolo e in grassetto: la firma
   torna minuscola («edilgetica» si scrive cosi'), leggera e nel blu chiaro */
.eg-site-name .eg-lockup__firma{
  font-size: 16px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--sav-blu-gruppo-chiaro);
}
@media only screen and (max-width: 767px){
  .eg-site-name .eg-simbolo{ width: 60px; }
  .eg-site-name .eg-wordmark__nome{ font-size: 28px; }
  .eg-site-name .eg-wordmark__ruolo{ font-size: 12px; letter-spacing: 2px; }
}


/* ============================================================
   4. L'HERO — i due tondi a pari peso
   ------------------------------------------------------------
   Il tema ha UN tondo (`.slider-btn a`, 120x120, `margin:0 auto`). Qui ce
   ne sono due, gemelli, dentro `.eg-slider-tondi`: flex centrato, in
   colonna sotto i 576px (a 360px stanno uno sotto l'altro senza sforare).
   Il tondo NON si riveste: e' quello del tema.
   ============================================================ */
.eg-slider-tondi{
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 0 24px;
}
.eg-slider-tondi .slider-btn{ margin-left: 0; margin-right: 0; }
/* IL FONDO DELL'HERO (art-direction §2.1). Le foto sono verticali 1440x1920 e
   il tema le stende a cover sul centro: il terzo centrale. Con la slide 1 su
   `domus-cerchio-04` il ritaglio sale verso la finestra (center 35%). Il velo
   del tema (`.slider-3 .slider-item .bg-img:before`, #100801 al 64% piatto)
   diventa un GRADIENTE verticale: piu' denso nella fascia del titolo, quasi
   assente in basso dove c'e' solo la foto. Stesso selettore del tema (0,3,1),
   caricato dopo. Il contrasto del bianco sul punto piu' chiaro dietro l'H1 e'
   MISURATO sullo screenshot dopo la build (docs/savorani-regia.md §7). */
#hero .slider-3 .slider-item .bg-img{ background-position: center 35%; }
#hero .slider-3 .slider-item .bg-img:before{
  background-color: transparent;
  background-image: linear-gradient(180deg,
    rgba(16, 8, 1, .72) 0%,
    rgba(16, 8, 1, .68) 40%,
    rgba(16, 8, 1, .50) 70%,
    rgba(16, 8, 1, .28) 100%);
  opacity: 1;
}
@media only screen and (max-width: 575px){
  .eg-slider-tondi{ flex-direction: column; gap: 0; }
  .eg-slider-tondi .slider-btn + .slider-btn{ margin-top: 20px; }
}
/* il tondo del tema ha `line-height:1.2` e tre righe di 18px stanno dentro
   i 120px; il fuoco da tastiera non c'e' nel tema */
.slider-btn a:focus-visible,
.cta-btn:focus-visible{
  outline: 3px solid #FFFFFF;
  outline-offset: 4px;
}
/* B3-bis (qa §6.9 «rilievo nuovo», deciso il 2026-09-08). I tondi dell'HERO
   hanno LA STESSA RIGA del tema dei tondi della CTA — `main.css`,
   `.slider-3 .slider-item .slider-content-wrap .section-heading .slider-btn a`
   (0,5,1): `background-color: rgba(255,255,255,.24)` + `backdrop-filter:
   blur(29px)` + `opacity:.95`, testo bianco 18px peso 400, che e' testo
   NORMALE (large = >=24px, o >=18,66px in grassetto): soglia 4,5.
   Il velo BIANCO al 24% schiarisce la fotografia proprio sotto il testo
   bianco, e il 5% di trasparenza toglie un altro scalino; il risultato
   dipende dalla foto che sta dietro. MISURATO col campionamento a pixel di
   qa §6.0 (2% peggiore, assestamento 2,2 s, tondo tenuto dentro il viewport):
                     «Per chi   «Per chi ha  «Metti a reddito
                      viaggia»   una casa»    la tua casa» (slide 2)
     prima  a 1280      5,68        4,65          4,99
     dopo   a 1280     13,00       10,93         11,67
     prima  a  390      6,28        7,25          5,77
     dopo   a  390     14,37       15,61         13,15
   (le mediane vanno di pari passo: 6,10/5,22/5,56 prima, 13,75/12,10/12,65
   dopo, a 1280.) Il valore non dipende piu' dalla fotografia sotto.
   Stesse due manopole di B3 (§8.2), nessuna delle quali tocca forma, raggio,
   bordo, blur o la misura del tondo: il disco resta di VETRO, ma scurisce la
   foto invece di schiarirla.
   Specificita' 1,5,1: `#hero` in piu' rispetto al tema. Non basta una classe
   perche' il tondo della slide 2 e' UNO SOLO e non sta dentro
   `.eg-slider-tondi` (che e' il flex dei due gemelli della slide 1). */
#hero .slider-3 .slider-item .slider-content-wrap .section-heading .slider-btn a{
  background-color: rgba(25, 25, 25, .28);
  opacity: 1;
}
/* l'hover del tema sta a 0,5,2 e perderebbe contro la riga qui sopra (1,5,1):
   si riscrive TALE E QUALE alla stessa specificita', se no il tondo non si
   accende piu' all'accento. E' esattamente l'inciampo in cui era caduto B3
   sui tondi della CTA: vedi la nota in §8.2. */
#hero .slider-3 .slider-item .slider-content-wrap .section-heading .slider-btn a:hover{
  background-color: var(--tl-color-theme-primary);
  border-color: var(--tl-color-theme-primary);
}


/* ============================================================
   5. LA TESTATA — header-2, il centro e' il menu con il logo
   ------------------------------------------------------------
   B1 di alpi: il fondo della CTA di testata. `.header-btn` e' bianco a
   16px su `--tl-color-theme-primary` = 4,03:1, sotto i 4,5 del testo
   normale. Si cambia il FONDO di questo componente, non l'accento. Stessa
   specificita' del tema (0,4,0).
   ============================================================ */
.header .primary-header-inner .header-right-wrap .header-btn{
  background-color: var(--sav-accento-fondo);
}
/* la voce di menu attiva: bianca con un filetto sotto (misurato su alpi:
   sopra una fotografia velata l'accento non regge come testo). Specificita'
   del tema (0,4,1)+. */
.header .primary-header-inner .header-menu-wrap ul li.active > a{
  color: var(--tl-color-common-white);
}
.header .primary-header-inner .header-menu-wrap ul li.active > a::after{
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 30px;
  height: 2px;
  background-color: var(--tl-color-common-white);
}
/* il telefono di header-2 sta a SINISTRA e il tema lo nasconde sotto i
   1400px: SI RISPETTA (correzioni 2026-09-07, art-direction §2.3). La prima
   build lo riaccendeva da 1200: a 1280 e' esattamente cio' che il demo non
   fa. Sotto i 1400 il numero e' nel pannello del menu e nel footer. */
/* il .header-left-wrap del tema e' `display:flex;column-gap:30px`: con la
   lente sostituita dal lockup mobile (nascosto sopra i 993) resta il solo
   telefono, e va bene cosi' */
.header-2 .primary-header-inner .header-left-wrap .header-contact .call-number{ font-size: 17px; }
/* e' un controllo autonomo: MISURATO 133x36 a 1280 e 1600 */
.header-2 .primary-header-inner .header-left-wrap .header-contact{ min-height: 44px; }
/* la voce attiva nel pannello mobile, che sta su BIANCO: variante da testo
   piccolo (5,10:1), niente filetto */
.mobile-side-menu .mean-container .mean-nav ul li.active a{
  color: var(--sav-accento-scuro);
}


/* ============================================================
   6. ACCESSIBILITA' — skip link, visually-hidden, fuoco
   ============================================================ */
.skip-link{
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 1100;
  background: var(--tl-color-heading-primary);
  color: #FFFFFF;
  font-family: var(--tl-ff-heading);
  padding: 12px 20px;
  border-radius: 0 0 10px 0;
}
.skip-link:focus{ left: 0; }
.visually-hidden{
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible{
  outline: 2px solid var(--sav-accento-scuro);
  outline-offset: 2px;
}
/* sulle fasce scure e sulle fotografie l'anello e' bianco */
.slider-section a:focus-visible,
.service-section-3 a:focus-visible,
.banner-process-area a:focus-visible,
.cta-section-3 a:focus-visible,
.gallary-section-2 a:focus-visible,
.gallary-section-2 button:focus-visible,
.project-item-3 a:focus-visible,
.footer-section a:focus-visible,
.header a:focus-visible,
.header button:focus-visible,
.page-header a:focus-visible,
.eg-cta a:focus-visible{
  outline-color: #FFFFFF;
}
/* i bottoni dell'accordion: bootstrap azzera l'outline con (0,2,0) e il tema
   spegne l'ombra con (0,4,0); servono i selettori del tema (B3 di alpi) */
.faq-content .faq-accordion .accordion-item .accordion-button:focus-visible,
.faq-content-2 .faq-accordion .accordion-item .accordion-button:focus-visible{
  outline: 2px solid var(--sav-accento-scuro);
  outline-offset: 3px;
}


/* ============================================================
   7. I COMPONENTI NOSTRI (.eg-*) — tipografia, colori e raggi dal tema
   ============================================================ */

/* --- 7.1 Elenco con la freccia tonda del tema ------------------------ */
.eg-lista{ list-style: none; margin: 0; padding: 0; }
.eg-lista li{ position: relative; padding-left: 34px; }
.eg-lista li > i{
  position: absolute;
  left: 0;
  top: .62em;
  font-size: 18px;
  line-height: 1;
  color: var(--tl-color-theme-primary);
}
.eg-lista li,
.content-info .content-list.eg-lista li,
.service-details-content .service-details-list-wrap ul.eg-lista li{
  display: block;
  line-height: 1.5;
}

/* --- 7.2 Passi numerati --------------------------------------------- */
/* B2 (qa §6.5, MISURATO 3,73:1 su 12 occorrenze fra appartamenti,
   proprietari e investimenti; serve 4,5). Il numero e' 20px, cioe' TESTO
   PICCOLO: #2E8C86 e' l'accento «large/UI» (>=24px). Qui va il token che
   §1 ha scritto apposta, `--sav-accento-scuro` #257470 -> 5,10:1 su #F6F6F6.
   Nessun token core toccato, il colore d'accento del sito non cambia. */
.eg-passo__numero{
  font-family: var(--tl-ff-heading);
  font-size: 20px;
  line-height: 1;
  color: var(--sav-accento-scuro);
  margin: 0;
}
.service-details-content .service-details-items .service-details-item,
.service-details-content .service-details-items .service-details-item .content{ min-width: 0; }
.service-details-content .service-details-items .service-details-item.eg-passo{
  grid-template-columns: auto 1fr;
  grid-gap: 14px;
}
@media only screen and (max-width: 767px){
  .service-details-content .service-details-items{ grid-template-columns: 1fr; }
  .service-details-content .service-details-items .service-details-item.eg-passo{ display: block; }
  .service-details-content .service-details-items .service-details-item.eg-passo .content p{ max-width: none; }
}

/* --- 7.3 Briciole, occhiello e sommario della testata di pagina ----- */
.eg-briciole ol{
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0 8px;
  list-style: none;
  margin: 0 0 18px;
  padding: 0;
}
.eg-briciole li{
  font-family: var(--tl-ff-heading);
  font-size: 13px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: rgba(255, 255, 255, .78);
}
.eg-briciole li + li::before{
  content: "";
  display: inline-block;
  width: 10px;
  height: 1px;
  margin-right: 8px;
  vertical-align: middle;
  background-color: rgba(255, 255, 255, .5);
}
.eg-briciole li:last-child span{ color: #FFFFFF; font-weight: 600; }
.eg-briciole li:last-child::before{
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background-color: var(--tl-color-common-white);
}
.eg-briciole a{
  color: #FFFFFF;
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0;
}
.eg-briciole a:hover{ color: var(--sav-accento-su-scuro); }
.page-header .page-header-content .sub-heading{
  display: inline-block;
  font-family: var(--tl-ff-heading);
  font-size: 12px;
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--tl-color-common-white);
  border: 1px solid rgba(255, 255, 255, .24);
  border-radius: 100px;
  padding: 7px 19px 7px 28px;
  margin: 0 0 20px;
  position: relative;
}
.page-header .page-header-content .sub-heading::before{
  content: "";
  background-color: var(--tl-color-theme-primary);
  height: 5px; width: 5px;
  border-radius: 50%;
  position: absolute;
  top: 50%; left: 15px;
  transform: translateY(-50%);
}
.eg-page-header__sommario{
  color: rgba(255, 255, 255, .86);
  max-width: 60ch;
  margin: 18px auto 0;
}
.page-header .page-header-content .title{ font-size: clamp(40px, 10vw, 80px); }

/* --- 7.4 Box recapiti e titolini di colonna ------------------------- */
.eg-box-contatto,
.eg-scheda{
  border: 1px solid var(--tl-color-border-1);
  border-radius: 24px;
  padding: 30px;
  background-color: var(--tl-color-common-white);
}
.eg-box-contatto__titolo,
.eg-recapito__etichetta,
.eg-footer-title{
  font-family: var(--tl-ff-heading);
  font-size: 13px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--tl-color-grey-1);
  margin-bottom: 12px;
}
.eg-box-contatto .number,
.eg-box-contatto .mail,
.eg-recapiti .number,
.eg-recapiti .mail{
  display: block;
  width: fit-content;
  padding: 10px 0;
  font-family: var(--tl-ff-heading);
  color: var(--tl-color-heading-primary);
}
.eg-recapiti .number,
.eg-recapiti .mail,
.eg-recapiti-note a,
.contact-page-area .eg-recapiti a{
  color: var(--sav-accento-scuro);
  text-decoration: underline;
  text-underline-offset: 4px;
}
.eg-recapiti .number{ font-family: var(--tl-ff-heading); font-size: 22px; line-height: 1.2; }
.eg-recapiti-note a{ display: inline-block; padding: 9px 0; }
.contact-page-area.request-wrap{ align-items: flex-start; }

/* --- 7.5 Il modulo (spento in bozza) --------------------------------- */
.eg-modulo-chiama{ max-width: 100%; }
.eg-modulo-riga{
  margin: 16px 0 0;
  font-size: 15px;
  line-height: 1.5;
  color: rgba(255, 255, 255, .78);
}
.eg-modulo-riga a{
  text-decoration: underline;
  text-underline-offset: 3px;
  display: inline-block;
  padding: 12px 0;
}
.eg-modulo--chiara .eg-modulo-riga{ color: var(--tl-color-text-body); }
.eg-modulo--chiara .eg-modulo-riga a{ color: var(--sav-accento-scuro); }
.request-form-wrap.eg-modulo--chiara .form-item .form-control{ color: var(--tl-color-heading-primary); }
.request-form-wrap.eg-modulo--chiara .form-item .form-control::placeholder{ color: var(--tl-color-grey-1); }
.request-form-wrap.eg-modulo--chiara .eg-form-hint{ color: var(--tl-color-grey-1); }
.eg-modulo-campi{ border: 0; padding: 0; margin: 0; }
.eg-modulo-campi .form-control:disabled{ opacity: 1; }
.eg-form-hint{ font-size: 15px; line-height: 1.5; max-width: 58ch; margin-top: 10px; }
.eg-select{
  appearance: none;
  -webkit-appearance: none;
  min-height: 58px;
  padding-right: 52px;
  font-size: 16px;
  cursor: pointer;
  /* la freccia del select: un `data:` non legge le variabili; #2B837D e' un
     componente grafico (soglia 3:1, 4,18 sul #F6F6F6) */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%232B837D' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 22px center;
}
.request-section .request-form-wrap .form-item .form-control{
  background-color: #14201F;
  border: 1px solid rgba(255, 255, 255, .22);
  border-radius: 12px;
  color: #FFFFFF;
}
.request-section .request-form-wrap .form-item .form-control::placeholder{ color: rgba(255, 255, 255, .66); }
.request-section .request-form-wrap .form-item .form-control:focus{
  border-color: var(--tl-color-theme-primary);
  outline: 2px solid var(--tl-color-theme-primary);
  outline-offset: 1px;
}

/* --- 7.6 Il blocco «Il gruppo» (pagine interne) ---------------------- */
.eg-gruppo-wrap{ max-width: 780px; margin-inline: auto; }
.eg-gruppo-btn-wrap{ margin-top: 34px; text-align: center; }
.eg-gruppo-btn-wrap .tl-primary-btn{ max-width: 100%; text-align: left; }
.eg-gruppo-frase{ margin-top: 18px; }
.eg-gruppo-frase a,
.eg-blocco p a,
.about-content-3 .section-heading p a,
.service-details-content p a{
  color: var(--sav-accento-scuro);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.eg-gruppo-frase a:hover,
.about-content-3 .section-heading p a:hover{ text-decoration-thickness: 2px; }

/* --- 7.7 Footer di gruppo ------------------------------------------- */
.eg-footer-gruppo .eg-realta,
.eg-footer-gruppo .eg-endorse{ display: block; }
.eg-endorse{ font-size: 14px; color: rgba(255, 255, 255, .62); }
.footer-list li a,
.footer-list li > span{
  display: inline-block;
  padding: 13px 0;             /* 44px di bersaglio (misurato su alpi) */
  line-height: 1.3;
}
.footer-list li:not(:last-of-type){ margin-bottom: 0; }
.footer-address .number,
.footer-address .mail{
  display: inline-block;
  padding: 10px 0;
  line-height: 1.3;
}
/* i due link «Indicazioni» e «Canali social»: MISURATI 35px con 10px per lato
   (riga da 15px): 14 + 15 + 14 = 44. */
.eg-social-list li a{
  display: inline-block;
  padding: 15px 0;    /* MISURATO 43 con 14: la riga e' 13px, non 15 */
  line-height: 1.1;
}
.eg-footer-nota{ color: rgba(255, 255, 255, .62); font-size: 15px; margin-top: 6px; }
.eg-footer-title{ color: rgba(255, 255, 255, .72); }
.footer-section .footer-widget .eg-footer-title{ margin-top: 18px; margin-bottom: 6px; }
.footer-section .footer-widget address,
.footer-section .footer-widget > p{
  color: rgba(255, 255, 255, .82);
  font-style: normal;
  line-height: 1.7;
}
/* la riga di copyright porta P.IVA e sede legale: piu' lunga di quella del
   demo, va a capo con la sua interlinea */
.copyright-area .copyright-content p{ line-height: 1.7; }

/* la filigrana «savorani»: una parola, sotto la banda del copyright, dentro
   il padding che il tema le riserva (B4 di alpi, stessa misura) */
.footer-section .footer-text.eg-footer-text{
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  text-align: center;
  line-height: 0;
  pointer-events: none;
  white-space: nowrap;
}
.eg-footer-text span{
  display: inline-block;
  font-size: clamp(72px, 14vw, 300px);
  line-height: 1.1;
}
@media only screen and (max-width: 992px){ .eg-footer-text span{ font-size: clamp(72px, 20vw, 200px); } }
@media only screen and (max-width: 767px){ .eg-footer-text span{ font-size: 64px; } }

/* --- 7.8 Il pannello off-canvas ------------------------------------- */
.eg-side-title{
  font-family: var(--tl-ff-heading);
  font-size: 24px;
  line-height: 1.2;
  margin-bottom: 0;
  color: var(--tl-color-heading-primary);
}
.mobile-side-menu .mean-bar .mean-nav.mean-nav > ul li a{ padding: 14px 0; }   /* 22px -> 50px misurati su alpi */
.mobile-side-menu .side-menu-list a{ display: inline-block; padding: 14px 0; line-height: 1.2; }
.mobile-side-menu .side-menu-head .mobile-side-menu-close{ height: 44px; width: 44px; }

/* --- 7.9 La riga di contatto a meta' pagina -------------------------- */
.eg-riga-contatto{
  margin: 34px 0 0;
  font-family: var(--tl-ff-heading);
  font-size: 20px;
  line-height: 1.4;
  color: var(--tl-color-heading-primary);
}
.eg-riga-contatto a{
  color: var(--sav-accento-scuro);
  text-decoration: underline;
  text-underline-offset: 4px;
  display: inline-block;
  padding: 10px 0;
  white-space: nowrap;
}


/* ============================================================
   8. LEGGIBILITA' — dove il tema conta su qualcosa che non abbiamo
   ============================================================ */

/* 8.1 Le foto dentro i riquadri del tema: le nostre hanno proporzioni
   diverse dai segnaposto, object-fit taglia senza deformare. */
.about-img-wrap-3 img,
.service-item-3 .service-thumb img,
.project-item-3 .project-img img,
.testi-img-3 img,
.gallary-inner-item a img,
.banner-process-image-list .banner-process-img .process-img img{ object-fit: cover; }
/* la foto delle FAQ: il tema non da' NESSUNA misura a `.faq-img img` (il suo
   segnaposto era gia' 690x520). La nostra e' verticale 1440x1920: senza
   questa regola la colonna diventava alta due schermate. */
.faq-section .eg-faq-img img{
  width: 100%;
  aspect-ratio: 690 / 520;
  height: auto;
  object-fit: cover;
  border-radius: 24px;
}

/* 8.2 Le tre fasce fotografiche che nel demo erano segnaposto grigi: il
   velo. La service-section-3 NON ha un velo suo nel tema (il testo bianco
   contava su una foto scura): qui e' pesante. La galleria ha gia' il nero
   al 46% (.bg-img:before) e la CTA il #252627 al 48% (.cta-bg:before): si
   aggiunge il minimo per il titolo bianco su interni chiari. */
.service-section-3 .bg-img.eg-bg-servizi,
.gallary-section-2 .bg-img.eg-bg-galleria,
.cta-section-3 .eg-cta-bg{
  position: absolute;
  inset: 0;
  /* CORREZIONE 2026-09-08 (qa §6.3 / B4): dal 2026-09-08 queste tre fasce NON
     hanno piu' il poster `style="background-image"` in linea (costava 1,7 MB
     caricati prima che il visitatore scorresse). La fotografia gliela mette
     main.js leggendo `data-background`; finche' non arriva — e per sempre, se
     il JavaScript non arriva mai — sotto c'e' questa tinta, che e' lo stesso
     #0E1B1A dei veli qui sotto. Senza, il testo bianco di queste tre fasce
     finirebbe su #F6F6F6 velato: 2,7:1. Con, resta il fondo su cui i
     contrasti del 2026-09-07 sono stati misurati. */
  background-color: #0E1B1A;
}
.service-section-3 .bg-img.eg-bg-servizi::after,
.gallary-section-2 .bg-img.eg-bg-galleria::after,
.cta-section-3 .eg-cta-bg::after{
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
}
/* CORREZIONE 2026-09-07 (art-direction §2.2): la fascia era quasi nera (.84)
   dove il demo e' un grigio medio, e la piazza della foto non esisteva. Velo
   ~.55 a gradiente ORIZZONTALE: piu' denso a sinistra sotto il titolo e il
   testo, piu' leggero a destra dove passano le card (che hanno il loro
   gradiente scuro del tema). Sotto i 992 le card scendono sotto il testo: il
   velo torna uniforme. */
.service-section-3 .bg-img.eg-bg-servizi::after{
  background-color: transparent;
  background-image: linear-gradient(90deg,
    rgba(14, 27, 26, .70) 0%,
    rgba(14, 27, 26, .62) 45%,
    rgba(14, 27, 26, .48) 100%);
  opacity: 1;
}
@media only screen and (max-width: 991px){
  .service-section-3 .bg-img.eg-bg-servizi::after{ background-image: none; background-color: #0E1B1A; opacity: .62; }
}
/* le parole evidenziate nei titoli BIANCHI sulle fasce fotografiche: il tema
   le colora con l'accento (0,2,1), che su un grigio medio e' piu' scuro del
   bianco accanto e attenua invece di evidenziare. Variante chiara (§1). */
.service-section-3 .section-heading .section-title span,
.cta-section-3 .section-heading .section-title span,
.gallary-section-2 .section-heading .section-title span{ color: var(--sav-accento-chiaro); }
/* i tre percorsi come link nel paragrafo d'introduzione (ux §1.3): bianchi,
   sottolineati, sono link in una frase (non controlli autonomi) */
.service-left-content-3 .desc p a{
  color: var(--tl-color-common-white);
  text-decoration: underline;
  text-underline-offset: 4px;
}
.service-left-content-3 .desc p a:hover{ color: var(--sav-accento-chiaro); }
.gallary-section-2 .bg-img.eg-bg-galleria::after{ background-color: #0E1B1A; opacity: .34; }
/* CTA: .30 -> .42 il 2026-09-07. MISURATO a 1280 dietro «o ne hai una da affidare?»: con .30 il
   punto piu' chiaro (un cuscino) dava 2,86:1 all'accento chiaro, sotto il 3:1 del testo grande. */
.cta-section-3 .eg-cta-bg::after{ background-color: #0E1B1A; opacity: .42; }
/* la CTA: i due tondi gemelli affiancati (il tema ne centra uno con margin:auto) */
.cta-wrap-3 .cta-btn-wrap.eg-cta-tondi{
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 24px;
}
.cta-wrap-3 .cta-btn-wrap.eg-cta-tondi .cta-btn{ margin: 0; }
/* B3 (qa §6.5, MISURATO 4,06-4,46:1 sui sei tondi di tre pagine, serve 4,5).
   Il tondo del tema e' `background-color: rgba(255,255,255,.24)` +
   `backdrop-filter: blur(29px)` + `opacity:.95` (main.css,
   `.cta-wrap-3 .cta-btn-wrap .cta-btn`, specificita' 0,3,0): il velo BIANCO
   al 24% schiarisce la fotografia proprio sotto il testo bianco, e il 5% di
   trasparenza toglie un altro scalino. Sulla stessa pagina i tondi
   misuravano da 4,06 a 7,31 a seconda della foto dietro: non e' il colore,
   e' il velo. Due manopole, nessuna delle quali tocca forma, raggio, bordo,
   blur o il colore d'accento dell'hover:
     - `opacity: 1`   il tondo smette di lasciar passare il 5% di foto;
     - velo SCURO al 28% al posto del bianco al 24%: il disco resta di vetro
       (il blur c'e' ancora) ma scurisce invece di schiarire.
   Specificita' 0,4,0 (la classe .eg-cta-tondi in piu'): batte il tema senza
   un !important. */
.cta-wrap-3 .cta-btn-wrap.eg-cta-tondi .cta-btn{
  background-color: rgba(25, 25, 25, .28);
  opacity: 1;
}
/* REGRESSIONE DI B3, trovata il 2026-09-08 leggendo il `background-color`
   computato con `:hover` forzato (CDP `CSS.forcePseudoState`): l'hover del
   tema e' `.cta-btn-wrap .cta-btn:hover` (0,3,0) e la riga qui sopra sta a
   0,4,0 — la batte. Risultato misurato: al passaggio del mouse cambiava solo
   il BORDO (rgb(46,140,134)), il disco restava rgba(25,25,25,.28). L'hover si
   riscrive tale e quale alla specificita' della riga che lo copriva. */
.cta-wrap-3 .cta-btn-wrap.eg-cta-tondi .cta-btn:hover{
  background-color: var(--tl-color-theme-primary);
  border-color: var(--tl-color-theme-primary);
}
@media only screen and (max-width: 575px){
  .cta-wrap-3 .cta-btn-wrap.eg-cta-tondi{ flex-direction: column; align-items: center; gap: 20px; }
}

/* 8.3 Le recensioni: il nome e' un <p class="name"> (S12) e il carattere
   dei titoli arriva da un selettore di ELEMENTO che sul <p> non aggancia. */
.testi-item .testi-author p.name{
  font-family: var(--tl-ff-heading);
  color: var(--tl-color-heading-primary);
}
/* l'iniziale al posto della foto dell'autore (niente volti) */
/* tondo pieno nell'accento da componente (bianco sopra 4,52) con la lettera
   bianca: verde chiaro su verde chiarissimo era quasi invisibile
   (art-direction §2.10); sei tondi piccoli, non una campitura */
.testi-item .testi-author .author-img.eg-iniziale{
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background-color: var(--sav-accento-fondo);
  font-family: var(--tl-ff-heading);
  font-size: 24px;
  color: var(--tl-color-common-white);
}
/* i tag delle card degli appartamenti: nel tema erano <a>, qui <span> (non
   c'e' una pagina per tag). Stessa veste della pillola del tema.
   B1 (qa §6.5): la pillola del tema e' testo BIANCO 13px con bordo bianco e
   NIENTE fondo, appoggiata sulla fotografia. Misurata sulle stesse pillole
   del catalogo: 1,07-2,78:1 (serve 4,5). Qui in home il difetto era nascosto
   da B5 (il contenuto non compariva mai su touch); riaperto B5, si vedrebbe.
   Fondo pieno `--sav-accento-fondo` #2B837D: bianco sopra = 4,52:1,
   indipendente dalla fotografia. Forma, corpo, raggio e bordo del tema
   restano; il bordo diventa dello stesso verde, cosi' la pillola non ha un
   alone bianco intorno. La regola gemella e' a §10.2, sul catalogo. */
.project-item-3 .project-content ul li span{
  font-family: var(--tl-ff-heading);
  color: var(--tl-color-common-white);
  font-size: 13px;
  padding: 5px 15px;
  text-transform: uppercase;
  background-color: var(--sav-accento-fondo);
  border: 1px solid var(--sav-accento-fondo);
  border-radius: 100px;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* le frecce della galleria sono <button>: azzera il bordo e il fondo di
   sistema, il resto lo da' `.gallary-carousel-wrap .swiper-arrow .swiper-nav` */
.gallary-carousel-wrap .swiper-arrow button.swiper-nav{ border: 1px solid var(--tl-color-theme-primary); padding: 0; cursor: pointer; }

/* 8.4 I titoli-link delle card: il tema non mette il colore sull'<a> dentro
   `.service-item-3 .title` e `.banner-process-title` (eredita il bianco dal
   contenitore), ma `a{text-decoration:none}` e nient'altro. Si esplicita.
   Sono controlli autonomi (l'unico link della card): MISURATI 36-39px a
   tutte le larghezze -> inline-block con il padding che li porta a 44. */
.service-item-3 .service-content .title a,
.banner-process-title a,
.project-item-3 .project-content .title a{
  color: inherit;
  display: inline-block;
  padding: 8px 0;     /* il titolo ha line-height:1 (28px): 8 + 28 + 8 = 44 — MISURATO 36 con 4px */
}

/* 8.6 Il badge «2 sedi» dell'about-section-3: nel tema il numero e' un <h3>
   con dentro l'odometer; qui e' un <p> STATICO (niente numeri che salgono da
   zero) e il carattere dei titoli va ridichiarato (selettore di elemento). */
.about-img-wrap-3 .about-counter p.title{
  font-family: var(--tl-ff-heading);
  color: var(--tl-color-common-white);
  font-size: 120px;
  font-weight: 400;
  margin-bottom: 10px;
  line-height: 1;
}
@media only screen and (max-width: 767px){ .about-img-wrap-3 .about-counter p.title{ font-size: 40px; } }
/* il badge del tema ha il fondo in accento e il testo bianco a 18px: bianco su
   #2E8C86 = 4,03:1, sotto i 4,5 del testo normale. Fondo con la variante da
   componente (4,52). Stessa specificita' del tema (0,2,0). */
.about-img-wrap-3 .about-counter{ background-color: var(--sav-accento-fondo); }

/* 8.7 (rimossa il 2026-09-07) le voci dell'about sono tornate DUE, come nel
   tema: il filetto da 330px del tema va bene cosi' (art-direction §2.6). */

/* 8.8 Le card SENZA foto (Domus Traversari 13 e 17) in HOME: lo STESSO
   componente del catalogo (§10.2, `.project-item.eg-card-vuota`) sulla card
   di index-3 (`.project-item-3`): tinta chiara (la soft dell'accento) con il
   NUMERO CIVICO in grande nell'accento; due «D» gemelle su fondo scuro
   leggevano come due errori di caricamento (art-direction §2.5, ux §1.9). Il
   testo della card e' visibile sempre (nel tema compare al passaggio del
   mouse sopra la foto): senza foto non c'e' niente da scoprire, e su tinta
   chiara il testo e le pillole passano allo scuro. Il civico e' aria-hidden:
   #2E8C86 su #E8F7F6 e' 3,6:1, sopra la soglia dei segni grafici. */
.project-item-3.eg-card-vuota .project-img{
  background-color: var(--sav-accento-soft);
  display: flex;
  align-items: center;
  justify-content: center;
}
.project-item-3.eg-card-vuota .project-img:before{ content: none; }
.project-item-3.eg-card-vuota .eg-card-vuota__iniziale{
  font-family: var(--tl-ff-heading);
  font-size: 180px;
  line-height: 1;
  color: var(--tl-color-theme-primary);
  user-select: none;
  /* il civico sta nel terzo alto: sotto c'e' il testo della card */
  margin-bottom: 150px;
}
.project-item-3.eg-card-vuota .project-content{ visibility: visible; opacity: 1; bottom: 50px; }

/* 8.8bis  B5 (qa §6.5, MISURATO a 1280 e a 390): sulle due card CON foto il
   nome dell'appartamento, le pillole e la riga dei dati sono
   `visibility:hidden; opacity:0` e il tema li rivela SOLO su `:hover`
   (main.css `.project-item-3 .project-content` / `.project-item-3:hover
   .project-content`). Su telefono e tablet il `:hover` non arriva mai: la
   card era una fotografia e basta, senza nome, senza dati e senza un segnale
   che fosse un link. Nemmeno il fuoco da tastiera la apriva.
   Due estensioni della stessa dichiarazione gia' scritta due righe sopra per
   le card Traversari, e nessun altro cambiamento:
     1) SOTTO i 1024px il contenuto e' sempre visibile — 1024 e' la soglia
        oltre la quale il puntatore c'e' quasi sempre, ed e' la stessa che
        main.js usa per il pin della colonna sticky;
     2) a QUALUNQUE larghezza, `:focus-within` fa lo stesso lavoro di
        `:hover` per chi naviga da tastiera.
   Sopra i 1024 col mouse l'effetto del tema resta intatto: il velo
   `.project-img:before` continua a comparire all'hover, e il contenuto
   continua a salire da 40 a 50px. */
@media only screen and (max-width: 1023px){
  .project-item-3 .project-img:before{ visibility: visible; opacity: 1; bottom: 0; }
  .project-item-3 .project-content{ visibility: visible; opacity: 1; bottom: 50px; }
}
.project-item-3:focus-within .project-img:before{ visibility: visible; opacity: 1; bottom: 0; }
.project-item-3:focus-within .project-content{ visibility: visible; opacity: 1; bottom: 50px; }
.project-item-3.eg-card-vuota .project-content .title,
.project-item-3.eg-card-vuota .project-content .title a,
.project-item-3.eg-card-vuota .project-content > span{ color: var(--tl-color-heading-primary); }
.project-item-3.eg-card-vuota .project-content ul li span{
  color: var(--tl-color-heading-primary);
  /* la pillola col fondo verde di B1 sta sulla FOTOGRAFIA; qui il fondo e'
     gia' la tinta soft e il testo e' scuro (15,96:1 misurato): il fondo
     pieno si toglie, se no si sovrappongono due verdi. */
  background-color: transparent;
  border-color: var(--tl-color-heading-primary);
}
@media only screen and (max-width: 767px){
  .project-item-3.eg-card-vuota .eg-card-vuota__iniziale{ font-size: 120px; margin-bottom: 110px; }
}
/* il bottone di sezione sotto il carosello degli appartamenti (copy §2.6) */
.eg-sezione-btn{ margin-top: 40px; }

/* 8.9 La riga per chi investe sotto i due tondi della CTA (copy §2.7): bianca
   sulla fotografia velata, con il link sottolineato. E' un link in una frase,
   ma e' l'UNICA uscita per il terzo pubblico da questa fascia: 44px. */
.eg-cta-riga{
  margin: 34px 0 0;
  color: rgba(255, 255, 255, .86);
  line-height: 1.6;
}
/* le due frasi su due righe anche sotto i 768, dove il tema spegne i <br> */
.eg-cta-riga br{ display: block; }
.eg-cta-riga a{
  color: #FFFFFF;
  text-decoration: underline;
  text-underline-offset: 4px;
  display: inline-block;
  padding: 10px 0;
}

/* 8.11 LE RECENSIONI NON SI SOVRAPPONGONO — MISURATO a 1280 e a 360.
   Il tema: `.testi-carousel-3{height:750px}` con TRE slide verticali per
   vista (Swiper, main.js:672), cioe' 250px a slide, e `.testi-item p` a 28px.
   Il demo ci mette frasi di ~100 caratteri; le recensioni vere sono 170-230
   caratteri: a 28px fanno 5 righe (180px) + 40 di margine + 64 di autore =
   284px, e la seconda slide finiva SOPRA il nome della prima (screenshot).
   Due manopole, tutte e due minime: il corpo scende a 22px (5 righe a 1280 =
   143px) e la fascia sale a 840px (280 a slide). Sotto i 992 la colonna e'
   stretta e le righe raddoppiano: la fascia sale con loro. */
.testi-item p{ font-size: 22px; line-height: 1.35; margin-bottom: 28px; }
.testi-carousel-3{ height: 840px; }
@media only screen and (max-width: 991px){
  .testi-carousel-3{ height: 1140px; }
}
@media only screen and (max-width: 575px){
  .testi-item p{ font-size: 19px; }
  .testi-carousel-3{ height: 1200px; }
}
/* CORREZIONE 2026-09-07 (ux §1.5): il tema spegne le slide non attive a .3
   e sopra i 992 ha senso, con la foto pinnata accanto. Sotto i 768 la fascia
   e' 2,5 schermate e cinque recensioni vere su sei erano grigio su grigio:
   .75, cosi' si leggono tutte e l'attiva resta la piu' nera. Override
   confinato al mobile, reversibile, stessa specificita' del tema (0,2,0). */
@media only screen and (max-width: 767px){
  .testi-carousel-3 .swiper-slide{ opacity: .75; }
}
/* la riga sopra il carosello: sotto i 768 il tema la fa `flex-wrap:wrap`, ma
   `.right-content{flex:1 1 0}` si stringe invece di andare a capo e il testo
   usciva a UNA PAROLA PER RIGA (misurato a 360). Le due meta' prendono la
   riga intera. */
@media only screen and (max-width: 767px){
  .testi-carousel-wrap .testi-top-content .left-content,
  .testi-carousel-wrap .testi-top-content .right-content{ flex: 1 1 100%; }
  .testi-carousel-wrap .testi-top-content .left-content .eg-testi-fonte{ max-width: none; }
}

/* 8.12 L'EMAIL E' LUNGA 31 CARATTERI. Il tema scrive `.footer-address .mail`
   a 28px in Cal Sans pensando a «support@example.com»: la nostra sforava la
   colonna del footer a 1280 (misurato: tagliata a «affittibreviita») e il
   pannello mobile a 360. Corpo minore e la parola puo' spezzarsi. */
.footer-address .mail,
.mobile-side-menu .side-menu-list a.mail{
  font-size: 18px;
  overflow-wrap: anywhere;   /* rete di sicurezza: solo se il pezzo non ci sta */
  /* `word-break:break-all` spezzava a meta' parola («affittibrevi / talia.it»,
     art-direction §2.9, ux §1.7): via. L'a-capo buono e' il <wbr> dopo la
     chiocciola che scrive linkMail() nel guscio. */
}
/* il tema scrive `.side-menu-content .side-menu-contact .side-menu-list li a.mail`
   a 26px (0,4,1): MISURATO a 390, l'indirizzo usciva su due righe da 40px.
   Stessa specificita' del tema piu' la classe. */
.side-menu-content .side-menu-contact .side-menu-list li a.mail{ font-size: 16px; line-height: 1.3; }
/* l'indirizzo del pannello e' un DATO su due righe: il <br> resta acceso
   sotto i 768 (stessa scelta di §10.6 per i recapiti) */
@media only screen and (max-width: 767px){
  .side-menu-list li p br{ display: block; }
}
/* la .social-list del tema e' una riga di link separati da un trattino:
   `.footer-widget .social-list li:not(:last-of-type):before` (0,3,1), con
   13px di padding a destra e `margin-top:100px` sulla lista. La nostra e' una
   colonna di due link: il trattino restava orfano dopo «Indicazioni su Google
   Maps» (misurato, anche dopo un primo tentativo con `::after`, che era il
   selettore sbagliato). Stessa specificita' del tema piu' la nostra classe. */
.footer-widget .social-list.eg-social-list{ display: block; margin-top: 18px; }
.footer-widget .social-list.eg-social-list li{ display: block; line-height: 1.1; }
.footer-widget .social-list.eg-social-list li:not(:last-of-type){ margin-right: 0; padding-right: 0; }
.footer-widget .social-list.eg-social-list li:not(:last-of-type):before{ content: none; }

/* 8.10 La fonte delle recensioni, al posto del rating del tema (copy §2.8):
   `.left-content` del tema affianca il numero a 60px e le stelline; qui c'e'
   una riga di testo nel carattere dei titoli. */
.testi-carousel-wrap .testi-top-content .left-content .eg-testi-fonte{
  font-family: var(--tl-ff-heading);
  font-size: 22px;
  line-height: 1.2;
  color: var(--tl-color-heading-primary);
  margin: 0;
  max-width: 240px;
}

/* i link dentro le risposte delle FAQ (ux §1.6): testo piccolo su chiaro,
   variante scura (5,10:1), sottolineati; sono link in una frase */
.faq-content .faq-accordion .accordion-item .accordion-body a,
.faq-content-2 .faq-accordion .accordion-item .accordion-body a{
  color: var(--sav-accento-scuro);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* 8.5 Il «meno» delle FAQ sotto i 768: il tema lo mette in assoluto e le
   domande lunghe ci passano sotto (misurato su alpi). */
@media only screen and (max-width: 767px){
  .faq-content .faq-accordion .accordion-item .accordion-button,
  .faq-content-2 .faq-accordion .accordion-item .accordion-button{ padding-right: 36px; font-size: 22px; }
  /* B2, secondo punto (qa §6.5, MISURATO 3,73:1 a 390 sulla domanda aperta
     della home; serve 4,5). Il tema colora il titolo APERTO con l'accento
     (`.accordion-button:not(.collapsed){color:var(--tl-color-theme-primary)}`,
     0,3,0): sopra i 768 il corpo e' 30px e passa come testo grande (3:1),
     ma la riga qui sopra lo porta a 22px ed e' testo piccolo. Stessa
     famiglia di B2: si usa la variante scura. La regola vive DENTRO il
     media query che ha creato il problema, cosi' sopra i 768 il tema resta
     esattamente com'e'. */
  .faq-content .faq-accordion .accordion-item .accordion-button:not(.collapsed),
  .faq-content-2 .faq-accordion .accordion-item .accordion-button:not(.collapsed){ color: var(--sav-accento-scuro); }
}
@media (min-width: 768px){
  .faq-content .faq-accordion .accordion-item .accordion-button,
  .faq-content-2 .faq-accordion .accordion-item .accordion-button{ column-gap: 24px; }
}


/* ============================================================
   9. NOTE DI CANTIERE — cosa NON e' stato fatto, e perche'
   ------------------------------------------------------------
   1. Il simbolo «ST» e' l'unico file del logo (180x60, ritagliato a 62x60 il
      2026-09-07): sta a 46px CSS ovunque tranne il preloader. Il vettoriale e
      una variante monocromatica bianca vanno chiesti al committente (regia §3).
   2. Le fasce del tema che si rivelano al passaggio del mouse (le quattro
      didascalie dei pilastri) restano del tema: sotto i 767 il tema le
      mostra sempre; fra 768 e 1023 su touch non compaiono (regia S7).
   3. Nessun `overflow-x:hidden` aggiunto da noi: quello di main.css su
      html/body e' del tema e nasconde i sintomi, non li cura.
   ============================================================ */


/* ============================================================
   10. PAGINE INTERNE (WP4) — i componenti delle sei pagine
   ------------------------------------------------------------
   Sei pagine, quattro modelli del demo: portfolio.html (appartamenti),
   portfolio-details.html (le due schede), service-details.html
   (proprietari, investimenti), contact.html (contatti). Le classi qui sotto
   sono quelle che tools/build-savorani-pages.mjs elenca in fondo al suo
   rapporto: il tema non le conosce e senza queste regole si rendono nude
   (sono componenti "scoped": fuori dal contenitore antenato del tema non
   ereditano niente, senza errori). Stessa regola di §7: tipografia, colori,
   raggi e spaziature dal TEMA, e ogni regola porta la misura che l'ha resa
   necessaria (screenshot in .shots/savorani-wp4, prima build di WP4).
   ============================================================ */

/* --- 10.1 La sezione generica (.eg-blocco) --------------------------
   section-heading-2 + section-title del tema; il sommario prende la stessa
   misura che il tema da' al testo lungo di service-details (785px), perche'
   a 1280 correva su tutta la riga (MISURATO: 125 caratteri per riga). */
.eg-blocco .section-heading p{ max-width: 785px; }

/* i passi numerati FUORI da .service-details-content (appartamenti.html,
   «Come si prenota»): il tema li veste solo dentro quel contenitore, e qui
   uscivano come titoli h3 da 50px uno sotto l'altro (MISURATO a 1280).
   Stessa griglia del tema: due colonne da 40px di gap, numero a sinistra. */
.eg-blocco .eg-passi{
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: 40px;
  margin-top: 40px;
}
.eg-blocco .eg-passi .eg-passo{
  display: grid;
  grid-template-columns: auto 1fr;
  grid-gap: 14px;
  min-width: 0;
}
.eg-blocco .eg-passi .eg-passo .content{ min-width: 0; }
.eg-blocco .eg-passi .eg-passo .content .title{ font-size: 26px; font-weight: 400; }
.eg-blocco .eg-passi .eg-passo .content p{ margin-bottom: 0; }
@media only screen and (max-width: 767px){
  .eg-blocco .eg-passi{ grid-template-columns: 1fr; }
  .eg-blocco .eg-passi .eg-passo{ display: block; }
}

/* una fila di bottoni del tema dentro il contenuto: a capo quando non ci
   stanno (a 360 tre bottoni Booking/Airbnb/Scrivici sforavano di 400px) */
.eg-cta-btn-wrap{
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  margin-top: 30px;
}
.eg-cta-btn-wrap .tl-primary-btn{ max-width: 100%; }
.eg-box-contatto .eg-cta-btn-wrap{ margin-top: 18px; }   /* nel box della colonna resta la misura di §7.4 */

/* --- 10.2 Le card del catalogo (project-item di portfolio.html) ------
   Le pillole del tema sono <a>; le nostre <span> (non c'e' una pagina per
   categoria): stessa veste, stessa specificita' del tema (0,4,0)+. */
/* B1 (qa §6.5, MISURATO a 1280 e a 390 sulle quattro pillole delle due
   schede vere: «Soggiorni di lavoro» 1,42 e 1,07 · «Piccoli gruppi» 1,51 ·
   «Coppie e singoli» 1,48 · «Famiglie» 1,50-2,78; mediane 2,11-3,11. Serve
   4,5). La pillola del tema e' bianca con bordo bianco e NIENTE fondo, e sta
   in ALTO sulla foto, dove il velo del tema (`.project-img:before`, gradiente
   dal basso) non arriva: su una camera chiara sparisce.
   Fondo pieno `--sav-accento-fondo` #2B837D, che e' il token nato per
   «fondo di componente col bianco sopra»: 4,52:1 misurato, e non dipende
   piu' da quale fotografia c'e' sotto. Bordo dello stesso verde per non
   lasciare un filo bianco intorno. Corpo, raggio, maiuscoletto e passo del
   tema non cambiano. */
.project-item .project-img ul li span{
  font-family: var(--tl-ff-heading);
  color: var(--tl-color-common-white);
  font-size: 13px;
  padding: 5px 15px;
  text-transform: uppercase;
  background-color: var(--sav-accento-fondo);
  border: 1px solid var(--sav-accento-fondo);
  border-radius: 100px;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* il titolo e' l'unico link testuale della card, controllo autonomo:
   MISURATO 30px (line-height:1 del tema) -> 7 + 30 + 7 = 44 */
.project-item .project-content .title a{
  color: inherit;
  display: inline-block;
  padding: 7px 0;
}
.project-item .project-content .title a:hover{ color: var(--sav-accento-scuro); }
.project-item .project-content > span{
  display: block;
  line-height: 1.6;
  color: var(--tl-color-text-body);
}
.project-item .project-content .eg-card-testo{ margin: 12px 0 0; }
.project-item .project-content .eg-card-azione{ margin-top: 22px; }

/* LA CARD SENZA FOTO (Domus Traversari 13 e 17). Tinta piatta CHIARA (la
   variante soft dell'accento, gia' variabile di §1) con il numero civico in
   grande nell'accento: due card scure gemelle di fila leggono come errori di
   caricamento (art-direction §2.5), due numeri diversi come una scelta.
   Il velo nero del tema (.project-img:before, opacita' .11) serve sulla
   foto e qui non c'e' foto. Le pillole passano a testo scuro: bianco su
   #E8F7F6 non si vede. Il civico e' aria-hidden: #2E8C86 su #E8F7F6 e' 3,6:1,
   sopra la soglia dei segni grafici. */
.project-item.eg-card-vuota .project-img{
  background-color: var(--sav-accento-soft);
  display: flex;
  align-items: center;
  justify-content: center;
}
.project-item.eg-card-vuota .project-img:before{ content: none; }
.project-item.eg-card-vuota .eg-card-vuota__iniziale{
  font-family: var(--tl-ff-heading);
  font-size: 180px;
  line-height: 1;
  color: var(--tl-color-theme-primary);
  user-select: none;
}
.project-item.eg-card-vuota .project-img ul li span{
  color: var(--tl-color-heading-primary);
  /* niente fondo verde qui: la card senza foto e' gia' tinta soft e le
     pillole sono scure sopra (15,96:1 misurato) */
  background-color: transparent;
  border-color: var(--tl-color-heading-primary);
}
@media only screen and (max-width: 767px){
  .project-item.eg-card-vuota .eg-card-vuota__iniziale{ font-size: 120px; }
}

/* --- 10.3 Le schede (portfolio-details.html) -------------------------
   IL RIEPILOGO A SEI CAMPI: e' un <dl> (sono dati) nel .project-details-meta
   del tema, che e' un flex `space-between` senza a-capo: a 360 sei voci su
   una riga sforavano il viewport. A capo con il gap del tema, e sotto i 768
   una griglia a due colonne. L'etichetta del tema e' #9F9FA4 sul fondo
   #F6F6F6 = 2,3:1: passa a --tl-color-grey-1 (6,6:1). Il valore e' un <p>
   e non l'<h5> del tema (divergenza 8 del generatore): stessa geometria. */
.project-details-wrap .project-details-meta.eg-riepilogo{
  flex-wrap: wrap;
  gap: 24px 30px;
  align-items: flex-start;
}
.eg-riepilogo .details-meta{ min-width: 0; }
.eg-riepilogo dt,
.eg-riepilogo dd{ margin: 0; font-weight: inherit; }
.project-details-wrap .project-details-meta .details-meta span{ color: var(--tl-color-grey-1); }
.project-details-wrap .project-details-meta .details-meta .eg-meta-valore{
  font-family: var(--tl-ff-p);
  font-size: 18px;
  font-weight: 500;
  line-height: 1.4;
  color: var(--tl-color-heading-primary);
  margin-bottom: 0;
}
@media only screen and (max-width: 767px){
  .project-details-wrap .project-details-meta.eg-riepilogo{
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px 24px;
  }
}
/* i sottotitoli h3 della scheda: il tema da' 30px sotto e niente sopra
   (nel demo c'e' sempre un paragrafo prima). Qui «Servizi inclusi» stava a
   10px dall'elenco precedente (MISURATO). L'elenco che segue subito il
   titolo non aggiunge i suoi 30px. */
.project-details-wrap .details-title-2{ margin-top: 50px; }
.project-details-wrap .details-title-2 + .project-details-list{ margin-top: 0; }
.project-details-wrap .project-details-list ul{ margin: 0; padding: 0; }
@media only screen and (max-width: 767px){
  .project-details-wrap .project-details-list{ flex-direction: column; row-gap: 10px; }
  .project-details-wrap .details-title-2{ font-size: 34px; }
  .project-details-wrap .details-title{ font-size: 40px; }
}

/* I SERVIZI INCLUSI: elenco con le icone FontAwesome del copy. Senza veste
   erano dieci righe con l'icona incollata alla parola (MISURATO). Il tondo
   e' quello che il tema mette davanti alle voci di service-details
   (`.service-details-item .icon`: tondo pieno da 80px con l'icona dentro),
   in scala: 44px, fondo soft, icona nell'accento scuro (5,1:1). */
.eg-servizi{
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px 30px;
}
@media (min-width: 992px){ .eg-servizi{ grid-template-columns: repeat(3, 1fr); } }
@media only screen and (max-width: 575px){ .eg-servizi{ grid-template-columns: 1fr; } }
.eg-servizi li{
  display: flex;
  align-items: center;
  gap: 14px;
  font-family: var(--tl-ff-heading);
  font-size: 16px;
  line-height: 1.3;
  color: var(--tl-color-heading-primary);
  min-width: 0;
}
.eg-servizi li i{
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background-color: var(--sav-accento-soft);
  color: var(--sav-accento-scuro);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
}

/* LA GALLERIA STATICA: `.gallary-inner-item-2 a{height:477px}` del tema e'
   pensata per tre colonne a 1280. Nelle nostre colonne (col-6 a 360: 156px
   di larghezza) diventava una fetta verticale 156x477 (MISURATO). La
   proporzione sostituisce l'altezza fissa: 4:5 come le foto verticali. */
.eg-galleria-scheda .gallary-inner-item-2 a{
  display: block;
  height: auto;
  aspect-ratio: 4 / 5;
}
.eg-galleria-scheda .gallary-inner-item-2 a:focus-visible{ outline-offset: 4px; border-radius: 24px; }

/* i bottoni Booking/Airbnb (bottoni del tema, `rel=external`) e la riga che
   dichiara che sono siti esterni */
.eg-nota-esterni{
  margin: 20px 0 0;
  font-size: 15px;
  line-height: 1.5;
  color: var(--tl-color-text-body);
}
.eg-nota-esterni a{
  color: var(--sav-accento-scuro);
  text-decoration: underline;
  text-underline-offset: 3px;
  display: inline-block;
  padding: 10px 0;
}

/* LE RECENSIONI: <figure> dentro la scheda bianca di §7.4. Il tema veste
   `blockquote` come la citazione grande del blog (fondo #EFEBE8, 45px di
   padding, testo centrato): dentro una card da 30px di padding era una
   scatola nella scatola (MISURATO a 1280). Qui la citazione e' testo, e
   la card prende tutta l'altezza della colonna (quattro card a due a due,
   pari altezza per riga). Niente voti, niente stelline. */
.eg-scheda.eg-recensione{
  height: 100%;
  margin: 0;
  display: flex;
  flex-direction: column;
}
.eg-recensione blockquote{
  background: none;
  padding: 0;
  margin: 0 0 22px;
  border-radius: 0;
  text-align: left;
  flex: 1 1 auto;
}
.eg-recensione blockquote p{ color: var(--tl-color-text-body); margin-bottom: 0; }
.eg-recensione blockquote .eg-recensione__titolo{
  font-family: var(--tl-ff-heading);
  font-size: 20px;
  line-height: 1.3;
  color: var(--tl-color-heading-primary);
  margin-bottom: 12px;
}
.eg-recensione__nome{
  font-family: var(--tl-ff-heading);
  font-size: 16px;
  line-height: 1.2;
  color: var(--tl-color-heading-primary);
  display: flex;
  align-items: center;
  gap: 12px;
}
/* il filetto orizzontale, il segno che sostituisce il motivo a punta */
.eg-recensione__nome::before{
  content: "";
  flex: 0 0 auto;
  width: 24px;
  height: 2px;
  background-color: var(--tl-color-theme-primary);
}

/* I DUE RIMANDI in fondo alla scheda: due frasi-link in una scheda bianca,
   con il filetto davanti. Controlli autonomi: 20px di corpo + 10 + 10 = 46. */
.eg-rimandi-lista{
  list-style: none;
  margin: 0;
  padding: 30px;
  border: 1px solid var(--tl-color-border-1);
  border-radius: 24px;
  background-color: var(--tl-color-common-white);
  display: grid;
  gap: 8px;
}
.eg-rimandi-lista li{ position: relative; padding-left: 38px; }
.eg-rimandi-lista li::before{
  content: "";
  position: absolute;
  left: 0;
  top: 22px;
  width: 24px;
  height: 2px;
  background-color: var(--tl-color-theme-primary);
}
.eg-rimandi-lista a{
  display: inline-block;
  padding: 10px 0;
  font-family: var(--tl-ff-heading);
  font-size: 20px;
  line-height: 1.3;
  color: var(--tl-color-heading-primary);
  text-decoration: underline;
  text-underline-offset: 5px;
  text-decoration-color: var(--tl-color-theme-primary);
}
.eg-rimandi-lista a:hover{ color: var(--sav-accento-scuro); }

/* --- 10.4 Le pagine servizio (service-details.html) ------------------
   L'INDICE della colonna sticky: `.list-title` e' un <p> (e' l'etichetta di
   un indice, non un titolo della pagina) e il carattere dei titoli arriva
   da un selettore di elemento che sul <p> non aggancia (stesso difetto della
   pillola, §2). Corpo e margine li da' gia' la classe del tema. */
.service-details-left-content .service-category-list.eg-indice .list-title{
  font-family: var(--tl-ff-heading);
  color: var(--tl-color-heading-primary);
}
/* IL BOX CONTATTO sotto l'indice: nel tema il box che segue la lista
   (`.service-details-cta`) porta 30px di margine sopra. Il nostro
   `.eg-box-contatto` lo sostituisce e non li aveva: i due box si toccavano
   (segnalazione del committente, 2026-10-04). Stessa misura del tema. */
.service-details-left-content .service-category-list + .eg-box-contatto{ margin-top: 30px; }
/* il titolo h2 di ogni blocco: il tema da' 15px sotto e niente sopra (nel
   demo prima di ogni titolo c'e' una fotografia con il suo margine). Qui
   «Studenti e lavoratori» stava attaccato ai bottoni delle formule. */
.service-details-content > * + .details-title{ margin-top: 50px; }
.service-details-content .service-faq{ margin-top: 50px; }

/* LE QUATTRO CARD «FARE DA SOLI» E LE DUE FORMULE. Il tema scrive
     .service-details-item{display:grid;grid-template-columns:80px 1fr}
   con gli 80px per il tondo dell'icona. Le nostre voci hanno UN solo
   figlio (.content), che finiva nella colonna da 80px: MISURATO a 1280,
   testo a una parola per riga («Un / prezzo / sbagliato»). Stessa
   specificita' del tema (0,3,0) piu' la classe nostra. Sono card: la scheda
   bianca di §7.4, e il `max-width:334px` del tema sul <p> se ne va. */
.service-details-content .service-details-items .service-details-item.eg-problema,
.service-details-content .service-details-items .service-details-item.eg-formula{
  display: block;
  border: 1px solid var(--tl-color-border-1);
  border-radius: 24px;
  padding: 30px;
  background-color: var(--tl-color-common-white);
}
.service-details-content .service-details-items .service-details-item.eg-problema .content p,
.service-details-content .service-details-items .service-details-item.eg-formula .content p{
  max-width: none;
}
.service-details-content .service-details-items .service-details-item.eg-problema .content .title{ margin-bottom: 12px; }
/* le due formule affiancate a pari peso: stessa altezza (la griglia del
   tema le stira), stessi campi nello stesso ordine, bottone allineato in
   fondo. Sotto i 768 una sotto l'altra (§7.2). */
.service-details-content .service-details-items .service-details-item.eg-formula .content{
  display: flex;
  flex-direction: column;
  height: 100%;
}
.service-details-content .service-details-items .service-details-item.eg-formula .content .title{
  font-size: 30px;
  line-height: 1.1;
  margin-bottom: 16px;
}
.eg-formula__frase{
  color: var(--tl-color-heading-primary);
  font-weight: 500;
  margin-bottom: 4px;
}
.eg-formula__voci{ margin: 0; }
.eg-formula__voci dt{
  font-family: var(--tl-ff-heading);
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--tl-color-grey-1);
  margin: 18px 0 6px;
}
.eg-formula__voci dd{ margin: 0; color: var(--tl-color-text-body); }
.service-details-content .service-details-items .service-details-item.eg-formula .eg-cta-btn-wrap{
  margin-top: auto;
  padding-top: 28px;
}

/* --- 10.5 Contatti (contact.html) ------------------------------------
   I CINQUE RECAPITI nei `.request-item` del tema: `.request-item-wrap` e'
   un flex a due voci con 65px di gap, e con cinque voci il quinto usciva
   dalla colonna e finiva SOTTO il titolo del modulo (MISURATO a 1280).
   Griglia a due colonne, una sotto i 576. Stessa specificita' del tema
   (0,2,0) piu' la classe nostra. */
.request-content .request-item-wrap.eg-recapiti-wrap{
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 34px 40px;
  margin-bottom: 0;
}
@media only screen and (max-width: 575px){
  .request-content .request-item-wrap.eg-recapiti-wrap{ grid-template-columns: 1fr; row-gap: 30px; }
}
.request-content .request-item-wrap.eg-recapiti-wrap .request-item{ min-width: 0; }
/* l'etichetta: il tema la scrive #9F9FA4 (2,3:1 sul fondo): grey-1 (6,6:1),
   con l'icona FontAwesome nell'accento (segno grafico, 3,7:1) */
.request-content .request-item-wrap.eg-recapiti-wrap .request-item span{
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--tl-color-grey-1);
  margin-bottom: 12px;
}
.request-content .request-item-wrap.eg-recapiti-wrap .request-item span i{
  color: var(--tl-color-theme-primary);
  font-size: 16px;
  width: 20px;
  text-align: center;
}
.request-content .request-item-wrap.eg-recapiti-wrap .request-item p{
  margin-bottom: 8px;
  line-height: 1.5;
}
/* i link dei recapiti sono controlli autonomi: 18px x 1,4 = 25 + 10 + 10 = 45.
   Il tema li scrive neri con (0,4,1): qui (0,5,1). */
.contact-page-area .request-content .request-item-wrap.eg-recapiti-wrap .request-item a{
  color: var(--sav-accento-scuro);
  text-decoration: underline;
  text-underline-offset: 4px;
  width: fit-content;
  padding: 10px 0;
  line-height: 1.4;
  overflow-wrap: anywhere;
}
.contact-page-area .request-content .request-item-wrap.eg-recapiti-wrap .request-item a:hover{ color: var(--tl-color-heading-primary); }
.eg-dati-fiscali{
  margin: 30px 0 0;
  font-size: 15px;
  line-height: 1.5;
  color: var(--tl-color-grey-1);
}
.contact-page-area .request-content .contact-img{ margin-top: 30px; }
/* sotto i 992 il modulo scende sotto i recapiti: gli serve aria */
@media only screen and (max-width: 991px){
  .contact-page-area .request-form-wrap{ margin-top: 60px; }
}

/* LA MAPPA SENZA IFRAME (divergenza 7 del generatore): al posto del
   riquadro di Google da 24px di raggio, una scheda bianca con lo stesso
   raggio: indirizzo nel carattere dei titoli, la nota, il bottone del tema
   che apre Maps solo se lo si clicca. */
.eg-mappa{
  background-color: var(--tl-color-common-white);
  border: 1px solid var(--tl-color-border-1);
  border-radius: 24px;
  padding: 50px 40px;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  column-gap: 40px;
}
.eg-mappa__titolo,
.eg-mappa address,
.eg-mappa__nota{ grid-column: 1; }
.eg-mappa__titolo{
  font-family: var(--tl-ff-heading);
  font-size: 13px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--tl-color-grey-1);
  margin: 0 0 12px;
}
.eg-mappa address{
  font-family: var(--tl-ff-heading);
  font-size: 30px;
  line-height: 1.2;
  font-style: normal;
  color: var(--tl-color-heading-primary);
  margin: 0 0 12px;
}
.eg-mappa__nota{ margin: 0; color: var(--tl-color-text-body); }
.eg-mappa .tl-primary-btn{
  grid-column: 2;
  grid-row: 1 / 4;
  align-self: center;
  max-width: 100%;
}
@media only screen and (max-width: 767px){
  .eg-mappa{ grid-template-columns: 1fr; padding: 30px; }
  .eg-mappa .tl-primary-btn{ grid-column: 1; grid-row: auto; width: fit-content; margin-top: 24px; }
  .eg-mappa address{ font-size: 24px; }
}

/* --- 10.6 Correzioni MISURATE a 360 dopo la prima veste ---------------
   Le pillole della card: la <ul> del tema e' un flex senza a-capo, e a 360
   «Coppie e singoli» + «Soggiorni di lavoro» non ci stanno in 300px: la
   seconda pillola si spezzava su due righe e usciva dal riquadro. A capo
   con lo stesso passo (10px) del tema, e ogni pillola resta su una riga. */
.project-item .project-img ul{
  flex-wrap: wrap;
  gap: 8px 10px;
  right: 30px;
}
.project-item .project-img ul li:not(:last-of-type){ margin-right: 0; }
.project-item .project-img ul li span{ white-space: nowrap; }

/* Il tema spegne TUTTI i <br> sotto i 768 (`br{display:none}`, trappola 10
   del guscio): giusto per la prosa, non per i DATI su due righe. La riga
   della card («Via Cerchio 19 · centro storico / Fino a 5 ospiti…») e gli
   indirizzi dei recapiti si leggevano incollati (MISURATO a 360). Qui il
   <br> torna a fare il suo mestiere. */
/* CORREZIONE 2026-09-08: la stessa riga esiste sulla card della HOME
   (`.project-item-3`), dove fino a ieri non si vedeva mai su telefono perche'
   il contenuto era nascosto (B5). Riaperta la card, a 390 si leggeva
   «Via Cerchio 19, centro storico Fino a 5 ospiti · 2 camere · 2 bagni» tutto
   di seguito (MISURATO sullo screenshot .shots/savorani-qa-fix): il <br> le
   serve esattamente come al catalogo. */
@media only screen and (max-width: 767px){
  .project-item .project-content > span br,
  .project-item-3 .project-content > span br,
  .eg-recapiti-wrap .request-item p br,
  .eg-mappa address br{ display: block; }
}

/* Il bottone dentro le card delle formule: il tema veste `.icon` dentro
   `.service-details-item` come il tondo da 80px dell'icona di servizio
   (0,4,0), e il tondo della freccia del bottone (40px) diventava un ovale
   da 80 (MISURATO a 1280 e 360). Misura del bottone, con una classe in piu'. */
.service-details-content .service-details-items .service-details-item .tl-primary-btn .icon{
  height: 40px;
  width: 40px;
}
/* il telefono nella riga sotto i bottoni esterni: MISURATO 43px con 10px
   di padding (riga da 15px x 1,5 = 22,5) -> 11 + 22,5 + 11 = 44,5 */
.eg-nota-esterni a{ padding: 11px 0; }


/* ============================================================
   11. CORREZIONI DEL 2026-09-08 (qa-report §6, avvisi A3 e A6)
   ============================================================ */

/* --- A3: la prima didascalia del banner tocca il bordo dello schermo ---
   MISURATO a 1280 (qa §6.5/A3): le quattro didascalie stanno a x 0, 328, 655,
   983 e i separatori a 297, 624, 951. Le colonne 2-4 hanno 31px d'aria alla
   loro sinistra — e' lo `spaceBetween: 30` di Swiper (banner-process.js) fra
   la foto precedente e la loro — mentre la PRIMA comincia esattamente sul
   bordo del viewport: «A casa nostra, / come a casa tua» parte a x 0.
   Il tema qui toglie il padding sinistro sotto i 1400
   (`.antra-swiper-wrapper .swiper-slide .banner-process-caption{padding-left:0}`).
   Correzione: gli stessi 30px, alla SOLA prima didascalia, e solo nella
   finestra dove il tema li ha tolti. Sotto i 767 il tema ne mette gia' 15 per
   parte e questa regola non entra; sopra i 1399 ce ne sono 57.
   RESIDUO DICHIARATO: fra 768 e 1023 il carosello mostra 2 didascalie per
   vista e si puo' scorrere; se si scorre, la didascalia che arriva al bordo
   non e' piu' la prima e non ha il padding. Sopra i 1024 le quattro slide
   stanno tutte in vista e non c'e' niente da scorrere. */
@media only screen and (min-width: 768px) and (max-width: 1399px){
  .banner-process-carousel .swiper-slide:first-child .banner-process-caption{ padding-left: 30px; }
}

/* --- A6: le forme decorative senza width/height (CLS) ------------------
   MISURATO (qa §6.5/A6): 4 immagini in home, 1 in appartamenti, 1 in
   contatti senza `width`/`height`. Sono le forme del tema
   (`about-shape-2.png` 791x576, `section-heading.png` 500x190), tutte
   `alt=""` + `aria-hidden`. Le misure vere sono ora nel markup (i generatori
   le leggono dal file), ma il tema dichiara solo `img{max-width:100%}`:
   con l'attributo `height` e una larghezza che si stringe
   (`.section-heading-wrap .shape{width:43%}` sotto i 1199) l'immagine si
   schiaccerebbe. `height:auto` e' la meta' mancante della coppia: gli
   attributi servono al browser per riservare lo spazio, il CSS per
   ridimensionare senza deformare. */
.section-heading-wrap .shape img,
.about-section-3 .shape-1 img{ height: auto; }


/* ============================================================
   12. IL FORM CHE INVIA (2026-09-22)
   ------------------------------------------------------------
   Le classi sono quelle di tools/lib/lead.mjs (CSS_LEAD), identiche sui
   sei siti del gruppo: qui cambiano solo i COLORI, presi dalle variabili
   di §1, e due misure per il tema Antra. La semantica non si tocca, o il
   giorno che la libreria cambia questo foglio resta indietro da solo.
     .eg-hp          l'honeypot, fuori schermo (non display:none: alcuni
                     robot lo rispettano e non lo compilerebbero)
     .eg-consenso    la casella obbligatoria col link all'informativa
     .eg-turnstile   il riquadro anti-spam di Cloudflare
     .eg-lead-esito  la riga di esito, role="status"
     .eg-lead-campi  i campi: spariscono a invio riuscito, resta l'esito
   ============================================================ */
.eg-hp{ position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; }

/* La casella e la sua riga. `align-items:flex-start` perche' la riga va a
   capo su due righe a 390: la spunta resta allineata alla PRIMA riga, non
   centrata sul blocco. 1.25rem = 20px: sotto i 24 la casella nativa e'
   scomoda da colpire, e l'area cliccabile la allarga la <label>. */
.eg-consenso{ display: flex; gap: .75rem; align-items: flex-start; margin: 0 0 24px; }
/* 24x24 e non 20: e' la misura minima di un bersaglio puntato (WCAG 2.5.8),
   MISURATA a 390 e a 1280 con tools/shoot.mjs, che a 20px la segnalava. */
.eg-consenso input[type="checkbox"]{
  flex: 0 0 auto; width: 24px; height: 24px; margin-top: 1px;
  accent-color: var(--sav-accento-fondo);
}
/* la label del tema dentro `.form-item` e' un'etichetta di campo (piccola,
   spaziata): qui e' una FRASE da leggere, e torna testo normale. */
.eg-modulo .eg-consenso label{
  margin: 0; font-size: 15px; line-height: 1.55; font-weight: 400;
  text-transform: none; letter-spacing: 0; display: inline;
}
.eg-modulo--chiara .eg-consenso label{ color: var(--tl-color-text-body); }
.eg-modulo--chiara .eg-consenso a{ color: var(--sav-accento-scuro); text-decoration: underline; }
.eg-modulo--scura .eg-consenso a{ color: var(--sav-accento-su-scuro); text-decoration: underline; }
.eg-consenso input[type="checkbox"]:focus-visible{
  outline: 2px solid var(--sav-accento-scuro); outline-offset: 2px;
}

/* La riga sotto il tasto («Per esteso: informativa privacy»): il tema
   veste `.eg-form-hint` come testo di servizio e il suo <a> nasceva dello
   stesso colore del testo, cioe' non si vedeva che era un link. */
.eg-modulo--chiara .eg-form-hint a{ color: var(--sav-accento-scuro); text-decoration: underline; }
.eg-modulo--scura .eg-form-hint a{ color: var(--sav-accento-su-scuro); text-decoration: underline; }

/* Il riquadro Cloudflare: `data-size="flexible"` lo fa largo quanto la
   colonna. I 65px di altezza minima sono la misura del widget montato e
   servono a non far saltare il layout mentre arriva (CLS). */
.eg-turnstile{ margin-bottom: 24px; min-height: 65px; }

/* L'esito. Vuoto non si vede: `:empty` prima, o resterebbe un filetto
   colorato sotto al tasto anche a pagina appena aperta. */
.eg-lead-esito:empty{ display: none; }
.eg-lead-esito{
  margin-top: 20px; padding: 14px 18px;
  border-left: 3px solid var(--sav-accento-fondo);
  background: #EEEEEE;
  font-size: 15px; line-height: 1.55; color: var(--tl-color-heading-primary);
}
/* verde e rosso solo come SEGNO accanto al testo, mai come unico
   portatore dell'informazione (WCAG 1.4.1): la frase dice gia' tutto. */
.eg-lead-esito--ok{ border-left-color: #2E7D32; }
.eg-lead-esito--errore{ border-left-color: #C62828; }
.eg-lead-esito:focus{ outline: 2px solid var(--sav-accento-scuro); outline-offset: 2px; }
.eg-modulo--scura .eg-lead-esito{ background: rgba(255,255,255,.08); color: #fff; }

/* A invio riuscito i campi se ne vanno e resta la risposta: un modulo
   vuoto sotto un «richiesta inviata» invita a rimandarla. */
form[data-eg-stato="inviato"] .eg-lead-campi{ display: none; }

/* --- la pagina dell'informativa -------------------------------------
   Solo testo: si allunga la misura di riga e si stringe l'interlinea dei
   titoli, che il tema dimensiona per una pagina di servizio. Niente
   tipografia nuova: sono le stesse classi del tema. */
.eg-legale p{ max-width: 68ch; }
.eg-legale .details-title{ margin-top: 48px; }
.eg-legale .details-title:first-child{ margin-top: 0; }
/* GERARCHIA: dentro `.service-details-content` il tema fa `.details-title-2`
   (l'h3) di 50px e `.details-title` (l'h2) di 40 — su una pagina di servizio
   l'h3 e' un titolo di apertura, qui sarebbe un sottotitolo piu' grande del
   titolo, cioe' un errore che si legge. Si riporta sotto: MISURATO a 1280
   e a 390 con tools/shoot.mjs. */
.eg-legale .details-title-2{ font-size: 26px; line-height: 1.25; margin: 28px 0 14px; }

/* MENU A TENDINA: freccia giu' a menu chiuso, su a menu aperto (richiesta
   del committente 2026-10-03: senza segno la select sembrava un campo di
   testo come gli altri). E' un segno d'interfaccia, non il motivo a punta
   del marchio. La classe `eg-select--aperto` la mette lead.js (tools/lib/
   lead-form.js). Tre classi come la regola del tema `.request-form-wrap
   .form-item .form-control`, che altrimenti azzera lo sfondo e con lui la
   freccia (succedeva qui: la .eg-select a una classe perdeva). Il colore e'
   scritto a mano: un `data:` non legge le variabili CSS. */
.request-form-wrap .form-item .eg-select{
  appearance: none;
  -webkit-appearance: none;
  padding-right: 52px;
  cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%232B837D' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 22px center;
}
.request-form-wrap .form-item .eg-select.eg-select--aperto{
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 8l6-6 6 6' fill='none' stroke='%232B837D' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
}

/* PRELOADER SENZA BARRA DI SCORRIMENTO: il tema scrive
   `.preloader span{ overflow-x: hidden }` per la sua scritta «ANTRA»; sugli
   span del marchio, con l'asse verticale che per regola CSS diventa `auto`,
   il testo (piu' alto della sua riga a line-height 1) mostrava per una
   frazione di secondo un riquadro con la barra (segnalazione del
   committente, 2026-10-03). Gli span del marchio non hanno nulla da tagliare. */
.preloader .eg-site-name span{ overflow: visible; }

/* PRELOADER CENTRATO come sul portale (richiesta del committente,
   2026-10-04): il tema centra la scritta con `align-content` su un blocco;
   il marchio qui e' un flex in colonna, e su un flex quella proprieta' non
   agisce: restava in alto. Lo centra `justify-content`. */
.preloader .eg-site-name{ justify-content: center; }

/* ============================================================
   11. GLI ANNUNCI AIRBNB (2026-10-04)
   Il catalogo passa da 4 a 17 case in due zone, e ogni scheda porta i
   dettagli dell'annuncio (regole, cosa manca, sicurezza, registrazione)
   e la mappa. Classi scritte da tools/build-savorani-pages.mjs.
   ============================================================ */

/* --- 11.1 L'intestazione di zona nel catalogo -------------------------
   Un h3 con la geometria di `details-title-2` del tema, staccato dalla
   griglia sopra: la prima zona segue l'intestazione di sezione, la
   seconda arriva dopo nove card. */
.project-section-inner .eg-zona-titolo{ margin: 70px 0 40px; }
.project-section-inner .section-heading-wrap + .eg-zona-titolo{ margin-top: 60px; }

/* --- 11.2 Le righe di dettaglio della scheda --------------------------
   «Non presenti:», «Compresi:», «A richiesta:» e le regole scritte
   dall'host: paragrafi del tema, con l'etichetta nel colore dei titoli. */
.project-details-wrap .eg-dettaglio{ margin: 0 0 14px; }
.project-details-wrap .eg-dettaglio strong{ color: var(--tl-color-heading-primary); font-weight: 600; }
.project-details-wrap .eg-servizi + .eg-dettaglio{ margin-top: 30px; }

/* --- 11.3 La mappa della scheda ---------------------------------------
   Stessa scheda bianca di contatti (§10.5, `.eg-mappa`), con due azioni
   invece di una e la cornice dove mappa.js monta l'iframe di Google SOLO
   dopo il clic. Senza JavaScript il bottone non c'e': resta il link. */
.eg-mappa--scheda{ margin-top: 30px; }
.eg-mappa__azioni{
  grid-column: 2;
  grid-row: 1 / 4;
  align-self: center;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
}
.eg-mappa .eg-mappa__azioni .tl-primary-btn{ grid-column: auto; grid-row: auto; }
.eg-mappa__apri{ border: 0; cursor: pointer; }
.no-js .eg-mappa__apri{ display: none; }
.eg-mappa__link{ text-decoration: underline; text-underline-offset: 4px; }
.eg-mappa__cornice{ grid-column: 1 / -1; margin-top: 30px; }
.eg-mappa__cornice[hidden]{ display: none; }
.eg-mappa__cornice iframe{
  display: block;
  width: 100%;
  height: 440px;
  border: 0;
  border-radius: 16px;
}
@media only screen and (max-width: 767px){
  .eg-mappa__azioni{ grid-column: 1; grid-row: auto; margin-top: 24px; }
  .eg-mappa .eg-mappa__azioni .tl-primary-btn{ margin-top: 0; }
  .eg-mappa__cornice iframe{ height: 340px; }
}
/* le regole scritte dall'host seguono la lista a due colonne: un respiro */
.project-details-wrap .project-details-list + .eg-dettaglio{ margin-top: 20px; }
