*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#f6f5f0;--panel:#ffffff;--surface:#f0eeea;--border:#e2dfd8;
  --accent:#1a5c3a;--accent-light:#e8f2ec;--accent2:var(--stato-attenzione-testo);  /* accent2: 0 usi, alias per non lasciare un terzo ambra sciolto */
  --gold:#92700a;
  /* == VOCABOLARIO DEI COLORI DI STATO (2026-08-16, valori scelti da Lupo) ======
     Prima lo stesso significato aveva piu' colori: 7 rossi diversi, 7 ambra, 4 verdi
     (audit del 16/08 su 97 hex distinti in questo foglio). Due rossi affiancati si
     leggono come due stati diversi, e non lo sono. Da qui in avanti gli stati passano
     SOLO da questi token; i colori che identificano una CATEGORIA (tipi di intervento
     nella legenda, "permuta", i tipi di nodo dell'Assistente) restano hex letterali,
     di proposito: non sono stati e non devono seguirli.
     ATTENZIONE: --stato-attenzione ha 3,19 di contrasto sul bianco: sopra la soglia
     3,0 delle FORME (bordi, pallini, riempimenti) ma SOTTO la 4,5 richiesta dal TESTO.
     Per questo esiste --stato-attenzione-testo: stessa tinta, un gradino piu' scuro
     (5,02), da usare quando c'e' di mezzo del testo - ambra su chiaro, o bianco su
     ambra. Rosso e verde non hanno questo problema (5,89 e 7,13): un token solo. */
  --stato-ok:#166534;
  --stato-attenzione:#d97706;
  --stato-attenzione-testo:#b45309;
  --stato-errore:#cc0000;
  /* Fasce di STRUTTURA del Planning/Gantt (pausa pranzo, colonna diagnostica): erano
     tinte calde (rosso .04-.13, oro .04) e stonavano contro la cornice blu e il verde
     dell'accent. Stessa funzione visiva - "questa fascia e' diversa dalle altre" - resa
     con la tinta fredda della cornice. Le alfa restano vicine alle originali per non
     cambiare quanto si notano. NB: NON e' uno stato, e' struttura: non usare i token
     di stato qui, e non usare questo per errori/avvisi. */
  --fascia-fredda:27,58,107;
  /* I nomi storici diventano alias: cosi' i 14 punti che gia' usavano var(--red)/
     var(--green) seguono i token senza doverli riscrivere uno per uno. */
  --red:var(--stato-errore);--green:var(--stato-ok);
  --text:#1c1917;--muted:#78716c;--radius:10px;--tc-topbar:30px;
  --shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);
  --shadow-lg:0 4px 12px rgba(0,0,0,.08);
  --msg-right:12px;--msg-top:76px;--msg-width:min(460px,44%);
  /* Alias per i 5 nomi usati (75 punti fra CSS e stili inline JS) ma mai definiti:
     senza questi, var() invalida la dichiarazione e il browser ripiega su ereditato/iniziale
     (testi attenuati neri, hover muti, rosso pericolo assente). Vedi AUDIT_FABLE_CSS_2026-08-08 §1. */
  --text-muted:var(--muted);
  --hover:var(--surface);
  --danger:var(--red);
  --bg-alt:var(--surface);
  --fg:var(--text);
  /* ── Palette blu condivisa con Mobile (2026-08-16, richiesta di Lupo) ──────────
     STESSI NOMI E STESSI VALORI di mobile.css righe 2-3: se domani il blu cambia,
     cambia in due punti con lo stesso nome, non in due punti con nomi diversi.
       --blu-scuro  = fondo del bottom-nav mobile, voci NON selezionate
       --blu        = evidenza della voce selezionata
     Qui: --blu-scuro veste la barra "Planning Generale", --blu la colonna dei tasti. */
  --blu:#1B3A6B;
  --blu-scuro:#0d2145;
  /* Token derivati per ciò che sta SOPRA il blu: i colori normali (--text nero,
     --muted grigio, --accent verde) sono pensati per fondo chiaro e su questo blu
     sarebbero illeggibili. Definirli qui evita di ripetere rgba() in 30 punti. */
  --sb-fg:#eef2f8;
  --sb-fg-muted:rgba(238,242,248,.62);
  --sb-btn-bg:rgba(255,255,255,.07);
  --sb-btn-bg-hover:rgba(255,255,255,.15);
  --sb-btn-border:rgba(255,255,255,.20);
  --sb-sep:rgba(255,255,255,.14);
}
body{font-family:'Geist',sans-serif;background:var(--bg);color:var(--text);height:100vh;display:flex;flex-direction:column;overflow:hidden;font-size:14px;}
.sidebar{width:270px;min-width:270px;background:var(--blu);border-right:1px solid var(--blu-scuro);display:flex;flex-direction:column;padding:20px 14px 10px;gap:10px;overflow-y:hidden;color:var(--sb-fg);}
.sidebar-scroll{flex:1;overflow-y:auto;display:flex;flex-direction:column;padding-bottom:6px;gap:8px;}
.sidebar-scroll::-webkit-scrollbar{width:2px;}.sidebar-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px;}
.logo{font-family:'Instrument Serif',serif;font-size:22px;color:var(--accent);padding-bottom:14px;border-bottom:1px solid var(--border);display:flex;align-items:baseline;gap:8px;}
.logo-ver{font-family:'Geist',sans-serif;font-size:9px;color:var(--muted);font-weight:500;letter-spacing:1px;}
.section-label{font-size:10px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin-bottom:4px;}.gem-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;cursor:pointer;transition:all .15s;font-size:13px;color:var(--muted);font-weight:400;}
.gem-item:hover{background:var(--surface);color:var(--text);}
.gem-item.active{background:var(--accent-light);color:var(--accent);font-weight:500;border:1px solid rgba(26,92,58,.15);}
.gem-icon{font-size:16px;flex-shrink:0;}
.db-section{flex-shrink:0;padding-top:8px;border:0.5px solid rgba(0,0,0,.12);border-radius:8px;overflow:hidden;padding:0;border-top:none;background:var(--panel);}
.db-summary{list-style:none;display:flex;align-items:center;gap:6px;cursor:pointer;font-weight:600;text-transform:uppercase;user-select:none;padding:7px 10px;border-radius:0;background:#e2e8f0;color:#334155;font-size:10px;letter-spacing:.8px;}
.db-summary::-webkit-details-marker{display:none;}
.db-summary::before{content:'▶';font-size:8px;transition:transform .2s;display:inline-block;}
.db-section[open] .db-summary::before{transform:rotate(90deg);}
.db-summary:hover{color:#1e293b;background:#cbd5e1;}
.db-content{display:flex;flex-direction:column;gap:4px;padding-top:6px;padding:8px;}.db-util-btn{padding:5px 4px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--muted);font-size:10px;font-weight:500;cursor:pointer;font-family:'Geist',sans-serif;text-align:center;transition:all .15s;line-height:1.3;}
.db-util-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light);}
/* 2026-08-15: rimossi gli stili delle drop-zone di upload (.file-zone/.fz-*): il pannello
   "Database" con i 4 caricamenti manuali non esiste piu'. */
