/* =====================================================================
   CLASMA — sito clasma.it
   Token allineati a clasma_consumer/ui/clasma.css (design system del
   prodotto): stessa rampa neutra, stessi colori-ruolo, stessa tipografia.
   Il colore passa da UN token solo, --accent, commutato da [data-agent]
   sull'elemento <html>. Nessun componente sa che gli agenti esistono.

   ⚠️ ORDINE: il default di --accent sta in :root PRIMA dei selettori di
   tema. Un :root messo DOPO li annullerebbe tutti (stessa specificita',
   vince l'ordine) — errore gia' fatto una volta nel prodotto.
   ===================================================================== */

/* ============ 01 · TOKEN ============ */
:root{
  /* rampa neutra — identica al prodotto */
  --n-0:#000; --n-50:#08080a; --n-100:#0a0a0a; --n-150:#0e0e0e;
  --n-200:#101010; --n-250:#141414; --n-300:#191919; --n-350:#1f1f1f;
  --n-400:#262626; --n-450:#2f2f2f; --n-500:#3a3a3a; --n-600:#5a5a5a;
  --n-700:#8a8a8a; --n-800:#a2a2a2; --n-900:#d4d4d6; --n-1000:#f4f4f5;

  --bg:var(--n-100);
  --bg-sunken:var(--n-50);
  --surface-1:var(--n-250);
  --surface-2:var(--n-200);
  --surface-3:var(--n-300);
  --field:var(--n-150);
  --line:var(--n-400);
  --line-strong:var(--n-450);
  --line-field:#666;              /* bordo di campi e caselle: 3,4:1 sul campo, criterio WCAG 1.4.11 */
  --text-1:var(--n-1000);
  --text-2:var(--n-800);
  --text-3:var(--n-700);
  --on-accent:var(--n-100);

  --ok:#8fe07a; --danger:#ff8585;

  /* colori-ruolo: chiarezza normalizzata in banda 8,5–10,2:1 su --bg,
     misurata nel design system. Senza normalizzazione il cambio agente
     cambierebbe la LUMINOSITA' della pagina, non solo la tinta. */
  --role-core:#c9cdd4;
  --role-logistica:#2ecc71;
  --role-scrittura:#3fc9bb;
  --role-finance:#ff9147;
  --role-coding:#74b0ff;
  --role-controlli:#a8b2c1;   /* acciaio, normalizzato nella stessa banda (misurato 9,2:1) */

  /* stato di partenza: bianco. Nessun agente scelto = nessuna tinta. */
  --accent:var(--n-1000);
  --accent-soft:rgba(244,244,245,.12);
  --accent-glow:rgba(244,244,245,.26);

  --font-display:'Archivo','Inter',system-ui,sans-serif;
  --font-body:'Inter',system-ui,'Segoe UI',Roboto,sans-serif;
  --font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,monospace;

  --fs-3xs:10px; --fs-2xs:11px; --fs-xs:12px; --fs-sm:13px; --fs-md:15px;
  --fs-lg:17px; --fs-xl:clamp(19px,2.2vw,22px);
  --fs-2xl:clamp(24px,3.4vw,31px);
  --fs-3xl:clamp(29px,4.6vw,42px);
  --fs-hero:clamp(30px,5.8vw,62px);

  --lh-tight:1.06; --lh-snug:1.3; --lh-body:1.62;
  --tr-tight:-.022em; --tr-label:.16em;
  --wm-track-lg:.16em; --wm-track-sm:.10em;

  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px;
  --sp-6:24px; --sp-7:32px; --sp-8:40px; --sp-9:48px; --sp-10:64px;
  --sp-12:96px; --sp-14:128px;

  --r-xs:6px; --r-sm:10px; --r-md:13px; --r-lg:18px; --r-xl:26px;
  --r-pill:999px; --r-circle:50%;

  --sh-2:0 18px 44px -22px rgba(0,0,0,.75);
  --sh-3:0 40px 90px -30px rgba(0,0,0,.85);

  --ease:cubic-bezier(.22,.61,.36,1);
  --dur:.34s;
  /* UNA griglia sola (25/9): testata, binario, postazione, sezioni e piede. Fino al 24/9 le
     sezioni vecchie stavano in 1160 px e il binario in 1360: il titolo dell'eroe partiva 100 px
     a sinistra del marchio, e la pagina sembrava fatta di due siti */
  --wrap:1360px;
  --head-h:64px;

  /* la CARTA (25/9): la stessa superficie in tutta la pagina — schede, schema, trailer, modulo e
     le carte della postazione (che in piu' hanno il vetro, perche' sotto scorre la scena) */
  --carta-bg:linear-gradient(180deg,rgba(255,255,255,.045) 0%,rgba(255,255,255,.012) 100%);
  --carta-bordo:rgba(255,255,255,.085);
  --carta-bordo-2:rgba(255,255,255,.17);
  --carta-ombra:inset 0 1px 0 rgba(255,255,255,.05),0 30px 60px -34px rgba(0,0,0,.85);
  --filo:rgba(255,255,255,.085);     /* le righe sottili fra le voci: domande, «perche' noi», tempi */
  --fs-card:14.5px;                  /* il testo dentro le carte (era 13 px: troppo fitto accanto al binario) */
}

/* ---- temi agente. DOPO il default, mai prima. ---- */
html[data-agent="logistica"]{ --accent:var(--role-logistica); --accent-soft:rgba(46,204,113,.13); --accent-glow:rgba(46,204,113,.30); }
html[data-agent="scrittura"]{ --accent:var(--role-scrittura); --accent-soft:rgba(63,201,187,.13); --accent-glow:rgba(63,201,187,.30); }
html[data-agent="finance"]  { --accent:var(--role-finance);   --accent-soft:rgba(255,145,71,.13); --accent-glow:rgba(255,145,71,.30); }
html[data-agent="coding"]   { --accent:var(--role-coding);    --accent-soft:rgba(116,176,255,.13);--accent-glow:rgba(116,176,255,.30); }
html[data-agent="controlli"]{ --accent:var(--role-controlli); --accent-soft:rgba(168,178,193,.13);--accent-glow:rgba(168,178,193,.30); }

/* ============ 02 · RESET E BASE ============ */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--head-h) + var(--sp-6))}
body{
  margin:0;background:var(--bg);color:var(--text-1);
  font-family:var(--font-body);font-size:var(--fs-md);line-height:var(--lh-body);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img,svg,canvas{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
p{margin:0 0 var(--sp-4)}
h1,h2,h3,h4{margin:0}
::selection{background:var(--accent-soft);color:var(--text-1)}
*{scrollbar-width:thin;scrollbar-color:var(--n-500) transparent}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--n-450);border-radius:var(--r-pill)}
::-webkit-scrollbar-thumb:hover{background:var(--n-500)}

:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-xs)}
:focus:not(:focus-visible){outline:none}

.skip{
  position:absolute;left:var(--sp-4);top:-100px;z-index:200;
  background:var(--accent);color:var(--on-accent);
  padding:var(--sp-3) var(--sp-5);border-radius:var(--r-sm);font-weight:600;
  transition:top .2s var(--ease);
}
.skip:focus{top:var(--sp-4)}

/* ============ 03 · PRIMITIVE DI IMPAGINAZIONE ============ */
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--sp-6)}
/* 112 px sopra e sotto (erano 128): con le righe tolte, due sezioni di fila lasciavano 256 px di nero */
.section{padding-block:112px;position:relative}
@media (max-width:720px){ .section{padding-block:var(--sp-10)} }
/* LA LUCE (25/9): ogni sezione ha la sua pozza di luce tinta dall'agente, come l'alone del binario
   (sezione 25) e lo studio del 3D. Fino al 24/9 le sezioni vecchie erano nero piatto separato da
   righe grigie: accanto alla parte in 3D sembravano un altro sito. Dove sta la pozza lo dice la
   sezione (--luce-x/--luce-y); la maschera la sfuma in alto e in basso, cosi' non taglia mai. */
.section::after{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(42% 46% at var(--luce-x,16%) var(--luce-y,28%),var(--accent-glow),transparent 72%);
  opacity:.34;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 16%,#000 84%,transparent 100%);
          mask-image:linear-gradient(180deg,transparent 0,#000 16%,#000 84%,transparent 100%);
}
#agenti{--luce-x:86%;--luce-y:16%}
#dati{--luce-x:84%;--luce-y:52%}
#come{--luce-x:12%;--luce-y:26%}
#dentro{--luce-x:88%;--luce-y:30%}
#perche{--luce-x:12%;--luce-y:20%}
#trailer{--luce-x:50%;--luce-y:56%}
#faq{--luce-x:14%;--luce-y:30%}
#contatto{--luce-x:82%;--luce-y:44%}

.eyebrow{
  font-family:var(--font-mono);font-size:var(--fs-2xs);
  letter-spacing:var(--tr-label);text-transform:uppercase;
  color:var(--accent);margin:0 0 var(--sp-4);
  display:flex;align-items:center;gap:var(--sp-3);
  transition:color var(--dur) var(--ease);
}
.eyebrow::before{
  content:"";width:22px;height:1px;background:currentColor;opacity:.6;flex:none;
}
.h2{
  font-family:var(--font-display);font-weight:800;
  font-size:var(--fs-3xl);line-height:var(--lh-tight);letter-spacing:var(--tr-tight);
  max-width:20ch;text-wrap:balance;
}
.h3{
  font-family:var(--font-display);font-weight:700;
  font-size:var(--fs-xl);line-height:var(--lh-snug);letter-spacing:-.01em;
}
.lede{
  font-size:var(--fs-lg);color:var(--text-2);max-width:62ch;
  margin-top:var(--sp-5);
}
.head-block{max-width:780px;margin-bottom:var(--sp-10)}
.muted{color:var(--text-2)}
.hl{color:var(--text-1);font-weight:600}      /* bianco = evidenziare */
.mono{font-family:var(--font-mono)}

/* texture a puntini: e' la "grana" del marchio, non un fondale a caso */
.dots::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background-image:radial-gradient(circle at 1px 1px,rgba(244,244,245,.055) 1px,transparent 0);
  background-size:26px 26px;
  -webkit-mask-image:radial-gradient(ellipse 80% 70% at 50% 0,#000 20%,transparent 78%);
          mask-image:radial-gradient(ellipse 80% 70% at 50% 0,#000 20%,transparent 78%);
}
.section > .wrap{position:relative;z-index:1}

/* ============ 04 · BOTTONI ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);
  padding:13px var(--sp-6);border-radius:var(--r-pill);
  border:1px solid transparent;cursor:pointer;
  font-size:var(--fs-sm);font-weight:600;letter-spacing:.01em;
  transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),
             color var(--dur) var(--ease),transform .12s var(--ease),box-shadow var(--dur) var(--ease);
  white-space:nowrap;
}
.btn:active{transform:translateY(1px)}
.btn-primary{
  background:var(--accent);color:var(--on-accent);
  box-shadow:0 14px 40px -18px var(--accent-glow);
}
.btn-primary:hover{filter:brightness(1.08)}
.btn-ghost{
  background:transparent;color:var(--text-1);border-color:var(--line-strong);
}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}
.btn .arw{transition:transform var(--dur) var(--ease)}
.btn:hover .arw{transform:translateX(3px)}
.btn-lg{padding:16px var(--sp-7);font-size:var(--fs-md)}

/* ============ 05 · TESTATA ============ */
.site-head{
  position:sticky;top:0;z-index:100;
  height:var(--head-h);display:flex;align-items:center;
  background:rgba(10,10,10,.72);
  border-bottom:1px solid transparent;
  transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease);
}
@supports (backdrop-filter:blur(1px)){
  .site-head{backdrop-filter:saturate(140%) blur(14px)}
}
.site-head.is-stuck{background:rgba(10,10,10,.92);border-bottom-color:var(--line)}
.head-in{display:flex;align-items:center;gap:var(--sp-6);height:100%}

.lockup{display:flex;align-items:center;gap:10px;flex:none}
.wordmark{
  font-family:var(--font-display);font-weight:800;font-size:var(--fs-sm);
  letter-spacing:var(--wm-track-sm);text-transform:uppercase;
}
.nav{display:flex;gap:var(--sp-6);margin-left:auto;font-size:var(--fs-sm)}
.nav a{color:var(--text-2);transition:color .2s var(--ease);position:relative;padding-block:4px}
.nav a:hover{color:var(--text-1)}
.nav .btn{display:none}          /* vive solo dentro il menu piccolo */
.nav a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:var(--accent);transform:scaleX(0);transform-origin:left;
  transition:transform .26s var(--ease);
}
.nav a:hover::after{transform:scaleX(1)}
.head-cta{flex:none}
.nav-toggle{
  display:none;margin-left:auto;background:transparent;border:1px solid var(--line);
  border-radius:var(--r-sm);width:40px;height:40px;cursor:pointer;
  align-items:center;justify-content:center;
}
.nav-toggle .bars{width:16px;height:10px;position:relative;display:block}
.nav-toggle .bars::before,.nav-toggle .bars::after{
  content:"";position:absolute;left:0;right:0;height:1.5px;background:var(--text-1);
  transition:transform .26s var(--ease),top .26s var(--ease);
}
.nav-toggle .bars::before{top:0}
.nav-toggle .bars::after{top:8.5px}
.nav-toggle[aria-expanded="true"] .bars::before{top:4px;transform:rotate(45deg)}
.nav-toggle[aria-expanded="true"] .bars::after{top:4px;transform:rotate(-45deg)}

