:root{--bg: #f5f6f8;--card: #fff;--ink: #1d2433;--muted: #6b7385;--line: #e2e5ec;--brand: #2456d6;--ok: #1e8e5a;--warn: #c27c0e;--bad: #c0392b;font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:var(--ink)}@media (prefers-color-scheme: dark){:root{--bg: #14171f;--card: #1d212c;--ink: #e8ebf2;--muted: #9aa3b8;--line: #2d3342;--brand: #6c93ff;--ok: #4cc38a;--warn: #e0a23c;--bad: #ff7a6b}}*{box-sizing:border-box}body{margin:0;background:var(--bg)}header{display:flex;align-items:center;gap:16px;padding:12px 24px;background:var(--card);border-bottom:1px solid var(--line);flex-wrap:wrap}header h1{font-size:18px;margin:0}nav{display:flex;gap:4px}nav button,.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);padding:6px 12px;border-radius:6px;cursor:pointer;font:inherit}nav button.on,.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn:disabled{opacity:.5;cursor:not-allowed}.spacer{flex:1}main{padding:24px;max-width:1200px;margin:0 auto}.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin-bottom:24px}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px}.kpi .n{font-size:30px;font-weight:600}.kpi .l{color:var(--muted);font-size:13px}.kpi.bad .n{color:var(--bad)}.kpi.warn .n{color:var(--warn)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);font-size:14px;vertical-align:middle}th{color:var(--muted);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.04em}tr.click{cursor:pointer}tr.click:hover{background:color-mix(in srgb,var(--brand) 6%,transparent)}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;background:var(--line)}.badge.in_lavorazione{background:color-mix(in srgb,var(--brand) 20%,transparent);color:var(--brand)}.badge.pronta,.badge.completata,.badge.chiusa,.badge.spedita{background:color-mix(in srgb,var(--ok) 20%,transparent);color:var(--ok)}.badge.da_verificare,.badge.sospesa{background:color-mix(in srgb,var(--warn) 22%,transparent);color:var(--warn)}.badge.bad{background:color-mix(in srgb,var(--bad) 20%,transparent);color:var(--bad)}.cols{display:grid;gap:16px;grid-template-columns:1fr 1fr}@media (max-width: 800px){.cols{grid-template-columns:1fr}}.toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center}label{display:grid;gap:4px;font-size:13px;color:var(--muted)}input,select,textarea{font:inherit;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--ink)}.form{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.alert{padding:10px 12px;border-radius:8px;margin-bottom:12px;font-size:14px}.alert.err{background:color-mix(in srgb,var(--bad) 15%,transparent);color:var(--bad)}.alert.warn{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn)}.bar{height:8px;border-radius:4px;background:var(--line);overflow:hidden;min-width:80px}.bar i{display:block;height:100%;background:var(--brand)}.log{font-size:13px;display:grid;gap:6px;max-height:360px;overflow:auto}.log small{color:var(--muted)}h2{font-size:16px;margin:0 0 12px}.back{margin-bottom:12px}h2.page{font-size:20px;margin:0 0 16px}.muted{color:var(--muted)}.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.seg{display:inline-flex;gap:0}.seg button{border:1px solid var(--line);background:var(--card);color:var(--ink);padding:6px 12px;cursor:pointer;font:inherit}.seg button:first-child{border-radius:6px 0 0 6px}.seg button:last-child{border-radius:0 6px 6px 0}.seg button.on{background:var(--brand);border-color:var(--brand);color:#fff}.bar.hot i{background:var(--bad)}main{max-width:1400px}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-top:10px}.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-1px}.legend i.done{background:#888}.legend i.run{background:repeating-linear-gradient(45deg,#888,#888 3px,#bbb 3px,#bbb 6px)}.legend i.plan{border:1px dashed #888}.legend i.today{background:var(--bad);width:2px}.gantt-wrap{overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:10px}.g-row{display:flex;height:40px;border-bottom:1px solid var(--line)}.g-row.g-head{height:30px;position:sticky;top:0;z-index:4;background:var(--card)}.g-row.g-group{height:26px;background:color-mix(in srgb,var(--brand) 7%,var(--card))}.g-row.maint .g-track{background-image:repeating-linear-gradient(135deg,transparent,transparent 6px,color-mix(in srgb,var(--bad) 12%,transparent) 6px,color-mix(in srgb,var(--bad) 12%,transparent) 12px)!important}.g-label{flex:0 0 200px;position:sticky;left:0;z-index:3;background:var(--card);padding:3px 10px;border-right:1px solid var(--line);font-size:13px;line-height:1.25;overflow:hidden}.g-group .g-label{background:color-mix(in srgb,var(--brand) 7%,var(--card));display:flex;align-items:center}.g-label small{color:var(--muted)}.g-label .badge{font-size:10px;padding:0 6px}.g-track{position:relative;flex:none;background-image:linear-gradient(to right,var(--line) 1px,transparent 1px)}.g-day{position:absolute;top:0;height:30px;text-align:center;font-size:11px;line-height:30px;color:var(--muted);border-left:1px solid var(--line)}.g-day.now{color:var(--brand);font-weight:600}.g-bar{position:absolute;top:8px;height:24px;border-radius:5px;font-size:11px;color:#fff;line-height:24px;padding:0 5px;overflow:hidden;white-space:nowrap;cursor:pointer;background:var(--c)}.g-bar.done{opacity:.55}.g-bar.run{background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.28),rgba(255,255,255,.28) 4px,transparent 4px,transparent 8px);box-shadow:0 0 0 1px var(--c)}.g-bar.susp{background-image:repeating-linear-gradient(45deg,rgba(0,0,0,.35),rgba(0,0,0,.35) 4px,transparent 4px,transparent 8px)}.g-bar.plan{background:color-mix(in srgb,var(--c) 22%,var(--card));border:1px dashed var(--c);color:var(--ink);line-height:22px}.g-bar.sim{outline:2px solid var(--bad)}.g-due{position:absolute;top:12px;font-size:14px;line-height:1;color:var(--ok);pointer-events:auto;z-index:2}.g-due.late{color:var(--bad)}.g-today{position:absolute;top:0;bottom:0;width:2px;background:var(--bad);z-index:2;pointer-events:none;opacity:.8}.nofs{border:0;padding:0;margin:0;min-width:0}.nofs:disabled input,.nofs:disabled textarea{opacity:.75}.utente{font-size:13px;text-align:right;line-height:1.2}.utente small{display:block}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:100%;max-width:380px;display:grid;gap:14px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px;box-shadow:0 8px 30px #0000001f}.login-logo{border-radius:10px;padding:8px;text-align:center;color:#14264a}@media (prefers-color-scheme: dark){.login-logo{background:#fff}}.login-logo img{width:100%;max-width:260px;height:auto;display:block;margin:0 auto}.login-logo h1{margin:8px 0 0;font-size:28px}.login-logo p{margin:0 0 8px;font-size:13px}.login-card .btn.primary{padding:10px;font-size:15px}.login-note{margin:0;text-align:center;font-size:12px;color:var(--muted)}header img{flex:none}button.link{background:none;border:0;color:var(--brand);cursor:pointer;font:inherit;padding:0;text-align:center;text-decoration:underline}.alert.ok{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok)}code.pw{font-size:15px;padding:2px 6px;border-radius:4px;background:color-mix(in srgb,var(--ink) 10%,transparent);-webkit-user-select:all;user-select:all}.login-card .alert{margin:0}label.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink)}label.check input{width:18px;height:18px;flex:none}.card{overflow-x:auto}.g-label{width:var(--lw, 200px);flex-basis:var(--lw, 200px)}@media (max-width: 760px){header{padding:8px 12px;gap:8px}header h1{font-size:16px}header nav{order:3;width:100%;overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px;-webkit-overflow-scrolling:touch}header nav button{white-space:nowrap}header .spacer{display:none}.utente{margin-left:auto}main{padding:12px}.grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.kpi .n{font-size:24px}.card{padding:12px}th,td{padding:6px;font-size:13px}.toolbar{gap:6px}.seg{display:flex;overflow-x:auto;max-width:100%}.seg button{white-space:nowrap}.form{grid-template-columns:1fr}.g-label{--lw: 120px;font-size:12px;padding:3px 6px}.login-card{padding:18px}}@media (pointer: coarse){.btn,nav button,.seg button{min-height:40px}select,input{min-height:40px;font-size:16px}}@media (max-width: 760px){.g-row{height:68px}.g-row.g-head{height:30px}.g-row.g-group{height:28px}.g-bar{top:22px}.g-due{top:26px}.g-label{line-height:1.3}.g-label .badge{display:inline-block;margin-top:2px}header .utente small{display:none}header h1 small{display:none}header .btn{padding:4px 10px;min-height:34px}}.g-bar:focus-visible{outline:2px solid var(--brand);outline-offset:1px;z-index:3}.g-tip{position:fixed;z-index:70;max-width:290px;padding:8px 10px;font-size:12px;line-height:1.45;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:8px;box-shadow:0 6px 20px #00000040;pointer-events:none}.g-tip .muted{font-size:11px}.popup-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#0a0e188c;display:flex;align-items:center;justify-content:center;padding:16px}.popup{width:100%;max-width:580px;max-height:90vh;overflow-y:auto;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:18px 20px;box-shadow:0 20px 60px #00000059}.popup-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.popup-head h2{font-size:20px;margin:0 0 2px}.popup h3{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:14px 0 6px;font-weight:600}.dl{display:grid;grid-template-columns:max-content 1fr;gap:4px 14px;margin:0;font-size:14px}.dl dt{color:var(--muted)}.dl dd{margin:0}.fasi{list-style:none;padding:0;margin:0;display:grid;gap:4px}.fasi li{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:5px 8px;border-radius:8px;font-size:13px}.fasi li.corrente{background:color-mix(in srgb,var(--brand) 12%,transparent)}.fasi .link{text-align:left}@media (max-width: 760px){.popup-backdrop{align-items:flex-end;padding:0}.popup{max-width:none;border-radius:16px 16px 0 0;max-height:86vh}.dl{grid-template-columns:1fr;gap:0}.dl dd{margin-bottom:6px}}@media (pointer: coarse){.g-tip{display:none}}
