/* Cirillico (30/09/2026): i font del design non hanno le lettere cirilliche; il secondo font della pila le ha e il browser lo scarica solo se in pagina ce ne sono. */
/* ============================================================
   SVEAHOST · LAYOUT 2 "REVEAL" (Gabriele) — stampo del generatore.
   Adattato al contratto della piattaforma (templates/README.md):
   menu in <ul class="nav-links"> (il menu del telefono lo costruisce
   app.js), footer autonomo, niente testo duplicato nell'HTML (gli
   strati "invertiti" e le frecce dei bottoni li crea il JS),
   contenuti visibili anche senza JavaScript e con "riduci movimento".
   ------------------------------------------------------------
   Origine: AI LAYOUT 14 — "LUCE". Base bianca, luce ciano.
   Hero = Scroll Expand Media (senza scroll bloccato: scena sticky).
   Niente bordini sottili: superfici tinte, ombre morbide, spazio.
   Font: Sora (titoli) · Onest (testo) · JetBrains Mono (etichette).
   ============================================================ */

:root{
  /* --- palette ------------------------------------------------
     I colori del marchio del cliente arrivano da src/colori/layout-2.ts in
     un <style id="svh-colori"> che ridefinisce queste variabili: si
     dichiarano SOLO qui su :root (su html/body vincerebbero per eredità).
     I valori sotto sono quelli di Gabriele: senza colore del cliente il
     sito è identico. */
  --bg:#ffffff;
  --bg-2:#f3f6fa;
  --surface:#e9eef5;
  --ink:#0b1220;            /* testo e fondi scuri (footer, schede, cerchi) */
  --ink-rgb:11, 18, 32;
  --ink-2:#3d4a5c;
  --muted:#6b7789;
  --foot-text:#c7d0dc;      /* testi sul fondo scuro del footer */
  --foot-muted:#9fb0c4;
  --foot-dim:#8b9bb0;
  --accent:#0891b2;         /* accento su bianco: parole in evidenza nei titoli, focus */
  --accent-rgb:8, 145, 178;
  --accent-ink:#0891b2;     /* accento per i testi piccoli su bianco (occhielli, link) */
  --on-accent:#ffffff;      /* testo sopra l'accento pieno */
  --glow:#22d3ee;           /* la luce: riempimenti, filetti, bagliori */
  --glow-rgb:34, 211, 238;
  --on-glow:#0b1220;        /* testo sopra la luce piena */
  --glow-text:#22d3ee;      /* la luce come testo sui fondi scuri */
  --glow-2:#a5f3fc;         /* luce chiara sui fondi scuri */
  --deep:#10304a;           /* fondo scuro tinto (scheda senza foto) */
  --on-ink:#ffffff;

  /* --- tipografia --------------------------------------------- */
  --display:'Sora','Manrope',system-ui,sans-serif;
  --text:'Onest',system-ui,-apple-system,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;

  /* --- misure ------------------------------------------------- */
  --nav-h:78px;
  --pad:clamp(22px,5.2vw,92px);
  --max:1400px;
  --r:22px;
  --shadow:0 20px 50px -24px rgba(var(--ink-rgb),.28);
  --ease:cubic-bezier(.4,0,.2,1);
  --ease-out:cubic-bezier(.22,1,.36,1);
  --ease-io:cubic-bezier(.42,0,.58,1);
}

*,*::before,*::after{box-sizing:border-box}
/* La rete contro lo scorrimento orizzontale sta su <html>: su <body>
   spegnerebbe la propagazione dell'overflow e con essa gli sticky. */
html{-webkit-text-size-adjust:100%;overflow-x:hidden;overflow-x:clip}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:var(--text);font-size:16.5px;line-height:1.62;font-weight:400;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
h1,h2,h3,h4{font-family:var(--display);font-weight:600;line-height:1.04;letter-spacing:-.035em;margin:0;overflow-wrap:break-word;text-wrap:balance}
p,figure,blockquote{margin:0}
em{font-style:normal;color:var(--accent)}
::selection{background:var(--glow);color:var(--on-glow)}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}

.wrap{max-width:var(--max);margin:0 auto;padding-inline:var(--pad)}
.eyebrow{
  font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--accent-ink);display:inline-flex;align-items:center;gap:10px;
}
.eyebrow::before{content:"";width:20px;height:2px;border-radius:2px;background:var(--glow);flex:0 0 auto}
.lede{font-size:clamp(16.5px,1.5vw,19.5px);color:var(--ink-2);max-width:60ch;line-height:1.6}
.muted{color:var(--muted)}
.btn-row{display:flex;flex-wrap:wrap;gap:14px}

/* ============================================================
   NAV — bianca, senza filetti: si stacca con un'ombra morbida
   ============================================================ */
.nav{
  position:fixed;inset:0 0 auto;z-index:90;height:var(--nav-h);display:flex;align-items:center;
  background:rgba(255,255,255,0);transition:background .45s var(--ease),box-shadow .45s var(--ease);
}
.nav.solid{background:rgba(255,255,255,.9);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 10px 30px -18px rgba(var(--ink-rgb),.25)}
.nav-in{display:flex;align-items:center;gap:26px;width:100%}
.nav-cta{flex:0 0 auto;white-space:nowrap}
.nav-brand{font-family:var(--display);font-weight:700;font-size:19px;letter-spacing:-.02em;display:inline-flex;align-items:center;gap:11px;margin-right:auto;min-width:0;line-height:1.15}
.brand-beam{width:26px;height:26px;border-radius:8px;flex:0 0 auto;background:linear-gradient(160deg,var(--glow),var(--accent));position:relative;overflow:hidden}
.brand-beam::after{content:"";position:absolute;left:0;right:0;top:56%;bottom:0;background:var(--ink)}
/* Logo del cliente al posto del nome (piatti di contrasto come nello stampo storico) */
.nav-logo{height:clamp(34px,4vw,44px);width:auto;max-width:210px;object-fit:contain;display:block}
.nav-logo--plate{background:rgba(18,23,30,.72);padding:6px 12px;border-radius:11px;box-sizing:content-box;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.nav-logo--plate-light{background:rgba(255,255,255,.94);padding:6px 12px;border-radius:11px;box-sizing:content-box}
.nav-main{position:relative}
.nav-links{display:flex;align-items:center;gap:28px;list-style:none;margin:0;padding:0;position:relative;z-index:1}
.nav-links li{display:flex}
.nav-links a{font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);transition:color .3s;position:relative;padding-block:6px;white-space:nowrap}
.nav-links a:hover{color:var(--ink)}
.nav-links a[aria-current="page"]{color:var(--ink)}
.nav-links a[aria-current="page"]::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;background:var(--glow)}
/* luce che scivola tra i link (la crea app.js dentro .nav-main) */
.nav-pill{position:absolute;top:50%;height:34px;transform:translateY(-50%);border-radius:999px;background:var(--bg-2);z-index:0;opacity:0;pointer-events:none;
  left:var(--px,0px);width:var(--pw,0px);transition:left .45s var(--ease-out),width .45s var(--ease-out),opacity .3s}
