/* ============================================================
   Certosa Servizi — foglio di stile
   COMMENTATO RIGA PER RIGA (gruppo per gruppo).
   I selettori restano compatti su una riga: il commento sopra
   ciascuno spiega COSA stila e PERCHÉ, senza spezzare le
   dichiarazioni (manterrebbe il file leggibile e manutenibile).
   ============================================================ */

/* ============================================================
   Font self-hosted (woff2) — nessuna dipendenza da Google Fonts.
   Space Grotesk (display) + Inter (body). Licenza SIL OFL.
   Ogni @font-face registra UN peso di UN font: il browser userà
   il file .woff2 locale invece di scaricarlo da un server esterno.
   Questo chiude il problema GDPR (nessuna chiamata a Google) e
   velocizza il caricamento. font-display:swap = mostra subito un
   font di sistema e sostituisce quando il woff2 è pronto.
   ============================================================ */
/* Space Grotesk peso 400 (regular) — usato raramente nei titoli. */
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/space-grotesk-400.woff2') format('woff2');}
/* Space Grotesk peso 500 (medium). */
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/space-grotesk-500.woff2') format('woff2');}
/* Space Grotesk peso 600 (semibold) — titoli delle card. */
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/space-grotesk-600.woff2') format('woff2');}
/* Space Grotesk peso 700 (bold) — titoli grandi h1/h2 e numeri. */
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:700;font-display:swap;src:url('fonts/space-grotesk-700.woff2') format('woff2');}
/* Inter peso 400 (regular) — corpo del testo, il più usato. */
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/inter-400.woff2') format('woff2');}
/* Inter peso 500 (medium) — link di navigazione, label. */
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/inter-500.woff2') format('woff2');}
/* Inter peso 600 (semibold) — bottoni, testo in grassetto. */
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/inter-600.woff2') format('woff2');}

/* ============================================================
   Certosa Servizi — design system
   Direzione: light istituzionale (sobrio, autorevole).
   Tipografia ampia, bento misurata, hairline rules, micro-interazioni.
   ============================================================ */
/* :root = l'elemento <html>. Qui definisco le "custom property"
   (variabili CSS, forma --nome). Dichiararle una volta qui permette
   di riusarle ovunque con var(--nome) e di cambiarle in un punto solo. */
:root{
  /* palette istituzionale: bianco dominante, blu come accento deciso */
  --blue:#005495;              /* blu brand principale */
  --blue-deep:#013a68;         /* blu più scuro, per hover e gradienti */
  --blue-ink:#04243f;          /* blu quasi-nero, per i titoli */
  --blue-bright:#1a78c4;       /* blu acceso, per dettagli e linee */
  --blue-soft:#eaf2fa;         /* azzurrino tenue, sfondo di pill e icone */
  --blue-mist:#f5f9fd;         /* azzurrino ancora più tenue, sfondi sezioni */
  --blue-line:#dde8f3;         /* colore delle hairline (bordi sottili) */
  --blue-hair:#e9f0f8;         /* hairline ancora più tenue */
  --accent:#dfb220;--accent-ink:#b8860b;--accent-text:#7a5a00;   /* oro brand: accent-ink=decorativo, accent-text=leggibile su chiaro (AA) */
  --white:#ffffff;             /* bianco: superfici card (alias tematico) */
  --paper:#ffffff;             /* bianco: sfondo pagina (alias tematico) */
  --ink:#0d2236;               /* colore testo principale */
  --muted:#516a82;             /* grigio-blu per testo secondario */
  --muted-soft:#5b7086;        /* grigio-blu più chiaro, testo terziario (AA su bianco) */
  --display:'Space Grotesk',sans-serif;   /* stack font per i titoli */
  --body:'Inter',sans-serif;              /* stack font per il corpo */
  --maxw:1240px;               /* larghezza massima del contenuto centrato */
  --gut:24px;                  /* "gutter", spaziatura orizzontale base */
  --ease:cubic-bezier(.22,.61,.36,1);     /* curva di easing condivisa: parte decisa, frena dolce */
  --r:18px;                    /* raggio arrotondamento standard */
  --r-lg:26px;                 /* raggio arrotondamento grande (card) */

  /* ---- token semantici (default = tema light) -------------------------
     Le sezioni storiche usano ancora --white/--paper/--blue-soft ecc.
     Questi alias permettono al dark mode di ridefinire i colori in un
     punto solo, senza riscrivere i selettori esistenti. */
  --surface:#ffffff;        /* superficie card/box                       */
  --surface-2:#f5f9fd;      /* superficie tenue (input, strip)           */
  --surface-3:#eaf2fa;      /* superficie accentata (icone, pill)        */
  --bg:#ffffff;             /* sfondo pagina                              */
  --bg-soft:#f5f9fd;        /* sfondo sezioni alternate                  */
  --line:#dde8f3;           /* hairline                                  */
  --line-soft:#e9f0f8;      /* hairline tenue                            */
  --text:#0d2236;           /* testo principale                          */
  --text-strong:#04243f;    /* titoli                                    */
  --text-muted:#516a82;     /* testo secondario                          */
  --text-faint:#5b7086;     /* testo terziario (AA su bianco)             */
  --brand:#005495;          /* blu leggibile sul tema corrente           */
  --brand-bright:#1a78c4;   /* blu acceso sul tema corrente              */
  --aurora-a:rgba(10,92,168,.10);   /* macchie aurora hero               */
  --aurora-b:rgba(223,178,32,.10);  /* macchie aurora hero (oro)         */
  color-scheme:light;       /* dice al browser che l'UI di base è chiara */
}

/* ====================================================================
   DARK MODE — istituzionale notturno. Il blu/oro resta protagonista
   su un fondo blu-inchiostro profondo (non nero piatto).
   Attivato da [data-theme="dark"] sul <html> (impostato da app.js).
   Ridefinendo QUI le stesse variabili, tutto il sito cambia colore
   senza toccare un solo altro selettore. */
:root[data-theme="dark"]{
  --surface:#0f2138;         /* card: blu scuro invece che bianco */
  --surface-2:#0c1b2e;       /* superficie tenue scura */
  --surface-3:#15314f;       /* superficie accentata scura */
  --bg:#08111d;              /* sfondo pagina: blu quasi-nero */
  --bg-soft:#0b1828;         /* sfondo sezioni alternate scuro */
  --line:#1d3550;            /* hairline scura */
  --line-soft:#16293f;       /* hairline tenue scura */
  --text:#dde9f5;            /* testo chiaro su fondo scuro */
  --text-strong:#f0f6fc;     /* titoli quasi-bianchi */
  --text-muted:#9db4cc;      /* testo secondario chiaro */
  --text-faint:#7589a0;      /* testo terziario */
  --brand:#4ea3e8;          /* blu schiarito per contrasto AA su scuro   */
  --brand-bright:#6fb8f0;    /* blu ancora più chiaro */
  --blue-soft:#15314f;      /* ridefinisco gli alias storici più usati   */
  --blue-mist:#0c1b2e;       /* alias storico ridefinito per il dark */
  --blue-line:#1d3550;       /* alias storico ridefinito per il dark */
  --blue-hair:#16293f;       /* alias storico ridefinito per il dark */
  --blue-ink:#f0f6fc;       /* "ink" diventa chiaro: titoli leggibili    */
  --ink:#dde9f5;             /* testo principale chiaro */
  --muted:#9db4cc;           /* secondario chiaro */
  --muted-soft:#7589a0;      /* terziario */
  --accent-text:#e6c24d;     /* oro testuale leggibile su fondo scuro */
  --white:#0f2138;          /* superfici "bianche" → blu scuro           */
  --paper:#08111d;           /* sfondo "carta" → blu quasi-nero */
  --aurora-a:rgba(78,163,232,.16);  /* aurora blu, più intensa su scuro */
  --aurora-b:rgba(223,178,32,.12);  /* aurora oro */
  color-scheme:dark;         /* dice al browser che l'UI di base è scura */
}

/* Reset di base: azzera i margini/padding predefiniti di TUTTI gli
   elementi e imposta box-sizing:border-box, così padding e bordo
   rientrano nella larghezza dichiarata (calcoli più prevedibili). */
*{margin:0;padding:0;box-sizing:border-box}
/* <html>: scroll morbido tra le àncore; padding-top di 96px in modo che
   le àncore non finiscano sotto la nav fissa; blocca lo zoom-testo iOS. */
html{scroll-behavior:smooth;scroll-padding-top:96px;-webkit-text-size-adjust:100%}
/* <body>: font di base, colori di sfondo/testo dai token, interlinea
   1.6, antialiasing per testo più nitido, niente scroll orizzontale. */