@media (max-width:900px){
  .nav-toggle{display:inline-flex}
  .head-cta{display:none}
  .nav{
    position:fixed;inset:var(--head-h) 0 auto 0;
    flex-direction:column;gap:0;margin:0;
    background:var(--bg-sunken);border-bottom:1px solid var(--line);
    padding:var(--sp-3) var(--sp-6) var(--sp-6);
    font-size:var(--fs-lg);
    transform:translateY(-8px);opacity:0;visibility:hidden;
    transition:opacity .22s var(--ease),transform .22s var(--ease),visibility .22s;
  }
  .nav.is-open{transform:none;opacity:1;visibility:visible}
  .nav a{padding-block:var(--sp-4);border-bottom:1px solid var(--line)}
  .nav .btn{display:inline-flex;margin-top:var(--sp-5);width:100%}
}

/* ============ 06 · EROE ============
   Dal 23/9 l'eroe e' la prima BATTUTA del binario del prodotto (sezione 25):
   qui solo la tipografia; griglia e palco stanno in fondo al foglio. */
.battuta-eroe h1{
  font-family:var(--font-display);font-weight:800;
  font-size:var(--fs-hero);line-height:var(--lh-tight);letter-spacing:-.03em;
  margin:0;text-wrap:balance;
}
.battuta-eroe h1 .swap{
  color:var(--accent);
  transition:color var(--dur) var(--ease),opacity .2s var(--ease);
}
.battuta-eroe h1 .swap.is-out{opacity:0}
.battuta-eroe .lede{margin-top:var(--sp-6);font-size:clamp(16px,1.6vw,19px)}
.hero-cta{display:flex;flex-wrap:wrap;gap:var(--sp-3);margin-top:var(--sp-8)}
@media (max-width:560px){ .hero-cta .btn{flex:1 1 100%} }
.hero-note{
  margin-top:var(--sp-6);font-family:var(--font-mono);font-size:var(--fs-2xs);
  letter-spacing:.06em;color:var(--text-3);text-transform:uppercase;
}

/* cristallo — il marchio in SVG: ripiego del palco finche' il 3D non c'e', e figura
   accanto all'eroe nella pagina compatta */
.crystal{width:100%;height:auto;overflow:visible;animation:float 9s ease-in-out infinite}
.crystal .halo{fill:var(--accent);opacity:.22;filter:blur(30px);transition:fill var(--dur) var(--ease)}
@keyframes float{0%,100%{transform:translateY(-8px)}50%{transform:translateY(8px)}}
.rip-cristallo .ring{
  position:absolute;width:min(78%,360px);aspect-ratio:1;border:1px solid var(--line);border-radius:var(--r-circle);
  opacity:.5;animation:spin 34s linear infinite;
}
.rip-cristallo .ring::before{
  content:"";position:absolute;top:-3px;left:50%;width:5px;height:5px;
  border-radius:var(--r-circle);background:var(--accent);
  box-shadow:0 0 14px 2px var(--accent-glow);transition:background var(--dur) var(--ease);
}
@keyframes spin{to{transform:rotate(360deg)}}

/* ============ 07 · SCELTA DELL'AGENTE ============ */
.picker{
  display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-8);
  padding:var(--sp-2);border:1px solid var(--line);border-radius:var(--r-pill);
  background:var(--surface-2);width:max-content;max-width:100%;
}
@media (max-width:560px){ .picker{border-radius:var(--r-lg)} .chip{flex:1 1 40%} }
.chip{
  display:inline-flex;align-items:center;gap:8px;cursor:pointer;
  padding:9px var(--sp-4);border-radius:var(--r-pill);
  border:1px solid transparent;background:transparent;color:var(--text-2);
  font-size:var(--fs-sm);font-weight:500;white-space:nowrap;
  transition:color .2s var(--ease),background .2s var(--ease),border-color .2s var(--ease);
}
.chip .dot{
  width:8px;height:8px;border-radius:var(--r-circle);flex:none;
  background:var(--c);box-shadow:0 0 10px 0 var(--c);
}
.chip:hover{color:var(--text-1);background:var(--surface-3)}
.chip[aria-pressed="true"]{
  color:var(--text-1);background:var(--surface-1);border-color:var(--line-strong);
}

/* ============ 08 · SCHEDE AGENTE ============ */
.agent-grid{
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--sp-3);
}
@media (max-width:1100px){ .agent-grid{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (max-width:760px){ .agent-grid{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:520px){ .agent-grid{grid-template-columns:minmax(0,1fr)} }
.agent{
  position:relative;overflow:hidden;isolation:isolate;
  background:var(--carta-bg);border:1px solid var(--carta-bordo);border-radius:var(--r-lg);box-shadow:var(--carta-ombra);
  padding:var(--sp-7) var(--sp-6) var(--sp-6);display:flex;flex-direction:column;
  transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),transform var(--dur) var(--ease);
}
.agent::before{
  content:"";position:absolute;inset:0 0 auto 0;height:2px;background:var(--c);
  transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease);
}
/* la luce del SUO colore, dietro la mascotte: le cinque schede restano riconoscibili insieme */
.agent::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(85% 55% at 100% 0%,color-mix(in srgb,var(--c) 17%,transparent),transparent 72%);
  opacity:.75;transition:opacity var(--dur) var(--ease);
}
.agent:hover,.agent:focus-within{border-color:var(--carta-bordo-2);transform:translateY(-3px)}
.agent:hover::before,.agent:focus-within::before{transform:scaleX(1)}
.agent:hover::after,.agent:focus-within::after{opacity:1}
/* la gamma scelta (dai chip dell'eroe o da «Scegli…»): la sua scheda si accende, le altre restano */
html[data-agent="logistica"] .agent.a-logistica,html[data-agent="scrittura"] .agent.a-scrittura,
html[data-agent="finance"] .agent.a-finance,html[data-agent="coding"] .agent.a-coding,
html[data-agent="controlli"] .agent.a-controlli{
  border-color:color-mix(in srgb,var(--c) 55%,transparent);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 34px 70px -34px color-mix(in srgb,var(--c) 45%,transparent);
}
html[data-agent="logistica"] .agent.a-logistica::before,html[data-agent="scrittura"] .agent.a-scrittura::before,
html[data-agent="finance"] .agent.a-finance::before,html[data-agent="coding"] .agent.a-coding::before,
html[data-agent="controlli"] .agent.a-controlli::before{transform:scaleX(1)}
html[data-agent="logistica"] .agent.a-logistica::after,html[data-agent="scrittura"] .agent.a-scrittura::after,
html[data-agent="finance"] .agent.a-finance::after,html[data-agent="coding"] .agent.a-coding::after,
html[data-agent="controlli"] .agent.a-controlli::after{opacity:1}
.agent-top{margin-bottom:var(--sp-5)}
.agent-glyph{
  width:38px;height:38px;flex:none;border-radius:var(--r-sm);margin-bottom:var(--sp-4);
  display:grid;place-items:center;
  background:color-mix(in srgb,var(--c) 13%,transparent);
  border:1px solid color-mix(in srgb,var(--c) 34%,transparent);
  color:var(--c);
}
@supports not (background:color-mix(in srgb,red 10%,transparent)){
  .agent-glyph{background:var(--surface-3);border-color:var(--line-strong)}
}
.agent-glyph svg{width:19px;height:19px}
.agent h3{font-family:var(--font-display);font-weight:700;font-size:var(--fs-xl);letter-spacing:-.005em;line-height:1.2}
.agent .role{
  font-family:var(--font-mono);font-size:var(--fs-3xs);letter-spacing:var(--tr-label);
  text-transform:uppercase;color:var(--c);
}
.agent p{color:var(--text-2);font-size:var(--fs-card);line-height:1.55;margin-bottom:var(--sp-5)}
.agent ul{list-style:none;margin:0 0 var(--sp-6);padding:var(--sp-5) 0 0;display:grid;gap:10px;border-top:1px solid var(--filo)}
.agent li{
  position:relative;padding-left:20px;font-size:var(--fs-card);color:var(--text-2);
  line-height:1.45;
}
.agent li::before{
  content:"";position:absolute;left:2px;top:.62em;width:7px;height:7px;
  border-radius:2px;background:var(--c);opacity:.85;
}
.agent .pick{
  margin-top:auto;align-self:flex-start;background:transparent;border:1px solid var(--carta-bordo-2);
  color:var(--text-1);border-radius:var(--r-pill);padding:9px var(--sp-5);
  font-size:var(--fs-xs);font-weight:600;cursor:pointer;
  transition:border-color .2s var(--ease),color .2s var(--ease),background .2s var(--ease);
}
.agent .pick:hover{border-color:var(--c);color:var(--c)}
.agent .pick[aria-pressed="true"]{background:var(--c);border-color:var(--c);color:var(--on-accent)}

/* ============ 09 · BLOCCO DATI (on-prem) ============ */
.split{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr);
  gap:var(--sp-10);align-items:center;
}
@media (max-width:940px){ .split{grid-template-columns:minmax(0,1fr);gap:var(--sp-9)} }
.claims{list-style:none;margin:var(--sp-8) 0 0;padding:0;display:grid;gap:var(--sp-7)}
.claims li{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-5);align-items:start}
/* i numeri come quelli della postazione (.battuta-post .num): un cerchio col bordo dell'accento */
.claims .n{
  font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--text-1);
  border:1px solid var(--accent);border-radius:var(--r-circle);background:var(--accent-soft);
  width:30px;height:30px;display:grid;place-items:center;margin-top:1px;
  transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease);
}
.claims strong{display:block;font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);line-height:1.3;margin-bottom:6px}
.claims span{color:var(--text-2);font-size:var(--fs-md)}