.nav-main:hover .nav-pill{opacity:1}
.nav-burger{display:none;width:44px;height:44px;border:0;border-radius:12px;background:var(--bg-2);cursor:pointer;position:relative;flex:0 0 auto}
.nav-burger i{position:absolute;left:12px;right:12px;height:1.5px;background:var(--ink);transition:transform .35s var(--ease)}
.nav-burger i:nth-child(1){top:17px}
.nav-burger i:nth-child(2){bottom:17px}
.nav-burger[aria-expanded="true"] i:nth-child(1){transform:translateY(4.25px) rotate(45deg)}
.nav-burger[aria-expanded="true"] i:nth-child(2){transform:translateY(-4.25px) rotate(-45deg)}
/* Menu del telefono: lo costruisce app.js copiando ul.nav-links */
.drawer{
  position:fixed;inset:0;z-index:89;background:var(--bg);display:flex;flex-direction:column;justify-content:center;
  padding:calc(var(--nav-h) + 10px) var(--pad) var(--pad);overflow-y:auto;
  clip-path:inset(0 0 100% 0);visibility:hidden;pointer-events:none;
  transition:clip-path .6s var(--ease-out),visibility 0s linear .6s;
}
.drawer.open{clip-path:inset(0 0 0 0);visibility:visible;pointer-events:auto;transition:clip-path .6s var(--ease-out),visibility 0s}
.drawer a{font-family:var(--display);font-size:clamp(30px,9vw,52px);font-weight:600;letter-spacing:-.04em;line-height:1.12;padding:10px 0}
.drawer a[aria-current="page"]{color:var(--accent)}
.drawer-foot{margin-top:30px;display:flex;flex-direction:column;font-family:var(--mono);font-size:12.5px;color:var(--muted)}
.drawer-foot a{display:inline-flex;align-items:center;min-height:44px;padding:0;font-family:var(--mono);font-size:15px;font-weight:400;letter-spacing:0;color:var(--ink-2);overflow-wrap:anywhere}
.drawer-foot span{padding-top:8px}

/* ============================================================
   FLOW BUTTON — le frecce attraversano il bottone e un cerchio
   si espande fino a riempirlo; il raggio passa da pill a squadrato.
   Nell'HTML c'è solo l'etichetta: frecce e cerchio li aggiunge
   app.js (anche sulla CTA del blog). La lista di classi più corta
   ("fbtn btn") è il bottone pieno principale.
   ============================================================ */
.fbtn{
  --fb-bg:var(--ink);--fb-text:#fff;--fb-border:var(--ink);--fb-fill:var(--glow);--fb-fill-text:var(--on-glow);
  position:relative;display:inline-flex;align-items:center;justify-content:center;gap:4px;
  overflow:hidden;border-radius:100px;border:1.5px solid var(--fb-border);background:var(--fb-bg);background-clip:padding-box;
  padding:14px 30px;font-family:var(--text);font-size:14px;font-weight:600;line-height:1.25;color:var(--fb-text);text-align:center;
  cursor:pointer;isolation:isolate;
  transition:border-color .6s cubic-bezier(.23,1,.32,1),color .6s cubic-bezier(.23,1,.32,1),border-radius .6s cubic-bezier(.23,1,.32,1);
}
.fbtn:hover{border-color:var(--fb-fill);color:var(--fb-fill-text);border-radius:12px}
.fbtn:active{transform:scale(.95)}
.fbtn-label{position:relative;z-index:1;transition:transform .8s ease-out}
.fbtn.has-flow .fbtn-label{transform:translateX(-12px)}
.fbtn.has-flow:hover .fbtn-label{transform:translateX(12px)}
.fbtn svg{position:absolute;top:50%;margin-top:-8px;width:16px;height:16px;z-index:9;stroke:currentColor;fill:none;transition:left .8s cubic-bezier(.34,1.56,.64,1),right .8s cubic-bezier(.34,1.56,.64,1)}
.fbtn .arr-in{left:-25%}
.fbtn:hover .arr-in{left:16px}
.fbtn .arr-out{right:16px}
.fbtn:hover .arr-out{right:-25%}
.fbtn-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:0;width:16px;aspect-ratio:1;border-radius:50%;opacity:0;background:var(--fb-fill);transition:width .8s cubic-bezier(.19,1,.22,1),opacity .8s cubic-bezier(.19,1,.22,1)}
.fbtn:hover .fbtn-circle{width:calc(100% + 140px);opacity:1}
.fbtn.ghost{--fb-bg:transparent;--fb-text:var(--ink);--fb-border:rgba(var(--ink-rgb),.22);--fb-fill:var(--ink);--fb-fill-text:#fff}
.fbtn.light{--fb-bg:transparent;--fb-text:#fff;--fb-border:rgba(255,255,255,.55);--fb-fill:#fff;--fb-fill-text:var(--ink)}
.fbtn.glow{--fb-bg:var(--glow);--fb-text:var(--on-glow);--fb-border:var(--glow);--fb-fill:var(--accent);--fb-fill-text:var(--on-accent)}
.fbtn.sm{padding:11px 22px;font-size:13px}
.fbtn.sm svg{width:14px;height:14px;margin-top:-7px}
.tlink{display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-ink);transition:gap .35s var(--ease)}
.tlink svg{width:14px;height:14px;flex:0 0 auto}
.tlink:hover{gap:15px}

/* ============================================================
   SCROLL EXPAND MEDIA — hero. La scheda parte al centro su fondo
   bianco e si espande fino a riempire lo schermo mentre si scorre;
   il titolo si divide e le due metà si allontanano. Titolo bianco
   in "difference": nero sul bianco, invertito sulla foto.
   --p (0→1) lo scrive app.js; senza JS vale 0 e la scena è ferma.
   ============================================================ */
.sxp{position:relative;background:var(--bg)}
.sxp-stage{
  --lift:0px;
  position:relative;z-index:2;height:100vh;height:100svh;min-height:560px;
  display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--bg);
}
.sxp-media{
  --bw:min(340px,82%);--bh:min(440px,56%);
  position:absolute;left:50%;top:calc(50% - var(--lift) * (1 - var(--p,0)));transform:translate(-50%,-50%);
  width:calc(var(--bw) + (100% - var(--bw)) * var(--p,0));
  height:calc(var(--bh) + (100% - var(--bh)) * var(--p,0));
  border-radius:calc(var(--r) * (1 - var(--p,0)));overflow:hidden;
  background:linear-gradient(160deg,var(--glow),var(--accent));
  box-shadow:0 40px 100px -30px rgba(var(--ink-rgb),.45);
}
.sxp-media img{width:100%;height:100%;object-fit:cover;transform:scale(calc(1.12 - var(--p,0) * .12))}
/* a riposo il titolo attraversa la foto: con il blend "difference" serve
   una foto scura, altrimenti le lettere diventano fango. Man mano che la
   scheda si espande il velo si alleggerisce. */
