
/* ══════════════════════════════════════════════════════════════════════════════
   EDIL-GB · DESIGN SYSTEM  "Cantiere"
   Navy strutturale + blu azione + ambra da cantiere.
   Tema chiaro e scuro guidati da token. I nomi storici delle variabili
   (--ink, --paper, --giallo, --blu…) sono mantenuti: tutto il codice
   esistente continua a funzionare, cambia solo il valore.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── 1. TOKEN ─────────────────────────────────────────────────────────────── */
:root{
  color-scheme:light;

  /* scala blu · azione */
  --b50:#eff6fc; --b100:#dceaf7; --b200:#bcd7ee; --b300:#8ebada;
  --b400:#4a8dc0; --b500:#1e6ba8; --b600:#175789; --b700:#12456d; --b900:#0c2c47;
  /* scala navy · struttura */
  --n900:#0b1724; --n800:#102132; --n700:#152d43; --n600:#1d3c56;
  /* scala ambra · accento cantiere */
  --a50:#fdf6e8; --a100:#faeaca; --a200:#f3d69b; --a400:#dd9f1e; --a500:#c8860c; --a600:#a06a08; --a700:#7d5307;
  /* neutri */
  --s0:#ffffff; --s25:#fbfcfe; --s50:#f4f7fb; --s100:#eef2f7; --s150:#e6ecf3;
  --s200:#dde4ed; --s300:#c6d0dd; --s400:#9aa8ba; --s500:#6b7c92; --s600:#4d5e75; --s700:#33445c;

  /* semantici · testo */
  --ink:#101c2b;        /* testo primario   */
  --ink2:#4d5e75;       /* testo secondario */
  --ink3:#5c6c85;       /* testo terziario · AA su card e su sfondo pagina */
  /* semantici · superfici */
  --paper:#eef2f7;      /* sfondo app       */
  --bg:#f4f7fb;         /* superficie tenue */
  --card:#ffffff;       /* superficie card  */
  --card2:#f8fafd;      /* superficie annidata */
  --fondo:#f4f7fb; --grigio:#4d5e75; --riga-ev:#eff6fc;
  --rule:#33445c;       /* filetti contabili */
  --line:#e5eaf1;       /* bordo tenue      */
  --line2:#d3dce7;      /* bordo marcato    */

  /* semantici · marchio e stati */
  --blu:#1e6ba8;        --blu-bg:#eff6fc;   --blu-ink:#12456d;
  --giallo:#1e6ba8;     --giallo-scuro:#175789;   /* nome storico = colore azione */
  --ambra:#8d5c06;      --ambra-bg:#fdf6e8; --ambra-line:#eccb8d;
  --verde:#0f7a4d;      --verde-bg:#e7f5ed; --verde-line:#b9e0cb;
  --rosso:#c0392b;      --rosso-bg:#fdecea; --rosso-line:#f4c4bd;

  /* sidebar (sempre scura, in entrambi i temi) */
  --sb-bg:#0e1c2b; --sb-bg2:#132a3f; --sb-ink:#a9bccf; --sb-ink-strong:#ffffff;
  --sb-hover:rgba(255,255,255,.07); --sb-active:rgba(255,255,255,.11);
  --sb-line:rgba(255,255,255,.09); --sb-chip:rgba(255,255,255,.10); --sb-chip-ink:#c6d6e6;

  /* tipografia */
  --sans:'Inter','Inter var',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  --mono:'JetBrains Mono','IBM Plex Mono','SFMono-Regular',ui-monospace,Consolas,monospace;

  /* forma */
  --r:14px; --r-sm:9px; --r-xs:7px; --r-lg:18px; --r-pill:999px;

  /* elevazione */
  --sh-xs:0 1px 2px rgba(16,28,43,.05);
  --sh-sm:0 1px 2px rgba(16,28,43,.06), 0 1px 3px rgba(16,28,43,.05);
  --sh-md:0 2px 4px rgba(16,28,43,.05), 0 8px 20px -6px rgba(16,28,43,.12);
  --sh-lg:0 10px 24px -8px rgba(16,28,43,.18), 0 24px 60px -20px rgba(16,28,43,.28);
  --sh-ring:0 0 0 3px color-mix(in srgb, var(--blu) 22%, transparent);

  /* serie dei grafici · ordine fisso, mai ciclato
     (validata: banda di luminosità, croma, separazione CVD, contrasto) */
  --ch1:#1e6ba8; --ch2:#0f7a4d; --ch3:#b87c0a; --ch4:#7b4fb5; --ch5:#00909e; --ch6:#b8452f;

  /* moto */
  --t-fast:.12s cubic-bezier(.4,0,.2,1);
  --t:.18s cubic-bezier(.4,0,.2,1);
  --t-slow:.28s cubic-bezier(.4,0,.2,1);
}

html[data-theme="dark"]{
  color-scheme:dark;
  --ink:#e8eef6; --ink2:#a9b8ca; --ink3:#8496aa;
  --paper:#0a121c; --bg:#101b28; --card:#131f2e; --card2:#182636;
  --fondo:#101b28; --grigio:#a9b8ca; --riga-ev:#14283c;
  --line:#22344a; --line2:#2e435c; --rule:#7d90a8;

  --blu:#57a6de;        --blu-bg:#12293e;   --blu-ink:#8fc6ec;
  --giallo:#57a6de;     --giallo-scuro:#7cbce9;
  --ambra:#e2ab4a;      --ambra-bg:#31250e; --ambra-line:#5b451a;
  --verde:#4fc48b;      --verde-bg:#0e2c20; --verde-line:#1d5540;
  --rosso:#f0796a;      --rosso-bg:#341a17; --rosso-line:#5e2b25;

  --s0:#131f2e; --s25:#152234; --s50:#182636; --s100:#1c2c3e; --s150:#213448;
  --s200:#22344a; --s300:#2e435c; --s400:#63768c; --s500:#8496aa; --s600:#a9b8ca; --s700:#cfdae6;

  --sb-bg:#08111b; --sb-bg2:#0d1e2e;

  /* serie dei grafici · gradini propri del tema scuro, non un semplice ribaltamento */
  --ch1:#3d8fcc; --ch2:#2fa571; --ch3:#bd8722; --ch4:#9271c9; --ch5:#2fa3ae; --ch6:#d9634f;

  --sh-xs:0 1px 2px rgba(0,0,0,.4);
  --sh-sm:0 1px 2px rgba(0,0,0,.4), 0 1px 3px rgba(0,0,0,.3);
  --sh-md:0 2px 6px rgba(0,0,0,.4), 0 10px 24px -8px rgba(0,0,0,.5);
  --sh-lg:0 12px 28px -10px rgba(0,0,0,.6), 0 30px 70px -24px rgba(0,0,0,.7);
  --sh-ring:0 0 0 3px color-mix(in srgb, var(--blu) 30%, transparent);
}

/* ── 2. BASE ──────────────────────────────────────────────────────────────── */
*{margin:0;padding:0;box-sizing:border-box}
html{font-size:15px;-webkit-text-size-adjust:100%}
body{
  font-family:var(--sans);
  background:var(--paper);color:var(--ink);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  font-feature-settings:'cv05' 1,'ss01' 1,'tnum' 0;
  line-height:1.5;
  transition:background var(--t-slow),color var(--t-slow);
}
h1,h2,h3,h4{line-height:1.25;letter-spacing:-.011em;font-weight:700}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:.92rem;color:inherit}
a{color:var(--blu)}
::selection{background:var(--b200);color:var(--b900)}
html[data-theme="dark"] ::selection{background:var(--b700);color:#fff}
:focus-visible{outline:2px solid var(--blu);outline-offset:2px;border-radius:4px}

::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-thumb{background:var(--s300);border-radius:var(--r-pill);border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:var(--s400);background-clip:content-box;border:3px solid transparent}
::-webkit-scrollbar-track{background:transparent}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}

/* ── 3. GUSCIO APPLICAZIONE ───────────────────────────────────────────────── */
.app{display:grid;grid-template-columns:246px minmax(0,1fr);min-height:100vh}

