:root{color-scheme:light;--plane:#f4f5f3;--surface:#ffffff;--surface-2:#fbfbfa;--ink:#0b0b0b;--ink-2:#52514e;--muted:#898781;--grid:#e7e7e2;--line:#d9d9d2;--ring:rgba(11,11,11,0.1);--brand:#0b7f8c;--brand-2:#0a9fb0;--brand-soft:#e1f4f6;--cat-formula:#0a9fb0;--cat-packaging:#1baf7a;--cat-grafica:#4a3aa7;--cat-regolatorio:#eb6834;--sez-materie:#eda100;--sez-lavorazioni:#e34948;--sez-pack1:#2a78d6;--sez-pack2:#e87ba4;--good:#0ca30c;--warning:#e0940a;--critical:#d03b3b;--muted-status:#898781;--shadow:0 1px 2px rgba(11,11,11,0.05),0 4px 16px rgba(11,11,11,0.06)}:root[data-theme=dark]{color-scheme:dark;--plane:#0d0d0d;--surface:#1a1a19;--surface-2:#141413;--ink:#ffffff;--ink-2:#c3c2b7;--muted:#8f8e88;--grid:#2c2c2a;--line:#383835;--ring:rgba(255,255,255,0.1);--brand:#3fc9d8;--brand-2:#1fb4c4;--brand-soft:#0e343a;--cat-formula:#22b6c6;--cat-packaging:#199e70;--cat-grafica:#9085e9;--cat-regolatorio:#d95926;--sez-materie:#c98500;--sez-lavorazioni:#e66767;--sez-pack1:#3987e5;--sez-pack2:#d55181;--good:#0ca30c;--warning:#fab219;--critical:#e05555;--muted-status:#8f8e88;--shadow:0 1px 2px rgba(0,0,0,0.4),0 4px 18px rgba(0,0,0,0.5)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:system-ui,-apple-system,Segoe UI,sans-serif;background:var(--plane);color:var(--ink);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--brand-2)}:focus-visible{outline:2px solid var(--brand-2);outline-offset:2px}.app{display:flex;min-height:100vh}.sidebar{width:230px;flex:0 0 230px;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow:auto}.brand{padding:20px 18px 14px;border-bottom:1px solid var(--line)}.brand .logo{display:flex;align-items:center;gap:10px}.brand-logo{height:32px;width:auto;display:block;flex:0 0 auto}.brand h1{font-size:15px;margin:0;font-weight:700;letter-spacing:-.2px}.brand .sub{font-size:11px;color:var(--muted);margin-top:2px}nav.side-nav{padding:10px;flex:1 1}nav.side-nav a{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:transparent;color:var(--ink-2);padding:9px 11px;border-radius:9px;cursor:pointer;font-size:13.5px;font-weight:500;margin-bottom:2px;text-decoration:none}nav.side-nav a:hover{background:var(--surface-2);color:var(--ink)}nav.side-nav a.active{background:var(--brand-soft);color:var(--brand-2);font-weight:600}nav.side-nav a .ico{width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;opacity:.85}nav.side-nav a.active .ico{opacity:1}.side-foot{padding:12px 14px;border-top:1px solid var(--line);font-size:11px;color:var(--muted)}.themebtn{display:flex;align-items:center;gap:8px;width:100%;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);padding:8px 10px;border-radius:9px;cursor:pointer;font-size:12.5px;margin-bottom:10px}.themebtn:hover{border-color:var(--brand-2);color:var(--ink)}.side-user{font-size:12px;color:var(--ink-2);margin-bottom:8px}.side-user b{display:block;color:var(--ink);font-size:12.5px}.side-user .role{display:inline-block;margin-top:3px;font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--brand-2);background:var(--brand-soft);padding:1px 7px;border-radius:999px}.main{flex:1 1;min-width:0;display:flex;flex-direction:column}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--surface) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);padding:14px 26px;display:flex;align-items:center;gap:16px}.topbar h2{margin:0;font-size:17px;font-weight:650;letter-spacing:-.3px}.topbar .crumb{font-size:12px;color:var(--muted)}.spacer{flex:1 1}.content{padding:22px 26px 60px;max-width:1400px;width:100%}.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}.card-h{padding:15px 18px;border-bottom:1px solid var(--line)}.card-h h3{margin:0;font-size:14.5px;font-weight:650}.card-h .desc{font-size:12px;color:var(--muted);margin-top:2px}.card-b{padding:16px 18px}.placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:64px 24px;color:var(--muted)}.placeholder .ico{color:var(--brand-2);opacity:.85}.placeholder h3{margin:0;font-size:16px;color:var(--ink);font-weight:650}.placeholder p{margin:0;max-width:460px;font-size:13px}.placeholder .tag{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--brand-2);background:var(--brand-soft);padding:3px 10px;border-radius:999px}.grid{display:grid;grid-gap:16px;gap:16px}.kpis{grid-template-columns:repeat(4,1fr)}@media (max-width:1050px){.kpis{grid-template-columns:repeat(2,1fr)}}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}.kpi .lab{font-size:12px;color:var(--muted);font-weight:500}.kpi .val{font-size:29px;font-weight:700;letter-spacing:-.5px;margin-top:6px}.kpi .accent{color:var(--brand-2)}.btn{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);padding:9px 14px;border-radius:9px;cursor:pointer;font-size:13px;font-weight:500}.btn:hover{color:var(--ink)}.btn-primary,.btn:hover{border-color:var(--brand-2)}.btn-primary{background:var(--brand-2);color:#fff}.btn-primary:hover{color:#fff;filter:brightness(1.05)}label.field{display:block;font-size:12.5px;color:var(--ink-2);font-weight:500;margin-bottom:12px}label.field span{display:block;margin-bottom:5px}input,select{width:100%;border:1px solid var(--line);background:var(--surface-2);color:var(--ink);padding:9px 11px;border-radius:9px;font-size:13.5px;font-family:inherit}input:focus,select:focus{border-color:var(--brand-2);outline:none}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--plane)}.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:28px 26px}.login-card .logo{display:flex;align-items:center;gap:10px;margin-bottom:18px}.login-card h1{font-size:16px;margin:0;font-weight:700}.login-card .sub{font-size:11px;color:var(--muted)}.login-err{background:color-mix(in srgb,var(--sez-lavorazioni) 12%,transparent);border:1px solid var(--sez-lavorazioni);color:var(--sez-lavorazioni);border-radius:9px;padding:9px 11px;font-size:12.5px;margin-bottom:14px}.list-toolbar{gap:12px}.list-toolbar,.toolbar-actions{display:flex;align-items:center;flex-wrap:wrap}.toolbar-actions{gap:8px}.btn,.list-toolbar .btn,a.btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none;white-space:nowrap}.search{width:200px}.filter-select{width:auto;min-width:160px}.table-scroll{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table td,.data-table th{text-align:left;padding:10px 14px;border-bottom:1px solid var(--grid);white-space:nowrap}.data-table thead th{font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);font-weight:600;position:-webkit-sticky;position:sticky;top:0}.data-table tbody tr:hover,.data-table thead th{background:var(--surface-2)}.data-table .num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.data-table .empty-row{text-align:center;color:var(--muted);padding:28px}.tag{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:2px 7px}.badge,.tag{color:var(--ink-2)}.badge{display:inline-block;font-size:11px;font-weight:600;border:1px solid var(--line);border-radius:999px;padding:2px 9px}.muted{color:var(--muted)}.row-actions{display:flex;gap:4px;justify-content:flex-end}.icon-btn{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);border-radius:8px;padding:5px 7px;cursor:pointer;display:inline-flex}.icon-btn:hover{border-color:var(--brand-2);color:var(--brand-2)}.icon-btn.danger:hover{border-color:var(--sez-lavorazioni);color:var(--sez-lavorazioni)}.stack-gap>*+*{margin-top:20px}.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;z-index:60;overflow-y:auto}.modal-panel{background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);width:100%;max-width:560px}.modal-wide{max-width:760px}.modal-h{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}.modal-h h3{margin:0;font-size:15px;font-weight:650}.modal-x{border:0;background:transparent;color:var(--muted);cursor:pointer;padding:4px;border-radius:8px}.modal-x:hover{background:var(--surface-2);color:var(--ink)}.modal-b{padding:20px}.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:4px 16px;gap:4px 16px}.form-grid .field{margin-bottom:8px}.field-err{display:block;color:var(--sez-lavorazioni);font-size:11.5px;font-style:normal;margin-top:3px}.muted-note{font-size:12.5px;color:var(--muted);margin:0 0 14px}.import-pick{gap:10px}.import-err-note,.import-pick{display:flex;align-items:center;flex-wrap:wrap}.import-err-note{font-size:12.5px;color:var(--warning);gap:6px;margin-top:12px}.link-btn{border:0;background:transparent;color:var(--brand-2);cursor:pointer;font-size:12.5px;padding:0;text-decoration:underline}.link-btn,.pill{display:inline-flex;align-items:center;gap:4px}.pill{font-size:11.5px;font-weight:600;border-radius:999px;padding:2px 9px}.pill-ok{color:var(--good);background:color-mix(in srgb,var(--good) 12%,transparent)}.pill-warn{color:var(--warning);background:color-mix(in srgb,var(--warning) 14%,transparent)}.toast-stack{position:fixed;top:18px;right:18px;display:flex;flex-direction:column;gap:8px;z-index:80}.toast{background:var(--surface);border:1px solid var(--line);border-left-width:4px;border-radius:10px;box-shadow:var(--shadow);padding:11px 16px;font-size:13px;max-width:360px;color:var(--ink)}.toast-success{border-left-color:var(--good)}.toast-error{border-left-color:var(--sez-lavorazioni)}.toast-info{border-left-color:var(--brand-2)}.offer-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.offer-toolbar .filter-select{min-width:280px}.offer-params{grid-template-columns:repeat(4,1fr)}.water-toggle{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted)}.offer-adder{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}.offer-adder select{max-width:420px}.offer-items input[type=number]{padding:5px 7px;text-align:right;font-size:12.5px}.offer-items td{vertical-align:middle}tr.autorow td{background:color-mix(in srgb,var(--sez-pack1) 8%,transparent)}.total-row td{border-top:2px solid var(--line);background:var(--surface-2)}.sez-dot{width:9px;height:9px;border-radius:50%;margin-right:8px;vertical-align:middle}.moq-chip,.sez-dot{display:inline-block}.moq-chip{margin-left:8px;font-size:10px;font-weight:700;letter-spacing:.4px;color:var(--warning);background:color-mix(in srgb,var(--warning) 14%,transparent);border-radius:5px;padding:1px 5px}.warn-banner{display:flex;align-items:center;gap:10px;background:color-mix(in srgb,var(--warning) 12%,transparent);border:1px solid var(--warning);color:var(--warning);border-radius:12px;padding:12px 16px;font-size:13px;font-weight:500}@media (max-width:1050px){.offer-params{grid-template-columns:repeat(2,1fr)}}.back-link{font-size:12.5px;color:var(--muted);text-decoration:none}.back-link:hover{color:var(--brand-2)}.project-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.proj-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--brand-2);font-weight:600}.proj-title{margin:2px 0 4px;font-size:19px;font-weight:650;letter-spacing:-.3px}.clickable-row{cursor:pointer}.progbar{width:120px;height:6px;background:var(--grid);border-radius:3px;overflow:hidden}.progbar span{display:block;height:100%;background:var(--brand-2);border-radius:3px}.note-count{display:inline-block;margin-left:4px;font-size:10px;font-weight:700;color:var(--brand-2)}.notes-list{display:flex;flex-direction:column;gap:10px}.note-item{border:1px solid var(--line);border-radius:9px;padding:9px 11px;font-size:13px;background:var(--surface-2)}.note-meta{font-size:11px;color:var(--muted);margin-bottom:3px}.note-meta b{color:var(--brand-2)}.gantt{font-size:12.5px}.gantt-head{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;margin-left:220px;margin-bottom:8px}.gantt-body{position:relative}.gantt-row{display:flex;align-items:center;height:30px}.gantt-name{width:220px;flex:0 0 220px;padding-right:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink-2)}.gantt-track{position:relative;flex:1 1;height:100%}.gantt-bar{position:absolute;top:5px;height:20px;border:1px solid;border-radius:6px;overflow:hidden;min-width:6px}.gantt-fill{height:100%;opacity:.85}.gantt-today{position:absolute;top:-18px;bottom:0;width:2px;background:var(--warning);z-index:3}.gantt-today .lab{position:absolute;top:0;left:4px;font-size:10px;color:var(--warning);font-weight:700;white-space:nowrap}.dash-selhead{justify-content:space-between;margin-bottom:16px;flex-wrap:wrap}.barrow,.dash-selhead{display:flex;align-items:center;gap:12px}.barrow{margin-bottom:10px}.barname{width:150px;flex:0 0 150px;font-size:12.5px;color:var(--ink-2)}.bartrack{flex:1 1;height:14px;background:var(--grid);border-radius:7px;overflow:hidden}.barfill{height:100%;border-radius:7px}.baramt{width:110px;text-align:right;font-size:12.5px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--ink)}.cal-nav{display:flex;align-items:center;gap:10px}.cap-panel{display:flex;gap:18px;flex-wrap:wrap}.cal-legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-bottom:12px}.cal-legend .sw{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:middle}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:6px;gap:6px}.cal-dow{font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);font-weight:600;text-align:center;padding-bottom:4px}.cal-cell{position:relative;min-height:62px;border:1px solid var(--line);border-radius:9px;background:var(--surface);padding:6px 8px;overflow:hidden}.cal-cell.empty{border:0;background:transparent}.cal-cell.weekend{background:var(--surface-2);opacity:.6}.cal-cell.today{box-shadow:0 0 0 2px var(--brand-2) inset}.cal-cell.editable{cursor:pointer}.cal-cell.editable:hover{border-color:var(--brand-2)}.cal-day{font-size:12px;font-weight:600;color:var(--ink-2)}.cal-cell.today .cal-day{color:var(--brand-2)}.cal-hours{font-size:12.5px;font-weight:700;margin-top:4px}.cal-load{position:absolute;left:0;right:0;bottom:0;height:5px;background:var(--grid)}.cal-load span{display:block;height:100%}@media (max-width:700px){.cal-cell{min-height:48px;padding:4px 5px}.cal-hours{font-size:11px}}.doc-uploader{display:grid;grid-template-columns:1fr 1.2fr 1.2fr auto;grid-gap:12px;gap:12px;align-items:end}.doc-uploader input[type=file]{padding:6px 8px}.comp-grid,.gr-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));grid-gap:12px;gap:12px}.comp-card{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--surface-2)}.comp-level{font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--brand-2);font-weight:700}.comp-name{font-size:13.5px;font-weight:600;margin-top:4px}.gr-card{position:relative;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface-2)}.gr-thumb{display:flex;align-items:center;justify-content:center;height:120px;background:var(--plane);overflow:hidden}.gr-thumb img{max-width:100%;max-height:100%;object-fit:contain}.gr-ext{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:20px;color:var(--muted)}.gr-info{padding:8px 10px}.gr-info .tp{font-size:11px;font-weight:700;color:var(--brand-2)}.gr-info .fn{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gr-info .sz{font-size:11px;color:var(--muted)}.gr-del{position:absolute;top:6px;right:6px;background:var(--surface)}@media (max-width:900px){.doc-uploader{grid-template-columns:1fr 1fr}}@media (max-width:860px){.app{flex-direction:column}.sidebar{width:100%;flex:none;height:auto;position:static;flex-direction:column}nav.side-nav{display:flex;flex-wrap:wrap;gap:4px}nav.side-nav a{width:auto}.content{padding:18px 16px 48px}.topbar{padding:12px 16px}.form-grid{grid-template-columns:1fr}.search{width:100%}}