.sxp-media::after{content:"";position:absolute;inset:0;background:rgba(var(--ink-rgb),calc(.74 - var(--p,0) * .54))}
.sxp-title{position:relative;z-index:3;width:100%;text-align:center;color:#fff;mix-blend-mode:difference;padding:0 var(--pad);transform:translateY(calc(var(--lift) * -1 * (1 - var(--p,0))))}
.sxp-title .eyebrow{color:#fff;transform:translateX(calc(var(--p,0) * -46vw))}
.sxp-title .eyebrow::before{background:#fff}
.sxp-title h1{font-size:clamp(38px,min(7.6vw,11.4vh),110px);line-height:.98;letter-spacing:-.045em;margin-top:18px}
.sxp-title h1 .t-a,.sxp-title h1 .t-b{display:block;text-wrap:balance}
.sxp-title h1 .t-a{transform:translateX(calc(var(--p,0) * -46vw))}
.sxp-title h1 .t-b{transform:translateX(calc(var(--p,0) * 46vw))}
/* "Scorri": il testo viene da data-hint (non conta come testo della pagina) */
.sxp-hint{margin-top:26px;font-family:var(--mono);font-size:11px;letter-spacing:.24em;text-transform:uppercase;transform:translateX(calc(var(--p,0) * 46vw));display:flex;align-items:center;justify-content:center;gap:12px}
.sxp-hint::after{content:attr(data-hint);order:1}
.sxp-hint b{display:block;width:1px;height:34px;background:#fff;opacity:.7}
.sxp-hint b:last-child{order:2}
/* barra in basso: sottotitolo e bottone, sfumano mentre la foto cresce */
.sxp-bar{
  position:absolute;left:0;right:0;bottom:clamp(18px,4vh,40px);z-index:4;margin:0 auto;max-width:var(--max);
  display:flex;align-items:flex-end;justify-content:space-between;gap:20px 48px;padding:0 var(--pad);
  opacity:calc(1 - var(--p,0) * 3.2);transform:translateY(calc(var(--p,0) * 40px));
}
.sxp-bar p{max-width:46ch;color:var(--ink-2);font-size:15px;line-height:1.55}
.sxp-bar .fbtn{flex:0 0 auto}
.sxp.bar-off .sxp-bar{visibility:hidden;pointer-events:none}
/* Con JavaScript la sezione è più alta dello schermo e la scena resta agganciata
   (sticky) mentre la foto cresce: lo scroll della pagina non si blocca mai. */
html.js .sxp.is-live{height:calc(100vh + 100vh);height:calc(100svh + 100svh)}
html.js .sxp.is-live .sxp-stage{position:sticky;top:0}

.sxp-after{position:relative;background:var(--bg);padding-top:clamp(60px,8vw,110px)}
.split-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);gap:clamp(24px,5vw,80px)}
.split-intro h2{font-size:clamp(30px,4.6vw,62px)}
.split-intro p{color:var(--ink-2);margin:30px 0 38px;max-width:52ch}

/* ============================================================
   APERTURA DI SEZIONE — centrata; eyebrow e testo salgono a
   scaglioni quando la sezione entra in vista (.rv/.lit da app.js)
   ============================================================ */
.shead-c{position:relative;text-align:center;margin-bottom:clamp(40px,5.2vw,72px)}
.shead-c.rv > :not(h2){opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s var(--ease-out)}
.shead-c.rv.lit > :not(h2){opacity:1;transform:none}
.shead-c.lit > *:nth-child(2){transition-delay:.12s}
.shead-c.lit > *:nth-child(3){transition-delay:.22s}
.shead-c h2{font-size:clamp(32px,4.8vw,66px);max-width:16ch;margin:26px auto 0}
.shead-c p{color:var(--ink-2);max-width:52ch;margin:26px auto 0}
.shead-c .eyebrow{justify-content:center}

/* ============================================================
   SEZIONI GENERICHE
   ============================================================ */
.sec{padding:clamp(74px,10.2vw,150px) 0;position:relative}
.sec.tight{padding:clamp(54px,7.4vw,106px) 0}
.phead{padding:calc(var(--nav-h) + clamp(58px,9vw,124px)) 0 clamp(44px,6vw,76px)}
.phead h1{font-size:clamp(40px,7.4vw,104px);max-width:13ch;margin:28px 0 34px;letter-spacing:-.045em}
.phead .lede{max-width:56ch}
.phead-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,.65fr);gap:clamp(24px,5vw,70px);align-items:end}
.phead .idx{display:flex;flex-direction:column;gap:10px;font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);padding-bottom:8px}
.phead .idx span{display:block}
.phead .idx b{color:var(--ink);font-weight:500;overflow-wrap:anywhere}
.phead-bar{margin-top:42px;display:flex;gap:16px;flex-wrap:wrap}

/* ============================================================
   VANTAGGI — pannelli tinti, senza bordi: si sollevano in hover
   ============================================================ */
.panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:clamp(14px,1.6vw,22px)}
.panel{
  position:relative;background:var(--bg-2);border-radius:var(--r);padding:clamp(26px,3vw,40px);min-height:330px;
  display:flex;flex-direction:column;gap:20px;overflow:hidden;
  transition:background .5s var(--ease),transform .5s var(--ease-out),box-shadow .5s var(--ease);
}
.panel:hover{background:#fff;transform:translateY(-6px);box-shadow:var(--shadow)}
.panel > *{position:relative;z-index:1}
.panel .pnum{font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;color:var(--accent-ink)}
.panel h3{font-size:clamp(22px,2.2vw,29px);letter-spacing:-.03em}
.panel p{color:var(--ink-2);font-size:15px;flex:1}
.panel .tlink{align-self:flex-start}

/* ============================================================
   IMMAGINI — versione ridotta dell'hero: la cornice parte più
   piccola e centrata e si allarga fino a riempire il suo spazio
   mentre scorri (--gi da app.js). Senza JS la cornice è piena.
   ============================================================ */
.grow{position:relative;overflow:hidden;border-radius:var(--r);background:var(--surface)}
html.js .grow{clip-path:inset(var(--gi,18%) round var(--r));will-change:clip-path}
.grow img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ease-out)}
.grow:hover img{transform:scale(1.05)}
.grow::after{
  content:"";position:absolute;top:-20%;bottom:-20%;left:-60%;width:40%;pointer-events:none;z-index:2;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-18deg);
  transition:left .9s var(--ease-out);
}
.grow:hover::after{left:130%}

/* ============================================================
   CONTAINER TEXT SCROLL — cornice scura tipo schermo: parte
   inclinata all'indietro e si raddrizza salendo (solo con JS).
   Il testo sta nel flusso: la scheda cresce se il testo è lungo.
   ============================================================ */