body{
  font-family:var(--body);
  background:var(--paper);
  color:var(--ink);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
/* I link ereditano il colore del testo e non hanno sottolineatura di default. */
a{color:inherit;text-decoration:none}
/* Le immagini non superano mai la larghezza del contenitore; display block toglie lo spazio sotto. */
img{max-width:100%;display:block}
/* Colore della selezione del testo: sfondo blu, testo bianco. */
::selection{background:var(--blue);color:#fff}

/* Contenitore centrale riutilizzabile: larghezza massima e padding laterali. */
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 32px}

/* ---------- NAV ---------- */
/* Barra di navigazione: fissa in alto, sopra tutto (z-index 100),
   sfondo bianco semi-trasparente con effetto "vetro smerigliato"
   (backdrop-filter blur). Il bordo inferiore parte trasparente e
   compare allo scroll (vedi .scrolled). */
.nav{
  position:fixed;top:0;left:0;right:0;z-index:100;
  background:rgba(255,255,255,.78);
  backdrop-filter:saturate(180%) blur(18px);
  -webkit-backdrop-filter:saturate(180%) blur(18px);
  border-bottom:1px solid transparent;
  transition:border-color .4s var(--ease),background .4s var(--ease),box-shadow .4s var(--ease);
}
/* Stato "scrollato" (classe aggiunta da app.js oltre 20px): sfondo più
   opaco, bordo visibile e leggera ombra, per staccare la nav dal contenuto. */
.nav.scrolled{border-bottom-color:var(--blue-line);background:rgba(255,255,255,.93);box-shadow:0 6px 24px rgba(6,36,63,.05)}
/* Contenuto interno della nav: logo a sinistra, link a destra, allineati e distanziati. */
.nav-inner{max-width:var(--maxw);margin:0 auto;padding:16px 32px;display:flex;align-items:center;justify-content:space-between;gap:20px;transition:padding .4s var(--ease)}
/* Allo scroll la nav si "condensa": meno padding verticale. */
.nav.scrolled .nav-inner{padding:10px 32px}                 /* condensa allo scroll */
/* Blocco del logo: non si restringe (flex 0 0 auto). */
.brand{display:flex;align-items:center;gap:11px;flex:0 0 auto}
/* Immagine logo: altezza fissa che si riduce allo scroll (transizione morbida). */
.logo{height:54px;width:auto;display:block;transition:height .4s var(--ease)}
/* Logo più piccolo quando la nav è condensata. */
.nav.scrolled .logo{height:44px}
/* Contenitore dei link di navigazione: in fila, senza andare a capo. */
.nav-links{display:flex;gap:6px;align-items:center;flex-wrap:nowrap}
/* Singolo link: testo grigio, pill arrotondata, transizioni su colore e sfondo. */
.nav-links a{font-size:.9rem;font-weight:500;color:var(--muted);position:relative;padding:8px 14px;border-radius:100px;transition:color .25s var(--ease),background .25s var(--ease)}
/* Hover sui link normali (non la CTA): testo scuro e sfondo azzurrino. */
.nav-links a:not(.nav-cta):hover{color:var(--blue-ink);background:var(--blue-soft)}
/* Link della pagina corrente (classe .active): evidenziato in blu. */
.nav-links a.active:not(.nav-cta){color:var(--blue);background:var(--blue-soft)}
/* Trattino oro sotto il link attivo: piccolo indicatore centrato. */
.nav-links a.active:not(.nav-cta)::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:3px;width:14px;height:2px;border-radius:2px;background:var(--accent)}
/* Bottone "Contatti" (call-to-action) nella nav: pillola blu scuro piena, testo bianco, con ombra. */
.nav-cta{padding:9px 20px;border-radius:100px;background:var(--blue-ink);color:#fff!important;font-weight:600;font-size:.88rem;white-space:nowrap;flex:0 0 auto;margin-left:6px;transition:transform .25s var(--ease),box-shadow .25s var(--ease),background .25s var(--ease);box-shadow:0 4px 14px rgba(6,36,63,.18)}
/* Hover CTA: si solleva di 2px, diventa blu acceso, ombra più marcata. */
.nav-cta:hover{transform:translateY(-2px);background:var(--blue);box-shadow:0 8px 22px rgba(10,92,168,.3)}
/* Pulsante hamburger: nascosto su desktop (display none), appare solo su mobile via media query. */
.menu-toggle{display:none;background:none;border:0;cursor:pointer;width:44px;height:44px;position:relative;z-index:120;padding:11px}
/* Le tre lineette dell'hamburger: barrette assolute, transizione per l'animazione in X. */
.menu-toggle span{position:absolute;left:11px;right:11px;height:2px;background:var(--blue-ink);border-radius:2px;transition:.3s var(--ease)}
/* Posizione verticale della prima lineetta. */
.menu-toggle span:nth-child(1){top:14px}
/* Posizione della seconda lineetta (centrale). */
.menu-toggle span:nth-child(2){top:21px}
/* Posizione della terza lineetta. */
.menu-toggle span:nth-child(3){top:28px}
/* Stato aperto: prima lineetta ruota a 45° e scende al centro (forma la X). */
.menu-toggle.open span:nth-child(1){top:21px;transform:rotate(45deg)}
/* Stato aperto: lineetta centrale scompare. */
.menu-toggle.open span:nth-child(2){opacity:0}
/* Stato aperto: terza lineetta ruota a -45° e sale al centro (completa la X). */
.menu-toggle.open span:nth-child(3){top:21px;transform:rotate(-45deg)}

/* mobile drawer — ridisegnato per il pollice */
/* Il "cassetto" del menu mobile: copre tutto lo schermo, parte fuori a
   destra (translateX 100%) e scorre dentro quando aperto. Nascosto di
   default con opacity/visibility per non intercettare i tocchi. */
.mobile-menu{
  position:fixed;inset:0;z-index:110;
  background:linear-gradient(180deg,var(--white) 0%,var(--blue-mist) 100%);
  display:flex;flex-direction:column;
  padding:0 24px calc(24px + env(safe-area-inset-bottom,0px));
  transform:translateX(100%);transition:transform .42s var(--ease);
  opacity:0;visibility:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;
}
/* Stato aperto del cassetto: entra in vista e diventa visibile/interattivo. */
.mobile-menu.open{transform:translateX(0);opacity:1;visibility:visible}

/* header dentro al drawer: logo + chiudi */
/* Intestazione del cassetto: logo a sinistra e X a destra; resta
   "appiccicata" in alto (sticky) mentre si scorre il menu. */
.mm-head{display:flex;align-items:center;justify-content:space-between;
  padding:calc(16px + env(safe-area-inset-top,0px)) 0 14px;
  position:sticky;top:0;z-index:2;background:var(--white);
  box-shadow:0 8px 16px -8px rgba(6,36,63,.12);flex:0 0 auto}
/* Logo dentro il cassetto. */
.mm-logo{height:44px;width:auto;display:block}
/* Pulsante di chiusura del cassetto: quadrato arrotondato con bordo. */
.mm-close{width:46px;height:46px;background:var(--white);border:1px solid var(--blue-line);
  border-radius:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;
  position:relative;transition:background .2s var(--ease),transform .2s var(--ease)}
/* Feedback al tocco: si rimpicciolisce e cambia sfondo. */
.mm-close:active{transform:scale(.92);background:var(--blue-soft)}
/* Le due barrette che formano la X del pulsante chiudi. */
.mm-close span{position:absolute;width:20px;height:2px;border-radius:2px;background:var(--blue-ink)}
/* Prima barretta ruotata a 45°. */
.mm-close span:nth-child(1){transform:rotate(45deg)}
/* Seconda barretta ruotata a -45° (insieme formano la X). */
.mm-close span:nth-child(2){transform:rotate(-45deg)}

/* voci: grandi, tap-friendly, a cascata */
/* Lista delle voci di menu: in colonna, centrata verticalmente, occupa lo spazio disponibile. */
.mm-links{display:flex;flex-direction:column;flex:1 1 auto;justify-content:center;
  gap:2px;padding:18px 0}
/* Ogni voce: grande (font display), area di tocco ampia (min-height 60px),
   parte trasparente e spostata a destra per l'animazione a cascata. */
.mm-links a{display:flex;align-items:center;gap:18px;
  font-family:var(--display);font-weight:600;font-size:1.65rem;letter-spacing:-.02em;
  color:var(--blue-ink);padding:16px 12px;border-radius:16px;min-height:60px;
  border:1px solid transparent;
  transition:color .2s var(--ease),background .25s var(--ease),border-color .25s var(--ease),transform .15s var(--ease);
  opacity:0;transform:translateX(20px)}
/* Ad apertura menu, le voci diventano visibili e tornano in posizione. */
.mobile-menu.open .mm-links a{opacity:1;transform:translateX(0);
  transition:color .2s var(--ease),background .25s var(--ease),opacity .5s var(--ease),transform .5s var(--ease)}
/* Ritardi crescenti: creano l'effetto "a cascata" (una voce dopo l'altra). */
.mobile-menu.open .mm-links a:nth-child(1){transition-delay:.10s}
.mobile-menu.open .mm-links a:nth-child(2){transition-delay:.15s}
.mobile-menu.open .mm-links a:nth-child(3){transition-delay:.20s}
.mobile-menu.open .mm-links a:nth-child(4){transition-delay:.25s}
.mobile-menu.open .mm-links a:nth-child(5){transition-delay:.30s}
.mobile-menu.open .mm-links a:nth-child(6){transition-delay:.35s}
.mobile-menu.open .mm-links a:nth-child(7){transition-delay:.40s}
.mobile-menu.open .mm-links a:nth-child(8){transition-delay:.45s}
/* Feedback al tocco sulla voce: sfondo azzurro e leggero rimpicciolimento. */
.mm-links a:active{background:var(--blue-soft);transform:scale(.98)}
/* Voce della pagina corrente: evidenziata con bordo e sfondo. */
.mm-links a.active{color:var(--blue);background:var(--white);border-color:var(--blue-line)}
/* Numeretto accanto alla voce (01, 02...): piccolo, color oro scuro. */
.mm-no{font-family:var(--body);font-weight:600;font-size:.8rem;color:var(--accent-text);
  letter-spacing:.06em;flex:0 0 auto;min-width:26px}
/* Numeretto della voce attiva: diventa blu. */
.mm-links a.active .mm-no{color:var(--blue)}

/* footer del drawer: CTA piena + riga telefono */
/* Piede del cassetto: contiene il bottone CTA e la riga telefono, con bordo superiore. */
.mm-foot{display:flex;flex-direction:column;gap:14px;padding-top:18px;flex:0 0 auto;
  border-top:1px solid var(--blue-line)}
/* Bottone CTA a tutta larghezza dentro il cassetto: blu pieno, area di tocco alta. */
.mm-cta{display:flex;align-items:center;justify-content:center;gap:10px;
  background:var(--blue);color:#fff;font-family:var(--body);font-weight:600;font-size:1.05rem;
  padding:18px 24px;border-radius:100px;min-height:56px;
  box-shadow:0 10px 26px rgba(0,84,149,.28);transition:transform .2s var(--ease),background .2s var(--ease)}
/* Feedback al tocco del CTA. */
.mm-cta:active{transform:scale(.97);background:var(--blue-deep)}
/* Icona freccia nel CTA. */
.mm-cta svg{width:19px;height:19px}
/* Riga telefono nel piede del cassetto. */
.mm-call{display:flex;align-items:center;gap:14px;padding:8px 12px;color:var(--blue-ink)}
/* Icona telefono. */
.mm-call svg{width:24px;height:24px;color:var(--blue);flex:0 0 24px}
/* Numero di telefono in evidenza (font display, blu). */
.mm-call strong{font-family:var(--display);font-weight:700;font-size:1.1rem;color:var(--blue)}
/* Sottotesto della riga telefono (orari). */
.mm-call span{font-size:.82rem;color:var(--muted-soft);line-height:1.5}

/* ---------- BUTTONS ---------- */
/* Bottone base: layout inline-flex (icona+testo affiancati), pillola, con transizioni condivise. */
.btn{display:inline-flex;align-items:center;gap:9px;padding:14px 28px;border-radius:100px;font-weight:600;font-size:.96rem;font-family:var(--body);transition:transform .25s var(--ease),box-shadow .25s var(--ease),background .25s var(--ease),border-color .25s var(--ease);cursor:pointer}
/* Variante primaria: fondo blu pieno, testo bianco, ombra colorata. */
.btn-primary{background:var(--blue);color:#fff;box-shadow:0 8px 22px rgba(10,92,168,.24)}
/* Hover primario: si solleva, blu più scuro, ombra più intensa. */
.btn-primary:hover{transform:translateY(-2px);background:var(--blue-deep);box-shadow:0 14px 30px rgba(10,92,168,.32)}
/* La freccia dentro il bottone ha una sua transizione. */
.btn-primary svg{transition:transform .3s var(--ease)}
/* Hover: la freccia scivola a destra (invito all'azione). */
.btn-primary:hover svg{transform:translateX(4px)}
/* Variante "ghost": trasparente con solo bordo, per azioni secondarie. */
.btn-ghost{background:transparent;color:var(--blue-ink);border:1.5px solid var(--blue-line)}
/* Hover ghost: bordo e testo diventano blu, si solleva. */
.btn-ghost:hover{border-color:var(--blue);color:var(--blue);transform:translateY(-2px)}
/* Variante "light": bianca, pensata per fondi scuri. */
.btn-light{background:#fff;color:var(--blue);box-shadow:0 10px 28px rgba(0,0,0,.14)}
/* Hover light: si solleva con ombra più marcata. */
.btn-light:hover{transform:translateY(-2px);box-shadow:0 16px 36px rgba(0,0,0,.2)}

/* ---------- HERO (home) ---------- */
/* Sezione hero della home: molto padding verticale, sfondo con un
   gradiente radiale azzurro in alto a destra su base bianca.
   overflow hidden per contenere le linee animate. */
.hero{position:relative;padding:184px 0 110px;overflow:hidden;background:
  radial-gradient(1100px 520px at 78% -8%, var(--blue-soft) 0%, transparent 62%),
  var(--white)}
/* Livello che ospita le linee di flusso animate (SVG), dietro il testo, non cliccabile. */
.hero-flow{position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.9}
/* L'SVG delle linee riempie tutto il livello. */
.hero-flow svg{width:100%;height:100%}
/* Singola "linea di flusso": tratto blu sottile, semi-trasparente, con
   pattern tratteggiato lungo che scorre (animazione flow). Rese visibili
   nella versione B della modernizzazione (opacità alzata). */
.flow-line{fill:none;stroke:var(--blue-bright);stroke-width:1.5;opacity:.26;stroke-dasharray:8 600;animation:flow 9s linear infinite}
/* Seconda linea: oro, più lenta e sfasata (varietà di movimento). */
.flow-line.l2{opacity:.22;stroke:var(--accent);animation-duration:13s;animation-delay:-3s}
/* Terza linea: ancora più tenue e lenta (profondità). */
.flow-line.l3{opacity:.16;animation-duration:17s;animation-delay:-7s}
/* In dark mode le linee vanno un filo più marcate per restare percepibili sul fondo scuro. */
:root[data-theme="dark"] .flow-line{opacity:.32}
:root[data-theme="dark"] .flow-line.l2{opacity:.26}
:root[data-theme="dark"] .flow-line.l3{opacity:.2}
/* Keyframe: sposta il tratteggio per dare l'illusione di scorrimento continuo. */
@keyframes flow{to{stroke-dashoffset:-608}}
/* Contenuto della hero (testo): sopra le linee (z-index 2), larghezza limitata. */
.hero-inner{position:relative;z-index:2;max-width:960px}
/* "Eyebrow": la pillola sopra il titolo ("ESCo · Energy..."). Piccola,
   maiuscoletto spaziato, azzurra. Entra con una piccola animazione dal basso. */
.eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:.74rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);background:var(--blue-soft);border:1px solid var(--blue-line);padding:7px 15px;border-radius:100px;margin-bottom:28px;opacity:0;transform:translateY(14px);animation:rise .8s var(--ease) .1s forwards}
/* Il puntino oro dentro l'eyebrow, con alone pulsante. */
.eyebrow .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 0 rgba(223,178,32,.5);animation:pulse 2.4s ease-out infinite}
/* Keyframe dell'alone pulsante: l'ombra si espande e svanisce in ciclo. */
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(223,178,32,.45)}70%{box-shadow:0 0 0 9px rgba(223,178,32,0)}100%{box-shadow:0 0 0 0 rgba(223,178,32,0)}}

/* Titolo principale h1: font display, molto grande e fluido (clamp:
   min 2.9rem, ideale 7.2vw, max 5.8rem), interlinea compatta. */
h1{font-family:var(--display);font-weight:700;font-size:clamp(2.9rem,7.2vw,5.8rem);line-height:1.0;letter-spacing:-.035em;color:var(--blue-ink)}
/* La parola-accento nel titolo ("non sprechi"): blu, non va a capo. */
h1 .accent{position:relative;color:var(--blue);white-space:nowrap}
/* In dark mode l'accento usa il blu schiarito per leggibilità. */
:root[data-theme="dark"] h1 .accent{color:var(--brand)}
/* Ogni riga del titolo è in un contenitore che nasconde l'overflow... */
.hero-line{overflow:hidden}
/* ...così lo span interno può "salire" da sotto (effetto tendina). */
.hero-line>span{display:block;opacity:0;transform:translateY(100%);animation:rise .9s var(--ease) forwards}
/* Ritardi sfalsati riga per riga del titolo. */
.hero-line:nth-child(1)>span{animation-delay:.25s}
.hero-line:nth-child(2)>span{animation-delay:.4s}
/* Sottotitolo/paragrafo introduttivo ("lede"): grande e fluido, grigio, entra dal basso. */
.lede{font-size:clamp(1.08rem,1.8vw,1.32rem);color:var(--muted);max-width:600px;margin:30px 0 38px;opacity:0;transform:translateY(16px);animation:rise .9s var(--ease) .65s forwards}
/* Riga dei bottoni della hero: entra dal basso, va a capo se serve. */
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;opacity:0;transform:translateY(16px);animation:rise .9s var(--ease) .8s forwards}
/* Keyframe condiviso "rise": da trasparente-e-spostato a pieno-e-in-posizione. */
@keyframes rise{to{opacity:1;transform:translateY(0)}}

/* ---------- PAGE HERO (interior) ---------- */
/* Hero delle pagine interne (non la home): più compatta, stesso gradiente, con bordo inferiore. */
.page-hero{position:relative;padding:168px 0 64px;overflow:hidden;background:
  radial-gradient(900px 420px at 82% -20%, var(--blue-soft) 0%, transparent 60%),
  var(--white);border-bottom:1px solid var(--blue-hair)}
/* Contenuto della page-hero, sopra gli sfondi. */
.page-hero-inner{position:relative;z-index:2;max-width:860px}
/* Titolo delle pagine interne: più piccolo di quello della home. */
.page-hero h1{font-size:clamp(2.4rem,5.4vw,4.2rem)}
/* Il lede nelle pagine interne è statico (niente animazione d'ingresso). */
.page-hero .lede{animation:none;opacity:1;transform:none;margin:22px 0 0}
/* "Breadcrumb": la scia di navigazione (Home / Pagina). Piccola e grigia. */
.crumb{display:inline-flex;gap:8px;align-items:center;font-size:.8rem;font-weight:500;color:var(--muted-soft);margin-bottom:22px}
/* Link nel breadcrumb: blu. */
.crumb a{color:var(--blue);transition:color .2s var(--ease)}
/* Hover del link breadcrumb. */
.crumb a:hover{color:var(--blue-deep)}
/* Il separatore nel breadcrumb (/) è attenuato. */
.crumb span{opacity:.45}

/* ---------- STATS STRIP ---------- */
/* La striscia delle statistiche: bordi sopra e sotto, sfondo azzurrino tenue. */
.strip{border-top:1px solid var(--blue-line);border-bottom:1px solid var(--blue-line);background:var(--blue-mist)}
/* Griglia a 4 colonne uguali per i quattro numeri. */
.strip-grid{display:grid;grid-template-columns:repeat(4,1fr)}
/* Singola cella statistica: padding ampio, divisore verticale a destra. */
.stat{padding:44px 30px;border-right:1px solid var(--blue-line);position:relative;transition:background .3s var(--ease)}
/* L'ultima cella non ha il divisore a destra. */
.stat:last-child{border-right:0}
/* Hover sulla cella: sfondo bianco (leggero risalto). */
.stat:hover{background:var(--white)}
/* Il numero grande: font display, grande e fluido, blu. */
.stat .num{font-family:var(--display);font-weight:700;font-size:clamp(2.2rem,4.2vw,3.2rem);color:var(--blue);line-height:1;letter-spacing:-.03em}
/* L'etichetta sotto il numero: piccola e grigia. */
.stat .lbl{margin-top:11px;font-size:.85rem;color:var(--muted);font-weight:500;line-height:1.45}