/* schema: l'edificio, e la freccia che non esce */
.diagram{
  background:var(--carta-bg);border:1px solid var(--carta-bordo);border-radius:var(--r-lg);box-shadow:var(--carta-ombra);
  padding:var(--sp-8);
  margin:0;   /* il margine di serie di <figure> (40 px ai lati) lo rientrava: sul telefono lo
                 schema usciva largo 196 px con le scritte a 5 px (misurato il 23/9) */
}
@media (max-width:560px){ .diagram{padding:var(--sp-5)} }
.diagram svg{width:100%;height:auto}
.diagram .box{fill:var(--surface-1);stroke:var(--line-strong)}
.diagram .lbl{fill:var(--text-2);font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.1em}
.diagram .lbl-1{fill:var(--text-1);font-family:'Archivo',sans-serif;font-size:11px;font-weight:700;letter-spacing:.06em}
.diagram .acc{fill:var(--accent);transition:fill var(--dur) var(--ease)}
.diagram .accs{stroke:var(--accent);transition:stroke var(--dur) var(--ease)}
.diagram .no{stroke:var(--danger);stroke-width:1.6;stroke-linecap:round}
.diagram figcaption{
  margin-top:var(--sp-5);font-size:var(--fs-xs);color:var(--text-3);
  font-family:var(--font-mono);letter-spacing:.04em;
}

/* ============ 10 · I TEMPI (come funziona) ============
   Fino al 24/9 qui c'erano «tre passi» (arriva la macchina, la chiavetta installa, l'agente impara):
   i primi due li racconta gia' la postazione, in cinque passi, e due conte diverse per la stessa
   cosa confondevano. Ora: quanto ci vuole, in tre tempi (gli stessi della FAQ «Quanto ci vuole
   per partire?»). Il tempo e' scritto grande come i numeri dei passi del binario. */
.tempi{list-style:none;margin:0;padding:0;display:grid;gap:var(--sp-8);grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:860px){ .tempi{grid-template-columns:minmax(0,1fr);gap:var(--sp-9)} }
.tempi li{position:relative;padding-top:var(--sp-7);border-top:1px solid var(--filo)}
.tempi .tempo{
  font-family:var(--font-display);font-weight:800;font-size:clamp(34px,4vw,52px);line-height:1;letter-spacing:-.03em;
  color:var(--accent);margin:0 0 var(--sp-5);font-variant-numeric:tabular-nums;transition:color var(--dur) var(--ease);
}
.tempi h3{margin:0 0 var(--sp-3)}
.tempi p:not(.tempo){color:var(--text-2);font-size:var(--fs-md);margin:0;max-width:40ch}

/* ============ 11 · CAPACITA' ============ */
.caps-grid{display:grid;gap:var(--sp-9) var(--sp-8)}
/* ⚠️ Colonne CONTATE, non auto-fit: i riquadri sono 6, e con auto-fit a
   1160px ne entravano 4 per riga — le due celle avanzate restavano vuote e
   il fondo grigio della griglia si vedeva come un rettangolo sbagliato.
   Tre colonne = due righe piene; due colonne = tre righe piene. */
.caps-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:900px){ .caps-grid{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:620px){ .caps-grid{grid-template-columns:minmax(0,1fr)} }
.cap{padding-top:var(--sp-6);border-top:1px solid var(--filo)}
.cap h3{font-size:var(--fs-lg);font-family:var(--font-display);font-weight:700;margin-bottom:var(--sp-2)}
.cap p{font-size:var(--fs-md);color:var(--text-2);margin:0;max-width:40ch}
.cap .ico{
  width:44px;height:44px;border-radius:var(--r-md);display:grid;place-items:center;margin-bottom:var(--sp-5);
  color:var(--accent);background:var(--accent-soft);border:1px solid var(--carta-bordo);
  box-shadow:0 14px 30px -16px var(--accent-glow);
  transition:color var(--dur) var(--ease),background var(--dur) var(--ease);
}
.cap .ico svg{width:21px;height:21px}

/* ============ 12 · DOMANDE ============ */
/* come il binario: il titolo resta fermo a sinistra (sticky), le domande scorrono a destra */
.faq-grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:var(--sp-10);align-items:start}
.faq-grid > .head-block{position:sticky;top:calc(var(--head-h) + var(--sp-9));margin-bottom:0}
@media (max-width:940px){
  .faq-grid{grid-template-columns:minmax(0,1fr);gap:0}
  .faq-grid > .head-block{position:static;margin-bottom:var(--sp-9)}
}
.faq-list{display:grid;border-top:1px solid var(--filo)}
.qa{border-bottom:1px solid var(--filo);transition:background .2s var(--ease)}
.qa summary{
  cursor:pointer;list-style:none;padding:var(--sp-6) var(--sp-2) var(--sp-6) 0;
  display:flex;align-items:center;gap:var(--sp-4);
  font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);line-height:1.35;
  transition:color .2s var(--ease);
}
.qa summary:hover{color:var(--accent)}
.qa summary::-webkit-details-marker{display:none}
.qa summary::after{
  content:"";margin-left:auto;flex:none;width:10px;height:10px;
  border-right:1.5px solid var(--text-3);border-bottom:1.5px solid var(--text-3);
  transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .26s var(--ease),border-color .2s var(--ease);
}
.qa[open] summary::after{transform:rotate(-135deg) translate(-3px,-3px);border-color:var(--accent)}
.qa .body{padding:0 var(--sp-9) var(--sp-7) 0;color:var(--text-2);font-size:var(--fs-md);max-width:68ch}
.qa .body p:last-child{margin-bottom:0}

/* ============ 13 · CONTATTO ============ */
.contact{background:var(--bg-sunken)}
.contact-grid{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1fr);gap:var(--sp-10)}
@media (max-width:940px){ .contact-grid{grid-template-columns:minmax(0,1fr);gap:var(--sp-9)} }
.contact-side .h2{max-width:12ch}
.direct{margin-top:var(--sp-8);display:grid;gap:var(--sp-4)}
.direct a{
  display:flex;align-items:center;gap:var(--sp-4);
  border:1px solid var(--carta-bordo);border-radius:var(--r-md);padding:var(--sp-4) var(--sp-5);
  background:var(--carta-bg);box-shadow:var(--carta-ombra);transition:border-color .2s var(--ease);
}
.direct a:hover{border-color:var(--accent)}
.direct .ico{color:var(--accent);flex:none;transition:color var(--dur) var(--ease)}
.direct .ico svg{width:18px;height:18px}
.direct .t{font-size:var(--fs-sm);font-weight:600}
.direct .s{font-size:var(--fs-xs);color:var(--text-3);font-family:var(--font-mono)}

form.demo{
  background:var(--carta-bg);border:1px solid var(--carta-bordo);border-radius:var(--r-lg);box-shadow:var(--carta-ombra);
  padding:var(--sp-8);display:grid;gap:var(--sp-5);
}
@media (max-width:560px){ form.demo{padding:var(--sp-6)} }
.row2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-5)}
@media (max-width:640px){ .row2{grid-template-columns:minmax(0,1fr)} }
.field{display:grid;gap:7px}
.field label{font-size:var(--fs-xs);color:var(--text-2);font-weight:600;letter-spacing:.01em}
.field .req{color:var(--accent);transition:color var(--dur) var(--ease)}
.field input,.field select,.field textarea{
  background:var(--field);border:1px solid var(--line-field);border-radius:var(--r-sm);
  padding:12px var(--sp-4);font-size:var(--fs-sm);width:100%;
  transition:border-color .2s var(--ease),background .2s var(--ease);
}
.field textarea{resize:vertical;min-height:104px;line-height:1.5}
.field select{
  appearance:none;cursor:pointer;padding-right:38px;
  background-image:linear-gradient(45deg,transparent 50%,var(--text-3) 50%),
                   linear-gradient(135deg,var(--text-3) 50%,transparent 50%);
  background-position:calc(100% - 19px) 19px,calc(100% - 14px) 19px;
  background-size:5px 5px,5px 5px;background-repeat:no-repeat;
}
.field select option{background:var(--surface-1);color:var(--text-1)}
.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--text-3)}
.field input:focus,.field select:focus,.field textarea:focus{
  /* lo stesso anello di 2 px di bottoni e link (col solo bordo da 1 px il fuoco si vedeva
     poco, soprattutto con l'accento grigio della gamma Controlli: 23/9) */
  outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent);background:var(--surface-2);
}
.field.err input,.field.err textarea,.field.err select{border-color:var(--danger)}
.field .msg{font-size:var(--fs-2xs);color:var(--danger);min-height:0}
.field.err .msg{min-height:1.2em}

/* trappola per i robot: mai visibile, mai raggiungibile da tastiera */
.trap{position:absolute!important;left:-9999px!important;width:1px;height:1px;overflow:hidden}

.consent{display:flex;gap:var(--sp-3);align-items:flex-start;font-size:var(--fs-xs);color:var(--text-2)}
.consent input{
  appearance:none;-webkit-appearance:none;
  width:18px;height:18px;flex:none;margin-top:1px;cursor:pointer;
  border:1px solid var(--line-field);border-radius:5px;background:var(--field);
  display:grid;place-content:center;
  transition:background .18s var(--ease),border-color .18s var(--ease);
}
.consent input::before{
  content:"";width:10px;height:10px;transform:scale(0);
  transition:transform .16s var(--ease);
  background:var(--on-accent);
  clip-path:polygon(14% 47%,0 61%,40% 100%,100% 22%,86% 9%,38% 71%);
}
.consent input:hover{border-color:var(--text-3)}
.consent input:checked{background:var(--accent);border-color:var(--accent)}
.consent input:checked::before{transform:scale(1)}
.consent a{color:var(--text-1);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line-strong)}
.consent a:hover{text-decoration-color:var(--accent)}

.form-foot{display:flex;align-items:center;gap:var(--sp-5);flex-wrap:wrap}
.form-state{font-size:var(--fs-xs);font-family:var(--font-mono);letter-spacing:.03em}
.form-state.ok{color:var(--ok)}
.form-state.ko{color:var(--danger)}
.btn[data-busy="1"]{opacity:.6;pointer-events:none}
.form-done{
  border:1px solid var(--carta-bordo-2);background:var(--carta-bg);box-shadow:var(--carta-ombra);border-radius:var(--r-lg);
  padding:var(--sp-9) var(--sp-8);text-align:center;
}
.form-done .tick{
  width:46px;height:46px;margin:0 auto var(--sp-5);border-radius:var(--r-circle);
  display:grid;place-items:center;color:var(--on-accent);background:var(--accent);
}
.form-done h3{margin-bottom:var(--sp-3)}
.form-done p{color:var(--text-2);font-size:var(--fs-sm);margin:0}

/* ============ 14 · PIEDE ============ */
.site-foot{border-top:1px solid var(--line);padding-block:var(--sp-9);font-size:var(--fs-xs)}
/* ⚠️ Era un flex con .foot-note{width:100%}: NON andava a capo, perche' il
   max-width:78ch riduce la dimensione ipotetica dell'elemento sotto il 100%
   e cosi' ci sta in riga. Con la griglia, grid-column:1/-1 e' una riga sua
   e basta — il max-width torna a fare solo il suo mestiere, la misura del testo. */