.sidebar{
  background:linear-gradient(180deg,var(--sb-bg) 0%,var(--sb-bg2) 100%);
  color:var(--sb-ink);display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh;overflow-y:auto;
  border-right:1px solid var(--sb-line);
  scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent;
}
.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);background-clip:content-box}
.brand{padding:20px 18px 16px;border-bottom:1px solid var(--sb-line);background:transparent;position:relative}
.brand::before{content:"";display:block;position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--a500) 0%,var(--a400) 30%,var(--b400) 100%);margin:0}
.brand h1{font-size:1.28rem;letter-spacing:-.028em;font-weight:800;color:var(--sb-ink-strong)}
.brand h1 span{color:var(--a400)}
.brand p{font-size:.63rem;color:#7a90a8;margin-top:4px;letter-spacing:.12em;text-transform:uppercase;font-weight:600}

.nav{padding:10px 10px 18px;flex:1}
.nav .grp{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:#7e97b0;padding:16px 10px 6px;font-weight:700}
.nav a{
  display:flex;align-items:center;gap:11px;padding:8px 11px;border-radius:var(--r-sm);
  color:var(--sb-ink);text-decoration:none;font-size:.875rem;font-weight:500;
  margin-bottom:1px;position:relative;
  transition:background var(--t-fast),color var(--t-fast);
}
.nav a:hover{background:var(--sb-hover);color:#e9f1f8}
.nav a.on{background:var(--sb-active);color:var(--sb-ink-strong);font-weight:650}
.nav a.on::before{content:"";position:absolute;left:0;top:7px;bottom:7px;width:3px;border-radius:0 3px 3px 0;background:var(--a400)}
.nav a:focus-visible{outline:2px solid var(--a400);outline-offset:-2px}
.nav .ic{width:17px;height:17px;flex:0 0 17px;display:inline-flex;align-items:center;justify-content:center;opacity:.72}
.nav .ic svg{width:17px;height:17px;display:block}
.nav a.on .ic{opacity:1;color:var(--a400)}
.nav .lb{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.nav .cnt{
  margin-left:auto;font-family:var(--mono);font-size:.66rem;font-weight:600;
  background:var(--sb-chip);border-radius:var(--r-pill);padding:1px 7px;color:var(--sb-chip-ink);
  font-variant-numeric:tabular-nums;
}
.nav a.on .cnt{background:rgba(255,255,255,.18);color:#fff}
.nav .cnt.alert{background:#c0392b;color:#fff;box-shadow:0 0 0 1px rgba(255,255,255,.12)}
.nav .adot{margin-left:auto;width:9px;height:9px;flex:0 0 9px;border-radius:50%;background:#e74c3c;box-shadow:0 0 0 2px rgba(231,76,60,.25);animation:adotp 1.6s ease-in-out infinite}
@keyframes adotp{0%,100%{box-shadow:0 0 0 2px rgba(231,76,60,.25)}50%{box-shadow:0 0 0 5px rgba(231,76,60,.08)}}
.side-foot{padding:13px 18px;border-top:1px solid var(--sb-line);font-size:.68rem;color:#6f89a2;font-family:var(--mono);background:rgba(0,0,0,.18)}
.side-foot a{color:var(--a400)!important;text-decoration:none}
.side-foot a:hover{text-decoration:underline}

.main{display:flex;flex-direction:column;min-width:0}
.topbar{
  display:flex;align-items:center;gap:14px;padding:11px 24px;
  background:color-mix(in srgb,var(--card) 88%,transparent);
  backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;min-height:58px;
}
.topbar h2{font-size:1.02rem;font-weight:700;letter-spacing:-.017em}
.topbar .crumb{font-size:.7rem;color:var(--ink3);font-family:var(--mono);margin-top:1px;letter-spacing:.01em}
.topbar .sp{flex:1}
#today{font-size:.76rem;letter-spacing:.01em}

/* pulsanti strumento nella topbar */
.topbar #tbStrumenti{display:inline-flex;gap:6px}
.topbar #tbStrumenti .btn{width:32px;height:32px;padding:0!important;justify-content:center;border-radius:var(--r-sm)}

/* interruttore tema */
.themetog{
  display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;
  border:1px solid var(--line2);background:var(--card);border-radius:var(--r-sm);
  color:var(--ink2);cursor:pointer;transition:all var(--t-fast);flex:0 0 auto;
}
.themetog:hover{border-color:var(--blu);color:var(--blu);background:var(--blu-bg)}
.themetog svg{width:16px;height:16px}
.themetog .i-sun{display:none}
html[data-theme="dark"] .themetog .i-sun{display:block}
html[data-theme="dark"] .themetog .i-moon{display:none}

/* ── 4. RICERCA GLOBALE ───────────────────────────────────────────────────── */
.gsearch{position:relative;flex:1;max-width:440px}
.gsearch input{
  width:100%;padding:8px 13px 8px 36px;border:1px solid var(--line2);border-radius:var(--r-sm);
  background:var(--bg);font:inherit;font-size:.85rem;
  transition:border-color var(--t),box-shadow var(--t),background var(--t);
}
.gsearch input::placeholder{color:var(--ink3)}
.gsearch input:focus{outline:none;border-color:var(--blu);box-shadow:var(--sh-ring);background:var(--card)}
.gsearch::before{
  content:"";position:absolute;left:12px;top:50%;transform:translateY(-50%);
  width:15px;height:15px;pointer-events:none;background:currentColor;color:var(--ink3);
  -webkit-mask:var(--ico-search) center/contain no-repeat;mask:var(--ico-search) center/contain no-repeat;
}
:root{--ico-search:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='m20 20-3.2-3.2'/></svg>")}
.gres{
  position:absolute;top:calc(100% + 8px);left:0;right:0;background:var(--card);
  border:1px solid var(--line2);border-radius:var(--r);box-shadow:var(--sh-lg);
  max-height:430px;overflow:auto;z-index:60;display:none;padding:5px;
}
.gres.open{display:block}
.gres .gr{display:flex;align-items:center;gap:11px;padding:9px 11px;cursor:pointer;border-bottom:none;border-radius:var(--r-xs)}
.gres .gr:last-child{border-bottom:none}
.gres .gr:hover,.gres .gr.sel{background:var(--blu-bg)}
.gres .gk{font-size:.6rem;font-weight:700;letter-spacing:.09em;color:var(--ink3);text-transform:uppercase;min-width:70px}
.gres .gt{font-size:.85rem;font-weight:600}
.gres .gs{font-size:.72rem;color:var(--ink3);font-family:var(--mono)}

/* ── 5. LOGIN ─────────────────────────────────────────────────────────────── */
.login-wrap{
  position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;
  padding:24px;overflow:auto;
  background:
    radial-gradient(900px 520px at 12% -8%,rgba(30,107,168,.16),transparent 62%),
    radial-gradient(760px 480px at 108% 104%,rgba(200,134,12,.14),transparent 60%),
    var(--paper);
}
.login-card{width:min(452px,94vw);background:transparent}
.login-stripe{height:4px;border-radius:var(--r-pill);margin-bottom:18px;
  background:linear-gradient(90deg,var(--a500),var(--a400) 34%,var(--b400) 100%)}
.eb-h1{font-size:2rem;font-weight:800;text-align:center;margin:0;color:var(--ink);letter-spacing:-.03em}
.eb-h1 span{color:var(--blu)}
.eb-sub{color:var(--ink2);text-align:center;font-size:.85rem;margin:6px 0 22px;line-height:1.5}
.login-azlogo{display:flex;justify-content:center;margin:6px 0 10px}
.login-azlogo img{max-height:56px;max-width:240px}
.login-scelte{display:flex;flex-direction:column;gap:9px;margin-bottom:16px}
.login-scelte button{
  display:flex;align-items:center;gap:13px;text-align:left;background:var(--card);
  border:1px solid var(--line2);border-left:4px solid var(--line2);border-radius:var(--r);
  padding:13px 16px;font:inherit;font-size:.94rem;font-weight:700;color:var(--ink);cursor:pointer;
  box-shadow:var(--sh-xs);transition:all var(--t-fast);
}
.login-scelte button:hover{border-left-color:color-mix(in srgb,var(--blu) 45%,transparent);box-shadow:var(--sh-sm);transform:translateY(-1px)}
.login-scelte button:active{transform:translateY(0) scale(.995)}
.login-scelte button.on{border-color:var(--blu);border-left-color:var(--blu);background:var(--blu-bg);box-shadow:var(--sh-sm)}
.login-scelte button .ico{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex:0 0 38px;border-radius:var(--r-sm);background:var(--bg);color:var(--blu)}
.login-scelte button.on .ico{background:var(--card);color:var(--giallo-scuro)}
.login-scelte button small{display:block;color:var(--ink2);font-weight:400;font-size:.735rem;margin-top:3px;line-height:1.4}
.login-pane{background:var(--card);border:1px solid var(--line2);border-radius:var(--r);padding:20px;box-shadow:var(--sh-sm)}
.login-pane label{display:block;font-size:.68rem;font-weight:700;color:var(--ink3);margin:12px 0 5px;text-transform:uppercase;letter-spacing:.07em}
.login-pane label:first-child{margin-top:0}
.login-pane input,.login-pane select{width:100%;padding:10px 12px;border:1px solid var(--line2);border-radius:var(--r-sm);font:inherit;background:var(--bg);transition:border-color var(--t),box-shadow var(--t)}
.login-pane input:focus,.login-pane select:focus{outline:none;border-color:var(--blu);box-shadow:var(--sh-ring);background:var(--card)}
.login-btn{
  width:100%;margin-top:16px;padding:12px;border:none;border-radius:var(--r-sm);
  background:var(--blu);
  background:linear-gradient(180deg,color-mix(in srgb,var(--blu) 88%,#fff),var(--blu));
  color:#fff;font:inherit;font-weight:700;font-size:.94rem;
  cursor:pointer;box-shadow:0 1px 2px rgba(12,44,71,.28),0 6px 16px -6px rgba(12,44,71,.5);
  transition:filter var(--t-fast),transform var(--t-fast);
}
.login-btn:hover{filter:brightness(1.08)}
.login-btn:active{transform:scale(.99)}
.login-err{color:var(--rosso);font-size:.78rem;margin-top:10px;min-height:1em;font-weight:600}
.login-foot{font-size:.7rem;color:var(--ink3);margin-top:16px;line-height:1.55;border-top:1px solid var(--line);padding-top:13px}
.login-esfoot{display:flex;align-items:center;justify-content:center;gap:9px;margin-top:18px;padding-top:13px;border-top:1px solid var(--line);opacity:.9}
.login-esfoot img{height:24px;width:auto}
.login-esfoot span{font-size:.68rem;color:var(--ink2);letter-spacing:.03em}
@keyframes shake{20%,60%{transform:translateX(-7px)}40%,80%{transform:translateX(7px)}}
.shake{animation:shake .4s}

/* ── 6. CONTENUTO E GRIGLIE ───────────────────────────────────────────────── */
.content{padding:22px 24px 72px;max-width:none;width:100%;min-width:0}
.grid{display:grid;gap:14px}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.mt{margin-top:14px}

/* ── 7. CARD ──────────────────────────────────────────────────────────────── */
.card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:17px 19px;box-shadow:var(--sh-xs);
  transition:box-shadow var(--t),border-color var(--t);
}
.card:hover{box-shadow:var(--sh-sm)}
.card h3{
  font-size:.9rem;font-weight:700;margin-bottom:13px;letter-spacing:-.008em;
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.card h3 .sub{font-weight:500;color:var(--ink3);font-size:.72rem;margin-left:auto;font-family:var(--mono)}

/* KPI */
.card.kpi{position:relative;overflow:hidden}
.card.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--blu);opacity:.8}
.kpi .lbl{font-size:.63rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink3);font-weight:700}
.kpi .val{font-size:1.72rem;font-weight:800;letter-spacing:-.035em;margin:7px 0 4px;font-variant-numeric:tabular-nums;line-height:1.05}
.kpi .hint{font-size:.75rem;color:var(--ink2);display:flex;align-items:center;gap:5px}
.kpi .hint.up{color:var(--verde);font-weight:600} .kpi .hint.down{color:var(--rosso);font-weight:600}
.kpi .hint.up::before,.kpi .hint.down::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 6px}

/* ── 8. TABELLE ───────────────────────────────────────────────────────────── */
.tbl{width:100%;border-collapse:collapse;font-size:.86rem}
.tbl th{
  text-align:left;word-break:normal;font-size:.63rem;letter-spacing:.11em;text-transform:uppercase;
  color:var(--ink3);padding:9px 11px;border-bottom:1px solid var(--line2);font-weight:700;white-space:nowrap;
}
.tbl td{padding:10px 11px;border-bottom:1px solid var(--line);vertical-align:middle;word-break:break-word;overflow-wrap:anywhere}
.tbl tr:last-child td{border-bottom:none}
.tbl tbody tr{transition:background var(--t-fast)}
.tbl tr.click{cursor:pointer}
.tbl tr.click:hover td{background:var(--blu-bg)}
.tbl tr.click:focus-visible{outline:2px solid var(--blu);outline-offset:-2px}
.tbl .num{text-align:right;font-family:var(--mono);font-size:.79rem;font-variant-numeric:tabular-nums;white-space:nowrap;letter-spacing:-.01em}
.num,.mono{font-variant-numeric:tabular-nums}
.mono{font-family:var(--mono);font-size:.8rem}

/* ── 9. BADGE E PILLOLE ───────────────────────────────────────────────────── */
.badge{
  display:inline-flex;align-items:center;gap:5px;font-size:.7rem;font-weight:650;
  border-radius:var(--r-xs);padding:3px 9px;white-space:nowrap;letter-spacing:.005em;
  border:1px solid transparent;line-height:1.5;
}
.badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex:0 0 5px;opacity:.9}
.b-ok{background:var(--verde-bg);color:var(--verde);border-color:var(--verde-line)}
.b-warn{background:var(--ambra-bg);color:var(--ambra);border-color:var(--ambra-line)}
.b-bad{background:var(--rosso-bg);color:var(--rosso);border-color:var(--rosso-line)}
.b-info{background:var(--blu-bg);color:var(--blu);border-color:color-mix(in srgb,var(--blu) 32%,transparent)}
.b-gray{background:var(--s100);color:var(--ink2);border-color:var(--line2)}
.b-giallo{background:var(--ambra-bg);color:var(--ambra);border-color:var(--ambra-line)}
html[data-theme="dark"] .b-info{border-color:#204765}
.pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);border-radius:var(--r-pill);padding:4px 13px;font-size:.78rem;background:var(--card)}

/* ── 10. BOTTONI ──────────────────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  border:1px solid var(--line2);background:var(--card);color:var(--ink);
  border-radius:var(--r-sm);padding:7px 14px;font-size:.845rem;font-weight:600;
  text-decoration:none;box-shadow:var(--sh-xs);white-space:nowrap;
  transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),box-shadow var(--t-fast),transform var(--t-fast);
}
.btn:hover{border-color:var(--s400);background:var(--bg)}
.btn:active{transform:scale(.975)}
.btn:focus-visible{outline:none;box-shadow:var(--sh-ring)}
.btn.pri,.btn.giallo{
  background:var(--blu);
  background:linear-gradient(180deg,color-mix(in srgb,var(--blu) 88%,#fff),var(--blu));
  color:#fff;border-color:var(--giallo-scuro);
  box-shadow:0 1px 2px rgba(12,44,71,.22),0 4px 12px -6px rgba(12,44,71,.45);
}
.btn.pri:hover,.btn.giallo:hover{background:var(--giallo-scuro);background:linear-gradient(180deg,var(--blu),var(--giallo-scuro));border-color:var(--giallo-scuro);color:#fff}
html[data-theme="dark"] .btn.pri,html[data-theme="dark"] .btn.giallo{color:#fff}
.btn.sm{padding:4px 10px;font-size:.765rem;border-radius:var(--r-xs)}
.btn.danger{border-color:var(--rosso-line);color:var(--rosso);background:var(--card)}
.btn.danger:hover{background:var(--rosso-bg);border-color:var(--rosso)}
.btn[disabled],.btn:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}
.ract{display:inline-flex;gap:5px;align-items:center}
.ract .btn{padding:3px 8px;font-size:.72rem;line-height:1.4}
.toolbar{display:flex;gap:9px;align-items:center;margin-bottom:16px;flex-wrap:wrap}
.toolbar .sp{flex:1}
.navfrecce{display:flex;gap:5px;margin-right:2px}
.navfrecce button{
  width:31px;height:31px;border:1px solid var(--line2);background:var(--card);border-radius:var(--r-sm);
  font-size:1.1rem;line-height:1;color:var(--ink2);cursor:pointer;transition:all var(--t-fast);box-shadow:var(--sh-xs);
}
.navfrecce button:hover:not(:disabled){background:var(--blu-bg);border-color:var(--blu);color:var(--blu)}
.navfrecce button:disabled{opacity:.34;cursor:default;box-shadow:none}
.hamb{display:none;background:none;border:none;font-size:1.3rem;color:var(--ink2)}

/* ── 11. FORM ─────────────────────────────────────────────────────────────── */
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:.66rem;letter-spacing:.09em;text-transform:uppercase;color:var(--ink3);font-weight:700}
/* le note esplicative dentro l'etichetta restano in tondo, non in maiuscoletto */
.field label .muted,.field label .small,.card h3 .sub{text-transform:none;letter-spacing:normal;font-weight:500}
.field input,.field select,.field textarea{
  border:1px solid var(--line2);border-radius:var(--r-sm);padding:8px 11px;background:var(--card);
  transition:border-color var(--t),box-shadow var(--t);
}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--blu);box-shadow:var(--sh-ring)}
.field input::placeholder,.field textarea::placeholder{color:var(--ink3)}
.frm{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}
.frm select,.frm input,.frm textarea{min-width:0;max-width:100%}
.frm .full{grid-column:1/-1}
.secttl{
  grid-column:1/-1;font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;font-weight:800;color:var(--ink2);
  border-bottom:2px solid var(--line2);padding-bottom:6px;margin:18px 0 2px;display:flex;align-items:center;gap:8px;
}
.secttl::after{content:"";flex:1;height:2px;margin-bottom:-8px;background:linear-gradient(90deg,var(--a400),transparent);opacity:.55}
.secttl:first-child{margin-top:0}
.secttl .n{background:var(--giallo-scuro);color:#fff;border-radius:5px;width:19px;height:19px;display:inline-flex;align-items:center;justify-content:center;font-size:.65rem;flex:0 0 19px}
.hint-f{grid-column:1/-1;font-size:.75rem;color:var(--ink3);margin:-4px 0 4px}

/* ── 12. TAB, PROGRESSO, TESTI ────────────────────────────────────────────── */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line2);margin-bottom:18px;flex-wrap:wrap}
.tabs button{
  background:none;border:none;padding:9px 15px;font-size:.86rem;font-weight:600;color:var(--ink2);
  border-bottom:2px solid transparent;margin-bottom:-1px;border-radius:var(--r-xs) var(--r-xs) 0 0;
  transition:color var(--t-fast),background var(--t-fast),border-color var(--t-fast);
}
.tabs button:hover{color:var(--ink);background:var(--bg)}
.tabs button.on{color:var(--blu);border-bottom-color:var(--blu);font-weight:700}
.progress{height:6px;background:var(--s150);border-radius:var(--r-pill);overflow:hidden;min-width:74px}
.progress i{display:block;height:100%;background:var(--blu);background:linear-gradient(90deg,var(--giallo-scuro),var(--blu));border-radius:var(--r-pill);transition:width var(--t-slow)}
.muted{color:var(--ink3)} .small{font-size:.8rem}
.pos{color:var(--verde);font-weight:700} .neg{color:var(--rosso);font-weight:700}
.bigno{font-size:2rem;font-weight:800;letter-spacing:-.035em;font-variant-numeric:tabular-nums}
.empty{padding:48px 24px;text-align:center;color:var(--ink3);font-size:.9rem;line-height:1.6}

/* ── 13. MODALI ───────────────────────────────────────────────────────────── */
.overlay{
  position:fixed;inset:0;background:rgba(8,17,27,.55);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  display:none;align-items:flex-start;justify-content:center;padding:5vh 16px;z-index:100;overflow:auto;
}
.overlay.open{display:flex;animation:ovIn .18s ease-out}
@keyframes ovIn{from{opacity:0}to{opacity:1}}
.modal{
  background:var(--card);border-radius:var(--r-lg);max-width:720px;width:100%;padding:24px 26px;
  box-shadow:var(--sh-lg);border:1px solid var(--line);animation:mdIn .2s cubic-bezier(.2,.8,.3,1);
}
@keyframes mdIn{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
.modal.wide{max-width:1060px}
.modal h3{font-size:1.06rem;margin-bottom:17px;letter-spacing:-.015em}
.modal .foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}

/* ── 14. AVVISI ───────────────────────────────────────────────────────────── */
.alertbox{
  display:flex;gap:11px;align-items:flex-start;border-radius:var(--r-sm);padding:12px 14px;
  font-size:.845rem;margin-bottom:10px;border:1px solid transparent;line-height:1.5;
}
.alertbox b{display:block;margin-bottom:3px;font-weight:700}
.alertbox.warn{background:var(--ambra-bg);color:var(--ambra);border-color:var(--ambra-line)}
.alertbox.bad{background:var(--rosso-bg);color:var(--rosso);border-color:var(--rosso-line)}
.alertbox.ok{background:var(--verde-bg);color:var(--verde);border-color:var(--verde-line)}
.alertbox.info{background:var(--blu-bg);color:var(--blu);border-color:color-mix(in srgb,var(--blu) 32%,transparent)}
html[data-theme="dark"] .alertbox.info{border-color:#204765}

.chip-live{
  display:flex;align-items:center;gap:7px;font-size:.77rem;background:var(--verde-bg);color:var(--verde);
  border:1px solid var(--verde-line);border-radius:var(--r-pill);padding:4px 12px;font-weight:600;cursor:pointer;
  transition:filter var(--t-fast);
}
.chip-live:hover{filter:brightness(.97)}
.chip-live .dot{width:7px;height:7px;border-radius:50%;background:currentColor;animation:pulse 1.8s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.86)}}

