@charset "utf-8";
/* ============================================================================
   PheasyAI — foglio di stile unico
   ----------------------------------------------------------------------------
   Organizzato con @layer: l'ordine dichiarato qui sotto decide chi vince in caso
   di conflitto, a prescindere dalla specificita'. E' il motivo per cui non
   serve nemmeno un !important in tutto il file.
   ========================================================================== */
@layer reset, tokens, base, layout, components, utilities;

/* ==========================================================================
   FONT — auto-ospitati, sottoinsieme latino (~43 KB totali).
   Niente Google Fonts via CDN: e' un requisito GDPR, non solo di performance.
   ========================================================================== */
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/IBMPlexSans-Regular-latin.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/IBMPlexSans-SemiBold-latin.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:700;font-display:swap;
  src:url("../fonts/IBMPlexSans-Bold-latin.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/IBMPlexMono-Regular-latin.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/IBMPlexMono-Medium-latin.woff2") format("woff2")}

/* ==========================================================================
   LAYER: reset
   ========================================================================== */
@layer reset {
  *,*::before,*::after{box-sizing:border-box}
  html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
  body,h1,h2,h3,h4,p,figure,blockquote,dl,dd,ul,ol{margin:0}
  ul[class],ol[class]{list-style:none;padding:0}
  img,svg,video{max-width:100%;height:auto;display:block}
  input,button,textarea,select{font:inherit;color:inherit}
  button{background:none;border:0;cursor:pointer}
  a{color:inherit}
  table{border-collapse:collapse;width:100%}
  summary::-webkit-details-marker{display:none}
  /* Il movimento e' un'opzione, non un requisito: qui si spegne tutto. */
  @media (prefers-reduced-motion:reduce){
    *,*::before,*::after{
      animation-duration:.01ms !important;animation-iteration-count:1 !important;
      transition-duration:.01ms !important;scroll-behavior:auto !important}
  }
}

/* ==========================================================================
   LAYER: tokens — l'unico punto da toccare per cambiare l'aspetto del sito
   ========================================================================== */
@layer tokens {
  :root{
    /* ── Brand ─────────────────────────────────────────── */
    --c-cyan:#42DEDF;          /* ciano del marchio, campionato dal logo */
    --c-cyan-600:#12A3A4;      /* variante scura del brief: bordi e dettagli, NON testo */
    /* #12A3A4 su bianco da 3,09:1 e su --c-cyan-050 2,89:1: sotto il minimo
       4,5:1 preteso dal brief stesso (par. 5.2). Per il TESTO su fondo chiaro
       si usa questa variante piu scura, sopra 4,6:1 su bianco, su --c-gray-050
       e su --c-cyan-050. Il ciano pieno resta dove e leggibile: fondo dei
       pulsanti, bordi, grafici e testo sulle sezioni scure. */
    --c-cyan-700:#0D7D7E;
    --c-cyan-050:#E9FBFB;
    --c-violet-900:#160A37;
    --c-violet-800:#380C59;
    --c-violet-700:#572080;
    --c-violet-600:#662D91;
    --c-violet-500:#773EA2;

    /* ── Neutri ────────────────────────────────────────── */
    --c-ink:#161616;
    --c-ink-700:#3D3D3D;
    --c-gray-500:#737373;  /* colore del payoff nel logo */
    /* #737373 regge 4,74:1 su bianco ma scende a 4,46:1 sulle sezioni grigie.
       Per il testo secondario serve un gradino piu scuro: resta sopra 4,9:1
       su tutti e tre i fondi chiari usati nel sito. */
    --c-gray-600:#6B6B6B;
    --c-gray-400:#A6A6A6;
    --c-gray-200:#E7E7E7;
    --c-gray-050:#F8F8F8;
    --c-white:#FFFFFF;

    /* ── Semantici (gli stessi della UI di prodotto) ───── */
    --c-success:#2DD4A7;
    --c-warning:#F5A623;
    --c-danger:#F04E4E;
    --c-data-blue:#4F7CFF;

    /* ── Ruoli: le sezioni cambiano questi, non i colori ─ */
    --bg:var(--c-white);
    --fg:var(--c-ink);
    --fg-muted:var(--c-gray-600);
    --border:var(--c-gray-200);
    --accent-text:var(--c-cyan-700);   /* su fondo chiaro il ciano puro e' illeggibile */

    /* ── Tipografia ────────────────────────────────────── */
    --ff-sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
    --ff-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
    --fs-display:clamp(2.25rem,1.4rem + 4.2vw,4rem);
    --fs-h2:clamp(1.75rem,1.2rem + 2.6vw,2.75rem);
    --fs-h3:clamp(1.25rem,1.05rem + 1vw,1.5rem);
    --fs-lead:clamp(1.05rem,0.98rem + 0.5vw,1.25rem);
    --fs-body:1.0625rem;   /* 17px: un punto sopra la media, si legge meglio */
    --fs-small:0.875rem;
    --fs-mono:0.75rem;
    --lh-display:1.1;
    --lh-heading:1.25;
    --lh-body:1.65;

    /* ── Spaziatura (base 4px) ─────────────────────────── */
    --s-1:4px;  --s-2:8px;  --s-3:12px; --s-4:16px; --s-5:24px;
    --s-6:32px; --s-7:48px; --s-8:64px; --s-9:96px; --s-10:128px;
    --section-y:clamp(4rem,10vw,8rem);
    --container:1200px;
    --gutter:clamp(1.25rem,5vw,2.5rem);

    /* ── Forme ─────────────────────────────────────────── */
    --r-sm:8px;      /* pulsanti, input */
    --r-md:16px;     /* card */
    --r-pill:999px;

    /* ── Ombre: fredde, mai nero piatto ────────────────── */
    --sh-1:0 1px 2px rgba(22,10,55,.06);
    --sh-2:0 1px 2px rgba(22,10,55,.06),0 8px 24px rgba(22,10,55,.08);
    --sh-3:0 2px 4px rgba(22,10,55,.08),0 16px 40px rgba(22,10,55,.12);

    /* ── Movimento ─────────────────────────────────────── */
    --ease:cubic-bezier(.4,0,.2,1);
    --dur:200ms;
  }

  /* Inversione dei ruoli per le sezioni scure: i componenti non sanno di
     essere su fondo scuro, leggono solo le variabili di ruolo. */
  .is-dark{
    --bg:var(--c-violet-900);
    --fg:var(--c-white);
    --fg-muted:#C9C0DC;
    --border:rgba(255,255,255,.16);
    --accent-text:var(--c-cyan);   /* su viola scuro il ciano puro ha ~9:1 */
  }
}

/* ==========================================================================
   LAYER: base
   ========================================================================== */
