:root{
  --bg:#f1f5f9;--sidebar:#1e293b;--sw:220px;--hdr:52px;
  --primary:#2563eb;--primary-d:#1d4ed8;
  --danger:#dc2626;--success:#16a34a;--warn:#d97706;
  --text:#0f172a;--muted:#64748b;--border:#e2e8f0;
  --card:#fff;--input-bd:#d1d5db;
  --cbg:#0d1117;--cfg:#c9d1d9;--ch:240px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;
  font-size:14px;background:var(--bg);color:var(--text);
  display:flex;flex-direction:column}

/* Header */
header{height:var(--hdr);background:var(--sidebar);color:#fff;
  display:flex;align-items:center;padding:0 12px;gap:7px;flex-shrink:0;
  box-shadow:0 2px 8px rgba(0,0,0,.3);z-index:100;flex-wrap:nowrap;overflow:hidden}
.htitle{font-size:14px;font-weight:700;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.htitle span{color:#60a5fa}
.hgrp{display:flex;align-items:center;gap:6px;flex-shrink:0}
.hcfg-label{font-size:13px;font-weight:600;color:#fff;white-space:nowrap}
.hdiv{width:1px;height:20px;background:#334155;flex-shrink:0}

.badge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;
  background:#374151;color:#9ca3af;transition:all .2s;white-space:nowrap}
.badge.running{background:#1e40af40;color:#93c5fd;animation:pulse 1.4s infinite}
.badge.ok{background:#14532d40;color:#4ade80}
.badge.err{background:#7f1d1d40;color:#f87171}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}

.btn{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;
  border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;border:none;
  text-decoration:none;transition:background .15s,transform .1s}
.btn:active{transform:scale(.97)}
.btn:disabled{opacity:.4;cursor:not-allowed}
.btn-save{background:#374151;color:#e5e7eb}.btn-save:not(:disabled):hover{background:#4b5563}
.btn-run{background:var(--primary);color:#fff}.btn-run:not(:disabled):hover{background:var(--primary-d)}
.btn-stop{background:var(--danger);color:#fff}.btn-stop:not(:disabled):hover{background:#b91c1c}
.btn-scan{background:#0f766e;color:#fff}.btn-scan:not(:disabled):hover{background:#0d9488}
.btn-xs{padding:4px 9px;font-size:11px}
.btn-muted{background:#374151;color:#f1f5f9}.btn-muted:not(:disabled):hover{background:#4b5563;color:#fff}
/* Estensione TTL download (⏱ +1g/+2g/+3g): sempre su riga propria sotto le altre azioni */
.ttl-ext{display:block;margin-top:4px}
.ttl-ext .btn{margin-left:4px}

/* Workspace */
.ws{display:flex;flex:1;overflow:hidden}

/* Sidebar */
nav{width:var(--sw);background:var(--sidebar);overflow-y:auto;flex-shrink:0;padding:8px 0}
.nl{display:block;padding:8px 14px;color:#fff;text-decoration:none;font-size:13px;
  border-left:3px solid transparent;transition:all .15s;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nl:hover{color:#e2e8f0;background:rgba(255,255,255,.05)}
.nl.active{color:#fff;background:rgba(37,99,235,.2);border-left-color:var(--primary);font-weight:600}
.nl-group{padding:10px 14px 3px;color:#cbd5e1;font-size:10px;font-weight:700;
  text-transform:uppercase;letter-spacing:.6px;user-select:none;
  display:flex;align-items:center;gap:6px;cursor:pointer}
.nl-group::before{content:'▾';font-size:10px;transition:transform .15s;flex-shrink:0}
.nl-group.collapsed::before{transform:rotate(-90deg)}
.nl-sub{padding-left:24px;font-size:12px}
.nl-group-items{overflow:hidden;transition:max-height .2s}
.nl-group-items.collapsed{max-height:0!important}
.nav-search-wrap { padding: 8px 10px 4px; }
.nav-search {
  width: 100%; padding: 5px 8px; border: 1px solid #334155;
  background: #0f172a; color: #e2e8f0; border-radius: 4px;
  font-size: 12px; outline: none;
}
.nav-search::placeholder { color: #64748b; }
.nav-search:focus { border-color: var(--primary); }
.field.search-hidden { display: none !important; }
.nl.search-hidden, .nl-group.search-hidden, .nl-group-items.search-hidden { display: none !important; }

/* Main */
main{flex:1;overflow-y:auto;padding:22px 26px}
.section{display:none}
.section.on{display:block}
.section h2{font-size:17px;font-weight:700;margin-bottom:4px}
.sdesc{color:var(--muted);margin-bottom:18px;line-height:1.5;font-size:13px}

/* Fields */
.fields{display:flex;flex-direction:column;gap:12px}
.fields-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fields-3col{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media(max-width:1100px){.fields-3col{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.fields-3col{grid-template-columns:1fr}}
.fields-4col{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:1300px){.fields-4col{grid-template-columns:repeat(3,1fr)}}
@media(max-width:1000px){.fields-4col{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.fields-4col{grid-template-columns:1fr}}
.bool-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
@media(max-width:1100px){.bool-grid{grid-template-columns:repeat(2,1fr)}}
.poi-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
@media(max-width:1100px){.poi-grid{grid-template-columns:repeat(2,1fr)}}
.field{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:13px 15px}
.field-bool{display:flex;align-items:center;gap:10px;padding:10px 13px}
.field-bool .fl{margin-bottom:0;flex:1;font-size:13px}
.fl{display:block;font-weight:600;margin-bottom:6px;color:var(--text)}
.fdesc{display:block;font-size:11.5px;color:var(--muted);margin-top:4px;line-height:1.4}
.fhint{display:block;font-size:11px;color:var(--muted);margin-top:2px;font-family:monospace}
.fpxequiv {
  display: block; font-size: 11px; color: var(--primary);
  margin-top: 2px; font-family: monospace;
}
.ferr {
  color: #dc2626;
  font-size: 11.5px;
  margin-top: 4px;
  padding: 4px 8px;
  background: #fef2f2;
  border-left: 3px solid #dc2626;
  border-radius: 3px;
  line-height: 1.4;
  animation: ferr-in .15s ease;
}
.fwarn {
  color: #b45309;
  font-size: 11.5px;
  margin-top: 4px;
  padding: 4px 8px;
  background: #fffbeb;
  border-left: 3px solid #f59e0b;
  border-radius: 3px;
  line-height: 1.4;
  animation: ferr-in .15s ease;
  transition: opacity .4s ease;
}
.fwarn.fade-out { opacity: 0; }
@keyframes ferr-in {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Inputs */
.inp{width:100%;padding:7px 11px;border:1px solid var(--input-bd);border-radius:6px;
  font-size:13px;font-family:inherit;background:#fff;color:var(--text);
  transition:border-color .15s,box-shadow .15s;outline:none}
.inp:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.15)}
.inp-invalid,.inp-invalid:focus{border-color:#dc2626 !important;box-shadow:0 0 0 3px rgba(220,38,38,.15) !important;background:#fef2f2}
.inp-sm{width:auto;min-width:180px}
/* min-width:80px = abbastanza per 3 cifre + spinner native browser, padding 7+11 incluso */
.inp-num{max-width:150px;min-width:80px}
/* Slider a controllo mouse (x-ui-widget=slider) */
.slider-wrap{display:flex;align-items:center;gap:12px}
.inp-range{flex:1;min-width:120px;max-width:260px;height:4px;-webkit-appearance:none;appearance:none;
  background:var(--input-bd,#cbd5e1);border-radius:3px;outline:none;cursor:pointer}
.inp-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;
  border-radius:50%;background:var(--primary,#2563eb);cursor:pointer;border:0;transition:transform .1s}
.inp-range::-webkit-slider-thumb:hover{transform:scale(1.15)}
.inp-range::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--primary,#2563eb);cursor:pointer;border:0}
.slider-val{min-width:48px;font-size:13px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.slider-disabled .inp-range,.inp-range:disabled{opacity:.4;cursor:not-allowed}
.slider-disabled .slider-val{opacity:.4}
.koinline{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:13px;cursor:pointer}
.koinline input{cursor:pointer}
/* Toggle segmentato a N stati (es. scelta algoritmo AR) */
.seg{display:inline-flex;border:1px solid var(--border,#3a3a3a);border-radius:7px;overflow:hidden}
.seg-btn{appearance:none;border:0;border-left:1px solid var(--border,#3a3a3a);background:transparent;color:inherit;padding:7px 14px;font:inherit;cursor:pointer;white-space:nowrap;transition:background .12s}
.seg-btn:first-child{border-left:0}
.seg-btn:hover{background:rgba(255,255,255,.06)}
.seg-btn.on{background:var(--accent,#3b82f6);color:#fff}
/* BGR / resolution sub-input: spazio per 4-5 cifre */
.obj-fields .inp-num{min-width:100px;width:100px}

/* Help tooltip icon (info-point) accanto al label di ogni param.
   Card usa position:fixed per evitare clipping da parent overflow:hidden
   (nav, sezioni, modali). Coord top/left calcolate da JS al mouseenter. */
.tip{position:relative;display:inline-flex;align-items:center;margin-left:6px;vertical-align:middle}
.tip-icon{display:inline-flex;align-items:center;justify-content:center;
  width:15px;height:15px;border-radius:50%;background:#cbd5e1;color:#475569;
  font-size:10px;font-weight:700;cursor:help;user-select:none;font-family:Arial,sans-serif;
  transition:background .15s,color .15s}
.tip-icon:hover{background:var(--primary,#2563eb);color:#fff}
.fdirty {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  background: #f59e0b; margin-left: 6px; vertical-align: middle;
}
.btn-reset {
  margin-left: 6px; padding: 1px 6px; border: 1px solid var(--border);
  border-radius: 4px; background: transparent; color: #334155;
  font-size: 11px; cursor: pointer; vertical-align: middle;
  transition: background .15s, color .15s;
}
.btn-reset:hover { background: var(--border); color: var(--text); }
.tip-card{position:fixed;z-index:9999;
  background:#0f172a;color:#e2e8f0;font-size:12px;line-height:1.45;
  padding:10px 12px;border:1px solid #334155;border-radius:6px;
  width:460px;max-width:85vw;box-shadow:0 8px 24px rgba(0,0,0,.45);
  display:none;text-align:left;white-space:normal;font-weight:400;
  pointer-events:none}
.tip-card strong{display:block;color:#fff;font-size:12px;margin-bottom:4px;font-weight:700}
.tip-card em{display:block;margin-top:8px;color:#94a3b8;font-size:11px;font-style:normal}
.tip-card.visible{display:block}
.ta{resize:vertical;min-height:80px;font-family:monospace;font-size:12px}
select.inp{cursor:pointer}

/* Toggle */
.toggle{position:relative;display:inline-flex;align-items:center;cursor:pointer;flex-shrink:0}
.toggle input{position:absolute;opacity:0;width:0;height:0}
.tslider{width:42px;height:22px;background:#94a3b8;border-radius:11px;
  transition:background .2s;position:relative}
.tslider::after{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;
  background:#fff;border-radius:50%;transition:transform .2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.toggle input:checked+.tslider{background:var(--primary)}
.toggle input:checked+.tslider::after{transform:translateX(20px)}

/* Object field */
.obj-fields{display:flex;flex-direction:column;gap:6px}
.obj-row{display:flex;align-items:center;gap:10px}
.obj-lbl{min-width:80px;font-size:12px;color:var(--muted);font-family:monospace;flex-shrink:0}

/* Color palette picker */
.color-swatch-btn{width:56px;height:28px;flex:0 0 auto;align-self:flex-start;
  border-radius:6px;cursor:pointer;padding:0;
  border:1px solid var(--input-bd);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}
.color-swatch-btn:hover{border-color:var(--primary)}
.color-popup{position:fixed;z-index:9999;background:var(--card);border:1px solid var(--border);
  border-radius:8px;padding:8px;box-shadow:0 6px 24px rgba(0,0,0,.25);
  display:grid;grid-template-columns:repeat(7,22px);gap:6px}
.color-sw{width:22px;height:22px;border-radius:4px;cursor:pointer;padding:0;
  border:1px solid rgba(0,0,0,.25)}
.color-sw:hover{transform:scale(1.15);border-color:var(--primary)}
.color-sw.sel{outline:2px solid var(--primary);outline-offset:1px}

/* Scan panel */
.scan-panel{margin-top:16px;background:#fff;border:1px solid var(--border);
  border-radius:8px;overflow:hidden}
.scan-hdr{display:flex;align-items:center;padding:10px 14px;
  background:#f8fafc;border-bottom:1px solid var(--border);gap:10px}
.scan-title{font-weight:600;font-size:13px;flex:1}
.scan-body{padding:12px 14px}
.scan-row{display:flex;align-items:center;gap:8px;padding:4px 0;
  font-size:12px;border-bottom:1px solid #f1f5f9;font-family:monospace}
.scan-row:last-child{border-bottom:none}
.scan-icon{width:18px;text-align:center;flex-shrink:0}
.scan-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scan-badge{font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;white-space:nowrap}
.sb-ok{background:#dcfce7;color:#166534}
.sb-err{background:#fee2e2;color:#991b1b}
.sb-warn{background:#fef3c7;color:#92400e}
.sb-muted{background:#e2e8f0;color:#475569}
.scan-summary{font-size:12px;color:var(--muted);padding-top:8px;border-top:1px solid var(--border);margin-top:6px}

/* Extract progress */
.extract-progress{margin-top:8px;display:flex;flex-direction:column;gap:4px}
.ep-row{font-size:12px;font-family:monospace;padding:2px 0}
.ep-ok{color:var(--success)}.ep-err{color:var(--danger)}.ep-info{color:var(--primary)}

/* Console */
.cpanel{background:var(--cbg);display:flex;flex-direction:column;flex-shrink:0;height:var(--ch)}
/* Console embeddata nello step Esecuzione del wizard (riempie colonna dx) */
.cpanel--embedded{width:100%;height:100%!important;margin-top:0;
  border:1px solid var(--border);border-radius:6px;overflow:hidden}
.chdr{display:flex;align-items:center;padding:5px 12px;background:#161b22;
  border-top:1px solid #30363d;gap:8px;flex-shrink:0}
.ctitle{font-size:12px;font-weight:600;color:#8b949e;flex:1;font-family:monospace}
.cbtn{font-size:11px;padding:3px 8px;border-radius:4px;border:1px solid #30363d;
  background:transparent;color:#c9d1d9;cursor:pointer}
.cbtn:hover{background:#21262d;color:#e6edf3}
.cout{flex:1;overflow-y:auto;padding:8px 14px;
  font-family:'Cascadia Code','Consolas','Menlo',monospace;font-size:12px;
  line-height:1.65;color:var(--cfg)}
.cout::-webkit-scrollbar{width:5px}
.cout::-webkit-scrollbar-thumb{background:#30363d;border-radius:3px}
.cl{padding:0 2px}
.cl-err{color:#f87171}.cl-warn{color:#fb923c}.cl-ok{color:#4ade80}
.cl-sep{color:#374151}.cl-info{color:#60a5fa}.cl-dim{color:#4b5563}

/* Toast */
#toasts{position:fixed;top:60px;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:stretch;gap:8px;z-index:999;width:min(760px,92vw)}
.toast{padding:9px 14px;border-radius:6px;font-size:13px;font-weight:500;color:#fff;text-align:center;
  box-shadow:0 4px 12px rgba(0,0,0,.25);max-width:100%;
  animation:tin .2s ease,tout .3s 5.7s forwards}
.tok{background:var(--success)}.terr{background:var(--danger)}.tinf{background:var(--primary)}
@keyframes tin{from{transform:translateX(16px);opacity:0}to{transform:none;opacity:1}}
@keyframes tout{from{opacity:1}to{opacity:0;pointer-events:none}}

#validation-summary {
  position: fixed; bottom: 14px; right: 14px;
  background: #fef2f2; border: 1px solid #dc2626; border-radius: 8px;
  padding: 8px 14px; box-shadow: 0 4px 12px rgba(0,0,0,.15);
  font-size: 12px; font-weight: 600; color: #991b1b;
  cursor: pointer; display: none;
  z-index: 500;
}
#validation-summary.show { display: block; }
#validation-summary:hover { background: #fee2e2; }

/* Scrollbars */
main::-webkit-scrollbar,nav::-webkit-scrollbar{width:5px}
main::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}
nav::-webkit-scrollbar-thumb{background:#374151;border-radius:3px}

/* Login modal */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.65);
  display:flex;align-items:center;justify-content:center;z-index:9999}
.modal-card{background:var(--card);border-radius:12px;padding:32px 36px;
  width:340px;box-shadow:0 20px 60px rgba(0,0,0,.4)}
.modal-title{font-size:19px;font-weight:700;margin-bottom:4px}
.modal-title span{color:#60a5fa}
.modal-sub{font-size:12px;color:var(--muted);margin-bottom:22px;line-height:1.5}
.modal-lbl{display:block;font-size:12px;font-weight:600;margin-bottom:5px;color:var(--text)}
.modal-field{margin-bottom:14px}
.modal-err{color:var(--danger);font-size:12px;margin-top:8px;min-height:16px}

/* Header user info */
.huser{font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:8px;
  background:#0f172a;border:1px solid #1e293b;border-radius:6px;padding:4px 10px}
.huser strong{color:#e2e8f0;font-size:13px}
.user-icon{font-size:14px;line-height:1}
.role-badge{font-size:10px;font-weight:700;padding:2px 8px;border-radius:10px;
  text-transform:uppercase;letter-spacing:.06em}
.role-badge.role-admin{background:#fef3c7;color:#92400e;border:1px solid #fcd34d}
.role-badge.role-user{background:#dbeafe;color:#1e3a8a;border:1px solid #93c5fd}

/* Upload bar */
.upload-bar{background:#0f172a;border-top:1px solid #1e293b;flex-shrink:0;overflow:hidden;transition:max-height .2s}
.upload-bar.collapsed{max-height:0}
.upload-bar.expanded{max-height:200px}
.upload-inner{padding:10px 16px;display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}
.upload-group{display:flex;align-items:center;gap:6px}
.upload-lbl{font-size:11px;color:#64748b;white-space:nowrap}
.upload-inp{font-size:11px;color:#8b949e;background:transparent;border:1px solid #30363d;
  border-radius:4px;padding:3px 6px;cursor:pointer;max-width:160px}
.upload-inp::file-selector-button{font-size:10px;padding:2px 6px;border-radius:3px;
  background:#1e293b;border:1px solid #30363d;color:#c9d1d9;cursor:pointer;margin-right:4px}
.upload-progress{font-size:11px;color:#60a5fa;align-self:center}

/* Admin tables */
.adm-section{display:flex;flex-direction:column;gap:20px;margin-bottom:24px}
.adm-card{background:var(--card);border:1px solid var(--border);border-radius:8px;overflow:hidden}
.adm-card-hdr{padding:10px 14px;background:#f8fafc;border-bottom:1px solid var(--border);
  font-size:13px;font-weight:600;display:flex;align-items:center;gap:10px;cursor:pointer;user-select:none}
/* Chevron collassabile: indicatore a destra, ruota quando la card è chiusa. */
.adm-card-hdr::after{content:'\25BE';margin-left:auto;font-size:11px;color:var(--muted);
  transition:transform .15s ease}
.adm-card.collapsed .adm-card-hdr{border-bottom:none}
.adm-card.collapsed .adm-card-hdr::after{transform:rotate(-90deg)}
.adm-card.collapsed .adm-card-body{display:none}
.adm-card-body{padding:14px}
.adm-stat-box{background:#f8fafc;border:1px solid var(--border);border-radius:6px;padding:10px}
.adm-table{width:100%;border-collapse:collapse;font-size:12px}
.adm-table th{text-align:left;padding:7px 10px;border-bottom:2px solid var(--border);
  font-size:11px;color:var(--muted);font-weight:600;white-space:nowrap}
.adm-table td{padding:6px 10px;border-bottom:1px solid var(--border);font-family:monospace;font-size:12px}
.adm-table tr:last-child td{border-bottom:none}
.adm-table tr:hover td{background:#f8fafc}
/* Colonna messaggio errore (alert analisi): clamp a 2 righe, testo completo nel title. */
.adm-err-cell{max-width:420px;overflow:hidden;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:11px;line-height:1.4}
.adm-form{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.adm-form .inp{width:140px}
.adm-fld{display:flex;flex-direction:column;gap:3px}
.adm-fld-lbl{font-size:11px;font-weight:600;color:var(--muted)}
/* Cloud limits 2-column grid: ogni cella usa una griglia interna 1fr/auto/auto
   per allineare label / input / unit in colonne consistenti su entrambe le colonne. */
.adm-limits-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}
/* Limiti cloud: 3 colonne (solo questo pannello). Responsive → 2/1 col. */
.adm-limits-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px 14px}
/* Sfondo grigio pagina dietro le schede: le tile bianche risaltano come nelle sezioni utente. */
.adm-limits-grid,.adm-limits-grid-3{background:var(--bg);padding:12px;border-radius:8px}
@media(max-width:1100px){.adm-limits-grid-3{grid-template-columns:1fr 1fr}}
@media(max-width:760px){.adm-limits-grid-3{grid-template-columns:1fr}}
/* Ogni parametro admin è una scheda (stesso look dei .field delle sezioni utente, es. AR). */
.adm-limit-row{display:grid;grid-template-columns:1fr 130px 56px;
  align-items:center;gap:10px;
  background:var(--card);border:1px solid var(--border);border-radius:8px;padding:12px 14px}
.adm-limit-lbl{font-size:12px;color:var(--text);font-weight:500;
  text-align:left;line-height:1.3}
.adm-limit-inp{display:contents}
.adm-limit-inp .inp{width:130px;min-width:0;text-align:right;font-variant-numeric:tabular-nums}
.adm-limit-unit{font-size:11px;color:var(--muted);text-align:left;white-space:nowrap}
@media(max-width:900px){.adm-limits-grid{grid-template-columns:1fr}}

/* Download banner */
.dl-banner{background:#dcfce7;border:1px solid #86efac;border-radius:8px;
  padding:12px 16px;margin-top:10px;display:flex;align-items:center;gap:10px}
.dl-banner span{flex:1;font-size:13px;color:#166534;font-weight:600}

/* Preview modal */
.preview-modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.85);
  z-index:200;align-items:center;justify-content:center;flex-direction:column;gap:12px}
.preview-modal.show{display:flex}
#previewImg{max-width:92vw;max-height:80vh;border-radius:6px;border:1px solid #334155}
.preview-caption{font-size:12px;color:#888}

/* Mode badge */
/* Mode pill (singola, dentro huser block) */
.mode-pill{font-size:10px;font-weight:700;padding:2px 8px;border-radius:10px;
  letter-spacing:.06em;text-transform:uppercase}
.mode-pill.mode-local{background:#064e3b;color:#6ee7b7;border:1px solid #047857}
.mode-pill.mode-cloud{background:#1e3a5f;color:#93c5fd;border:1px solid #1d4ed8}

/* ── Wizard ──────────────────────────────────────────────────────────────── */
.wiz-container{max-width:1400px;margin:0 auto}
/* Shell wizard: rail step verticale a sinistra + contenuto a destra */
.wiz-shell{display:grid;grid-template-columns:72px minmax(0,1fr);gap:10px;align-items:start}
.wiz-rail{position:sticky;top:0;align-self:start;margin-left:-8px}
.wiz-content{min-width:0}
/* Input unificato: bottone-menu (File/Cartella) + percorso selezionato sotto */
.ipick{position:relative;display:inline-block}
.ipick>summary{list-style:none;cursor:pointer}
.ipick>summary::-webkit-details-marker{display:none}
.ipick>summary::marker{content:''}
.ipick-menu{position:absolute;top:100%;left:0;margin-top:4px;z-index:30;min-width:170px;
  background:var(--card);border:1px solid var(--border);border-radius:8px;
  box-shadow:0 8px 24px rgba(0,0,0,.18);padding:4px;display:flex;flex-direction:column;gap:2px}
.ipick-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;
  padding:7px 10px;border:none;background:transparent;border-radius:6px;
  font-size:12px;color:var(--text);cursor:pointer;font-family:inherit}
.ipick-item:hover{background:var(--bg)}
/* Pill riutilizzo file: compatta, 1 riga, accanto al titolo step Input */
.reuse-pill{display:inline-flex;align-items:center;gap:4px;max-width:60%;
  font-size:11px;color:#166534;background:#dcfce7;border:1px solid #86efac;
  border-radius:8px;padding:4px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wiz-input-row{display:grid;grid-template-columns:fit-content(230px) minmax(0,1fr);
  gap:12px;align-items:start;margin-bottom:14px}
.wiz-input-row > .wiz-input-left, .wiz-input-row > .wiz-input-right{min-width:0}
@media (max-width: 1100px){
  .wiz-preview-grid{grid-template-columns:1fr}
}
@media (max-width: 900px){
  .wiz-input-row{grid-template-columns:1fr}
}
/* Mobile/stretto: rail torna orizzontale in cima, shell a colonna unica */
@media (max-width: 760px){
  .wiz-shell{grid-template-columns:1fr;gap:14px}
  .wiz-rail{position:static}
  .wiz-steps{flex-direction:row;align-items:flex-start;margin-bottom:8px}
  .wiz-step{padding-bottom:0}
  .wiz-step::after{top:14px;left:50%;transform:none;width:100%;height:2px}
}
/* Rail verticale: step impilati, linea connettrice verticale */
.wiz-steps{display:flex;flex-direction:column;align-items:center;margin-bottom:0}
.wiz-step{display:flex;flex-direction:column;align-items:center;width:100%;position:relative;padding-bottom:26px}
.wiz-step.clickable{cursor:pointer}
.wiz-step.clickable:hover .wiz-dot.done{filter:brightness(1.1)}
.wiz-step.clickable:hover .wiz-label{color:var(--primary)}
.wiz-step::after{content:'';position:absolute;top:26px;left:50%;transform:translateX(-50%);
  width:2px;height:100%;background:var(--border);z-index:0}
.wiz-step:last-child{padding-bottom:0}
.wiz-step:last-child::after{display:none}
.wiz-dot{width:26px;height:26px;border-radius:50%;background:var(--border);color:var(--muted);
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;
  z-index:1;position:relative;border:2px solid var(--border);transition:all .2s;flex-shrink:0}
.wiz-dot.done{background:var(--success);color:#fff;border-color:var(--success)}
.wiz-dot.active{background:var(--primary);color:#fff;border-color:var(--primary);
  box-shadow:0 0 0 4px rgba(37,99,235,.15)}
.wiz-dot.optional{border-style:dashed;background:#fff;color:var(--muted)}
.wiz-dot.optional.done{background:var(--success);color:#fff;border-style:solid}
.wiz-dot.optional.active{background:var(--primary);color:#fff;border-style:solid}
.wiz-dot.skipped{background:#f1f5f9;color:#94a3b8;border-color:#cbd5e1;border-style:dashed;text-decoration:line-through}
.wiz-spinner{display:inline-block;width:12px;height:12px;border:2px solid #475569;
  border-top-color:#94a3b8;border-radius:50%;animation:wiz-spin .8s linear infinite;
  vertical-align:middle;margin-right:6px}
@keyframes wiz-spin{to{transform:rotate(360deg)}}
/* Label sopra la linea connettrice: z-index>linea + sfondo pagina che la copre */
.wiz-label{font-size:11px;color:var(--muted);margin-top:5px;text-align:center;
  max-width:72px;line-height:1.15;white-space:nowrap;
  position:relative;z-index:1;background:var(--bg);padding:2px 2px;border-radius:4px}
.wiz-label.active{color:var(--primary);font-weight:600}
.wiz-card{background:var(--card);border:1px solid var(--border);border-radius:12px;
  padding:22px 24px;margin-bottom:14px;
  box-shadow:0 1px 2px rgba(0,0,0,.05),0 1px 3px rgba(0,0,0,.04)}
.wiz-card-title{font-size:15px;font-weight:700;margin-bottom:14px;color:var(--text);letter-spacing:.2px}
/* Step 4 Esecuzione: card riempie viewport, no scroll pagina */
.wiz-card--exec{display:flex;flex-direction:column;margin-bottom:0}
.wiz-card--exec .wiz-card-title{margin-bottom:8px}
/* Grid: box upload (sx) + console (dx). Altezza = viewport meno header/rail. */
.wiz-exec-grid{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);
  gap:12px;height:calc(100vh - 180px);min-height:320px;min-width:0}
.wiz-exec-grid--solo{grid-template-columns:1fr}
/* Box upload: totale fisso in alto + lista scrollabile */
.wiz-exec-uploads{display:flex;flex-direction:column;min-height:0;
  border:1px solid var(--border);border-radius:8px;padding:10px 12px;background:var(--bg)}
.wiz-exec-uploads-list{flex:1;overflow-y:auto;min-height:0;padding-right:4px}
.wiz-exec-uploads-list::-webkit-scrollbar{width:5px}
.wiz-exec-uploads-list::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
.wiz-exec-console-col{min-height:0;min-width:0;display:flex;flex-direction:column}
.wiz-exec-console-col>#wiz-exec-console-slot{flex:1;min-height:0;display:flex;flex-direction:column}
@media (max-width: 760px){
  .wiz-exec-grid{grid-template-columns:1fr;height:auto}
  .wiz-exec-uploads-list{max-height:30vh}
  .cpanel--embedded{height:320px!important}
}
/* Step 2: dati a sinistra, preview a destra */
.wiz-preview-grid{display:grid;grid-template-columns:minmax(0,0.8fr) minmax(0,1.5fr);
  gap:20px;align-items:start}
.wiz-preview-info,.wiz-preview-media{min-width:0}
/* Barra navigazione fissa in alto: sx Indietro · centro Annulla · dx Continua */
.wiz-topnav{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
  gap:10px;margin-top:-4px;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--border);
  min-height:30px}
.wiz-topnav-l{justify-self:start}
.wiz-topnav-c{justify-self:center}
.wiz-topnav-r{justify-self:end}
/* Modalità elaborazione: radio espliciti, opzione selezionata evidenziata */
.wiz-mode{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px;
  padding:8px 10px;background:var(--card,#1b2230);border:1px solid var(--border,#2a3344);
  border-radius:6px;color:var(--text,#e0e0e0)}
.wiz-mode-title{font-size:12px;font-weight:600;color:var(--text,#e0e0e0)}
.wiz-radio{display:inline-flex;align-items:center;gap:6px;font-size:12px;cursor:pointer;
  padding:5px 10px;border:1px solid var(--border);border-radius:6px;color:var(--text);
  background:var(--bg);user-select:none}
.wiz-radio input{accent-color:var(--primary);margin:0;cursor:pointer}
.wiz-radio.sel{border-color:var(--primary);background:rgba(37,99,235,.10);font-weight:600}
.wiz-file-list{display:flex;flex-direction:column;gap:3px;margin-top:8px;
  max-height:150px;overflow-y:auto}
.wiz-file-row{display:flex;align-items:center;gap:6px;font-size:12px;
  font-family:monospace;padding:2px 0}
.wiz-badge{font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;flex-shrink:0}
.wiz-badge-ok{background:#dcfce7;color:#166534}
.wiz-badge-err{background:#fee2e2;color:#991b1b}
.wiz-badge-warn{background:#fef3c7;color:#92400e}
.wiz-badge-skip{background:#f1f5f9;color:#64748b}
.wiz-info-box{border-radius:6px;padding:10px 12px;font-size:12px;margin-top:10px}
.wiz-info-ok{background:#dcfce7;border:1px solid #86efac;color:#166534}
.wiz-info-warn{background:#fef3c7;border:1px solid #fcd34d;color:#92400e}
.wiz-info-err{background:#fee2e2;border:1px solid #fca5a5;color:#991b1b}
.wiz-progress-bar{height:8px;background:#f1f5f9;border-radius:4px;overflow:hidden;margin-top:6px}
.wiz-progress-fill{height:100%;background:var(--primary);border-radius:4px;transition:width .3s}
.wiz-upload-bar{position:relative;height:22px;background:#f1f5f9;border-radius:6px;overflow:hidden;margin-top:6px}
.wiz-upload-bar .wiz-progress-fill{border-radius:6px}
.wiz-upload-label{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(255,255,255,.9);border-radius:5px;padding:1px 9px;font-size:11px;font-weight:600;color:#334155;white-space:nowrap;z-index:1;box-shadow:0 0 2px rgba(0,0,0,.08)}
.wiz-summary-row{display:flex;align-items:center;gap:10px;padding:8px 0;
  border-bottom:1px solid var(--border);font-size:15px}
.wiz-summary-row:last-child{border-bottom:none}
.wiz-summary-lbl{color:var(--muted);width:140px;flex-shrink:0;font-size:14px}
.wiz-summary-val{font-weight:600;font-size:15px}
.wiz-duration{font-size:28px;font-weight:700;color:var(--primary);font-family:monospace;
  margin:10px 0;letter-spacing:1px}

/* Parameter summary */
.ps-details{border:1px solid var(--border);border-radius:8px;overflow:hidden}
.ps-summary{padding:10px 14px;font-size:13px;font-weight:600;cursor:pointer;
  background:#f8fafc;list-style:none;display:flex;align-items:center;gap:6px;
  color:var(--text);user-select:none}
.ps-summary::-webkit-details-marker{display:none}
.ps-summary::before{content:'▶';font-size:10px;transition:transform .15s}
details[open] .ps-summary::before{transform:rotate(90deg)}
.ps-body{padding:0 14px 10px}
.ps-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.ps-section:first-child{border-top:none;padding-top:4px}
.ps-section-title{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;
  letter-spacing:.5px;margin-bottom:6px}
.ps-row{display:flex;align-items:flex-start;gap:8px;padding:2px 0;font-size:12px;flex-wrap:wrap}
.ps-lbl{color:var(--muted);min-width:130px;flex-shrink:0;font-size:11px}
.ps-val{font-family:monospace;font-size:12px;flex:1;word-break:break-all}
.ps-unit{color:var(--muted);font-size:10px}
.ps-on{color:var(--success);font-weight:700;font-family:monospace}
.ps-off{color:var(--muted);font-weight:700;font-family:monospace}
.ps-tag{display:inline-flex;background:#e0f2fe;color:#075985;border-radius:4px;
  padding:1px 6px;font-size:10px;font-weight:600;margin:1px 2px 1px 0}

/* ── Utility classes (E1: ex-inline styles, CSP senza 'unsafe-inline') ──────── */
.hidden{display:none}
.btn-block{width:100%;margin-top:6px}
.btn-block-8{width:100%;margin-top:8px}
.flex1{flex:1}
.otp-input{font-size:18px;letter-spacing:6px;text-align:center;font-family:monospace}
.otp-countdown{font-size:11px;text-align:center}
.login-help{margin-top:14px;padding-top:12px;border-top:1px solid var(--border);
  font-size:11px;color:var(--muted);text-align:center;line-height:1.5}
.login-help-link{color:var(--primary);text-decoration:none;font-weight:600}
.modal-actions{display:flex;gap:8px;margin-top:8px}
.row-gap6{display:flex;gap:6px}
.flex1-mono{flex:1;font-family:monospace}
.text-success{color:var(--success)}
