:root{
  /* palette allineata all'archivio/libreria: accento BLU + pannelli navy + verdi tenui */
  --bg:#0f1522; --panel:#1b2230; --panel2:#232d44; --line:#2a3550;
  --txt:#e6edf3; --mut:#9fb0cc; --acc:#f24b40; --gold:#e8a33d;
  --up:#f2653a; --down:#3aa0f2; --cov:#20364a; --sel:#d94dff;
  --danger:#e8524a;   /* rosso riservato alle azioni di eliminazione */
}
*{box-sizing:border-box}
html,body{height:100%}
/* MODALITA' CLIENTE: gli strumenti da "costruttore mappack" sono visibili solo all'admin */
body:not(.is-admin) .admin-only{display:none!important}
body{margin:0;background:var(--bg);color:var(--txt);font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;font-size:13px;display:flex;flex-direction:column}

/* topbar */
#topbar{display:flex;align-items:center;gap:6px;padding:8px 10px;background:linear-gradient(90deg,#12181e,#1c252d);border-bottom:1px solid var(--line);flex-wrap:wrap}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.seg button{border:0;background:var(--panel);color:var(--mut);padding:5px 10px;cursor:pointer;font-size:12px}
.seg button.on{background:var(--acc);color:#fff;font-weight:600}
#topbar>button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 9px;cursor:pointer}
#topbar>button:hover{border-color:var(--gold)}
#gotoInp{background:var(--panel);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 7px}
.sep{width:1px;height:22px;background:var(--line);margin:0 4px}
.grow{flex:1}
.brand{color:var(--mut);letter-spacing:.4px}.brand b{color:var(--acc)}
.brandbox{position:relative;margin-left:auto;display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);border-radius:8px;padding:4px 10px;cursor:default;background:#1c2636}
.brandbox:hover{border-radius:8px 8px 0 0}
.brand-arr{font-size:8px;opacity:.6;transition:opacity .15s}
.brandbox:hover .brand-arr{opacity:1}
.auth-drop{position:absolute;top:100%;left:-1px;right:-1px;z-index:60;display:none;flex-direction:column;align-items:flex-end;gap:3px;min-width:100%;background:#1c2636;border:1px solid var(--line);border-top:none;border-radius:0 0 8px 8px;padding:7px 10px;font-size:11px;color:var(--mut);white-space:nowrap;box-shadow:0 6px 14px rgba(0,0,0,.35)}
.brandbox:hover .auth-drop{display:flex}
.ck{color:var(--mut);font-size:11px;display:flex;align-items:center;gap:4px}

/* layout */
#main{flex:1;display:flex;min-height:0}
#sidebar{width:320px;min-width:320px;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.proj{padding:7px 14px 8px;border-bottom:1px solid var(--line)}
.pname{font-weight:700;font-size:14px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pecu{color:var(--mut);font-size:11px;margin-top:1px}
#versionbar{padding:0 12px}
#versionbar:not(:empty){padding:6px 12px}
.vhdr{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--mut);margin:2px 0 4px;display:flex;align-items:center;justify-content:space-between}
.vhdr #vImportBtn{text-transform:none;letter-spacing:0;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:2px 7px;font-size:11px;cursor:pointer}
.vhdr #vImportBtn:hover{border-color:var(--acc)}
.ovl{position:fixed;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;z-index:60}
.ovl-box{background:var(--panel);border:1px solid var(--line);border-radius:10px;max-width:640px;width:90%;max-height:82vh;overflow:auto;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.ovl-hd{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line);font-weight:600}
.ovl-x{background:transparent;border:0;color:var(--mut);font-size:16px;cursor:pointer}
.ovl-x:hover{color:var(--txt)}
.ovl-sub{padding:12px 16px;color:var(--mut);font-size:12.5px}
.ovl-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.ovl-tbl th{text-align:left;padding:6px 16px;color:var(--mut);font-weight:500;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel)}
.ovl-tbl td{padding:6px 16px;border-bottom:1px solid var(--line2,rgba(255,255,255,.05))}
.ovl-tbl tbody tr{cursor:pointer}
.ovl-tbl tbody tr:hover{background:var(--panel2)}
.ovl-tbl tbody tr.selrow{background:var(--cov);box-shadow:inset 3px 0 0 var(--gold)}
.ovl-tbl td:nth-child(4){text-align:right;font-variant-numeric:tabular-nums;color:var(--acc)}
.vrow{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:6px;cursor:pointer;font-size:12.5px;border:1px solid transparent}
.vrow:hover{background:var(--panel2)}
.vrow.active{background:var(--cov);border-color:var(--acc)}
.vrow .vi{opacity:.9}
.vrow .vname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vrow .vtag{margin-left:6px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:0 6px;font-size:10px;color:var(--mut)}
.vrow .vacts{margin-left:auto;display:flex;gap:2px;opacity:0;transition:opacity .12s}
.vrow:hover .vacts,.vrow.active .vacts{opacity:1}
.vrow .vacts button{background:transparent;border:0;color:var(--mut);cursor:pointer;font-size:12px;padding:1px 4px;border-radius:4px;line-height:1}
.vrow .vacts button:hover{background:var(--panel);color:var(--txt)}
.vrow.vnest{margin-left:14px}
.vrow.vnest .vconn{color:var(--mut);opacity:.55;margin-right:2px}
/* gruppo ORI2+MOD2 dal "trasferisci modifiche": riquadro verde, rientrato a destra (extra, non un ORI equivalente) */
.vderiv{margin:4px 0 4px 16px;border:1px solid rgba(45,140,70,.55);border-radius:8px;padding:3px;background:rgba(45,140,70,.06)}
.vderiv .vrow.vnest{margin-left:12px}
.cmpbase{background:var(--panel2);color:var(--txt);border:1px solid var(--line);border-radius:6px;padding:3px 6px;font-size:12px;cursor:pointer;width:110px;max-width:110px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
.cmpbase:hover{border-color:var(--acc)}
.restore{margin:0 12px 8px;padding:6px 10px;background:#131a26;color:#c3d0e0;border:1px solid var(--line);border-radius:7px;cursor:pointer;font-size:12px;width:calc(100% - 24px)}
.restore:hover{border-color:var(--acc);color:var(--txt)}
.vrow .vacts button{padding:1px 3px}
.pbtns{display:flex;gap:6px;padding:10px 12px}
.pbtns button{flex:1;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:8px;cursor:pointer;font-size:12px}
.pbtns button.red{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
.pbtns button.green{background:#2ea55f;border-color:#2ea55f;color:#fff;font-weight:600}
.pbtns button.green:hover{background:#34b96b}
.pbtns #saveBtn.dirty{outline:2px solid var(--gold)}
/* riga compatta: va a capo su 2 righe da 3 pulsanti */
.pbtns4{padding:6px 12px;gap:5px;flex-wrap:wrap}
.pbtns4>*{flex:1 1 30%;min-width:0}
.pbtns4 button,.pbtns4 #mpBtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:7px 2px;font-size:9.5px;line-height:1;min-height:50px;position:relative;border-radius:7px;overflow:hidden}
.pbtns4 button span{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.pbtns4 button svg{width:18px;height:18px;display:block}
.pbtns4 button span{white-space:nowrap}
.pb-ar{position:absolute;top:3px;right:5px;font-size:7px;opacity:.7;font-style:normal}
/* Mappack a tendina (preconfigurati + file) */
.mpdrop{position:relative;flex:1;display:flex}
.mpdrop #mpBtn{flex:1;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:8px;cursor:pointer;font-size:12px}
.mpdrop #mpBtn:hover{border-color:var(--gold)}
.mpmenu{display:none;position:absolute;top:calc(100% + 4px);left:0;right:auto;min-width:240px;max-width:290px;z-index:60;background:var(--panel2);border:1px solid var(--line);border-radius:8px;box-shadow:0 12px 34px rgba(0,0,0,.55);overflow:hidden}
.mpdrop.open .mpmenu{display:block}
.mpm-h{padding:6px 10px 3px;font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--mut)}
.mpm-i{padding:8px 10px;font-size:12px;color:var(--txt);cursor:pointer;line-height:1.3}
.mpm-i:hover{background:var(--acc);color:#fff}
.mpm-sep{height:1px;background:var(--line);margin:3px 0}
.mpbtns{display:flex;gap:6px;padding:0 12px 8px}
.mpbtns button{flex:1;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:7px;cursor:pointer;font-size:11.5px}
.mpbtns button:hover{border-color:var(--gold)}
.mpbtns button:last-child{flex:0 0 40px}
#mapSearch{margin:0 12px 8px;padding:8px 10px;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px}
.tree{overflow:auto;flex:1;padding:4px 6px 20px}
/* sezione strumenti a scomparsa (più spazio per la lista mappe) */
.tools-hdr{margin:8px 12px;padding:6px 10px;background:var(--panel2);border:1px solid var(--line);border-radius:7px;color:var(--mut);font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;user-select:none}
.tools-hdr:hover{border-color:var(--gold);color:var(--txt)}
.tools-hdr .tarr{transition:transform .15s ease}
.tools-hdr.open .tarr{transform:rotate(90deg)}
.tools{display:none}
.tools.open{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px 8px}
.tools .restore{margin:0;width:auto;flex:1 1 46%;text-align:center;padding:9px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tsort{display:flex;align-items:center;gap:5px;padding:4px 6px 6px;font-size:11px;color:var(--mut)}
.tsort button{background:var(--panel2);border:1px solid var(--line);color:var(--mut);border-radius:5px;padding:3px 9px;cursor:pointer;font-size:11px}
.tsort button.on{background:var(--acc);border-color:var(--acc);color:#fff}
.trow.hd,.cat,.mrow{padding:6px 8px;border-radius:6px;cursor:pointer;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trow.hd:hover,.cat:hover,.mrow:hover{background:var(--panel2)}
.trow.hd.sel,.mrow.sel{background:var(--cov)}
.mrow.peek{background:rgba(232,163,61,.14);box-shadow:inset 3px 0 0 var(--gold)}
.cat{font-weight:600;color:var(--txt);display:flex;align-items:center;gap:4px}
.cat .badge{margin-left:auto;background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:0 8px;font-size:11px;color:var(--mut)}
.tw{width:12px;display:inline-block;color:var(--mut)}
.mrow{padding-left:26px;color:#cdd8e2}
.mrow .addr{color:var(--gold);font-family:monospace;font-size:11px}
/* mappa modificata rispetto all'ORI */
.mrow.mod{color:#f0b98c}
.mrow.mod .addr{color:#f2965a}
.mrow.mod .mi{color:#f2965a}
.cat .badge.modb{margin-left:6px;background:rgba(242,101,58,.18);border-color:#7a3b28;color:#f2965a}
.mrow .mi{color:var(--mut);margin-right:2px}
.mrow .dim{color:var(--mut);float:right;font-size:11px}
.empty2{color:var(--mut);font-style:italic;padding-left:26px}

/* content */
#content{flex:1;min-width:0;overflow:auto;position:relative}
.pane{padding:8px}
.empty{color:var(--mut);padding:30px;text-align:center}

/* tab bar */
#tabbar{display:flex;gap:2px;padding:4px 6px 0;background:#12181e;border-bottom:1px solid var(--line);overflow-x:auto;align-items:flex-end}
#tabbar .tab{display:flex;align-items:center;gap:6px;padding:6px 10px;background:var(--panel);border:1px solid var(--line);border-bottom:none;border-radius:7px 7px 0 0;color:var(--mut);cursor:pointer;white-space:nowrap;font-size:12px}
#tabbar .tab.active{background:var(--panel2);color:var(--txt)}
#tabbar .tab .ta{color:var(--gold);font-family:ui-monospace,monospace;font-size:11px}
#tabbar .tab .tx{color:var(--mut);border-radius:3px;padding:0 4px;font-size:11px}
#tabbar .tab .tx:hover{background:var(--acc);color:#fff}

/* hexdump */
#hexview{padding:6px;position:relative}
.hex-modebar{display:flex;gap:6px;align-items:center;margin-bottom:6px}
.hex-modebar button{background:var(--panel2);border:1px solid var(--line);color:var(--mut);border-radius:6px;padding:4px 10px;cursor:pointer;font-size:12px}
.hex-modebar button.on{background:var(--acc);color:#fff;border-color:var(--acc)}
.hex-modebar .hz{display:flex;gap:4px}
.hex-modebar .hr{flex:1;display:flex;gap:4px;align-items:center}
.hex-modebar .hr button{padding:3px 7px;font-family:ui-monospace,monospace}
.hex-range{flex:1}
.hex-wrap{display:flex;gap:4px}
.hex-scroll{flex:1;height:calc(100vh - 215px);overflow:auto;border:1px solid var(--line);border-radius:8px}
.hex-map{flex:0 0 14px;height:calc(100vh - 215px);background:var(--panel);border:1px solid var(--line);border-radius:4px;cursor:pointer}
.hex-2d{width:100%;height:calc(100vh - 215px);border:1px solid var(--line);border-radius:8px;background:#0f1418;cursor:crosshair;display:block}
.hex-tip{position:absolute;background:#000;border:1px solid var(--gold);color:#fff;font-size:11px;padding:3px 7px;border-radius:5px;pointer-events:none;z-index:20;font-family:monospace}
table.hex thead th{position:sticky;top:0;z-index:2}
table.hex td.nz{background:rgba(232,163,61,0.06)}
table.hex{border-collapse:collapse;font-family:ui-monospace,Consolas,monospace;font-size:12px;table-layout:fixed}
table.hex td,table.hex th{overflow:hidden;white-space:nowrap}
table.hex th{background:var(--panel2);color:var(--mut);padding:3px 7px;border:1px solid var(--line);position:sticky;top:0}
table.hex td{padding:3px 7px;border:1px solid #1c252d;text-align:right;color:#ffffff;cursor:pointer}
table.hex td.addr,table.hex th.addr{color:var(--gold);text-align:left;background:var(--panel2)}
table.hex th.rwh{color:var(--mut);font-weight:500;text-align:left;padding-left:10px}
table.hex td.hbars{padding:0 8px;border-left:1px solid var(--line)}
table.hex td.hbars .hbwrap{display:inline-flex;align-items:flex-end;gap:2px}
table.hex td.hbars .hbwrap span{background:#7d8b9a;display:inline-block;min-height:1px}
table.hex td.hascii{font-family:ui-monospace,monospace;color:#9aa7b4;letter-spacing:2px;white-space:pre;padding:0 8px}
table.hex td.hsel{background:rgba(90,160,255,.30)!important;outline:1px solid rgba(130,185,255,.7);outline-offset:-1px}
.cm-body{padding:14px 16px;display:flex;flex-direction:column;gap:12px;min-width:470px}
.cm-info{color:var(--mut);font-size:12.5px}
.cm-body label{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--txt)}
.cm-body input[type=text],.cm-body input[type=number],.cm-body select{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 7px;font-size:13px}
.cm-body input#cm-name{flex:1;min-width:220px}
.cm-body input[type=number]{width:80px}
.cm-wctl{display:inline-flex;align-items:center;gap:2px}
.cm-wctl input{width:56px;text-align:center}
.cm-wctl input::-webkit-outer-spin-button,.cm-wctl input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.cm-wctl button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:4px 9px;cursor:pointer;font-size:14px;line-height:1}
.cm-wctl button:hover{border-color:var(--gold);color:var(--gold)}
.cm-row{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.cm-h{color:var(--mut);font-size:12.5px}
.cm-h b{color:var(--gold)}
.cm-warn{color:var(--acc);font-size:11.5px}
.cm-divs{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:11.5px;color:var(--mut)}
.cm-divs .cm-dlab{color:var(--mut)}
.cm-divs button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:5px;padding:2px 9px;cursor:pointer;font-size:12px}
.cm-divs button:hover{border-color:var(--gold);color:var(--gold)}
.cm-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}
.cm-foot button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:7px 14px;cursor:pointer}
.cm-foot button.prim{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
.cm-foot button:disabled{opacity:.5;cursor:default}
table.hex td.cov0{background:rgba(150,110,210,.22)}
table.hex td.cov1{background:rgba(58,150,180,.22)}
table.hex td.covsel{background:rgba(232,163,61,.42)!important}
table.hex td.axcov{background:rgba(90,200,130,.26)}
.hex-axinfo{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:0 4px 5px;font-size:11.5px;color:var(--mut);min-height:16px}
.hex-axinfo:empty{display:none}
.hex-axinfo .axi-name{color:var(--gold);font-weight:600}
.hex-axinfo .axi-jump{background:rgba(90,200,130,.15);border:1px solid rgba(90,200,130,.5);color:#8fe0b0;border-radius:5px;padding:2px 8px;cursor:pointer;font-size:11px;font-family:ui-monospace,monospace}
.hex-axinfo .axi-jump:hover{background:rgba(90,200,130,.32)}
.hex-axinfo .axi-none{font-style:italic}
.hex-axinfo .axi-back{background:rgba(232,163,61,.16);border:1px solid rgba(232,163,61,.55);color:var(--gold);border-radius:5px;padding:2px 8px;cursor:pointer;font-size:11px;font-weight:600}
.hex-axinfo .axi-back:hover{background:rgba(232,163,61,.32)}
table.hex td.chg{outline:1px solid var(--gold)}
/* diagnosi trasferimento a 4 file: aree modificate cerchiate per categoria */
table.hex td.chgtun{outline:1px solid #2ea55f;background:rgba(45,140,70,.18)}
table.hex td.chgflash{outline:1px solid #7683903b;box-shadow:inset 0 0 0 1px rgba(120,132,150,.55);background:rgba(120,132,150,.12)}
table.hex td.chganom{outline:2px solid #e05a5a;background:rgba(210,72,72,.24)}
table.mapgrid td.chg{box-shadow:inset 0 0 0 2px var(--gold)}
/* diagnosi trasferimento: verde = tuning automatico · oro (.chg sopra) = ritocco manuale · grigio = flash · rosso = anomalia */
table.mapgrid td.chgtun{box-shadow:inset 0 0 0 2px #2ea55f}
table.mapgrid td.chgflash{box-shadow:inset 0 0 0 1px rgba(120,132,150,.7)}
table.mapgrid td.chganom{box-shadow:inset 0 0 0 2px #e05a5a}
.vrow.vauto .vname{color:#8fd6a6}
table.hex td.cur{background:var(--acc)!important;color:#fff}

/* editor */
.ed-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.ed-title b{color:var(--gold);font-family:monospace}
.ed-title .unit{color:var(--mut)}
.ed-title .dim{color:var(--mut)}
.ed-tabs button{background:var(--panel2);border:1px solid var(--line);color:var(--mut);border-radius:6px;padding:5px 12px;cursor:pointer;margin-left:4px}
.ed-tabs button.on{background:var(--acc);color:#fff;font-weight:600}
.ed-tabs .prop{color:var(--txt)}
.ed-ops{display:flex;align-items:center;gap:6px;margin-bottom:8px;background:var(--panel2);padding:7px;border-radius:8px;border:1px solid var(--line);flex-wrap:wrap}
.ed-ops input{width:90px;background:var(--panel);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 7px}
.ed-ops button{background:var(--panel);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 10px;cursor:pointer}
.ed-ops button:hover{border-color:var(--gold)}
.ed-ops button.fmton{background:var(--gold);color:#1a1200;border-color:var(--gold)}
.ed-ops .selinfo{color:var(--mut);margin-left:auto;font-size:11px}
.ctxmenu{position:fixed;z-index:200;min-width:210px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:4px;box-shadow:0 10px 34px rgba(0,0,0,.55);font-size:12.5px;user-select:none}
.ctx-item{padding:6px 12px;border-radius:5px;cursor:pointer;white-space:nowrap;color:var(--txt)}
.ctx-item:hover{background:var(--panel2)}
.ctx-item.dis{color:var(--mut);opacity:.5;cursor:default}
.ctx-item.dis:hover{background:transparent}
.ctx-item.chk{color:var(--gold)}
.ctx-sep{height:1px;background:var(--line);margin:4px 6px}
.sim-body{padding:14px 16px;display:flex;flex-direction:column;gap:12px}
.sim-ops{display:flex;gap:8px}
.sim-ops select,.sim-ops input{background:var(--panel2);color:var(--txt);border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:13px}
.sim-ops input{width:110px}
.sim-scope{color:var(--mut);font-size:12px}
.sim-list{max-height:320px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:4px}
.sim-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:5px;cursor:pointer;font-size:12.5px}
.sim-row:hover{background:var(--panel2)}
.sim-row .sim-n i{color:var(--gold);font-style:normal;font-size:11px}
.sim-row .sim-d{margin-left:auto;color:var(--mut);font-size:11px;font-family:monospace}
.sim-foot{display:flex;justify-content:flex-end;gap:8px}
.sim-foot button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:7px 14px;cursor:pointer}
.sim-foot button.prim{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
.ovl.cbe-ovl{background:transparent;pointer-events:none}
.ovl.cbe-ovl .ovl-box{pointer-events:auto;position:fixed;margin:0;opacity:.93;background:rgba(22,29,35,.9);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
.ovl.cbe-ovl .ovl-hd{cursor:move;user-select:none}
.cbe-body{padding:14px 16px;display:flex;flex-direction:column;gap:14px;min-width:460px}
.cbe-sub{color:var(--mut);font-size:12px}
.cbe-grid{display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:auto auto;gap:10px;align-items:center}
.cbe-cell{display:flex;flex-direction:column;gap:4px}
.cbe-cell label{font-size:11px;color:var(--mut)}
.cbe-cell input{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:7px 8px;font-size:13px;width:100%}
.cbe-cell.tl{grid-column:1;grid-row:1}
.cbe-cell.tr{grid-column:3;grid-row:1}
.cbe-cell.all{grid-column:2;grid-row:1 / span 2;align-self:center}
.cbe-cell.bl{grid-column:1;grid-row:2}
.cbe-cell.br{grid-column:3;grid-row:2}
.cbe-cell.all input{border-color:var(--gold)}
.cbe-opts{display:flex;gap:24px;flex-wrap:wrap}
.cbe-col{display:flex;flex-direction:column;gap:6px}
.cbe-h{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--mut)}
.cbe-col label{display:flex;align-items:center;gap:6px;font-size:12.5px;cursor:pointer}
.cbe-col .dimf{color:var(--mut);font-family:monospace;font-size:11px}
.cbe-foot{display:flex;justify-content:flex-end;gap:8px}
.cbe-foot button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:7px 14px;cursor:pointer}
.cbe-foot button.prim{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
.cbe-feather{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:12.5px;color:var(--txt)}
.cbe-fx{display:flex;align-items:center;gap:6px;cursor:pointer}
.cbe-fw{color:var(--mut)}
.cbe-feather input[type=number]{width:56px;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:4px 6px}
.cbe-feather select{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:4px 6px}
.cbe-note{color:var(--mut);font-style:italic}
td.cbe-prev{outline:1px solid var(--gold);color:var(--gold)!important;font-weight:600}
.axlabel{color:var(--txt);margin:2px 0 6px;font-size:12px}
.axlabel .axtag{background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:1px 6px;font-size:11px;color:var(--gold);font-weight:600}
.grid-wrap{overflow:auto;max-height:66vh;border:1px solid var(--line);border-radius:8px}
table.mapgrid{border-collapse:collapse;font-family:ui-monospace,Consolas,monospace;font-size:11.5px}
table.mapgrid th{background:var(--panel2);color:#ffffff;padding:3px 7px;border:1px solid var(--line);position:sticky;top:0}
table.mapgrid th.rowh{position:sticky;left:0;top:auto}
table.mapgrid th.corner{position:sticky;left:0;top:0;z-index:2}
table.mapgrid td{padding:3px 8px;border:1px solid #232c34;text-align:right;color:#ffffff;min-width:46px;cursor:cell;user-select:none}
table.mapgrid td.selc{outline:2px solid var(--sel);outline-offset:-2px;box-shadow:inset 0 0 0 9999px rgba(217,77,255,.14)}
.cellinp{width:56px;background:#000;color:#fff;border:1px solid var(--gold);border-radius:3px;font-family:monospace}
canvas{background:#0b0f13;border:1px solid var(--line);border-radius:8px;max-width:100%}
.hint3d{color:var(--mut);font-size:11px;margin-bottom:4px}
.v2d-bar{display:flex;gap:6px;margin-bottom:6px}
.v2d-bar button{background:var(--panel2);border:1px solid var(--line);color:var(--mut);border-radius:6px;padding:4px 10px;cursor:pointer;font-size:12px}
.v2d-bar button:hover{border-color:var(--gold)}
.v2d-bar button.on{background:var(--acc);color:#fff;border-color:var(--acc)}

/* properties modal */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:center;justify-content:center;z-index:50;padding:20px}
.pmodal{background:var(--panel);border:1px solid var(--line);border-radius:12px;width:min(820px,96vw);max-height:94vh;overflow-y:auto;overflow-x:hidden;padding:14px 16px}
.phead{display:flex;justify-content:space-between;align-items:center}
.phead h3{margin:0}
.px{background:none;border:0;color:var(--mut);font-size:16px;cursor:pointer}
.ptabs{display:flex;align-items:center;gap:4px;margin:10px 0;border-bottom:1px solid var(--line);padding-bottom:8px}
.ptabs button{background:var(--panel2);border:1px solid var(--line);color:var(--mut);border-radius:6px;padding:5px 14px;cursor:pointer}
.ptabs button.on{background:var(--acc);color:#fff}
.pgrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px 10px}
.pf{display:flex;flex-direction:column;gap:1px;min-width:0}
.pf label{font-size:10.5px;color:var(--mut)}
.pf input,.pf select{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 9px;min-width:0}
.pf-addr,.pf-prev{grid-column:1 / -1}
.addr-ctl{display:flex;gap:4px;align-items:center}
.addr-ctl input{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:7px 9px}
.addr-ctl button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:6px 9px;cursor:pointer;font-size:11px;white-space:nowrap}
.addr-ctl button:hover{border-color:var(--acc);color:#fff}
.addr-prev{font-family:monospace;font-size:11.5px;color:var(--gold);background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:6px 9px;white-space:pre-wrap;word-break:break-word;line-height:1.5}
.fac-ctl{display:flex;align-items:center;gap:5px}
.fac-ctl input{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:6px 9px}
.fac-op{color:var(--mut)}
.fac-res{color:var(--gold);font-family:monospace;font-size:11px;white-space:nowrap}
.unit-ctl{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.unit-ctl input{flex:0 0 170px;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:6px;padding:5px 9px}
.unit-chips{display:flex;flex-wrap:wrap;gap:4px}
.uchip{background:var(--panel2);border:1px solid var(--line);color:var(--mut);border-radius:5px;padding:2px 7px;cursor:pointer;font-size:10.5px}
.uchip:hover{border-color:var(--acc);color:#fff}
.phelp{flex:1;min-width:0;margin-left:10px;padding:5px 10px;background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--gold);border-radius:6px;color:var(--txt);font-size:11px;line-height:1.35}
.pnote{grid-column:1/3;color:var(--mut);font-size:11px;background:var(--panel2);border-left:3px solid var(--gold);padding:8px 10px;border-radius:6px}
.prow{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
.prow button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:8px 16px;cursor:pointer}
.prow .primary{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}

/* popup di conferma a tema */
.cf-ovl{position:fixed;inset:0;background:rgba(5,8,11,.62);display:flex;align-items:center;justify-content:center;z-index:100000}
/* [PAUL 2026-09-01] la casella si ALLARGA quando il nome file e' lungo, ma non oltre 640px:
 * width:fit-content -> stretta se il testo e' corto, larga fino al tetto se e' lungo. I pulsanti
 * (.cf-acts) restano dove sono, in basso a destra. overflow-wrap:anywhere sul messaggio serve
 * perche' i nomi ECU sono un'unica parola con underscore (EDC17C60_read_4100...): senza, sfora la
 * casella invece di andare a capo dentro. */
.cf-box{width:fit-content;min-width:320px;max-width:min(640px,92vw);background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 60px rgba(0,0,0,.6);padding:20px 22px}
.cf-msg{color:var(--txt);font-size:13px;line-height:1.5;white-space:pre-line;overflow-wrap:anywhere;margin-bottom:14px}
.cf-input{width:100%;box-sizing:border-box;background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:8px 10px;margin-bottom:16px;font-size:13px}
.cf-input:focus{outline:none;border-color:var(--acc)}
.cf-acts{display:flex;justify-content:flex-end;gap:10px}
.cf-acts button{border:1px solid var(--line);background:var(--panel2);color:var(--txt);border-radius:7px;padding:8px 16px;cursor:pointer;font-size:12px}
.cf-acts .cf-no:hover{border-color:var(--mut)}
.cf-acts .cf-yes{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
.cf-acts .cf-yes.danger{background:var(--danger);border-color:var(--danger)}
.cf-acts .cf-yes:hover{filter:brightness(1.08)}

/* status */
#status{background:#0b0f13;border-top:1px solid var(--line);color:var(--mut);padding:5px 12px;font-family:monospace;font-size:12px}

/* ---- Riconoscimento mappe (relocate) ---- */
.reloc-launch{width:100%;background:linear-gradient(90deg,#243447,#2a3f57);border:1px solid #3a5573;color:#dbe8f5;border-radius:7px;padding:7px 9px;cursor:pointer;font-weight:600;font-size:12px}
.reloc-launch:hover{border-color:var(--down);color:#fff}
.reloc-ovl{position:fixed;inset:0;background:rgba(5,8,11,.66);display:flex;align-items:center;justify-content:center;z-index:9000}
.reloc-box{width:min(920px,94vw);max-height:88vh;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 60px rgba(0,0,0,.6);overflow:hidden}
.reloc-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--panel2);border-bottom:1px solid var(--line);font-size:14px}
.reloc-x{cursor:pointer;color:var(--mut);font-size:16px}.reloc-x:hover{color:var(--acc)}
.reloc-sub{padding:9px 16px;color:var(--mut);font-size:11.5px;line-height:1.5;border-bottom:1px solid var(--line)}
.reloc-note{margin:8px 10px 2px;padding:8px 11px;background:rgba(45,140,70,.13);border:1px solid #2f6b3f;border-radius:7px;color:#a7e0ba;font-size:11.5px;line-height:1.45}
.reloc-note b{color:#d6f5e0}
.reloc-list{overflow:auto;padding:4px 8px}
/* visore apprendimento */
.learn-list{overflow:auto;padding:8px 14px}
.learn-row{display:grid;grid-template-columns:1fr 260px 92px;align-items:center;gap:12px;padding:8px 4px;border-bottom:1px solid #212a32}
.learn-name{font-size:12.5px;color:var(--txt);display:flex;flex-direction:column;gap:2px}
.learn-hint{font-size:10.5px;color:var(--mut);line-height:1.3}
.learn-track{position:relative;height:14px;background:#161d25;border-radius:7px;overflow:hidden}
.learn-zero{position:absolute;left:50%;top:0;bottom:0;width:1px;background:#3a4650}
.learn-tick{position:absolute;top:-2px;bottom:-2px;width:2px;background:#7d8b98;border-radius:1px}
.learn-fill{position:absolute;top:0;bottom:0;border-radius:5px}
.learn-fill.pos{background:linear-gradient(90deg,rgba(58,160,90,.5),#3aa05a)}
.learn-fill.neg{background:linear-gradient(90deg,#c74a44,rgba(199,74,68,.5))}
.learn-num{font-family:monospace;font-size:12px;color:var(--mut);text-align:right;display:flex;flex-direction:column}
.learn-num.moved{color:#e8d199;font-weight:700}
.learn-was{font-size:9.5px;color:#5a6570}
.reloc-row{display:grid;grid-template-columns:1fr 140px 175px 150px;align-items:center;gap:10px;padding:7px 8px;border-bottom:1px solid #212a32;border-radius:6px}
.ra-eye{color:#9fd0f2}.ra-eye:hover{border-color:var(--down);color:#fff}
/* anteprima mappa candidata */
.rp-ovl{position:fixed;inset:0;background:rgba(4,7,10,.72);display:flex;align-items:center;justify-content:center;z-index:9100}
.rp-box{width:min(1400px,97vw);height:min(820px,92vh);display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 60px rgba(0,0,0,.65);overflow:hidden}
.rp-fit td,.rp-fit th{min-width:0!important;padding:2px 5px!important}
.rp-tw{display:block;max-width:100%}
.rp-tw .grid-wrap{max-height:none;overflow:visible}
.rp-head{display:flex;align-items:center;gap:8px;padding:11px 15px;background:var(--panel2);border-bottom:1px solid var(--line);font-size:13px}
.rp-head .rp-x{margin-left:auto;cursor:pointer;color:var(--mut);font-size:16px}.rp-head .rp-x:hover{color:var(--acc)}
.rp-bar{display:flex;align-items:center;gap:12px;padding:9px 15px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.rp-seg{display:inline-flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.rp-seg button{border:0;background:var(--panel);color:var(--mut);padding:5px 11px;cursor:pointer;font-size:12px}
.rp-seg button.on{background:var(--down);color:#fff;font-weight:600}
.rp-meta{margin-left:auto;color:var(--mut);font-size:11.5px;font-family:monospace}
.rp-warn{padding:7px 15px;background:rgba(210,167,47,.14);border-bottom:1px solid rgba(210,167,47,.35);color:#e8d199;font-size:12px}
.rp-body{padding:12px 15px;overflow:auto;display:flex;justify-content:center;align-items:center;flex:1 1 auto;min-height:0}
.rp-scroll{overflow:auto;max-width:100%}
.rp-tab{border-collapse:collapse;font-family:monospace;font-size:11px}
.rp-tab td{border:1px solid rgba(0,0,0,.25);padding:2px 6px;text-align:right;color:#0c1116;min-width:34px}
#rpTable td.rp-diff{outline:2px solid #f2653a;outline-offset:-2px;font-weight:700}
.rp-pos{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:0 8px;font-size:11px;color:var(--gold)}
.rp-cnt{color:var(--mut);font-size:12px;font-family:monospace}
#rpCanvas{background:#0d1319;border:1px solid var(--line);border-radius:8px;max-width:100%}
.rp-foot{display:flex;align-items:center;gap:10px;padding:11px 15px;background:var(--panel2);border-top:1px solid var(--line)}
/* popup di caricamento */
#relocLoad{z-index:9200}
.rl-box{width:min(420px,90vw);display:flex;flex-direction:column;align-items:center;gap:14px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:26px 28px;box-shadow:0 18px 60px rgba(0,0,0,.6)}
.rl-spin{width:44px;height:44px;border:4px solid var(--line);border-top-color:var(--acc);border-radius:50%;animation:rlspin .8s linear infinite}
@keyframes rlspin{to{transform:rotate(360deg)}}
.rl-txt{color:var(--txt);font-size:13px;font-family:monospace}
.rl-bar{width:100%;height:8px;background:#1a222a;border-radius:5px;overflow:hidden}
.rl-bar i{display:block;height:100%;background:var(--acc);width:0;transition:width .12s linear}
.reloc-row.accept{background:rgba(45,140,70,.13)}
.reloc-row.confirm{background:rgba(45,140,70,.28);box-shadow:inset 3px 0 0 #2ea55f}
.reloc-row.uncertain{background:rgba(210,167,47,.15)}
.reloc-row.reject{background:rgba(200,60,55,.12);opacity:.7}
/* riga CORRENTE: segue la mappa da cui si esce nell'anteprima — barra accento a sinistra, visibile su qualunque stato */
.reloc-row.current{box-shadow:inset 4px 0 0 #e8a33d, 0 0 0 1px rgba(232,163,61,.45);opacity:1}
.rr-name{font-size:12.5px}
.rb{font-size:9.5px;padding:1px 5px;border-radius:4px;margin-left:5px;vertical-align:middle}
.rb-g{background:#1f4b30;color:#8fe4ab}.rb-y{background:#4b451f;color:#e8d98f}.rb-o{background:#5a3a1e;color:#f0b478}.rb-r{background:#5a2320;color:#f39a95}.rb-c{background:#1c5233;color:#a7edc0;font-weight:600}
.rr-bar{position:relative;height:16px;background:#1a222a;border-radius:8px;overflow:hidden}
.rr-bar i{position:absolute;left:0;top:0;bottom:0;display:block}
.rr-bar i.g{background:#3aa05a}.rr-bar i.y{background:#d3a72f}.rr-bar i.r{background:#c74a44}
.rr-bar span{position:absolute;right:6px;top:0;line-height:16px;font-size:10px;color:#e6edf3}
.rr-addr{font-family:monospace;font-size:11px;color:var(--txt);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.rr-addr em{color:var(--mut);font-style:normal}
.reloc-csel{background:var(--panel2);border:1px solid var(--line);color:var(--txt);border-radius:5px;font-size:10px;padding:1px 3px}
.rr-acts{display:flex;gap:4px;justify-content:flex-end}
.ra{width:30px;height:26px;border:1px solid var(--line);background:var(--panel2);color:var(--mut);border-radius:6px;cursor:pointer;font-size:13px}
.ra-ok.on{background:#2d8c46;border-color:#2d8c46;color:#fff}
.ra-un.on{background:#c9962b;border-color:#c9962b;color:#20160a}
.ra-no.on{background:var(--acc);border-color:var(--acc);color:#fff}
.ra:disabled{opacity:.3;cursor:not-allowed}
.reloc-foot{display:flex;align-items:center;gap:10px;padding:11px 16px;background:var(--panel2);border-top:1px solid var(--line)}
.reloc-cnt{color:var(--mut);font-size:12px;margin-right:auto}
.reloc-btn{background:var(--panel);border:1px solid var(--line);color:var(--txt);border-radius:7px;padding:7px 12px;cursor:pointer;font-size:12px}
.reloc-btn:hover{border-color:var(--down)}
.reloc-btn.primary{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