.foot-in{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-6);align-items:center}
.foot-links{display:flex;gap:var(--sp-5);flex-wrap:wrap;color:var(--text-2);justify-self:end}
.foot-links a{padding-block:6px;display:inline-block}
.foot-links a:hover{color:var(--text-1)}
.foot-note{grid-column:1/-1;color:var(--text-3);font-size:var(--fs-2xs);line-height:1.6;max-width:78ch;margin:0}
.foot-legal{grid-column:1/-1;color:var(--text-3);font-size:var(--fs-2xs);line-height:1.6;max-width:90ch;margin:0}
.foot-legal a{text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line-strong)}
.foot-legal a:hover{color:var(--text-2)}
@media (max-width:720px){
  .foot-in{grid-template-columns:minmax(0,1fr);gap:var(--sp-5)}
  .foot-links{justify-self:start}
}

/* ============ 15 · COMPARSA + MOTO RIDOTTO ============ */
html.js .rise{opacity:0;transform:translateY(16px);transition:opacity .6s var(--ease),transform .6s var(--ease)}
html.js .rise.is-in{opacity:1;transform:none}   /* stessa specificita' della regola sopra (0,2,1): un .rise.is-in nudo perderebbe */
.rise.d1{transition-delay:.07s} .rise.d2{transition-delay:.14s} .rise.d3{transition-delay:.21s} .rise.d4{transition-delay:.28s}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important;
  }
  html.js .rise{opacity:1;transform:none}
}

/* ============ 16 · PAGINE DI TESTO (privacy) ============ */
.doc{max-width:74ch;padding-block:var(--sp-12)}
.doc h1{font-family:var(--font-display);font-weight:800;font-size:var(--fs-3xl);letter-spacing:var(--tr-tight);margin-bottom:var(--sp-3)}
.doc .updated{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--text-3);letter-spacing:.08em;text-transform:uppercase;margin-bottom:var(--sp-9)}
.doc h2{font-family:var(--font-display);font-weight:700;font-size:var(--fs-xl);margin:var(--sp-9) 0 var(--sp-4)}
.doc p,.doc li{color:var(--text-2);font-size:var(--fs-sm)}
.doc ul{padding-left:var(--sp-5);display:grid;gap:8px;margin:0 0 var(--sp-4)}
.doc a{color:var(--text-1);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line-strong)}
.doc a:hover{text-decoration-color:var(--accent)}
.doc table{width:100%;border-collapse:collapse;margin:0 0 var(--sp-5);font-size:var(--fs-xs)}
.doc th,.doc td{text-align:left;padding:10px var(--sp-3);border-bottom:1px solid var(--line);vertical-align:top}
.doc th{color:var(--text-1);font-weight:600}
.doc td{color:var(--text-2)}
.doc-back{display:inline-flex;align-items:center;gap:8px;margin-top:var(--sp-9);color:var(--text-2);font-size:var(--fs-sm)}
.doc-back:hover{color:var(--accent)}
/* (25/9) le pagine di testo come la home: la stessa luce in alto e la testata con le voci a destra
   e l'ultima («Richiedi una demo») come il bottone della home. Il markup lo genera pagine_doc.py:
   qui solo CSS, cosi' le pagine non si rigenerano */
.doc{position:relative;isolation:isolate}
.doc::before{content:"";position:absolute;z-index:-1;pointer-events:none;left:50%;top:-120px;width:min(1200px,100vw);height:640px;
  transform:translateX(-50%);background:radial-gradient(50% 50% at 50% 34%,var(--accent-glow),transparent 72%);opacity:.3}
.head-links{margin-left:auto;align-items:center;font-size:var(--fs-sm);gap:var(--sp-6)}
.head-links a:hover{color:var(--text-1)}
.head-links a:last-child{background:var(--accent);color:var(--on-accent);border-radius:var(--r-pill);padding:10px var(--sp-5);font-weight:600;
  box-shadow:0 14px 40px -18px var(--accent-glow)}
.head-links a:last-child:hover{color:var(--on-accent);filter:brightness(1.08)}
@media (max-width:620px){
  .head-links{gap:var(--sp-4);font-size:var(--fs-xs)}
  .head-links a:not(:last-child):not(:first-child){display:none}   /* sul telefono: Home e il bottone */
}

/* ============ 17 · MODIFICATORI DI COLORE PER AGENTE ============
   --c e' il colore della SCHEDA (sempre il suo, anche quando l'agente
   scelto e' un altro). --accent e' il colore della PAGINA. Sono due cose
   diverse di proposito: le quattro schede devono restare riconoscibili
   tutte insieme. Niente style="" nel markup, cosi' la CSP resta stretta. */
.a-logistica{--c:var(--role-logistica)}
.a-scrittura{--c:var(--role-scrittura)}
.a-finance  {--c:var(--role-finance)}
.a-coding   {--c:var(--role-coding)}
.a-controlli{--c:var(--role-controlli)}
.a-core     {--c:var(--role-core)}

/* facce del cristallo */
/* Il marchio: il cristallo sfaccettato inciso sulla scatola, dentro un rombo.
   Le facce hanno fill-opacity nel markup (l'opacita' la usano le comparse):
   qui passa solo il colore, che e' quello dell'agente scelto. */
.cx{fill:var(--accent);transition:fill var(--dur) var(--ease)}
.cs{stroke:#9AA7B8;stroke:color-mix(in srgb,var(--accent) 62%,#E8ECF3);
  transition:stroke var(--dur) var(--ease)}
.diagram .cs{stroke-width:3.4}
.lockup .mark{width:15px;height:22px;flex:none}


/* =====================================================================
   IL TRAILER E L'OGGETTO — aggiunti il 10/9/2026
   Le regole stanno IN FONDO apposta: nessuna @media prima della sua base,
   se no vince l'ultima a parità di specificità (già preso due volte).
   ===================================================================== */

/* fascia del trailer: più stretta di una sezione piena */
.band{padding-block:var(--sp-12)}

/* la locandina e' un render del motore 3D (25/9), una per gamma come le altre figure: la vecchia
   era un fotogramma del trailer con un render d'agosto e del testo cucito dentro */
.film-card{position:relative;border-radius:var(--r-xl);overflow:hidden;
  border:1px solid var(--carta-bordo);background:var(--bg-sunken);
  box-shadow:var(--carta-ombra),0 60px 140px -70px var(--accent-glow)}
.film-poster{display:block;width:100%;padding:0;border:0;background:none;cursor:pointer;
  position:relative;aspect-ratio:16/9;color:inherit;text-align:left}
.film-poster img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.film-veil{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(8,9,11,0) 0%,rgba(8,9,11,.05) 52%,rgba(8,9,11,.86) 100%)}
/* il tasto sta nel lato buio della locandina (la macchina e' a destra, dal 70% in la'): al centro la toccava */
.film-play{position:absolute;left:33%;top:46%;transform:translate(-50%,-50%);
  width:74px;height:74px;border-radius:50%;display:grid;place-items:center;
  background:var(--accent);color:var(--on-accent);
  box-shadow:0 18px 50px -12px var(--accent-glow);
  transition:transform var(--dur) var(--ease)}
.film-play svg{width:28px;height:28px;margin-left:3px}
.film-poster:hover .film-play,.film-poster:focus-visible .film-play{transform:translate(-50%,-50%) scale(1.07)}
.film-lab{position:absolute;left:0;right:0;bottom:0;padding:var(--sp-8) var(--sp-9);
  display:flex;flex-direction:column;gap:var(--sp-2)}
.film-lab .k{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--accent)}
.film-lab .t{font-family:var(--font-display);font-weight:800;font-size:var(--fs-2xl);line-height:1.15;letter-spacing:-.015em;
  color:var(--text-1);text-wrap:balance;max-width:24ch}
.film-frame{position:relative;height:0;padding-bottom:calc(56.25% + 92px)}
.film-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
.film-alt{margin:var(--sp-5) 0 0;font-size:var(--fs-sm);color:var(--text-3);text-align:center}
.film-alt a{color:var(--text-2);text-decoration:underline;text-underline-offset:3px}
.film-alt a:hover{color:var(--accent)}

/* il triangolino sul tasto dell'eroe */
.btn .tri{width:0;height:0;border-style:solid;border-width:5px 0 5px 8px;
  border-color:transparent transparent transparent currentColor;margin-right:9px;flex:none}
.btn .sec{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11px;
  letter-spacing:.12em;color:var(--text-3);margin-left:8px}

/* le tre cose che arrivano al cliente */








/* l'interfaccia e' una schermata: bordo sottile e piu' spazio dentro il riquadro */


/* il guscio per gamma: vedi la sezione 20 in fondo (esploso a otto fotogrammi) */

@media (max-width:900px){
  .film-lab{padding:var(--sp-5)}
  .film-play{width:60px;height:60px}
  .film-play svg{width:23px;height:23px}
}
@media (max-width:620px){
  .film-lab .t{font-size:var(--fs-lg)}
}
@media (prefers-reduced-motion:reduce){
  .film-play{transition:none}
}


/* =====================================================================
   18 · L'EROE CHE VIVE — aggiunto l'11/9/2026
   Riga di strumenti del trailer, cristallo che si compone, mascotte.
   ===================================================================== */
.hud{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3) var(--sp-4);margin:0 0 var(--sp-6);
  font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;
  color:var(--text-3);
}
.hud b{font-weight:600;color:var(--text-1);font-variant-numeric:tabular-nums}
.hud .out b{color:var(--accent);transition:color var(--dur) var(--ease)}
.hud .live{display:inline-flex;align-items:center;gap:8px;color:var(--text-2)}
.hud .live i{
  width:7px;height:7px;border-radius:var(--r-circle);background:var(--accent);
  box-shadow:0 0 10px 1px var(--accent-glow);animation:hudpulse 2.2s ease-in-out infinite;
  transition:background var(--dur) var(--ease);
}
.hud .sep{width:1px;height:12px;background:var(--line-strong)}
@keyframes hudpulse{0%,100%{opacity:1}50%{opacity:.35}}

/* il cristallo si compone: cinque onde di faccette, poi il rombo si disegna.
   Le faccette hanno fill-opacity nel markup: qui si anima SOLO opacity, che si compone. */
html.js .crystal .cx{opacity:0;transform-box:fill-box;transform-origin:center}
.crystal.is-vivo .cx{animation:facein .7s var(--ease) forwards}
.crystal .w0{animation-delay:.15s} .crystal .w1{animation-delay:.26s} .crystal .w2{animation-delay:.37s}
.crystal .w3{animation-delay:.48s} .crystal .w4{animation-delay:.59s}
@keyframes facein{from{opacity:0;transform:scale(.82)}to{opacity:1;transform:none}}
html.js .crystal .rombo{stroke-dasharray:421;stroke-dashoffset:421}
.crystal.is-vivo .rombo{animation:disegna 1.5s cubic-bezier(.3,.8,.3,1) forwards .1s}
@keyframes disegna{to{stroke-dashoffset:0}}
html.js .crystal .cs:not(.rombo){opacity:0}
.crystal.is-vivo .cs:not(.rombo){animation:facein .6s var(--ease) forwards .7s}

/* mascotte: SVG generato, decorativo, fermo quando e' fuori schermo */
.masc{pointer-events:none}
.masc svg{width:100%;height:100%;display:block;overflow:visible}
.masc:not(.viva) svg *{animation-play-state:paused!important}
.masc-hero{
  position:absolute;right:-9%;bottom:-3%;width:40%;aspect-ratio:200/240;
  opacity:0;transform:translateY(8px);transition:opacity .5s var(--ease),transform .5s var(--ease);
}
.masc-hero.is-vivo{opacity:1;transform:none}
.masc-card{position:absolute;top:8px;right:8px;width:60px;height:72px;opacity:.92}
.contact-title{display:flex;align-items:flex-end;gap:var(--sp-4);flex-wrap:wrap}
.contact-title .h2{flex:1 1 12ch}
.masc-contatto{width:92px;height:110px;flex:none;margin-bottom:6px}
@media (max-width:940px){ .masc-hero{width:34%;right:-6%} }
@media (max-width:560px){ .masc-card{width:48px;height:58px} .masc-contatto{width:72px;height:86px} }