/* ---------- SECTION SHELL ---------- */
/* Ogni <section> è posizionata relativamente (ancora per elementi assoluti interni). */
section{position:relative}
/* Blocco di contenuto standard: molto respiro verticale. */
.block{padding:120px 0}
/* Variante "stretta": meno padding verticale. */
.block.tight{padding:92px 0}
/* Intestazione di sezione: larghezza limitata, spazio sotto. */
.sec-head{max-width:720px;margin-bottom:60px}
/* Variante centrata dell'intestazione di sezione. */
.sec-head.center{margin-left:auto;margin-right:auto;text-align:center}
/* "Tag" di sezione: etichetta maiuscoletta blu con trattino oro davanti. */
.tag{display:inline-flex;align-items:center;font-size:.74rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);margin-bottom:18px}
/* Il trattino oro prima del tag (pseudo-elemento decorativo). */
.tag::before{content:"";display:inline-block;width:24px;height:2px;background:var(--accent);vertical-align:middle;margin-right:12px}
/* Nelle intestazioni centrate il trattino non serve. */
.sec-head.center .tag::before{display:none}
/* Titolo di sezione h2: font display, grande e fluido. */
h2{font-family:var(--display);font-weight:700;font-size:clamp(2.1rem,4.6vw,3.5rem);line-height:1.04;letter-spacing:-.03em;color:var(--blue-ink)}
/* Paragrafo descrittivo dell'intestazione di sezione. */
.sec-head p{margin-top:20px;font-size:1.08rem;color:var(--muted)}

/* ---------- BENTO (servizi/progetti) ---------- */
/* Griglia "bento": 6 colonne, celle di dimensioni diverse che si
   incastrano (grid-auto-flow dense riempie i buchi). */
.bento{display:grid;grid-template-columns:repeat(6,1fr);gap:18px;grid-auto-flow:dense}
/* Singola cella bento: card bianca con bordo, angoli arrotondati grandi,
   contenuto in colonna. overflow hidden per il glow interno. */
.cell{position:relative;background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);padding:34px 32px;overflow:hidden;transition:transform .4s var(--ease),box-shadow .4s var(--ease),border-color .4s var(--ease);display:flex;flex-direction:column}
/* Glow radiale che segue il cursore (posizione da --mx/--my impostate da app.js). Invisibile finché non si fa hover. */
.cell::after{content:"";position:absolute;inset:0;border-radius:inherit;background:radial-gradient(420px 180px at var(--mx,50%) var(--my,0%),rgba(10,92,168,.06),transparent 70%);opacity:0;transition:opacity .4s var(--ease);pointer-events:none}
/* Hover cella: si solleva, ombra ampia, bordo evidenziato. */
.cell:hover{transform:translateY(-6px);box-shadow:0 22px 48px rgba(6,36,63,.1);border-color:var(--blue-line)}
/* Hover: accende il glow radiale. */
.cell:hover::after{opacity:1}
/* Modificatori di larghezza: la cella occupa 3, 4, 2 o 6 colonne su 6. */
.cell.sp3{grid-column:span 3}
.cell.sp4{grid-column:span 4}
.cell.sp2{grid-column:span 2}
.cell.sp6{grid-column:span 6}
/* Modificatore di altezza: la cella occupa 2 righe. */
.cell.tall{grid-row:span 2}
/* Cella "feature" (in evidenza): fondo blu scuro in gradiente, testo bianco. */
.cell.feature{background:linear-gradient(150deg,var(--blue-deep) 0%,var(--blue-ink) 100%);border-color:transparent;color:#fff}
/* Titolo bianco nella cella feature. */
.cell.feature h3{color:#fff}
/* Paragrafo semi-trasparente nella cella feature. */
.cell.feature p{color:rgba(255,255,255,.78)}
/* Icona su fondo chiaro traslucido nella cella feature. */
.cell.feature .cell-ico{background:rgba(255,255,255,.12)}
/* Tratto dell'icona bianco nella cella feature. */
.cell.feature .cell-ico svg{stroke:#fff}
/* Numero d'angolo attenuato nella cella feature. */
.cell.feature .cell-no{color:rgba(255,255,255,.35)}
/* Cella "accent": fondo azzurrino invece che bianco. */
.cell.accent-cell{background:var(--blue-soft);border-color:var(--blue-line)}
/* Riquadro icona della cella: quadrato arrotondato azzurro, con transizioni. */
.cell-ico{width:52px;height:52px;border-radius:14px;background:var(--blue-soft);display:flex;align-items:center;justify-content:center;margin-bottom:22px;transition:background .4s var(--ease),transform .4s var(--ease);flex:0 0 auto}
/* Hover cella: l'icona si ingrandisce e ruota leggermente (micro-interazione). */
.cell:hover .cell-ico{transform:scale(1.06) rotate(-4deg)}
/* L'icona SVG dentro il riquadro: tratto blu. */
.cell-ico svg{width:26px;height:26px;stroke:var(--blue);transition:stroke .4s var(--ease)}
/* Numero decorativo in alto a destra nella cella (01, 02...). */
.cell-no{position:absolute;top:30px;right:32px;font-family:var(--display);font-weight:700;font-size:.95rem;color:var(--blue-line);letter-spacing:.02em}
/* Titolo della cella: font display, semibold. */
.cell h3{font-family:var(--display);font-weight:600;font-size:1.32rem;color:var(--blue-ink);margin-bottom:11px;letter-spacing:-.015em;line-height:1.2}
/* Paragrafo della cella: grigio; margin-bottom auto spinge in basso ciò che segue. */
.cell p{color:var(--muted);font-size:.96rem;margin-bottom:auto}
/* Lista puntata dentro la cella: senza pallini nativi, in colonna. */
.cell ul{list-style:none;display:flex;flex-direction:column;gap:9px;margin-top:20px}
/* Voce di lista nella cella: con spazio per il pallino custom. */
.cell li{font-size:.9rem;color:var(--ink);display:flex;align-items:center;gap:10px}
/* Pallino oro custom davanti a ogni voce. */
.cell li::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent);flex:0 0 5px}
/* Voci di lista chiare nella cella feature. */
.cell.feature li{color:rgba(255,255,255,.9)}
/* Pallino oro anche nella cella feature. */
.cell.feature li::before{background:var(--accent)}

/* legacy .divs/.card kept as bento-like fallback (used by chi-siamo valori, clienti) */
/* Griglia "divs" (versione storica, 3 colonne) usata in alcune pagine come fallback della bento. */
.divs{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
/* Variante a 2 colonne. */
.divs.two{grid-template-columns:repeat(2,1fr)}
/* Card generica (fratello di .cell): card bianca con bordo e hover a sollevamento. */
.card{position:relative;background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);padding:34px 32px;overflow:hidden;transition:transform .4s var(--ease),box-shadow .4s var(--ease),border-color .4s var(--ease)}
/* Hover card: sollevamento + ombra. */
.card:hover{transform:translateY(-6px);box-shadow:0 22px 48px rgba(6,36,63,.1)}
/* Riquadro icona della card. */
.card-ico{width:52px;height:52px;border-radius:14px;background:var(--blue-soft);display:flex;align-items:center;justify-content:center;margin-bottom:22px;transition:background .4s var(--ease),transform .4s var(--ease)}
/* Hover: icona ingrandita e ruotata. */
.card:hover .card-ico{transform:scale(1.06) rotate(-4deg)}
/* Icona SVG della card. */
.card-ico svg{width:26px;height:26px;stroke:var(--blue);transition:stroke .4s var(--ease)}
/* Titolo della card. */
.card h3{font-family:var(--display);font-weight:600;font-size:1.3rem;color:var(--blue-ink);margin-bottom:11px;letter-spacing:-.015em}
/* Paragrafo della card. */
.card p{color:var(--muted);font-size:.96rem;margin-bottom:18px}
/* Lista della card senza pallini nativi. */
.card ul{list-style:none;display:flex;flex-direction:column;gap:9px}
/* Voce di lista della card. */
.card li{font-size:.9rem;color:var(--ink);display:flex;align-items:center;gap:10px}
/* Pallino oro custom. */
.card li::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent);flex:0 0 5px}
/* Numero d'angolo della card. */
.card-no{position:absolute;top:30px;right:32px;font-family:var(--display);font-weight:700;font-size:.95rem;color:var(--blue-line)}

/* ---------- MODEL (process) ---------- */
/* Sezione "modello ESCo" (il processo): fondo azzurrino con bordi sopra/sotto. */
.model{background:var(--blue-mist);border-top:1px solid var(--blue-hair);border-bottom:1px solid var(--blue-hair)}
/* Layout a due colonne: testo a sinistra, visual a destra, centrati verticalmente. */
.model-grid{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center}
/* Lista dei passi in colonna. */
.steps{display:flex;flex-direction:column;gap:0}
/* Singolo passo: numero a sinistra, testo a destra, divisore inferiore. */
.step{display:grid;grid-template-columns:auto 1fr;gap:22px;padding:26px 0;border-bottom:1px solid var(--blue-line);cursor:default}
/* L'ultimo passo non ha divisore. */
.step:last-child{border-bottom:0}
/* Numero del passo: quadratino blu con cifra bianca. */
.step-no{font-family:var(--display);font-weight:700;font-size:1rem;color:#fff;background:var(--blue);width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex:0 0 40px;transition:transform .35s var(--ease),background .35s var(--ease)}
/* Hover passo: il numero si ingrandisce e ruota. */
.step:hover .step-no{transform:scale(1.08) rotate(-4deg);background:var(--blue-deep)}
/* Titolo del passo. */
.step h4{font-family:var(--display);font-weight:600;font-size:1.16rem;color:var(--blue-ink);margin-bottom:5px;letter-spacing:-.01em}
/* Descrizione del passo. */
.step p{font-size:.95rem;color:var(--muted)}
/* Riquadro della visual (il gauge): quadrato bianco con bordo, contenuto centrato. */
.model-vis{position:relative;aspect-ratio:1;background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);overflow:hidden;display:flex;align-items:center;justify-content:center}
/* L'SVG del gauge occupa l'84% del riquadro. */
.model-vis svg{width:84%;height:84%}
/* Traccia del gauge (arco di sfondo): azzurra, spessa, con estremi arrotondati. */
.gauge-track{fill:none;stroke:var(--blue-soft);stroke-width:14;stroke-linecap:round}
/* Riempimento del gauge: arco blu che parte "vuoto" (offset alto) e si riempirà. */
.gauge-fill{fill:none;stroke:var(--blue);stroke-width:14;stroke-linecap:round;stroke-dasharray:534;stroke-dashoffset:534;transition:stroke-dashoffset 1.8s var(--ease)}
/* Quando la sezione entra in vista (classe .on da app.js), l'arco si riempie fino a 160. */
.model-vis.on .gauge-fill{stroke-dashoffset:160}
/* Numero al centro del gauge, centrato verticalmente. */
.gauge-num{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);text-align:center}
/* Cifra grande del gauge. */
.gauge-num .big{font-family:var(--display);font-weight:700;font-size:3.4rem;color:var(--blue-ink);line-height:1;letter-spacing:-.03em}
/* Sottotesto del gauge. */
.gauge-num .sub{font-size:.84rem;color:var(--muted);margin-top:6px}

/* ---------- SPLIT (green) ---------- */
/* Sezione "split": due colonne (media + testo), centrate. */
.split{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}
/* Variante "reversed": mette il media per primo (a sinistra). */
.split.rev .split-media{order:-1}
/* Contenitore immagine dello split: arrotondato, con bordo, proporzione 4:3. */
.split-media{border-radius:var(--r-lg);overflow:hidden;border:1px solid var(--blue-line);aspect-ratio:4/3;background:var(--blue-soft);position:relative}
/* Sottile bordo interno bianco sull'immagine (rifinitura). */
.split-media::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.4);border-radius:inherit;pointer-events:none}
/* L'immagine riempie il contenitore (object-fit cover) con transizione per lo zoom. */
.split-media img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease)}
/* Hover: leggero zoom dell'immagine. */
.split-media:hover img{transform:scale(1.04)}
/* Titolo nel corpo dello split. */
.split-body h2{margin-bottom:18px}
/* Paragrafi nel corpo dello split. */
.split-body p{color:var(--muted);font-size:1.05rem;margin-bottom:15px}
/* Bottone nel corpo dello split. */
.split-body .btn{margin-top:14px}

/* ---------- CLIENTS ---------- */
/* Meno spazio sotto l'intestazione nella sezione clienti. */
.clients .sec-head{margin-bottom:46px}
/* Griglia clienti a 2 colonne. */
.client-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
/* Riga cliente: icona + testo, card con bordo e hover a sollevamento. */
.client{background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r);padding:28px 30px;display:flex;gap:18px;align-items:flex-start;transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
/* Hover cliente. */
.client:hover{transform:translateY(-4px);box-shadow:0 16px 38px rgba(6,36,63,.09)}
/* Riquadro icona del cliente. */
.client-ico{width:44px;height:44px;border-radius:12px;background:var(--blue-soft);display:flex;align-items:center;justify-content:center;flex:0 0 44px}
/* Icona SVG del cliente. */
.client-ico svg{width:22px;height:22px;stroke:var(--blue)}
/* Titolo del cliente. */
.client h4{font-family:var(--display);font-weight:600;font-size:1.12rem;color:var(--blue-ink);margin-bottom:6px}
/* Descrizione del cliente. */
.client p{font-size:.92rem;color:var(--muted)}

/* Card cliente "grande" con immagine in alto. */
.client-card{background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);overflow:hidden;transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
/* Hover della card cliente. */
.client-card:hover{transform:translateY(-6px);box-shadow:0 20px 44px rgba(6,36,63,.12)}
/* Area foto della card cliente (proporzione 16:10). */
.client-card .ph{aspect-ratio:16/10;overflow:hidden;background:var(--blue-soft)}
/* Immagine della card cliente. */
.client-card .ph img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
/* Hover: zoom immagine. */
.client-card:hover .ph img{transform:scale(1.05)}
/* Corpo testuale della card cliente. */
.client-card .body{padding:26px 30px 30px}
/* Titolo della card cliente. */
.client-card h3{font-family:var(--display);font-weight:600;font-size:1.3rem;color:var(--blue-ink);margin-bottom:10px;letter-spacing:-.015em}
/* Paragrafo della card cliente. */
.client-card p{color:var(--muted);font-size:.95rem}