/* ── 15. KIOSK (sempre scuro) ─────────────────────────────────────────────── */
.kiosk{
  background:linear-gradient(160deg,var(--n900),var(--n700));color:#fff;
  border-radius:var(--r);padding:26px;position:relative;overflow:hidden;box-shadow:var(--sh-md);
}
.kiosk::before{content:"";position:absolute;top:0;left:0;right:0;height:7px;
  background:repeating-linear-gradient(-45deg,var(--a400) 0 13px,var(--n900) 13px 26px)}
.kiosk h3{color:#fff;font-size:1.02rem;margin:10px 0 4px}
.kiosk .clock{font-family:var(--mono);font-size:2.2rem;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kiosk .row{display:flex;gap:12px;margin-top:16px;flex-wrap:wrap;align-items:flex-end}
.kiosk label{display:block;font-size:.63rem;letter-spacing:.12em;text-transform:uppercase;color:#8fa3b8;margin-bottom:6px;font-weight:700}
.kiosk input,.kiosk select{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);color:#fff;border-radius:var(--r-sm);padding:10px 13px;font-family:var(--mono)}
.kiosk input:focus,.kiosk select:focus{outline:none;border-color:var(--a400);box-shadow:0 0 0 3px rgba(221,159,30,.25)}
.kiosk .msg{margin-top:12px;font-size:.86rem;min-height:20px;font-family:var(--mono)}
.presenti{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.pchip{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:var(--r-pill);padding:5px 13px 5px 6px;font-size:.81rem}
.pchip .av{width:26px;height:26px;border-radius:50%;background:var(--blu);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.66rem}
.pchip .t{font-family:var(--mono);color:#8fa3b8;font-size:.71rem}

/* ── 16. PROSPETTI CONTABILI ──────────────────────────────────────────────── */
.chart-wrap{position:relative;height:262px}
.fin{width:100%;border-collapse:collapse;font-size:.885rem}
.fin td{padding:8px 11px;border-bottom:1px solid var(--line)}
.fin .sec td{font-weight:800;font-size:.68rem;letter-spacing:.11em;text-transform:uppercase;background:var(--bg);color:var(--ink2)}
.fin .tot td{font-weight:800;border-top:2px solid var(--rule);border-bottom:3px double var(--rule)}
.fin .sub td:first-child{padding-left:28px}
.fin .num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}

.sp2{width:100%;border-collapse:collapse;font-size:.845rem;table-layout:fixed}
.sp2 col.v{width:38%} .sp2 col.i{width:12%}
.sp2 td{padding:6px 10px;vertical-align:top;border-bottom:1px solid var(--line)}
.sp2 td.mid{border-left:2px solid var(--line2);background:var(--card)}
.sp2 .num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.sp2 .cap td{font-weight:800;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;background:var(--n800);color:#fff;text-align:center;padding:8px}
.sp2 td.let{font-weight:800;background:var(--bg);font-size:.79rem}
.sp2 td.rom{font-weight:600}
.sp2 td.rom.lab{padding-left:24px}
.sp2 td.vc{color:var(--ink3);font-size:.8rem}
.sp2 td.vc.lab{padding-left:40px}
.sp2 .tt td{font-weight:800;border-top:2px solid var(--rule);border-bottom:3px double var(--rule);background:var(--ambra-bg)}
.sp2 .q td{font-size:.74rem;color:var(--ink3);border-bottom:none;padding-top:9px}

.taxrow{display:flex;justify-content:space-between;gap:14px;padding:8px 0;border-bottom:1px solid var(--line);font-size:.865rem}
.taxrow:last-child{border-bottom:none}
.taxrow .v{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.taxrow.tot{font-weight:800;border-top:2px solid var(--rule);border-bottom:3px double var(--rule);padding:10px 0;font-size:.95rem}
.taxrow.sub{padding-left:18px;color:var(--ink2);font-size:.82rem}

/* ── 17. BANDI / GARE / OFFERTA TECNICA ───────────────────────────────────── */
.bando{border:1px solid var(--line2);border-radius:var(--r-sm);padding:13px 15px;margin-bottom:10px;background:var(--card);display:flex;gap:14px;align-items:flex-start;transition:border-color var(--t-fast),box-shadow var(--t-fast)}
.bando:hover{border-color:color-mix(in srgb,var(--blu) 45%,transparent);box-shadow:var(--sh-sm)}
.bando .fonte{font-size:.61rem;font-weight:800;letter-spacing:.06em;padding:3px 8px;border-radius:5px;white-space:nowrap}
.bando .fonte.ted{background:var(--giallo-scuro);color:#fff}
.bando .fonte.demo{background:var(--s150);color:var(--ink2)}
.bando h4{font-size:.91rem;margin-bottom:3px}
.bando .meta{font-size:.73rem;color:var(--ink3);font-family:var(--mono)}
.srcs{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.srcs a{font-size:.72rem;border:1px solid var(--line2);border-radius:var(--r-xs);padding:5px 10px;color:var(--ink2);text-decoration:none;background:var(--card);transition:all var(--t-fast)}
.srcs a:hover{border-color:var(--blu);color:var(--blu);background:var(--blu-bg)}

.mdoc{font-size:.88rem;line-height:1.65;max-width:none}
.mdoc h1{font-size:1.24rem;margin:20px 0 9px;letter-spacing:-.02em;border-bottom:2px solid var(--a400);padding-bottom:7px}
.mdoc h2{font-size:1.01rem;margin:17px 0 6px}
.mdoc h3{font-size:.92rem;margin:13px 0 4px}
.mdoc p{margin:8px 0}
.mdoc ul,.mdoc ol{margin:8px 0 8px 22px}
.mdoc li{margin:3px 0}
.mdoc table{border-collapse:collapse;margin:11px 0;width:100%}
.mdoc td,.mdoc th{border:1px solid var(--line2);padding:7px 10px;font-size:.82rem;text-align:left}
.mdoc th{background:var(--bg);font-weight:700}
.ot-progress{display:flex;align-items:center;gap:10px;padding:13px;border:1px dashed var(--line2);border-radius:var(--r-sm);font-size:.82rem;color:var(--ink2);background:var(--bg)}
.ot-progress .spin{width:16px;height:16px;border:2.5px solid var(--line2);border-top-color:var(--blu);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.ot-print{display:none}
.ot-print, .ot-print *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}

.copr{border:1px solid var(--line2);border-radius:var(--r-sm);padding:0;overflow:hidden;margin-top:12px}
.copr .hd{background:var(--bg);padding:11px 14px;border-bottom:1px solid var(--line2);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.copr table{width:100%;border-collapse:collapse;font-size:.83rem}
.copr td{padding:9px 14px;border-bottom:1px solid var(--line)}
.copr tr:last-child td{border-bottom:none}
.copr .bar{height:6px;border-radius:var(--r-pill);background:var(--s150);overflow:hidden;min-width:56px}
.copr .bar i{display:block;height:100%;border-radius:var(--r-pill)}
.qbox{border:1px solid var(--line2);border-left:3px solid var(--a400);border-radius:var(--r-sm);padding:13px 15px;margin-bottom:9px;background:var(--card)}
.qbox .dm{font-size:.87rem;font-weight:600;margin-bottom:10px}
.qbox .opts{display:flex;gap:8px;flex-wrap:wrap}
.qbox .opt{flex:1;min-width:210px;text-align:left;border:1px solid var(--line2);border-radius:var(--r-sm);padding:10px 12px;background:var(--card);font-size:.81rem;line-height:1.45;cursor:pointer;transition:all var(--t-fast)}
.qbox .opt:hover{border-color:var(--blu);background:var(--blu-bg)}
.qbox .opt.sel{border-color:var(--blu);background:var(--blu-bg);font-weight:600;box-shadow:inset 0 0 0 1px var(--blu)}
.qbox .opt b{display:block;font-size:.69rem;letter-spacing:.09em;text-transform:uppercase;color:var(--ink3);margin-bottom:3px}
.qbox .opt.sel b{color:var(--blu)}
.cmpf{border:1px solid var(--line2);border-radius:var(--r-sm);padding:13px 15px;background:var(--card)}
.cmpf.win{border-color:var(--verde);background:var(--verde-bg)}

/* ── 18. DOCUMENTI E MAGAZZINO ────────────────────────────────────────────── */
.docg{display:flex;align-items:center;gap:11px;padding:9px 12px;border:1px solid var(--line2);border-radius:var(--r-sm);margin-bottom:7px;background:var(--card);transition:border-color var(--t-fast)}
.docg:hover{border-color:color-mix(in srgb,var(--blu) 45%,transparent)}
.docg .ico{width:30px;height:30px;border-radius:var(--r-xs);background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:.9rem;flex:0 0 auto}
.docg .nm{flex:1;min-width:0;font-size:.84rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.docg .mt2{font-size:.71rem;color:var(--ink3);font-family:var(--mono)}
.docg select{font-size:.74rem;padding:4px 7px;border:1px solid var(--line2);border-radius:var(--r-xs);background:var(--card)}
.magquick{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}
.magquick button{border:1px solid var(--line2);background:var(--card);border-radius:var(--r);padding:17px 12px;font:inherit;cursor:pointer;text-align:center;font-weight:700;font-size:.85rem;line-height:1.4;box-shadow:var(--sh-xs);transition:all var(--t-fast)}
.magquick button:hover{border-color:var(--blu);background:var(--blu-bg);transform:translateY(-1px);box-shadow:var(--sh-sm)}
.magquick .big{display:block;font-size:1.7rem;margin-bottom:6px}
.rigadoc{display:flex;gap:12px;align-items:center;border:1px solid var(--line2);border-radius:var(--r-sm);padding:11px 14px;margin-bottom:8px;background:var(--card)}
.rigadoc.nuovo{border-left:4px solid var(--blu);background:var(--blu-bg)}
.rr{display:grid;grid-template-columns:1fr 130px 90px;gap:8px;align-items:center;margin-bottom:7px}
.fotocap{border:2px dashed var(--line2);border-radius:var(--r);padding:28px;text-align:center;cursor:pointer;background:var(--bg);transition:all var(--t-fast)}
.fotocap:hover{border-color:var(--blu);background:var(--blu-bg)}
.fotocap .big{font-size:2.2rem}
.docprev{max-width:100%;max-height:300px;border-radius:var(--r-sm);border:1px solid var(--line2);display:block;margin:0 auto}

/* ── 19. CHAT ─────────────────────────────────────────────────────────────── */
.chatbox{display:flex;flex-direction:column;height:56vh;min-height:340px;border:1px solid var(--line2);border-radius:var(--r);background:var(--bg);overflow:hidden}
.chatscroll{flex:1;overflow-y:auto;padding:15px;display:flex;flex-direction:column;gap:8px}
.bub{max-width:74%;padding:9px 13px;border-radius:15px;font-size:.865rem;line-height:1.5;position:relative;box-shadow:var(--sh-xs)}
.bub .chi{font-size:.62rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--ink3);margin-bottom:3px}
.bub .ora{font-size:.63rem;color:var(--ink3);font-family:var(--mono);margin-top:5px;display:flex;gap:5px;align-items:center;justify-content:flex-end}
.bub.mio{align-self:flex-end;background:var(--blu-bg);border:1px solid color-mix(in srgb,var(--blu) 32%,transparent);border-bottom-right-radius:4px}
html[data-theme="dark"] .bub.mio{border-color:#204765}
.bub.suo{align-self:flex-start;background:var(--card);border:1px solid var(--line2);border-bottom-left-radius:4px}
.bub .tick{font-weight:800}
.bub .tick.letto{color:var(--blu)}
.bub.sistema{align-self:center;background:none;border:none;box-shadow:none;font-size:.72rem;color:var(--ink3);padding:2px}
.bub .alleg{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line2);background:var(--card);border-radius:var(--r-xs);padding:6px 10px;margin-top:6px;cursor:pointer;font-size:.8rem}
.chatsend{display:flex;gap:8px;padding:11px;border-top:1px solid var(--line2);background:var(--card)}
.chatsend textarea{flex:1;border:1px solid var(--line2);border-radius:var(--r-sm);padding:9px 12px;font:inherit;font-size:.88rem;resize:none;min-height:42px;max-height:110px;background:var(--card);transition:border-color var(--t),box-shadow var(--t)}
.chatsend textarea:focus{outline:none;border-color:var(--blu);box-shadow:var(--sh-ring)}

/* ── 20. ASSISTENTE ───────────────────────────────────────────────────────── */
.assist-fab{
  position:fixed;right:22px;bottom:22px;z-index:95;width:54px;height:54px;border-radius:50%;border:none;cursor:pointer;
  background:var(--blu);background:linear-gradient(140deg,var(--blu),var(--giallo-scuro));color:#fff;font-size:1.4rem;
  box-shadow:0 6px 22px rgba(12,44,71,.42),0 2px 6px rgba(12,44,71,.3);
  transition:transform var(--t),box-shadow var(--t);
}
.assist-fab:hover{transform:scale(1.06) translateY(-1px);box-shadow:0 10px 28px rgba(12,44,71,.5)}
.assist-fab .ndot{position:absolute;top:-2px;right:-2px;background:var(--rosso);color:#fff;border-radius:var(--r-pill);font-size:.61rem;font-weight:800;padding:2px 6px;font-family:var(--mono);box-shadow:0 0 0 2px var(--paper)}
.assist-panel{
  position:fixed;right:22px;bottom:86px;z-index:96;width:min(384px,calc(100vw - 30px));height:min(540px,calc(100vh - 130px));
  background:var(--card);border:1px solid var(--line2);border-radius:var(--r-lg);box-shadow:var(--sh-lg);
  display:none;flex-direction:column;overflow:hidden;
}
.assist-panel.open{display:flex;animation:mdIn .2s cubic-bezier(.2,.8,.3,1)}
.assist-hd{background:var(--giallo-scuro);background:linear-gradient(135deg,var(--giallo-scuro),var(--blu));color:#fff;padding:13px 16px;display:flex;align-items:center;gap:10px}
.assist-hd .t{font-weight:800;font-size:.94rem}
.assist-hd .st{font-size:.68rem;opacity:.8}
.assist-hd button{margin-left:auto;background:rgba(255,255,255,.16);border:none;color:#fff;border-radius:var(--r-xs);width:28px;height:28px;cursor:pointer;font-size:.95rem;transition:background var(--t-fast)}
.assist-hd button:hover{background:rgba(255,255,255,.28)}
.assist-body{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:8px;background:var(--bg)}
.assist-body .ab{max-width:86%;padding:9px 12px;border-radius:14px;font-size:.84rem;line-height:1.55;white-space:pre-wrap}
.assist-body .ab.u{align-self:flex-end;background:var(--blu);color:#fff;border-bottom-right-radius:4px}
.assist-body .ab.a{align-self:flex-start;background:var(--card);border:1px solid var(--line);border-bottom-left-radius:4px;box-shadow:var(--sh-xs)}
.assist-body .ab .qgo{display:inline-block;margin:6px 5px 0 0;border:1px solid color-mix(in srgb,var(--blu) 32%,transparent);background:var(--blu-bg);color:var(--blu);border-radius:var(--r-xs);padding:4px 10px;font-size:.75rem;font-weight:700;cursor:pointer;transition:all var(--t-fast)}
html[data-theme="dark"] .assist-body .ab .qgo{border-color:#204765}
.assist-body .ab .qgo:hover{background:var(--b100);color:var(--b700)}
html[data-theme="dark"] .assist-body .ab .qgo:hover{background:#1a3a55;color:#bcdcf3}
.assist-ft{display:flex;gap:7px;padding:11px;border-top:1px solid var(--line);background:var(--card)}
.assist-ft input{flex:1;border:1px solid var(--line2);border-radius:var(--r-sm);padding:9px 12px;font:inherit;font-size:.86rem;background:var(--bg);transition:border-color var(--t),box-shadow var(--t)}
.assist-ft input:focus{outline:none;border-color:var(--blu);box-shadow:var(--sh-ring);background:var(--card)}
.assist-ft button{border:none;background:var(--blu);color:#fff;border-radius:var(--r-sm);padding:0 16px;font-weight:700;cursor:pointer}

/* ── 21. BANCA, TURNI, RISCHIO, MIGRAZIONE ────────────────────────────────── */
.mv{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--line2);border-radius:var(--r-sm);padding:11px 14px;margin-bottom:8px;background:var(--card)}
.mv.ok{border-left:4px solid var(--verde)} .mv.prop{border-left:4px solid var(--blu)} .mv.aperto{border-left:4px solid var(--ambra)} .mv.ign{opacity:.5}
.mv .imp{font-family:var(--mono);font-weight:800;font-size:1rem;white-space:nowrap;min-width:96px;text-align:right;font-variant-numeric:tabular-nums}
.mv .imp.e{color:var(--verde)} .mv .imp.u{color:var(--rosso)}

.turni-grid{width:100%;border-collapse:collapse;font-size:.8rem}
.turni-grid th{font-size:.62rem;letter-spacing:.09em;text-transform:uppercase;color:var(--ink3);padding:8px 5px;border-bottom:1px solid var(--line2);text-align:center;font-weight:700}
.turni-grid th:first-child{text-align:left}
.turni-grid td{padding:4px;border-bottom:1px solid var(--line);text-align:center}
.turni-grid td:first-child{text-align:left;white-space:nowrap}
.turni-grid select{width:100%;min-width:118px;border:1px solid var(--line2);border-radius:var(--r-xs);padding:5px 5px;font-size:.74rem;text-align:left;background:var(--card);cursor:pointer}
.turni-grid select.rip{background:var(--s100);color:var(--ink3)} .turni-grid select.fer{background:var(--blu-bg);color:var(--blu)}
.turni-grid select.blocc{background:var(--rosso-bg);color:var(--rosso)}
.turni-grid .tot{font-family:var(--mono);font-weight:700}

.risk{display:inline-block;min-width:56px;text-align:center;border-radius:var(--r-xs);padding:3px 8px;font-size:.72rem;font-weight:800;font-family:var(--mono);border:1px solid transparent}
.risk.a{background:var(--rosso-bg);color:var(--rosso);border-color:var(--rosso-line)}
.risk.m{background:var(--ambra-bg);color:var(--ambra);border-color:var(--ambra-line)}
.risk.b{background:var(--verde-bg);color:var(--verde);border-color:var(--verde-line)}

#migBar{position:fixed;left:0;right:0;bottom:0;z-index:120;background:var(--n800);color:#fff;box-shadow:0 -6px 24px rgba(8,17,27,.4)}
.migbar-in{display:flex;align-items:center;gap:14px;padding:11px 22px;max-width:1100px;margin:0 auto}
.migbar-lbl{font-size:.8rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:52%}
.migbar-track{flex:1;height:8px;background:rgba(255,255,255,.16);border-radius:var(--r-pill);overflow:hidden}
.migbar-fill{height:100%;width:0%;background:linear-gradient(90deg,var(--a500),var(--a200));border-radius:var(--r-pill);transition:width .25s}
.migbar-pct{font-family:var(--mono);font-size:.78rem;font-weight:800;min-width:44px;text-align:right}

/* ── 22. APP OPERATORE (.eba) ─────────────────────────────────────────────── */
.opmode .topbar{display:none!important}
.opmode .content{padding:0!important;max-width:none!important}
.opmode .app{display:block!important;grid-template-columns:none!important}
.opmode .sidebar{display:none!important}
.opmode .gsearch{display:none!important}
.opmode .chip-live{display:none!important}
.eba{
  --ebg:var(--paper);--ecard:var(--card);--etesto:var(--ink);--egrigio:var(--ink2);
  --egiallo:var(--b500);--egiallo-scuro:var(--b700);--ebordo:var(--line2);
  --everde:var(--verde);--erosso:var(--rosso);--eombra:var(--sh-sm);
  background:var(--ebg);color:var(--etesto);min-height:100vh;font-family:var(--sans);
}
.eba header{background:var(--ecard);border-bottom:2px solid var(--egiallo);padding:14px 16px;display:flex;align-items:center;gap:10px;box-shadow:var(--eombra);position:sticky;top:0;z-index:10}
.eba header .logo{font-weight:800;font-size:17px}
.eba header .logo span{color:var(--egiallo)}
.eba header .sp{flex:1}
.eba header .chi{font-size:13px;color:var(--egrigio);text-align:right}
.eba header button{background:var(--ecard);border:1px solid var(--ebordo);border-radius:var(--r-sm);padding:8px 13px;font-size:13px;color:var(--egrigio);cursor:pointer;font-weight:600;min-height:36px}
.eba main{flex:1;width:100%;max-width:none;margin:0 auto;padding:18px 5vw 40px}
.eba .card{background:var(--ecard);border:1px solid var(--ebordo);border-radius:var(--r-lg);padding:20px;box-shadow:var(--eombra);margin-bottom:14px}
.eba h2{font-size:15px;margin:0 0 12px;color:var(--egrigio);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.eba .titolo{font-size:26px;font-weight:800;margin:2px 0;letter-spacing:-.02em}
.eba .sub{color:var(--egrigio);font-size:14px}
.eba .msg{margin-top:12px;font-size:14px;min-height:18px;text-align:center}
.eba .msg.ko{color:var(--erosso)}.eba .msg.ok{color:var(--everde)}
.eba .stato{border-radius:var(--r);padding:14px 16px;margin:14px 0 4px;font-weight:700;font-size:15px;display:flex;gap:9px;align-items:center;text-align:left;border:1px solid transparent}
.eba .stato.ok{background:var(--verde-bg);color:var(--everde);border-color:var(--verde-line)}
.eba .stato.ko{background:var(--rosso-bg);color:var(--erosso);border-color:var(--rosso-line)}
.eba .tabs{display:flex;gap:8px;margin-bottom:14px;border-bottom:none}
.eba .tabs button{flex:1;padding:13px;border-radius:var(--r);font-size:15px;background:var(--ecard);border:1px solid var(--ebordo);color:var(--egrigio);font-weight:700;cursor:pointer;min-height:48px;margin-bottom:0}
.eba .tabs button.att{background:var(--egiallo);color:#fff;border-color:var(--egiallo)}
.eba .btn-giallo{background:var(--egiallo);color:#fff;padding:16px;width:100%;font-size:16px;margin-top:16px;border:0;border-radius:var(--r);font-weight:800;cursor:pointer;box-shadow:0 3px 12px rgba(12,44,71,.32);min-height:52px}
.eba .btn-verde{background:linear-gradient(180deg,#17945e,#0f7a4d);color:#fff;padding:18px;width:100%;font-size:18px;display:flex;align-items:center;justify-content:center;gap:10px;border:0;border-radius:var(--r);font-weight:800;cursor:pointer;box-shadow:0 3px 12px rgba(15,122,77,.3);min-height:56px}
.eba .btn-lite{background:var(--ecard);color:var(--etesto);border:1px solid var(--ebordo);padding:14px;width:100%;margin-top:10px;font-weight:600;border-radius:var(--r);cursor:pointer;min-height:48px}
.eba #qrbox{background:#fff;border:1px solid var(--ebordo);padding:16px;border-radius:var(--r);margin:18px auto 0;width:fit-content}
.eba .barra{height:9px;background:var(--s150);border-radius:var(--r-pill);overflow:hidden;margin-top:16px}
.eba .barra > div{height:100%;background:var(--egiallo);width:100%;transition:width 1s linear}
.eba .cantiere{background:var(--ecard);border:1px solid var(--ebordo);border-radius:var(--r);padding:15px;margin-top:10px;text-align:left;cursor:pointer;min-height:48px}
.eba .cantiere:active{border-color:var(--egiallo)}
.eba .cantiere b{display:block;margin-bottom:3px}
.eba #reader{width:100%;border-radius:var(--r);overflow:hidden;border:1px solid var(--ebordo);margin-top:6px}
.eba #reader video{width:100%!important;border-radius:var(--r)}
.eba .center{text-align:center}
.esito{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:500;color:#fff;text-align:center;padding:24px}
.esito.ok{background:#0f7a4d}.esito.ko{background:#c0392b}
.esito .ico{font-size:92px}.esito .t{font-size:28px;font-weight:800;margin-top:8px}.esito .d{font-size:17px;margin-top:8px;opacity:.95}
.ebapp{--ebg:var(--b500)}
.ebtop{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line2);border-left:4px solid var(--blu);border-radius:var(--r);padding:12px 14px;margin-bottom:10px;font-size:1.02rem}
.ebtabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.ebtab{padding:8px 14px;border:1px solid var(--line2);background:var(--card);border-radius:var(--r-pill);font:inherit;font-size:.78rem;font-weight:700;color:var(--ink);cursor:pointer;transition:all var(--t-fast)}
.ebtab:hover{border-color:var(--blu);color:var(--blu)}
.ebtab.on{background:var(--blu);border-color:var(--giallo-scuro);color:#fff}

/* superfici bianche fisse necessarie (QR, badge stampabili) */
.qr-white{background:#fff!important}

/* ── 23. RESPONSIVE ───────────────────────────────────────────────────────── */
@media(max-width:1240px){.content{padding:20px 18px 64px}.topbar{padding:11px 18px}}
@media(max-width:1080px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:1000px){.topbar #tbStrumenti{display:none!important}}
@media(max-width:900px){.gsearch{max-width:200px;min-width:0}#today{display:none}}
@media(max-width:860px){.chip-live{display:none!important}}
@media(max-width:760px){
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;left:-262px;width:250px;transition:left var(--t-slow);z-index:50;box-shadow:var(--sh-lg)}
  .sidebar.open{left:0}
  .g4,.g3,.g2{grid-template-columns:1fr}
  .content{padding:14px 12px 48px}
  .card{overflow-x:auto;padding:15px}
  .tbl{min-width:520px}
  .toolbar{flex-wrap:wrap;gap:7px}
  .topbar{padding:10px 14px;gap:10px}
  .topbar .crumb{display:none}
  .eba main{padding:14px 3vw 40px}
  .eba #qrbox img,.eba #qrbox canvas{max-width:76vw;height:auto!important}
  .modal{max-width:96vw;padding:18px}
  .hamb{display:block}
  .navfrecce{display:none}
  .btn{min-height:36px}
  /* le pagine usano griglie dichiarate inline: su schermo stretto vanno
     riportate a colonna singola, altrimenti il contenuto esce dallo schermo */
  [style*="grid-template-columns:1"],
  [style*="grid-template-columns:2"],
  [style*="grid-template-columns: 1"],
  [style*="grid-template-columns:repeat(2"],
  [style*="grid-template-columns:repeat(3"],
  [style*="grid-template-columns:repeat(4"]{grid-template-columns:1fr!important}
  .topbar h2{font-size:.95rem;line-height:1.2}
  .gsearch{max-width:none}
}
@media(max-width:600px){.frm{grid-template-columns:1fr}}
@media(max-width:640px){.rr{grid-template-columns:1fr}}
@media(max-width:720px){.navfrecce{display:none}}

/* ── 24. STAMPA ───────────────────────────────────────────────────────────── */
@media print{
  :root{--card:#fff;--paper:#fff;--ink:#000;--ink2:#333;--ink3:#555;--line:#ccc;--line2:#999}
  .sidebar,.topbar,.toolbar,.no-print,.tabs,.assist-fab,.assist-panel,#migBar{display:none!important}
  .app{display:block}.content{max-width:none;padding:0}
  .card{border:none;padding:0;margin-bottom:24px;box-shadow:none}
  body{background:#fff;color:#000}
}
@media print{
  body.print-ot .app{display:none!important} body.print-ot .modal-back{display:none!important}
  body.print-ot .overlay{display:none!important} body.print-ot .login-wrap{display:none!important}
  body.print-ot .ot-print{display:block;font-size:10.5pt;line-height:1.55}
}

/* ═══════════════════════════════════════════════════════════════════════════
   RIFINITURA PREMIUM · strato applicato sopra il design system "Cantiere".
   Vetro, bagliori misurati, filetti luminosi e tipografia display: l'aspetto
   diventa più tecnologico senza toccare struttura, classi o leggibilità AA.
   ═════════════════════════════════════════════════════════════════════════ */
:root{
  --display:'Space Grotesk',var(--sans);
  --alone:0 0 26px -6px color-mix(in srgb,var(--blu) 55%,transparent);
  --velo:color-mix(in srgb,var(--card) 84%,transparent);
}
html[data-theme="dark"]{
  /* fondo più profondo: le superfici emergono per luce, non per bordi */
  --paper:#070b13; --bg:#0b1220; --card:#0f1726; --card2:#131d2f;
  --fondo:#0b1220; --riga-ev:#12263a;
  --line:#1c2b40; --line2:#293c54;
  --sb-bg:#04080e; --sb-bg2:#0a1725;
  --alone:0 0 30px -6px color-mix(in srgb,var(--blu) 65%,transparent);
}

/* fondo pagina: alone di marca + trama puntinata quasi invisibile */
body{
  background:
    radial-gradient(1100px 640px at 88% -12%, color-mix(in srgb,var(--blu) 7%,transparent), transparent 62%),
    radial-gradient(900px 560px at -8% 108%, color-mix(in srgb,var(--ambra) 5%,transparent), transparent 58%),
    radial-gradient(circle at 1px 1px, color-mix(in srgb,var(--ink) 4%,transparent) 1px, transparent 0) 0 0/28px 28px,
    var(--paper);
  background-attachment:fixed,fixed,fixed,fixed;
}

/* tipografia display su titoli e numeri di spicco (mai sui documenti) */
h1,h2,h3,h4,.kpi .val,.bigno,.brand h1,.eb-h1,.eba .titolo,.kiosk .clock{font-family:var(--display);letter-spacing:-.02em}
.mdoc h1,.mdoc h2,.mdoc h3,.ot-print h1,.ot-print h2,.ot-print h3{font-family:var(--sans)}

/* ── sidebar: nero profondo, voce attiva che emette luce ── */
.brand h1 span{
  background:linear-gradient(94deg,var(--a400),#f0c75e);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.nav a.on{
  background:linear-gradient(90deg,color-mix(in srgb,var(--b500) 34%,transparent),rgba(255,255,255,.05));
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.07), 0 0 22px -8px color-mix(in srgb,var(--b400) 70%,transparent);
}
.side-foot{background:rgba(0,0,0,.3)}

/* ── topbar: più vetro e filetto luminoso ── */
.topbar{
  background:var(--velo);
  backdrop-filter:saturate(190%) blur(16px);-webkit-backdrop-filter:saturate(190%) blur(16px);
  border-bottom:1px solid color-mix(in srgb,var(--blu) 10%,var(--line));
}
.topbar::after{
  content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent 4%,color-mix(in srgb,var(--blu) 38%,transparent) 30%,color-mix(in srgb,var(--ambra) 30%,transparent) 70%,transparent 96%);
}

/* ── card: bordo che reagisce, elevazione al passaggio ── */
.card{position:relative;transition:box-shadow var(--t),border-color var(--t),transform var(--t)}
.card:hover{border-color:color-mix(in srgb,var(--blu) 22%,var(--line));box-shadow:var(--sh-md)}
.card.kpi{
  background-image:radial-gradient(260px 130px at 100% 0%, color-mix(in srgb,var(--blu) 6%,transparent), transparent 72%);
}
.card.kpi::after{background:linear-gradient(180deg,var(--blu),color-mix(in srgb,var(--ambra) 65%,var(--blu)));opacity:1;width:3px}
.card.kpi:hover{transform:translateY(-2px);box-shadow:var(--sh-md),var(--alone)}
.kpi .val{font-size:1.9rem;font-weight:700}

/* ── tabelle: testata con filetto di marca, riga evidenziata al passaggio ── */
.tbl th{border-bottom:1px solid color-mix(in srgb,var(--blu) 20%,var(--line2))}
.tbl tr.click:hover td{background:color-mix(in srgb,var(--blu) 7%,var(--card))}

/* ── azioni primarie: bagliore, non colore in più (il testo resta AA) ── */
.btn.pri,.btn.giallo,.login-btn,.assist-ft button{
  box-shadow:0 1px 2px rgba(8,20,34,.28),0 6px 18px -6px color-mix(in srgb,var(--blu) 60%,transparent);
}
.btn.pri:hover,.btn.giallo:hover{box-shadow:0 1px 2px rgba(8,20,34,.3),0 8px 26px -6px color-mix(in srgb,var(--blu) 75%,transparent)}
.assist-fab{box-shadow:0 6px 22px rgba(8,20,34,.4),var(--alone)}
.chip-live{box-shadow:0 0 18px -6px color-mix(in srgb,var(--verde) 55%,transparent)}

/* ── tab attiva: sottolineatura a gradiente ── */
.tabs button.on{border-image:linear-gradient(90deg,var(--blu),color-mix(in srgb,var(--ambra) 70%,var(--blu))) 1;border-bottom-width:2px}

/* ── login: griglia tecnica, carta in vetro, banda animata ── */
.login-wrap{
  background:
    linear-gradient(color-mix(in srgb,var(--ink) 4%,transparent) 1px,transparent 1px) 0 0/36px 36px,
    linear-gradient(90deg,color-mix(in srgb,var(--ink) 4%,transparent) 1px,transparent 1px) 0 0/36px 36px,
    radial-gradient(1000px 600px at 14% -10%,color-mix(in srgb,var(--blu) 13%,transparent),transparent 60%),
    radial-gradient(820px 520px at 106% 106%,color-mix(in srgb,var(--ambra) 11%,transparent),transparent 58%),
    var(--paper);
}
.login-pane,.login-scelte button{
  background:var(--velo);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}
.login-scelte button.on{background:color-mix(in srgb,var(--blu-bg) 70%,transparent)}
.login-stripe{
  background:linear-gradient(90deg,var(--a500),var(--a400) 30%,var(--b400) 62%,var(--a500));
  background-size:280% 100%;animation:egb-flusso 10s linear infinite;
}
@keyframes egb-flusso{to{background-position:280% 0}}
.eb-h1 span{
  background:linear-gradient(94deg,var(--blu),color-mix(in srgb,var(--blu) 55%,#37b3d4));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}

/* ── modali e pannelli: vetro sospeso ── */
.modal{background:color-mix(in srgb,var(--card) 96%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-radius:20px}
.assist-panel{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:var(--sh-lg),var(--alone)}
.gres{backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);background:color-mix(in srgb,var(--card) 92%,transparent)}

/* ── totem badge: cornice luminosa ── */
.kiosk{box-shadow:var(--sh-md),inset 0 0 0 1px rgba(255,255,255,.06),0 0 44px -14px rgba(74,141,192,.5)}

/* ── barra di scorrimento più fine ── */
::-webkit-scrollbar{width:9px;height:9px}


/* dettaglio HUD sugli indicatori: staffa d'angolo appena accennata */
.card.kpi::before{
  content:"";position:absolute;top:9px;right:9px;width:13px;height:13px;pointer-events:none;
  border-top:2px solid color-mix(in srgb,var(--blu) 40%,transparent);
  border-right:2px solid color-mix(in srgb,var(--blu) 40%,transparent);
  border-radius:0 5px 0 0;
}
/* ingresso morbido dei contenuti al cambio pagina (annullato da reduced-motion) */
@keyframes egb-sale{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
#content>*{animation:egb-sale .26s cubic-bezier(.2,.8,.3,1) both}
#content>*:nth-child(2){animation-delay:.05s}
#content>*:nth-child(3){animation-delay:.09s}
#content>*:nth-child(4){animation-delay:.12s}
@media print{#content>*{animation:none!important}}

/* in stampa la rifinitura sparisce del tutto */
@media print{
  body{background:#fff!important}
  .card,.card.kpi{background-image:none!important;box-shadow:none!important;transform:none!important}
}

/* ══════════════════════════════════════════════════════════════════════════════
   v5.7 · PAGINA INIZIALE — fondo a tinta unita (navy) con scena animata,
   carta a due pannelli: presentazione a sinistra, accesso a destra.
   ══════════════════════════════════════════════════════════════════════════ */
.login-wrap{
  background:#0b1724;                 /* tinta unita, identica nei due temi */
  background-image:none;
  padding:22px;
}
.login-scena{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.login-scena .orb{
  position:absolute;border-radius:50%;filter:blur(70px);opacity:.55;
  will-change:transform;animation:egb-orbita 26s ease-in-out infinite alternate;
}
.login-scena .o1{width:640px;height:640px;left:-180px;top:-220px;background:radial-gradient(circle,#1e6ba8 0%,rgba(30,107,168,0) 70%)}
.login-scena .o2{width:520px;height:520px;right:-160px;bottom:-200px;background:radial-gradient(circle,#c8860c 0%,rgba(200,134,12,0) 70%);animation-duration:32s;animation-delay:-8s}
.login-scena .o3{width:420px;height:420px;left:48%;top:58%;background:radial-gradient(circle,#37b3d4 0%,rgba(55,179,212,0) 70%);opacity:.28;animation-duration:38s;animation-delay:-16s}
@keyframes egb-orbita{
  0%{transform:translate(0,0) scale(1)}
  50%{transform:translate(70px,40px) scale(1.08)}
  100%{transform:translate(-40px,80px) scale(.96)}
}
.login-scena .blueprint{position:absolute;inset:0;width:100%;height:100%;opacity:.9}
.login-scena .griglia path{stroke:rgba(255,255,255,.045);stroke-width:1;fill:none}
.login-scena .edificio path{fill:none;stroke:rgba(142,186,218,.55);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:1400;stroke-dashoffset:1400;animation:egb-traccia 9s ease-in-out infinite alternate}
.login-scena .edificio .t2{stroke:rgba(142,186,218,.32);animation-delay:.6s}
.login-scena .edificio .t3{stroke:rgba(221,159,30,.5);stroke-width:1.2;animation-delay:1.1s}
.login-scena .edificio .gru{stroke:rgba(221,159,30,.75);stroke-width:1.6;animation-delay:1.6s}
.login-scena .quote path{fill:none;stroke:rgba(221,159,30,.45);stroke-width:1;stroke-dasharray:4 5;animation:egb-quota 40s linear infinite}
@keyframes egb-traccia{from{stroke-dashoffset:1400}60%,100%{stroke-dashoffset:0}}
@keyframes egb-quota{to{stroke-dashoffset:-360}}

.login-card{
  position:relative;z-index:1;
  width:min(980px,96vw);
  display:flex;align-items:stretch;
  background:#fff;
  background:color-mix(in srgb,var(--card) 97%,transparent);
  border-radius:24px;overflow:hidden;
  box-shadow:0 30px 80px -30px rgba(0,0,0,.75),0 0 0 1px rgba(255,255,255,.08);
  animation:egb-entra .6s cubic-bezier(.2,.8,.3,1) both;
}
@keyframes egb-entra{from{opacity:0;transform:translateY(16px) scale(.985)}to{opacity:1;transform:none}}
.login-card>.inner{flex:1;padding:24px}

.login-hero{
  flex:0 0 46%;position:relative;padding:38px 36px 30px;color:#e8eef6;
  background:
    radial-gradient(520px 320px at 110% -10%,rgba(74,141,192,.28),transparent 60%),
    radial-gradient(420px 300px at -10% 110%,rgba(200,134,12,.22),transparent 60%),
    linear-gradient(160deg,#102132,#0b1724 70%);
  display:flex;flex-direction:column;
}
.login-hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px) 0 0/28px 28px,
             linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px) 0 0/28px 28px;
  mask-image:radial-gradient(circle at 30% 30%,#000 30%,transparent 80%);
}
.login-hero>*{position:relative;z-index:1}
.login-hero .login-stripe{margin:0 0 26px;height:4px;width:74px}
.login-hero .login-azlogo{justify-content:flex-start;margin:0 0 12px}
.login-hero .login-azlogo img{max-height:44px;filter:drop-shadow(0 2px 6px rgba(0,0,0,.4))}
.login-hero .eb-h1{text-align:left;color:#fff;font-size:2.35rem;line-height:1}
.login-hero .eb-h1 span{
  background:linear-gradient(94deg,#f0c75e,#dd9f1e);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.login-hero .eb-sub{text-align:left;color:#a9b8ca;font-size:.9rem;margin:12px 0 26px;max-width:36ch}
.login-feat{list-style:none;display:flex;flex-direction:column;gap:14px;margin:0}
.login-feat li{display:flex;gap:12px;align-items:flex-start}
.login-feat .fi{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex:0 0 34px;border-radius:10px;color:#f0c75e;
  background:rgba(255,255,255,.06);box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.login-feat b{display:block;font-size:.88rem;color:#fff;font-weight:700}
.login-feat small{display:block;font-size:.74rem;color:#8fa2b8;margin-top:2px;line-height:1.4}
.login-hero-foot{margin-top:auto;padding-top:26px;font-size:.7rem;color:#8fa2b8;display:flex;align-items:center;gap:8px;letter-spacing:.03em}
.login-hero-foot .dot{width:8px;height:8px;border-radius:50%;background:#4fc48b;box-shadow:0 0 0 0 rgba(79,196,139,.6);animation:egb-pulsa 2.4s ease-out infinite}
@keyframes egb-pulsa{to{box-shadow:0 0 0 9px rgba(79,196,139,0)}}

.login-form{flex:1;padding:32px 34px 24px;background:var(--card);display:flex;flex-direction:column;min-width:0}
.login-form-head{margin-bottom:16px}
.login-form-head h2{font-size:1.45rem;color:var(--ink);margin:0}
.login-form-head p{font-size:.82rem;color:var(--ink2);margin:3px 0 0}
.login-form .login-scelte{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px}
.login-form .login-scelte button{
  flex-direction:column;align-items:flex-start;gap:8px;padding:11px 12px;border-left-width:1px;
  background:var(--bg);backdrop-filter:none;-webkit-backdrop-filter:none;border-radius:14px;font-size:.86rem
}
.login-form .login-scelte button .ico{width:32px;height:32px;flex-basis:32px;background:var(--card)}
.login-form .login-scelte button small{font-size:.7rem;margin-top:2px}
.login-form .login-scelte button.on{background:var(--blu-bg);border-color:var(--blu);box-shadow:0 0 0 3px color-mix(in srgb,var(--blu) 14%,transparent)}
.login-form .login-pane{background:transparent;border:none;box-shadow:none;padding:4px 0 0;backdrop-filter:none;-webkit-backdrop-filter:none}
.login-form .login-btn{display:flex;align-items:center;justify-content:center;gap:8px}
.login-form .login-btn span{transition:transform var(--t-fast)}
.login-form .login-btn:hover span{transform:translateX(3px)}
.login-form .login-esfoot{margin-top:auto;padding-top:14px}

@media (max-width:820px){
  .login-wrap{padding:14px;align-items:flex-start}
  .login-card{flex-direction:column;width:min(520px,100%);border-radius:20px}
  .login-hero{flex:none;padding:26px 24px 22px}
  .login-hero .eb-h1{font-size:2rem}
  .login-feat{display:none}
  .login-hero .eb-sub{margin-bottom:0}
  .login-hero-foot{display:none}
  .login-form{padding:22px 20px 18px}
  .login-form .login-scelte{grid-template-columns:1fr}
  .login-form .login-scelte button{flex-direction:row;align-items:center}
}
@media (prefers-reduced-motion:reduce){
  .login-scena .orb,.login-scena .edificio path,.login-scena .quote path,.login-card,.login-hero-foot .dot,.login-stripe{animation:none!important}
  .login-scena .edificio path{stroke-dashoffset:0}
}

/* ── v5.7 · filtro di pagina (sotto la ricerca globale) ── */
.pagfiltro{
  display:flex;align-items:center;gap:10px;margin-bottom:12px;padding:8px 12px;
  background:color-mix(in srgb,var(--card) 88%,transparent);border:1px solid var(--line);border-radius:var(--r);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
}
.pagfiltro input{
  flex:1;min-width:0;border:none;background:transparent;font:inherit;font-size:.9rem;padding:4px 2px;color:var(--ink)
}
.pagfiltro input:focus{outline:none}
.pagfiltro .lente{color:var(--ink3);display:inline-flex}
.pagfiltro .pf-esito{font-size:.72rem;color:var(--ink3);white-space:nowrap;font-family:var(--mono)}
.pagfiltro .pulisci{border:none;background:var(--bg);color:var(--ink2);border-radius:var(--r-pill);width:24px;height:24px;font-size:.8rem;display:none}
.pagfiltro.attivo .pulisci{display:inline-flex;align-items:center;justify-content:center}
.pagfiltro.attivo{border-color:color-mix(in srgb,var(--blu) 40%,var(--line))}
.pf-hit{background:color-mix(in srgb,var(--ambra) 28%,transparent);border-radius:3px;padding:0 1px}
@media print{.pagfiltro{display:none!important}}

/* ── v5.7 · approvazioni ── */
.appr-banner{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-radius:var(--r);margin-bottom:12px;border:1px solid var(--ambra-line);background:var(--ambra-bg)}
.appr-banner.ok{border-color:var(--verde-line);background:var(--verde-bg)}
.appr-banner.ko{border-color:var(--rosso-line);background:var(--rosso-bg)}
.appr-banner .ic{font-size:1.3rem;line-height:1}
.appr-banner b{display:block;font-size:.9rem}
.appr-firme{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.appr-firme span{font-size:.72rem;padding:2px 8px;border-radius:var(--r-pill);background:var(--card);border:1px solid var(--line2)}
.appr-firme span.si{border-color:var(--verde-line);color:var(--verde)}
.appr-firme span.no{border-color:var(--rosso-line);color:var(--rosso)}
.appr-cfg{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.appr-cfg .card{margin:0}
.appr-cfg .util{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:180px;overflow:auto}
.appr-cfg .util label{display:flex;gap:8px;align-items:center;font-size:.82rem;cursor:pointer}

/* ── v5.7 · magazzino: barcode, scanner, ODA ── */
.magtabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.magtabs button{border:1px solid var(--line2);background:var(--card);border-radius:var(--r-pill);padding:6px 14px;font:inherit;font-size:.82rem;font-weight:600;color:var(--ink2);cursor:pointer}
.magtabs button.on{background:var(--blu);border-color:var(--blu);color:#fff}
.scanbox{display:flex;align-items:center;gap:8px;background:var(--card);border:1.5px solid var(--line2);border-radius:var(--r-pill);padding:4px 6px 4px 12px;min-width:260px}
.scanbox input{border:none;background:transparent;font:inherit;font-family:var(--mono);font-size:.9rem;flex:1;min-width:0;color:var(--ink)}
.scanbox input:focus{outline:none}
.scanbox.armed{border-color:var(--verde);box-shadow:0 0 0 3px color-mix(in srgb,var(--verde) 20%,transparent)}
.scanbox .led{width:8px;height:8px;border-radius:50%;background:var(--line2)}
.scanbox.armed .led{background:var(--verde);animation:egb-pulsa 1.6s ease-out infinite}
.bc{display:inline-block;vertical-align:middle}
.bc svg{display:block}
.bc-cell{font-family:var(--mono);font-size:.7rem;color:var(--ink3);letter-spacing:.06em;white-space:nowrap}
.tbl td.mono,.tbl b.mono{white-space:nowrap}
.scancard{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
@media (max-width:760px){.scancard{grid-template-columns:1fr}}
.scancard .big{font-size:2rem;font-weight:800;font-family:var(--display)}
.qtybox{display:flex;align-items:center;gap:6px}
.qtybox button{width:36px;height:36px;border-radius:10px;border:1px solid var(--line2);background:var(--bg);font-size:1.1rem;font-weight:700;cursor:pointer}
.qtybox input{width:80px;text-align:center;font-size:1.05rem;font-weight:700;padding:7px;border:1px solid var(--line2);border-radius:10px}
.etic-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.etic-grid .e{border:1px solid var(--line2);border-radius:10px;padding:8px;display:flex;gap:8px;align-items:center;cursor:pointer;background:var(--card)}
.etic-grid .e.on{border-color:var(--blu);background:var(--blu-bg)}
.etic-grid .e input[type=number]{width:52px;padding:4px;border:1px solid var(--line2);border-radius:6px;text-align:center}
.oda-stato{font-size:.7rem;font-weight:700;padding:2px 9px;border-radius:var(--r-pill);border:1px solid var(--line2);white-space:nowrap}
.oda-stato.richiesto{background:var(--ambra-bg);color:var(--ambra);border-color:var(--ambra-line)}
.oda-stato.approvato{background:var(--blu-bg);color:var(--blu-ink);border-color:color-mix(in srgb,var(--blu) 35%,transparent)}
.oda-stato.ordinato{background:var(--card2);color:var(--ink2)}
.oda-stato.ricevuto{background:var(--verde-bg);color:var(--verde);border-color:var(--verde-line)}
.oda-stato.rifiutato{background:var(--rosso-bg);color:var(--rosso);border-color:var(--rosso-line)}
.przstat{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
@media (max-width:900px){.przstat{grid-template-columns:1fr}}
.delta{font-family:var(--mono);font-size:.78rem;font-weight:700}
.delta.pos{color:var(--rosso)} .delta.neg{color:var(--verde)} .delta.zero{color:var(--ink3)}
/* app operatore · scelta lavorazione dalla lista */
.lavsheet{position:fixed;inset:0;z-index:300;background:rgba(8,20,34,.55);display:flex;align-items:flex-end;justify-content:center}
.lavsheet .pan{background:var(--card);width:min(640px,100%);max-height:88vh;border-radius:20px 20px 0 0;display:flex;flex-direction:column;box-shadow:0 -10px 40px rgba(0,0,0,.35)}
.lavsheet .pan .hd{padding:14px 16px 8px;display:flex;gap:10px;align-items:center;border-bottom:1px solid var(--line2)}
.lavsheet .pan .hd input{flex:1;border:1.5px solid var(--line2);border-radius:12px;padding:10px 12px;font:inherit;font-size:15px}
.lavsheet .pan .ls{overflow:auto;padding:8px 12px 16px}
.lavsheet .cat{font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink2);margin:12px 4px 4px}
.lavsheet .lv{display:flex;gap:10px;align-items:center;width:100%;text-align:left;background:var(--card);border:1.5px solid var(--line2);border-radius:12px;padding:10px 12px;margin-bottom:6px;font:inherit;cursor:pointer}
.lavsheet .lv:active{background:var(--bg)}
.lavsheet .lv .cod{font-family:var(--mono);font-size:11px;color:var(--ink2);min-width:54px}
.lavsheet .lv .um{margin-left:auto;font-size:11px;font-weight:700;color:var(--blu);background:var(--bg);padding:2px 8px;border-radius:999px}
.eba .rigalav{background:var(--ecard);border:1.5px solid var(--ebordo);border-radius:14px;padding:10px;margin-bottom:8px}
.eba .rigalav .top{display:flex;gap:8px;align-items:flex-start}
.eba .rigalav .desc{flex:1;font-size:14px;font-weight:600;line-height:1.35}
.eba .rigalav .desc small{display:block;font-weight:400;font-size:11px;color:var(--egrigio);margin-top:2px}
.eba .rigalav .bot{display:flex;gap:8px;align-items:center;margin-top:8px}
.eba .rigalav .bot input{width:90px;border:1.5px solid var(--ebordo);border-radius:10px;padding:9px;font:inherit;font-size:15px;text-align:right}
.eba .rigalav .bot .um{font-weight:700;font-size:13px;color:var(--egrigio);min-width:36px}
.eba .rigalav .bot .del{margin-left:auto;border:none;background:var(--rosso-bg);color:var(--rosso);border-radius:10px;width:36px;height:36px;font-size:15px;cursor:pointer}
.eba .rigalav .tag{font-size:10px;font-weight:800;padding:2px 7px;border-radius:999px;background:var(--verde-bg);color:var(--everde);white-space:nowrap}
.eba .rigalav .tag.libera{background:var(--ambra-bg);color:var(--ambra)}
.eba .cantchip{display:inline-flex;align-items:center;gap:6px;background:var(--ebg);border:1.5px solid var(--ebordo);border-radius:999px;padding:5px 10px;font-size:12px;font-weight:700;cursor:pointer}
.copyright{font-size:.66rem;color:var(--ink3);text-align:center;letter-spacing:.03em;margin-top:8px}
.copyright.side{padding:0 18px 12px;background:rgba(0,0,0,.18);color:#6f89a2;font-family:var(--mono);font-size:.6rem;text-align:left}
.copyright.eb{padding:10px 16px 18px}


.login-userwrap{display:flex;align-items:stretch}
.login-pref{display:flex;align-items:center;padding:0 12px;background:var(--bg);border:1.5px solid var(--line2);border-right:none;border-radius:10px 0 0 10px;font-weight:800;letter-spacing:.5px;color:var(--blu)}
.login-userwrap input{border-radius:0 10px 10px 0!important;flex:1}
.login-link{display:block;width:100%;margin-top:12px;padding:6px;border:0;background:none;color:var(--blu);font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;text-align:center}
.login-link:hover{text-decoration:underline}
.login-rec-spiega{font-size:.82rem;color:var(--ink2);line-height:1.5;margin:0 0 4px}
.login-err.ok{color:var(--verde)}
.azname{font-weight:800;font-size:1.05rem;color:#fff;letter-spacing:.01em}
[hidden]{display:none!important}
.login-btn:disabled{opacity:.6;cursor:wait}