/* la locandina del trailer ha del testo cucito dentro: sotto i 620px
   l'etichetta scende SOTTO l'immagine invece di coprirla */
@media (max-width:620px){
  .film-poster{aspect-ratio:auto}
  .film-poster img{position:static;aspect-ratio:16/9;height:auto}
  .film-veil{bottom:auto;height:0}
  .film-play{top:28vw}
  .film-lab{position:static;padding:var(--sp-4) var(--sp-5) var(--sp-5)}
}

/* =====================================================================
   19 · MODULO: legenda e facoltativi
   ===================================================================== */
.form-legend{margin:0 0 var(--sp-2);font-size:var(--fs-xs);color:var(--text-3)}
.field .opt,.consent .opt{font-weight:400;color:var(--text-3)}

/* =====================================================================
   20 · L'OGGETTO CHE SI MONTA — otto fotogrammi per gamma, guidati dallo scorrimento
   ===================================================================== */














/* =====================================================================
   21 · LO SCHEMA CHE VIVE — la scena 4 del trailer, innescata da .is-in
   Ogni elemento porta una classe di sequenza s0..s7 = il suo ritardo.
   ===================================================================== */
.diagram .fill{fill:var(--surface-1);stroke:var(--line-strong)}
.diagram .link{stroke:var(--accent);stroke-width:1.5;fill:none;stroke-dasharray:4 4;transition:stroke var(--dur) var(--ease)}
.diagram .dead{stroke:var(--n-600);stroke-width:1.3;fill:none;stroke-dasharray:3 4}
.diagram .cross{stroke:var(--danger);stroke-width:2;stroke-linecap:round;fill:none}
.diagram .pkt{fill:var(--accent);transition:fill var(--dur) var(--ease)}
.diagram .dim{opacity:.55}
.diagram .lbl-out{fill:var(--text-3);font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:.12em}
.diagram .cs{stroke-width:2.6}

html.js .diagram .sk{opacity:0}
html.js .diagram .pop{opacity:0;transform-box:fill-box;transform-origin:center}
html.js .diagram .pkt{opacity:0}
html.js .diagram .dr{stroke-dasharray:60!important;stroke-dashoffset:60}
.diagram.is-in .sk{animation:sk .55s var(--ease) forwards}
.diagram.is-in .dim.sk{animation-name:skdim}
.diagram.is-in .pop{animation:pop .4s var(--ease) forwards}
.diagram.is-in .dr{animation:disegna .6s cubic-bezier(.3,.8,.3,1) forwards}
.diagram.is-in .pkt{animation:pacchetto 3.4s ease-in-out infinite}
.diagram.is-in .pkt.p2{animation-delay:2.6s}
.diagram.is-in .lbl-out{animation:sk .5s var(--ease) forwards,lampeggia 1.1s ease-in-out 2.4s 2}
.diagram .s0{animation-delay:0s} .diagram .s1{animation-delay:.15s} .diagram .s2{animation-delay:.3s}
.diagram .s3{animation-delay:.5s} .diagram .s4{animation-delay:.65s} .diagram .s5{animation-delay:.95s}
.diagram .s6{animation-delay:1.3s} .diagram .s7{animation-delay:1.55s}
.diagram.is-in .pkt.s5{animation-delay:1s} .diagram.is-in .pkt.p2.s5{animation-delay:2.7s}
@keyframes sk{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
@keyframes skdim{from{opacity:0;transform:translateY(3px)}to{opacity:.55;transform:none}}
@keyframes pop{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
@keyframes pacchetto{
  0%{opacity:0;transform:translateX(0)} 8%{opacity:1}
  42%{transform:translateX(42px);opacity:1} 54%{transform:translateX(42px)}
  90%{opacity:1;transform:translateX(0)} 100%{opacity:0;transform:translateX(0)}
}
@keyframes lampeggia{0%,100%{opacity:1}50%{opacity:.25}}

/* =====================================================================
   22 · I TEMPI — la linea che si riempie (sopra ogni tempo, sul filo)
   ===================================================================== */
.tempi li::after{
  content:"";position:absolute;left:0;right:0;top:-1px;height:2px;background:var(--accent);
  transform:scaleX(0);transform-origin:left;transition:transform .8s var(--ease) .25s,background var(--dur) var(--ease);
}
.tempi li.is-in::after{transform:scaleX(1)}
.tempi li.d1::after{transition-delay:.6s} .tempi li.d2::after{transition-delay:.95s}

/* =====================================================================
   23 · PERCHE' NOI — cinque righe, nessun nome
   ===================================================================== */
.vs{display:grid}
.vs-head,.vs-row{display:grid;grid-template-columns:200px minmax(0,1fr) minmax(0,1fr);gap:var(--sp-8);align-items:start}
.vs-head{
  padding:0 0 var(--sp-4);border-bottom:1px solid var(--filo);font-family:var(--font-mono);font-size:var(--fs-3xs);
  letter-spacing:var(--tr-label);text-transform:uppercase;color:var(--text-3);
}
.vs-row{
  padding:var(--sp-6) 0;border-bottom:1px solid var(--filo);
  transition:background .2s var(--ease);
}
.vs-row:hover{background:linear-gradient(90deg,rgba(255,255,255,.028),transparent 80%)}
.vs-row h3{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);margin:0}
.vs-row p{margin:0;font-size:var(--fs-md);color:var(--text-2)}
.vs-row .vs-noi{color:var(--text-1);border-left:2px solid var(--accent);padding-left:var(--sp-4);transition:border-color var(--dur) var(--ease)}
.vs-k{display:none}
@media (max-width:760px){
  .vs-head{display:none}
  .vs{border-top:1px solid var(--filo)}
  .vs-row{grid-template-columns:minmax(0,1fr);gap:var(--sp-3)}
  .vs-k{display:block;font-family:var(--font-mono);font-size:var(--fs-3xs);letter-spacing:var(--tr-label);text-transform:uppercase;color:var(--text-3);margin-bottom:4px}
}
.predisposto{margin:var(--sp-8) 0 0;display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}
.predisposto .k{
  font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:var(--tr-label);text-transform:uppercase;
  color:var(--accent);margin-right:var(--sp-2);transition:color var(--dur) var(--ease);
}
.predisposto .tag{border:1px solid var(--carta-bordo-2);background:var(--carta-bg);border-radius:var(--r-pill);padding:6px 12px;font-size:var(--fs-xs);color:var(--text-2)}

/* =====================================================================
   24 · MOTO RIDOTTO per tutto quello che e' stato aggiunto sopra
   (la regola globale della sezione 15 azzera gia' durate e transizioni;
   qui si fissa lo STATO FINALE, cosi' niente resta nascosto).
   ===================================================================== */
@media (prefers-reduced-motion:reduce){
  html.js .crystal .cx,html.js .crystal .cs:not(.rombo),html.js .diagram .sk,html.js .diagram .pop,html.js .diagram .pkt{opacity:1;animation:none!important}
  html.js .diagram .dim{opacity:.55}
  html.js .crystal .rombo,html.js .diagram .dr{stroke-dashoffset:0;animation:none!important}
  .diagram.is-in .pkt{transform:translateX(21px)}
  .hud .live i{animation:none}
  .masc svg *{animation:none!important}
  .tempi li::after{transform:scaleX(1)}
  .masc-hero{opacity:1;transform:none}
}

/* =====================================================================
   25 · IL BINARIO DEL PRODOTTO — 23/9/2026
   Una griglia: a sinistra le battute di testo, a destra il PALCO che resta a
   schermo (sticky) e mostra l'oggetto; sul telefono il palco e' una fascia in
   alto e il testo scorre sotto. Senza JS o con moto ridotto la pagina e'
   COMPATTA: lo decide un foglio a parte, assets/compatta.css, caricato da
   <noscript> e da media="(prefers-reduced-motion: reduce)" — NON una classe
   messa dal JS, che arriverebbe dopo il primo disegno e farebbe saltare
   l'impaginazione.
   ⚠️ In fondo al foglio apposta: le media query non aggiungono specificita'.
   ===================================================================== */
.binario{position:relative}
.binario::before{   /* l'alone tinto dall'agente, in alto a destra, come nel deck */
  content:"";position:absolute;z-index:0;pointer-events:none;
  width:min(900px,120vw);aspect-ratio:1;right:-12%;top:-18%;
  background:radial-gradient(circle,var(--accent-glow) 0%,transparent 62%);
  opacity:.42;filter:blur(30px);transition:background var(--dur) var(--ease);
}
.binario-griglia{
  position:relative;z-index:1;width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--sp-6);
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:clamp(24px,4vw,72px);
}
.binario-testo{grid-column:1;grid-row:1;position:relative;z-index:2}
.palco{grid-column:2;grid-row:1;position:sticky;top:var(--head-h);height:calc(100svh - var(--head-h));
  align-self:start;z-index:1;margin:0}
.battuta{min-height:86svh;display:flex;flex-direction:column;justify-content:center;
  padding-block:var(--sp-9);scroll-margin-top:var(--head-h)}
.battuta-eroe{min-height:calc(100svh - var(--head-h));padding-block:var(--sp-8) var(--sp-10)}
.battuta > .h2{max-width:16ch}
.battuta .k{
  font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:var(--tr-label);
  text-transform:uppercase;color:var(--accent);margin:0 0 var(--sp-3);transition:color var(--dur) var(--ease);
}
.battuta .h3{font-size:var(--fs-2xl);max-width:18ch;text-wrap:balance}
.battuta .h3.grande{font-size:var(--fs-3xl);font-variant-numeric:tabular-nums;letter-spacing:-.02em;max-width:none}
/* solo i paragrafi DIRETTI delle battute, e con :where() a specificita' (0,1,1): un .battuta p
   generico ingrandiva anche eyebrow e nota dell'eroe (visto a schermo il 23/9) */
.battuta > p:where(:not(.eyebrow, .k)){color:var(--text-2);font-size:var(--fs-lg);max-width:44ch;margin-top:var(--sp-4)}
.battuta > p.lede{font-size:clamp(16px,1.5vw,19px)}
.battuta > p.muted{font-size:var(--fs-sm);color:var(--text-3)}
.passi-montaggio{list-style:none;margin:0;padding:0}
.battuta-passo{min-height:56svh;display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:var(--sp-5);
  align-content:center}     /* 4 passi dal 25/9 (erano 8 da 44svh): ognuno ha piu' strada, il passo 03 ne monta cinque */
.battuta-passo .pn{grid-row:1 / span 2;font-family:var(--font-display);font-weight:800;font-size:clamp(34px,4vw,52px);
  line-height:1;letter-spacing:-.03em;color:var(--accent);font-variant-numeric:tabular-nums;transition:color var(--dur) var(--ease)}
.battuta-passo h3{font-family:var(--font-display);font-weight:700;font-size:var(--fs-xl);margin:0;align-self:end}
.battuta-passo p{margin-top:var(--sp-2);font-size:var(--fs-md)}
/* la battuta che si sta leggendo e' piena, le altre si fanno da parte */
html.js .battuta:not(.battuta-eroe){opacity:.34;transition:opacity .45s var(--ease)}
html.js .battuta.is-attiva{opacity:1}