.cts{perspective:1000px;padding-block:clamp(30px,6vw,80px)}
.cts-card{
  position:relative;display:grid;place-items:center;width:100%;max-width:1060px;margin:0 auto;aspect-ratio:16/10;
  background:var(--ink);border-radius:30px;padding:6px;
  box-shadow:0 30px 60px -20px rgba(var(--ink-rgb),.5);transform-origin:50% 100%;
}
html.js .cts-card{transform:translateY(var(--cy,80px)) rotateX(var(--crx,20deg)) scale(var(--cs,.9));will-change:transform}
.cts-card > img{position:absolute;inset:6px;width:calc(100% - 12px);height:calc(100% - 12px);max-width:none;object-fit:cover;object-position:center top;border-radius:24px}
.cts-veil{position:absolute;inset:6px;border-radius:24px;background:radial-gradient(120% 95% at 50% 50%,rgba(var(--ink-rgb),.7) 0%,rgba(var(--ink-rgb),.8) 55%,rgba(var(--ink-rgb),.94) 100%)}
.cts-inner{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:clamp(44px,6vw,80px) clamp(20px,5vw,60px);gap:24px;color:#fff}
html.js .cts-inner{transform:translateY(var(--ty,80px)) scale(var(--ts,.85))}
.cts-num{font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;color:var(--glow-text)}
.cts-inner .eyebrow{color:var(--glow-2)}
.cts-inner h2{font-size:clamp(28px,4.4vw,62px);letter-spacing:-.04em;max-width:16ch}
.cts-inner h2 em{color:var(--glow-2)}
.cts-inner p{color:rgba(255,255,255,.78);max-width:46ch;font-size:clamp(15px,1.3vw,17px)}

/* ============================================================
   FEATURE — testo e immagine affiancati
   ============================================================ */
.feat{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(20px,3vw,48px);align-items:center}
.feat-media{grid-column:1 / span 6;aspect-ratio:4/3}
.feat-body{grid-column:8 / span 5}
.feat.rev .feat-media{grid-column:7 / span 6;order:2}
.feat.rev .feat-body{grid-column:1 / span 5}
.feat-body .fnum{font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;color:var(--accent-ink);display:block;margin-bottom:20px}
.feat-body h2{font-size:clamp(28px,3.6vw,50px);margin:22px 0 28px}
.feat-body p{color:var(--ink-2);margin-bottom:36px;max-width:44ch}

/* ============================================================
   MOSAICO — libreria foto su 6 colonne. Le tessere vanno a blocchi
   di tre (una grande e due piccole, poi specchiato): ogni blocco
   riempie due righe, e le ultime una o due foto prendono la riga
   intera o metà a testa. Nessun buco, qualunque sia il numero.
   Sempre visibili (niente comparsa animata). Click → lightbox.
   ============================================================ */
.mosaic{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-auto-rows:clamp(150px,17vw,250px);grid-auto-flow:dense;gap:clamp(12px,1.6vw,22px)}
.mcell{position:relative;overflow:hidden;border-radius:var(--r);background:var(--surface);cursor:zoom-in;grid-column:span 2;grid-row:span 1}
.mcell.big{grid-column:span 4;grid-row:span 2}
.mcell:last-child:nth-child(3n+1){grid-column:1 / -1;grid-row:span 1}
.mcell:nth-last-child(2):nth-child(3n+1),.mcell:last-child:nth-child(3n+2){grid-column:span 3;grid-row:span 1}
.mcell img{
  width:100%;height:100%;object-fit:cover;
  transform:translateY(var(--py,0px)) scale(1.14);
  transition:transform .9s var(--ease-out);
}
.mcell:hover img{transform:translateY(var(--py,0px)) scale(1.22)}
.mcell::after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(to top,rgba(var(--ink-rgb),.55),transparent 45%);opacity:0;transition:opacity .4s;pointer-events:none}
.mcell:hover::after,.mcell:focus-visible::after{opacity:1}
.mcell figcaption{position:absolute;left:14px;bottom:14px;max-width:calc(100% - 28px);z-index:3;display:inline-flex;align-items:center;gap:10px;background:#fff;color:var(--ink);border-radius:999px;padding:9px 14px 9px 10px;font-size:12.5px;line-height:1.3;transform:translateY(10px);opacity:0;transition:opacity .35s,transform .35s var(--ease-out)}
.mcell:hover figcaption,.mcell:focus-visible figcaption{opacity:1;transform:none}
.mcell figcaption b{font-family:var(--mono);font-weight:500;font-size:11px;background:var(--ink);color:#fff;border-radius:999px;padding:4px 8px;flex:0 0 auto}
@media (hover:none){.mcell figcaption{opacity:1;transform:none}}

/* Lightbox: la crea app.js (un <img> senza src nell'HTML sarebbe un errore) */
.lb{position:fixed;inset:0;z-index:200;background:rgba(var(--ink-rgb),.96);display:none;align-items:center;justify-content:center;padding:26px}
.lb.on{display:flex}
.lb img{max-width:92vw;max-height:82vh;object-fit:contain;border-radius:12px}
.lb-cap{position:absolute;left:0;right:0;bottom:26px;padding:0 80px;text-align:center;font-family:var(--mono);font-size:12px;letter-spacing:.1em;color:rgba(255,255,255,.65)}
.lb-x,.lb-prev,.lb-next{position:absolute;width:50px;height:50px;border-radius:14px;border:0;background:rgba(255,255,255,.12);color:#fff;cursor:pointer;display:grid;place-items:center;transition:background .3s,color .3s}
.lb-x:hover,.lb-prev:hover,.lb-next:hover{background:#fff;color:var(--ink)}
.lb-x{top:24px;right:24px}
.lb-prev{left:24px;top:50%;transform:translateY(-50%)}
.lb-next{right:24px;top:50%;transform:translateY(-50%)}
.lb-x svg,.lb-prev svg,.lb-next svg{width:18px;height:18px}
.lb-prev svg{transform:rotate(180deg)}

/* ============================================================
   CHI SIAMO
   ============================================================ */
.split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(26px,5vw,84px);align-items:center}
.split h2{font-size:clamp(30px,4.4vw,60px);margin-bottom:30px}
.split .story{font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent-ink);display:block;margin-bottom:20px}
.split p{color:var(--ink-2);margin-bottom:36px}
/* lastra: foto in dissolvenza a giro. Le foto non attive non ricevono il
   puntatore: l'editor deve trovare quella che si vede. */
.plate{position:relative;border-radius:var(--r);overflow:hidden;background:var(--surface)}
.plate img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;pointer-events:none;transition:opacity 1.4s ease}
.plate img.on{opacity:1;pointer-events:auto;z-index:1}
html:not(.js) .plate img:first-of-type{opacity:1;pointer-events:auto}
.plate-tag{position:absolute;left:16px;bottom:16px;z-index:3;max-width:calc(100% - 32px);background:#fff;border-radius:999px;padding:9px 16px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}

/* ============================================================
   RIPPLE — blocco CTA: un cerchio scuro parte piccolo al centro e
   cresce fino a riempire la sezione mentre scorri; lo strato chiaro
   (copia creata da app.js) è ritagliato dal cerchio. Gli strati
   stanno nella stessa cella della griglia: il blocco cresce col testo.
   Il bottone resta leggibile in "difference". Raggio in --rc.
   ============================================================ */
.ripple{position:relative;display:grid;border-radius:var(--r);overflow:hidden;background:var(--bg);isolation:isolate}
.ripple-ball{position:absolute;left:50%;top:50%;width:var(--rc,0px);height:var(--rc,0px);border-radius:50%;background:var(--ink);transform:translate(-50%,-50%)}
.ripple-layer{grid-area:1 / 1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:16px;min-height:clamp(420px,62vh,640px);padding:clamp(28px,4vw,56px) clamp(20px,4vw,60px) 120px;pointer-events:none}
.ripple-layer > *{pointer-events:auto}
.ripple-layer.dark{color:var(--ink);z-index:2}
.ripple-layer.light{color:#fff;z-index:3;clip-path:circle(calc(var(--rc,0px) / 2) at 50% 50%)}
.ripple-layer.light > *{pointer-events:none}
.ripple-layer.light .eyebrow{color:var(--glow-2)}
.ripple-layer.light .eyebrow::before{background:var(--glow-2)}
.ripple-layer h2{font-size:clamp(30px,4.6vw,64px);max-width:14ch;letter-spacing:-.04em}
.ripple-layer.light h2 em{color:var(--glow-2)}
.ripple-layer p{max-width:46ch;color:inherit;opacity:.82}
/* z-index:auto: con uno z-index il contenitore isola il blend e il bottone
   bianco sparisce sul bianco */
.ripple-actions{position:absolute;left:0;right:0;bottom:clamp(28px,5vh,48px);display:flex;justify-content:center;padding:0 20px}
.ripple-actions .fbtn{--fb-border:#fff;--fb-text:#fff;--fb-fill:#fff;--fb-fill-text:#000;mix-blend-mode:difference}

.pillars{margin-top:clamp(38px,5vw,66px);border-top:1px solid rgba(var(--ink-rgb),.12)}
.pillars:first-child{margin-top:0}
.pillar{
  display:grid;grid-template-columns:3.2rem minmax(0,1fr) minmax(0,1.25fr);gap:clamp(18px,3.6vw,60px);align-items:start;
  padding:clamp(30px,3.6vw,50px) 0;border-bottom:1px solid rgba(var(--ink-rgb),.12);
}
.pillar .num{font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.14em;color:var(--muted);line-height:2.2;transition:color .35s var(--ease-out)}
.pillar:hover .num{color:var(--accent-ink)}
.pillar h3{font-size:clamp(22px,2.4vw,34px);line-height:1.12}
.pillar p{font-size:16px;line-height:1.65;color:var(--ink-2);max-width:56ch}

/* ============================================================
   SERVIZI — fisarmonica /01–/NN
   ============================================================ */
.svc-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(26px,5vw,80px);align-items:center}
.svc-hero .plate{aspect-ratio:4/5}
.svc-hero h2{font-size:clamp(30px,4.4vw,58px);margin:24px 0 30px}
.svc-hero p{color:var(--ink-2);margin-bottom:36px}
.acc{display:flex;flex-direction:column;gap:12px}
.acc-item{background:var(--bg-2);border-radius:var(--r);transition:background .4s var(--ease),box-shadow .4s var(--ease)}
.acc-item.open{background:#fff;box-shadow:var(--shadow)}
.acc-h{margin:0;font:inherit;letter-spacing:normal}
.acc-head{width:100%;display:grid;grid-template-columns:80px minmax(0,1fr) 44px;gap:clamp(16px,3vw,40px);align-items:center;background:transparent;border:0;padding:clamp(22px,2.6vw,32px) clamp(20px,2.6vw,36px);cursor:pointer;text-align:left;color:inherit;border-radius:var(--r)}
.acc-num{font-family:var(--mono);font-size:12px;letter-spacing:.16em;color:var(--accent-ink)}
.acc-title{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.8vw,38px);line-height:1.08;letter-spacing:-.035em;overflow-wrap:break-word}
.acc-sign{width:42px;height:42px;border-radius:50%;background:#fff;position:relative;justify-self:end;transition:background .4s var(--ease),transform .5s var(--ease-out)}
.acc-item.open .acc-sign{background:var(--ink);transform:rotate(90deg)}
.acc-sign::before,.acc-sign::after{content:"";position:absolute;left:50%;top:50%;background:var(--ink);transition:transform .45s var(--ease-out),background .4s}
.acc-sign::before{width:13px;height:2px;transform:translate(-50%,-50%)}
.acc-sign::after{width:2px;height:13px;transform:translate(-50%,-50%)}
.acc-item.open .acc-sign::before,.acc-item.open .acc-sign::after{background:#fff}
.acc-item.open .acc-sign::before{transform:translate(-50%,-50%) scaleX(0)}
.acc-panel{display:grid;grid-template-rows:1fr;transition:grid-template-rows .55s var(--ease-out)}
html.js .acc-item:not(.open) .acc-panel{grid-template-rows:0fr}
.acc-panel > div{overflow:hidden;min-height:0}
.acc-body{display:grid;grid-template-columns:80px minmax(0,1fr) minmax(0,.9fr);grid-template-rows:auto auto 1fr;gap:0 clamp(16px,3vw,40px);padding:0 clamp(20px,2.6vw,36px) clamp(26px,3vw,38px);align-items:start}
.acc-body .eyebrow{grid-column:2}
.acc-body p{grid-column:2;color:var(--ink-2);font-size:15.5px;margin-top:20px}
.acc-body .acc-media{grid-column:3;grid-row:1 / span 3;border-radius:16px;overflow:hidden;aspect-ratio:4/3;background:var(--surface)}
.acc-body .acc-media img{width:100%;height:100%;object-fit:cover}
.acc-body .fbtn{grid-column:2;margin-top:30px;justify-self:start}
html.js .acc-media{clip-path:circle(0% at 50% 50%);transition:clip-path .9s var(--ease-out) .15s}
html.js .acc-item.open .acc-media{clip-path:circle(75% at 50% 50%)}

/* ============================================================
   CONTATTI
   ============================================================ */
.cgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
.cbox{border-radius:var(--r);background:var(--bg-2);padding:clamp(24px,2.6vw,34px);min-height:0;display:flex;flex-direction:column;justify-content:center;gap:18px;transition:background .45s var(--ease),transform .45s var(--ease-out),box-shadow .45s}
.cbox:hover{background:#fff;transform:translateY(-4px);box-shadow:var(--shadow)}
.cbox a,.cbox p{font-family:var(--display);font-weight:600;font-size:clamp(18px,1.6vw,23px);letter-spacing:-.02em;line-height:1.2;color:var(--ink);overflow-wrap:anywhere}
.cbox a:hover{color:var(--accent)}
.cbox .hours{font-family:var(--text);font-weight:400;font-size:14.5px;line-height:1.85;letter-spacing:0;color:var(--ink-2)}
.cbox .hours span{color:var(--muted)}
.form-wrap{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:clamp(26px,5vw,80px);align-items:start}
.form-title{font-size:clamp(30px,4.2vw,56px);margin-top:18px}
.form-intro{margin-top:18px;max-width:38ch}
form.contact{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.field{display:flex;flex-direction:column;gap:8px;min-width:0}
.field.full{grid-column:1/-1}
.field label{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.field input,.field textarea{width:100%;background:var(--bg-2);border:0;border-radius:14px;color:var(--ink);font-family:var(--text);font-size:16px;padding:15px 18px;transition:box-shadow .3s,background .3s}
.field textarea{resize:vertical;min-height:130px}
.field input:focus,.field textarea:focus{outline:0;background:#fff;box-shadow:0 0 0 3px rgba(var(--glow-rgb),.45)}
form.contact .fbtn{grid-column:1/-1;justify-self:start;margin-top:6px}
.map{border-radius:var(--r);overflow:hidden;background:var(--surface)}
html.js .map{clip-path:circle(var(--mc,24%) at 50% 50%);will-change:clip-path}
.map iframe{display:block;width:100%;height:clamp(320px,44vw,520px);border:0;filter:grayscale(1) contrast(1.02)}
.map-link{margin-top:14px}

/* ============================================================
   PRIVACY
   ============================================================ */
.legal{max-width:76ch}
.legal h2{font-size:clamp(22px,2.4vw,32px);margin:clamp(40px,4.6vw,64px) 0 18px}
.legal h3{font-size:clamp(18px,1.8vw,23px);margin:28px 0 12px}
.legal p{color:var(--ink-2);margin-bottom:15px}
.legal ul{margin:0 0 15px;padding:0;list-style:none}
.legal ul li{color:var(--ink-2);padding:9px 0 9px 26px;position:relative}
.legal ul li::before{content:"";position:absolute;left:0;top:21px;width:10px;height:2px;border-radius:2px;background:var(--glow)}
.legal ol{margin:0 0 15px;padding-left:22px;color:var(--ink-2)}
.legal ol li{padding:4px 0}
.legal strong{color:var(--ink);font-weight:600}
.legal em{color:var(--accent-ink)}
.legal a{color:var(--accent-ink);text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere}

/* ============================================================
   FOOTER — blocco scuro con la luce del tema in cima
   ============================================================ */
.footer{position:relative;background:var(--ink);color:var(--foot-text);overflow:hidden;border-radius:var(--r) var(--r) 0 0;padding:clamp(64px,8vw,110px) 0 28px;margin-top:clamp(60px,9vw,140px)}
.footer-glow{position:absolute;left:50%;top:-55%;width:80vw;height:80vw;max-width:1200px;max-height:1200px;transform:translateX(-50%);background:radial-gradient(closest-side,rgba(var(--glow-rgb),.32),transparent 72%);pointer-events:none}
.footer-in{position:relative;z-index:1}
.footer-hero{display:grid;gap:32px;padding-bottom:clamp(40px,5vw,64px);border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:clamp(40px,5vw,64px)}
@media (min-width:900px){.footer-hero{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);align-items:end}}
.footer-brand{font-family:var(--display);font-weight:700;color:#fff;font-size:clamp(34px,4.8vw,66px);letter-spacing:-.04em;line-height:1.02;display:inline-flex;align-items:center;gap:16px;overflow-wrap:anywhere}
.footer-brand .brand-beam{width:.72em;height:.72em;border-radius:.22em}
.footer-logo{height:clamp(44px,5vw,64px);width:auto;max-width:260px;object-fit:contain;display:block}
.footer-logo--plate{background:rgba(255,255,255,.94);padding:8px 13px;border-radius:12px;box-sizing:content-box;box-shadow:0 2px 12px rgba(0,0,0,.14)}
.footer-tag{color:var(--foot-muted);font-size:15px;max-width:36ch;margin-top:16px}
.footer-cta{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;padding:22px 26px;border:1px solid rgba(255,255,255,.14);border-radius:18px;background:rgba(255,255,255,.045);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.footer-cta-t{font-size:13.5px;color:var(--foot-muted);margin:0;max-width:30ch;line-height:1.5}
.footer-cta-t::before{content:attr(data-hint);display:block}
.footer-cta-t a{display:block;color:#fff;font-weight:600;font-size:15px;margin-top:2px}
.footer-cta-t a:hover{color:var(--glow-text)}
.footer-top{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:clamp(24px,3vw,44px)}
.fcol{min-width:0}
.fcol h4{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--glow-text);margin:0 0 16px;font-weight:500}
.fcol a,.fcol p{display:block;font-size:14.5px;color:var(--foot-text);margin-bottom:9px;transition:color .3s;overflow-wrap:anywhere}
.fcol a:hover{color:var(--glow-text)}
.fcol p.hrs{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:7px;font-size:13.5px;color:var(--foot-muted)}
.fcol p.hrs span{flex:0 0 auto}
.fcol p.hrs b{font-weight:500;color:#fff;text-align:right}
.footer-bot{display:flex;justify-content:space-between;align-items:center;gap:8px 16px;flex-wrap:wrap;margin-top:clamp(40px,5vw,64px);padding-top:22px;border-top:1px solid rgba(255,255,255,.12);font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--foot-dim)}
.footer-bot a:hover{color:var(--glow-text)}

/* ============================================================
   MOTION — ogni sezione ha il suo movimento (tutto creato da app.js:
   senza JS nessuna di queste classi esiste e il testo è fermo)
   ------------------------------------------------------------
   .split-words titoli: le parole salgono da una maschera, a scaglioni
   .reveal-text paragrafi: le parole si accendono una a una scorrendo
   .stagger     gruppi di card: entrano uno dopo l'altro
   .spot        card: faro di luce che segue il puntatore
   ============================================================ */
.w{display:inline-block;overflow:hidden;vertical-align:top;padding:0 .04em .14em;margin:0 -.04em -.14em;max-width:100%}
.w i{display:inline-block;font-style:inherit;transform:translateY(112%);transition:transform .7s var(--ease-out);transition-delay:calc(var(--i,0) * 30ms)}
.split-words.lit .w i{transform:none}

.reveal-text .rw{color:rgba(var(--ink-rgb),.22);transition:color .2s ease}
.reveal-text .rw.on{color:var(--ink)}
.reveal-text em .rw{color:rgba(var(--accent-rgb),.2)}
.reveal-text em .rw.on{color:var(--accent-ink)}

.stagger{perspective:1200px}
.stagger > *{opacity:0;transform:translate(var(--dx,0px),60px) rotate(var(--r0,0deg)) scale(.92);transform-origin:50% 100%;transition:opacity .6s ease,transform .75s var(--ease-out),background .5s var(--ease),box-shadow .5s var(--ease);transition-delay:calc(var(--i,0) * 60ms),calc(var(--i,0) * 60ms),0s,0s}
.stagger.lit > *{opacity:1;transform:none}
.stagger.done > *{transition-delay:0s}
.stagger.lit > .panel:hover{transform:translateY(-6px)}
.stagger.lit > .cbox:hover{transform:translateY(-4px)}

.spot{position:relative}
.spot::before{content:"";position:absolute;inset:0;z-index:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .4s;background:radial-gradient(280px circle at var(--mx,50%) var(--my,50%),rgba(var(--glow-rgb),.26),transparent 62%)}
.spot:hover::before{opacity:1}
.pillar > *,.cbox > *{position:relative;z-index:1}

html.js .plate img{transform:scale(var(--zs,1.25))}
.feat-media.grow img{transform:translateY(var(--py,0px)) scale(1.12)}
.feat-media.grow:hover img{transform:translateY(var(--py,0px)) scale(1.18)}

/* Inversion Circle — chiusura della galleria: il cerchio scuro sale, si
   espande e inverte il testo (strato chiaro = copia creata da app.js).
   Con JS la sezione è alta e la scena agganciata; senza, è un blocco fermo. */
.inv-track{position:relative;margin-top:clamp(40px,6vw,90px)}
.inv-pin{position:relative;display:grid;min-height:clamp(420px,70vh,640px);overflow:hidden;background:var(--bg)}
html.js .inv-track.is-live{height:240vh}
html.js .inv-track.is-live .inv-pin{position:sticky;top:0;height:100vh;height:100svh;min-height:0}
.inv-ball{position:absolute;top:50%;left:50%;width:380px;height:380px;border-radius:50%;background:var(--ink);transform:translate(-50%,calc(-50% + 100vh))}
.inv-layer{grid-area:1 / 1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--nav-h) var(--pad) 140px;gap:18px;pointer-events:none}
.inv-layer > *{pointer-events:auto}
.inv-dark{color:var(--ink);z-index:2}
.inv-light{color:#fff;z-index:3;clip-path:circle(0 at 50% 50%)}
.inv-light > *{pointer-events:none}
.inv-light .eyebrow{color:var(--glow-2)}
.inv-light .eyebrow::before{background:var(--glow-2)}
.inv-layer h2{font-size:clamp(38px,6.6vw,96px);max-width:14ch;letter-spacing:-.045em}
.inv-light h2 em{color:var(--glow-2)}
.inv-layer p{max-width:46ch;font-size:clamp(16px,1.4vw,19px);color:inherit;opacity:.8}
.inv-actions{position:absolute;left:0;right:0;bottom:clamp(40px,9vh,90px);display:flex;justify-content:center;gap:14px;padding:0 var(--pad)}
.inv-actions .fbtn{--fb-border:#fff;--fb-text:#fff;--fb-fill:#fff;--fb-fill-text:#000;mix-blend-mode:difference}

/* ============================================================
   HERO GALLERY SCROLL — il testo sta al centro e si ritira mentre
   le foto, partite piccole e spostate, crescono fino a comporre la
   griglia bento. Con JS (.is-live) la sezione è alta e la griglia
   agganciata; senza, la griglia è già composta sotto il testo.
   Disegni per 3, 4 e 5 foto (nth-last-child: regge le foto mancanti).
   ============================================================ */
.bento-scroll{position:relative}
.bento-pin{position:relative;height:100vh;height:100svh;min-height:560px;overflow:hidden;padding:calc(var(--nav-h) + 12px) 16px 16px}
html.js .bento-scroll.is-live{height:280vh}
html.js .bento-scroll.is-live .bento-pin{position:sticky;top:0}
.bento{position:relative;display:grid;gap:14px;height:100%;grid-template-columns:repeat(8,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr))}
.bento-cell{position:relative;overflow:hidden;border-radius:var(--r);background:var(--surface);box-shadow:0 20px 50px -24px rgba(var(--ink-rgb),.35);grid-column:span 4}
html.js .bento-scroll.is-live .bento-cell{transform:translateX(var(--bt,-35%)) scale(var(--bs,.5));will-change:transform}
.bento-cell img{width:100%;height:100%;object-fit:cover}
/* 5 foto: 8 colonne, righe 1 / .5 / .5 / 1 */
.bento:has(> :nth-child(5)){grid-template-rows:1fr .5fr .5fr 1fr}
.bento > :nth-child(1):nth-last-child(5){grid-column:span 6;grid-row:span 3;transform-origin:top right}
.bento > :nth-child(2):nth-last-child(4){grid-column:span 2;grid-row:span 2}
.bento > :nth-child(3):nth-last-child(3){grid-column:span 2;grid-row:span 2;transform-origin:bottom right}
.bento > :nth-child(4):nth-last-child(2){grid-column:span 3;transform-origin:top right}
.bento > :nth-child(5):last-child{grid-column:span 3}
/* 4 foto: 1 | 2 2 / 3 3 | 4 */
.bento > :nth-child(1):nth-last-child(4){grid-column:span 3;transform-origin:top right}
.bento > :nth-child(2):nth-last-child(3){grid-column:span 5}
.bento > :nth-child(3):nth-last-child(2){grid-column:span 5;transform-origin:bottom right}
.bento > :nth-child(4):last-child{grid-column:span 3;transform-origin:top right}
/* 3 foto: una grande a sinistra, due a destra */
.bento > :nth-child(1):nth-last-child(3){grid-column:span 5;grid-row:span 2;transform-origin:top right}
.bento > :nth-child(2):nth-last-child(2){grid-column:span 3}
.bento > :nth-child(3):last-child{grid-column:span 3;transform-origin:bottom right}
/* 1-2 foto */
.bento > :only-child{grid-column:1 / -1;grid-row:1 / -1}
.bento > :nth-child(1):nth-last-child(2),.bento > :nth-child(2):last-child{grid-row:span 2}
.bento-text{
  position:absolute;left:50%;top:50%;z-index:2;width:min(760px,90%);text-align:center;
  transform:translate(-50%,-50%);opacity:var(--to,1);transition:opacity .25s linear;
  display:flex;flex-direction:column;align-items:center;gap:18px;
}
.bento-text h1{font-size:clamp(40px,6.8vw,96px);letter-spacing:-.045em;line-height:1}
.bento-text.sm h2{font-size:clamp(36px,5.8vw,80px);letter-spacing:-.045em;line-height:1}
.bento-text .lede{max-width:52ch}
.bento-text.sm .lede{font-size:clamp(16px,1.45vw,19px);max-width:48ch}
/* il testo sta sopra le foto: velo bianco morbido finché è leggibile */
.bento-veil{position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(60% 55% at 50% 50%,rgba(255,255,255,.93) 0%,rgba(255,255,255,.78) 45%,rgba(255,255,255,0) 72%);opacity:var(--to,1)}
.bento-cta{padding:clamp(28px,4vw,56px) 0 clamp(20px,3vw,40px);text-align:center}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media(max-width:1100px){
  .mosaic{grid-auto-rows:clamp(140px,22vw,220px)}
  .acc-body{grid-template-columns:70px minmax(0,1fr);grid-template-rows:none}
  .acc-body .acc-media{grid-column:2;grid-row:auto;max-width:420px;margin-top:24px}
}
@media(max-width:1180px){
  .nav-in{gap:20px}
  .nav-links{gap:20px}
}
@media(max-width:1024px) and (min-width:881px){
  .nav-cta{display:none}
}
@media(max-width:880px){
  :root{--nav-h:66px}
  .nav-main,.nav-in > .nav-cta{display:none}
  .nav-burger{display:block}
  .nav-brand{padding-block:9px;font-size:clamp(15px,4.3vw,18px);gap:10px}
  .split,.split-intro,.svc-hero,.form-wrap,.phead-grid{grid-template-columns:minmax(0,1fr)}
  .feat{grid-template-columns:minmax(0,1fr)}
  .feat-media,.feat-body{grid-column:1/-1!important;order:0!important}
  .panels{grid-template-columns:minmax(0,1fr)}
  .panel{min-height:0}
  /* Pilastri del «Chi siamo»: con tre colonne il testo finiva in 140px (audit
     30/09/2026). Numero e titolo in riga, il testo sotto al titolo. */
  .pillar{grid-template-columns:3.2rem minmax(0,1fr);row-gap:14px}
  .pillar p{grid-column:2}
  form.contact{grid-template-columns:minmax(0,1fr)}
  .footer-top{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cts-card{aspect-ratio:3/4;border-radius:22px}
  .cts-card > img,.cts-veil{border-radius:18px}
  .mosaic{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:clamp(150px,32vw,230px)}
  .mcell,.mcell.big{grid-column:span 1;grid-row:span 1}
  .mcell.big,.mcell:last-child:nth-child(3n+1){grid-column:1 / -1}
  .mcell:nth-last-child(2):nth-child(3n+1),.mcell:last-child:nth-child(3n+2){grid-column:span 1}

  /* HERO sul telefono: il titolo bianco sbordava dalla lastra e finiva su
     fondo chiaro, illeggibile in "difference". Qui niente blend: testo dentro
     la foto, velo più fitto, scheda un po' più in alto per lasciare spazio
     alla barra in basso. */
  .sxp-stage{--lift:5vh}
  .sxp-media{--bh:min(420px,50%)}
  .sxp-title{mix-blend-mode:normal}
  .sxp-media::after{background:linear-gradient(180deg,rgba(var(--ink-rgb),calc(.46 - var(--p,0) * .16)) 0%,rgba(var(--ink-rgb),calc(.74 - var(--p,0) * .3)) 100%)}
  .sxp-title h1{font-size:clamp(24px,6.4vw,29px);line-height:1.08;max-width:min(280px,72vw);margin:14px auto 0;text-shadow:0 2px 20px rgba(var(--ink-rgb),.5)}
  .sxp-title .eyebrow{max-width:min(280px,72vw);text-shadow:0 2px 14px rgba(var(--ink-rgb),.6);font-size:10.5px;letter-spacing:.16em}
  .sxp-hint{margin-top:20px;text-shadow:0 2px 14px rgba(var(--ink-rgb),.6)}
  .sxp-hint b{height:26px}
  .sxp-bar{flex-direction:column;align-items:flex-start;gap:14px;bottom:clamp(16px,3vh,28px)}
  .sxp-bar p{font-size:14.5px;line-height:1.5}
  html.js .sxp.is-live{height:calc(100vh + 70vh);height:calc(100svh + 70svh)}

  /* BENTO sul telefono: meno corsa, griglia più semplice */
  html.js .bento-scroll.is-live{height:220vh}
  .bento-pin{padding:calc(var(--nav-h) + 10px) 10px 10px}
  .bento{gap:10px}
  .bento > :nth-child(1):nth-last-child(5){grid-column:span 8;grid-row:span 1}
  .bento > :nth-child(2):nth-last-child(4),.bento > :nth-child(3):nth-last-child(3){display:none}
  .bento > :nth-child(4):nth-last-child(2),.bento > :nth-child(5):last-child{grid-column:span 4}
  .bento:has(> :nth-child(5)){grid-template-rows:1.6fr 1fr}
  .bento-text h1{font-size:clamp(32px,9vw,48px)}
  .bento-text.sm h2{font-size:clamp(30px,8.5vw,46px)}
  .bento-veil{background:radial-gradient(95% 62% at 50% 50%,rgba(255,255,255,.95) 0%,rgba(255,255,255,.84) 55%,rgba(255,255,255,0) 88%)}

  /* Lo "stagger" sposta le card anche in orizzontale finché non entrano in
     vista: sul telefono l'ingresso resta, ma solo verticale. */
  .stagger > *{--dx:0px!important;--r0:0deg!important;transform:translateY(52px) scale(.96)}
  .stagger.lit > *{transform:none}

  /* Immagini: mai fuori dalla cornice (sovrascala e parallasse spente) */
  .plate,.mcell,.grow,.feat-media,.sxp-media,.acc-media,.map,.bento-cell,.panel,.ripple{overflow:clip}
  html.js .plate img{transform:none}
  .mcell img,.mcell:hover img{transform:scale(1.05)}
  .feat-media.grow img,.feat-media.grow:hover img{transform:none}

  /* Bottoni e link: area di tocco ≥44px */
  .fbtn{min-height:46px;padding:13px 26px}
  .fbtn.sm{min-height:44px;padding:12px 20px}
  /* la freccia "in ingresso" vive fuori dal bottone e senza hover non
     entra mai: su touch è solo un rettangolo a coordinate negative */
  .fbtn .arr-in{display:none}
  .tlink{padding-block:14px;min-height:45px}
  .cbox a{display:inline-flex;align-items:center;min-height:44px}
  .fcol a{padding-block:12px;margin-bottom:0}
  .fcol p{padding-block:5px;margin-bottom:0}
  .footer-bot a{display:inline-flex;align-items:center;min-height:44px}
  .legal a{display:inline-block;padding-block:11px}

  /* Micro-testi: mai sotto 12px */
  .eyebrow,.field label,.fcol h4,.footer-bot,.plate-tag,.cts-num,.pnum,
  .fnum,.acc-num,.phead .idx,.story,.lb-cap,.sxp-hint,.mcell figcaption b{font-size:12px}
  .sxp-title .eyebrow{font-size:11px}

  /* Fisarmonica: tutto in colonna unica */
  .acc-head{grid-template-columns:minmax(0,1fr) 44px;column-gap:14px;row-gap:6px;padding:20px}
  .acc-head .acc-num{grid-column:1;grid-row:1}
  .acc-head .acc-title{grid-column:1;grid-row:2;font-size:clamp(20px,5.4vw,26px)}
  .acc-sign{grid-column:2;grid-row:1 / span 2;align-self:center;width:44px;height:44px}
  .acc-body{grid-template-columns:minmax(0,1fr);gap:0;padding:0 20px 24px}
  .acc-body .eyebrow,.acc-body p,.acc-body .fbtn{grid-column:1}
  .acc-body .acc-media{grid-column:1;grid-row:auto;max-width:none;margin-top:20px}
  .acc-body .fbtn{margin-top:20px}

  form.contact{gap:14px}
  form.contact .fbtn{width:100%;justify-self:stretch;margin-top:8px}
  .field textarea{min-height:150px}
  .footer-top{gap:26px}
  .footer-tag{max-width:none}
  .ripple-layer{min-height:clamp(420px,70vh,560px)}
}
@media(max-width:540px){
  .footer-top{grid-template-columns:minmax(0,1fr)}
  .lb-prev{left:10px}.lb-next{right:10px}
  .lb-cap{padding:0 20px;bottom:18px}
  .footer-cta{padding:20px}
}
@media(max-width:400px){
  .acc-head{padding:18px 16px}
  .acc-body{padding:0 16px 22px}
  .mosaic{gap:10px}
}
@media(max-height:620px) and (min-width:881px){
  .sxp-hint{display:none}
}

/* ============================================================
   CONTRATTO DELLA PIATTAFORMA — ripieghi e casi limite
   ============================================================ */
/* HERO senza JavaScript o con "riduci movimento": la scena è ferma e in
   griglia — titolo sopra la scheda, barra sotto — così nessun testo si
   sovrappone e niente dipende dallo scroll. */
html:not(.js) .sxp-stage,.sxp.is-static .sxp-stage{
  height:auto;min-height:100vh;min-height:100svh;display:grid;grid-template-columns:minmax(0,1fr);justify-items:center;align-content:center;
  row-gap:clamp(28px,5vh,56px);padding:calc(var(--nav-h) + 28px) 0 clamp(28px,5vh,48px);
}
html:not(.js) .sxp-media,.sxp.is-static .sxp-media{grid-area:1 / 1;position:relative;left:auto;top:auto;transform:none;align-self:center;width:min(340px,82vw);height:min(440px,56vh)}
html:not(.js) .sxp-title,.sxp.is-static .sxp-title{grid-area:1 / 1;align-self:center;transform:none}
html:not(.js) .sxp-hint,.sxp.is-static .sxp-hint{display:none}
html:not(.js) .sxp-bar,.sxp.is-static .sxp-bar{grid-area:2 / 1;position:relative;left:auto;right:auto;bottom:auto;width:100%;opacity:1;transform:none;visibility:visible;pointer-events:auto}
/* Senza JavaScript il burger non fa niente: si nasconde (il menu completo è nel footer) */
html:not(.js) .nav-burger{display:none}
/* Una scheda senza foto resta leggibile */
.cts-card:not(:has(> img)) .cts-veil{background:linear-gradient(160deg,var(--deep),var(--ink) 70%)}
.feat-media:not(:has(img)),.plate:not(:has(img)){background:linear-gradient(160deg,var(--glow-2),var(--surface))}
/* Chiusura "bento" senza foto: resta un blocco di testo centrato, non uno schermo vuoto */
.bento-pin:not(:has(.bento-cell)){height:auto;min-height:clamp(340px,48vh,520px);display:grid;place-items:center;padding:var(--nav-h) var(--pad) 24px}
.bento-pin:not(:has(.bento-cell)) .bento{display:none}
.bento-pin:not(:has(.bento-cell)) .bento-text{position:relative;left:auto;top:auto;transform:none;width:min(760px,100%)}
.bento-pin:not(:has(.bento-cell)) .bento-veil{display:none}

/* Stampa: niente stati d'ingresso né scene agganciate, tutto visibile */
@media print{
  .nav,.drawer,.nav-burger,.lb,.sxp-hint{display:none!important}
  .stagger > *,.shead-c.rv > *,.split-words .w i{opacity:1!important;transform:none!important}
  .reveal-text .rw{color:inherit!important}
  html.js .sxp.is-live,html.js .bento-scroll.is-live,html.js .inv-track.is-live{height:auto!important}
  html.js .sxp.is-live .sxp-stage,html.js .bento-scroll.is-live .bento-pin,html.js .inv-track.is-live .inv-pin{position:relative!important}
  .bento-text,.bento-veil{opacity:1!important}
  html.js .grow,html.js .map,html.js .acc-media{clip-path:none!important}
  html.js .acc-item:not(.open) .acc-panel{grid-template-rows:1fr}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  html.js .cts-card,html.js .cts-inner{transform:none}
  html.js .grow{clip-path:inset(0 round var(--r))}
  html.js .map{clip-path:none}
  html.js .plate img{transform:none}
}

/* Classi-gancio senza stile proprio (le usano app.js e la piattaforma: il
   bottone del sito per la CTA del blog, la galleria per l'editor, i blocchi
   del footer): la regola vuota le dichiara, così il controllo salute dei siti
   pubblicati non le conta come "classi senza stile". */
.btn,.fcol-hrs,.fmail,.footer-id,.count,.bento-hero,.gallery-grid{}

/* Titoli degli articoli del blog col font dei titoli del sito (lo shell del
   blog eredita il testo, non i titoli). */
.svhb{--svhb-head:var(--display)}