/* ── Sottomenu nidificati Impostazioni ── */
.db-sub{border-radius:6px;overflow:hidden;border:1px solid var(--border);}
.db-sub+.db-sub{margin-top:3px;}
.db-sub-summary{list-style:none;display:flex;align-items:center;gap:5px;cursor:pointer;font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;padding:5px 8px;background:var(--surface);user-select:none;transition:background .15s;}
.db-sub-summary::-webkit-details-marker{display:none;}
.db-sub-summary::before{content:'▶';font-size:7px;transition:transform .2s;display:inline-block;flex-shrink:0;}
.db-sub[open] .db-sub-summary::before{transform:rotate(90deg);}
.db-sub-summary:hover{color:var(--text);background:var(--accent-light);}
.db-sub[open] .db-sub-summary{color:var(--accent);border-bottom:1px solid var(--border);}
.db-sub-content{display:flex;flex-direction:column;gap:3px;padding:5px;background:var(--bg);}
.db-param-row{display:grid;grid-template-columns:1fr 1fr;gap:3px;}
.db-util-btn--todo{border-style:dashed!important;opacity:.55;cursor:not-allowed!important;}
.db-util-btn--todo:hover{border-color:var(--border)!important;color:var(--muted)!important;background:var(--surface)!important;}.main{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg);}
.chat-header{display:flex;align-items:center;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--panel);gap:12px;flex-shrink:0;}
.gem-info{display:flex;align-items:center;gap:10px;}
.gem-avatar{width:36px;height:36px;border-radius:9px;background:var(--accent-light);border:1px solid rgba(26,92,58,.15);display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;}
.gem-name{font-size:14px;font-weight:600;}.gem-desc{font-size:11px;color:var(--muted);margin-top:1px;}/* ── Layout: Gantt come sfondo permanente ───────────────────────────────── */
.main-view{flex:1;position:relative;overflow:hidden;min-height:0;}
/* Pannello chat flottante — fisso e ridimensionabile dall'utente */
.messages{position:fixed;right:var(--msg-right);top:var(--msg-top);width:var(--msg-width);max-height:calc(100vh - var(--msg-top) - 12px);min-width:260px;min-height:200px;z-index:500;background:var(--panel);border-radius:12px;box-shadow:0 4px 28px rgba(0,0,0,.20);overflow:auto;padding:0 18px 16px 18px;gap:14px;display:none;flex-direction:column;scroll-behavior:smooth;}
.messages.active{display:flex;}
.msg-drag-handle{position:sticky;top:0;z-index:1;cursor:grab;padding:6px 10px;font-size:13px;color:var(--muted);border-bottom:1px solid var(--border);flex-shrink:0;user-select:none;border-radius:12px 12px 0 0;background:var(--surface);text-align:center;letter-spacing:3px;margin:0 -18px 10px -18px;display:flex;align-items:center;justify-content:space-between;}
.msg-drag-handle:active{cursor:grabbing;}.msg-win-btns{display:flex;gap:3px;flex-shrink:0;margin-left:auto;}
.msg-win-btn{width:18px;height:18px;border-radius:5px;border:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:'Geist',sans-serif;padding:0;transition:all .15s;}
.msg-win-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
.msg-win-close:hover{background:var(--stato-errore)!important;border-color:var(--stato-errore)!important;}
.messages::-webkit-scrollbar{width:3px;}.messages::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
.msg{display:flex;gap:10px;max-width:780px;animation:fadeUp .25s ease;}
@keyframes fadeUp{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}
.msg.user{flex-direction:row-reverse;align-self:flex-end;}
.msg.ai{align-self:flex-start;}
.msg-avatar{width:28px;height:28px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0;margin-top:2px;}
.msg.ai .msg-avatar{background:var(--accent-light);border:1px solid rgba(26,92,58,.12);}
.msg.user .msg-avatar{background:var(--surface);border:1px solid var(--border);}
.bubble{padding:10px 14px;border-radius:var(--radius);font-size:13.5px;line-height:1.6;max-width:820px;word-break:break-word;box-shadow:var(--shadow);}
.msg.user .bubble{background:var(--panel);border:1px solid var(--border);border-top-right-radius:3px;}
.msg.ai .bubble{background:var(--panel);border:1px solid var(--border);border-top-left-radius:3px;}.omo-list{display:flex;flex-direction:column;gap:4px;}
.omo-item{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:7px;background:var(--surface);border:1px solid var(--border);cursor:pointer;transition:all .15s;}
.omo-item:hover{border-color:var(--gold);background:rgba(146,112,10,.05);}
.omo-num{width:20px;height:20px;border-radius:5px;background:rgba(146,112,10,.1);color:var(--gold);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.omo-name{font-size:13px;font-weight:500;}.omo-addr{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.omo-cnt{font-size:11px;color:var(--muted);font-weight:400;}
.omo-cod{flex-shrink:0;font-size:11px;font-weight:700;color:var(--accent);font-family:monospace;white-space:nowrap;align-self:center;}
.omo-mark{background:rgba(255,200,0,0.4);border-radius:2px;padding:0 1px;}
.client-card{background:var(--panel);border:1px solid rgba(26,92,58,.2);border-radius:var(--radius);border-top-left-radius:3px;padding:14px 16px;max-width:1024px;box-shadow:var(--shadow);}
.client-name{font-size:15px;font-weight:700;margin-bottom:1px;color:var(--accent);}
.client-meta{font-size:11.5px;color:var(--muted);margin-bottom:8px;display:flex;gap:12px;flex-wrap:wrap;}
.client-meta span{display:flex;align-items:center;gap:3px;}
.client-contacts{display:flex;flex-direction:column;gap:5px;margin-bottom:8px;padding:8px 10px;background:rgba(26,92,58,.03);border:1px solid rgba(26,92,58,.1);border-radius:8px;}
.contact-row{display:flex;align-items:center;gap:8px;font-size:13px;}
.contact-row .c-icon{font-size:14px;flex-shrink:0;width:18px;text-align:center;}
.contact-row a{color:var(--accent);text-decoration:none;font-weight:500;font-size:14px;}
.contact-row a:hover{text-decoration:underline;}
.imp-section{margin-top:7px;padding-top:6px;border-top:1px solid var(--border);}
.imp-title{font-size:10px;font-weight:600;letter-spacing:.8px;text-transform:uppercase;color:var(--muted);margin-bottom:4px;}
.imp-row{font-size:12px;padding:5px 8px;background:var(--surface);border-radius:5px;margin-bottom:2px;display:flex;gap:8px;cursor:pointer;border:1px solid transparent;transition:all .15s;position:relative;}
.imp-row:hover{border-color:var(--accent);background:var(--accent-light);}
.imp-row.single{cursor:default;}.imp-row.single:hover{border-color:transparent;background:var(--surface);}
.imp-num{color:var(--muted);font-family:monospace;font-size:11px;flex-shrink:0;}.imp-addr{flex:1;}
/* .imp-tipo override: larghezza fissa 12 caratteri, centrato */
.imp-tipo{width:74px;text-align:center;overflow:hidden;text-overflow:ellipsis;letter-spacing:.3px;text-transform:uppercase;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;padding:2px 6px;border-radius:4px;user-select:none;white-space:nowrap;transition:background .15s;flex-shrink:0;background:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd;cursor:pointer;pointer-events:auto;}
.imp-geo-warn{font-size:9px;color:var(--red);font-style:italic;}
/* collaudo-badge: larghezza fissa = width di una data, centrato. Colore variabile. */
.collaudo-badge{width:72px;text-align:center;border:1px solid transparent;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;padding:2px 6px;border-radius:4px;user-select:none;white-space:nowrap;transition:background .15s;flex-shrink:0;}
.collaudo-badge.ok{background:rgba(34,139,34,.12);color:#1a7a1a;border-color:rgba(34,139,34,.25);}
.collaudo-badge.prossimo{background:rgba(249,115,22,.12);color:#c2410c;border-color:rgba(249,115,22,.3);}
.collaudo-badge.scaduto{background:rgba(204,0,0,.12);color:var(--stato-errore);border-color:rgba(204,0,0,.3);}
.collaudo-badge.fa{background:rgba(30,80,180,.12);color:#1a50b4;border-color:rgba(30,80,180,.25);}
.prompt-section{margin-top:8px;padding-top:7px;border-top:1px solid var(--border);}
.prompt-q{font-size:12.5px;color:var(--accent);font-weight:500;}
.diag-result{border-radius:8px;padding:9px 13px;font-size:13px;font-weight:600;}
.diag-result.tamper{background:rgba(185,28,28,.07);border:1px solid rgba(185,28,28,.2);color:var(--red);}
.diag-result.intrus{background:rgba(146,112,10,.08);border:1px solid rgba(146,112,10,.2);color:var(--gold);}
.typing{display:flex;gap:4px;align-items:center;padding:12px 14px;}
.dot{width:5px;height:5px;border-radius:50%;background:var(--accent);animation:bounce 1.2s infinite;}
.dot:nth-child(2){animation-delay:.2s;}.dot:nth-child(3){animation-delay:.4s;}
@keyframes bounce{0%,60%,100%{transform:translateY(0);opacity:.3}30%{transform:translateY(-4px);opacity:1}}
.welcome{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--muted);text-align:center;padding:40px;}
.welcome h2{font-family:'Instrument Serif',serif;font-size:26px;color:var(--text);}
.welcome p{font-size:13px;max-width:320px;line-height:1.6;}
.input-area{padding:12px 24px 18px;border-top:1px solid var(--border);background:var(--panel);flex-shrink:0;}
.input-wrap{display:flex;align-items:flex-end;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px;transition:border-color .15s;}
.input-wrap:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(26,92,58,.08);}
textarea{flex:1;background:none;border:none;outline:none;color:var(--text);font-family:'Geist',sans-serif;font-size:13.5px;line-height:1.5;resize:none;max-height:100px;min-height:20px;overflow-y:auto;}
textarea::placeholder{color:var(--muted);}
.send-btn{width:32px;height:32px;border-radius:5px;background:var(--accent);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:opacity .15s,transform .1s;}
.send-btn:hover{opacity:.85;transform:scale(1.04);}
.send-btn:disabled{opacity:.25;cursor:default;transform:none;}
.send-btn svg{width:14px;height:14px;fill:white;}
.pending-indicator{display:none;padding:5px 12px;background:var(--accent-light);border:1px solid rgba(26,92,58,.15);border-radius:7px;font-size:11px;color:var(--accent);font-weight:500;margin-bottom:6px;align-items:center;gap:6px;}
.pending-indicator.visible{display:flex;}
.pending-indicator .pi-name{font-weight:700;}
.pending-indicator .pi-imp{font-weight:400;font-size:10px;color:var(--muted);}
.pending-indicator .pi-close{cursor:pointer;margin-left:auto;color:var(--red);font-size:16px;font-weight:700;width:22px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:5px;transition:all .15s;}
.pending-indicator .pi-close:hover{background:rgba(185,28,28,.12);}
/* ── CHI STA SOPRA A CHI — le fasce di z-index (03/09) ───────────────────────
   Prima erano quattro sistemi che non si parlavano (due contatori JS diversi, z-index fissi
   nel CSS, formule tipo `topZ()+100`): certe finestre si aprivano SEMPRE sotto le altre e
   bisognava spostarle o chiuderle per vederle. Adesso l'ordine e' deciso in un posto solo,
   `tc-window.js`, e le fasce sono queste:

     0 -  999   contenuto di pagina e intestazioni appiccicate DENTRO una finestra
   1200 - 1899  FINESTRE — assegnate a runtime da TcWindow.bringToFront, in ordine di uso.
                Il valore scritto nel CSS di un pannello-finestra conta solo prima del primo
                tocco: da li' in poi vince quello inline. Al tetto la pila si RINUMERA.
   1900         striscia delle finestre minimizzate (.schede-min-panel): mai coperta
   2000 / 2500  modali a tutto schermo gia' esistenti (#impGeoModal, #assenzaModal)
   2600 - 2899  SOPRA LE FINESTRE — veli e modali (qui sotto) + TcWindow.aboveWindows
   3000+        modali di sistema (validazione 9000, cmdk 9500, login 9999)

   ⚠️ Non scrivere z-index nuovi "a occhio": o si usa una di queste fasce, o si chiede a
   TcWindow. Un numero preso a caso e' esattamente come e' nato il difetto. */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.35);display:flex;align-items:center;justify-content:center;z-index:2600;backdrop-filter:blur(3px);opacity:0;pointer-events:none;transition:opacity .2s;}
.modal-overlay.open{opacity:1;pointer-events:all;}
.modal{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:24px;width:500px;max-width:95vw;max-height:90vh;overflow-y:auto;display:flex;flex-direction:column;gap:16px;box-shadow:var(--shadow-lg);}
.modal h2{font-family:'Instrument Serif',serif;font-size:20px;}
.modal-actions{display:flex;gap:8px;justify-content:space-between;}
.btn-primary{padding:8px 18px;border-radius:5px;background:var(--accent);border:none;color:white;font-family:'Geist',sans-serif;font-size:13px;font-weight:600;cursor:pointer;transition:opacity .15s;}.btn-primary:hover{opacity:.85;}
.btn-secondary{padding:8px 16px;border-radius:5px;background:none;border:1px solid var(--border);color:var(--muted);font-family:'Geist',sans-serif;font-size:13px;cursor:pointer;transition:all .15s;}.btn-secondary:hover{border-color:var(--muted);color:var(--text);}
.btn-danger{padding:8px 14px;border-radius:5px;background:rgba(185,28,28,.08);border:1px solid rgba(185,28,28,.2);color:var(--red);font-family:'Geist',sans-serif;font-size:12px;cursor:pointer;transition:all .15s;display:none;}.btn-danger:hover{background:rgba(185,28,28,.15);}

.plan-card{background:var(--panel);border:1px solid rgba(26,92,58,.25);border-radius:var(--radius);border-top-left-radius:3px;padding:14px 16px;max-width:1200px;box-shadow:var(--shadow);}
.plan-title{font-size:10px;font-weight:600;color:var(--accent);letter-spacing:1px;text-transform:uppercase;margin-bottom:4px;}
.plan-subtitle{font-size:11px;color:var(--muted);margin-bottom:10px;}
.plan-option{display:flex;align-items:flex-start;gap:10px;padding:9px 11px;border-radius:8px;background:var(--surface);border:1px solid var(--border);cursor:pointer;transition:all .15s;margin-bottom:5px;}
.plan-option:hover{border-color:var(--accent);background:var(--accent-light);}
.plan-option .po-rank{width:22px;height:22px;border-radius:6px;background:var(--accent);color:white;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;}
.plan-option .po-body{flex:1;min-width:0;}
.plan-option .po-tech{font-size:13px;font-weight:600;color:var(--text);}
.plan-option .po-detail{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.4;}
.plan-option .po-badge{font-size:9px;font-weight:600;padding:2px 6px;border-radius:4px;display:inline-block;margin-top:3px;}
.po-badge.best{background:rgba(22,101,52,.1);color:var(--green);}
.po-badge.alt{background:rgba(146,112,10,.1);color:var(--gold);}
.plan-customize{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;border-radius:7px;border:1px dashed var(--border);background:none;color:var(--muted);font-family:'Geist',sans-serif;font-size:11px;cursor:pointer;transition:all .15s;flex:1;font-weight:500;}
.plan-customize:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light);}
.plan-custom-panel{margin-top:8px;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;display:none;}
.plan-custom-panel.open{display:block;}
.pcp-label{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--text);margin-top:12px;margin-bottom:5px;display:flex;align-items:center;gap:6px;}
.pcp-label:first-child{margin-top:0;}
.pcp-chips{display:flex;flex-wrap:wrap;gap:4px;}
.pcp-chip{padding:4px 10px;border-radius:5px;background:var(--panel);border:1px solid var(--border);font-size:11px;cursor:pointer;transition:all .12s;font-family:'Geist',sans-serif;color:var(--text);}
.pcp-chip:hover{border-color:var(--accent);color:var(--accent);}
.pcp-chip.selected{background:var(--accent-light);border-color:var(--accent);color:var(--accent);font-weight:600;}
.pcp-send{background:var(--accent);color:white;border:none;font-family:'Geist',sans-serif;font-weight:600;cursor:pointer;transition:opacity .15s;width:100%;margin-top:14px;border-radius:8px;padding:8px 16px;font-size:12px;letter-spacing:.02em;}.pcp-send:hover{opacity:.85;}.pcp-send:disabled{opacity:.3;cursor:default;}
.dur-chips-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px;margin-bottom:2px;}
.dur-chip{background:var(--accent-light);border:1px solid var(--accent);color:var(--accent);font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;transition:all .12s;border-radius:5px;padding:4px 12px;font-size:11px;}.dur-chip:hover{background:var(--accent);color:white;}
.plan-nodata{font-size:14px;font-weight:600;color:var(--stato-attenzione-testo);background:#fff9e6;border:1px solid var(--stato-attenzione);border-radius:8px;padding:12px;text-align:center;}
/* HH-2: dropdown autocomplete cliente nel modale Nuovo impianto */
.anag-cli-drop{position:absolute;top:100%;left:0;right:0;z-index:30;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 6px 20px rgba(0,0,0,.18);max-height:220px;overflow-y:auto;margin-top:2px;}
.anag-cli-item{padding:6px 10px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--border);}
.anag-cli-item:last-child{border-bottom:none;}
.anag-cli-item:hover{background:var(--surface);}
.plan-option-wrap{display:flex;gap:8px;align-items:stretch;margin-bottom:5px;}
.plan-option-wrap .plan-option{flex:0 0 22%;min-width:200px;margin-bottom:0;}.plan-sched{flex:1 1 0;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:10px;overflow-y:auto;max-height:280px;}
.plan-sched-title{font-size:9px;font-weight:600;color:var(--accent);letter-spacing:.5px;text-transform:uppercase;margin-bottom:6px;padding-bottom:4px;border-bottom:1px solid var(--border);}.tc-sched-table{width:100%;font-size:10px;}
.tc-sched-row{display:flex;gap:4px;align-items:baseline;padding:2px 4px;border-bottom:1px solid rgba(0,0,0,.04);border-radius:3px;}
.tc-sched-time{flex:0 0 36px;font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums;}
.tc-sched-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;color:var(--text);}
.tc-sched-dur{flex:0 0 30px;text-align:right;color:var(--muted);}
.tc-sched-att{color:var(--muted);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:4px;}
.tc-sched-sede{opacity:.55;}
.tc-sched-free{background:rgba(180,180,180,.10);}
.tc-sched-busy{background:rgba(100,180,255,.18);}
.tc-sched-busy-alt{background:rgba(55,140,240,.30);}
.tc-sched-closest{background:rgba(34,139,34,.18);}
.tc-sched-new{background:rgba(22,200,60,.22);border-left:3px solid #16c83c;}
.tc-sched-lunch{background:rgba(var(--fascia-fredda),.11);}
/* ── Vista espansa post-selezione: flex (colonna 1 + colonna 2 affiancate) ── */
.plan-selected-wrap{display:flex;gap:8px;width:100%;align-items:flex-start;}
.plan-col1-wrap{display:flex;flex-direction:column;gap:8px;flex:0 0 224px;}
.plan-option-sel{display:flex;align-items:flex-start;gap:10px;padding:10px 13px;border-radius:8px;background:var(--accent-light);border:2px solid var(--accent);}
.plan-option-sel .po-rank{width:22px;height:22px;border-radius:6px;background:var(--accent);color:white;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;}
.plan-option-sel .po-body{flex:1;min-width:0;}
.plan-option-sel .po-tech{font-size:13px;font-weight:600;color:var(--text);}
.plan-option-sel .po-detail{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.4;}
.plan-sched-exp{flex:0 0 1024px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 12px;min-width:0;}
.tc-sched-table-exp{width:100%;font-size:11px;}
/* Riga con dati (intervento first, pranzo, mattina, ecc.) */
.tc-sched-row-exp{display:grid;grid-template-columns:44px 1fr 100px;gap:4px;align-items:start;padding:4px 4px;border-bottom:1px solid rgba(0,0,0,.05);min-height:22px;border-radius:2px;}
.tc-sched-time-exp{font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums;font-size:11px;padding-top:2px;}
.tc-sched-label-exp{font-size:11px;color:var(--text);line-height:1.4;padding-top:1px;}
.tc-sched-dur-exp{text-align:right;color:var(--muted);font-size:10px;padding-top:2px;white-space:nowrap;}
/* Riga vuota / continuazione (nessun testo) — altezza ridotta */
.tc-sched-row-compact{display:grid;grid-template-columns:44px 1fr 100px;gap:4px;align-items:center;padding:0 4px;border-bottom:1px solid rgba(0,0,0,.03);min-height:2px;border-radius:2px;}
.tc-sched-row-compact .tc-sched-time-exp{font-size:8px;font-weight:400;opacity:0.45;}
.tc-sched-row-compact.tc-sched-free{min-height:4px;padding:0 4px;border-bottom:none;}
.tc-sched-row-compact.tc-sched-free .tc-sched-time-exp{font-size:0;line-height:0;padding:0;}
.tc-sched-row-compact.tc-sched-free.tc-sched-free-hour{min-height:10px;border-top:1px solid rgba(0,0,0,.07);}
.tc-sched-row-compact.tc-sched-free.tc-sched-free-hour .tc-sched-time-exp{font-size:8px;line-height:1;opacity:0.4;padding:1px 0;}
/* ── Form inserimento intervento manuale ── */
.plan-new-int-form{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 12px 0;}
.plan-new-int-title{font-size:13px;font-weight:600;color:var(--accent);margin-bottom:10px;}.plan-new-int-fields{display:grid;grid-template-columns:1fr;gap:6px;margin-bottom:10px;}.pni-row{display:flex;flex-direction:column;gap:3px;}
.pni-row label{text-transform:uppercase;font-size:10px;font-weight:700;color:var(--muted);letter-spacing:.5px;}
.pni-row select,.pni-row textarea{font-size:12px;padding:4px 7px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);}
.pni-row textarea{resize:vertical;min-height:48px;font-size:10px;}
.pni-att-ta{transition:min-height .2s ease;min-height:72px;max-height:160px;overflow-y:auto;font-size:10px;}
.pni-att-expanded{min-height:100px !important;}
.gi-ta{resize:vertical;min-height:48px;max-height:100px;overflow-y:auto;font-size:12px;padding:4px 7px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);}
.plan-new-int-actions{display:flex;flex-direction:column;gap:6px;padding:10px 12px 12px;border-top:1px solid var(--border);margin-top:8px;position:sticky;bottom:0;background:var(--panel);z-index:1;}
.pni-btn-save,.pni-btn-cancel{width:100%;box-sizing:border-box;text-align:center;}
.pni-btn-cancel{padding:4px 10px;border:1px solid var(--border);border-radius:5px;background:transparent;color:var(--muted);font-size:11px;cursor:pointer;white-space:nowrap;flex-shrink:0;}
.pni-btn-save{padding:4px 12px;border:none;border-radius:5px;background:var(--accent);color:white;font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;}
.pni-btn-save:disabled{opacity:.5;cursor:not-allowed;}.pni-dur-label{font-size:12px;color:var(--text);padding:3px 7px;background:var(--accent-light);border-radius:4px;font-weight:500;min-width:62px;text-align:center;display:inline-block;box-sizing:border-box;}
.pni-dur-row{display:inline-flex;align-items:center;gap:4px;}
.pni-dur-btn{flex:0 0 auto;}
.pni-flags{display:flex;flex-direction:column;gap:5px;}
.pni-flags label{display:flex;align-items:flex-start;gap:5px;font-size:11px;color:var(--text);cursor:pointer;line-height:1.3;}
.pni-flags input[type=checkbox]{margin-top:2px;accent-color:var(--accent);flex-shrink:0;}
.plan-col-travel{flex:0 0 13%;min-width:110px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:10px;overflow-y:auto;max-height:280px;border-left:none;border-top-left-radius:0;border-bottom-left-radius:0;}
.plan-col-diag{flex:0 0 200px;background:rgba(var(--fascia-fredda),.05);border:1px solid rgba(var(--fascia-fredda),.22);border-radius:8px;padding:8px 10px;font-size:9px;overflow-y:auto;max-height:280px;display:none;}
.plan-col-diag.visible{display:block;}
.plan-travel-row{padding:3px 0;border-bottom:1px solid rgba(0,0,0,.04);color:var(--muted);line-height:1.4;}.plan-travel-val{font-weight:600;color:var(--text);font-size:10px;}
.plan-travel-target{background:rgba(26,92,58,.08);border-radius:3px;padding:2px 4px;margin-top:2px;}
.plan-diag-row{padding:2px 0;border-bottom:1px solid rgba(var(--fascia-fredda),.12);}
.plan-diag-label{color:var(--blu);font-weight:600;font-size:8px;letter-spacing:.5px;text-transform:uppercase;}
.plan-diag-val{color:var(--text);font-size:9px;word-break:break-all;}
.osrm-loading{display:none;padding:8px 12px;background:var(--accent-light);border:1px solid rgba(26,92,58,.2);border-radius:7px;font-size:11px;color:var(--accent);font-weight:500;margin-bottom:8px;align-items:center;gap:8px;}
.osrm-loading.visible{display:flex;}
.osrm-spinner{width:14px;height:14px;border:2px solid rgba(26,92,58,.2);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;flex-shrink:0;}
@keyframes spin{to{transform:rotate(360deg)}}
.diag-toggle{font-size:10px;padding:4px 8px;border-radius:5px;border:1px solid rgba(var(--fascia-fredda),.32);background:none;color:var(--blu);cursor:pointer;font-family:'Geist',sans-serif;transition:all .15s;}
.diag-toggle.active{background:rgba(var(--fascia-fredda),.12);}
.plan-sched{flex:1 1 0;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:8px;border-top-right-radius:0;border-bottom-right-radius:0;padding:8px 10px;font-size:10px;overflow-y:auto;max-height:280px;}
.api-bar{background:rgba(185,28,28,.04);border-bottom:1px solid rgba(185,28,28,.12);display:flex;align-items:center;font-size:11px;color:var(--red);flex-shrink:0;padding:5px 20px;min-height:34px;gap:10px;}
.scoring-panel{margin-top:8px;padding:10px 12px;background:var(--surface);border:1px solid rgba(0,0,0,.08);border-radius:8px;font-size:11px;}
.scoring-panel-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid rgba(0,0,0,.06);}
.scoring-btn{padding:2px 8px;border:1px solid rgba(0,0,0,.12);border-radius:5px;background:white;font-size:10px;cursor:pointer;font-family:'Geist',sans-serif;}
.scoring-btn:hover{background:var(--surface);}
.scoring-row{display:flex;align-items:center;gap:8px;margin-bottom:4px;}
.scoring-label{flex:0 0 180px;font-size:10px;color:var(--text);cursor:help;}
.scoring-slider{flex:1;height:4px;-webkit-appearance:none;appearance:none;background:rgba(0,0,0,.1);border-radius:2px;outline:none;}
.scoring-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--accent);cursor:pointer;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,.2);}
.scoring-val{flex:0 0 30px;text-align:right;font-weight:600;font-size:11px;color:var(--accent);font-family:monospace;}
.scoring-apply{margin-top:8px;padding:6px 16px;border:none;border-radius:6px;background:var(--accent);color:white;font-size:11px;font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;width:100%;}
.scoring-apply:hover{opacity:.9;}
.api-bar.ok{background:rgba(22,101,52,.03);border-color:rgba(22,101,52,.1);color:var(--green);}
.api-bar input{background:var(--surface);border:1px solid var(--border);font-family:monospace;color:var(--text);outline:none;width:240px;border-radius:6px;font-size:12px;padding:4px 10px;letter-spacing:.08em;}.api-bar input:focus{border-color:var(--accent);}
.api-bar button{background:var(--accent);color:white;border:none;cursor:pointer;font-family:'Geist',sans-serif;border-radius:5px;padding:4px 14px;font-size:11px;font-weight:600;letter-spacing:.02em;}
@media(max-width:768px){.sidebar{display:none;}}
.plan-map-panel{display:none;margin-top:10px;border-radius:8px;overflow:hidden;border:1px solid var(--border);}
.plan-map-panel.open{display:block;}
.plan-map-container{width:100%;height:340px;}
.plan-map-btn{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:5px;padding:4px 12px;font-size:11px;cursor:pointer;font-family:'Geist',sans-serif;transition:background .15s;}
.plan-map-btn:hover{background:var(--border);}
.plan-map-btn.active{background:rgba(34,139,34,.12);border-color:var(--green);color:var(--green);}
/* Storico interventi */
.storico-panel{margin-top:10px;border:1px solid var(--border);border-radius:8px;overflow:hidden;font-size:11px;}
.storico-loading{padding:8px 12px;color:var(--muted);font-size:11px;}
.storico-empty{padding:8px 12px;color:var(--muted);font-size:11px;}
.storico-header{display:flex;justify-content:space-between;align-items:center;padding:7px 12px;background:var(--surface);cursor:pointer;font-weight:600;font-size:11px;color:var(--text);user-select:none;}
.storico-header:hover{background:var(--border);}
.storico-toggle{font-size:11px;color:var(--muted);transition:transform .2s;}
.storico-panel:not(.open) .storico-toggle{transform:rotate(-90deg);}
.storico-body{display:none;max-height:320px;overflow-y:auto;}
.storico-panel.open .storico-body{display:block;}
.storico-table{width:100%;border-collapse:collapse;font-size:10px;}
.storico-table th{background:var(--surface);padding:4px 6px;text-align:left;font-weight:600;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;z-index:1;}
.storico-table td{padding:4px 6px;border-bottom:1px solid rgba(0,0,0,.04);vertical-align:top;}
.storico-table tr:hover td{background:rgba(26,92,58,.03);}
.storico-att{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.storico-row-hidden{display:none;}
.storico-more{padding:6px 12px;text-align:center;color:var(--accent);cursor:pointer;font-size:10px;font-weight:600;border-top:1px solid var(--border);}
.storico-more:hover{background:var(--accent-light);}.storico-op { max-width: 200px; }
.storico-op-short {
  cursor: pointer;
  font-size: 11px;
  color: var(--text);
  display: block;
}
.storico-op-expand {
  cursor: pointer;
  color: var(--accent);
  font-weight: bold;
  margin-left: 3px;
}
.storico-op-short:hover { color: var(--accent); }/* ── Anteprima intervento in colonna 2 (overlay in tempo reale) ── */
.tc-sched-preview{background:rgba(22,101,52,.14)!important;border-left:2px solid var(--stato-ok);border-right:2px solid var(--stato-ok);}
.tc-sched-preview-first{border-top:2px solid var(--stato-ok);}
.tc-sched-preview-last{border-bottom:2px solid var(--stato-ok);}
.tc-sched-preview-overlap{background:rgba(204,0,0,.14)!important;border-left:2px solid var(--stato-errore);border-right:2px solid var(--stato-errore);}
.tc-sched-preview-ol-first{border-top:2px solid var(--stato-errore);}
.tc-sched-preview-ol-last{border-bottom:2px solid var(--stato-errore);}
/* ── Bottone modifica orario (ultimo slot di ogni intervento) ── */
.tc-sched-edit-btn{display:inline-block;margin-top:3px;padding:3px 7px;border:1px solid rgba(26,92,58,.3);border-radius:5px;background:var(--accent-light);color:var(--accent);font-size:9px;cursor:pointer;vertical-align:middle;line-height:1.4;white-space:nowrap;}
.tc-sched-edit-btn:hover{background:var(--accent);color:white;}
/* ── Intervento annullato (grigio) ── */
.tc-sched-cancelled{background:rgba(107,114,128,.10) !important;border-left:3px solid #9ca3af !important;}
.tc-sched-cancelled .tc-sched-label-exp{color:#9ca3af !important;text-decoration:line-through;}
.tc-sched-cancelled .tc-sched-time-exp,.tc-sched-cancelled .tc-sched-dur-exp{color:#9ca3af !important;opacity:.7;}
/* ── Popup modifica orario appuntamento ── */
.tc-time-edit-popup{position:fixed;z-index:500;background:var(--panel);border:1.5px solid var(--accent);border-radius:10px;padding:12px 14px;width:280px;box-shadow:0 4px 20px rgba(0,0,0,.18);display:none;}
.tc-tep-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
.tc-tep-title{font-size:12px;font-weight:700;color:var(--accent);}
.tc-tep-close{background:none;border:none;cursor:pointer;font-size:15px;color:var(--muted);padding:2px 6px;border-radius:4px;line-height:1;}
.tc-tep-close:hover{color:var(--red);background:rgba(185,28,28,.08);}
.tc-tep-selects{display:flex;align-items:center;gap:6px;margin-bottom:8px;}
.tc-tep-selects select{flex:1;padding:5px 7px;border:1px solid var(--border);border-radius:6px;font-size:14px;background:var(--surface);color:var(--text);font-family:'Geist',sans-serif;}
.tc-tep-sep{font-size:18px;font-weight:700;color:var(--muted);}
.tc-tep-info{font-size:11px;color:var(--muted);margin-bottom:10px;min-height:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tc-tep-actions{display:flex;gap:6px;justify-content:space-between;align-items:center;}
.tc-tep-btn-cancel-int{padding:4px 10px;border:1px solid rgba(185,28,28,.4);border-radius:5px;background:none;color:var(--stato-errore);font-size:11px;cursor:pointer;font-family:'Geist',sans-serif;}
.tc-tep-btn-cancel-int:hover{background:rgba(185,28,28,.08);}
.tc-tep-btn-close{padding:4px 12px;border:1px solid var(--border);border-radius:5px;background:none;color:var(--muted);font-size:12px;cursor:pointer;font-family:'Geist',sans-serif;}
.tc-tep-btn-save{padding:4px 14px;border:none;border-radius:5px;background:var(--accent);color:white;font-size:12px;font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;}
/* ── Bottone Ripristina (slot annullato) ── */
.tc-sched-restore-btn{display:inline-block;margin-top:3px;padding:3px 7px;border:1px solid rgba(107,114,128,.4);border-radius:5px;background:rgba(107,114,128,.08);color:#6b7280;font-size:9px;cursor:pointer;vertical-align:middle;line-height:1.4;white-space:nowrap;}
.tc-sched-restore-btn:hover{background:#6b7280;color:white;}
/* ── Filtro tecnico rapido nella card proposte ── */
.plan-filter-bar{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin-bottom:8px;padding:4px 0;}
.pf-chip{padding:3px 10px;border:1px solid var(--border);border-radius:5px;font-size:11px;color:var(--muted);cursor:pointer;background:var(--surface);transition:all .15s;}
.pf-chip:hover{border-color:var(--accent);color:var(--accent);}
.pf-chip.pf-chip-active{background:var(--accent);color:white;border-color:var(--accent);}
/* ── Pannello agenda giornaliera multi-tecnico ── */
.tc-agenda-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:2600;display:flex;align-items:flex-start;justify-content:center;padding-top:16px;}
.tc-agenda-panel{background:var(--panel);border-radius:12px;padding:0;width:98vw;max-width:1800px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 8px 40px rgba(0,0,0,.22);overflow:hidden;}
.tc-agenda-header{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface);gap:8px;}
.tc-agenda-title{font-size:14px;font-weight:700;color:var(--accent);flex:1;}
.tc-agenda-date-input{padding:5px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:var(--surface);color:var(--text);font-family:'Geist',sans-serif;}.tc-agenda-close{background:none;border:none;font-size:18px;cursor:pointer;color:var(--muted);padding:2px 6px;border-radius:4px;}
.tc-agenda-close:hover{color:var(--red);}
.tc-agenda-body{overflow-y:auto;padding:12px 16px;flex:1;}
.agenda-cols{display:flex;gap:12px;align-items:flex-start;flex-wrap:wrap;}
.agenda-col{flex:1;min-width:220px;background:var(--surface);border-radius:8px;border:1px solid var(--border);overflow:hidden;}
.agenda-col-header{padding:7px 10px;font-size:12px;font-weight:700;color:white;background:var(--accent);text-align:center;}
.agenda-stop{display:flex;gap:6px;padding:6px 10px;border-bottom:1px solid rgba(0,0,0,.05);}
.agenda-stop-time{font-size:11px;font-weight:700;color:var(--accent);min-width:38px;}
.agenda-stop-body{font-size:11px;color:var(--text);flex:1;}.agenda-col-footer{padding:5px 10px;font-size:10px;color:var(--green);text-align:right;background:rgba(22,163,74,.05);}/* ── Modal validazione dati mancanti ── */
.tc-val-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:9000;display:flex;align-items:center;justify-content:center;}
.tc-val-box{background:var(--panel);border-radius:10px;padding:20px 24px;max-width:360px;width:90%;box-shadow:0 8px 32px rgba(0,0,0,.2);border:1px solid var(--border);}
.tc-val-title{font-size:14px;font-weight:700;color:var(--text);margin-bottom:8px;}
.tc-val-msg{font-size:13px;color:var(--muted);margin-bottom:18px;line-height:1.5;}
.tc-val-actions{display:flex;gap:8px;justify-content:flex-end;}
.tc-val-btn-cancel{padding:6px 14px;border:1px solid rgba(185,28,28,.4);border-radius:5px;background:none;color:var(--stato-errore);font-size:12px;cursor:pointer;font-family:'Geist',sans-serif;}
.tc-val-btn-cancel:hover{background:rgba(185,28,28,.08);}
.tc-val-btn-ok{padding:6px 18px;border:none;border-radius:5px;background:var(--accent);color:white;font-size:12px;font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;}/* ── Sezione interventi manuali nella sidebar ── */
/* 2026-08-15: rimossi gli stili del pannello "Interventi TecniCall" (.man-*) e delle voci
   del pannello "Da chiudere" (.chiudi-list/.chiudi-item*): entrambi i pannelli sono stati
   eliminati dalla sidebar, la Tabella Interventi li sostituisce. Restano .chiudi-section,
   .chiudi-header e .chiudi-count, che vestono la voce INTERVENTI ancora presente. */
/* ── Sezione Da chiudere nella sidebar ── */
.chiudi-section{border:0.5px solid rgba(0,0,0,.12);border-radius:8px;padding:0;margin:0;border-top:none;overflow:visible;padding-top:0;}
.chiudi-header{display:flex;align-items:center;gap:5px;cursor:pointer;user-select:none;background:#ffedd5;padding:7px 10px;border-bottom:0.5px solid #fed7aa;}
.chiudi-header:hover .section-label{color:#d97706;}
.chiudi-count{font-size:9px;color:white;border-radius:8px;padding:1px 5px;font-weight:700;min-width:14px;text-align:center;background:#ea580c;}.chiudi-list{display:none;flex-direction:column;gap:2px;margin-top:5px;max-height:200px;overflow-y:auto;margin:0;padding:4px 6px 4px;}
/* ── Vista Gantt giornaliera ── */
.tc-gantt-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:2600;display:flex;align-items:flex-start;justify-content:center;padding-top:30px;}
.tc-gantt-panel{background:var(--panel);border-radius:12px;width:96vw;max-width:1440px;max-height:85vh;display:flex;flex-direction:column;box-shadow:0 8px 40px rgba(0,0,0,.22);overflow:visible;}
.tc-gantt-header{display:flex;align-items:center;gap:8px;padding:11px 16px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;}
.tc-gantt-title{font-size:14px;font-weight:700;color:var(--accent);flex:1;}
.tc-gantt-date-input{padding:5px 9px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:var(--panel);color:var(--text);font-family:'Geist',sans-serif;}
.tc-gantt-nav{border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;transition:all .15s;font-family:'Geist',sans-serif;padding:4px 10px;border-radius:6px;font-size:12px;}
.tc-gantt-nav:hover{border-color:var(--accent);color:var(--accent);}
.tc-gantt-btn-today{border:1px solid rgba(26,92,58,.25);cursor:pointer;font-family:'Geist',sans-serif;transition:all .15s;background:#ede9fe;color:#5b21b6;border-color:#ddd6fe;font-size:11px;padding:4px 12px;border-radius:5px;font-weight:600;}
.tc-gantt-btn-today:hover{background:#7c3aed;color:white;border-color:#7c3aed;}
.tc-gantt-close{background:none;border:none;font-size:18px;cursor:pointer;color:var(--muted);padding:2px 6px;border-radius:4px;}
.tc-gantt-close:hover{color:var(--red);}
.tc-gantt-body{overflow:hidden;display:flex;flex-direction:column;flex:1;min-height:0;}
.gantt-scroll{overflow:auto;flex:1;min-height:0;}
.gantt-empty{padding:28px;color:var(--muted);font-size:13px;text-align:center;}
.gantt-grid-wrap{display:flex;flex-direction:column;font-size:11px;white-space:nowrap;}
.gantt-grid-header{display:flex;position:sticky;top:0;z-index:4;background:var(--surface);border-bottom:2px solid var(--border);}
.gantt-hdr-time{width:52px;min-width:52px;flex-shrink:0;padding:5px 8px;font-weight:600;color:var(--muted);font-size:9px;border-right:1px solid var(--border);}
.gantt-hdr-tech{flex:0 0 160px;width:160px;min-width:0;color:var(--text);text-align:center;overflow:hidden;background:linear-gradient(180deg, var(--surface) 0%, var(--bg) 100%);font-size:11px;font-weight:600;letter-spacing:.03em;padding:7px 10px 5px;border-right:1px solid var(--border);border-bottom:2px solid var(--border);}
.gantt-th-count{margin-top:1px;display:inline-block;margin-left:5px;font-size:9px;font-weight:600;background:var(--border);color:var(--muted);border-radius:8px;padding:0px 5px;vertical-align:middle;}
.gantt-grid-body{display:flex;overflow-y:auto;overflow-x:auto;}
.gantt-col-time{width:52px;min-width:52px;flex-shrink:0;position:sticky;left:0;z-index:2;background:var(--bg);border-right:1px solid var(--border);position:relative;}
.gantt-time-slot{position:absolute;left:0;right:0;height:36px;padding:0 6px;display:flex;align-items:center;color:var(--muted);font-size:9px;font-variant-numeric:tabular-nums;border-bottom:1px solid rgba(0,0,0,.03);}
.gantt-time-slot-h{font-weight:700;color:var(--accent);font-size:10px;border-bottom:1px solid rgba(0,0,0,.1);}
.gantt-col-tech{flex:0 0 160px;width:160px;min-width:0;position:relative;border-right:1px solid rgba(0,0,0,.04);}
.gantt-slot{position:absolute;left:0;right:0;box-sizing:border-box;border-bottom:1px solid rgba(0,0,0,.03);}
.gantt-slot-hour{border-bottom:1px solid rgba(0,0,0,.1);}
.gantt-slot-lunch{background:rgba(var(--fascia-fredda),.05)!important;}
.gantt-col-tech .gantt-slot:nth-child(odd){background:rgba(0,0,0,.012);}
.gantt-col-tech .gantt-slot:nth-child(even){background:rgba(0,0,0,.026);}
.gantt-col-tech .gantt-slot.gantt-slot-lunch{background:rgba(var(--fascia-fredda),.07)!important;}
.gantt-slot:hover{background:rgba(37,99,235,.07)!important;cursor:pointer;}
.gantt-time-slot-lunch{justify-content:center;font-style:italic;color:var(--muted);font-size:9px;border-bottom:1px solid rgba(0,0,0,.1);}
.gantt-lunch-label{font-size:8px;color:var(--muted);font-style:italic;padding:0 4px;display:flex;align-items:center;height:100%;pointer-events:none;}
.mg-lunch-label{font-size:7px;color:var(--muted);font-style:italic;line-height:1;}
.gantt-dd-hover{background:rgba(37,99,235,.13)!important;}
.gantt-block{position:absolute;left:2px;right:2px;border-radius:6px;overflow:hidden;cursor:default;box-sizing:border-box;padding:2px 5px;border:1px solid rgba(0,0,0,.10);}.gantt-block:hover{filter:brightness(.95);}
/* CN-5: primo collaudo generato automaticamente → pulsa lentamente (colore base Collaudo) */
@keyframes primo-collaudo-pulse{0%,100%{background-color:#fae8ff;border-color:#a855f7;}50%{background-color:#e9b8ff;border-color:#7c3aed;}}
.gantt-block.primo-collaudo{animation:primo-collaudo-pulse 2.5s ease-in-out infinite;}
.gantt-block-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin:0 3px 1px 2px;vertical-align:middle;flex-shrink:0;}
.gantt-block-t{font-size:9px;font-weight:700;opacity:.85;line-height:1.2;display:flex;align-items:center;}
.gantt-block-c{font-size:10px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;}
.gantt-block-sub{font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:.65;line-height:1.3;}
/* FZ-A: località SEMPRE visibile in ogni blocco, grassetto verde scuro (come tasto "Tabella" attivo).
   Classe dedicata per non alterare .gantt-block-sub (usato anche per attività/data collaudo). */
.gantt-block-loc{font-size:9px;font-weight:700;color:var(--accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;}.gantt-empty{padding:28px;color:var(--muted);font-size:13px;text-align:center;}
.gantt-legend{display:flex;flex-wrap:wrap;flex-shrink:0;padding:8px 18px;gap:8px;background:var(--surface);border-top:1px solid var(--border);}
.gantt-legend-item{display:flex;align-items:center;gap:5px;font-size:10px;font-weight:500;color:var(--muted);background:var(--bg);border:0.5px solid var(--border);border-radius:20px;padding:2px 8px 2px 5px;}
.gantt-legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.tc-gantt-btn-print{padding:5px 11px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--muted);font-size:11px;font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;transition:all .15s;}
.tc-gantt-btn-print:hover{border-color:var(--accent);color:var(--accent);}
.gantt-print-wrap{position:relative;}
.gantt-print-panel{position:absolute;top:calc(100% + 6px);right:0;z-index:200;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:10px 12px;min-width:200px;box-shadow:0 4px 20px rgba(0,0,0,.15);}
.gantt-print-panel-title{font-size:11px;font-weight:600;color:var(--muted);margin-bottom:8px;text-transform:uppercase;letter-spacing:.4px;}
.gantt-print-check{display:flex;align-items:center;gap:7px;padding:4px 0;font-size:12px;color:var(--text);cursor:pointer;}
.gantt-print-check input{cursor:pointer;}
.gantt-print-actions{display:flex;gap:6px;margin-top:10px;padding-top:8px;border-top:1px solid var(--border);}
.gantt-print-go{flex:1;padding:6px;border:none;border-radius:6px;background:var(--accent);color:white;font-size:11px;font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;}
.gantt-print-go:hover{opacity:.85;}
.gantt-print-cancel{padding:6px 10px;border:1px solid var(--border);border-radius:6px;background:none;color:var(--muted);font-size:11px;cursor:pointer;font-family:'Geist',sans-serif;}
/* PROP-C — collaudi in scadenza sidebar */
.coll-section{border:0.5px solid rgba(0,0,0,.12);border-radius:8px;padding:0;margin:0;border-top:none;overflow:visible;margin-bottom:0;}
.coll-header{display:flex;align-items:center;gap:4px;cursor:pointer;transition:background .15s;background:#ede9fe;padding:7px 10px;border-radius:0;border-bottom:0.5px solid #ddd6fe;}
.coll-header:hover{background:#e0d9fb;}
.coll-toggle{font-size:9px;color:var(--muted);margin-left:auto;transition:transform .2s;}
.coll-toggle.open{transform:rotate(90deg);}
.coll-count{color:white;border-radius:10px;font-size:9px;font-weight:700;padding:1px 5px;min-width:16px;text-align:center;background:#7c3aed;}
.coll-list{display:none;flex-direction:column;gap:4px;padding:4px 6px 4px;}
.coll-list.open{display:flex;max-height:420px;overflow-y:auto;}
.coll-item{font-size:10px;padding:5px 7px;border-radius:5px;background:var(--surface);border:1px solid var(--border);cursor:pointer;display:flex;align-items:flex-start;gap:6px;transition:background .12s;}
.coll-item:hover{opacity:.85;}
.coll-item-body{flex:1;min-width:0;}
.coll-item-name{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;}
.coll-item-sub{font-size:9px;color:var(--muted);}
.coll-badge{display:inline-block;font-size:9px;font-weight:700;padding:1px 6px;border-radius:4px;vertical-align:middle;line-height:16px;margin-left:5px;letter-spacing:.4px;}
.coll-badge-web{background:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd;}
.coll-badge-sostituito{background:#fce7f3;color:#9d174d;border:1px solid #f9a8d4;}
.coll-badge-permutato{background:#f3e8ff;color:#6b21a8;border:1px solid #d8b4fe;}
.coll-badge-permuta{background:#ecfdf5;color:#166534;border:1px solid #86efac;}
.coll-badge-disattivato{background:#f1f5f9;color:#475569;border:1px solid #cbd5e1;}
.coll-badge-disattivato{background:#f1f5f9;color:#475569;}
.coll-item-date{text-align:right;flex-shrink:0;font-size:9px;color:var(--muted);font-variant-numeric:tabular-nums;}
.coll-item-diff{font-size:8px;margin-top:1px;font-weight:600;}
.coll-expired{border-color:#fca5a5;background:#fef2f2;}
.coll-expired .coll-item-name{color:var(--stato-errore);}
.coll-expired .coll-item-diff{color:var(--stato-errore);}
.coll-soon{border-color:#fed7aa;background:#fff7ed;}
.coll-soon .coll-item-diff{color:#c2410c;}
.coll-medium{border-color:#fde68a;}
.coll-medium .coll-item-diff{color:var(--stato-attenzione-testo);}
.coll-far .coll-item-diff{color:var(--muted);}

/* PROP-E — chip filtro data nelle proposte planning */
.plan-date-chips{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:8px;}
.pdc-chip{padding:3px 10px;border:1px solid var(--border);border-radius:5px;font-size:11px;color:var(--muted);cursor:pointer;background:var(--surface);transition:all .15s;font-weight:500;}
.pdc-chip:hover{border-color:var(--accent);color:var(--accent);}
.pdc-chip.active{background:var(--accent);color:white;border-color:var(--accent);}

/* PROP-B — saturazione settimanale */
.sat-week{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-top:5px;padding:4px 0 2px;}
.sat-day{display:flex;flex-direction:column;align-items:center;gap:2px;cursor:default;}
.sat-bar-wrap{width:100%;height:24px;background:rgba(0,0,0,.07);border-radius:3px;overflow:hidden;position:relative;}
.sat-bar-fill{position:absolute;bottom:0;width:100%;border-radius:3px;transition:height .3s;}
.sat-day-lbl{font-size:7px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.3px;}
.sat-day-sel{color:var(--accent);font-weight:700;}
/* PROP-F — pulsante stampa agenda */
.pni-btn-print{background:none;border:1px solid var(--border);border-radius:5px;padding:3px 9px;font-size:11px;color:var(--muted);cursor:pointer;font-family:'Geist',sans-serif;transition:background .15s,color .15s;}
.pni-btn-print:hover{background:var(--surface);color:var(--text);}

/* PROP-N — Sezione "Da richiamare" (sidebar) */
.ric-section{border:0.5px solid rgba(0,0,0,.12);border-radius:8px;padding:0;margin:0;border-top:none;overflow:visible;padding-top:0;margin-top:0;}
.ric-header{display:flex;align-items:center;gap:6px;cursor:pointer;border-radius:5px;transition:background .15s;background:#fee2e2;padding:7px 10px;border-bottom:0.5px solid #fecaca;}
.ric-header:hover{background:var(--surface);}
.ric-count{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;border-radius:8px;color:#fff;font-size:9px;font-weight:700;padding:0 4px;background:#dc2626;}
.ric-count-alert{background:var(--stato-errore);}
.ric-toggle{font-size:9px;color:var(--muted);margin-left:auto;transition:transform .2s;}
.ric-toggle.open{transform:rotate(90deg);}
.ric-list{max-height:0;overflow:hidden;transition:max-height .25s ease;padding:0 6px;}
.ric-list.open{max-height:400px;overflow-y:auto;}
.ric-item{display:flex;align-items:flex-start;gap:4px;padding:5px 4px;border-bottom:1px solid var(--border);cursor:pointer;}
.ric-item:hover{background:var(--surface);}
.ric-item.ric-scaduto{background:#fff7f7;}
.ric-item-body{flex:1;min-width:0;}
.ric-item-name{font-size:11px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ric-item-dt{font-size:10px;color:var(--muted);}
.ric-dt-scaduto{color:var(--stato-errore);font-weight:600;}
.ric-item-note{font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ric-item-risolto{flex-shrink:0;background:none;border:1px solid var(--border);border-radius:4px;padding:2px 5px;font-size:10px;color:var(--stato-ok);cursor:pointer;line-height:1.4;}
.ric-item-risolto:hover{background:#f0fdf4;}

/* PROP-N — Scheda cliente overlay */
#schedaClienteOverlay{pointer-events:none;}
#schedaClienteOverlay .scheda-panel{pointer-events:auto;}
.scheda-panel{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:360px;max-width:95vw;background:var(--surface,#fff);border-radius:12px;box-shadow:0 8px 36px rgba(0,0,0,.28);z-index:1801;font-family:'Geist',sans-serif;font-size:13px;}
.scheda-int-panel{position:fixed;z-index:600;background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-lg);width:480px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column;}
.scheda-int-header{display:flex;align-items:center;justify-content:space-between;background:var(--surface);cursor:grab;user-select:none;border-bottom:1px solid var(--border);flex-shrink:0;border-top:3px solid var(--accent);border-radius:12px 12px 0 0;padding:9px 12px;}
.scheda-int-header:active{cursor:grabbing;}
.scheda-int-header-left{display:flex;align-items:center;gap:8px;}
.scheda-int-icon{font-size:18px;}
.scheda-int-name{font-weight:700;color:var(--accent);font-size:13px;letter-spacing:.01em;}
.scheda-int-sub{margin-top:1px;font-size:10px;color:var(--muted);}
.scheda-int-win-btns{display:flex;gap:3px;margin-left:auto;}
.scheda-int-btn{width:18px;height:18px;border-radius:5px;border:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:'Geist',sans-serif;padding:0;transition:all .15s;}
.scheda-int-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
.scheda-int-close:hover{background:var(--stato-errore)!important;border-color:var(--stato-errore)!important;}
.scheda-int-body{padding:14px;overflow-y:auto;flex:1;}
.scheda-int-contacts{display:flex;flex-direction:column;margin-bottom:8px;background:rgba(22,163,74,.06);border:1px solid rgba(22,163,74,.18);border-radius:8px;padding:8px 12px;gap:6px;}
.scheda-int-note-cli{font-size:11.5px;color:var(--muted);margin-bottom:6px;padding:4px 0;}
.scheda-int-prompt{font-size:12px;font-weight:600;color:var(--text);margin:10px 0 4px;}
.scheda-int-dur-section{margin-bottom:8px;}
.scheda-int-dur-label{margin-bottom:4px;font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--muted);}
.scheda-int-plan-area{margin-top:8px;overflow:hidden;}
.scheda-int-plan-area .plan-card{max-width:100%;width:100%;box-sizing:border-box;}
.scheda-int-plan-area .plan-selected-wrap{flex-wrap:wrap;}
.scheda-int-plan-area .plan-sched-exp{flex:1;min-width:0;}
.imp-row-sel{border-color:var(--accent)!important;background:var(--accent-light)!important;}
.scheda-header{display:flex;align-items:center;justify-content:space-between;padding:12px 14px 10px;border-bottom:1px solid var(--border);background:var(--surface);border-radius:12px 12px 0 0;user-select:none;}
.scheda-title{font-weight:700;font-size:14px;color:var(--text);}
.scheda-close{background:none;border:none;font-size:15px;cursor:pointer;color:var(--muted);padding:2px 5px;border-radius:4px;}
.scheda-close:hover{background:var(--border);color:var(--text);}
.scheda-body{padding:12px 14px;display:flex;flex-direction:column;gap:6px;max-height:70vh;overflow-y:auto;}
.scheda-info-row{font-size:12px;color:var(--muted);}
.scheda-tels{display:flex;flex-direction:column;gap:3px;}
.scheda-tel{font-size:12px;color:var(--accent);text-decoration:none;font-weight:500;}
.scheda-tel:hover{text-decoration:underline;}
.scheda-note-cli{font-size:11px;color:var(--muted);background:var(--bg,#f9fafb);border-radius:5px;padding:5px 8px;line-height:1.45;}
.scheda-imp{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--muted);background:var(--bg,#f9fafb);border-radius:5px;padding:5px 8px;}
.scheda-imp-num{font-weight:600;color:var(--text);}
.scheda-collaudo-lbl{color:#b45309;}
.scheda-sep{border:none;border-top:1px solid var(--border);margin:4px 0;}
.scheda-field-lbl{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:2px;}
.scheda-textarea{width:100%;border:1px solid var(--border);border-radius:6px;padding:7px 9px;font-size:12px;font-family:'Geist',sans-serif;resize:vertical;min-height:60px;color:var(--text);background:var(--bg,#fff);}
.scheda-textarea:focus{outline:none;border-color:var(--accent);}.scheda-actions{display:flex;gap:8px;margin-top:4px;}
.scheda-btn-cerca{flex:1;padding:7px 10px;border:1px solid var(--border);border-radius:5px;background:none;font-size:12px;cursor:pointer;color:var(--text);font-family:'Geist',sans-serif;transition:background .15s;}
.scheda-btn-cerca:hover{background:var(--surface);}
.scheda-btn-save{flex:1;padding:7px 10px;border:none;border-radius:5px;background:var(--accent,#2563eb);color:#fff;font-size:12px;font-weight:600;cursor:pointer;font-family:'Geist',sans-serif;transition:opacity .15s;}
.scheda-btn-save:hover{opacity:.88;}
.scheda-saved-msg{font-size:11px;color:var(--stato-ok);text-align:center;font-weight:600;}
.scheda-subtitle-name{font-size:11px;color:var(--muted);margin-top:2px;}
.scheda-datetime-row{display:flex;align-items:center;gap:5px;}
.scheda-date-inp{flex:1;border:1px solid var(--border);border-radius:6px;padding:5px 8px;font-size:12px;font-family:'Geist',sans-serif;color:var(--text);background:var(--bg,#fff);}
.scheda-date-inp:focus{outline:none;border-color:var(--accent);}
.scheda-time-sel{border:1px solid var(--border);border-radius:6px;padding:5px 4px;font-size:12px;font-family:'Geist',sans-serif;color:var(--text);background:var(--bg,#fff);cursor:pointer;}
.scheda-time-sel:focus{outline:none;border-color:var(--accent);}
.scheda-time-sep{color:var(--muted);font-weight:600;font-size:13px;}
.scheda-btn-elim{flex:1;padding:7px 10px;border:1px solid rgba(204,0,0,.3);border-radius:5px;background:none;font-size:12px;cursor:pointer;color:var(--stato-errore);font-family:'Geist',sans-serif;transition:background .15s;}
.scheda-btn-elim:hover{background:rgba(220,38,38,.07);}

/* PROP-O — Filtro geografico collaudi */
.coll-filter-bar{position:sticky;top:0;z-index:10;background:var(--surface,#fff);padding:5px 4px 6px;border-bottom:1px solid var(--border);box-shadow:0 3px 8px rgba(0,0,0,.10);display:flex;flex-direction:column;gap:4px;}
.coll-filter-input{width:100%;border:1px solid var(--border);border-radius:5px;padding:4px 8px;font-size:11px;font-family:'Geist',sans-serif;color:var(--text);background:var(--bg,#fff);box-sizing:border-box;}
.coll-filter-input:focus{outline:none;border-color:var(--accent);}
.coll-filter-row2{display:flex;align-items:center;gap:4px;}
.coll-vicino-wrap{flex:1;min-width:0;position:relative;}
.coll-vicino-input{width:100%;border:1px solid var(--border);border-radius:5px;padding:3px 6px;font-size:10px;font-family:'Geist',sans-serif;color:var(--text);background:var(--bg,#fff);box-sizing:border-box;}
.coll-vicino-input:focus{outline:none;border-color:var(--accent);}
.coll-vicino-drop{position:absolute;top:calc(100% + 2px);left:0;right:0;background:var(--surface,#fff);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 12px rgba(0,0,0,.12);z-index:999;max-height:180px;overflow-y:auto;}
.coll-vicino-item{padding:5px 8px;font-size:10px;cursor:pointer;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.coll-vicino-item:hover{background:var(--accent-light,rgba(99,102,241,.08));}
.coll-vicino-empty{color:var(--muted);cursor:default;}
.coll-filter-raggio{width:40px;border:1px solid var(--border);border-radius:5px;padding:3px 5px;font-size:11px;font-family:'Geist',sans-serif;color:var(--text);background:var(--bg,#fff);text-align:center;}
.coll-filter-raggio:focus{outline:none;border-color:var(--accent);}
.coll-filter-km{font-size:10px;color:var(--muted);white-space:nowrap;}
.coll-filter-reset{background:none;border:1px solid var(--border);border-radius:4px;padding:2px 5px;font-size:10px;cursor:pointer;color:var(--muted);}
.coll-filter-reset:hover{background:var(--surface);color:var(--text);}
.coll-filter-counter{font-size:10px;color:var(--muted);min-height:12px;}
.coll-mostra-altri{width:100%;margin-top:4px;padding:6px;border:1px dashed var(--border);border-radius:6px;background:none;color:var(--accent);font-size:10px;cursor:pointer;font-family:inherit;}
.coll-mostra-altri:hover{background:var(--surface);}
/* ── Toast aggiornamento collaudo ──────────────────────────────────── */
.collaudo-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#1e3a5f;color:#fff;padding:8px 20px;border-radius:8px;font-size:12px;font-weight:500;opacity:0;pointer-events:none;transition:opacity .3s;z-index:9999;white-space:nowrap;}
.collaudo-toast.visible{opacity:1;}

/* ── Assenza rapida tecnico ──────────────────────────────────────────── */
#assenzaModal{display:none;position:fixed;inset:0;z-index:2500;align-items:center;justify-content:center;background:rgba(0,0,0,.45);}
.assenza-box{background:var(--surface);border-radius:10px;box-shadow:0 8px 32px rgba(0,0,0,.25);width:320px;max-width:95vw;}
.assenza-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;font-size:13px;}
.assenza-header button{background:none;border:none;cursor:pointer;font-size:16px;color:var(--muted);line-height:1;}
.assenza-body{padding:14px 16px;display:flex;flex-direction:column;gap:6px;}
.assenza-body label{font-size:11px;color:var(--muted);font-weight:500;margin-top:2px;}
.assenza-body select,.assenza-body input[type="date"]{width:100%;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-size:12px;background:var(--bg);color:var(--text);}.assenza-info{font-size:11px;color:var(--muted);min-height:14px;margin-top:2px;}
.assenza-actions{display:flex;justify-content:flex-end;gap:8px;padding:10px 16px;border-top:1px solid var(--border);}
.assenza-btn-cancel{background:none;border:1px solid var(--border);border-radius:5px;padding:5px 14px;font-size:12px;cursor:pointer;color:var(--text);}
.assenza-btn-save{background:var(--accent);color:#fff;border:none;border-radius:5px;padding:5px 14px;font-size:12px;cursor:pointer;font-weight:600;}
.assenza-btn-save:disabled{opacity:.5;cursor:not-allowed;}
.ass-lbl{font-size:11px;font-weight:600;color:var(--text);margin-bottom:3px;display:block;}
.ass-input{width:100%;box-sizing:border-box;font-size:12px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);}
.ass-tipi-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-bottom:2px;}
.ass-tipo-item{display:flex;align-items:center;gap:6px;font-size:11px;cursor:pointer;padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:var(--surface);}
.ass-tipo-item:hover{background:var(--border);}
.ass-tipo-item input{margin:0;}
.ass-tipo-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;}
.ass-date-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
/* ── Scheda header con pulsanti min/close ────────────────────────────── */
.scheda-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:var(--surface-2,var(--surface));border-bottom:1px solid var(--border);border-radius:10px 10px 0 0;}
.scheda-header-btns{display:flex;gap:4px;}
.scheda-min{background:none;border:1px solid var(--border);border-radius:5px;width:22px;height:22px;font-size:14px;line-height:1;cursor:pointer;color:var(--muted);display:flex;align-items:center;justify-content:center;}
.scheda-min:hover{background:var(--bg);color:var(--text);}

/* ── Schede minimizzate (PROP-Q) ─────────────────────────────────────── */
.schede-min-panel{position:fixed;right:0;top:50%;transform:translateY(-50%);z-index:1900;display:flex;flex-direction:column;gap:6px;padding:8px 6px;background:var(--surface);border:1px solid var(--border);border-right:none;border-radius:10px 0 0 10px;box-shadow:-4px 4px 16px rgba(0,0,0,.18);max-height:70vh;overflow-y:auto;}
/* border !important: gia' cosi' (via Opzione B) prima del consolidamento — sopprime i border-color
   delle varianti .scheda-min-card-piano/-plan piu' sotto. Toglierlo li riaccenderebbe: decisione
   estetica da prendere a parte, non durante una pulizia a parita' di resa. */
.scheda-min-card{display:flex;align-items:center;gap:6px;background:var(--bg);cursor:pointer;min-width:120px;max-width:180px;transition:background .15s;padding:6px 10px;border:0.5px solid var(--border)!important;box-shadow:0 2px 6px rgba(0,0,0,.06);border-radius:8px;}
.scheda-min-card:hover{background:var(--surface-2,var(--border));}
.scheda-min-name{color:var(--text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;}
.scheda-min-close{background:none;border:none;cursor:pointer;font-size:11px;color:var(--muted);padding:0 2px;line-height:1;flex-shrink:0;}
.scheda-min-close:hover{color:var(--text);}
.scheda-min-icon{font-size:16px;flex-shrink:0;line-height:1;}
.scheda-min-dot{font-size:10px;flex-shrink:0;line-height:1;}
.scheda-min-dot.dot-note{color:#16a34a;}
.scheda-min-dot.dot-ric{font-size:11px;}
.scheda-min-card-piano{border-color:rgba(99,102,241,.35);background:rgba(99,102,241,.06);}
.scheda-min-card-piano:hover{background:rgba(99,102,241,.13);}
.scheda-min-card-piano .scheda-min-name{color:#6366f1;}
.plan-sospendi-btn{border-color:rgba(99,102,241,.4)!important;color:#6366f1!important;}
.plan-sospendi-btn:hover{background:rgba(99,102,241,.08)!important;}
/* ── Gantt: home embedded (PROP-U) + view toggle (PROP-V) ─────────────── */
.gantt-home-container{position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg);}
.gantt-home-header{display:flex;align-items:center;gap:8px;padding:10px 16px;border-bottom:1px solid var(--blu-scuro);background:var(--blu-scuro);flex-shrink:0;}
/* Header Gantt a 3 zone: titolo a sinistra, gruppo navigazione centrato, view/stats a destra (FX) */
.gantt-hh-left{flex:1;display:flex;align-items:center;min-width:0;}
.gantt-hh-center{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;}
.gantt-hh-right{flex:1;display:flex;align-items:center;justify-content:flex-end;gap:8px;}
.gantt-view-toggle{display:flex;gap:2px;background:var(--surface);border:1px solid var(--border);border-radius:5px;padding:2px;margin-left:4px;}
.gantt-view-btn{border:none;background:none;color:var(--muted);font-weight:600;cursor:pointer;transition:all .15s;font-family:'Geist',sans-serif;border-radius:5px;font-size:11px;padding:4px 13px;letter-spacing:.02em;}
.gantt-view-btn.active{background:var(--accent);color:white;}
.gantt-view-btn:hover:not(.active){color:var(--text);}
.gantt-map-wrap{flex:1;min-height:0;height:100%;}
.gantt-map-wrap .leaflet-container{height:100%;width:100%;min-height:300px;}.gantt-dd-hover td,td.gantt-dd-hover{outline:2px dashed var(--accent)!important;background:rgba(26,92,58,.10)!important;}
/* ── Modale inserimento intervento da Gantt ────────────────────────────── */
.gi-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:2600;display:flex;align-items:center;justify-content:center;}
.gi-box{background:var(--panel);border-radius:12px;width:520px;max-width:94vw;max-height:90vh;box-shadow:0 8px 40px rgba(0,0,0,.22);display:flex;flex-direction:column;overflow:hidden;}
.gi-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface);}
.gi-title{font-size:14px;font-weight:700;color:var(--accent);}
.gi-row{display:flex;gap:10px;padding:12px 16px 0;}
.gi-field{display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:600;color:var(--muted);padding:0 16px 10px;}
.gi-field:first-child{padding-left:16px;}
.gi-field-wide{flex:1;}
.gi-row .gi-field{padding-left:0;padding-right:0;}
.gi-inp{padding:6px 10px;border:1px solid var(--border);border-radius:7px;font-size:12px;background:var(--bg);color:var(--text);font-family:'Geist',sans-serif;width:100%;}
.gi-inp:focus{outline:none;border-color:var(--accent);}
.gi-sel{padding:5px 8px;border:1px solid var(--border);border-radius:7px;font-size:12px;background:var(--bg);color:var(--text);font-family:'Geist',sans-serif;}
.gi-ta{padding:6px 10px;border:1px solid var(--border);border-radius:7px;font-size:12px;background:var(--bg);color:var(--text);font-family:'Geist',sans-serif;width:100%;resize:vertical;}
.gi-actions{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--surface);}.gi-ta{resize:none;max-height:80px;overflow-y:auto;}

/* ── Panel Statistiche ──────────────────────────────────────────────────── */
.stats-box{background:var(--panel);border-radius:12px;width:700px;max-width:96vw;max-height:85vh;display:flex;flex-direction:column;box-shadow:0 8px 40px rgba(0,0,0,.22);}
.stats-body{overflow-y:auto;padding:20px 24px;display:flex;flex-direction:column;gap:20px;}
.stats-section{background:var(--surface);border-radius:9px;padding:14px 16px;}
.stats-section-title{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px;}
.stats-row{display:flex;align-items:center;gap:10px;padding:5px 0;border-bottom:1px solid var(--border);font-size:12px;}
.stats-row:last-child{border-bottom:none;}
.stats-row-label{flex:1;color:var(--text);}
.stats-row-val{font-weight:700;color:var(--accent);min-width:30px;text-align:right;}
.stats-row-bar{height:6px;background:var(--accent);border-radius:3px;min-width:4px;transition:width .3s;}

/* ── Autocomplete dropdown ──────────────────────────────────────────────── */
.tc-ac-dropdown{position:fixed;z-index:9999;background:var(--bg,#fff);border:1px solid var(--border);border-radius:7px;box-shadow:0 4px 16px rgba(0,0,0,.13);overflow:hidden;display:none;max-height:220px;overflow-y:auto;}
.tc-ac-item{padding:7px 12px;font-size:12px;font-family:'Geist',sans-serif;color:var(--text);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tc-ac-item:hover,.tc-ac-active{background:var(--accent-soft,rgba(79,70,229,.08));color:var(--accent,#4f46e5);}

/* ── Pannello pianificazione flottante ─────────────────────────────────── */
.plan-float-panel{position:fixed;top:48px;left:50%;transform:translateX(-50%);width:min(1280px,96vw);height:78vh;min-width:540px;min-height:220px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 40px rgba(0,0,0,.28);z-index:900;display:flex;flex-direction:column;resize:both;overflow:hidden;}
.plan-float-title{display:flex;align-items:center;cursor:move;user-select:none;flex-shrink:0;gap:6px;background:var(--accent);border-bottom:none;border-radius:10px 10px 0 0;padding:9px 12px;}
.plan-float-title-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:white;font-size:12px;font-weight:600;}
.plan-float-btns{display:flex;gap:3px;flex-shrink:0;}
.plan-float-btn{border:1px solid var(--border);border-radius:5px;width:20px;height:20px;cursor:pointer;font-size:11px;display:flex;align-items:center;justify-content:center;transition:all .15s;font-family:'Geist',sans-serif;padding:0;border-color:rgba(255,255,255,.3);color:rgba(255,255,255,.8);background:rgba(255,255,255,.1);}
.plan-float-btn:hover{background:rgba(255,255,255,.25);border-color:white;color:white;}
.plan-float-btn.close-btn:hover{background:var(--stato-errore);border-color:var(--stato-errore);}
.plan-float-body{flex:1;overflow:auto;display:flex;min-height:0;}
.plan-float-body .plan-card{max-width:none;border:none;box-shadow:none;padding:0;border-radius:0;background:transparent;width:100%;display:flex;flex:1;}
.plan-float-body .plan-selected-wrap{flex:1;align-items:stretch;min-height:0;}
.plan-float-body .plan-col1-wrap{flex:0 0 460px;overflow-y:auto;}
.plan-float-body .plan-sched-exp{flex:1;min-width:300px;overflow-y:auto;}
/* ── 30/08 — Finestra unica "Registra intervento": 3 colonne regolabili ──────
   Colonna 1 = match tecnico + form · colonna 2 = scheda cliente · colonna 3 = planning
   del giorno. Le prime due hanno larghezza fissa (impostata da _planApplyColWidths e
   trascinabile con .plan-col-split); la terza e' l'elastica, cosi' allargando la finestra
   e' il planning a guadagnare spazio. Rispetto alle 2 colonne di prima il planning e'
   volutamente piu' stretto: deve dividere lo spazio con la scheda. */
.plan-float-body .plan-selected-wrap.plan-3col{gap:0;}
.plan-float-body .plan-selected-wrap.plan-3col .plan-col1-wrap{flex:0 0 400px;min-width:0;}
.plan-float-body .plan-selected-wrap.plan-3col .plan-sched-exp{flex:1;min-width:220px;}
.plan-col-scheda{flex:0 0 430px;min-width:0;display:flex;flex-direction:column;
  overflow-y:auto;overflow-x:hidden;
  background:var(--panel);border:1px solid var(--border);border-radius:8px;}
.plan-col-scheda .scheda-int-body{padding:10px 12px;}
/* La riga impianto era disegnata per una finestra da 480px: in colonna (~430px, e meno
   ancora se l'utente la stringe) numero + indirizzo + Dettagli + tipo + badge + azioni non
   ci stanno in fila e sfondavano di lato. Qui va a capo: numero e indirizzo sulla prima
   riga, i chip sulla seconda. L'indirizzo si tronca con i puntini solo se serve davvero. */
.plan-col-scheda .imp-row{flex-wrap:wrap;row-gap:4px;align-items:center;}
.plan-col-scheda .imp-addr{flex:1 1 55%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.plan-col-scheda .imp-row-actions{margin-left:auto;}
/* La mappa dell'impianto occupa mezza colonna: in finestra unica basta molto meno per
   capire dove si va, e sotto ci sono "Ultimi interventi" e le note. */
.plan-col-scheda iframe{height:220px!important;}
/* La scheda incorporata non e' piu' una finestra: niente bordo superiore colorato ne'
   angoli arrotondati da barra del titolo, e nessun cursore di trascinamento. */
.scheda-int-header-embed{cursor:default;border-top:none;border-radius:8px 8px 0 0;
  position:sticky;top:0;z-index:2;}
/* Lampeggio della colonna centrale: il clic sul nome cliente in colonna 1 chiedeva di aprire
   la scheda, che ora e' gia' li' — senza un segno sembrerebbe un clic a vuoto. */
.plan-col-scheda-flash{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-light) inset;}
/* Maniglia di ridimensionamento fra due colonne */
.plan-col-split{flex:0 0 8px;cursor:col-resize;position:relative;align-self:stretch;
  background:transparent;touch-action:none;}
.plan-col-split::before{content:'';position:absolute;top:0;bottom:0;left:3px;width:2px;
  background:var(--border);border-radius:1px;transition:background .12s;}
.plan-col-split:hover::before,.plan-col-split.dragging::before{background:var(--accent);}
/* Chip di durata: nella finestra unica il clic non lancia piu' una ricerca, imposta la
   durata — senza un segno di "scelto" il clic sembrerebbe non aver fatto niente. */
.dur-chip-sel{background:var(--accent);color:#fff;}
/* Impianto bersaglio dell'intervento in NERO, gli altri in grigio (30/08) */
.imp-row-active .imp-num,.imp-row-active .imp-addr{color:var(--text);font-weight:700;}
.imp-row-other{opacity:.55;}
.imp-row-other .imp-num,.imp-row-other .imp-addr{color:var(--muted);font-weight:400;}
.imp-row-other:hover{opacity:1;}
/* Drag & drop hover target */
.tc-dd-hover{outline:2px dashed var(--accent)!important;background:rgba(79,70,229,.08)!important;}
/* Card pianificazione minimizzata nel schedeMinPanel */
.scheda-min-card-plan{background:rgba(29,78,216,.10);border-color:#1d4ed8;}
.scheda-min-card-plan .scheda-min-icon{color:#1d4ed8;}
.scheda-min-card-plan:hover{background:rgba(29,78,216,.18);}
/* Cursore pointer su celle libere della tabella oraria */
.tc-sched-free[ondblclick]{cursor:pointer;}
.tc-sched-row-compact.tc-sched-free[ondblclick]{cursor:pointer;}
.scheda-int-section{border-top:1px solid var(--border);margin-top:8px;}
.scheda-int-section-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer;user-select:none;background:var(--surface);font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--muted);padding:6px 10px;border:0.5px solid var(--border);margin-top:4px;border-radius:6px;}
.scheda-int-section-header:hover{background:var(--border);}
.scheda-int-section-arrow{font-size:10px;color:var(--muted);}
.scheda-int-section-body{padding:4px 0 8px;}
.scheda-int-note-textarea{width:100%;box-sizing:border-box;font-size:11px;padding:6px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);resize:vertical;min-height:60px;}
.scheda-int-note-lbl{font-size:11px;color:var(--muted);margin:6px 0 3px;}
.scheda-int-note-dt-row{display:flex;align-items:center;gap:4px;margin-bottom:8px;}
.scheda-int-note-actions{display:flex;gap:6px;justify-content:flex-end;}
.storico-edit-btn {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 12px;
  color: var(--muted);
  padding: 2px 4px;
  border-radius:5px;
  line-height: 1;
  opacity: 0.5;
  transition: opacity .15s;
}
.storico-edit-btn:hover { opacity: 1; color: var(--accent); }
/* ── Colori per-sezione della sidebar (residuo del restyle "Opzione B", consolidato il
   2026-08-08: le proprieta' duplicate sono state fuse nelle definizioni originali delle
   sezioni — .man-section r.~370, .chiudi-section, .ric-section, .coll-section, .db-*,
   gantt-nav/legenda, scheda-int, plan-float, pcp, api-bar — e il blocco e' stato sciolto.
   L'overflow:visible delle sezioni (fix FV 2026-07-05, non clippare le liste interne)
   vive ora dentro le regole originali. Gli !important qui sotto sono NECESSARI: vincono
   sui colori :hover delle intestazioni (.man-header:hover .section-label ecc.), come
   faceva il blocco. ── */
.chiudi-header .section-label { color: #9a3412 !important; margin-bottom: 0 !important; }
.ric-header .section-label { color: #991b1b !important; margin-bottom: 0 !important; }
.ric-header .ric-toggle { color: #dc2626 !important; }
.coll-header .section-label { color: #5b21b6 !important; margin-bottom: 0 !important; }
.coll-header .coll-toggle { color: #7c3aed !important; }
.db-section[open] .db-summary{border-bottom:0.5px solid #cbd5e1!important;}

/* ===== IMPOSTAZIONI / DATABASE — fix coerenza card ===== */




.db-util-row { grid-template-columns: repeat(5, 1fr) !important; }
/* ===== END DB FIX ===== */

/* ===== RESTYLING GLOBALE UI — 4 aree ===== */

/* 1. BARRA SUPERIORE API KEY */



.api-bar .ok-label {
  font-size: 11px !important;
  letter-spacing: .03em !important;
}

/* 2. INTESTAZIONI TECNICI GANTT */


.gantt-th-count:not(:empty) { margin-top: 0 !important; }

/* 3. LEGENDA GANTT — pill invece di dot */




/* 4. BOTTONI TOOLBAR GANTT */


/* Tabella → verde (usa accent esistente) */

/* Maps → tinted blu quando attivo */
#ganttBtnMaps.active, #ganttHomeBtnMaps.active {
  background: #1e40af !important;
  color: white !important;
}
/* Stats → viola */


/* ===== END RESTYLING GLOBALE ===== */

/* ===== RESTYLING FINESTRE FLOTTANTI ===== */

/* — 1. FORM "REGISTRA INTERVENTO" (plan-float-panel) — */






/* Label campi form — più leggibili */


/* Bottone Elimina — outline rosso, non filled */
.pni-btn-delete {
  background: none !important;
  color: var(--stato-errore) !important;
  border: 1px solid rgba(204,0,0,.35) !important;
  border-radius: 5px !important;
  font-weight: 500 !important;
}
.pni-btn-delete:hover {
  background: rgba(204,0,0,.07) !important;
  border-color: var(--stato-errore) !important;
}

/* — 2. SCHEDA INTERVENTO (scheda-int-panel) — */




/* Box contatti — tint verde più visibile */


/* Sezioni interne — card-style leggero */



/* Chip durata — pill più arrotondato */


/* Prompt "Qual è il problema" */



/* — 3. CARD MINIMIZZATA — */



/* ===== END RESTYLING FINESTRE ===== */

/* ===== SCHEDA PIANIFICAZIONE — restyling ===== */

/* Link cliente nel form — ben visibile */
#pniClientLink {
  color: var(--accent) !important;
  text-decoration: underline !important;
  text-underline-offset: 2px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
}
#pniClientLink:hover { opacity: .75; }

/* Custom panel — label sezioni card-style */



/* Hint accanto al label */
.pcp-label-hint {
  font-size: 9px !important;
  font-weight: 400 !important;
  letter-spacing: .3px !important;
  text-transform: none !important;
  color: var(--muted) !important;
}

/* Chip tecnico selezionato — evidenziato con bordo più spesso */
.pcp-chips .pcp-chip.selected {
  background: var(--accent-light) !important;
  border: 2px solid var(--accent) !important;
  color: var(--accent) !important;
  font-weight: 700 !important;
}

/* Chip tecnico hover */
.pcp-chips .pcp-chip:hover {
  border-color: var(--accent) !important;
  color: var(--accent) !important;
  background: var(--accent-light) !important;
}

/* Bottone conferma */


/* ===== END SCHEDA PIANIFICAZIONE ===== */

/* ===== AGENDA — frecce nav + giorno multi-select ===== */
.tc-agenda-date-nav {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
}

/* ===== END AGENDA ===== */

/* ── DB Query + Import Horace (tc-ui-db.js) ──────────────────────────── */
.db-query-input {
  width: 100%;
  box-sizing: border-box;
  background: var(--bg);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 7px 9px;
  font-size: 12px;
  resize: vertical;
  margin-bottom: 6px;
}
.db-query-input:focus { outline: none; border-color: var(--accent); }
.db-util-btn--full { width: 100%; }
.db-util-btn--primary{background:var(--accent)!important;color:#fff!important;border-color:var(--accent)!important;font-weight:700;}
.db-util-btn--primary:hover{opacity:.88;}
.db-util-btn--warn{background:var(--stato-attenzione-testo)!important;color:#fff!important;border-color:var(--stato-attenzione)!important;font-weight:700;}
.db-util-btn--warn:hover{opacity:.88;}
.db-util-btn--small{padding:3px 8px;font-size:11px;}

/* ── Chip azioni impianto (hide + geo) ─────────────────────────────── */
#impGeoModal { z-index: 2000 !important; }

.imp-row-actions {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
  flex-shrink: 0;
}
/* ── Base chip uniforme — colori Maps per tutti ── */
.imp-chip-hide, .imp-chip-geo, .imp-chip-restore, .imp-chip-dettagli{display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;padding:2px 6px;border-radius:5px;user-select:none;white-space:nowrap;transition:background .15s;flex-shrink:0;}
/* Colore base uguale per tutti (tranne collaudo) */
.imp-chip-hide, .imp-chip-geo, .imp-chip-dettagli{background:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd;cursor:pointer;pointer-events:auto;}
.imp-chip-hide:hover, .imp-chip-geo:hover, .imp-chip-dettagli:hover, .imp-tipo:hover { background: #bfdbfe; }

/* ── Impianti nascosti panel ──────────── */
.imp-nascosto-row {
  display: flex; align-items: center; gap: 6px;
  padding: 4px 0; border-bottom: 1px solid var(--border);
  font-size: 11px;
}
.imp-nascosto-num { font-weight: 700; color: var(--accent); min-width: 90px; }
.imp-nascosto-addr { flex: 1; color: var(--text-muted); }
.imp-chip-restore {
  background: #dbeafe; color: #1d4ed8;
  border: 1px solid #93c5fd; cursor: pointer; pointer-events: auto;
}
.imp-chip-restore:hover { background: #bfdbfe; }

/* ── tc-input (modal form) ──────────────────────────────────────────── */
.tc-input {
  width: 100%; box-sizing: border-box;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border); border-radius: 6px;
  padding: 5px 8px; font-size: 12px;
}
.tc-input:focus { outline: none; border-color: var(--accent); }
.tc-input:disabled { opacity: .5; cursor: default; }

/* ── Anagrafiche Panel ──────────────────────────────────────────────── */
/* 2026-08-08: l'overlay modale `.tc-anag-overlay` (velo + z-index:800) è stato eliminato — era
   un contesto di impilamento e impediva alla finestra di venire davanti alle altre TcWindow.
   Via anche `transform: translateX(60px)` e la transizione: TcWindow azzera il transform appena
   si trascina la finestra, quindi una transizione su quella proprietà darebbe uno scatto. */
.tc-anag-panel {
  background: var(--sidebar-bg, var(--bg));
  width: min(900px, 96vw);
  position: fixed; top: 16px; left: 0; right: 0; margin: 0 auto;
  height: calc(100vh - 60px); max-height: calc(100vh - 46px);
  min-width: 400px; min-height: 160px;
  border-radius: 10px; overflow: hidden;
  display: flex; flex-direction: column;
  box-shadow: 0 8px 32px rgba(0,0,0,.3);
  z-index: 1100;
}

.tc-anag-header {
  display: flex; align-items: center;
  padding: 0 12px;
  border-bottom: 1px solid var(--border);
  min-height: 44px; gap: 8px; flex-shrink: 0;
}
.tc-anag-tabs { display: flex; gap: 4px; flex: 1; overflow-x: auto; }
.tc-anag-tab {
  background: none; border: none; cursor: pointer;
  color: var(--text-muted); font-size: 12px; font-weight: 600;
  padding: 10px 12px; border-bottom: 2px solid transparent;
  white-space: nowrap;
  transition: color .15s, border-color .15s;
}
.tc-anag-tab:hover { color: var(--text); }
.tc-anag-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
/* 2026-08-19 (punto 3): la barra non aveva flex-wrap e i bottoni non avevano
   flex-shrink:0, quindi in una finestra stretta "+ Nuovo" poteva finire tagliato
   fuori dal bordo e sembrare assente. Ora la barra va a capo e i bottoni non si
   comprimono mai. */
.tc-anag-toolbar {
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
  padding: 8px 12px; border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.tc-anag-toolbar .tc-anag-add-btn { flex-shrink: 0; }
.tc-anag-toolbar .tc-anag-search { min-width: 140px; }
.tc-anag-search {
  flex: 1; background: var(--bg); color: var(--text);
  border: 1px solid var(--border); border-radius: 6px;
  padding: 6px 10px; font-size: 13px;
}
.tc-anag-search:focus { outline: none; border-color: var(--accent); }
.tc-anag-add-btn {
  background: var(--accent); color: #fff;
  border: none; border-radius:5px;
  padding: 6px 14px; font-size: 12px; font-weight: 600;
  cursor: pointer; white-space: nowrap;
}
.tc-anag-add-btn:hover { filter: brightness(1.1); }

.tc-anag-body {
  flex: 1; overflow-y: auto; overflow-x: auto; padding: 8px 0;
}
.anag-loading, .anag-error {
  display: flex; align-items: center; justify-content: center;
  height: 120px; font-size: 15px; color: var(--text-muted);
}
.anag-count {
  font-size: 11px; color: var(--text-muted);
  padding: 4px 12px 6px;
}
/* Nessun overflow-x qui: evita di creare un secondo scroll-container
   che impedirebbe il corretto funzionamento di position:sticky sul thead */
.anag-table-wrap { padding: 0 4px; }
.anag-table {
  width: 100%; border-collapse: collapse; font-size: 12px;
}
.anag-table thead th {
  background: var(--panel, var(--bg));
  color: var(--text-muted); font-weight: 600;
  text-align: left; padding: 6px 10px;
  /* box-shadow invece di border-bottom: evita il bug di border-collapse+sticky */
  box-shadow: inset 0 -2px 0 var(--border);
  position: sticky; top: 0; z-index: 2;
  white-space: nowrap;
}
.anag-table tbody tr { border-bottom: 1px solid var(--border); }
.anag-table tbody tr:hover { background: var(--hover); }
.anag-table tbody td { padding: 5px 10px; vertical-align: middle; }
.anag-table th.tc, .anag-table td.tc { text-align: center; }
.anag-code { font-family: monospace; font-size: 11px; color: var(--text-muted); }.anag-edit-btn {
  background: none; border: 1px solid var(--border);
  border-radius:5px; padding: 2px 8px; cursor: pointer;
  font-size: 11px; color: var(--text-muted);
}
.anag-edit-btn:hover { border-color: var(--accent); color: var(--accent); background: var(--hover); }.anag-badge {
  font-size: 10px; font-weight: 700; padding: 2px 6px;
  border-radius: 4px; white-space: nowrap;
}
.anag-badge--red { background: #fee2e2; color: var(--stato-errore); }
.anag-badge--green { background: #dcfce7; color: var(--stato-ok); }
.anag-badge--gray { background: #e5e7eb; color: #4b5563; }

/* ── Modal edit anagrafica ──────────────────────────────────────────── */
.tc-anag-modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,.55);
  z-index: 2600;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; pointer-events: none;
  transition: opacity .25s;
}
.tc-anag-modal-overlay.open { opacity: 1; pointer-events: auto; }
.tc-anag-modal {
  background: var(--sidebar-bg, var(--bg));
  border-radius: 12px;
  width: min(480px, 95vw);
  max-height: 85vh;
  display: flex; flex-direction: column;
  box-shadow: 0 8px 40px rgba(0,0,0,.35);
  transform: scale(.96);
  transition: transform .25s;
}
.tc-anag-modal-overlay.open .tc-anag-modal { transform: scale(1); }
.tc-anag-modal-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 14px 16px 10px;
  border-bottom: 1px solid var(--border);
  font-weight: 700; font-size: 14px;
}
.tc-anag-modal-close {
  background: none; border: none; cursor: pointer;
  color: var(--text-muted); font-size: 18px; line-height: 1;
}
.tc-anag-modal-close:hover { color: var(--text); }
.tc-anag-modal-body {
  flex: 1; overflow-y: auto; padding: 12px 16px;
  display: flex; flex-direction: column; gap: 8px;
}
.anag-edit-row {
  display: flex; flex-direction: column; gap: 3px;
}
.anag-edit-row label {
  font-size: 11px; font-weight: 600; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: .04em;
}
.tc-anag-modal-footer {
  display: flex; justify-content: flex-end; gap: 8px;
  padding: 10px 16px 14px;
  border-top: 1px solid var(--border);
}
.tc-anag-save-btn {
  background: var(--accent); color: #fff;
  border: none; border-radius:5px;
  padding: 7px 18px; font-size: 13px; font-weight: 600;
  cursor: pointer;
}
.tc-anag-save-btn:hover { filter: brightness(1.1); }
.tc-anag-save-btn:disabled { opacity: .6; cursor: default; }
.tc-anag-cancel-btn {
  background: var(--hover); color: var(--text);
  border: 1px solid var(--border); border-radius:5px;
  padding: 7px 16px; font-size: 13px; cursor: pointer;
}
.tc-anag-cancel-btn:hover { background: var(--border); }

/* ── Contatti widget (edit form) ── */
.anag-cont-widget { display: flex; flex-direction: column; gap: 4px; }
.anag-cont-row { display: flex; gap: 4px; align-items: center; }
.anag-cont-row .tc-input--xs { flex: 0 0 58px; font-size: 11px; padding: 2px 4px; }
.anag-cont-row .tc-input--sm { flex: 0 0 110px; font-size: 11px; }
.anag-cont-row .tc-input:not(.tc-input--sm) { flex: 1; }
.tc-btn-icon {
  flex-shrink: 0; width: 22px; height: 22px; padding: 0; line-height: 1;
  background: var(--hover); border: 1px solid var(--border); border-radius:5px;
  cursor: pointer; font-size: 11px; color: var(--text-muted);
}
.tc-btn-icon:hover { background: #fdd; color: var(--stato-errore); border-color: var(--stato-errore); }
.tc-btn-sm {
  background: var(--hover); border: 1px solid var(--border); border-radius: 5px;
  padding: 2px 8px; font-size: 11px; cursor: pointer; color: var(--text-muted);
  align-self: flex-start; margin-top: 2px;
}
.tc-btn-sm:hover { background: var(--accent); color: #fff; border-color: var(--accent); }
/* ===== END ANAGRAFICHE ===== */
.anag-sub { font-size: 10px; color: var(--text-muted); }.anag-detail-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 6px 16px;
  padding: 10px 16px 12px;
  background: var(--bg);
  border-top: 2px solid var(--accent);
  font-size: 12px;
}
.anag-detail-grid > div { display: flex; flex-direction: column; gap: 1px; }
.anag-dl {
  font-size: 10px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .04em;
  color: var(--text-muted);
}
/* ── Dipendenti form ─── */
.dip-section-hdr {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; color: var(--accent);
  padding: 10px 0 4px; margin-top: 6px;
  border-bottom: 1px solid var(--border);
}
.dip-two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.dip-arr-list { display: flex; flex-direction: column; gap: 4px; margin-bottom: 4px; }
.dip-arr-row { display: flex; gap: 4px; align-items: center; }
.dip-spec-row { flex-wrap: wrap; }
.dip-sel { min-width: 110px; }
.dip-rm {
  background: none; border: 1px solid var(--border); border-radius: 4px;
  padding: 2px 6px; cursor: pointer; color: var(--text-muted); font-size: 11px; flex-shrink: 0;
}
.dip-rm:hover { border-color: var(--stato-errore); color: var(--stato-errore); }
.dip-add-btn {
  font-size: 11px; background: var(--hover); border: 1px solid var(--border);
  border-radius: 5px; padding: 3px 10px; cursor: pointer; color: var(--accent);
  align-self: flex-start;
}
.dip-add-btn:hover { background: var(--border); }
.dip-ann-row {
  display: flex; align-items: center; gap: 6px; margin-bottom: 5px;
}
.dip-ann-row .anag-dl { min-width: 110px; }
.dip-ann { width: 70px !important; text-align: right; }

/* ═══════════════════════════════════════════════════════════════
   AUTH — Login overlay, user badge, role badges
   ═══════════════════════════════════════════════════════════════ */

/* Fino al login riuscito il body porta `tc-nologin` e TUTTO tranne l'overlay è nascosto.
   Prima la shell del desktop (menubar, sidebar, main, pannelli admin) veniva renderizzata
   comunque e l'overlay la copriva soltanto: bastava cancellare il <div> con F12 per
   ritrovarsi l'applicazione sotto. La difesa vera è server-side (nessuna rotta dati senza
   token, vedi _gate_api), questa toglie di mezzo anche la scorciatoia visiva.
   L'overlay sta dentro .tc-workspace, quindi si nascondono i figli diretti del body
   (menubar, pannelli, modali) tranne il workspace, e dentro al workspace tutto tranne
   l'overlay stesso: sidebar e main compresi. */
body.tc-nologin > *:not(.tc-workspace),
body.tc-nologin .tc-workspace > *:not(#tcLoginOverlay) { display: none !important; }

/* Login overlay */
.tc-login-overlay {
  position: fixed; inset: 0; background: rgba(10,10,20,.85);
  display: flex; align-items: center; justify-content: center;
  z-index: 9999; backdrop-filter: blur(6px);
}
.tc-login-box {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 14px; padding: 36px 32px; width: 320px;
  display: flex; flex-direction: column; gap: 12px;
  box-shadow: 0 24px 64px rgba(0,0,0,.5);
}
.tc-login-logo { font-size: 24px; font-weight: 700; color: var(--accent); text-align: center; }
.tc-login-sub  { font-size: 12px; color: var(--text-muted); text-align: center; margin-top: -6px; }
.tc-login-input {
  width: 100%; padding: 9px 12px; border-radius: 7px;
  border: 1px solid var(--border); background: var(--bg);
  color: var(--text); font-size: 14px; box-sizing: border-box;
}
.tc-login-input:focus { outline: none; border-color: var(--accent); }
.tc-login-btn {
  margin-top: 4px; padding: 10px; border-radius:5px; border: none;
  background: var(--accent); color: #fff; font-size: 14px;
  font-weight: 600; cursor: pointer; transition: opacity .15s;
}
.tc-login-btn:hover { opacity: .85; }
.tc-login-btn:disabled { opacity: .5; cursor: not-allowed; }
.tc-login-err { color: #e74c3c; font-size: 12px; min-height: 16px; text-align: center; }

/* Auth bar nella sidebar */
.tc-auth-bar {
  margin: 6px 8px 4px; padding: 6px 10px;
  border-top: 1px solid var(--border);
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; color: var(--text-muted);
  position: relative;
}
.tc-auth-icon { font-size: 14px; }
.tc-auth-nome { flex: 1; font-weight: 500; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-auth-bar { cursor: pointer; }
.tc-auth-arrow { font-size: 9px; color: var(--text-muted); margin-left: auto; }
.tc-auth-menu {
  flex-direction: column; gap: 2px;
  position: absolute; bottom: calc(100% + 4px); left: 0; right: 0;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; padding: 4px; z-index: 300;
  box-shadow: 0 4px 20px rgba(0,0,0,.4);
}
.tc-auth-menu-btn {
  background: none; border: none; color: var(--text);
  text-align: left; padding: 6px 10px; border-radius: 5px;
  cursor: pointer; font-size: 12px; white-space: nowrap;
}
.tc-auth-menu-btn:hover { background: var(--hover); }
.tc-auth-logout { color: #e74c3c !important; }

/* Role badges */
.tc-role-badge {
  font-size: 10px; padding: 1px 6px; border-radius: 10px;
  font-weight: 600; text-transform: uppercase; letter-spacing: .4px;
}
.tc-role-badge--admin    { background: #4f46e5; color: #fff; }
.tc-role-badge--superior { background: #0891b2; color: #fff; }
.tc-role-badge--user     { background: #64748b; color: #fff; }

/* DB Query modal result */
.db-query-result {
  white-space: pre-wrap; word-break: break-word;
  font-family: 'Courier New', monospace; font-size: 12px;
  padding: 14px 16px; margin: 0; min-height: 80px; max-height: 55vh;
  overflow-y: auto; line-height: 1.6; color: var(--text);
}
.db-query-code {
  white-space: pre-wrap; word-break: break-word;
  font-family: 'Courier New', monospace; font-size: 11px;
  color: var(--text-muted); margin: 6px 0 0; background: none;
}

/* NL query bar nel pannello anagrafiche */
.tc-anag-nl-bar {
  display: flex; gap: 6px; padding: 6px 12px 4px;
  border-bottom: 1px solid var(--border); background: var(--surface);
}
.tc-anag-nl-input {
  flex: 1; padding: 7px 10px; border-radius: 7px;
  border: 1px solid var(--accent); background: var(--bg);
  color: var(--text); font-size: 13px; font-style: italic;
}
.tc-anag-nl-input::placeholder { color: var(--text-muted); }
.tc-anag-nl-input:focus { outline: none; box-shadow: 0 0 0 2px rgba(99,102,241,.25); }
.tc-anag-nl-btn {
  padding: 7px 14px; border-radius:5px; border: none;
  background: var(--accent); color: #fff; font-size: 16px;
  cursor: pointer; font-weight: 700; transition: opacity .15s;
}
.tc-anag-nl-btn:hover { opacity: .85; }
.tc-anag-nl-btn:disabled { opacity: .4; }

/* NL result nel body anagrafiche */
.anag-nl-result { padding: 14px 16px; }
.anag-nl-result-header {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 10px; font-size: 12px; color: var(--text-muted);
}
.anag-nl-result-header span { flex: 1; font-style: italic; }
.anag-nl-pre {
  white-space: pre-wrap; word-break: break-word;
  font-family: 'Courier New', monospace; font-size: 12px;
  background: var(--bg); padding: 12px; border-radius: 6px;
  border: 1px solid var(--border); line-height: 1.6; max-height: 60vh;
  overflow-y: auto; color: var(--text);
}
.anag-nl-code {
  white-space: pre-wrap; font-family: 'Courier New', monospace;
  font-size: 10px; color: var(--text-muted); margin: 4px 0 0;
}

/* ─── COMPOSIZIONE IMPIANTO ─────────────────────────────────────────────────── */
.anag-comp-section { padding: 8px 0 4px; border-top: 1px dashed var(--border); margin-top: 8px; }
.anag-comp-btn {
  font-size: 11px; padding: 3px 10px; border-radius: 5px; cursor: pointer;
  background: var(--bg-alt); border: 1px solid var(--border); color: var(--text);
}
.anag-comp-btn:hover { background: var(--border); }
.anag-comp-body { margin-top: 4px; }

/* ─── CHIP DETTAGLI NELLA RIGA IMPIANTO ────────────────────────────────────── */
.imp-chip-dettagli { margin-right: 2px; }

/* ── Contatti inline (anagrafiche clienti) ──────────────────────────────────── */
.anag-cont-lbl{font-size:10px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.3px;}
.anag-cont-link{white-space:nowrap;}
.anag-cont-sep{margin:0 5px;color:var(--border);font-size:11px;user-select:none;}

/* ── Mini Gantt nella plan-card (buildMiniGantt) ────────────────────────────── */
.mg-wrap{display:flex;flex-direction:column;overflow-x:auto;}
.mg-header{display:flex;position:sticky;top:0;z-index:2;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;}
.mg-hdr-time{width:34px;flex-shrink:0;}
.mg-hdr-tech{flex:1;min-width:48px;padding:2px 3px;text-align:center;font-size:9px;font-weight:600;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid var(--border);}
.mg-hdr-tech-main{color:var(--accent);background:rgba(26,92,58,.08);}
.mg-body{display:flex;overflow-y:auto;}
.mg-col-time{width:34px;flex-shrink:0;position:relative;}
.mg-time-slot{position:absolute;left:0;right:0;font-size:8px;color:var(--muted);padding-left:2px;display:flex;align-items:center;line-height:1;}
.mg-time-slot-h{font-weight:700;color:var(--text);font-size:9px;}
.mg-col-tech{flex:1;min-width:48px;position:relative;border-left:1px solid var(--border);}.mg-col-tech-main{opacity:1;}
.mg-slot{position:absolute;left:0;right:0;}
.mg-slot-hour{border-top:1px solid var(--border);}
.mg-slot-lunch{background:rgba(var(--fascia-fredda),.09);}
.mg-block{position:absolute;left:0;right:0;overflow:hidden;border-radius:2px;padding:1px 2px;cursor:default;box-sizing:border-box;}
.mg-block-t{display:block;font-size:8px;font-weight:700;line-height:1.3;color:var(--text);}
.mg-block-c{display:block;font-size:8px;line-height:1.3;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mg-hdr-tech-wide{flex:1;min-width:180px;text-align:left;padding-left:6px;font-size:10px;}
.mg-col-tech-wide{flex:1;min-width:180px;}
/* Layout proposta-card: Gantt solo-tecnico + mini-mappa */
.plan-sched-with-map{display:flex;align-items:stretch;flex:1 1 0;min-width:0;gap:0;}
.plan-sched-solo{flex:0 0 300px;min-width:240px;border-top-right-radius:0;border-bottom-right-radius:0;border-right:none;}
.plan-mini-map-col{flex:1 1 0;min-width:0;min-height:200px;background:var(--surface);border:1px solid var(--border);border-left:none;border-radius:8px;border-top-left-radius:0;border-bottom-left-radius:0;overflow:hidden;position:relative;}
.plan-mini-map-container{width:100%;height:100%;min-height:200px;}
/* ─── SCHEDA IMPIANTO V2 — finestra flottante ───────────────────────────────── */
.imp-det-section {
  font-weight: 600; font-size: 11px; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: .04em;
  margin: 8px 0 5px; padding-bottom: 3px; border-bottom: 1px solid var(--border);
}
.imp-det-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 3px 14px; font-size: 11px; margin-bottom: 4px;
}
.imp-det-grid div { display: flex; flex-direction: column; gap: 1px; }
.imp-det-grid b { color: var(--text-muted); font-weight: 500; font-size: 10px; }

/* ─── CHIP ANAGRAFICA NELLA SCHEDA ─────────────────────────────────────────── */
.scheda-anag-chip {
  font-size: 10px; font-weight: 600; padding: 2px 8px;
  border-radius:5px; cursor: pointer; user-select: none;
  background: rgba(255,255,255,0.18); color: inherit;
  border: 1px solid rgba(255,255,255,0.35);
  white-space: nowrap; transition: background .15s;
  vertical-align: middle;
}
.scheda-anag-chip:hover { background: rgba(255,255,255,0.32); }

/* ─── LINK NOTE NEL MODAL CLIENTE ──────────────────────────────────────────── */
.anag-cli-note-link {
  padding: 6px 0 10px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 8px;
}
.anag-cli-note-btn {
  font-size: 12px; padding: 4px 12px;
  background: var(--bg-alt); border: 1px solid var(--border);
  border-radius:5px; cursor: pointer; color: var(--text);
  display: inline-flex; align-items: center; gap: 5px;
}
.anag-cli-note-btn:hover { background: var(--border); }

/* ─── NOTE ─────────────────────────────────────────────────────────────────── */
.nota-badge {
  display: inline-flex; align-items: center; gap: 3px;
  font-size: 10px; font-weight: 600; padding: 1px 6px;
  border-radius: 10px; cursor: pointer; user-select: none;
  background: var(--border); color: var(--text); vertical-align: middle;
  transition: opacity .15s;
}
.nota-badge:hover { opacity: .75; }
.nota-badge--alta      { background: #fff3cd; color: #856404; }
.nota-badge--bloccante { background: #fde8e8; color: #9b1c1c; }

.nota-add-btn { font-size: 11px !important; }

/* blocco */
.nota-block-item {
  border: 1px solid var(--border); border-radius: 8px;
  padding: 10px 12px; margin-bottom: 8px;
}
.nota-block-item--alta      { border-color: var(--stato-attenzione); background: #fffbeb; }
.nota-block-item--bloccante { border-color: var(--stato-errore); background: #fef2f2; }
.nota-block-header { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.nota-block-autore { font-size: 10px; color: var(--text-muted); }
.nota-block-testo  { font-size: 13px; line-height: 1.5; white-space: pre-wrap; }

/* nota-item nel manager */
.nota-item {
  border: 1px solid var(--border); border-radius: 8px;
  padding: 10px 12px; margin-bottom: 8px;
}
.nota-item--alta      { border-color: var(--stato-attenzione); background: #fffbeb; }
.nota-item--bloccante { border-color: var(--stato-errore); background: #fef2f2; }
.nota-item-header {
  display: flex; align-items: center; gap: 6px;
  margin-bottom: 6px; flex-wrap: wrap;
}
.nota-item-autore { font-size: 10px; color: var(--text-muted); flex: 1; }.nota-item-testo  { font-size: 13px; line-height: 1.5; white-space: pre-wrap; margin-bottom: 8px; }.nota-empty { font-size: 12px; color: var(--text-muted); padding: 12px 0; text-align: center; }

/* prio badge */
.nota-prio { font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 10px; }
.nota-prio--normale   { background: var(--border); color: var(--text); }
.nota-prio--alta      { background: #fde68a; color: #92400e; }
.nota-prio--bloccante { background: #fca5a5; color: #7f1d1d; }

/* ── SCADENZE filter bar ─────────────────────────────────────────────────── */
.scadenze-filter-bar{display:flex;align-items:center;gap:8px;padding:6px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap;}
.scadenze-filter-label{font-size:12px;font-weight:600;color:var(--text);}
.scadenze-step-btn{padding:2px 9px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--text);font-size:14px;font-weight:700;cursor:pointer;line-height:1.4;}
.scadenze-step-btn:hover{background:var(--accent);color:white;border-color:var(--accent);}
.scadenze-giorni-input{width:64px;padding:3px 6px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--text);font-size:13px;font-weight:600;text-align:center;font-family:'Geist',sans-serif;}
.scadenze-filter-hint{font-size:11px;color:var(--muted);flex:1;}
.scadenze-legend{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);margin-left:auto;}
.scadenze-dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-left:6px;}
.scadenze-btn-active{background:var(--accent)!important;color:white!important;border-color:var(--accent)!important;}

/* ── Legenda mappa tecnici ───────────────────────────────────────────────── */
.gantt-map-legend{background:white;padding:8px 10px;border-radius:7px;box-shadow:0 2px 8px rgba(0,0,0,.18);font-family:'Geist',sans-serif;min-width:110px;}

/* ── Collaudi, vista dati ────────────────────────────────────────────────────
   La tabella e' passata a TcTable (05/09): intestazioni, filtri, righe alternate,
   ridimensionamento e ordinamento arrivano dal motore standard. Qui resta solo cio' che
   e' davvero di questa vista — il link all'impianto e il bottone che apre la
   pianificazione. Le vecchie regole .scad-table / .scad-th / .scad-row / .scad-th-filter
   sono state tolte: erano la copia locale di quello che ora fa il motore. */
.scad-imp-link{color:var(--accent);text-decoration:none;font-weight:600;}
.scad-imp-link:hover{text-decoration:underline;}
.scad-plan-btn{border:1px solid var(--border);background:var(--bg);border-radius:5px;cursor:pointer;
  font-size:13px;line-height:1;padding:2px 5px;}
.scad-plan-btn:hover{border-color:var(--accent);background:var(--accent-light);}
/* ═══════════════════════════════════════════════════════════════════════════
   MODULO MAGAZZINO
   ═══════════════════════════════════════════════════════════════════════════ */

/* Overlay e pannello */
.mag-overlay{position:fixed;top:30px;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1100;overflow:hidden;}
.mag-panel{background:var(--bg);border-radius:10px;width:960px;max-width:calc(100vw - 24px);height:82vh;max-height:calc(100vh - 46px);display:flex;flex-direction:column;box-shadow:0 8px 32px rgba(0,0,0,.3);position:absolute;top:16px;left:0;right:0;margin:0 auto;min-width:400px;min-height:160px;}
/* Magazzino non sta più dentro `.mag-overlay` (vedi tecnicall.html): serve `fixed` perché ora è
   figlio del body, e `top:46px` riproduce esattamente la posizione di prima (i 30px dell'overlay
   più i 16px del pannello). `.mag-panel` resta `absolute` perché il pannello Documenti, che usa
   la stessa classe, è ancora annidato nell'overlay. */
#magazzinoPanel{position:fixed;top:46px;z-index:1100;}
.mag-panel-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;cursor:grab;}
.mag-panel-header:active{cursor:grabbing;}.mag-col-resizer{position:absolute;right:0;top:0;width:5px;height:100%;cursor:col-resize;z-index:1;}
.mag-col-resizer:hover{background:var(--accent);opacity:.5;}.mag-panel-tabs{display:flex;gap:6px;}
.mag-tab{padding:5px 12px;border:1px solid var(--border);border-radius:5px;background:transparent;color:var(--text);cursor:pointer;font-size:13px;}
.mag-tab:hover,.mag-tab.active{background:var(--accent);color:#fff;border-color:var(--accent);}
.mag-panel-close{background:none;border:none;font-size:18px;cursor:pointer;color:var(--muted);padding:4px 8px;}
.mag-panel-close:hover{color:var(--danger);}
.mag-win-controls{display:flex;align-items:stretch;margin-left:8px;}
.mag-win-btn{background:transparent;border:none;color:var(--muted);cursor:pointer;width:46px;height:30px;display:inline-flex;align-items:center;justify-content:center;transition:background .1s,color .1s;border-radius:0;padding:0;}
.mag-win-btn:hover{background:var(--border);color:var(--text);}
.mag-win-btn:active{background:var(--border);opacity:.7;}
.mag-win-close:hover{background:#c42b1c!important;color:#fff!important;}
.mag-win-close:active{background:#e81123!important;}.mag-panel-body{flex:1;overflow-y:auto;padding:16px;min-height:0;}

/* Titoli sezione */
.mag-title{font-size:16px;font-weight:700;margin:0 0 12px;}
/* Badge */
.mag-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:600;background:var(--surface);border:1px solid var(--border);color:var(--text);}
.mag-badge--ok{background:#d1fae5;border-color:#6ee7b7;color:#065f46;}
/* Tabella principale */
.mag-table{width:100%;border-collapse:collapse;font-size:12px;}
.mag-table th{padding:6px 8px;text-align:left;background:var(--surface);border-bottom:2px solid var(--border);font-weight:700;color:var(--muted);font-size:11px;position:sticky;top:0;z-index:1;}
.mag-table td{padding:5px 8px;border-bottom:1px solid var(--border);vertical-align:middle;}
.mag-table tr:hover td{background:var(--hover);}
.mag-table--small td,.mag-table--small th{padding:4px 6px;}
.tc-right{text-align:right;}
/* Righe pendenti */
.mag-pendente{border:1px solid var(--border);border-radius:8px;margin-bottom:10px;overflow:hidden;transition:border-color .2s;}
.mag-pendente.mag-pend--risolta{border-color:#6ee7b7;}
.mag-pend-header{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--surface);flex-wrap:wrap;}
.mag-pend-cod{font-size:13px;}
.mag-pend-desc{font-size:12px;color:var(--muted);flex:1;}
.mag-pend-body{padding:10px 12px;display:flex;flex-direction:column;gap:8px;}
.mag-pend-label{font-size:12px;font-weight:600;color:var(--muted);}
.mag-pend-manual{display:flex;align-items:center;gap:6px;position:relative;}
.mag-pend-sel{padding:4px 0;}

/* Input, select */
.mag-input{padding:5px 8px;border:1px solid var(--border);border-radius:5px;font-size:13px;background:var(--bg);color:var(--text);min-width:180px;}
.mag-input:focus{outline:none;border-color:var(--accent);}
.mag-input--search{width:300px;max-width:100%;}
.mag-select{padding:5px 8px;border:1px solid var(--border);border-radius:5px;font-size:13px;background:var(--bg);color:var(--text);max-width:420px;}
.mag-hint{font-size:11px;color:var(--muted);padding:4px 0;}

/* Autocomplete dropdown */
.mag-autocomplete{position:fixed;z-index:9999;background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,.15);max-height:200px;overflow-y:auto;min-width:340px;}
.mag-ac-item{padding:6px 10px;cursor:pointer;font-size:12px;display:flex;flex-direction:column;gap:2px;}
.mag-ac-row1{display:flex;align-items:baseline;gap:8px;}
.mag-ac-row2{display:flex;align-items:center;gap:4px;padding-left:2px;}
.mag-ac-label{font-size:10px;color:var(--muted);font-weight:600;}
.mag-ac-cp{font-size:11px;color:var(--accent);}
.mag-ac-item:hover{background:var(--accent-light);}
.mag-ac-item code{font-size:12px;color:var(--accent);}
.mag-ac-item span{color:var(--muted);}
/* Toolbar giacenze */
.mag-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap;}
.mag-check-label{display:flex;align-items:center;gap:5px;font-size:13px;cursor:pointer;}

/* Quantità colorate */
.mag-qta--zero{color:var(--muted);}
.mag-qta--bassa{color:var(--stato-attenzione-testo);font-weight:700;}
.mag-prezzo-listino{color:#6b7280;font-style:italic;}
.mag-prezzo-listino sup{font-size:9px;background:var(--accent);color:#fff;border-radius:2px;padding:0 2px;font-style:normal;margin-left:2px;}

/* Contatore e sort giacenze */
.mag-giac-count{font-size:12px;color:var(--muted);margin-bottom:6px;}
/* Listini */
.mag-listini-wrap{padding:4px 0;}
.lst-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap;}
/* Pulsanti azioni giacenze */
.mag-azioni-cell{white-space:nowrap;padding:3px 6px!important;}
.mag-btn-edit,.mag-btn-del{border:none;border-radius:5px;padding:3px 7px;font-size:12px;cursor:pointer;font-weight:600;line-height:1.4;}
.mag-btn-edit{background:var(--surface);color:var(--fg);}
.mag-btn-edit:hover{background:var(--accent);color:#fff;}
.mag-btn-del{background:var(--surface);color:var(--stato-errore);margin-left:3px;}
.mag-btn-del:hover{background:var(--stato-errore);color:#fff;}
/* CC: bottone immagine articolo — grigio se assente, verde se presente */
.mag-btn-img{border:none;border-radius:5px;padding:3px 7px;font-size:12px;cursor:pointer;font-weight:600;line-height:1.4;background:var(--surface);filter:grayscale(1) opacity(.5);margin-right:3px;}
.mag-btn-img.has-img{filter:none;background:#e6f7ec;}
.mag-btn-img:hover{filter:none;background:var(--accent);}
.mag-btn-doc{border:none;border-radius:5px;padding:3px 7px;font-size:12px;cursor:pointer;font-weight:600;line-height:1.4;background:var(--surface);filter:grayscale(1) opacity(.5);margin-right:3px;}
.mag-btn-doc.has-doc{filter:none;background:#e6f7ec;}
.mag-btn-doc.has-doc sup{color:#27ae60;font-weight:700;}
.mag-btn-doc:hover{filter:none;background:var(--accent);}
/* Dialog nuovo articolo */
.mag-dialog-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:2600;display:flex;align-items:center;justify-content:center;}
.mag-dialog,.mag-dialog-box{background:var(--bg);border-radius:10px;padding:24px;width:460px;max-width:95vw;box-shadow:0 8px 40px rgba(0,0,0,.5);border:1px solid var(--border);}
.mag-dialog-title{font-size:15px;font-weight:700;margin:0 0 4px;}
.mag-dialog-sub{font-size:12px;color:var(--muted);margin-bottom:14px;}
.mag-form-grid{display:grid;grid-template-columns:130px 1fr;gap:8px;align-items:center;margin-bottom:14px;}
.mag-form-grid label{font-size:12px;font-weight:600;color:var(--muted);}
.mag-form-grid .mag-input{width:100%;}
.mag-dialog-actions{display:flex;gap:8px;justify-content:flex-end;}

/* Empty state */
.mag-empty{padding:24px;text-align:center;color:var(--muted);font-size:13px;}.mag-batt-icon{font-size:14px;}
/* Dialog stampa */
.mag-dialog--wide{width:640px;max-width:96vw;}

/* Pannello statistiche */
.mag-stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px;}
.mag-stat-card{border:1px solid var(--border);border-radius:8px;padding:14px 10px;text-align:center;}
.mag-stat-card--primary{background:var(--accent);color:#fff;border-color:var(--accent);}
.mag-stat-card--warn{background:#fff9e6;border-color:var(--stato-attenzione);}
.mag-stat-card--muted{background:var(--surface);}
.mag-stat-num{font-size:24px;font-weight:700;line-height:1.1;}
.mag-stat-lbl{font-size:11px;color:var(--muted);margin-top:4px;}
.mag-stat-card--primary .mag-stat-lbl{color:rgba(255,255,255,.75);}
.mag-stats-cols{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:16px;}
.mag-stat-section-title{font-weight:700;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:8px;}
.mag-stat-bar-row{display:flex;align-items:center;gap:8px;margin-bottom:7px;}
.mag-stat-bar-label{width:110px;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mag-stat-bar-track{flex:1;height:8px;background:var(--border);border-radius:4px;overflow:hidden;}
.mag-stat-bar-fill{height:100%;background:var(--accent);border-radius:4px;transition:width .3s;}
.mag-stat-bar-val{font-size:10px;white-space:nowrap;color:var(--muted);min-width:90px;text-align:right;}

/* ═══ MENUBAR TOP ═══════════════════════════════════════════════════════════ */
.tc-workspace{flex:1;display:flex;overflow:hidden;min-height:0;}
/* 2026-08-16 (Lupo, dopo aver visto l'app vera): la barra menu era l'ultimo pezzo di
   cornice rimasto bianco, fra la barra blu scuro sotto e la colonna blu a sinistra, e il
   bianco non gli piaceva. Va in VERDE — non in blu: `--accent` resta il verde (decisione
   del punto 1), quindi blu = struttura, verde = azione, e la barra dei comandi e' azione. */
.tc-menubar{height:30px;background:var(--accent);border-bottom:1px solid var(--accent);display:flex;align-items:center;padding:0 6px;flex-shrink:0;z-index:4900;user-select:none;gap:2px;}
.tc-menu-item{position:relative;}
.tc-menu-label{display:block;padding:3px 10px;font-size:12px;font-weight:500;color:#fff;cursor:default;border-radius:5px;white-space:nowrap;line-height:24px;transition:background .1s;}
.tc-menu-item:hover>.tc-menu-label,.tc-menu-item.open>.tc-menu-label{background:#fff;color:var(--accent);}
.tc-menu-dropdown{display:none;position:absolute;top:calc(100% + 1px);left:0;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 20px rgba(0,0,0,.13);min-width:200px;z-index:6000;padding:3px 0;overflow:visible;}
.tc-menu-item.open>.tc-menu-dropdown{display:block;}
.tc-menu-dropdown--right{left:auto;right:0;}
/* 2026-08-16 — BUG allineamento "WhatsApp" (Lupo). `justify-content:space-between` era un
   residuo dei sottomenu, che avevano la freccia da spingere a destra: PROP-MENU li ha tolti
   tutti (0 `tc-has-sub` in pagina) e quella regola e' rimasta. Effetto: le voci con UN solo
   nodo di testo ("Segnalazioni") stavano bene per caso — un figlio solo, niente da
   distanziare — mentre "WhatsApp", che ha <svg> + testo, cioe' DUE figli flex, se li vedeva
   spingere ai due estremi con un vuoto in mezzo. Era l'unica voce della barra con due figli.
   Ora si parte da sinistra; la freccia di un eventuale sottomenu futuro si spinge da sola
   a destra con margin-left:auto, senza rimettere space-between su tutte. */
.tc-menu-entry{padding:5px 14px;font-size:12px;color:var(--text);cursor:pointer;white-space:nowrap;display:flex;align-items:center;justify-content:flex-start;position:relative;gap:6px;transition:background .1s;}
.tc-menu-entry>.tc-sub-arrow{margin-left:auto;}
.tc-menu-entry:hover{background:var(--accent-light);color:var(--accent);}
.tc-menu-sep{height:1px;background:var(--border);margin:3px 0;}
.tc-has-sub{position:relative;}
.tc-has-sub>.tc-menu-submenu{display:none;position:absolute;left:100%;top:-4px;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 20px rgba(0,0,0,.13);min-width:180px;z-index:6100;padding:3px 0;}
.tc-has-sub:hover>.tc-menu-submenu{display:block;}

/* ── PROP-MENU 2026-08-15: ricerca comandi Ctrl+K + banner di avanzamento ───── */
/* La voce "Cerca comando" e' l'ultima della barra e viene spinta a destra: e' un
   attrezzo, non una categoria, e in fondo non si confonde con i menu veri. */
.tc-menu-item--cmdk{margin-left:auto;}
.tc-menu-item--cmdk>.tc-menu-label{cursor:pointer;color:rgba(255,255,255,.82);font-size:11px;}
.tc-menu-item--cmdk:hover>.tc-menu-label{background:#fff;color:var(--accent);}
.tc-kbd{border:1px solid rgba(255,255,255,.34);border-radius:5px;padding:0 4px;font-size:10px;font-family:inherit;color:rgba(255,255,255,.82);margin-left:4px;background:rgba(255,255,255,.12);}
/* Il badge dei messaggi non letti sulla barra VERDE: il rosso su verde scuro ha un
   contrasto di 1,65 — il numero dentro si legge (bianco su rosso = 4,83) ma la pillola
   non si stacca dallo sfondo e si impasta. Un anello bianco la ridisegna sul verde
   senza toccarne il colore, che porta il significato "c'e' qualcosa da leggere". */
.tc-menubar .sb-badge{box-shadow:0 0 0 1.5px rgba(255,255,255,.9);vertical-align:middle;}

/* Banner di avanzamento delle azioni lunghe (Sync Drive / Import Horace): prima
   l'avanzamento si scriveva dentro il bottone della barra laterale, che era un doppione
   ed e' stato tolto. z-index sopra la menubar (4900) ma sotto i dropdown (6000). */
.tc-menu-status{position:fixed;top:34px;left:50%;transform:translateX(-50%);z-index:5200;
  background:var(--panel);border:1px solid var(--border);border-radius:8px;
  box-shadow:0 4px 18px rgba(0,0,0,.18);padding:6px 16px;font-size:12px;font-weight:600;
  color:var(--text);white-space:nowrap;pointer-events:none;}

.tc-cmdk-overlay{display:none;position:fixed;inset:0;z-index:9500;background:rgba(0,0,0,.35);
  align-items:flex-start;justify-content:center;padding-top:12vh;backdrop-filter:blur(2px);}
.tc-cmdk-box{background:var(--panel);border:1px solid var(--border);border-radius:12px;
  box-shadow:0 16px 50px rgba(0,0,0,.3);width:560px;max-width:94vw;overflow:hidden;
  display:flex;flex-direction:column;}
.tc-cmdk-input{border:none;border-bottom:1px solid var(--border);background:transparent;
  color:var(--text);font-family:'Geist',sans-serif;font-size:15px;padding:14px 18px;outline:none;}
.tc-cmdk-list{max-height:46vh;overflow-y:auto;padding:5px 0;}
.tc-cmdk-row{display:flex;align-items:baseline;justify-content:space-between;gap:14px;
  padding:7px 18px;font-size:13px;color:var(--text);cursor:pointer;}
.tc-cmdk-row.sel{background:var(--accent-light);color:var(--accent);}
.tc-cmdk-d{font-size:11px;color:var(--muted);white-space:nowrap;flex-shrink:0;}
.tc-cmdk-row.sel .tc-cmdk-d{color:var(--accent);opacity:.8;}
.tc-cmdk-empty{padding:14px 18px;font-size:12px;color:var(--muted);}
.tc-cmdk-hint{border-top:1px solid var(--border);padding:7px 18px;font-size:10.5px;color:var(--muted);}

/* Magazzino minimizzato: overlay click-through (usato da tc-ui-magazzino.js; il vecchio
   blocco resize/min-max pre-TcWindow e' stato rimosso — audit CSS 2026-08-08 §2) */
/* 2026-08-08: le regole `.mag-overlay--min` sono sparite insieme all'overlay del Magazzino —
   servivano solo a rendere trasparente e non-cliccabile il velo quando la finestra era a
   pillola. Senza velo il problema non esiste. `.mag-overlay` resta in uso dal solo pannello
   Documenti, che è ancora un overlay modale. */
.mag-panel.tc-win--min{box-shadow:0 4px 16px rgba(0,0,0,.35);}

/* ═══ FINESTRE GENERICHE .tc-window (factory tc-window.js, 2026-05-31) ═══════ */
.tc-window{position:fixed;}
.tc-win-rh{position:absolute;z-index:20;}
.tc-win-rh-n{top:-4px;left:14px;right:14px;height:10px;cursor:n-resize;}
.tc-win-rh-s{bottom:-4px;left:14px;right:14px;height:10px;cursor:s-resize;}
.tc-win-rh-e{top:14px;bottom:14px;right:-4px;width:10px;cursor:e-resize;}
.tc-win-rh-w{top:14px;bottom:14px;left:-4px;width:10px;cursor:w-resize;}
.tc-win-rh-ne{top:-4px;right:-4px;width:16px;height:16px;cursor:ne-resize;}
.tc-win-rh-nw{top:-4px;left:-4px;width:16px;height:16px;cursor:nw-resize;}
.tc-win-rh-se{bottom:-4px;right:-4px;width:16px;height:16px;cursor:se-resize;}
.tc-win-rh-sw{bottom:-4px;left:-4px;width:16px;height:16px;cursor:sw-resize;}
.tc-window.tc-win--max{top:var(--tc-topbar,30px)!important;left:0!important;right:0!important;bottom:0!important;width:100vw!important;height:calc(100vh - var(--tc-topbar,30px))!important;max-width:100vw!important;max-height:none!important;margin:0!important;border-radius:0!important;transform:none!important;}
.tc-window.tc-win--max .tc-win-rh{display:none;}
/* Finestra minimizzata = piccola pillola in basso a DESTRA (stesso aspetto delle card
   di `schedeMinPanel`, riferimento indicato da Lupo). `--tcmin-y` è impostata da
   tc-window.js per impilare più finestre minimizzate senza sovrapporle. */
.tc-window.tc-win--min{top:auto!important;bottom:var(--tcmin-y,8px)!important;left:auto!important;right:8px!important;margin:0!important;transform:none!important;width:auto!important;min-width:0!important;max-width:280px!important;height:auto!important;min-height:0!important;max-height:none!important;border-radius:8px!important;overflow:hidden!important;box-shadow:0 4px 16px rgba(0,0,0,.28)!important;cursor:pointer;}
.tc-window.tc-win--min .tc-win-rh{display:none;}
/* Quali figli collassare lo decide il JS (`_collapseChildren` marca `.tc-win-collapsible`),
   MA nasconderli è compito di questa regola, valida solo mentre il pannello è a pillola:
   così qualunque punto del codice tolga `tc-win--min` riespande il corpo, senza doversi
   ricordare di ripulire una seconda classe (bug "finestra vuota dopo il ripristino").
   `!important` necessario: diversi body hanno `display:flex` inline. */
.tc-window.tc-win--min > .tc-win-collapsible{display:none!important;}
.tc-window.tc-win--min > .tc-win-header,.tc-window.tc-win--min > .mag-panel-header,.tc-window.tc-win--min > .tc-anag-modal-header{border-bottom:none!important;padding:6px 10px!important;font-size:12px!important;white-space:nowrap;}

/* TcTable — l'handle di resize colonna era invisibile: nessuno sapeva che si potesse
   trascinare. Feedback all'hover, senza occupare spazio quando non serve. */
.tct-col-resizer:hover{background:var(--accent,#0369a1);opacity:.45;}

/* Anagrafiche come .tc-window: stato minimizzato overlay click-through */
/* 2026-08-08: idem per Anagrafiche. Le tre righe che nascondevano nl-bar/toolbar/body a pillola
   non servono più: nl-bar, toolbar e body sono figli DIRETTI del pannello, quindi li marca già
   `_collapseChildren` di TcWindow (classe `.tc-win-collapsible`), che è il meccanismo standard
   usato da tutte le altre finestre. */
.tc-anag-panel.tc-win--min{box-shadow:0 4px 16px rgba(0,0,0,.35);}

/* ── AT-F5: Assistente problemi tecnici (percorso guidato nella scheda cliente) ────────
   La rivelazione progressiva richiede che i passi già risposti restino leggibili ma in
   secondo piano rispetto a quello in corso: da qui il contrasto fra .assist-risposta
   (spenta) e .assist-opzioni (viva). */
.assist-wrap{border:1px solid var(--border);border-radius:8px;padding:8px;margin:6px 0 8px;
  background:var(--bg2,rgba(127,127,127,.05));}.assist-passo{margin-bottom:8px;}
.assist-domanda{font-size:12px;font-weight:600;margin-bottom:4px;}
.assist-risposta{font-size:12px;color:var(--muted);padding:3px 6px;border-left:2px solid var(--accent);
  display:flex;align-items:center;gap:6px;}
.assist-annulla{margin-left:auto;font-size:11px;border:none;background:none;color:var(--accent);
  cursor:pointer;padding:0 4px;}
.assist-opzioni{display:flex;flex-direction:column;gap:4px;}
.assist-opt{position:relative;text-align:left;font-size:12px;padding:6px 26px 6px 9px;border-radius:6px;
  border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;}
.assist-opt:hover{border-color:var(--accent);}
.assist-opt-sol{border-left:3px solid #16a34a;}
.assist-opt-altro{border-style:dashed;color:var(--accent);font-weight:600;}
.assist-badge{margin-left:6px;font-size:10px;color:var(--muted);}
.assist-del{position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:11px;opacity:.35;}
.assist-del:hover{opacity:1;}
.assist-hint{font-size:10.5px;color:var(--muted);margin-top:4px;line-height:1.35;}
.assist-altro{margin-top:6px;}
.assist-ta{width:100%;box-sizing:border-box;font-size:12px;padding:5px;border:1px solid var(--border);
  border-radius:5px;background:var(--bg);color:var(--text);resize:vertical;}
.assist-altro-btns{display:flex;gap:6px;margin-top:5px;flex-wrap:wrap;}
.assist-btn-min,.assist-btn-sol,.assist-btn-ver{font-size:11.5px;padding:5px 10px;border-radius:5px;
  cursor:pointer;border:1px solid var(--border);font-weight:600;}
.assist-btn-min{background:var(--bg);color:var(--accent);}
.assist-btn-sol{background:#16a34a;color:#fff;border-color:#16a34a;}
/* Verifica sì/no: un terzo colore, perché è una terza cosa — né un passo qualunque né la fine */
.assist-btn-ver{background:rgba(37,99,235,.10);color:#1d4ed8;border-color:rgba(37,99,235,.45);}
.assist-opt-ver{border-left:3px solid #2563eb;}
.assist-esiti{display:flex;gap:6px;flex-wrap:wrap;border-top:1px solid var(--border);padding-top:7px;margin-top:6px;}
.assist-esito-ok,.assist-esito-tec,.assist-reset{font-size:11.5px;padding:6px 11px;border-radius:5px;
  cursor:pointer;font-weight:600;border:1px solid var(--border);}
.assist-esito-ok{background:var(--stato-ok);color:#fff;border-color:var(--stato-ok);}
.assist-esito-tec{background:var(--accent);color:#fff;border-color:var(--accent);}
.assist-reset{background:none;color:var(--muted);}
.assist-msg{font-size:11px;margin-top:5px;min-height:13px;}
.assist-chiusa{font-size:12px;padding:8px;border-radius:6px;background:rgba(22,163,74,.10);
  border-left:3px solid #16a34a;}
.assist-evidenzia{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px;
  transition:outline-color .3s;}

/* ── AT-F6: registro chiamate tecniche (pannello nella scheda + vista completa) ──────── */
.ct-riepilogo{font-size:11px;color:var(--muted);padding:4px 2px 6px;}
.ct-riga{border-left:2px solid var(--border);padding:4px 8px;margin-bottom:6px;}
.ct-riga-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.ct-data{font-size:11px;color:var(--muted);}
.ct-op{font-size:10.5px;color:var(--muted);margin-left:auto;}
.ct-problema{font-size:11.5px;margin-top:2px;}
.ct-soluzione{font-size:11.5px;color:var(--stato-ok);margin-top:2px;}
.ct-vuoto{font-size:11.5px;color:var(--muted);padding:10px 4px;line-height:1.4;}
.ct-chip{font-size:10px;font-weight:700;padding:1px 6px;border-radius:5px;white-space:nowrap;}
.ct-chip-ok{background:rgba(22,101,52,.14);color:var(--stato-ok);}
.ct-chip-tec{background:rgba(59,130,246,.14);color:#1d4ed8;}
/* ── AT-F7: allarme sui problemi ricorrenti + badge della metrica in sidebar ─────────── */
.ct-allarmi{border:1px solid rgba(180,83,9,.45);background:rgba(245,158,11,.10);
  border-radius:8px;padding:8px 10px;margin-bottom:8px;}
.ct-allarmi-tit{font-size:12px;font-weight:700;color:var(--stato-attenzione-testo);margin-bottom:6px;}
.ct-allarmi-par{font-weight:400;font-size:10.5px;color:var(--muted);}
.ct-allarme{padding:4px 0;border-top:1px dashed rgba(180,83,9,.30);}
.ct-allarme:first-of-type{border-top:none;}
.ct-allarme-top{font-size:12px;font-weight:600;}
.ct-allarme-n{display:inline-block;min-width:26px;font-weight:800;color:var(--stato-attenzione-testo);}
.ct-allarme-sub{font-size:10.5px;color:var(--muted);margin-left:26px;}
.ct-allarme-sol{font-size:11px;color:var(--stato-ok);margin-left:26px;margin-top:1px;}
.ct-allarme-nota{font-size:10.5px;color:var(--stato-attenzione-testo);margin-top:6px;font-style:italic;}
.ct-badge{font-size:10px;font-weight:800;padding:0 5px;border-radius:8px;margin-left:6px;}
.ct-badge-warn{background:var(--stato-attenzione-testo);color:#fff;}
.ct-badge-ok{background:rgba(22,101,52,.18);color:var(--stato-ok);}
.ct-header-warn{background:rgba(245,158,11,.14)!important;}

/* ═══════════════════════════════════════════════════════════════════════════════
   SIDEBAR BLU + TASTI RAPIDI UNIFORMI  (2026-08-16, richiesta di Lupo)
   ═══════════════════════════════════════════════════════════════════════════════
   DUE COSE INSIEME, perché sono la stessa cosa:
   1. la colonna passa a fondo blu (--blu), quindi TUTTO ciò che ci sta sopra va
      rivestito: i colori di prima (--text nero, --muted grigio, --accent verde, e i
      fondi pastello #ffedd5 / #fee2e2 / #ede9fe delle tre sezioni) erano pensati per
      il bianco e su questo blu sparirebbero o griderebbero;
   2. i sei tasti che avevano ognuno una forma, un fondo pastello e un badge di colore
      diverso adottano lo stile di «Registro chiamate» e «WhatsApp», che Lupo indica
      come i più leggibili: stessa forma, stesso peso, stesso badge.

   PERCHÉ UNA CLASSE SOLA (.sb-btn) E NON SEI REGOLE RITOCCATE: le sei sezioni erano
   diverse perché nate da restyling successivi (vedi la nota "Opzione B" più sopra),
   ognuna con regole proprie. Ritoccarle una per una avrebbe ricreato lo stesso
   problema al prossimo giro. Ora la forma sta in un posto solo; le classi storiche
   (.chiudi-*, .ric-*, .coll-*) restano solo per il comportamento apri/chiudi e per le
   liste interne, che nessuno tocca.
   ─────────────────────────────────────────────────────────────────────────────── */

/* ── Il tasto: unica forma per tutti e otto ─────────────────────────────────── */
.sb-btn{
  width:100%;display:flex;align-items:center;gap:6px;
  font-family:'Geist',sans-serif;font-size:11px;font-weight:600;line-height:1.35;
  text-align:left;padding:7px 10px;
  border:1px solid var(--sb-btn-border);border-radius:5px;
  background:var(--sb-btn-bg);color:var(--sb-fg);
  cursor:pointer;user-select:none;
  transition:background .15s,border-color .15s;
}
.sb-btn:hover{background:var(--sb-btn-bg-hover);border-color:rgba(255,255,255,.34);}
.sb-btn:focus-visible{outline:2px solid #fff;outline-offset:1px;}
.sb-btn .sb-lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* La freccia delle sezioni apribili: stessa posizione e stessa rotazione per tutte. */
.sb-arrow{font-size:9px;color:var(--sb-fg-muted);margin-left:2px;transition:transform .2s;flex-shrink:0;}
.sb-arrow.open{transform:rotate(90deg);}

/* ── Il badge: una forma sola, il colore resta solo dove SIGNIFICA qualcosa ──── */
/* Neutro di default (un numero è solo un numero). Le due varianti sono le sole in cui
   il colore porta informazione che si perderebbe: rosso = scaduto/urgente,
   ambra = problema che sta tornando. Verde = esito positivo (interventi evitati). */
.sb-badge{
  flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;
  min-width:17px;height:16px;padding:0 5px;border-radius:8px;
  font-size:9px;font-weight:800;line-height:1;
  background:rgba(255,255,255,.20);color:#fff;
}
.sb-badge--alert{background:var(--stato-errore);color:#fff;}
.sb-badge--warn {background:var(--stato-attenzione-testo);color:#fff;}
.sb-badge--ok   {background:var(--stato-ok);color:#fff;}

/* Le classi storiche dei contatori ereditano la forma nuova invece di averne una
   propria: così i JS che le scrivono (refreshChiudiBadge, renderRicontatiPanel,
   _apprCodaLoad, _instCodaLoad, refreshCollaudiBadge, _waRefreshBadge, chiamateBadge)
   NON vanno toccati — è il punto in cui questa unificazione costa meno. */
.chiudi-count,.ric-count,.coll-count,.ct-badge{
  flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;
  min-width:17px;height:16px;padding:0 5px;border-radius:8px;margin-left:0;
  font-size:9px;font-weight:800;line-height:1;
  background:rgba(255,255,255,.20);color:#fff;
}
.ric-count-alert{background:var(--stato-errore)!important;}
.ct-badge-warn{background:var(--stato-attenzione-testo)!important;color:#fff!important;}
.ct-badge-ok{background:var(--stato-ok)!important;color:#fff!important;}

/* ── Le tre sezioni apribili: via i fondi pastello, resta solo il comportamento ── */
.chiudi-section,.ric-section,.coll-section{border:none;border-radius:0;overflow:visible;background:none;padding:0;margin:0;}
/* ⚠️ NON rimettere qui `background:none;border:none`: queste tre classi sono definite PRIMA
   di .sb-btn nel foglio, quindi .sb-btn (stessa specificità, più in basso) vince già da sé
   sui fondi pastello. Azzerarle QUI, cioè DOPO .sb-btn, cancellerebbe invece il bordo e lo
   sfondo del tasto — ed è esattamente l'errore fatto al primo tentativo: cinque tasti su
   otto restavano senza riquadro. Serve solo neutralizzare l'hover pastello. */
.chiudi-header:hover,.ric-header:hover,.coll-header:hover{background:var(--sb-btn-bg-hover);}
/* Gli !important qui sopravvivono a quelli del blocco "Opzione B" (r.~719-723), che
   forzano colori pensati per il fondo chiaro: #9a3412, #991b1b, #5b21b6. */
.chiudi-header .section-label,.ric-header .section-label,.coll-header .section-label{
  color:var(--sb-fg)!important;font-size:11px!important;font-weight:600!important;
  letter-spacing:0!important;text-transform:none!important;margin-bottom:0!important;
  flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.ric-header .ric-toggle,.coll-header .coll-toggle{color:var(--sb-fg-muted)!important;}
/* Le liste che si aprono sotto un tasto: leggibili sul blu, staccate dal tasto. */
.ric-list,.coll-list{color:var(--sb-fg);}
.ric-list.open,.coll-list.open{background:rgba(0,0,0,.16);border-radius:0 0 6px 6px;padding:5px 7px;}

/* ── Intestazione e piede della colonna ─────────────────────────────────────── */
.logo{color:#fff;border-bottom-color:var(--sb-sep);}
.logo-ver{color:var(--sb-fg-muted);}
.sidebar .section-label{color:var(--sb-fg-muted);}
.sidebar-scroll::-webkit-scrollbar-thumb{background:rgba(255,255,255,.22);}
/* Pannello ⚙ in fondo: era una card grigio-chiara, sul blu diventa una macchia. */
.sidebar .db-section{background:rgba(0,0,0,.18);border-color:var(--sb-btn-border);}
.sidebar .db-summary{background:rgba(255,255,255,.10);color:var(--sb-fg);}
.sidebar .db-section[open] .db-summary{border-bottom-color:var(--sb-sep)!important;}
/* ⚠️ Le SOTTOsezioni restano CHIARE, di proposito: dentro ci sono form, textarea e
   tabelle (Ricerche DB, Mappature tecnici, upload immagine) che non sono state
   ricolorate e su fondo scuro diventerebbero illeggibili. Sono una superficie a sé
   dentro la colonna blu, come il popup del menu utente — non parte della colonna.
   Primo tentativo sbagliato: avevo schiarito solo il TESTO lasciando il fondo chiaro,
   e le quattro etichette sparivano (bianco su bianco: si vedeva solo l'emoji). */
/* Barra utente: il nome era --text (nero) e la freccia --text-muted. */
.sidebar .tc-auth-bar{border-top-color:var(--sb-sep);color:var(--sb-fg-muted);}
.sidebar .tc-auth-nome{color:var(--sb-fg);}
.sidebar .tc-auth-arrow{color:var(--sb-fg-muted);}
/* Il menu utente resta una superficie chiara: è un popup, non parte della colonna. */
.sidebar .tc-auth-menu{background:var(--panel);color:var(--text);}
.sidebar .tc-auth-menu-btn{color:var(--text);}

/* ── Barra "Planning Generale": ora è blu scuro, il testo era scuro ──────────── */
.gantt-home-header .tc-gantt-title{color:#fff;}
.gantt-home-header .tc-gantt-nav,
.gantt-home-header .tc-gantt-btn-today{
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.24);color:#fff;
  font-weight:600;
}
.gantt-home-header .tc-gantt-nav:hover,
.gantt-home-header .tc-gantt-btn-today:hover{background:rgba(255,255,255,.20);border-color:rgba(255,255,255,.40);}
.gantt-home-header .tc-gantt-date-input{
  background:rgba(255,255,255,.94);border-color:rgba(255,255,255,.35);color:var(--text);
}
.gantt-home-header #ganttHomeDayLabel{color:#fff!important;}
/* 2026-08-16 (Lupo): i tre bottoni Tabella / Maps / Stats erano tre pillole bianche quasi
   uguali, "nessuna in evidenza". Non seguivano lo schema concordato — blu = struttura,
   VERDE = azione e stato attivo — perche' lo stato attivo era proprio il bianco.
   Ora la gerarchia e' esplicita:
     - "dove sono"  -> pillola VERDE piena, testo bianco (bianco su --accent = 7,97);
     - "cosa posso fare" (Maps, Stats, Oggi, frecce) -> contorno chiaro, secondari.
   Il verde NON puo' essere usato come TESTO su questa barra: --accent su --blu-scuro da'
   1,89 di contrasto. Su fondo scuro il verde funziona solo come riempimento, ed e' il
   motivo per cui i secondari restano bianchi invece di diventare verdi. */
.gantt-home-header .gantt-view-toggle{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.22);}
.gantt-home-header .gantt-view-btn{color:rgba(255,255,255,.80);}
.gantt-home-header .gantt-view-btn:hover:not(.active){background:rgba(255,255,255,.14);color:#fff;}
.gantt-home-header .gantt-view-btn.active{background:var(--accent);color:#fff;box-shadow:0 0 0 1px rgba(255,255,255,.30);}

/* Nota "impianti nascosti" nella scheda cliente (2026-08-17): senza, nascondendo tutti gli
   impianti di un cliente la sezione spariva e sembrava un guasto. Vedi enrichClient. */
.imp-nascosti-nota{font-size:10px;color:var(--muted);padding:4px 6px 2px;font-style:italic;}

/* ── Stato impianto/cliente a colpo d'occhio (2026-08-17, richiesta di Lupo) ──
   Rosso = fuori assistenza, verde = contratto in corso, grigio = permutato.
   La sorgente e la regola stanno in `tcStatoImpianto` (tc-data.js): il colore
   qui non decide niente, veste solo lo stato che quella funzione calcola.
   Si riusa la famiglia dei token di stato dove il significato coincide, invece
   di introdurre un quarto rosso e un quinto verde. */
.tc-st-fa        { color: var(--stato-errore); font-weight: 700; }
.tc-st-attivo    { color: var(--stato-ok); font-weight: 600; }
.tc-st-permutato { color: var(--muted); }
/* Sulla riga impianto della scheda cliente il colore va sul numero, che e'
   l'elemento che il tecnico legge per primo. */
.imp-row .tc-st-fa,
.imp-row .tc-st-attivo,
.imp-row .tc-st-permutato { font-weight: 700; }
