:root{--bg:#f3f4f7;--panel:#fff;--ink:#1d2230;--muted:#6b7280;--line:#dfe2ea;--line2:#eceef3;--brand:#2f3a5c;--primary:#2458c6;--danger:#c62828;--ok:#1b7f4a;--warn:#b26a00;--late:#fde8e8;--soon:#fff3d6;--radius:6px;--side:196px;color:var(--ink);font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);margin:0}a{color:var(--primary);text-decoration:none}.link{cursor:pointer;color:var(--primary)}.muted{color:var(--muted)}.pad{padding:12px}.grow{flex:1}.r{text-align:right}.nowrap{white-space:nowrap}.late{color:var(--danger);font-weight:600}.shell{height:100%;display:flex}.side{width:var(--side);background:var(--brand);color:#d7dcee;flex-direction:column;flex-shrink:0;display:flex}.brand{color:#fff;letter-spacing:.3px;padding:14px 16px;font-size:16px;font-weight:700}.side nav{flex-direction:column;flex:1;display:flex;overflow:auto}.navitem{color:#d7dcee;border-left:4px solid #0000;align-items:center;gap:8px;padding:8px 16px;display:flex}.navitem i{background:var(--accent);border-radius:3px;width:10px;height:10px;display:inline-block}.navitem:hover{background:#ffffff14}.navitem.active{color:#fff;border-left-color:var(--accent);background:#ffffff24;font-weight:600}.navitem.sub{padding-left:38px;font-size:12px}.side-foot{color:#8f98b8;padding:10px 16px;font-size:11px}.main{flex:1;min-width:0;overflow:auto}.page{max-width:1500px;padding:14px 18px 40px}.page-h{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px;display:flex}h1{margin:0;font-size:19px}h3{text-transform:uppercase;letter-spacing:.4px;color:var(--brand);margin:0;font-size:13px}.back{color:var(--muted)}.search{border:1px solid var(--line);border-radius:var(--radius);width:300px;padding:6px 10px}.btn{border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;font:inherit;color:var(--ink);background:#fff;padding:6px 12px;display:inline-block}.btn:hover:not(:disabled){background:#f0f3fa}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.primary:hover:not(:disabled){background:#1c479f}.btn.danger{color:var(--danger)}.btn.small{padding:2px 8px;font-size:12px}input,select,textarea{font:inherit;color:inherit;border:1px solid var(--line);background:#fff;border-radius:4px;width:100%;min-width:0;padding:5px 7px}input[type=checkbox]{width:auto}input:disabled,select:disabled,textarea:disabled{color:#444;background:#f4f5f8}input:focus,select:focus,textarea:focus{border-color:var(--primary);outline:2px solid #9db8f2}input.num{text-align:right;font-variant-numeric:tabular-nums}textarea{resize:vertical}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:12px;padding:12px 14px}.card-h{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.card>h3{margin-bottom:10px}.grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 14px;display:grid}.field{flex-direction:column;gap:3px;min-width:0;display:flex}.field.wide{grid-column:1/-1}.field.check{flex-direction:row;align-items:center;gap:6px}.lbl{color:var(--muted);text-transform:uppercase;letter-spacing:.3px;font-size:11px}.hint{color:var(--muted);font-size:11px}.two{grid-template-columns:1fr 1fr;align-items:start;gap:12px;display:grid}.tabs{border-bottom:1px solid var(--line);gap:2px;margin-bottom:12px;display:flex}.tabs button{cursor:pointer;font:inherit;color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 14px}.tabs button.on{color:var(--brand);border-bottom-color:var(--primary);font-weight:600}.banner{border-radius:var(--radius);justify-content:space-between;align-items:center;margin-bottom:10px;padding:8px 12px;display:flex}.banner button{cursor:pointer;background:0 0;border:0;font-size:16px}.banner.err{color:#8a1c1c;background:#fde8e8;border:1px solid #f5b5b5}.banner.ok{color:#14633a;background:#e3f6ea;border:1px solid #a8dcbb}.banner.info{color:#1e3f86;background:#e8f0fd;border:1px solid #b5ccf2}.table-wrap{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:auto}.tbl{border-collapse:collapse;width:100%}.tbl th{text-align:left;text-transform:uppercase;letter-spacing:.3px;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap;background:#fafbfd;padding:7px 10px;font-size:11px;position:sticky;top:0}.tbl th.r,.tbl td.r{text-align:right;font-variant-numeric:tabular-nums}.tbl th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.tbl th.sortable:hover{color:var(--ink)}.tbl td{border-bottom:1px solid var(--line2);vertical-align:top;padding:6px 10px}.tbl tr.click{cursor:pointer}.tbl tr.click:hover td{background:#f3f6fd}.tbl.edit td{padding:3px 5px}.tbl.lines textarea{min-height:28px}.tbl tr.textline td{background:#fafbfd;font-style:italic}.tbl tr.tot td{border-top:2px solid var(--line);font-weight:700}.tbl tr.row-late td{background:var(--late)}.tbl tr.row-late.click:hover td{background:#fbd5d5}.tbl tr.row-soon td{background:var(--soon)}.pager{color:var(--muted);align-items:center;gap:8px;padding:8px 2px;display:flex}.filters{flex-wrap:wrap;align-items:end;gap:14px;margin-bottom:10px;display:flex}.filters.flat{margin-bottom:8px}.filter{color:var(--muted);text-transform:uppercase;flex-direction:column;gap:3px;font-size:11px;display:flex}.filter select,.filter input:not([type=checkbox]){text-transform:none;width:auto;min-width:140px}.legend{color:var(--muted);align-items:center;gap:6px;margin-left:auto;font-size:12px;display:flex}.sw{border-radius:2px;width:12px;height:12px;display:inline-block}.sw.late{background:var(--late);border:1px solid #f0b0b0}.sw.soon{background:var(--soon);border:1px solid #ecd28f}.bar{background:#eef0f6;border-radius:5px;height:10px;overflow:hidden}.bar div{background:var(--primary);height:100%}.kpis{gap:12px;margin-bottom:12px;display:flex}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;min-width:190px;padding:10px 16px;display:flex}.kpi span{color:var(--muted);text-transform:uppercase;font-size:11px}.kpi b{font-size:20px}.kpi.danger b{color:var(--danger)}.badge{white-space:nowrap;color:#444;background:#e6e8ee;border-radius:10px;padding:1px 8px;font-size:11px;font-weight:600;display:inline-block}.badge.blue{color:#1d4f9f;background:#dde9fb}.badge.green{color:#17693f;background:#dcf3e5}.badge.orange{color:#94560a;background:#ffe9cc}.badge.purple{color:#5d2d92;background:#ece0f8}.badge.red{color:#9b1c1c;background:#fbdcdc}.lookup{position:relative}.lookup .x{cursor:pointer;color:var(--muted);background:0 0;border:0;font-size:16px;position:absolute;top:3px;right:4px}.lookup-list{z-index:20;border:1px solid var(--line);background:#fff;border-radius:4px;max-height:240px;margin:2px 0 0;padding:0;list-style:none;position:absolute;top:100%;left:0;right:0;overflow:auto;box-shadow:0 6px 16px #0000001f}.lookup-list li{cursor:pointer;padding:6px 10px}.lookup-list li:hover{background:#eef3fd}.tiles{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px;max-width:900px;margin-top:10px;display:grid}.tile{color:#fff;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:6px;height:120px;font-size:18px;font-weight:600;transition:transform 80ms;display:flex;box-shadow:0 2px 6px #0000002e}.tile:hover{transform:translateY(-2px)}.tile .ico{font-size:30px}.quote-cols{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:14px;display:grid}.quote-cols>.tabs,.quote-cols>.tab-body{grid-column:1}.summary{grid-area:1/2/span 2;position:sticky;top:10px}.summary dl,.totals dl{grid-template-columns:1fr auto;gap:5px 12px;margin:8px 0 0;display:grid}.summary dd,.totals dd{text-align:right;font-variant-numeric:tabular-nums;margin:0;font-weight:600}.summary dt,.totals dt{color:var(--muted)}.big{font-size:16px;color:var(--ink)!important}.pricing{border-collapse:collapse;width:100%}.pricing th{color:var(--muted);text-transform:uppercase;text-align:right;padding:4px 6px;font-size:11px}.pricing td{border-bottom:1px solid var(--line2);text-align:right;padding:4px 6px}.pricing td:first-child{text-align:left;color:var(--muted)}.pricing tr.sum td,.pricing tr.grand td{border-top:2px solid var(--line);font-weight:600}.pricing tr.grand td{background:#f3f6fd;font-size:15px}.pricing tr.sec td{padding-top:12px}.calc{font-variant-numeric:tabular-nums}.calc.strong{font-weight:700}.totals{flex-direction:column;align-items:flex-end;margin-top:10px;display:flex}.totals dl{min-width:300px}.print-root{background:#e5e7ee;min-height:100%;padding:16px}.printbar{gap:8px;max-width:210mm;margin:0 auto 10px;display:flex}.a4{background:#fff;width:210mm;min-height:297mm;margin:0 auto;padding:18mm 16mm;font-size:11pt;line-height:1.4;position:relative;box-shadow:0 2px 12px #0003}.p-head{justify-content:space-between;gap:20px;margin-bottom:14mm;display:flex}.p-company{font-size:10pt}.p-logo{letter-spacing:-.5px;color:#1d2230;margin-bottom:4px;font-size:20pt;font-weight:800}.p-addr{min-width:75mm;padding-top:10mm}.p-meta{color:#333;justify-content:space-between;margin-bottom:8mm;display:flex}.p-title{margin:0 0 4mm;font-size:18pt}.p-product{margin:6mm 0 4mm;font-size:13pt}.p-lines{border-collapse:collapse;width:100%;margin:4mm 0}.p-lines td,.p-lines th{text-align:left;vertical-align:top;border-bottom:1px solid #ddd;padding:4px 6px}.p-lines th{background:#f2f3f7;font-size:9.5pt}.p-lines .r{text-align:right}.p-lines td.p-opt{border-bottom:0;padding-top:10px}.p-total td{font-size:12pt;font-weight:800;border-top:2px solid #222!important}.p-totals{border-collapse:collapse;width:85mm;margin-left:auto}.p-totals td{padding:3px 6px}.p-totals .r{text-align:right}.p-cond{margin-top:8mm}.p-comment{white-space:pre-wrap;margin-top:6mm}.pre{white-space:pre-wrap}.p-foot{color:#666;text-align:center;border-top:1px solid #ccc;padding-top:2mm;font-size:8.5pt;position:absolute;bottom:10mm;left:16mm;right:16mm}@page{size:A4;margin:0}@media print{body{background:#fff}.no-print{display:none!important}.print-root{background:#fff;padding:0}.a4{box-shadow:none;width:auto;min-height:297mm;margin:0}}@media (width<=1100px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}.two,.quote-cols{grid-template-columns:1fr}.summary{grid-area:auto/1;position:static}.side{width:150px}}.side-user{border-top:1px solid #ffffff1a;flex-direction:column;gap:2px;padding:10px 16px;font-size:12px;display:flex}.side-user strong{color:#fff;font-size:13px}.linkbtn{color:#aab4d8;cursor:pointer;text-align:left;background:0 0;border:0;margin-top:4px;padding:0;font-size:12px}.linkbtn:hover{color:#fff;text-decoration:underline}.login-wrap{background:var(--bg,#f4f6fb);justify-content:center;align-items:center;min-height:100%;padding:16px;display:flex}.login-card{flex-direction:column;gap:12px;width:340px;max-width:100%;display:flex}.login-card h1{margin:0 0 4px;font-size:20px}.history{font-size:12px}.history .diff{color:var(--muted)}.history .diff b{color:var(--ink);font-weight:600}.dgp-search{border:2px solid #5aa9e6;border-radius:10px;width:100%;max-width:900px;margin-bottom:10px;padding:12px 14px;font-size:18px}.dgp-chips,.dgp-facets{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.dgp-facets>div{flex-wrap:wrap;align-items:center;gap:6px;width:100%;display:flex}.chip{border:1px solid var(--line);font:inherit;cursor:pointer;background:#fff;border-radius:14px;padding:2px 10px;font-size:12px}.chip:hover{background:#eaf4fd}.chip.on{color:#fff;background:#5aa9e6;border-color:#5aa9e6}.chip b{color:var(--muted);margin-left:4px;font-weight:600}.chip.on b{color:#fff}.dgp-photos{color:var(--muted);font-size:12px}.drawer-back{z-index:40;background:#00000040;position:fixed;inset:0}.drawer{z-index:41;background:#fff;width:min(640px,100vw);padding:14px;position:fixed;top:0;bottom:0;right:0;overflow:auto;box-shadow:-4px 0 16px #0003}.drawer-h{justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.drawer-h h2{margin:0;font-size:18px}.drawer-links{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.dgp-kv th{text-transform:none;word-break:break-all;background:#fafbfd;width:170px;font-size:11px;position:static}.dgp-kv td{white-space:pre-wrap;word-break:break-word}.prod .row{align-items:center;gap:8px;display:flex}.prod .row.wrap,.kpis.wrap{flex-wrap:wrap}.prod-head{grid-template-columns:1.4fr 90px 120px 190px 120px 2fr;align-items:end;gap:10px;display:grid}.prod-head .ro{padding:6px 0}.allgreen{border-radius:12px;padding:3px 12px;font-weight:700}.allgreen.ok{color:#17693f;background:#dcf3e5}.allgreen.ko{color:#9b1c1c;background:#fde8e8}.kpi.ok{background:#f1faf5;border-color:#8fd0aa}.kpi.ko{background:#fdf3f3;border-color:#eaa5a5}.kpi small{color:var(--muted)}.kpi{min-width:150px}.cell{border:1px solid var(--line);width:56px;font:inherit;background:#fff;border-radius:3px;padding:2px 4px}.cell.num{text-align:right}.cell.wide{width:240px}.cell.w4{width:56px}.cell.w6{width:84px}.cell.run{width:60px;font-weight:700}.prod .xscroll{max-height:70vh;overflow:auto}.matrix th{z-index:2;background:#fafbfd;position:sticky;top:0}.matrix tr.tirage th{top:26px}.matrix tr.tot th{top:56px}.matrix td.vname{text-overflow:ellipsis;max-width:260px;overflow:hidden}.tbl th.c{text-align:center}.pill.g{color:#17693f;background:#dcf3e5;font-weight:600}.pill.bl{color:#1d4f9f;background:#dde9fb;font-weight:600}.pill.ov{color:#94560a;background:#ffe9cc;font-weight:600}.pill.rd{color:#9b1c1c;background:#fbdcdc;font-weight:600}.cell.g{background:#dcf3e5}.dot{border-radius:50%;width:9px;height:9px;margin-right:3px;display:inline-block}.dot.g{background:#2e9e63}.dot.rd{background:#d65a5a}.pastebox{border:1px dashed var(--line);border-radius:var(--radius);background:#fafbfd;margin-bottom:10px;padding:10px}.pastebox textarea{width:100%;margin:6px 0;font-family:ui-monospace,monospace}.inl{align-items:center;gap:4px;display:inline-flex}.checks{margin:0 0 10px;padding:0;list-style:none}.checks li{border-bottom:1px solid var(--line2);padding:5px 10px 5px 26px;position:relative}.checks li:before{content:"●";position:absolute;left:8px}.checks li.ok:before{color:var(--ok)}.checks li.ko:before{color:var(--danger)}.checks li.warn:before{color:var(--warn)}a.btn.disabled{opacity:.5;pointer-events:none}.card .table-wrap{border:0;border-radius:0}.dropzone{border:2px dashed var(--line,#c5cad6);text-align:center;cursor:pointer;color:var(--muted);border-radius:8px;padding:22px}.dropzone.over{background:#eef4fd;border-color:#1d4f9f}.posegrid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:4px 12px;margin-top:12px;display:grid}.posecell{border-bottom:1px solid #eef0f4;align-items:center;gap:8px;padding:2px 0;font-size:12px;display:flex}.posecell .muted{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.doc-lines{font-size:9.5pt}.doc-lines td,.doc-lines th{padding:2px 5px}.doc-lines tfoot td{border-top:2px solid #222}.doc-lines .blank{border-bottom:1px dotted #888;min-width:22mm}.mono{font-family:ui-monospace,monospace}.doc .p-meta .r{text-align:right}.sign{margin-top:12mm}.a4.labels{break-after:page;grid-template-rows:repeat(4,1fr);grid-template-columns:1fr 1fr;gap:4mm;height:297mm;padding:10mm;display:grid}.label{border:1px dashed #888;border-radius:2mm;flex-direction:column;gap:1.5mm;padding:4mm;font-size:10pt;line-height:1.25;display:flex;overflow:hidden}.lb-head{color:#333;justify-content:space-between;font-size:9pt;display:flex}.lb-n{font-size:11pt;font-weight:800}.lb-var{font-size:15pt;font-weight:800}.lb-row{flex-wrap:wrap;gap:8px;display:flex}.lb-qty{font-size:13pt;font-weight:700}.lb-qty small{font-size:8.5pt;font-weight:400}.lb-to{margin-top:auto;font-size:9.5pt}.lb-foot{color:#555;border-top:1px solid #ccc;justify-content:space-between;padding-top:1mm;font-size:8pt;display:flex}@media print{.a4.labels{height:297mm;padding:10mm}.label{border-color:#bbb}}.modal-back{z-index:50;background:#141c3073;justify-content:center;align-items:flex-start;padding:60px 16px;display:flex;position:fixed;inset:0;overflow:auto}.modal{background:var(--panel);border-radius:var(--radius);width:min(760px,100%);padding:16px;box-shadow:0 10px 40px #00000040}.modal .row-actions{justify-content:flex-end;margin-top:12px;display:flex}.group-chips{flex-wrap:wrap;align-items:center;gap:6px;margin-left:10px;display:inline-flex}.group-chips .chip{color:inherit;text-decoration:none}.groups-layout{grid-template-columns:minmax(260px,340px) 1fr;align-items:start;gap:16px;display:grid}.groups-layout .group-row.on td{background:#eaf4fd;font-weight:600}.inline-form{align-items:center;gap:8px;margin-bottom:10px;display:flex}