@layer base {
  html{scroll-behavior:smooth}
  @media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
  /* L'header sticky non deve coprire il titolo di sezione quando si atterra
     su un'ancora: questo margine e' l'altezza dell'header + un po' d'aria. */
  :target{scroll-margin-top:6.5rem}
  [id]{scroll-margin-top:6.5rem}

  body{
    margin:0;background:var(--bg);color:var(--fg);
    font-family:var(--ff-sans);font-size:var(--fs-body);line-height:var(--lh-body);
    font-weight:400;-webkit-font-smoothing:antialiased;
    overflow-x:hidden;   /* rete di sicurezza contro lo scroll orizzontale */
  }

  h1,h2,h3,h4{font-weight:700;line-height:var(--lh-heading);text-wrap:balance;letter-spacing:-.015em}
  h1{font-size:var(--fs-display);line-height:var(--lh-display);letter-spacing:-.025em}
  h2{font-size:var(--fs-h2)}
  h3{font-size:var(--fs-h3)}
  p{text-wrap:pretty}
  p,li{max-width:68ch}

  a{color:var(--accent-text);text-underline-offset:.18em;text-decoration-thickness:1px}
  a:hover{text-decoration-thickness:2px}

  /* Focus visibile e coerente ovunque: mai outline:none. */
  :focus-visible{
    outline:2px solid var(--accent-text);outline-offset:2px;border-radius:2px}
  .is-dark :focus-visible{outline-color:var(--c-cyan)}

  ::selection{background:var(--c-cyan);color:var(--c-ink)}

  strong,b{font-weight:600}
}

/* ==========================================================================
   LAYER: layout
   ========================================================================== */