/* ---------- PROJECTS bento ---------- */
/* Card progetto (simile a .cell): con glow al cursore e hover a sollevamento. */
.proj{position:relative;background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);padding:34px 32px;transition:transform .35s var(--ease),box-shadow .35s var(--ease),border-color .35s var(--ease);overflow:hidden;display:flex;flex-direction:column}
/* Glow radiale che segue il cursore (posizione da --mx/--my). */
.proj::after{content:"";position:absolute;inset:0;border-radius:inherit;background:radial-gradient(380px 160px at var(--mx,50%) var(--my,0%),rgba(10,92,168,.06),transparent 70%);opacity:0;transition:opacity .4s var(--ease);pointer-events:none}
/* Hover progetto: sollevamento + ombra. */
.proj:hover{transform:translateY(-6px);box-shadow:0 22px 46px rgba(6,36,63,.1)}
/* Hover: accende il glow. */
.proj:hover::after{opacity:1}
/* Categoria del progetto: pillola azzurra maiuscoletta. */
.proj-cat{display:inline-flex;align-self:flex-start;font-size:.7rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--blue);background:var(--blue-soft);padding:6px 13px;border-radius:100px;margin-bottom:18px}
/* Titolo del progetto. */
.proj h3{font-family:var(--display);font-weight:600;font-size:1.2rem;line-height:1.28;color:var(--blue-ink);margin-bottom:10px;letter-spacing:-.01em}
/* Descrizione del progetto. */
.proj p{color:var(--muted);font-size:.93rem}

/* ---------- NEWS ---------- */
/* Griglia news a 2 colonne. */
.news-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
/* Card news con immagine in alto e hover a sollevamento. */
.news-card{background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);overflow:hidden;transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
/* Hover news. */
.news-card:hover{transform:translateY(-6px);box-shadow:0 20px 44px rgba(6,36,63,.12)}
/* Area foto news (16:9). */
.news-card .ph{aspect-ratio:16/9;overflow:hidden;background:var(--blue-soft)}
/* Immagine news. */
.news-card .ph img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
/* Hover: zoom immagine news. */
.news-card:hover .ph img{transform:scale(1.05)}
/* Corpo della card news. */
.news-card .body{padding:26px 30px 30px}
/* Data della news: maiuscoletto oro scuro. */
.news-date{font-size:.78rem;font-weight:600;color:var(--accent-text);letter-spacing:.06em;margin-bottom:12px;text-transform:uppercase}
/* Titolo della news. */
.news-card h3{font-family:var(--display);font-weight:600;font-size:1.22rem;line-height:1.3;color:var(--blue-ink);letter-spacing:-.01em}

/* ---------- PROSE ---------- */
/* Contenitore di testo lungo (pagine editoriali): larghezza da lettura confortevole. */
.prose{max-width:780px}
/* Paragrafi della prosa: leggermente più grandi, grigi, ben distanziati. */
.prose p{font-size:1.1rem;color:var(--muted);margin-bottom:22px}
/* Grassetto nella prosa: colore scuro per risalto. */
.prose p strong{color:var(--blue-ink);font-weight:600}
/* Citazione/frase-guida: grande, font display, con barra oro a sinistra. */
.lead-quote{font-family:var(--display);font-weight:500;font-size:clamp(1.5rem,3.2vw,2.15rem);line-height:1.28;color:var(--blue-ink);letter-spacing:-.02em;padding:6px 0 6px 28px;border-left:3px solid var(--accent);margin:6px 0 40px}