/* lo scoiattolo accanto ai bottoni degli agenti */
.scelta{display:flex;align-items:flex-end;gap:var(--sp-3);margin-top:var(--sp-8);flex-wrap:wrap}
.scelta .picker{margin-top:0}
.scelta .masc-hero{position:relative;right:auto;bottom:auto;width:70px;aspect-ratio:200/240;flex:none;margin-bottom:-4px}
/* senza JS lo scoiattolo non si disegna: sul telefono restava un buco di 90 px fra le
   gamme e i bottoni (visto il 23/9). (scripting:none) vale SOLO a script spenti, quindi
   nessuno spostamento quando il JS arriva; i browser che non la conoscono la ignorano */
@media (scripting:none){ .scelta .masc-hero{display:none} }

/* ---- il palco ---- */
.tela-3d{position:absolute;inset:0;width:100%;height:100%;display:block;opacity:0;transition:opacity .6s var(--ease)}
html[data-tred="vivo"] .tela-3d{opacity:1}
.rip{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none;
  opacity:0;transition:opacity .45s var(--ease)}
.rip img{max-width:92%;max-height:78%;width:auto;height:auto;object-fit:contain;
  filter:drop-shadow(0 22px 34px rgba(0,0,0,.55))}
.rip-cristallo .crystal{width:min(54%,300px)}
.rip-esploso img{position:absolute;opacity:0;transition:opacity .22s var(--ease)}
/* senza 3D il passo nuovo ARRIVA (sale e si posa), non si sostituisce e basta: la pagina resta viva
   anche dove il 3D non parte (grafica software, desktop remoto, scheda video che cade) */
.rip-esploso img.is-on{opacity:1;animation:fotogramma .7s var(--ease)}
@keyframes fotogramma{from{opacity:0;transform:translateY(14px) scale(.975)}to{opacity:1;transform:none}}
.palco[data-scena="cristallo"] .rip-cristallo,
.palco[data-scena="esploso"] .rip-esploso{opacity:1}
html[data-tred="vivo"] .palco .rip{opacity:0}     /* (0,3,1): batte le due regole sopra (0,3,0) */
/* I PNG di ripiego del palco si SCARICANO solo se servono. Il palco e' a schermo fin
   dall'inizio, quindi le loro immagini «lazy» partivano subito: ~600 KB che col 3D acceso
   non si vedono mai (misurato il 23/9). Un'immagine lazy dentro un display:none non parte:
   restano spente finche' la loro scena non arriva SENZA il 3D (il 3D sta ancora caricando),
   e partono tutte insieme se il 3D rinuncia. Solo a moto normale: la pagina compatta
   (moto ridotto, niente JS) ha le sue figure e questi livelli li nasconde gia'. */
.palco .rip-esploso{display:none}
@media (prefers-reduced-motion:no-preference){
  html:not([data-tred="vivo"]) .palco[data-scena="esploso"] .rip-esploso,
  html[data-tred="no"] .palco .rip{display:grid}
}
/* (le due taglie, la chiavetta e la schermata dell'interfaccia dal 23/9 stanno nella postazione, sezione 27) */

/* il contatore dei passi del montaggio: «03 / 08  i piedini» */
.palco-conta{position:absolute;left:var(--sp-6);bottom:var(--sp-6);margin:0;display:flex;align-items:baseline;gap:var(--sp-2);
  font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);
  opacity:0;transition:opacity .35s var(--ease)}
.palco-conta .n{font-family:var(--font-display);font-weight:800;font-size:clamp(30px,3.4vw,46px);letter-spacing:-.03em;
  color:var(--accent);line-height:1;transition:color var(--dur) var(--ease)}
.palco-conta .t{margin-left:var(--sp-3);color:var(--text-2)}
.palco[data-passo] .palco-conta{opacity:1}
.palco-segni{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.palco-segni .q{stroke:var(--text-2);stroke-width:1;fill:none}
.palco-segni .q-t{fill:var(--text-1);font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.08em}

.battuta-figura{display:none;margin:var(--sp-7) 0 0}
.battuta-figura img{width:100%;max-width:560px;height:auto;filter:drop-shadow(0 18px 28px rgba(0,0,0,.5))}

/* ---- telefono: il palco diventa una fascia in alto, il testo scorre sotto ---- */
@media (max-width:900px){
  .binario-griglia{grid-template-columns:minmax(0,1fr);padding-inline:0;column-gap:0}
  .binario-testo{display:contents}
  .battuta{padding-inline:var(--sp-6);order:3}
  .battuta-eroe{order:1;min-height:0;padding-block:var(--sp-9) var(--sp-8)}
  .passi-montaggio{order:3}
  .palco{grid-column:1;grid-row:auto;order:2;height:44svh;z-index:3;background:var(--bg);
    border-block:1px solid var(--line)}
  .battuta:not(.battuta-eroe){min-height:62svh;scroll-margin-top:calc(var(--head-h) + 44svh)}
  .battuta-passo{min-height:46svh}
  .binario .battuta a,.binario .battuta button{scroll-margin-top:calc(var(--head-h) + 44svh + 16px)}
  .palco-conta{left:var(--sp-5);bottom:var(--sp-4)}
  .rip img{max-height:84%}
}
/* telefono in orizzontale: come il desktop */
@media (max-width:900px) and (max-height:500px) and (orientation:landscape){
  .binario-griglia{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);padding-inline:var(--sp-6)}
  .binario-testo{display:block}
  .palco{grid-column:2;grid-row:1;height:calc(100svh - var(--head-h));border:0}
}

/* =====================================================================
   26 · RIFINITURE — 23/9/2026
   La riga sotto la testata che segna quanto hai letto, la voce del menu dove sei,
   i titoli che salgono da dietro una maschera, le icone che si disegnano, «Perche'
   noi» che si accende riga per riga, le domande che si aprono morbide.
   Tutto CSS: il JS mette solo classi (.is-in, .is-qui). Con moto ridotto le durate
   vanno a zero (sezione 15) e resta lo stato finale.
   ===================================================================== */
/* quanto della pagina hai letto: solo dove il browser sa legare un'animazione allo
   scorrimento (Chrome, Safari 26); altrove la riga non c'e' e non manca niente */
@supports (animation-timeline: scroll()){
  .site-head::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;
    background:var(--accent);transform-origin:0 50%;transform:scaleX(0);pointer-events:none;
    animation:letto linear both;animation-timeline:scroll(root);transition:background var(--dur) var(--ease)}
  @keyframes letto{to{transform:scaleX(1)}}
}
.nav a.is-qui{color:var(--text-1)}
.nav a.is-qui::after{transform:scaleX(1)}

/* i titoli di sezione salgono da dietro una maschera (il blocco intanto sfuma, .rise) */
html.js .head-block.rise .h2{clip-path:inset(0 0 100% 0);transform:translateY(.4em);
  transition:clip-path .9s var(--ease) .06s,transform .9s var(--ease) .06s}
html.js .head-block.rise.is-in .h2{clip-path:inset(-10% -4% -24% -4%);transform:none}

/* le icone di «Cosa c'e' dentro» si disegnano (pathLength="1" nel markup) */
html.js .caps-grid .ico svg > *{stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.2s var(--ease) .25s}
html.js .caps-grid.is-in .ico svg > *{stroke-dashoffset:0}

/* «Perche' noi»: la riga d'accento di «com'e' fatto CLASMA» si disegna quando arriva la riga */
.vs-row .vs-noi{position:relative;border-left-color:transparent}
.vs-row .vs-noi::before{content:"";position:absolute;left:-2px;top:0;bottom:0;width:2px;background:var(--accent);
  transform-origin:50% 0;transition:transform .8s var(--ease) .3s,background var(--dur) var(--ease)}
html.js .vs-row.rise:not(.is-in) .vs-noi::before{transform:scaleY(0)}

/* le domande si aprono morbide dove il browser sa animare fino a «auto» */
@supports (interpolate-size: allow-keywords){
  .faq-list{interpolate-size:allow-keywords}
  .qa::details-content{block-size:0;overflow:clip;
    transition:block-size .4s var(--ease),content-visibility .4s var(--ease) allow-discrete}
  .qa[open]::details-content{block-size:auto}
}

@media print{
  .palco{display:none!important}
  .battuta-figura{display:block!important}
  .battuta{min-height:0!important;opacity:1!important}
}

/* =====================================================================
   27 · LA POSTAZIONE — 23/9/2026
   Dopo le misure: una scena a tutta finestra (seconda tela 3D, sticky) con cinque
   battute che le scorrono sopra. Sulla scena il PC del collega: lo schermo e' la
   .schermata qui sotto, DOM vero, appoggiata dal motore sullo schermo 3D (matrix3d in
   un foglio costruito). Senza 3D la schermata galleggia al centro sopra il render PNG.
   Le misure della schermata sono in «px di progetto» (--d = 1/1280 della sua larghezza):
   sul monitor, nel ripiego e nella pagina compatta resta la stessa, solo piu' o meno grande.
   ===================================================================== */
.postazione{position:relative;background:var(--bg)}
.post-griglia{display:grid;grid-template-columns:minmax(0,1fr)}
.post-palco{grid-area:1/1;position:sticky;top:var(--head-h);height:calc(100svh - var(--head-h));align-self:start;
  overflow:hidden;z-index:1;margin:0}
.tela-post{position:absolute;inset:0;width:100%;height:100%;display:block;opacity:0;transition:opacity .6s var(--ease)}
.postazione[data-tred="vivo"] .tela-post{opacity:1}
/* il ripiego senza 3D: una scatola col render e la schermata appoggiata sul suo schermo. Col 3D
   la scatola coincide col palco (il motore appoggia la schermata dal suo angolo in alto a sinistra).
   L'immagine si scarica solo se serve: display:none fino ad allora */
.post-rip{position:absolute;inset:0;z-index:2;pointer-events:none}
.post-rip-img{display:none;width:100%;height:100%;object-fit:contain}
/* (solo a moto normale: col moto ridotto la postazione e' la figura ferma di compatta.css) */
@media (prefers-reduced-motion:no-preference){ .postazione[data-tred="no"] .post-rip-img{display:block} }

/* i cinque punti, in alto a sinistra sulla scena */
.post-punti{position:absolute;left:max(var(--sp-6),calc((100% - var(--wrap)) / 2 + var(--sp-6)));top:var(--sp-6);margin:0;padding:0;
  list-style:none;display:flex;gap:var(--sp-2);z-index:3;transition:opacity .3s var(--ease)}
.post-punti li{width:26px;height:26px;border-radius:var(--r-circle);display:grid;place-items:center;
  font-family:var(--font-mono);font-size:var(--fs-3xs);color:var(--text-3);border:1px solid var(--line);background:rgba(10,10,11,.6);
  transition:color .3s var(--ease),border-color .3s var(--ease),background .3s var(--ease)}
.post-palco[data-punto="1"] .post-punti li:nth-child(-n+1),
.post-palco[data-punto="2"] .post-punti li:nth-child(-n+2),
.post-palco[data-punto="3"] .post-punti li:nth-child(-n+3),
.post-palco[data-punto="4"] .post-punti li:nth-child(-n+4),
.post-palco[data-punto="5"] .post-punti li{color:var(--text-1);border-color:var(--accent);background:var(--accent-soft)}
.post-palco[data-schermata="app"] .post-punti{opacity:0}