@layer layout {
  .container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}
  .section{padding-block:var(--section-y);background:var(--bg);color:var(--fg)}
  .section--gray{--bg:var(--c-gray-050)}
  .section--cyan{--bg:var(--c-cyan-050)}
  .section--dark{background:linear-gradient(135deg,#160A37 0%,#241046 60%,#3B1466 100%)}
  .section__head{margin-bottom:clamp(2rem,5vw,3.5rem);max-width:58ch}
  .section__head p{color:var(--fg-muted);font-size:var(--fs-lead);margin-top:var(--s-4)}

  .grid{display:grid;gap:var(--s-5)}
  @media (min-width:640px){ .grid--2{grid-template-columns:repeat(2,1fr)} }
  @media (min-width:900px){
    .grid--3{grid-template-columns:repeat(3,1fr)}
    .grid--4{grid-template-columns:repeat(4,1fr)}
  }
  @media (min-width:640px) and (max-width:899px){ .grid--4,.grid--3{grid-template-columns:repeat(2,1fr)} }
}

/* ==========================================================================
   LAYER: components
   ========================================================================== */
@layer components {

  /* ── Skip link ─────────────────────────────────────────────────────────── */
  .skip-link{
    position:absolute;left:var(--s-4);top:var(--s-4);z-index:200;
    transform:translateY(-200%);
    background:var(--c-cyan);color:var(--c-ink);font-weight:600;
    padding:var(--s-3) var(--s-5);border-radius:var(--r-sm);text-decoration:none;
    transition:transform var(--dur) var(--ease)}
  .skip-link:focus{transform:translateY(0)}

  /* ── Occhiello (eyebrow) ───────────────────────────────────────────────── */
  .eyebrow{
    font-family:var(--ff-mono);font-weight:500;font-size:var(--fs-mono);
    letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);
    margin:0 0 var(--s-3)}

  /* ── Pulsanti ──────────────────────────────────────────────────────────── */
  .btn{
    display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);
    min-height:44px;padding:var(--s-3) var(--s-5);   /* 44px = target touch minimo */
    border-radius:var(--r-sm);font-weight:600;font-size:var(--fs-body);
    text-decoration:none;text-align:center;line-height:1.2;
    transition:background-color var(--dur) var(--ease),transform var(--dur) var(--ease),
               border-color var(--dur) var(--ease),color var(--dur) var(--ease)}
  .btn:hover{text-decoration:none}
  .btn:active{transform:translateY(1px)}

  /* Primario: fondo ciano + testo inchiostro (~10:1). Identico su chiaro e scuro. */
  .btn--primary{background:var(--c-cyan);color:var(--c-ink);border:1px solid var(--c-cyan)}
  .btn--primary:hover{background:#6BE6E7;border-color:#6BE6E7}

  .btn--secondary{background:transparent;color:var(--fg);border:1px solid var(--border)}
  .btn--secondary:hover{border-color:var(--fg);background:rgba(22,10,55,.03)}
  .is-dark .btn--secondary:hover{background:rgba(255,255,255,.08)}

  .btn--full{width:100%}
  .btn[aria-disabled="true"],.btn:disabled{opacity:.6;cursor:not-allowed;transform:none}

  /* ── Header ────────────────────────────────────────────────────────────── */
  .site-header{
    position:sticky;top:0;z-index:100;
    background:rgba(255,255,255,.85);backdrop-filter:blur(10px);
    border-bottom:1px solid transparent;
    transition:background-color var(--dur) var(--ease),border-color var(--dur) var(--ease),
               box-shadow var(--dur) var(--ease)}
  .site-header.is-scrolled{background:rgba(255,255,255,.97);border-bottom-color:var(--c-gray-200);box-shadow:var(--sh-1)}
  .site-header__inner{display:flex;align-items:center;gap:var(--s-5);min-height:72px}
  .site-header__logo{display:flex;align-items:center;flex:0 0 auto;margin-right:auto}
  .site-header__logo img{width:148px;height:31.7px}   /* dimensioni esplicite: CLS = 0 */

  .nav{display:none}
  .nav__list{display:flex;align-items:center;gap:var(--s-5);margin:0}
  .nav__link{
    color:var(--c-ink-700);text-decoration:none;font-size:.9375rem;font-weight:400;
    padding:var(--s-2) 0;border-bottom:2px solid transparent;
    transition:color var(--dur) var(--ease),border-color var(--dur) var(--ease)}
  .nav__link:hover{color:var(--c-ink);border-bottom-color:var(--c-cyan)}

  .site-header__actions{display:flex;align-items:center;gap:var(--s-3);flex:0 0 auto}
  .site-header__login{
    display:none;color:var(--c-ink-700);text-decoration:none;font-size:.9375rem;
    padding:var(--s-2) var(--s-2)}
  .site-header__login:hover{color:var(--c-ink);text-decoration:underline}
  .site-header__cta{padding-inline:var(--s-4);font-size:.9375rem}
  .site-header__cta-mini{display:none}
  @media (max-width:519px){
    .site-header__logo img{width:124px;height:26.5px}
    .site-header__inner{gap:var(--s-3)}
    .site-header__cta{padding-inline:var(--s-3)}
    .site-header__cta-mini{display:inline}
    /* Nascosta alla vista ma non agli screen reader: l'etichetta letta resta intera. */
    .site-header__cta-full{position:absolute;width:1px;height:1px;overflow:hidden;
      clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
  }

  .nav-toggle{
    display:inline-flex;align-items:center;justify-content:center;
    width:44px;height:44px;border-radius:var(--r-sm);border:1px solid var(--c-gray-200);
    color:var(--c-ink);flex:0 0 auto}
  .nav-toggle:hover{background:var(--c-gray-050)}
  .nav-toggle__bar{display:block;width:18px;height:2px;background:currentColor;border-radius:2px;
    transition:transform var(--dur) var(--ease),opacity var(--dur) var(--ease)}
  .nav-toggle__bars{display:grid;gap:4px}
  .nav-toggle[aria-expanded="true"] .nav-toggle__bar:nth-child(1){transform:translateY(6px) rotate(45deg)}
  .nav-toggle[aria-expanded="true"] .nav-toggle__bar:nth-child(2){opacity:0}
  .nav-toggle[aria-expanded="true"] .nav-toggle__bar:nth-child(3){transform:translateY(-6px) rotate(-45deg)}

  /* Menu mobile: pannello a tutta larghezza sotto l'header */
  .nav[data-mobile-open]{
    display:block;position:absolute;left:0;right:0;top:100%;
    background:var(--c-white);border-bottom:1px solid var(--c-gray-200);
    box-shadow:var(--sh-2);padding:var(--s-4) 0 var(--s-6)}
  .nav[data-mobile-open] .nav__list{flex-direction:column;align-items:stretch;gap:0;padding-inline:var(--gutter)}
  .nav[data-mobile-open] .nav__link{
    display:block;padding:var(--s-4) 0;border-bottom:1px solid var(--c-gray-200);
    font-size:1.0625rem;min-height:44px}
  .nav[data-mobile-open] .nav__link:hover{border-bottom-color:var(--c-gray-200)}
  /* Compare solo dentro il pannello mobile aperto. */
  .nav__mobile-login{display:none}
  .nav[data-mobile-open] .nav__mobile-login{display:block;padding:var(--s-4) var(--gutter) 0;font-weight:600}

  @media (min-width:900px){
    .nav{display:block}
    .site-header__login{display:inline-block}
    .nav-toggle{display:none}
  }

  /* ── Hero ──────────────────────────────────────────────────────────────── */
  .hero{padding-block:clamp(2.5rem,7vw,5rem) clamp(3rem,8vw,6rem);overflow:hidden}
  .hero__grid{display:grid;gap:clamp(2.5rem,6vw,4rem);align-items:center}
  /* Senza questo, la larghezza minima del mock (tabella + KPI) allarga la
     traccia della griglia oltre il viewport e nasce lo scroll orizzontale. */
  .hero__grid > *{min-width:0}
  @media (min-width:1000px){
    .hero__grid{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}
  }
  .hero h1{margin-bottom:var(--s-5)}
  /* Nelle pagine di settore l hero e a piena larghezza: senza un limite,
     su schermi molto ampi il titolo diventerebbe una riga unica lunghissima. */
  .hero--page h1{max-width:26ch}
  .hero--page .hero__reassure{max-width:none}
  .hero__lead{font-size:var(--fs-lead);color:var(--c-ink-700);max-width:52ch;margin-bottom:var(--s-6)}
  .hero__actions{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-bottom:var(--s-5)}
  /* Rassicurazioni sotto le CTA: piccola checklist, due colonne quando c'e' spazio.
     I separatori <i>&middot;</i> restano nel markup per la lettura senza CSS. */
  .hero__reassure{
    display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,15rem),1fr));
    gap:var(--s-2) var(--s-5);font-size:.875rem;line-height:1.45;
    color:var(--c-ink-700);margin:0;max-width:none}
  .hero__reassure span{display:flex;gap:var(--s-2);align-items:flex-start}
  .hero__reassure span::before{
    content:"";flex:0 0 16px;height:16px;margin-top:1px;border-radius:50%;
    background:var(--c-cyan-050) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230D7D7E' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/10px no-repeat}
  .hero__reassure i{display:none}

  /* ── Mock della dashboard (HTML/CSS/SVG, nessuno screenshot) ───────────── */
  .mock{
    background:var(--c-white);border:1px solid var(--c-gray-200);border-radius:var(--r-md);
    box-shadow:var(--sh-3);overflow:hidden;font-family:var(--ff-mono);
    container-type:inline-size}
  .mock__bar{
    display:flex;align-items:center;gap:var(--s-2);
    padding:10px var(--s-4);background:var(--c-gray-050);border-bottom:1px solid var(--c-gray-200)}
  .mock__dot{width:9px;height:9px;border-radius:50%;background:var(--c-gray-200)}
  .mock__title{font-size:11px;color:var(--c-gray-600);margin-left:var(--s-2);letter-spacing:.02em}
  .mock__body{padding:var(--s-4);display:grid;gap:var(--s-4)}
  .mock__kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s-3)}
  @container (min-width:500px){.mock__kpis{grid-template-columns:repeat(4,1fr)}}
  /* Sotto i 430px di CONTENITORE si toglie la colonna del punto vendita:
     meglio tre colonne leggibili che quattro troncate. */
  @container (max-width:430px){
    .mock__body{padding:12px;gap:12px}
    .mock__table th,.mock__table td{padding:7px 8px}
    .mock__table th:nth-child(2),.mock__table td:nth-child(2){display:none}
    .mock__table th:nth-child(1),.mock__table td:nth-child(1){width:42%}
    .mock__table th:nth-child(3),.mock__table td:nth-child(3){width:22%}
    .mock__table th:nth-child(4),.mock__table td:nth-child(4){width:36%}
    .badge{padding:2px 6px;font-size:9px}
  }
  .kpi{border:1px solid var(--c-gray-200);border-radius:10px;padding:10px 12px;background:var(--c-white);
    min-width:0;overflow:hidden}
  .kpi__label{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--c-gray-600);
    line-height:1.35;display:block;min-height:2.7em}
  .kpi__value{font-size:1.0625rem;font-weight:500;color:var(--c-ink);display:block;margin-top:2px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .kpi__delta{font-size:10px;font-weight:500;display:block;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .kpi__delta--up{color:#0F7A5D}
  .kpi__delta--warn{color:#8A5B06}
  .kpi__delta--flat{color:var(--c-gray-600)}

  .mock__chart{border:1px solid var(--c-gray-200);border-radius:10px;padding:12px;background:var(--c-white)}
  .mock__chart-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;gap:var(--s-3)}
  .mock__chart-title{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--c-gray-600)}
  .mock__legend{display:flex;gap:10px;font-size:9.5px;color:var(--c-gray-600);flex-wrap:wrap}
  .mock__legend b{display:inline-block;width:14px;height:2px;vertical-align:middle;margin-right:4px;border-radius:2px}

  .mock__table{border:1px solid var(--c-gray-200);border-radius:10px;overflow:hidden}
  .mock__table-head{
    font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--c-gray-600);
    padding:8px 12px;background:var(--c-gray-050);border-bottom:1px solid var(--c-gray-200)}
  .mock__table table{font-size:11px;table-layout:fixed}
  .mock__table th,.mock__table td{padding:7px 12px;text-align:left;border-bottom:1px solid var(--c-gray-200);
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mock__table th:nth-child(1),.mock__table td:nth-child(1){width:38%}
  .mock__table th:nth-child(2),.mock__table td:nth-child(2){width:24%}
  .mock__table th:nth-child(3),.mock__table td:nth-child(3){width:17%}
  .mock__table th:nth-child(4),.mock__table td:nth-child(4){width:21%}
  .mock__table tr:last-child td{border-bottom:0}
  .mock__table th{font-weight:500;color:var(--c-gray-600);font-size:9.5px;text-transform:uppercase;letter-spacing:.05em}
  .mock__table td:last-child,.mock__table th:last-child{text-align:right}
  .badge{
    display:inline-block;padding:2px 8px;border-radius:var(--r-pill);
    font-size:9.5px;font-weight:500;letter-spacing:.03em;white-space:nowrap}
  .badge--danger{background:#FDECEC;color:#B02424}
  .badge--warning{background:#FDF3E3;color:#8A5B06}
  .badge--ok{background:#E6FAF4;color:#0F7A5D}

  /* ── Card ──────────────────────────────────────────────────────────────── */
  .card{
    background:var(--bg);border:1px solid var(--border);border-radius:var(--r-md);
    padding:var(--s-5);height:100%;
    transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),
               transform var(--dur) var(--ease)}
  .card h3{margin-bottom:var(--s-3);font-size:1.0625rem;letter-spacing:-.01em}
  .card p{color:var(--fg-muted);font-size:.9375rem;margin:0}
  .card__icon{
    width:40px;height:40px;margin-bottom:var(--s-4);color:var(--accent-text);
    display:flex;align-items:center;justify-content:center;
    border:1px solid var(--border);border-radius:10px}
  .card__icon svg{width:20px;height:20px}

  /* ── Passi ("Come funziona") ───────────────────────────────────────────── */
  .steps{display:grid;gap:var(--s-6);counter-reset:step;position:relative}
  @media (min-width:900px){
    .steps{grid-template-columns:repeat(3,1fr);gap:var(--s-7)}
  }
  .step{position:relative}
  /* Linea fra un cerchio e il successivo: parte dal bordo del numero e si
     ferma prima del cerchio della colonna accanto (gap = --s-7). */
  @media (min-width:900px){
    .step:not(:last-child)::after{
      content:"";position:absolute;top:21px;left:60px;right:calc(16px - var(--s-7));
      height:2px;background:var(--c-cyan);opacity:.45}
  }
  .step__num{
    position:relative;z-index:1;
    width:44px;height:44px;border-radius:50%;background:var(--c-cyan);color:var(--c-ink);
    display:flex;align-items:center;justify-content:center;
    font-family:var(--ff-mono);font-weight:500;font-size:1rem;margin-bottom:var(--s-4)}
  .step h3{margin-bottom:var(--s-3)}
  .step p{color:var(--fg-muted);font-size:.9375rem}

  /* ── Tab dei moduli / accordion su mobile ──────────────────────────────── */
  /* Senza JS la barra dei tab non farebbe nulla: resta nascosta e i pannelli
     si leggono tutti in sequenza. Compare solo se il JS c'e' ED e' desktop. */
  .modules__list{display:none}
  @media (min-width:840px){
    .js .modules__list{
      display:flex;gap:var(--s-2);flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin;
      margin-bottom:var(--s-6);border-bottom:1px solid var(--border);padding-bottom:var(--s-4)}
    .js .modules__tab{flex:0 0 auto;white-space:nowrap}
  }
  .modules__tab{
    min-height:44px;padding:var(--s-2) var(--s-4);border-radius:var(--r-pill);
    border:1px solid var(--border);background:transparent;color:var(--c-ink-700);
    font-size:.9375rem;font-weight:400;
    transition:background-color var(--dur) var(--ease),color var(--dur) var(--ease),
               border-color var(--dur) var(--ease)}
  .modules__tab:hover{border-color:var(--c-ink);color:var(--c-ink)}
  .modules__tab[aria-selected="true"]{background:var(--c-ink);color:var(--c-white);border-color:var(--c-ink);font-weight:600}

  /* Il corpo del pannello e' la griglia a due colonne: cosi' su mobile
     l'accordion puo' nasconderlo per intero lasciando l'intestazione. */
  [data-accordion-body]{display:grid;gap:clamp(1.5rem,4vw,3rem)}
  @media (min-width:840px){
    [data-accordion-body]{grid-template-columns:minmax(0,1fr) minmax(0,.85fr);align-items:center}
  }
  .modules__panel h3{margin-bottom:var(--s-3)}
  .modules__panel h3 + p{color:var(--fg-muted);margin-bottom:var(--s-5)}
  .modules__panel + .modules__panel{margin-top:var(--s-7);padding-top:var(--s-7);border-top:1px solid var(--border)}
  .modules__media{border-radius:var(--r-md);overflow:hidden}
  .modules__panel code{font-family:var(--ff-mono);font-size:.9em;background:var(--c-gray-050);
    border:1px solid var(--border);border-radius:4px;padding:1px 5px}

  /* Elenco con spunta ciano */
  .ticks{display:grid;gap:var(--s-3);margin:0}
  .ticks li{display:grid;grid-template-columns:20px 1fr;gap:var(--s-3);align-items:start;
    font-size:.9375rem;color:var(--fg)}
  .ticks svg{width:20px;height:20px;color:var(--accent-text);margin-top:2px}

  /* Intestazione accordion: solo su mobile e solo con JS attivo. */
  .modules__accordion-btn{display:none}
  @media (max-width:839px){
    .js .modules__accordion-btn{
      display:flex;width:100%;text-align:left;align-items:center;justify-content:space-between;
      gap:var(--s-3);min-height:44px;padding:var(--s-4) 0;
      border-bottom:1px solid var(--border);font-weight:600;font-size:1.0625rem}
    /* In modalita' accordion i pannelli si impilano senza separatori doppi. */
    .js .modules__panel + .modules__panel{margin-top:0;padding-top:0;border-top:0}
    .js [data-accordion-body]{padding-top:var(--s-5)}
  }
  .modules__accordion-btn svg{width:18px;height:18px;flex:0 0 auto;color:var(--accent-text);
    transition:transform var(--dur) var(--ease)}
  .modules__accordion-btn[aria-expanded="true"] svg{transform:rotate(180deg)}

  /* ── Approfondimenti alternati ─────────────────────────────────────────── */
  .feature{display:grid;gap:clamp(2rem,5vw,4rem);align-items:center}
  @media (min-width:900px){
    .feature{grid-template-columns:repeat(2,minmax(0,1fr))}
    .feature--reverse .feature__media{order:-1}
  }
  .feature + .feature{margin-top:clamp(4rem,9vw,7rem)}
  .feature h3{font-size:var(--fs-h2);margin-bottom:var(--s-4)}
  /* Si mira al paragrafo che segue l'h3: `.feature > div > p` avrebbe colpito
     anche .eyebrow, che sta nello stesso layer ma ha specificita' minore. */
  .feature h3 + p{color:var(--fg-muted);font-size:var(--fs-lead);margin-bottom:var(--s-5)}
  .feature__link{
    display:inline-flex;align-items:center;gap:var(--s-2);margin-top:var(--s-5);
    font-weight:600;text-decoration:none;min-height:44px}
  .feature__link:hover{text-decoration:underline}
  .feature__link svg{width:16px;height:16px;transition:transform var(--dur) var(--ease)}
  .feature__link:hover svg{transform:translateX(3px)}

  /* ── Finta conversazione con l'assistente ──────────────────────────────── */
  .chat{
    background:var(--c-white);border:1px solid var(--c-gray-200);border-radius:var(--r-md);
    box-shadow:var(--sh-2);overflow:hidden}
  .chat__head{
    display:flex;align-items:center;gap:var(--s-2);padding:10px var(--s-4);
    background:var(--c-gray-050);border-bottom:1px solid var(--c-gray-200);
    font-family:var(--ff-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--c-gray-600)}
  .chat__head svg{width:14px;height:14px;flex:0 0 auto}
  .chat__body{padding:var(--s-4);display:grid;gap:var(--s-4)}
  .chat__msg{display:grid;gap:6px}
  .chat__who{font-family:var(--ff-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--c-gray-600)}
  .chat__q{background:var(--c-gray-050);border:1px solid var(--c-gray-200);border-radius:10px;
    padding:10px 12px;font-size:.9375rem;margin:0;max-width:none}
  .chat__a{border-left:2px solid var(--c-cyan);padding-left:12px}
  .chat__a table{font-family:var(--ff-mono);font-size:11px;margin-block:8px}
  .chat__a th,.chat__a td{padding:6px 8px;border-bottom:1px solid var(--c-gray-200);text-align:left}
  .chat__a th{font-weight:500;color:var(--c-gray-600);font-size:9.5px;text-transform:uppercase;letter-spacing:.05em}
  .chat__a td:last-child,.chat__a th:last-child{text-align:right}
  .chat__reco{font-size:.9375rem;margin:8px 0 0;max-width:none}

  /* ── Tile dei settori ──────────────────────────────────────────────────── */
  .sector{
    display:flex;flex-direction:column;gap:var(--s-3);
    background:var(--c-white);border:1px solid var(--c-gray-200);border-radius:var(--r-md);
    padding:var(--s-5);text-decoration:none;color:var(--c-ink);height:100%;
    transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),
               transform var(--dur) var(--ease)}
  a.sector:hover{border-color:var(--c-cyan);box-shadow:var(--sh-2);transform:translateY(-2px);text-decoration:none}
  .sector__icon{width:28px;height:28px;color:var(--c-cyan-700)}
  .sector h3{font-size:1.0625rem;margin:0}
  .sector__lex{font-family:var(--ff-mono);font-size:var(--fs-mono);color:var(--c-gray-600);margin:0;line-height:1.6}
  .sector__go{margin-top:auto;padding-top:var(--s-3);font-size:.875rem;font-weight:600;color:var(--c-cyan-700);
    display:inline-flex;align-items:center;gap:6px}
  .sector__go svg{width:14px;height:14px}
  .sector--static{cursor:default}

  /* ── "Cosa succede in una demo" ────────────────────────────────────────── */
  .demo-steps{display:grid;gap:var(--s-5);counter-reset:d}
  @media (min-width:900px){.demo-steps{grid-template-columns:repeat(3,1fr)}}
  .demo-step{border-left:2px solid var(--c-cyan);padding-left:var(--s-5)}
  .demo-step__t{font-family:var(--ff-mono);font-size:var(--fs-mono);letter-spacing:.08em;
    text-transform:uppercase;color:var(--accent-text);margin-bottom:var(--s-2)}
  .demo-step h3{font-size:1.0625rem;margin-bottom:var(--s-2)}
  .demo-step p{color:var(--fg-muted);font-size:.9375rem;margin:0}

  /* ── Sicurezza (sezione scura) ─────────────────────────────────────────── */
  .security{display:grid;gap:var(--s-6)}
  @media (min-width:760px){.security{grid-template-columns:repeat(2,1fr);gap:var(--s-6) var(--s-7)}}
  .security__item{display:grid;grid-template-columns:44px 1fr;gap:var(--s-4);align-items:start}
  .security__icon{
    width:44px;height:44px;border:1px solid rgba(66,222,223,.4);border-radius:10px;
    display:flex;align-items:center;justify-content:center;color:var(--c-cyan)}
  .security__icon svg{width:22px;height:22px}
  .security__item h3{font-size:1.0625rem;margin-bottom:var(--s-2)}
  .security__item p{color:var(--fg-muted);font-size:.9375rem;margin:0}
  .security__foot{
    margin-top:var(--s-7);padding-top:var(--s-5);border-top:1px solid var(--border);
    font-size:var(--fs-lead)}

  /* ── FAQ ───────────────────────────────────────────────────────────────── */
  .faq{max-width:820px}
  .faq-layout .faq{max-width:none}
  .faq__item{border-bottom:1px solid var(--border)}
  .faq__item summary{
    display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
    padding:var(--s-5) 0;min-height:44px;cursor:pointer;
    font-weight:600;font-size:1.0625rem;list-style:none}
  .faq__item summary::-webkit-details-marker{display:none}
  .faq__item summary:hover{color:var(--accent-text)}
  .faq__icon{flex:0 0 auto;width:20px;height:20px;color:var(--accent-text);
    transition:transform var(--dur) var(--ease)}
  .faq__item[open] .faq__icon{transform:rotate(45deg)}
  .faq__answer{padding:0 0 var(--s-5);color:var(--fg-muted);max-width:68ch}
  .faq__answer p{margin:0;color:inherit}

  /* ── CTA finale + form ─────────────────────────────────────────────────── */
  .cta-final__grid{display:grid;gap:clamp(2.5rem,6vw,4rem);align-items:start}
  @media (min-width:960px){.cta-final__grid{grid-template-columns:minmax(0,1fr) minmax(0,.95fr)}}
  .cta-final h2{margin-bottom:var(--s-5)}
  .cta-final__lead{font-size:var(--fs-lead);color:var(--fg-muted);margin-bottom:var(--s-6)}
  .cta-final__points{display:grid;gap:var(--s-4);margin:0}
  .cta-final__points li{display:grid;grid-template-columns:20px 1fr;gap:var(--s-3);align-items:start;
    font-size:.9375rem}
  .cta-final__points svg{width:20px;height:20px;color:var(--c-cyan);margin-top:2px}

  .form-card{
    background:var(--c-white);color:var(--c-ink);border-radius:var(--r-md);
    padding:clamp(1.5rem,4vw,2.25rem);box-shadow:var(--sh-3)}
  .form-card h3{font-size:1.25rem;margin-bottom:var(--s-2)}
  .form-card__intro{font-size:.9375rem;color:var(--c-gray-600);margin-bottom:var(--s-5)}
  .form{display:grid;gap:var(--s-4)}
  .form__row{display:grid;gap:var(--s-4)}
  @media (min-width:560px){.form__row--2{grid-template-columns:repeat(2,1fr)}}
  .field{display:grid;gap:6px}
  .field > label{font-size:.875rem;font-weight:600;color:var(--c-ink)}
  /* --c-danger su bianco da 3,56:1: va bene per un bordo, non per un glifo.
     L asterisco e comunque solo un rinforzo visivo: l obbligatorieta la
     comunica l attributo required, letto dagli screen reader. */
  .field .req{color:#C32B2B;font-weight:400}
  .input,.select,.textarea{
    width:100%;min-height:44px;padding:10px 12px;
    border:1px solid var(--c-gray-200);border-radius:var(--r-sm);background:var(--c-white);
    font-size:1rem;color:var(--c-ink);
    transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
  .textarea{min-height:88px;resize:vertical;line-height:1.5}
  .select{appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23737373' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 8l5 5 5-5'/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-position:right 12px center;background-size:18px;padding-right:38px}
  .input:hover,.select:hover,.textarea:hover{border-color:var(--c-gray-400)}
  .input:focus,.select:focus,.textarea:focus{
    border-color:var(--c-cyan-700);box-shadow:0 0 0 3px rgba(13,125,126,.18);outline:none}
  .input:focus-visible,.select:focus-visible,.textarea:focus-visible{outline:2px solid var(--c-cyan-700);outline-offset:1px}
  .input[aria-invalid="true"],.select[aria-invalid="true"],.textarea[aria-invalid="true"]{border-color:var(--c-danger)}
  .field__error{font-size:.8125rem;color:#C32B2B;min-height:0}
  .field__error:empty{display:none}
  .field__hint{font-size:.8125rem;color:var(--c-gray-600)}

  .check{display:grid;grid-template-columns:20px 1fr;gap:var(--s-3);align-items:start;
    font-size:.875rem;color:var(--c-ink-700);line-height:1.5}
  .check input{width:20px;height:20px;margin:1px 0 0;accent-color:var(--c-cyan-700);flex:0 0 auto}
  .check a{color:var(--c-cyan-700)}

  .form__note{font-size:.8125rem;color:var(--c-gray-600);text-align:center;margin:0}
  .form__status{
    padding:var(--s-4);border-radius:var(--r-sm);font-size:.9375rem;margin:0}
  .form__status:empty{display:none;padding:0}
  .form__status--error{background:#FDECEC;color:#9C1F1F;border:1px solid #F6C9C9}
  .form__status--ok{background:#E6FAF4;color:#0B6349;border:1px solid #B8EBDC}

  /* Honeypot antispam: invisibile agli umani, appetitoso per i bot. */
  .honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}


  /* ══ Aggiunte novembre 2026 ═════════════════════════════════════════════ */

  /* Testata divisa: titolo a sinistra, testo di apertura a destra, allineati in basso. */
  @media (min-width:1000px){
    .section__head--split{max-width:none;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);
      gap:var(--s-8);align-items:end}
    .section__head--split h2{max-width:22ch}
    .section__head--split > p{margin:0;padding-bottom:6px}
  }
  .subhead{font-family:var(--ff-mono);font-size:var(--fs-mono);font-weight:500;letter-spacing:.08em;
    text-transform:uppercase;color:var(--c-gray-600);margin:clamp(2.5rem,5vw,3.5rem) 0 var(--s-5)}
  /* Titoli delle card a 4 colonne alla stessa altezza: il testo parte sulla stessa riga. */
  @media (min-width:900px){.grid--4 .card h3{min-height:2.6em}}

  .btn svg{width:18px;height:18px;flex:0 0 auto}
  .btn--lg{min-height:52px;font-size:1.0625rem}
  .btn--primary{transition:background-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease),transform var(--dur) var(--ease)}
  .btn--primary:hover{background:#5BE6E7;box-shadow:0 6px 20px rgba(66,222,223,.35);transform:translateY(-1px)}
  @media (prefers-reduced-motion:reduce){.btn--primary:hover{transform:none}}

  /* ── Dati di contesto sotto il problema ── */
  /* Pannello unico "il costo + da dove arriva": dati in alto, cause sotto. */
  .evidence{background:var(--c-white);border:1px solid var(--c-gray-200);border-radius:var(--r-md);
    box-shadow:var(--sh-1);overflow:hidden}
  .stats{display:grid;gap:var(--s-5);margin:0;padding:clamp(1.5rem,3vw,2.25rem) clamp(1.25rem,3vw,2.5rem)}
  @media (min-width:760px){
    .stats{grid-template-columns:repeat(3,1fr);gap:0}
    .stat{padding-inline:clamp(1rem,3vw,2.5rem)}
    .stat:first-child{padding-left:0}
    .stat + .stat{border-left:1px solid var(--c-gray-200)}
  }
  .stat{display:flex;flex-direction:column;gap:var(--s-2)}
  .stat__value{order:-1;margin:0;font-size:clamp(2.25rem,1.6rem + 2.4vw,3.25rem);font-weight:700;
    letter-spacing:-.03em;line-height:1;color:var(--c-violet-700)}
  .stat__label{color:var(--c-ink-700);font-size:.9375rem;max-width:28ch}
  .evidence__causes{background:var(--c-gray-050);border-top:1px solid var(--c-gray-200);
    padding:clamp(1.5rem,3vw,2.25rem) clamp(1.25rem,3vw,2.5rem)}
  .evidence__label{font-family:var(--ff-mono);font-size:var(--fs-mono);font-weight:500;letter-spacing:.08em;
    text-transform:uppercase;color:var(--c-violet-700);margin:0 0 var(--s-5)}
  .causes{display:grid;gap:var(--s-5);margin:0;padding:0;list-style:none}
  @media (min-width:640px){.causes{grid-template-columns:repeat(2,1fr)}}
  /* Su desktop quattro colonne con subgrid: icone, titoli e testi sulla stessa riga. */
  @media (min-width:1000px){
    .causes{grid-template-columns:repeat(4,1fr);grid-template-rows:auto auto auto;gap:var(--s-3) 0}
    .cause{grid-row:span 3;display:grid;grid-template-rows:subgrid;gap:var(--s-3);
      padding-inline:var(--s-5)}
    .cause:first-child{padding-left:0}
    .cause:last-child{padding-right:0}
    .cause + .cause{border-left:1px solid var(--c-gray-200)}
  }
  .cause__icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;
    border-radius:10px;background:var(--c-white);border:1px solid var(--c-gray-200);color:var(--c-cyan-700)}
  .cause__icon svg{width:18px;height:18px}
  .cause h3{font-size:1rem;line-height:1.3;margin:0}
  .cause p{font-size:.9375rem;color:var(--fg-muted);margin:0}
  @media (max-width:999px){.cause{display:grid;gap:var(--s-2)}}
  .stats__src{margin:0;padding:var(--s-3) clamp(1.25rem,3vw,2.5rem);border-top:1px solid var(--c-gray-200);background:var(--c-gray-050);max-width:none;font-family:var(--ff-mono);font-size:var(--fs-mono);color:var(--c-gray-600)}

  /* ── Percorso: demo → blind test → onboarding ── */
  .path{display:grid;gap:var(--s-4);counter-reset:path}
  @media (min-width:900px){.path{grid-template-columns:repeat(3,1fr);gap:var(--s-5)}}
  .path__step{position:relative;counter-increment:path;background:var(--c-white);
    border:1px solid var(--c-gray-200);border-radius:var(--r-md);padding:var(--s-6) var(--s-5) var(--s-5)}
  .path__step::before{content:"0" counter(path);position:absolute;top:var(--s-5);right:var(--s-5);
    font-family:var(--ff-mono);font-size:.8125rem;color:var(--c-gray-400)}
  .path__when{font-family:var(--ff-mono);font-size:var(--fs-mono);letter-spacing:.08em;
    text-transform:uppercase;color:var(--accent-text);margin:0 0 var(--s-3)}
  .path__step h3{font-size:1.1875rem;margin-bottom:var(--s-2)}
  .path__step p:last-child{color:var(--fg-muted);font-size:.9375rem;margin:0}
  .path__step--key{border-color:var(--c-violet-700);box-shadow:0 0 0 1px var(--c-violet-700),var(--sh-2)}
  .path__step--key .path__when{color:var(--c-violet-700)}
  @media (min-width:900px){
    .path__step:not(:last-child)::after{content:"";position:absolute;top:50%;right:calc(-1 * var(--s-5) / 2 - 6px);
      width:12px;height:12px;border-top:2px solid var(--c-gray-400);border-right:2px solid var(--c-gray-400);
      transform:translateY(-50%) rotate(45deg);z-index:1}
  }

  /* ── FAQ a due colonne su desktop ── */
  @media (min-width:1000px){
    .faq-layout{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.4fr);gap:var(--s-8);align-items:start}
    .faq-layout .section__head{position:sticky;top:7rem;margin-bottom:0}
  }
  .section--gray .faq__item{border-bottom-color:var(--c-gray-200)}

  /* ── Card CTA con il link al modulo esterno ── */
  .cta-card__kicker{font-family:var(--ff-mono);font-size:var(--fs-mono);letter-spacing:.08em;
    text-transform:uppercase;color:var(--c-cyan-700);margin:0 0 var(--s-3)}
  .cta-card__steps{display:grid;gap:var(--s-4);margin:0 0 var(--s-6);padding:0;list-style:none}
  .cta-card__steps li{display:grid;grid-template-columns:28px 1fr;gap:var(--s-3);align-items:start}
  .cta-card__steps li > span{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;
    background:var(--c-cyan-050);color:var(--c-cyan-700);font-family:var(--ff-mono);font-size:.8125rem;font-weight:500}
  .cta-card__steps p{margin:2px 0 0;font-size:.9375rem;color:var(--c-ink-700)}
  .cta-card__steps strong{color:var(--c-ink)}
  .cta-card .form__note{margin-top:var(--s-4);line-height:1.6}
  .cta-card .form__note a{color:var(--c-cyan-700)}

  /* ── Mini-visual "copertura residua" (approfondimento Domanda & Copertura) ── */
  .cov{background:var(--c-white);border:1px solid var(--c-gray-200);border-radius:var(--r-md);
    box-shadow:var(--sh-2);overflow:hidden;font-family:var(--ff-mono)}
  .cov__head{display:flex;justify-content:space-between;gap:var(--s-3);padding:10px var(--s-4);
    background:var(--c-gray-050);border-bottom:1px solid var(--c-gray-200);font-size:11px;color:var(--c-gray-600)}
  .cov__list{position:relative;margin:0;padding:var(--s-5) var(--s-4) var(--s-3);list-style:none;display:grid;gap:14px}
  .cov__row{display:grid;grid-template-columns:7.5rem 1fr 3rem;gap:var(--s-3);align-items:center;font-size:12px;color:var(--c-ink-700)}
  .cov__track{position:relative;height:12px;border-radius:6px;background:var(--c-gray-050);border:1px solid var(--c-gray-200)}
  .cov__track::after{content:"";position:absolute;top:-6px;bottom:-6px;left:var(--lead);border-left:2px dashed var(--c-violet-700)}
  .cov__bar{position:absolute;inset:0 auto 0 0;border-radius:6px}
  .cov__row--danger .cov__bar{background:#F04E4E}
  .cov__row--warn .cov__bar{background:#F5A623}
  .cov__row--ok .cov__bar{background:var(--c-cyan)}
  .cov__days{text-align:right;font-weight:500}
  .cov__row--danger .cov__days{color:#B42323}
  .cov__legend{display:flex;align-items:center;gap:var(--s-2);margin:0;padding:var(--s-2) var(--s-4) var(--s-4);
    font-size:11px;color:var(--c-gray-600);max-width:none}
  .cov__lead-key{width:0;height:14px;border-left:2px dashed var(--c-violet-700)}
  @media (max-width:420px){.cov__row{grid-template-columns:5.5rem 1fr 2.5rem}}


  /* L'attributo hidden deve vincere su display:grid dei corpi accordion. */
  [data-accordion-body][hidden],.modules__panel[hidden]{display:none !important}

  /* In modalita' tab si vede un pannello alla volta: niente separatore sopra. */
  .modules__panel[role="tabpanel"]{margin-top:0 !important;padding-top:0 !important;border-top:0 !important}
  /* Aperto da un link con #panel-...: il browser lo mette a fuoco, ma il riquadro non serve. */
  .modules__panel:target:focus-visible{outline:none}

  /* ── Settori: stesso componente a schede dei moduli, dentro una card bianca ── */
  .sectors__tab{display:inline-flex;align-items:center;gap:var(--s-2);background:var(--c-white)}
  .sectors__tab-icon{display:inline-flex;width:18px;height:18px;color:var(--c-cyan-700)}
  .sectors__tab-icon svg{width:18px;height:18px}
  .modules__tab[aria-selected="true"] .sectors__tab-icon{color:var(--c-cyan)}
  .sectors .modules__list{border-bottom-color:rgba(13,125,126,.18)}
  .sectors .modules__panels{background:var(--c-white);border:1px solid var(--c-gray-200);
    border-radius:var(--r-md);box-shadow:var(--sh-1);padding:clamp(1.25rem,3.5vw,2.75rem)}
  .sectors [data-accordion-body]{align-items:start}
  .sectors__lex{font-family:var(--ff-mono);font-size:var(--fs-mono);letter-spacing:.04em;
    color:var(--c-gray-600);margin:0 0 var(--s-3);max-width:none}
  .sectors__panel h3{font-size:clamp(1.375rem,1.1rem + 1vw,1.75rem);line-height:1.2;letter-spacing:-.015em;max-width:28ch}
  .sectors__panel .ticks strong{color:var(--c-ink);font-weight:600}
  .sectors__panel .ticks span{color:var(--c-ink-700)}
  .sectors__mods{background:var(--c-gray-050);border:1px solid var(--c-gray-200);border-radius:var(--r-md);
    padding:var(--s-5)}
  .sectors__mods-title{font-family:var(--ff-mono);font-size:var(--fs-mono);letter-spacing:.08em;
    text-transform:uppercase;color:var(--c-violet-700);margin:0 0 var(--s-4)}
  .sectors__mods ul{display:grid;gap:var(--s-4);margin:0;padding:0;list-style:none}
  .sectors__mods li{display:grid;gap:2px;padding-left:var(--s-4);border-left:2px solid var(--c-cyan)}
  .sectors__mods b{font-size:.9375rem;color:var(--c-ink)}
  .sectors__mods span{font-size:.875rem;color:var(--c-ink-700);line-height:1.5}
  .sectors__other{display:flex;gap:var(--s-3);align-items:flex-start;margin-top:var(--s-6);
    font-size:.9375rem;color:var(--c-ink-700);max-width:none}
  .sectors__other-icon{display:inline-flex;width:22px;height:22px;color:var(--c-cyan-700);flex:0 0 auto}
  .sectors__other strong{color:var(--c-ink)}
  /* Su mobile (accordion) la card bianca racchiude tutte le voci. */
  @media (max-width:839px){
    .js .sectors .modules__panels{padding-block:var(--s-2)}
    .js .sectors .modules__accordion-btn{border-bottom-color:var(--c-gray-200)}
    .js .sectors .modules__panel:last-child .modules__accordion-btn{border-bottom:0}
  }

  /* ── Footer ────────────────────────────────────────────────────────────── */
  .site-footer{background:var(--c-ink);color:#D8D8D8;padding-block:var(--s-9) var(--s-6);
    --accent-text:var(--c-cyan)}
  .site-footer__grid{display:grid;gap:var(--s-7)}
  @media (min-width:760px){.site-footer__grid{grid-template-columns:1.4fr 1fr 1fr 1fr}}
  .site-footer__brand img{width:168px;height:36px;margin-bottom:var(--s-4)}
  .site-footer__payoff{
    font-family:var(--ff-mono);font-size:var(--fs-mono);letter-spacing:.08em;
    text-transform:uppercase;color:var(--c-cyan);margin-bottom:var(--s-4)}
  .site-footer__desc{font-size:.875rem;color:var(--c-gray-400);max-width:34ch;margin:0}
  .site-footer h2{font-size:.8125rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
    color:var(--c-white);margin-bottom:var(--s-4);font-family:var(--ff-mono)}
  /* Le <ul> del footer non hanno una classe, quindi il reset generale
     (che mira a ul[class]) non le tocca: i pallini vanno tolti qui. */
  .site-footer ul{display:grid;gap:var(--s-3);margin:0;padding:0;list-style:none}
  .site-footer a{color:#D8D8D8;text-decoration:none;font-size:.9375rem}
  .site-footer a:hover{color:var(--c-white);text-decoration:underline}
  .site-footer__bottom{
    margin-top:var(--s-8);padding-top:var(--s-5);border-top:1px solid #2E2E2E;
    display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5);justify-content:space-between;
    font-size:.8125rem;color:var(--c-gray-400)}
  .site-footer__bottom p{margin:0;max-width:none}
  .site-footer__bottom a{font-size:inherit}
  .site-footer__legal{display:flex;gap:var(--s-5);flex-wrap:wrap}

  /* ── Pagine di testo (privacy, note legali) ────────────────────────────── */
  .prose{max-width:72ch}
  .prose h2{font-size:1.5rem;margin-top:var(--s-8);margin-bottom:var(--s-4)}
  .prose h3{font-size:1.125rem;margin-top:var(--s-6);margin-bottom:var(--s-3)}
  .prose p,.prose li{color:var(--c-ink-700);margin-bottom:var(--s-4)}
  .prose ul{list-style:disc;padding-left:1.25rem;margin-bottom:var(--s-5)}
  .prose ul li{margin-bottom:var(--s-2)}
  .prose dl{margin-bottom:var(--s-5)}
  .prose dt{font-weight:600;margin-top:var(--s-4)}
  .prose dd{margin:0 0 var(--s-2);color:var(--c-ink-700)}
  .todo{
    display:inline-block;background:#FFF6DA;border:1px dashed #D9A404;border-radius:4px;
    padding:1px 6px;font-family:var(--ff-mono);font-size:.8125rem;color:#7A5B00}

  /* ── Breadcrumb ────────────────────────────────────────────────────────── */
  .crumbs{font-size:.8125rem;color:var(--c-gray-600);margin-bottom:var(--s-5);font-family:var(--ff-mono)}
  .crumbs ol{display:flex;flex-wrap:wrap;gap:var(--s-2);margin:0;padding:0;list-style:none;align-items:center}
  .crumbs a{color:var(--c-gray-600);text-decoration:none}
  .crumbs a:hover{color:var(--c-ink);text-decoration:underline}
  .crumbs li[aria-current]{color:var(--c-ink-700)}

  /* ── Pagina di ringraziamento ──────────────────────────────────────────── */
  .thanks{text-align:center;padding-block:clamp(4rem,12vw,8rem);max-width:640px;margin-inline:auto}
  .thanks__icon{width:64px;height:64px;margin:0 auto var(--s-6);color:var(--c-cyan-700)}
  .thanks p{margin-inline:auto}
}

/* ==========================================================================
   LAYER: utilities
   ========================================================================== */
@layer utilities {
  .visually-hidden{
    position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
  .center{text-align:center}
  .center p{margin-inline:auto}
  .mt-6{margin-top:var(--s-6)}
  .mt-7{margin-top:var(--s-7)}
  .no-wrap{white-space:nowrap}

  /* Animazione d'ingresso: un solo fade+rise di 12px, mai in loop.
     Si attiva solo quando main.js gira davvero e aggiunge <html class="reveal-on">:
     se lo script non parte (JS disattivato, file aperto con file://, errore di
     rete) il contenuto resta visibile invece di sparire. */
  .reveal-on .reveal{opacity:0;transform:translateY(12px);
    transition:opacity 420ms var(--ease),transform 420ms var(--ease)}
  .reveal-on .reveal.is-visible{opacity:1;transform:none}
  @media (prefers-reduced-motion:reduce){
    .reveal-on .reveal{opacity:1;transform:none;transition:none}
  }
}