/* ---------- CONTACT ---------- */
/* Griglia contatti: due colonne (info + form), allineate in alto. */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:54px;align-items:start}
/* Riga di informazione di contatto: icona + testo, con divisore inferiore. */
.contact-info .ci-row{display:flex;gap:18px;align-items:flex-start;padding:24px 0;border-bottom:1px solid var(--blue-hair)}
/* L'ultima riga non ha divisore. */
.contact-info .ci-row:last-child{border-bottom:0}
/* Riquadro icona nelle info di contatto. */
.ci-ico{width:46px;height:46px;border-radius:13px;background:var(--blue-soft);display:flex;align-items:center;justify-content:center;flex:0 0 46px}
/* Icona SVG nelle info di contatto. */
.ci-ico svg{width:22px;height:22px;stroke:var(--blue)}
/* Titolo della riga info. */
.ci-row h4{font-family:var(--display);font-weight:600;font-size:1.04rem;color:var(--blue-ink);margin-bottom:4px}
/* Testo e link della riga info. */
.ci-row p,.ci-row a{color:var(--muted);font-size:.95rem;line-height:1.7}
/* Hover sui link di contatto. */
.ci-row a:hover{color:var(--blue)}
/* La "scatola" del form: card bianca con bordo, angoli grandi, ombra tenue. */
.form-box{background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r-lg);padding:38px 34px;box-shadow:0 14px 40px rgba(6,36,63,.06)}
/* Ogni campo del form ha spazio sotto. */
.field{margin-bottom:20px}
/* Etichetta del campo: piccola, semibold, scura. */
.field label{display:block;font-size:.84rem;font-weight:600;color:var(--blue-ink);margin-bottom:8px}
/* Input e textarea: larghezza piena, bordo azzurro, sfondo azzurrino, transizioni al focus. */
.field input,.field textarea{width:100%;padding:13px 16px;border:1.5px solid var(--blue-line);border-radius:12px;font-family:var(--body);font-size:.95rem;color:var(--ink);background:var(--blue-mist);transition:border-color .25s var(--ease),background .25s var(--ease)}
/* Focus: bordo blu pieno e sfondo bianco (campo "attivo"). */
.field input:focus,.field textarea:focus{outline:none;border-color:var(--blue);background:#fff}
/* La textarea è ridimensionabile solo in verticale, con altezza minima. */
.field textarea{resize:vertical;min-height:120px}

/* ---------- CTA BAND ---------- */
/* Fascia call-to-action: molto padding verticale. */
.cta-band{padding:108px 0}
/* Riquadro CTA: gradiente blu diagonale, angoli grandi, testo centrato, overflow nascosto per i cerchi decorativi. */
.cta-box{position:relative;background:linear-gradient(140deg,var(--blue) 0%,var(--blue-deep) 55%,var(--blue-ink) 100%);border-radius:var(--r-lg);padding:78px 60px;overflow:hidden;text-align:center}
/* Due anelli decorativi semi-trasparenti (before/after). */
.cta-box::before,.cta-box::after{content:"";position:absolute;border-radius:50%;border:1.5px solid rgba(255,255,255,.14)}
/* Anello grande in alto a destra. */
.cta-box::before{width:340px;height:340px;top:-160px;right:-80px}
/* Anello più piccolo in basso a sinistra. */
.cta-box::after{width:240px;height:240px;bottom:-130px;left:-60px}
/* Contenuto del CTA sopra gli anelli. */
.cta-box .inner{position:relative;z-index:2}
/* Titolo bianco nel CTA. */
.cta-box h2{color:#fff;margin-bottom:16px}
/* Paragrafo semi-trasparente centrato nel CTA. */
.cta-box p{color:rgba(255,255,255,.82);font-size:1.1rem;max-width:540px;margin:0 auto 36px}

/* ---------- PRONTO INTERVENTO ---------- */
/* Banda "pronto intervento": fondo blu-inchiostro, testo bianco, con alone oro decorativo. */
.pronto{background:var(--blue-ink);color:#fff;padding:60px 0;position:relative;overflow:hidden}
/* Alone oro sfumato in alto a destra (pseudo-elemento). */
.pronto::before{content:"";position:absolute;top:-50%;right:-5%;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(223,178,32,.16),transparent 70%)}
/* Contenuto della banda: icona+testo a sinistra, azione a destra, sopra l'alone. */
.pronto-inner{display:flex;align-items:center;justify-content:space-between;gap:40px;flex-wrap:wrap;position:relative;z-index:2}
/* Blocco sinistro (icona + testo). */
.pronto-l{display:flex;align-items:center;gap:22px}
/* Riquadro icona su fondo traslucido. */
.pronto-ico{width:60px;height:60px;border-radius:16px;background:rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;flex:0 0 60px}
/* Icona SVG bianca. */
.pronto-ico svg{width:30px;height:30px;stroke:#fff}
/* Titolo della banda. */
.pronto h3{font-family:var(--display);font-weight:700;font-size:1.5rem;margin-bottom:4px;letter-spacing:-.01em}
/* Sottotesto semi-trasparente. */
.pronto p{color:rgba(255,255,255,.7);font-size:.96rem}

/* ---------- FOOTER ---------- */
/* Piè di pagina: fondo blu-inchiostro, testo bianco, molto padding sopra. */
footer{background:var(--blue-ink);color:#fff;padding:78px 0 34px}
/* Griglia del footer: 4 colonne di larghezze diverse, con divisore inferiore. */
.foot-grid{display:grid;grid-template-columns:1.7fr 1fr 1fr 1.2fr;gap:44px;padding-bottom:50px;border-bottom:1px solid rgba(255,255,255,.12)}
/* Blocco logo nel footer. */
.foot-brand{display:flex;align-items:center;margin-bottom:20px}
/* Logo nel footer. */
.foot-brand .logo{height:60px;width:auto}
/* Testi e link delle colonne footer: bianchi attenuati. */
.foot-col p,.foot-col a{color:rgba(255,255,255,.62);font-size:.91rem;line-height:1.85}
/* Transizione colore sui link footer. */
.foot-col a{transition:color .25s var(--ease)}
/* Hover: link footer bianco pieno. */
.foot-col a:hover{color:#fff}
/* Titolo di colonna footer: maiuscoletto spaziato, molto attenuato. */
.foot-col h5{font-family:var(--display);font-weight:600;font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.45);margin-bottom:17px}
/* Lista di link nella colonna footer. */
.foot-col ul{list-style:none;display:flex;flex-direction:column;gap:10px}
/* Riga legale del footer (testo piccolo attenuato). */
.foot-legal{padding-top:28px;font-size:.84rem;color:rgba(255,255,255,.48);line-height:1.8}
/* Riga in fondo al footer: copyright a sinistra, social a destra. */
.foot-bottom{padding-top:16px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:14px;font-size:.84rem;color:rgba(255,255,255,.48);align-items:center}
/* Contenitore icone social. */
.foot-social{display:flex;gap:12px}
/* Bottone social: quadrato arrotondato con bordo tenue. */
.foot-social a{width:38px;height:38px;border-radius:11px;border:1px solid rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;transition:.3s var(--ease)}
/* Hover social: sfondo bianco pieno. */
.foot-social a:hover{background:#fff;border-color:#fff}
/* Hover: l'icona diventa blu scuro (contrasto sul bianco). */
.foot-social a:hover svg{fill:var(--blue-ink)}
/* Icona social bianca di default. */
.foot-social svg{width:16px;height:16px;fill:#fff;transition:fill .3s var(--ease)}

/* ---------- REVEAL ---------- */
/* Elementi che compaiono allo scroll: partono trasparenti e spostati in basso. */
.reveal{opacity:0;transform:translateY(32px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
/* Quando app.js aggiunge .in, tornano visibili e in posizione. */
.reveal.in{opacity:1;transform:translateY(0)}
/* Classi di ritardo per scaglionare più elementi vicini (effetto sequenza). */
.reveal.d1{transition-delay:.07s}
.reveal.d2{transition-delay:.14s}
.reveal.d3{transition-delay:.21s}
.reveal.d4{transition-delay:.28s}
.reveal.d5{transition-delay:.35s}

/* ---------- ACCORDION SERVIZI ---------- */
/* Contenitore dell'accordion: voci impilate con spazio tra loro. */
.accordion{display:flex;flex-direction:column;gap:12px}
/* Singola voce accordion: card con bordo, angoli arrotondati, overflow nascosto. */
.acc-item{background:var(--white);border:1px solid var(--blue-line);border-radius:var(--r);overflow:hidden;transition:border-color .3s var(--ease),box-shadow .3s var(--ease)}
/* Voce aperta: bordo blu e ombra (risalto). */
.acc-item.is-open{border-color:var(--blue);box-shadow:0 14px 38px rgba(6,36,63,.08)}
/* Testata cliccabile: icona + titolo + chevron; è un <button> resettato, area di tocco ampia. */
.acc-head{width:100%;display:flex;align-items:center;gap:18px;padding:22px 24px;background:none;border:0;cursor:pointer;text-align:left;font-family:var(--body);transition:background .25s var(--ease);min-height:64px}
/* Hover testata: sfondo azzurrino. */
.acc-head:hover{background:var(--blue-mist)}
/* Focus da tastiera sulla testata: contorno blu interno (accessibilità). */
.acc-head:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
/* Riquadro icona della voce. */
.acc-ico{width:48px;height:48px;border-radius:13px;background:var(--blue-soft);display:flex;align-items:center;justify-content:center;flex:0 0 48px;transition:background .3s var(--ease),transform .3s var(--ease)}
/* Icona SVG della voce. */
.acc-ico svg{width:24px;height:24px;stroke:var(--blue);transition:stroke .3s var(--ease)}
/* Voce aperta: il riquadro icona diventa blu pieno e ruota leggermente. */
.acc-item.is-open .acc-ico{background:var(--blue);transform:rotate(-6deg)}
/* Voce aperta: il tratto dell'icona diventa bianco. */
.acc-item.is-open .acc-ico svg{stroke:#fff}
/* Blocco titoli (titolo + sommario), occupa lo spazio disponibile. */
.acc-titles{display:flex;flex-direction:column;gap:3px;flex:1 1 auto;min-width:0}
/* Titolo della voce accordion. */
.acc-title{font-family:var(--display);font-weight:600;font-size:1.22rem;color:var(--blue-ink);letter-spacing:-.015em;line-height:1.2}
/* Sommario (riga di descrizione sotto il titolo). */
.acc-sum{font-size:.93rem;color:var(--muted);line-height:1.4}
/* Chevron (freccia): quadratino che ruota all'apertura. */
.acc-chevron{flex:0 0 auto;width:34px;height:34px;border-radius:10px;background:var(--blue-mist);display:flex;align-items:center;justify-content:center;transition:transform .35s var(--ease),background .3s var(--ease)}
/* Icona SVG del chevron. */
.acc-chevron svg{width:18px;height:18px;stroke:var(--blue)}
/* Voce aperta: il chevron ruota di 180° (punta in su) e cambia sfondo. */
.acc-item.is-open .acc-chevron{transform:rotate(180deg);background:var(--blue-soft)}
/* Pannello a scomparsa: altezza 0 di default; app.js la anima aprendo/chiudendo. */
.acc-panel{max-height:0;overflow:hidden;transition:max-height .4s var(--ease)}
/* Contenuto interno del pannello: rientrato per allinearsi al titolo. */
.acc-inner{padding:4px 24px 26px 90px}
/* Paragrafi dentro il pannello. */
.acc-inner p{color:var(--muted);font-size:1rem;line-height:1.7;margin-bottom:14px}
/* L'ultimo paragrafo del pannello non ha margine sotto. */
.acc-inner p:last-child{margin-bottom:0}

/* ---------- RESPONSIVE ---------- */
/* Sotto i 1024px: la bento passa da 6 a 4 colonne e le celle si riadattano. */
@media(max-width:1024px){
  .bento{grid-template-columns:repeat(4,1fr)}   /* 4 colonne invece di 6 */
  .cell.sp3{grid-column:span 2}                 /* le celle grandi si stringono */
  .cell.sp4{grid-column:span 4}
  .cell.sp2{grid-column:span 2}
  .cell.sp6{grid-column:span 4}
}
/* Sotto gli 880px (tablet/mobile): nav a hamburger, layout a 1-2 colonne. */
@media(max-width:880px){
  .nav-links{display:none}                      /* nasconde i link desktop */
  .menu-toggle{display:block}                   /* mostra l'hamburger */
  .logo{height:46px}                            /* logo fisso (niente shrink) */
  .nav.scrolled .logo{height:46px}
  .nav.scrolled .nav-inner{padding:13px 20px}
  .strip-grid{grid-template-columns:repeat(2,1fr)}   /* statistiche 2x2 */
  .stat:nth-child(2){border-right:0}            /* toglie divisore a fine riga */
  .stat:nth-child(1),.stat:nth-child(2){border-bottom:1px solid var(--blue-line)}
  .bento{grid-template-columns:1fr;gap:14px}    /* bento in colonna singola */
  .cell.sp3,.cell.sp4,.cell.sp2,.cell.sp6{grid-column:span 1}
  .cell.tall{grid-row:span 1}
  .divs,.divs.two{grid-template-columns:1fr}    /* griglie legacy in colonna */
  .model-grid{grid-template-columns:1fr;gap:44px}    /* modello impilato */
  .model-vis{max-width:380px;margin:0 auto}
  .split{grid-template-columns:1fr;gap:36px}    /* split impilato */
  .split.rev .split-media{order:0}
  .client-grid{grid-template-columns:1fr}       /* clienti in colonna */
  .news-grid{grid-template-columns:1fr}         /* news in colonna */
  .contact-grid{grid-template-columns:1fr;gap:38px}  /* contatti in colonna */
  .foot-grid{grid-template-columns:1fr 1fr;gap:32px} /* footer 2 colonne */
  .block{padding:80px 0}                        /* meno respiro verticale */
  .block.tight{padding:64px 0}
  .pronto-inner{flex-direction:column;align-items:flex-start}
  .acc-head{gap:14px;padding:18px 18px}         /* accordion più compatto */
  .acc-ico{width:42px;height:42px;flex:0 0 42px}
  .acc-title{font-size:1.1rem}
  .acc-inner{padding:2px 18px 22px 18px}
  .acc-chevron{width:30px;height:30px}
  .cta-box{padding:58px 32px}
}
/* Sotto i 520px (smartphone): tutto in colonna singola, bottoni a piena larghezza. */
@media(max-width:520px){
  .wrap{padding:0 20px}                          /* margini laterali ridotti */
  .nav-inner{padding:13px 20px}
  .hero{padding:140px 0 78px}                    /* hero più compatta */
  .page-hero{padding:132px 0 50px}
  .strip-grid{grid-template-columns:1fr}         /* statistiche una sotto l'altra */
  .stat{border-right:0!important;border-bottom:1px solid var(--blue-line);padding:34px 24px}
  .stat:last-child{border-bottom:0}
  .foot-grid{grid-template-columns:1fr;gap:28px} /* footer in colonna */
  .foot-bottom{flex-direction:column;align-items:flex-start}
  .btn{width:100%;justify-content:center}        /* bottoni a piena larghezza */
  .hero-actions{width:100%}
}
/* schermi corti: drawer più compatto così CTA e telefono restano in vista */
/* Su schermi bassi in altezza (es. landscape): voci del menu più piccole. */
@media(max-height:720px){
  .mm-links{padding:10px 0;gap:0}
  .mm-links a{font-size:1.32rem;padding:11px 12px;min-height:50px}
  .mm-head{padding-top:calc(12px + env(safe-area-inset-top,0px))}
  .mm-foot{padding-top:12px}
  .mm-cta{padding:15px 24px;min-height:50px}
}
/* Schermi ancora più bassi: voci menu ulteriormente ridotte. */
@media(max-height:580px){
  .mm-links a{font-size:1.18rem;min-height:44px;padding:9px 12px}
}

/* Utente che preferisce meno movimento: spegne animazioni e transizioni,
   ma lascia gli elementi nel loro stato finale (visibili e in posizione). */
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .reveal{opacity:1;transform:none}
  .eyebrow,.lede,.hero-actions,.hero-line>span{opacity:1;transform:none}
  .gauge-fill{stroke-dashoffset:160}             /* mostra il gauge già riempito */
}

/* ====================================================================
   MODERN ENHANCEMENTS — innesti su base esistente (2026 refresh)
   Tutto rispetta prefers-reduced-motion.
   ==================================================================== */

/* ---- 1. SCROLL PROGRESS BAR (oro→blu, in cima alla pagina) -------- */
/* Barrina di avanzamento lettura: fissa in alto, gradiente oro→blu,
   parte a larghezza 0 (scaleX 0) e app.js la scala man mano che si scorre. */
.scroll-progress{
  position:fixed;top:0;left:0;height:3px;width:100%;z-index:200;
  transform:scaleX(0);transform-origin:0 50%;
  background:linear-gradient(90deg,var(--accent) 0%,var(--brand-bright) 55%,var(--brand) 100%);
  box-shadow:0 0 14px rgba(223,178,32,.45);
  will-change:transform;pointer-events:none;
}

/* ---- 2. AURORA dietro l'hero (profondità soffusa, niente chiasso) - */
/* Macchie di colore sfocate dietro la hero, in lento movimento, per
   dare profondità senza distrarre. È un pseudo-elemento non cliccabile. */
.hero::before{
  content:"";position:absolute;inset:-20% -10% auto -10%;height:130%;z-index:0;
  pointer-events:none;
  background:
    radial-gradient(48% 55% at 18% 18%,var(--aurora-a),transparent 70%),
    radial-gradient(42% 50% at 86% 12%,var(--aurora-b),transparent 72%),
    radial-gradient(55% 60% at 60% 95%,var(--aurora-a),transparent 75%);
  filter:blur(10px);
  animation:auroraDrift 22s ease-in-out infinite alternate;
}
/* Keyframe dell'aurora: piccoli spostamenti e scala per un movimento organico. */
@keyframes auroraDrift{
  0%{transform:translate3d(0,0,0) scale(1)}
  50%{transform:translate3d(-2%,1.5%,0) scale(1.04)}
  100%{transform:translate3d(2%,-1%,0) scale(1.02)}
}
/* Rialza il contenuto hero sopra l'aurora... */
.hero-inner{position:relative;z-index:2}
/* ...e mette le linee di flusso a metà strada. */
.hero-flow{z-index:1}

/* ---- 3. THEME TOGGLE (sole/luna nella navbar) -------------------- */
/* Pulsante tondo per cambiare tema: sfondo azzurrino con bordo. */
.theme-toggle{
  width:42px;height:42px;border-radius:100px;flex:0 0 auto;
  background:var(--blue-soft);border:1px solid var(--blue-line);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  color:var(--brand);margin-left:4px;
  transition:background .25s var(--ease),border-color .25s var(--ease),transform .25s var(--ease),color .25s var(--ease);
}
/* Hover: si solleva e schiarisce. */
.theme-toggle:hover{transform:translateY(-2px);border-color:var(--brand);background:var(--surface-3)}
/* Feedback al click: rimpicciolisce. */
.theme-toggle:active{transform:translateY(0) scale(.94)}
/* Le icone sole/luna dentro il pulsante. */
.theme-toggle svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:opacity .3s var(--ease),transform .45s var(--ease)}
/* Di default (light) mostra il sole, nasconde la luna. */
.theme-toggle .ico-moon{display:none}
/* In dark mode: nasconde il sole... */
:root[data-theme="dark"] .theme-toggle .ico-sun{display:none}
/* ...e mostra la luna. */
:root[data-theme="dark"] .theme-toggle .ico-moon{display:block}
/* toggle anche nel drawer mobile, in coda alle voci */
/* Riga "tema" dentro il menu mobile: etichetta + interruttore. */
.mm-theme{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:14px 16px;border-radius:14px;background:var(--blue-mist);
  border:1px solid var(--blue-line);margin-top:4px;color:var(--blue-ink);font-weight:600;font-size:.95rem}
/* La "pillola" dell'interruttore. */
.mm-theme .tt-pill{width:54px;height:30px;border-radius:100px;background:var(--blue-soft);
  border:1px solid var(--blue-line);position:relative;flex:0 0 54px;cursor:pointer;transition:background .3s var(--ease)}
/* Il pomello scorrevole dell'interruttore. */
.mm-theme .tt-knob{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;
  background:var(--brand);transition:transform .32s var(--ease),background .3s var(--ease)}
/* In dark mode il pomello scorre a destra e diventa oro. */
:root[data-theme="dark"] .mm-theme .tt-knob{transform:translateX(24px);background:var(--accent)}

/* ---- 4. TILT 3D leggero sulle card (sopra il glow esistente) ----- */
/* Abilita la prospettiva 3D su card, progetti e celle. */
.cell,.proj,.card{transform-style:preserve-3d}
/* Solo su dispositivi con hover reale: quando app.js aggiunge .tilt,
   la card ruota leggermente in 3D seguendo il cursore (--rx/--ry). */
@media(hover:hover){
  .cell.tilt,.proj.tilt,.card.tilt{
    transform:perspective(900px)
      rotateX(var(--ry,0deg)) rotateY(var(--rx,0deg))
      translateY(-6px) translateZ(0);
    transition:transform .12s linear,box-shadow .4s var(--ease),border-color .4s var(--ease);
  }
}

/* ---- 5. ACCENTI ORO con più personalità -------------------------- */
/* filo oro che cresce sul bordo superiore delle card al hover         */
/* Sottile linea oro in cima alla card, inizialmente compressa (scaleX 0). */
.cell::before,.proj::before{
  content:"";position:absolute;top:0;left:0;height:2px;width:100%;
  background:linear-gradient(90deg,var(--accent),transparent);
  transform:scaleX(0);transform-origin:0 50%;
  transition:transform .5s var(--ease);z-index:3;border-radius:inherit;
}
/* Hover: la linea oro si estende da sinistra a destra. */
.cell:hover::before,.proj:hover::before{transform:scaleX(1)}
/* Variante della linea oro sulla cella feature (sfuma nel trasparente). */
.cell.feature::before{background:linear-gradient(90deg,var(--accent),rgba(223,178,32,0))}
/* il punto-numero della sezione accordion eredita energia oro          */
/* Quando l'accordion è aperto, il chevron passa a fondo oro... */
.acc-item.is-open .acc-chevron{background:var(--accent);}
/* ...con l'icona scura per contrasto. */
.acc-item.is-open .acc-chevron svg{stroke:#1a1205}

/* ---- 6. NUMERI hero: tabular + glow tenue al conteggio ------------ */
/* Cifre a larghezza fissa (tabular-nums): evitano lo "sfarfallio" di
   larghezza mentre i numeri cambiano durante il conteggio. */
.stat .num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
/* Durante il conteggio (classe .counting da app.js): leggero alone blu. */
.stat .num.counting{text-shadow:0 0 22px rgba(10,92,168,.18)}
/* In dark mode l'alone è più intenso e schiarito. */
:root[data-theme="dark"] .stat .num.counting{text-shadow:0 0 22px rgba(78,163,232,.35)}

/* ---- 7. DARK MODE: override mirati su sezioni che restano scure --- */
/* footer, CTA band, pronto, feature-cell sono GIÀ scuri: in dark li
   stacchiamo dallo sfondo con un filo di bordo e contrasto corretto.  */
/* Footer e banda pronto: fondo ancora più scuro con bordo superiore. */
:root[data-theme="dark"] footer,
:root[data-theme="dark"] .pronto{background:#06101b;border-top:1px solid var(--line)}
/* Cella feature in dark: gradiente ricalibrato e ombra profonda. */
:root[data-theme="dark"] .cell.feature{
  background:linear-gradient(150deg,#123763 0%,#0c2746 100%);
  box-shadow:0 22px 48px rgba(0,0,0,.45);
}
/* Riquadro CTA in dark: gradiente blu adattato. */
:root[data-theme="dark"] .cta-box{
  background:linear-gradient(140deg,#0c4d8a 0%,#0a3a6b 55%,#062746 100%);
}
/* Numero dei passi in dark: usa il blu schiarito. */
:root[data-theme="dark"] .step-no{background:var(--brand)}
/* Hover del numero passo in dark. */
:root[data-theme="dark"] .step:hover .step-no{background:var(--brand-bright)}
/* logo: in dark il wordmark blu sparirebbe → mostro la versione bianca */
/* Sostituisce il file del logo con la variante bianca in dark mode. */
:root[data-theme="dark"] .nav .logo[src*="logo-certosa.png"],
:root[data-theme="dark"] .mm-logo[src*="logo-certosa.png"]{
  content:url("logo-certosa-white.png");
}
/* Cifra grande del gauge leggibile in dark. */
:root[data-theme="dark"] .gauge-num .big{color:var(--text-strong)}
/* Campi del form in dark: sfondo scuro, testo chiaro. */
:root[data-theme="dark"] .field input,
:root[data-theme="dark"] .field textarea{background:var(--surface-2);color:var(--text)}
/* Focus dei campi in dark. */
:root[data-theme="dark"] .field input:focus,
:root[data-theme="dark"] .field textarea:focus{background:var(--surface)}
/* Nav in dark: sfondo blu-nero semi-trasparente. */
:root[data-theme="dark"] .nav{background:rgba(8,17,29,.72)}
/* Nav scrollata in dark. */
:root[data-theme="dark"] .nav.scrolled{background:rgba(8,17,29,.92);box-shadow:0 6px 24px rgba(0,0,0,.4)}
/* CTA "Contatti": in dark il fondo --blue-ink diventa chiaro → pillola
   bianca con testo bianco (illeggibile). Forzo blu profondo + testo
   bianco (contrasto 8.6:1, coerente col light mode).                   */
:root[data-theme="dark"] .nav-cta{
  background:#0c4d8a;color:#fff!important;
  box-shadow:0 4px 16px rgba(0,0,0,.35);
}
/* Hover della CTA in dark. */
:root[data-theme="dark"] .nav-cta:hover{
  background:#1162ad;
  box-shadow:0 8px 24px rgba(78,163,232,.32);
}
/* Cassetto mobile in dark: fondo scuro pieno. */
:root[data-theme="dark"] .mobile-menu{background:var(--bg)}
/* Selezione testo in dark: sfondo blu schiarito, testo scuro. */
:root[data-theme="dark"] ::selection{background:var(--brand);color:#06101b}

/* il toggle non deve apparire prima che il JS sia pronto (evita FOUC) */
/* Nasconde il pulsante tema finché app.js non segnala di essere pronto... */
.theme-toggle{opacity:0}
/* ...poi lo rende visibile (evita un lampo con l'icona sbagliata). */
.theme-ready .theme-toggle{opacity:1}

/* reduced-motion: spegni i nuovi movimenti, lascia gli stati finali   */
/* Con movimento ridotto: niente barra di avanzamento né deriva aurora né tilt. */
@media(prefers-reduced-motion:reduce){
  .scroll-progress{display:none}
  .hero::before{animation:none}
  .cell.tilt,.proj.tilt,.card.tilt{transform:translateY(-6px)!important}
}

/* ====================================================================
   PART 2 — 2026 refresh II
   Innesti aggiuntivi sopra la base. Tutto reduced-motion-safe e
   coerente col dark mode.
   ==================================================================== */

/* ---- NAV: il link "Illuminazione" porta a 7 voci. Condenso prima,
        poi passo al drawer un po' più presto (1040px) per non stringere. */
/* Sotto 1180px: link di nav più stretti per farli stare tutti. */
@media(max-width:1180px){
  .nav-links{gap:2px}
  .nav-links a{padding:8px 11px;font-size:.86rem}
  .nav-cta{padding:9px 16px;margin-left:4px}
}
/* Sotto 1040px: passa comunque all'hamburger (troppe voci per la barra). */
@media(max-width:1040px){
  .nav-links{display:none}
  .menu-toggle{display:block}
  .logo{height:48px}
  .nav.scrolled .logo{height:44px}
}
/* nuova nona voce del drawer: mantieni la cascata d'ingresso */
/* Ritardo d'ingresso per la nona voce del menu (aggiunta dopo). */
.mobile-menu.open .mm-links a:nth-child(9){transition-delay:.50s}

/* ---- HERO: spotlight che segue il cursore (desktop). Statico e tenue
        senza JS o con reduced-motion. Usa ::after, libero su entrambi. */
/* Alone luminoso che segue il cursore nella hero (posizione da --sx/--sy).
   Ha un valore di default, quindi resta gradevole anche senza JS. */
.hero::after,.page-hero::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(240px 240px at var(--sx,72%) var(--sy,16%),
    rgba(26,120,196,.12),transparent 62%);
}
/* Versione dark dell'alone (blu schiarito, un filo più intenso). */
:root[data-theme="dark"] .hero::after,
:root[data-theme="dark"] .page-hero::after{
  background:radial-gradient(260px 260px at var(--sx,72%) var(--sy,16%),
    rgba(78,163,232,.18),transparent 62%);
}
/* Contenuto della page-hero sopra l'alone. */
.page-hero-inner{position:relative;z-index:2}

/* ---- CARD: ombra premium a due livelli + bordo che vira al blu.
        Si compone con il tilt 3D e il glow radiale già presenti. */
/* Hover card/progetto/cella: ombra a due strati (contatto + diffusa) e bordo blu acceso. */
.cell:hover,.proj:hover,.card:hover{
  box-shadow:0 2px 6px rgba(6,36,63,.05),0 26px 58px rgba(6,36,63,.13);
  border-color:var(--brand-bright);
}
/* Versione dark dell'ombra hover (più profonda). */
:root[data-theme="dark"] .cell:hover,
:root[data-theme="dark"] .proj:hover,
:root[data-theme="dark"] .card:hover{
  box-shadow:0 2px 8px rgba(0,0,0,.4),0 28px 60px rgba(0,0,0,.5);
  border-color:var(--brand);
}

/* link "scopri" nelle card bento della home */
/* Link "Scopri" dentro le celle: freccia + testo blu, con micro-animazione al hover. */
.cell-link{display:inline-flex;align-items:center;gap:7px;margin-top:22px;
  font-family:var(--body);font-weight:600;font-size:.9rem;color:var(--brand);
  transition:gap .25s var(--ease),color .25s var(--ease)}
/* Freccia del link "Scopri". */
.cell-link svg{width:16px;height:16px;transition:transform .25s var(--ease)}
/* Hover cella: aumenta lo spazio testo-freccia (effetto "apertura"). */
.cell:hover .cell-link{gap:11px}
/* Hover cella: la freccia scivola a destra. */
.cell:hover .cell-link svg{transform:translateX(3px)}
/* Link "Scopri" bianco nella cella feature. */
.cell.feature .cell-link{color:#fff}

/* ---- BOTTONI/PILL su fondo blu: passata di luce al hover (CSS puro) */
/* Prepara i bottoni blu a contenere il riflesso (overflow nascosto). */
.btn-primary,.nav-cta,.mm-cta{position:relative;overflow:hidden}
/* Striscia di luce diagonale posizionata fuori a sinistra, pronta a passare. */
.btn-primary::after,.nav-cta::after,.mm-cta::after{
  content:"";position:absolute;top:0;left:-130%;width:55%;height:100%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.38),transparent);
  transform:skewX(-18deg);transition:left .6s var(--ease);pointer-events:none}
/* Hover: la striscia di luce attraversa il bottone da sinistra a destra. */
.btn-primary:hover::after,.nav-cta:hover::after{left:150%}
/* Tiene la freccia del bottone sopra il riflesso. */
.btn-primary>svg{position:relative;z-index:1}

/* ---- REVEAL: settle più morbido (blur→nitido + micro-scala) --------- */
/* Versione avanzata del reveal: oltre a salire, parte leggermente
   sfocato e rimpicciolito, poi diventa nitido e a scala piena. */
.reveal{
  transform:translateY(34px) scale(.99);
  filter:blur(6px);
  transition:opacity .8s var(--ease),transform .8s var(--ease),filter .8s var(--ease);
}
/* Stato finale: nitido e in posizione. */
.reveal.in{transform:translateY(0) scale(1);filter:blur(0)}

/* ====================================================================
   ILLUSTRAZIONE SMART LIGHTING (pagina Illuminazione)
   Elemento firma della pagina: strada notturna con rete punto-punto.
   ==================================================================== */
/* Contenitore dell'illustrazione. */
.lamp-vis{position:relative}
/* L'SVG occupa il 92% del contenitore. */
.lamp-vis svg{width:92%;height:92%}
/* Palo del lampione: tratto blu spesso, arrotondato. */
.lamp-pole{stroke:var(--brand);stroke-width:3.4;stroke-linecap:round;opacity:.9}
/* Testa del lampione (lampada): blu pieno. */
.lamp-head{fill:var(--brand)}
/* Testa "smart" (connessa): oro, per distinguerla. */
.lamp-head.smart{fill:var(--accent)}
/* Cono di luce blu (gradiente definito nell'SVG). */
.cone-b{fill:url(#coneBlue)}
/* Cono di luce oro. */
.cone-g{fill:url(#coneGold)}
/* Linea del suolo. */
.lamp-ground{stroke:var(--line);stroke-width:2.4;stroke-linecap:round}
/* Linea del suolo tratteggiata (prospettiva). */
.lamp-ground-dash{stroke:var(--line);stroke-width:2.4;stroke-linecap:round;stroke-dasharray:2 16;opacity:.8}
/* Rete di collegamento tra i lampioni: tratto oro tratteggiato che scorre (telecontrollo). */
.lamp-net{fill:none;stroke:var(--accent);stroke-width:2.2;stroke-linecap:round;
  stroke-dasharray:5 8;opacity:.85;animation:lampFlow 7s linear infinite}
/* Keyframe dello scorrimento della rete. */
@keyframes lampFlow{to{stroke-dashoffset:-130}}
/* Nodo della rete (punto di connessione): oro pieno. */
.lamp-node{fill:var(--accent)}
/* Anello che pulsa attorno ai nodi (segnale attivo). */
.lamp-pulse{fill:none;stroke:var(--accent);stroke-width:2;opacity:.7;
  transform-box:fill-box;transform-origin:center;animation:lampPulse 2.8s ease-out infinite}
/* Keyframe della pulsazione: l'anello si espande e svanisce. */
@keyframes lampPulse{0%{transform:scale(1);opacity:.7}70%{transform:scale(4.2);opacity:0}100%{transform:scale(4.2);opacity:0}}
/* Stelle del cielo notturno (attenuate). */
.lamp-star{fill:var(--text-faint);opacity:.55}
/* Luna (oro tenue). */
.lamp-moon{fill:var(--accent);opacity:.22}
/* Ritaglio della luna (crea la falce sovrapponendo il colore di sfondo). */
.lamp-moon-cut{fill:var(--white)}
/* Luna un filo più visibile in dark mode. */
:root[data-theme="dark"] .lamp-moon{opacity:.3}
/* Etichetta sotto l'illustrazione ("Smart lighting"): pillola con puntino pulsante. */
.lamp-tag{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);
  display:inline-flex;align-items:center;gap:7px;white-space:nowrap;
  font-family:var(--body);font-weight:600;font-size:.78rem;letter-spacing:.02em;
  color:var(--brand);background:var(--surface);border:1px solid var(--line);
  padding:6px 13px;border-radius:100px;box-shadow:0 6px 18px rgba(6,36,63,.08)}
/* Puntino oro pulsante nell'etichetta. */
.lamp-tag::before{content:"";width:7px;height:7px;border-radius:50%;
  background:var(--accent);box-shadow:0 0 0 0 rgba(223,178,32,.5);animation:pulse 2.4s ease-out infinite}

/* ---- reduced-motion: spegni i nuovi movimenti, tieni gli stati finali */
/* Con movimento ridotto: reveal senza blur, illustrazione e riflessi fermi. */
@media(prefers-reduced-motion:reduce){
  .reveal{filter:none!important;transform:none!important}
  .lamp-net,.lamp-pulse,.lamp-tag::before{animation:none!important}
  .btn-primary::after,.nav-cta::after,.mm-cta::after{display:none}
  .hero::after,.page-hero::after{background:radial-gradient(240px 240px at 72% 16%,rgba(26,120,196,.10),transparent 62%)}
}

/* ====================================================================
   ACCESSIBILITA' - skip-link e focus visibile
   ==================================================================== */
/* "Skip link": collegamento nascosto fuori schermo che permette a chi
   usa la tastiera di saltare direttamente al contenuto principale. */
.skip-link{
  position:absolute;left:-9999px;top:0;z-index:300;
  background:var(--blue);color:#fff;padding:12px 22px;border-radius:0 0 14px 0;
  font-family:var(--body);font-weight:600;font-size:.95rem;
  box-shadow:0 8px 24px rgba(6,36,63,.25);
}
/* Quando riceve il focus (Tab), lo skip link compare in alto a sinistra. */
.skip-link:focus{left:0}
/* anello di focus coerente su link e bottoni (solo da tastiera) */
/* Contorno di focus visibile solo per chi naviga da tastiera (non al click del mouse). */
a:focus-visible,button:focus-visible{outline:2px solid var(--brand);outline-offset:2px}

/* ---- bottone "torna su" -------------------------------------------- */
/* Pulsante tondo "torna su": fisso in basso a destra, nascosto finché
   non si scorre abbastanza (app.js aggiunge .show). */
.to-top{
  position:fixed;right:24px;bottom:24px;z-index:90;width:48px;height:48px;
  border-radius:50%;border:0;cursor:pointer;background:var(--blue);color:#fff;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 28px rgba(6,36,63,.28);
  opacity:0;visibility:hidden;transform:translateY(12px);
  transition:opacity .3s var(--ease),transform .3s var(--ease),background .25s var(--ease);
}
/* Stato visibile del pulsante torna-su. */
.to-top.show{opacity:1;visibility:visible;transform:translateY(0)}
/* Hover: blu più scuro e leggero sollevamento. */
.to-top:hover{background:var(--blue-deep);transform:translateY(-3px)}
/* La freccia dentro il pulsante. */
.to-top svg{width:22px;height:22px;stroke:#fff;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round}
/* Su smartphone il pulsante è un po' più piccolo e vicino al bordo. */
@media(max-width:520px){.to-top{right:16px;bottom:16px;width:44px;height:44px}}

/* ====================================================================
   PAGINE LEGALI (privacy / cookie) + link legali nel footer
   ==================================================================== */
/* Contenitore dei testi legali: larghezza da lettura. */
.legal{max-width:820px}
/* Titoli di secondo livello nelle pagine legali. */
.legal h2{font-family:var(--display);font-size:1.35rem;font-weight:600;color:var(--text);margin:2.4rem 0 .7rem;letter-spacing:-.01em;line-height:1.3}
/* Il primo titolo non ha margine sopra. */
.legal h2:first-child{margin-top:0}
/* Titoli di terzo livello. */
.legal h3{font-family:var(--display);font-size:1.05rem;font-weight:600;color:var(--text);margin:1.5rem 0 .5rem}
/* Paragrafi legali. */
.legal p{color:var(--muted);line-height:1.75;margin:0 0 1rem}
/* Link legali sottolineati. */
.legal a{color:var(--brand);text-decoration:underline;text-underline-offset:2px}
/* Hover dei link legali. */
.legal a:hover{color:var(--blue-bright)}
/* Grassetto legale. */
.legal strong{color:var(--text);font-weight:600}
/* Corsivo legale (definizioni, note). */
.legal em{font-style:italic;color:var(--text)}
/* Pill "ultimo aggiornamento" in cima alle pagine legali. */
.legal-updated{display:inline-block;font-size:.82rem;font-weight:500;color:var(--text-faint);background:var(--surface-2);border:1px solid var(--line);padding:5px 13px;border-radius:999px;margin:0 0 1.6rem}
/* Contenitore della tabella: scroll orizzontale sotto i 560px, angoli arrotondati. */
.legal-table-wrap{overflow-x:auto;margin:.4rem 0 1.4rem;border:1px solid var(--line);border-radius:14px}
/* Tabella riepilogativa delle categorie di cookie. */
.legal-table{width:100%;border-collapse:collapse;font-size:.9rem;min-width:560px}
/* Celle: allineate in alto, con hairline di separazione. */
.legal-table th,.legal-table td{text-align:left;padding:13px 16px;vertical-align:top;border-bottom:1px solid var(--line);line-height:1.5}
/* Intestazioni di colonna: display font, maiuscoletto tenue, superficie tenue. */
.legal-table thead th{font-family:var(--display);font-weight:600;font-size:.78rem;letter-spacing:.03em;text-transform:uppercase;color:var(--text-strong);background:var(--surface-2)}
/* Intestazioni di riga (nome categoria): risalto e nessun a-capo. */
.legal-table tbody th{font-weight:600;color:var(--text-strong);white-space:nowrap}
/* Testo delle celle dati: colore secondario. */
.legal-table td{color:var(--muted)}
/* Ultima riga senza bordo inferiore. */
.legal-table tbody tr:last-child th,.legal-table tbody tr:last-child td{border-bottom:0}
/* Evidenziazione riga al passaggio del mouse. */
.legal-table tbody tr:hover th,.legal-table tbody tr:hover td{background:var(--surface-2)}
/* Micro-badge "Sempre attivi" dentro la tabella. */
.legal-tag{display:inline-block;margin-top:5px;font-size:.72rem;font-weight:600;color:var(--brand);background:var(--blue-soft);padding:3px 10px;border-radius:999px;white-space:nowrap}

/* Riga dei link legali nel footer (Privacy / Cookie). */
.foot-legal-links{display:flex;gap:18px;flex-wrap:wrap}
/* Singolo link legale nel footer: attenuato, si schiarisce al hover. */
.foot-legal-links a{color:rgba(255,255,255,.62);font-size:.84rem;transition:color .25s var(--ease)}
/* Hover: bianco pieno. */
.foot-legal-links a:hover{color:#fff}

/* ====================================================================
   PAGINA CERTIFICAZIONI
   ==================================================================== */
/* Testo introduttivo della pagina certificazioni: centrato, grigio. */
.cert-intro{max-width:840px;margin:0 auto 8px;text-align:center;color:var(--muted);font-size:1.05rem;line-height:1.75}
/* Griglia delle certificazioni a 2 colonne. */
.cert-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:24px}
/* Variante a 3 colonne. */
.cert-grid-3{grid-template-columns:repeat(3,1fr)}
/* Card certificazione: bordo sinistro blu spesso (accento), contenuto in colonna. */
.cert-card{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--brand);
  border-radius:16px;padding:24px 24px 22px;display:flex;flex-direction:column;
  transition:transform .2s var(--ease),box-shadow .2s var(--ease),border-color .2s var(--ease)}
/* Hover: leggero sollevamento e ombra. */
.cert-card:hover{transform:translateY(-3px);box-shadow:0 18px 42px rgba(6,36,63,.13)}
/* Ombra hover in dark mode. */
:root[data-theme="dark"] .cert-card:hover{box-shadow:0 20px 46px rgba(0,0,0,.5)}
/* Riga superiore della card: numero + titolo allineati alla base. */
.cert-top{display:flex;align-items:baseline;gap:12px;margin-bottom:12px}
/* Numero/codice della certificazione: pillola con bordo. */
.cert-num{font-family:var(--display);font-weight:700;font-size:.82rem;color:var(--brand);
  background:var(--bg-soft);border:1px solid var(--line);border-radius:8px;padding:3px 9px;flex:0 0 auto}
/* Titolo della certificazione. */
.cert-card h3{font-family:var(--display);font-size:1.1rem;font-weight:600;color:var(--text);margin:0;line-height:1.3}
/* Descrizione della certificazione (flex:1 spinge i link in fondo). */
.cert-card p{color:var(--muted);font-size:.94rem;line-height:1.66;margin:0 0 18px;flex:1}
/* Riga dei link/pulsanti PDF della card. */
.cert-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:auto}
/* Pulsante "PDF": pillola blu con testo bianco. */
.cert-pdf{display:inline-flex;align-items:center;gap:7px;background:var(--blue);color:#fff;
  font-family:var(--body);font-weight:600;font-size:.82rem;padding:8px 14px;border-radius:9px;
  transition:background .2s var(--ease),transform .2s var(--ease)}
/* Hover del pulsante PDF. */
.cert-pdf:hover{background:var(--blue-deep);transform:translateY(-1px)}
/* In dark mode il pulsante PDF diventa oro con testo scuro (contrasto). */
:root[data-theme="dark"] .cert-pdf{background:var(--brand);color:#04243f}
/* Hover del pulsante PDF in dark. */
:root[data-theme="dark"] .cert-pdf:hover{background:var(--brand-bright)}
/* Icona nel pulsante PDF. */
.cert-pdf svg{width:16px;height:16px;flex:0 0 auto}
/* Su schermi piccoli le griglie certificazioni passano a colonna singola. */
@media(max-width:860px){.cert-grid,.cert-grid-3{grid-template-columns:1fr}}

/* ====================================================================
   SEZIONE IMPATTO / SOSTENIBILITA' (2024 -> 2030)
   Ispirata alla "prova quantificata" di ENGIE: dato attuale affiancato
   all'obiettivo futuro, con barra di avanzamento. Riusa il contatore
   animato esistente (.num[data-count], gestito da app.js).
   ==================================================================== */
/* Sezione impatto: fondo azzurrino tenue con bordi sopra/sotto (come .model). */
.impact{background:var(--blue-mist);border-top:1px solid var(--blue-hair);border-bottom:1px solid var(--blue-hair)}
/* Badge "DATI DIMOSTRATIVI": nastro ben visibile che marca i numeri come
   NON reali. Va rimosso quando si inseriscono i dati veri. Oro acceso,
   impossibile da non notare. */
.impact-demo{display:inline-flex;align-items:center;gap:8px;
  background:#fff4d0;border:1px solid var(--accent);color:#7a5a00;
  font-family:var(--body);font-weight:700;font-size:.74rem;letter-spacing:.1em;
  text-transform:uppercase;padding:7px 14px;border-radius:100px;margin-bottom:20px}
/* Puntino pulsante nel badge (riusa l'animazione pulse esistente). */
.impact-demo::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 0 0 rgba(223,178,32,.5);animation:pulse 2.4s ease-out infinite}
/* Griglia delle metriche: si adatta da 1 a 3 colonne secondo lo spazio. */
.impact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:18px;margin-top:12px}
/* Singola card metrica: card bianca con bordo, angoli grandi, contenuto in colonna. */
.impact-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:30px 30px 26px;display:flex;flex-direction:column;
  transition:transform .35s var(--ease),box-shadow .35s var(--ease),border-color .35s var(--ease)}
/* Hover: leggero sollevamento e bordo blu (coerente con le altre card). */
.impact-card:hover{transform:translateY(-5px);box-shadow:0 22px 46px rgba(6,36,63,.1);border-color:var(--brand-bright)}
/* Ombra hover in dark mode. */
:root[data-theme="dark"] .impact-card:hover{box-shadow:0 24px 50px rgba(0,0,0,.5);border-color:var(--brand)}
/* Etichetta della metrica (es. "Energia rinnovabile"): piccola, maiuscoletta. */
.impact-label{font-family:var(--body);font-weight:600;font-size:.8rem;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);margin-bottom:18px}
/* Riga dato-attuale -> obiettivo: numero grande, freccia, target. */
.impact-nums{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:6px}
/* Il valore attuale (2024): grande, font display, blu, con cifre a larghezza fissa. */
.impact-now{font-family:var(--display);font-weight:700;font-size:clamp(2rem,3.6vw,2.7rem);
  color:var(--brand);line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
/* Unità di misura accanto al numero (MW, t, %...). */
.impact-unit{font-family:var(--display);font-weight:600;font-size:1.1rem;color:var(--brand);margin-left:3px}
/* La freccia tra attuale e obiettivo. */
.impact-arrow{color:var(--muted-soft);flex:0 0 auto;display:flex;align-items:center}
.impact-arrow svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
/* Il valore obiettivo (2030): oro scuro, per distinguerlo dal presente. */
.impact-target{font-family:var(--display);font-weight:700;font-size:1.5rem;color:var(--accent-ink);
  line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
/* In dark mode l'obiettivo usa oro pieno (contrasto sul fondo scuro). */
:root[data-theme="dark"] .impact-target{color:var(--accent)}
/* Riga anni sotto i numeri (2024 -> 2030). */
.impact-years{display:flex;justify-content:space-between;font-size:.76rem;font-weight:600;
  color:var(--text-faint);letter-spacing:.04em;margin:14px 2px 8px}
/* Barra di avanzamento: traccia tenue con riempimento blu->verde. */
.impact-bar{height:7px;border-radius:100px;background:var(--surface-3);overflow:hidden;position:relative}
/* Riempimento della barra: gradiente blu->acqua (firma cromatica), largo quanto --pct.
   Parte da 0 e si anima quando la sezione entra in vista (classe .on da app.js reveal). */
.impact-bar span{position:absolute;left:0;top:0;bottom:0;width:var(--pct,0%);
  background:linear-gradient(90deg,var(--brand),#23d2b5);border-radius:100px;
  transition:width 1.4s var(--ease)}
/* Nota a piè della card (fonte/anno del dato): piccola, attenuata. */
.impact-note{margin-top:16px;font-size:.82rem;color:var(--text-faint);line-height:1.5}
/* Riga di chiusura sotto la griglia: rimando alla metodologia/fonte. */
.impact-foot{margin-top:26px;font-size:.9rem;color:var(--muted);text-align:center}

/* ====================================================================
   HOME 2026 — LAYOUT "ENGIE-STYLE" in palette Certosa (blu, niente magenta)
   Ordine sezioni: hero-foto, band pubblico, offerte, impegno (carosello
   blu), obiettivo, certificazioni, aiuto. Riusa i token blu esistenti.
   ==================================================================== */

/* ---- 1) HERO a tutta pagina con foto -------------------------------- */
/* Testata con foto a tutto sfondo; il contenuto è allineato in basso. */
.hero-photo{position:relative;min-height:88vh;display:flex;align-items:flex-end;overflow:hidden;background:var(--blue-ink)}
/* Livello immagine di sfondo. */
.hp-media{position:absolute;inset:0;z-index:0}
.hp-media img{width:100%;height:100%;object-fit:cover}
/* Velo scuro (più denso a sinistra) per la leggibilità del testo bianco. */
.hp-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(4,36,63,.86) 0%,rgba(4,36,63,.55) 45%,rgba(4,36,63,.2) 100%)}
/* Contenuto hero sopra l'immagine. */
.hero-photo .hero-inner{position:relative;z-index:2;padding:120px 0 96px;max-width:860px}
/* In hero-foto tutto il testo è bianco; l'accento diventa oro (spicca sulla foto). */
.hero-photo h1{color:#fff}
/* L'accento oro resta sempre luminoso (bagliore fisso, non solo alla comparsa). */
.hero-photo h1 .accent{color:var(--accent);text-shadow:0 0 22px rgba(223,178,32,.45)}
/* In dark l'accento della home resta ORO (senza questa riga diventerebbe blu
   per la regola generale :root[dark] h1 .accent): l'oro spicca sul fondo scuro. */
:root[data-theme="dark"] .hero-photo h1 .accent{color:var(--accent);text-shadow:0 0 22px rgba(223,178,32,.45)}
.hero-photo .lede{color:rgba(255,255,255,.92);max-width:640px}
/* Eyebrow su fondo scuro: pillola traslucida chiara. */
.hero-photo .eyebrow{color:#fff;background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.28)}
/* Bottone "ghost" reso leggibile sulla foto scura. */
.hero-photo .btn-ghost{color:#fff;border-color:rgba(255,255,255,.55)}
.hero-photo .btn-ghost:hover{color:#fff;border-color:#fff;background:rgba(255,255,255,.1)}

/* ---- 2) BAND pubblico (enti / aziende) ------------------------------ */
.aud{padding:0 0 56px;background:var(--bg)}
/* Striscia blu scura col titolo. */
.aud-band{background:var(--blue-ink);color:#fff;padding:40px 0 96px;text-align:center}
/* In dark --blue-ink diventa chiaro: senza override la fascia avrebbe testo
   bianco su fondo chiaro (illeggibile). La riportiamo a una fascia blu scura. */
:root[data-theme="dark"] .aud-band{background:var(--surface-3)}
.aud-band h2{color:#fff;font-size:clamp(1.4rem,3vw,2.05rem)}
/* Le due card risalgono sopra la striscia (margin-top negativo). */
.aud-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;max-width:1040px;margin:-64px auto 0;padding:0 32px}
/* Card-pubblico: testo a sinistra, foto a destra. */
.aud-card{display:grid;grid-template-columns:1.05fr .95fr;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;box-shadow:0 20px 50px rgba(6,36,63,.1);transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.aud-card:hover{transform:translateY(-6px);box-shadow:0 28px 62px rgba(6,36,63,.16)}
.ac-body{padding:34px 30px;display:flex;flex-direction:column}
.ac-body h3{font-family:var(--display);font-weight:600;font-size:1.4rem;color:var(--brand);margin-bottom:10px;letter-spacing:-.015em}
.ac-body p{color:var(--muted);font-size:.96rem;margin-bottom:22px}
.ac-body .btn{margin-top:auto;align-self:flex-start}
.ac-media{position:relative;min-height:210px;background:var(--blue-soft)}
.ac-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}

/* ---- 3) OFFERTE / servizi in evidenza ------------------------------- */
.offers{padding:72px 0;background:var(--bg-soft);border-top:1px solid var(--blue-hair);border-bottom:1px solid var(--blue-hair)}
/* Intestazione centrata. */
.offers-head{text-align:center;max-width:720px;margin:0 auto 52px}
.offers-head h2{color:var(--blue-ink)}
.offers-head .sub{margin-top:12px;font-size:1.05rem;color:var(--muted)}
/* Griglia di due card-offerta. */
.offer-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;max-width:940px;margin:0 auto}
.offer-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;display:flex;flex-direction:column;transition:transform .35s var(--ease),box-shadow .35s var(--ease),border-color .35s var(--ease)}
.offer-card:hover{transform:translateY(-6px);box-shadow:0 24px 54px rgba(6,36,63,.14);border-color:var(--brand-bright)}
.offer-media{aspect-ratio:16/10;overflow:hidden;background:var(--blue-soft)}
.offer-media img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
.offer-card:hover .offer-media img{transform:scale(1.05)}
.offer-body{padding:26px 28px 30px;display:flex;flex-direction:column;flex:1}
.offer-body h3{font-family:var(--display);font-weight:600;font-size:1.35rem;color:var(--brand);margin-bottom:10px;letter-spacing:-.015em}
.offer-body p{color:var(--muted);font-size:.95rem;margin-bottom:18px}
/* Badge/pillola informativa dentro la card. */
.offer-badge{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;font-size:.8rem;font-weight:600;color:var(--blue-ink);background:var(--blue-soft);border:1px solid var(--blue-line);padding:8px 14px;border-radius:12px;margin-bottom:22px}
.offer-badge svg{width:16px;height:16px;stroke:var(--brand);fill:none;stroke-width:2;flex:0 0 16px}
.offer-body .btn{margin-top:auto;align-self:flex-start}

/* ---- 4) IMPEGNO (carosello su fondo blu) ---------------------------- */
.commit{position:relative;padding:104px 0 172px;color:#fff;overflow:hidden;background:linear-gradient(155deg,var(--blue) 0%,var(--blue-deep) 60%,var(--blue-ink) 100%)}
.commit h2{color:#fff;text-align:center;margin-bottom:46px}
/* Contenitore del carosello: le slide si sovrappongono, la attiva è in-flow. */
.commit-carousel{position:relative;max-width:920px;margin:0 auto}
.commit-slide{opacity:0;visibility:hidden;position:absolute;inset:0;display:grid;grid-template-columns:.92fr 1.08fr;background:var(--surface);border-radius:var(--r-lg);overflow:hidden;transition:opacity .45s var(--ease)}
.commit-slide.is-active{opacity:1;visibility:visible;position:relative}
.cs-media{position:relative;min-height:300px;background:var(--blue-soft)}
.cs-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cs-body{padding:40px;display:flex;flex-direction:column;justify-content:center;color:var(--text)}
.cs-body h3{font-family:var(--display);font-weight:600;font-size:1.5rem;color:var(--brand);margin-bottom:14px;letter-spacing:-.015em}
.cs-body p{color:var(--muted);font-size:1rem;margin-bottom:22px}
/* Link "Scopri la soluzione" con freccia. */
.cs-link{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;font-weight:600;color:var(--brand)}
.cs-link svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s var(--ease)}
.cs-link:hover svg{transform:translateX(4px)}
/* Frecce su/giù del carosello, ancorate a destra. */
.commit-arrows{position:absolute;top:50%;right:-22px;transform:translateY(-50%);display:flex;flex-direction:column;gap:12px;z-index:4}
.car-arrow{width:48px;height:48px;border-radius:50%;border:0;background:#fff;color:var(--blue);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 20px rgba(4,36,63,.32);transition:background .25s var(--ease),color .25s var(--ease),transform .2s var(--ease)}
.car-arrow:hover{background:var(--blue);color:#fff;transform:translateY(-1px);box-shadow:0 10px 26px rgba(4,36,63,.4)}
.car-arrow:active{transform:scale(.92)}
.car-arrow svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round}
.commit-cta{display:flex;justify-content:center;margin-top:40px}

/* ---- 5) OBIETTIVO (banda con foto) ---------------------------------- */
/* La sezione risale sopra il blu (margin negativo): la card-foto "galleggia"
   a cavallo tra il blu e il bianco, così niente più cucitura dritta. */
.objective{padding:0 0 48px;background:transparent;margin-top:-108px;position:relative;z-index:3}
.obj-card{position:relative;border-radius:var(--r-lg);overflow:hidden;min-height:360px;display:grid;grid-template-columns:1fr 1fr;align-items:center;color:#fff;box-shadow:0 40px 82px -26px rgba(1,14,28,.62)}
.obj-media{position:absolute;inset:0;z-index:0}
.obj-media img{width:100%;height:100%;object-fit:cover}
.obj-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(4,36,63,.35),rgba(4,36,63,.72))}
.obj-title{position:relative;z-index:2;padding:48px 40px}
.obj-title h2{color:#fff;font-size:clamp(2rem,4vw,3rem)}
.obj-text{position:relative;z-index:2;padding:48px 44px 48px 0}
.obj-text p{color:rgba(255,255,255,.92);font-size:1.08rem;font-weight:500;margin-bottom:26px}

/* ---- 6) CERTIFICAZIONI (3 tile) ------------------------------------- */
.cert-show{padding:72px 0 96px;text-align:center}
.cert-show h2{color:var(--blue-ink);margin-bottom:46px}
.cs-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-bottom:46px}
.cs-tile{display:block;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;text-align:left;color:inherit;cursor:pointer;transition:transform .35s var(--ease),box-shadow .35s var(--ease),border-color .35s var(--ease)}
.cs-tile:hover{transform:translateY(-6px);box-shadow:0 24px 54px rgba(6,36,63,.14);border-color:var(--brand-bright)}
/* Riquadro superiore con il codice ISO in evidenza. */
.cst-top{aspect-ratio:16/10;display:flex;align-items:center;justify-content:center;background:linear-gradient(150deg,var(--blue-soft),var(--surface-3))}
.cst-top span{font-family:var(--display);font-weight:700;font-size:2.2rem;color:var(--brand);letter-spacing:-.02em}
/* Didascalia inferiore. */
.cst-cap{padding:22px 26px;font-family:var(--body);font-weight:500;color:var(--text);font-size:.98rem;line-height:1.5}
.cst-cap strong{display:block;font-family:var(--display);font-weight:600;color:var(--blue-ink);font-size:1.12rem;margin-bottom:4px}

/* ---- 7) AIUTO / contatti -------------------------------------------- */
.help{padding:0 0 120px;background:var(--bg)}
/* Box blu principale, testo bianco allineato a sinistra. */
.help-box{position:relative;overflow:hidden;background:linear-gradient(140deg,var(--blue) 0%,var(--blue-deep) 60%,var(--blue-ink) 100%);border-radius:var(--r-lg);padding:64px 60px}
.help-box::before{content:"";position:absolute;width:320px;height:320px;border-radius:50%;border:1.5px solid rgba(255,255,255,.14);top:-150px;right:-70px}
.help-box .inner{position:relative;z-index:2}
.help-box h2{color:#fff;margin-bottom:14px;max-width:16ch}
.help-box p{color:rgba(255,255,255,.85);font-size:1.08rem;max-width:520px;margin-bottom:32px}
/* Box secondario: pronto intervento. */
.help-alt{margin-top:22px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:28px 34px;display:flex;align-items:center;justify-content:space-between;gap:26px;flex-wrap:wrap}
.help-alt .ha-txt h3{font-family:var(--display);font-weight:600;font-size:1.2rem;color:var(--blue-ink);margin-bottom:5px}
.help-alt .ha-txt p{color:var(--muted);font-size:.95rem;max-width:60ch}

/* ---- Responsive delle nuove sezioni --------------------------------- */
@media(max-width:880px){
  .hero-photo{min-height:74vh}
  .hero-photo .hero-inner{padding:100px 0 64px}
  .aud-grid{grid-template-columns:1fr;padding:0 20px}
  .aud-card{grid-template-columns:1fr}
  .ac-media{min-height:180px;order:-1}
  .offer-grid{grid-template-columns:1fr;max-width:460px}
  .commit-slide{grid-template-columns:1fr}
  .cs-media{min-height:200px}
  .commit-arrows{position:static;flex-direction:row;justify-content:center;transform:none;margin-top:22px}
  .commit{padding-bottom:128px}
  .objective{margin-top:-72px}
  .obj-card{grid-template-columns:1fr;min-height:0}
  .obj-media::after{background:linear-gradient(180deg,rgba(4,36,63,.45),rgba(4,36,63,.82))}
  .obj-title{padding:36px 30px 0}
  .obj-text{padding:16px 30px 40px}
  .cs-grid{grid-template-columns:1fr;max-width:420px;margin-left:auto;margin-right:auto}
  .help-box{padding:48px 30px}
  .help-alt{flex-direction:column;align-items:flex-start}
}
@media(max-width:520px){
  .aud-band{padding:32px 0 84px}
  .commit-arrows{gap:16px}
}

/* ---- Dark mode: le sezioni foto/blu sono già scure; rifinisco i bordi */
:root[data-theme="dark"] .aud-card,
:root[data-theme="dark"] .offer-card,
:root[data-theme="dark"] .cs-tile{box-shadow:none}
:root[data-theme="dark"] .cst-top{background:linear-gradient(150deg,var(--surface-3),var(--surface-2))}

/* ---- Reduced-motion: le slide non attive restano nascoste ma stabili */
@media(prefers-reduced-motion:reduce){
  .commit-slide{transition:none}
}

/* ====================================================================
   PAGE-HERO con FOTO — coerenza delle pagine interne con la home ENGIE.
   Si attiva col modificatore .photo; serve un <div class="ph-media"> con
   l'immagine come primo figlio dell'header. Il testo diventa bianco.
   ==================================================================== */
.page-hero.photo{display:flex;align-items:flex-end;min-height:56vh;padding:140px 0 58px;background:var(--blue-ink);border-bottom:0}
/* nasconde le linee animate quando c'è la foto */
.page-hero.photo .hero-flow{display:none}
.page-hero.photo .ph-media{position:absolute;inset:0;z-index:0}
.page-hero.photo .ph-media img{width:100%;height:100%;object-fit:cover}
/* velo scuro per la leggibilità del testo bianco */
.page-hero.photo .ph-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(4,36,63,.88) 0%,rgba(4,36,63,.58) 50%,rgba(4,36,63,.28) 100%)}
.page-hero.photo .page-hero-inner{position:relative;z-index:2}
.page-hero.photo h1{color:#fff}
/* sull'hero-foto (velo scuro in entrambi i temi) anche la parola accento è bianca */
.page-hero.photo h1 .accent{color:#fff}
:root[data-theme="dark"] .page-hero.photo h1 .accent{color:#fff}
.page-hero.photo .lede{color:rgba(255,255,255,.92)}
.page-hero.photo .crumb{color:rgba(255,255,255,.72)}
.page-hero.photo .crumb a{color:#fff}
.page-hero.photo .crumb a:hover{color:var(--accent)}
.page-hero.photo .crumb span{color:rgba(255,255,255,.5)}
@media(max-width:520px){.page-hero.photo{min-height:46vh;padding:120px 0 44px}}

/* ============================================================
   PROTOTIPO — MIGLIORIE STILISTICHE 2026 (bozza da rivedere)
   Blocco isolato: token nuovi + hero cinetico + bento + glass +
   parallax + transizioni di pagina. Facile da rimuovere in blocco.
   ============================================================ */

/* ---- Nuovi token: accento "energia" verde, gradiente brand, glass ---- */
:root{
  --accent-green:#1f9d6b;              /* verde eco: SOLO metriche di sostenibilità */
  --accent-green-soft:#e7f6ef;         /* fondo tenue verde */
  --grad-brand:linear-gradient(100deg,var(--brand) 0%,var(--brand-bright) 55%,var(--accent) 100%);
  --glass-blur:saturate(160%) blur(20px);
}
:root[data-theme="dark"]{
  --accent-green:#37c98d;              /* verde schiarito per il dark */
  --accent-green-soft:#0f2a22;
}

/* ---- Transizioni di pagina native (Chrome 126+, degrada da solo) ---- */
@view-transition{ navigation: auto; }
@media (prefers-reduced-motion: reduce){
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*){ animation: none !important; }
}

/* ---- Parallax dell'immagine hero (scroll-driven, degrada) ---- */
@media (prefers-reduced-motion: no-preference){
  @supports (animation-timeline: view()){
    .hp-media img,
    .page-hero.photo .ph-media img{
      animation: hero-parallax linear both;
      animation-timeline: view();
      animation-range: cover;
      will-change: transform;
    }
  }
}
@keyframes hero-parallax{
  from{ transform: scale(1.12) translateY(-3.2%); }
  to  { transform: scale(1.12) translateY(3.2%); }
}

/* ---- Hero cinetico: reveal a parole (app.js aggiunge .kin e i .w/.wi) ---- */
.hero-photo h1.kin .hero-line{ overflow: visible; }
.hero-photo h1.kin .hero-line > span{ animation: none; opacity: 1; transform: none; }
.hero-photo h1.kin .w{ display: inline-block; }
.hero-photo h1.kin .wi{
  display: inline-block;
  opacity: 0;
  transform: translateY(.5em);
  filter: blur(10px);
  animation: kin-w .72s var(--ease) forwards;
  animation-delay: calc(var(--wi) * .06s + .12s);
}
@keyframes kin-w{ to{ opacity: 1; transform: none; filter: blur(0); } }
/* l'accento oro si rivela con una passata di luce più intensa, poi resta luminoso */
.hero-photo h1.kin .accent.wi{
  animation: kin-w .72s var(--ease) forwards, accent-shine 2.6s var(--ease) 1.3s 1;
}
@keyframes accent-shine{ 0%,100%{ text-shadow: 0 0 22px rgba(223,178,32,.45); } 45%{ text-shadow: 0 0 34px rgba(223,178,32,.7); } }

/* ---- Sezione Bento "in numeri" (sostituisce la vecchia .strip) ---- */
.block-bento{ padding: 76px 0; background: var(--bg-soft); }
.bento{ display: grid; grid-template-columns: repeat(4,1fr); gap: 16px; grid-auto-rows: minmax(150px,auto); }
.b-tile{
  position: relative; overflow: hidden;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r);
  padding: 26px 28px;
  display: flex; flex-direction: column; justify-content: flex-end; gap: 8px;
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), border-color .35s var(--ease);
}
.b-tile:hover{ transform: translateY(-4px); box-shadow: 0 26px 54px -22px rgba(6,36,63,.30); border-color: var(--brand); }
.b-num{ font-family: var(--display); font-weight: 700; font-size: clamp(2.1rem,3.6vw,2.9rem); line-height: 1; color: var(--brand); letter-spacing: -.02em; }
.b-lbl{ font-family: var(--display); font-weight: 600; color: var(--text-strong); font-size: 1.02rem; line-height: 1.25; }
.b-sub{ margin: 0; color: var(--text-muted); font-size: .9rem; line-height: 1.55; }
.b-wide{ grid-column: span 2; }
/* tile grande in alto a sinistra (2x2) con filo a gradiente */
.b-hero{ grid-column: 1 / 3; grid-row: 1 / 3; background: linear-gradient(162deg,var(--surface-3),var(--surface) 70%); }
.b-hero::before{ content:""; position:absolute; left:0; right:0; top:0; height:4px; background: var(--grad-brand); }
.b-hero .b-num{ font-size: clamp(3.4rem,7vw,5.4rem); }
.b-hero .b-lbl{ font-size: 1.3rem; }
/* tile verde: impatto/sostenibilità */
.b-green{ background: var(--accent-green-soft); border-color: var(--accent-green); border-color: color-mix(in srgb,var(--accent-green) 34%,transparent); }
.b-eco{ align-self: flex-start; display: inline-flex; align-items: center; gap: 6px; font-family: var(--body); font-weight: 600; font-size: .72rem; letter-spacing: .09em; text-transform: uppercase; color: #fff; background: var(--accent-green); padding: 5px 12px; border-radius: 999px; }
.b-green .b-lbl{ color: var(--text-strong); }
@media (max-width: 1000px){
  .bento{ grid-template-columns: repeat(2,1fr); }
  .b-hero{ grid-column: 1 / 3; grid-row: auto; }
  .b-wide{ grid-column: 1 / 3; }
}
@media (max-width: 560px){
  .bento{ grid-template-columns: 1fr; }
  .b-hero, .b-wide{ grid-column: auto; }
}

/* ---- Sistema di accento a gradiente (eyebrow di sezione) ---- */
.tag::before{ width: 30px; background: var(--grad-brand); }

/* ---- Glassmorphism sul menu mobile (frosted, solo dove supportato) ---- */
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
  .mobile-menu{
    background: color-mix(in srgb, var(--bg) 80%, transparent);
    -webkit-backdrop-filter: var(--glass-blur);
    backdrop-filter: var(--glass-blur);
  }
  :root[data-theme="dark"] .mobile-menu{
    background: color-mix(in srgb, var(--bg) 76%, transparent);
    -webkit-backdrop-filter: var(--glass-blur);
    backdrop-filter: var(--glass-blur);
  }
}