/* il testo: cinque carte che scorrono SOPRA la scena, a sinistra */
.post-testo{grid-area:1/1;position:relative;z-index:2;pointer-events:none}
.battuta-post{min-height:108svh;display:flex;align-items:center;
  /* (100% e non 100vw: il 100vw conta anche la barra di scorrimento e la carta usciva di 4 px dalla griglia) */
  padding:var(--sp-10) var(--sp-6) var(--sp-10) max(var(--sp-6),calc((100% - var(--wrap)) / 2 + var(--sp-6)))}
.battuta-post:first-child{padding-top:24svh}
.battuta-post .carta{pointer-events:auto;max-width:25rem;padding:var(--sp-6) var(--sp-7);border:1px solid var(--carta-bordo);border-radius:var(--r-lg);
  background:rgba(12,12,13,.8);box-shadow:var(--carta-ombra)}
@supports (backdrop-filter:blur(2px)){ .battuta-post .carta{background:rgba(12,12,13,.62);backdrop-filter:blur(14px) saturate(130%)} }
.battuta-post .h2{font-size:var(--fs-2xl);margin:var(--sp-2) 0 var(--sp-6)}
.battuta-post .k{display:flex;align-items:center;gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:var(--tr-label);
  text-transform:uppercase;color:var(--accent);margin:0 0 var(--sp-3);transition:color var(--dur) var(--ease)}
.battuta-post .num{width:24px;height:24px;border-radius:var(--r-circle);display:grid;place-items:center;border:1px solid var(--accent);
  color:var(--text-1);font-size:var(--fs-3xs);letter-spacing:0;transition:border-color var(--dur) var(--ease)}
.battuta-post h3{font-family:var(--font-display);font-weight:700;font-size:var(--fs-xl);line-height:var(--lh-snug);margin:0;text-wrap:balance}
.battuta-post p:not(.k):not(.eyebrow){color:var(--text-2);margin:var(--sp-3) 0 0}
/* il punto 5 e' lungo: la conversazione si svolge scorrendo; la carta sta in cima e se ne va */
.battuta-schermo{min-height:420svh;align-items:flex-start;padding-top:18svh}
.post-coda{height:56svh}

/* ---- lo schermo del PC: la schermata ---- */
.post-schermo{position:absolute;left:0;top:0;width:1280px;height:800px;transform-origin:0 0;z-index:2;
  container-type:size;container-name:schermo;visibility:hidden;opacity:0;transition:opacity .35s var(--ease),visibility .35s}
.post-palco:not([data-schermata="spento"]) .post-schermo{visibility:visible;opacity:1}
/* mentre il 3D della postazione si carica la schermata non c'e' (non saprebbe dove stare).
   Solo col JS: senza JS la postazione e' la figura ferma di compatta.css */
html.js .postazione:not([data-tred="vivo"]):not([data-tred="no"]) .post-schermo{visibility:hidden}
/* senza 3D, sul desktop: il render nelle sue proporzioni, la schermata sul suo schermo (misurato sul
   render di banco/ripieghi-post.mjs: x 39,08–77,25%, y 21,53–62,30%); nel punto 5 si allarga
   quasi a tutta la scena, se no l'app sul monitor piccolo non si leggerebbe */
@media (min-width:901px) and (prefers-reduced-motion:no-preference){
  .postazione[data-tred="no"] .post-rip{inset:auto;left:50%;top:50%;width:min(100%,calc((100svh - var(--head-h)) * 1600 / 930));
    aspect-ratio:1600/930;transform:translate(-50%,-50%)}
  /* la schermata sta SEMPRE nel riquadro grande del punto 5; fuori dal punto 5 una trasformazione la
     rimpicciolisce sullo schermo del render. Si anima solo transform: con left/top/width/height
     l'impaginazione si spostava e il CLS saliva a 0,37 (misurato il 23/9) */
  .postazione[data-tred="no"] .post-schermo{left:1.5%;top:2%;width:74%;height:79.6%;transform-origin:0 0;
    transform:translate(50.78%,24.54%) scale(.5158);
    transition:opacity .35s var(--ease),visibility .35s,transform .5s var(--ease)}
  .postazione[data-tred="no"] .post-palco[data-schermata="app"] .post-schermo{transform:none;
    border-radius:10px;box-shadow:0 40px 90px -30px rgba(0,0,0,.9),0 0 0 1px var(--line-strong)}
}
.schermata{--d:calc(100cqw / 1280);position:absolute;inset:0;overflow:hidden;font-family:var(--font-body);color:var(--text-1);
  font-size:calc(var(--d) * 16);line-height:1.45;border-radius:calc(var(--d) * 4);
  background:radial-gradient(120% 90% at 70% 20%,#16223a 0%,#0c111c 45%,#07090d 100%)}
html:not([data-agent]) .schermata{--accent:var(--role-finance);--accent-soft:rgba(255,145,71,.13)}
/* il desktop del PC, con l'icona di CLASMA */
.desk{position:absolute;inset:0}
.desk-icona{position:absolute;left:calc(var(--d) * 44);top:calc(var(--d) * 40);width:calc(var(--d) * 96);display:grid;justify-items:center;gap:calc(var(--d) * 8);
  font-size:calc(var(--d) * 14);color:#dfe6f0;opacity:0;transition:opacity .4s var(--ease)}
.desk-icona img{width:calc(var(--d) * 56);height:calc(var(--d) * 56);padding:calc(var(--d) * 10);border-radius:calc(var(--d) * 14);
  background:rgba(255,255,255,.08);box-shadow:0 0 0 1px rgba(255,255,255,.1)}
.post-palco[data-schermata="desk"] .desk-icona,.post-palco[data-schermata="app"] .desk-icona{opacity:1}
/* l'installazione: una finestra al centro */
.inst{position:absolute;left:50%;top:50%;width:calc(var(--d) * 760);transform:translate(-50%,-50%);border-radius:calc(var(--d) * 14);
  background:#101216;border:1px solid rgba(255,255,255,.1);box-shadow:0 calc(var(--d) * 40) calc(var(--d) * 90) rgba(0,0,0,.6);
  opacity:0;visibility:hidden;transition:opacity .35s var(--ease),visibility .35s}
.post-palco[data-schermata="inst1"] #inst-1,.post-palco[data-schermata="inst2"] #inst-2{opacity:1;visibility:visible}
.inst-barra{display:flex;justify-content:space-between;margin:0;padding:calc(var(--d) * 14) calc(var(--d) * 22);font-size:calc(var(--d) * 17);
  color:#9aa3b2;border-bottom:1px solid rgba(255,255,255,.08)}
.inst-corpo{display:grid;justify-items:center;gap:calc(var(--d) * 22);padding:calc(var(--d) * 40) calc(var(--d) * 56) calc(var(--d) * 46);text-align:center}
.inst-segno{width:calc(var(--d) * 84);height:calc(var(--d) * 84)}
.inst-tit{margin:0;font-family:var(--font-display);font-weight:700;font-size:calc(var(--d) * 40);letter-spacing:-.01em;line-height:1.15}
.inst-prog{display:block;width:100%;height:calc(var(--d) * 10);border-radius:calc(var(--d) * 5);background:rgba(255,255,255,.08);overflow:hidden}
.inst-riemp{display:block;height:100%;background:var(--accent);transform-origin:0 50%;animation:riempi 1s linear both paused}
@keyframes riempi{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.inst-ok{margin:0;font-size:calc(var(--d) * 22);color:#c9d2de;opacity:0;transition:opacity .3s var(--ease)}
.inst-ok.is-on{opacity:1}
.inst-lista{list-style:none;margin:0;padding:0;display:grid;gap:calc(var(--d) * 16);text-align:left;font-size:calc(var(--d) * 26);width:100%}
.inst-lista li{display:flex;align-items:center;gap:calc(var(--d) * 14);opacity:.28;transition:opacity .3s var(--ease)}
.inst-lista li.is-on{opacity:1}
.spunta{flex:none;display:inline-grid;place-items:center;width:calc(var(--d) * 30);height:calc(var(--d) * 30);border-radius:50%;
  background:var(--accent-soft);color:var(--accent);margin-right:calc(var(--d) * 8);vertical-align:middle}
.spunta svg,.app svg{width:62%;height:62%;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}

/* ---- l'app di CLASMA, a schermo pieno sul PC ---- */
.app{position:absolute;inset:0;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;background:#0b0c0e;
  opacity:0;visibility:hidden;transform-origin:calc(var(--d) * 92) calc(var(--d) * 90);animation:app-apre 1s var(--ease) both paused}
@keyframes app-apre{from{transform:scale(.06);opacity:0}30%{opacity:1}to{transform:none;opacity:1}}
.post-palco[data-schermata="app"] .app{visibility:visible}
.app-testa{display:flex;align-items:center;gap:calc(var(--d) * 14);height:calc(var(--d) * 60);padding:0 calc(var(--d) * 22);
  border-bottom:1px solid rgba(255,255,255,.07);font-size:calc(var(--d) * 16)}
.app-segno{width:calc(var(--d) * 22);height:calc(var(--d) * 22)}
.app-marca{font-family:var(--font-display);font-weight:800;letter-spacing:.14em;font-size:calc(var(--d) * 16)}
.app-agente{display:inline-flex;align-items:center;gap:calc(var(--d) * 8);padding:calc(var(--d) * 6) calc(var(--d) * 14);border-radius:999px;
  background:var(--accent-soft);color:var(--accent);font-weight:600}
.app-agente i,.app-rete i,.app-agenti i{width:calc(var(--d) * 8);height:calc(var(--d) * 8);border-radius:50%;background:currentColor;flex:none}
.app-rete{margin-left:auto;display:inline-flex;align-items:center;gap:calc(var(--d) * 8);color:#8f98a6;font-family:var(--font-mono);font-size:calc(var(--d) * 13)}
.app-rete i{background:#46d17c;box-shadow:0 0 0 calc(var(--d) * 3) rgba(70,209,124,.18)}
.app-utente{padding:calc(var(--d) * 6) calc(var(--d) * 14);border-radius:999px;border:1px solid rgba(255,255,255,.1);color:#c6cdd8}
.app-avviso{margin:0;padding:calc(var(--d) * 8) calc(var(--d) * 22);font-size:calc(var(--d) * 13);color:#8a93a1;text-align:center;
  border-bottom:1px solid rgba(255,255,255,.06);background:#0e0f12}
.app-avviso b{color:#dfe5ee}
.app-corpo{display:grid;grid-template-columns:calc(var(--d) * 236) minmax(0,1fr) calc(var(--d) * 250);min-height:0}
.app-lato,.app-file{padding:calc(var(--d) * 18) calc(var(--d) * 18);border-right:1px solid rgba(255,255,255,.06);overflow:hidden;font-size:calc(var(--d) * 15.5)}
.app-file{border-right:0;border-left:1px solid rgba(255,255,255,.06)}
.app-tit{margin:calc(var(--d) * 4) 0 calc(var(--d) * 10);font-family:var(--font-mono);font-size:calc(var(--d) * 11);letter-spacing:.16em;text-transform:uppercase;color:#8e97a4}
.app-tit:not(:first-child){margin-top:calc(var(--d) * 22)}
.app-agenti,.app-reg,.app-files{list-style:none;margin:0;padding:0;display:grid;gap:calc(var(--d) * 4)}
.app-agenti li{display:flex;align-items:center;gap:calc(var(--d) * 10);padding:calc(var(--d) * 8) calc(var(--d) * 10);border-radius:calc(var(--d) * 8);color:#9aa3b2}
.app-agenti li[data-agente="logistica"] i{color:var(--role-logistica)} .app-agenti li[data-agente="scrittura"] i{color:var(--role-scrittura)}
.app-agenti li[data-agente="finance"] i{color:var(--role-finance)} .app-agenti li[data-agente="coding"] i{color:var(--role-coding)}
.app-agenti li[data-agente="controlli"] i{color:var(--role-controlli)}
.app-agenti li.is-attivo{background:rgba(255,255,255,.06);color:#eef1f5}
.app-memo{margin:0;padding:calc(var(--d) * 10) calc(var(--d) * 12);border-radius:calc(var(--d) * 8);background:rgba(255,255,255,.04);color:#c3cad5;line-height:1.4}
.app-reg li{font-family:var(--font-mono);font-size:calc(var(--d) * 12.5);color:#7d8694;line-height:1.35;opacity:.25;transition:opacity .3s var(--ease),color .3s var(--ease)}
.app-reg li.is-on{opacity:1;color:#aeb6c2}
.app-files li{display:flex;align-items:center;gap:calc(var(--d) * 10);padding:calc(var(--d) * 9) calc(var(--d) * 10);border-radius:calc(var(--d) * 8);color:#b9c1cc;
  border:1px solid transparent;transition:background .3s var(--ease),border-color .3s var(--ease),opacity .3s var(--ease)}
.app-files li .ico{width:calc(var(--d) * 22);height:calc(var(--d) * 22);flex:none;color:#7f8896;display:inline-grid;place-items:center}
.app-files li .ico svg{width:100%;height:100%}
.app-files .nuovo{opacity:0}
.app-files .nuovo.is-on{opacity:1;background:var(--accent-soft);border-color:var(--accent);color:#f1f4f8}
.app-files .nuovo.is-on .ico{color:var(--accent)}
.app-chat{position:relative;display:flex;flex-direction:column;gap:calc(var(--d) * 12);padding:calc(var(--d) * 26) calc(var(--d) * 40);overflow:hidden}
.app-chat > *{margin:0;opacity:0;transform:translateY(calc(var(--d) * 8));transition:opacity .3s var(--ease),transform .3s var(--ease)}
.app-chat > .is-on{opacity:1;transform:none}
.msg{max-width:78%;padding:calc(var(--d) * 15) calc(var(--d) * 20);border-radius:calc(var(--d) * 14);font-size:calc(var(--d) * 19);line-height:1.5}
.msg-tu{align-self:flex-end;background:#1c1f25;border:1px solid rgba(255,255,255,.08)}
.msg-ag{align-self:flex-start;background:#121418;border:1px solid rgba(255,255,255,.07)}
.msg-ag p{margin:0}
.strum{align-self:flex-start;max-width:78%;padding:calc(var(--d) * 8) calc(var(--d) * 14);border-left:calc(var(--d) * 3) solid var(--accent);
  border-radius:calc(var(--d) * 6);background:#101216;font-family:var(--font-mono);font-size:calc(var(--d) * 15);color:#8d96a4}
.strum::before{content:"◇ ";color:#6f7885}
.strum b{color:var(--accent);font-weight:600}
.fonti{display:flex;flex-wrap:wrap;gap:calc(var(--d) * 8);margin-top:calc(var(--d) * 12)!important}
.fonti span{font-family:var(--font-mono);font-size:calc(var(--d) * 12);padding:calc(var(--d) * 4) calc(var(--d) * 10);border-radius:999px;
  border:1px solid rgba(255,255,255,.12);color:#9aa3b2}
.file-card{align-self:flex-start;display:flex;align-items:center;gap:calc(var(--d) * 12);padding:calc(var(--d) * 12) calc(var(--d) * 16);
  border-radius:calc(var(--d) * 12);border:1px solid var(--accent);background:var(--accent-soft);font-size:calc(var(--d) * 16.5)}
.file-card .ico{width:calc(var(--d) * 26);height:calc(var(--d) * 26);color:var(--accent);display:inline-grid;place-items:center}
.file-card .ico svg{width:100%;height:100%}
.file-card span{color:#9aa3b2}
.file-card .apri{margin-left:calc(var(--d) * 10);padding:calc(var(--d) * 5) calc(var(--d) * 14);border-radius:999px;background:var(--accent);color:#0b0c0e;font-weight:600}
.conferma{align-self:flex-start;display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--d) * 12);padding:calc(var(--d) * 14) calc(var(--d) * 16);
  border-radius:calc(var(--d) * 12);border:1px solid rgba(255,255,255,.12);background:#101216;font-size:calc(var(--d) * 16.5)}
.conferma #app-conf{flex:1 1 100%}    /* etichetta, domanda e bottoni: tre righe ordinate */
.conferma .etic{font-family:var(--font-mono);font-size:calc(var(--d) * 11);letter-spacing:.14em;text-transform:uppercase;color:var(--accent);
  padding:calc(var(--d) * 4) calc(var(--d) * 10);border:1px solid var(--accent);border-radius:999px}
.conferma .bott{padding:calc(var(--d) * 6) calc(var(--d) * 16);border-radius:calc(var(--d) * 8);border:1px solid rgba(255,255,255,.14);color:#c6cdd8}
.conferma .bott.ok{background:#eef1f5;color:#0b0c0e;border-color:#eef1f5;font-weight:600}
.app-barra{display:flex;align-items:center;gap:calc(var(--d) * 10);padding:calc(var(--d) * 14) calc(var(--d) * 18);border-top:1px solid rgba(255,255,255,.07);
  font-size:calc(var(--d) * 15)}
.app-ragiona{padding:calc(var(--d) * 8) calc(var(--d) * 12);border:1px solid rgba(255,255,255,.1);border-radius:calc(var(--d) * 8);color:#9aa3b2;font-weight:600}
.app-tasto{width:calc(var(--d) * 42);height:calc(var(--d) * 42);display:inline-grid;place-items:center;border-radius:calc(var(--d) * 10);
  border:1px solid rgba(255,255,255,.1);color:#9aa3b2}
.app-campo{flex:1;min-width:0;height:calc(var(--d) * 46);display:flex;align-items:center;padding:0 calc(var(--d) * 16);border-radius:calc(var(--d) * 10);
  border:1px solid rgba(255,255,255,.1);background:#0e0f12;color:#8e97a4;white-space:nowrap;overflow:hidden}
.app-campo.is-scrive{color:#eef1f5;border-color:var(--accent)}
.app-campo.is-scrive #app-input::after{content:"";display:inline-block;width:calc(var(--d) * 2);height:1.1em;margin-left:calc(var(--d) * 2);
  vertical-align:text-bottom;background:var(--accent)}
.app-mic.is-on{color:#0b0c0e;background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 calc(var(--d) * 6) var(--accent-soft)}
.app-invia{padding:calc(var(--d) * 12) calc(var(--d) * 22);border-radius:calc(var(--d) * 10);background:var(--accent);color:#0b0c0e;font-weight:700}
/* la schermata VERTICALE (il pannello del telefono, la figura compatta sul telefono): solo la
   conversazione, a misura vera. Non «stretta»: lo schermo del PC piccolo (ripiego) resta orizzontale
   e deve solo rimpicciolire — con max-width qui dentro finiva a 1 px di progetto (visto il 23/9) */
@container schermo (orientation:portrait){
  .schermata{--d:1px;font-size:14px}
  .app{grid-template-rows:auto minmax(0,1fr) auto}      /* senza la riga dell'avviso: tre righe, non quattro */
  .app-corpo{grid-template-columns:minmax(0,1fr)}
  /* si vede sempre l'ultimo messaggio arrivato: lo fa il JS (clasma.js, sezione 11) spostando lo
     SCORRIMENTO del riquadro della chat. Il 23/9 sera si nascondevano i messaggi non arrivati
     (display:none) con la chat in fondo (flex-end): funzionava, ma ogni messaggio nuovo spingeva
     gli altri e il browser lo contava come salto d'impaginazione (CLS 0,13–0,20 a 390 px,
     misurato il 25/9 con banco/cls-chi.mjs). Lo scorrimento di un riquadro non e' un salto. */
  .app-marca{font-size:14px;letter-spacing:.1em}
  .app-utente{white-space:nowrap;font-size:12px;padding:4px 10px}
  .app-lato,.app-file,.app-rete,.app-avviso,.app-ragiona,.app-tasto:not(.app-mic){display:none}
  .app-testa{height:52px;padding:0 14px;gap:10px}
  .app-utente{margin-left:auto}
  .app-chat{padding:16px 14px;gap:10px}
  .msg,.strum{max-width:92%}
  .msg{font-size:15px}
  .file-card .apri{display:none}
  .app-barra{padding:10px 12px;gap:8px}
}

/* ---- telefono: la scena a tutta finestra, il testo in basso ---- */
@media (max-width:900px){
  .battuta-post{align-items:flex-end;padding:var(--sp-8) var(--sp-4) 6svh}
  .battuta-post:first-child{padding-top:var(--sp-8)}
  .battuta-post .carta{max-width:none;width:100%;padding:var(--sp-5)}
  .battuta-post .h2{font-size:var(--fs-xl);margin-bottom:var(--sp-4)}
  .battuta-schermo{align-items:flex-start;padding-top:56svh}
  .post-punti{left:50%;transform:translateX(-50%);top:var(--sp-4)}
}
@media (max-width:900px) and (prefers-reduced-motion:no-preference){
  .postazione[data-tred="no"]:not(.is-pannello) .post-schermo{left:4%;top:6%;width:92%;height:auto;aspect-ratio:16/10;transform:none}
}
/* sul telefono lo schermo del PC e' largo 300 px: l'installazione si scrive piu' grande */
.postazione.is-stretto .inst{width:calc(var(--d) * 1120)}
.postazione.is-stretto .inst-barra{font-size:calc(var(--d) * 30);padding:calc(var(--d) * 22) calc(var(--d) * 34)}
.postazione.is-stretto .inst-corpo{gap:calc(var(--d) * 30);padding:calc(var(--d) * 50) calc(var(--d) * 64) calc(var(--d) * 58)}
.postazione.is-stretto .inst-segno{width:calc(var(--d) * 120);height:calc(var(--d) * 120)}
.postazione.is-stretto .inst-tit{font-size:calc(var(--d) * 74)}
.postazione.is-stretto .inst-prog{height:calc(var(--d) * 18);border-radius:calc(var(--d) * 9)}
.postazione.is-stretto .inst-ok{font-size:calc(var(--d) * 40)}
.postazione.is-stretto .inst-lista{font-size:calc(var(--d) * 46);gap:calc(var(--d) * 22)}
.postazione.is-stretto .spunta{width:calc(var(--d) * 50);height:calc(var(--d) * 50)}
.postazione.is-stretto .desk-icona{left:calc(var(--d) * 60);top:calc(var(--d) * 56);width:calc(var(--d) * 200);font-size:calc(var(--d) * 30)}
.postazione.is-stretto .desk-icona img{width:calc(var(--d) * 110);height:calc(var(--d) * 110);padding:calc(var(--d) * 18);border-radius:calc(var(--d) * 24)}
/* nel punto 5, sul telefono, l'app esce dal monitor e diventa un pannello (la regia mette .is-pannello) */
.postazione.is-pannello .post-schermo{left:3%;top:2%;width:94%;height:72%;border-radius:14px;overflow:hidden;
  box-shadow:0 30px 70px -20px rgba(0,0,0,.9),0 0 0 1px var(--line-strong);animation:pannello 1s var(--ease) both paused}
@keyframes pannello{from{transform:translateY(40%) scale(.5);opacity:0}to{transform:none;opacity:1}}
.postazione.is-pannello .app{animation:none;opacity:1;transform:none}
.postazione.is-pannello .inst{display:none}
