:root{--steel:#1c2b3a;--steel-2:#24384c;--ink:#0f1720;--paper:#eef1f4;--panel:#fff;--line:#c9d3dc;--line-soft:#e2e8ee;--amber:#e8912d;--amber-dk:#c9761a;--green:#2f9e5f;--red:#c8452f;--muted:#5c6b7a;--hazard:repeating-linear-gradient(45deg,#e8912d 0 14px,#1c2b3a 14px 28px);--mono:"SFMono-Regular",ui-monospace,"Cascadia Mono","Consolas",monospace;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{margin:0;font-family:var(--sans);color:var(--ink);background:var(--paper);font-size:15px;line-height:1.45}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:15px}.login-screen{position:fixed;inset:0;background:linear-gradient(135deg,var(--steel) 0,var(--steel-2) 100%);display:flex;align-items:center;justify-content:center;padding:20px;z-index:200}.login-box{background:#fff;border-radius:14px;padding:36px 32px;max-width:380px;width:100%;box-shadow:0 30px 80px rgba(0,0,0,.4);border-top:5px solid var(--amber)}.login-box .logo{display:flex;flex-direction:column;line-height:1;margin-bottom:26px}.login-box .logo b{font-size:22px;color:var(--steel);letter-spacing:.5px}.login-box .logo span{font-size:11px;color:var(--amber);letter-spacing:2px;text-transform:uppercase;margin-top:5px}.login-form .fld{margin-bottom:15px}.login-form label{display:block;font-size:12px;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:600}.login-form input{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:8px}.login-form input:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 3px rgba(232,145,45,.15)}.login-form button{width:100%;margin-top:6px}.login-err{color:var(--red);font-size:13.5px;margin-top:10px;min-height:18px}header.top{background:var(--steel);color:#fff;border-bottom:4px solid var(--amber)}.top-in{max-width:1180px;margin:0 auto;padding:14px 22px;display:flex;align-items:center;gap:18px}.logo{display:flex;flex-direction:column;line-height:1}.logo b{font-size:22px;letter-spacing:.5px}.logo span{font-size:11px;color:var(--amber);letter-spacing:2px;text-transform:uppercase;margin-top:3px}.top-spacer{flex:1 1}.top-actions{display:flex;gap:8px;flex-wrap:wrap}.btn{border:1px solid transparent;border-radius:7px;padding:9px 14px;font-weight:600;font-size:14px;background:#33475c;color:#fff}.btn:hover{background:#3d566e}.btn.ghost{background:transparent;border-color:#4a6076;color:#dbe4ec}.btn.ghost:hover{background:#2a3d50}.btn.amber{background:var(--amber);color:#241503}.btn.amber:hover{background:var(--amber-dk);color:#fff}.btn.sm{padding:6px 10px;font-size:13px}.btn:disabled{opacity:.55;cursor:not-allowed}.scanbar{background:var(--steel-2);color:#fff;border-bottom:1px solid #0c141d}.scanbar-in{max-width:1180px;margin:0 auto;padding:12px 22px;display:flex;align-items:center;gap:14px}.scan-icon{width:34px;height:34px;border-radius:6px;background:var(--hazard);flex:0 0 auto}.scan-field{flex:1 1;position:relative}.scan-field input{width:100%;padding:11px 13px;border-radius:8px;border:2px solid #47607a;background:#12202d;color:#fff;font-family:var(--mono);font-size:16px;letter-spacing:1px}.scan-field input:focus{outline:none;border-color:var(--amber)}.scan-field label{position:absolute;top:-9px;left:10px;background:var(--steel-2);padding:0 6px;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--amber)}.scan-hint{font-size:12px;color:#9fb0c0;max-width:230px}main{max-width:1180px;margin:0 auto;padding:22px}.searchrow{display:flex;gap:10px;margin-bottom:20px}.searchrow input{flex:1 1;padding:13px 15px;border:1px solid var(--line);border-radius:9px;background:#fff}.searchrow input:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 3px rgba(232,145,45,.15)}.affaire{background:var(--panel);border:1px solid var(--line);border-radius:11px;margin-bottom:16px;overflow:hidden;box-shadow:0 1px 2px rgba(15,23,32,.04)}.affaire-head{display:flex;align-items:center;gap:14px;padding:15px 18px;border-left:6px solid var(--amber);background:linear-gradient(90deg,#fbfcfd,#fff)}.aff-no{font-family:var(--mono);font-size:19px;font-weight:700;color:var(--steel)}.aff-meta{color:var(--muted);font-size:13.5px;flex:1 1}.badge{background:var(--steel);color:#fff;border-radius:20px;padding:3px 11px;font-size:12px;font-weight:600}.badge.warn{background:var(--amber);color:#241503}.aff-actions{display:flex;gap:6px}.caisses{padding:6px 18px 16px}table.caisses-t{width:100%;border-collapse:collapse}table.caisses-t th{text-align:left;font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--muted);padding:8px 10px;border-bottom:2px solid var(--line-soft)}table.caisses-t td{padding:11px 10px;border-bottom:1px solid var(--line-soft);vertical-align:top}table.caisses-t tr:last-child td{border-bottom:none}.code-cell{font-family:var(--mono);font-weight:700;color:var(--steel)}.loc-cell{display:inline-flex;align-items:center;gap:7px;background:#fdf3e6;border:1px solid #f0d3a8;color:#8a5410;border-radius:7px;padding:5px 10px;font-weight:600;font-size:13.5px}.loc-cell:before{content:"";width:9px;height:9px;border-radius:2px;background:var(--amber)}.content-cell{color:#2a3746}.row-actions{white-space:nowrap;text-align:right}.mini{border:1px solid var(--line);background:#fff;border-radius:6px;padding:5px 8px;font-size:12px;color:var(--steel)}.mini:hover{background:#f2f6f9}.mini.solo{margin-left:4px}tr.caisse-row{cursor:pointer;transition:background .12s}tr.caisse-row:hover td{background:#fdf6ec}.locate-box{background:linear-gradient(135deg,var(--steel),var(--steel-2));color:#fff;border-radius:11px;padding:18px 20px;margin-bottom:18px;border-left:6px solid var(--amber)}.locate-label{font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--amber);margin-bottom:6px;font-weight:700}.locate-loc{font-size:24px;font-weight:700;line-height:1.25}.locate-grid{display:flex;flex-direction:column;gap:2px}.locate-val{color:var(--ink);font-size:15px;font-weight:600}.locate-photo{width:100%;max-height:320px;object-fit:contain;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:zoom-in;display:block}.empty{padding:60px 20px;text-align:center;color:var(--muted)}.empty .big{font-size:17px;color:var(--steel);font-weight:600;margin-bottom:6px}.overlay{position:fixed;inset:0;background:rgba(15,23,32,.55);display:none;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto;z-index:50}.overlay.on{display:flex}.modal{background:#fff;border-radius:13px;max-width:640px;width:100%;box-shadow:0 20px 60px rgba(0,0,0,.3);overflow:hidden}.modal-head{background:var(--steel);color:#fff;padding:15px 20px;font-size:17px;font-weight:600;display:flex;align-items:center;justify-content:space-between}.modal-head .x{background:none;border:none;color:#9fb0c0;font-size:22px;line-height:1;cursor:pointer}.modal-body{padding:20px}.fld{margin-bottom:15px}.fld label{display:block;font-size:12px;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);margin-bottom:5px;font-weight:600}.fld input,.fld textarea{width:100%;padding:11px 13px;border:1px solid var(--line);border-radius:8px}.fld input:focus,.fld textarea:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 3px rgba(232,145,45,.15)}.fld textarea{resize:vertical;min-height:66px}.fld .with-btn{display:flex;gap:8px}.fld .with-btn input{flex:1 1}.caisse-block{border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:12px;background:#fbfcfd;position:relative}.caisse-block h4{margin:0 0 10px;font-size:13px;color:var(--steel)}.caisse-block .rm{position:absolute;top:10px;right:10px}.modal-foot{padding:15px 20px;border-top:1px solid var(--line-soft);display:flex;gap:10px;justify-content:flex-end;background:#fafbfc}.loc-inline{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.loc-inline .loc-tag{font-size:13.5px;color:var(--steel);font-weight:600;white-space:nowrap}.loc-inline input{width:84px;padding:9px 10px;border:1px solid var(--line);border-radius:7px;text-align:center}.loc-inline input:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 3px rgba(232,145,45,.15)}.tag-checks{display:flex;flex-wrap:wrap;gap:8px 14px;margin-bottom:8px}.tag-check{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:#2a3746;background:#fff;border:1px solid var(--line);border-radius:7px;padding:7px 11px;cursor:pointer}.tag-check:hover{border-color:#9fb0c0}.tag-check input{margin:0;cursor:pointer}.autre-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.autre-row input[type=text]{width:auto;flex:1 1;min-width:140px;padding:9px 11px;border:1px solid var(--line);border-radius:7px}.tag-manage-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-soft)}.tag-manage-row:last-child{border-bottom:none}.tag-manage-row span{flex:1 1;font-weight:600;color:var(--steel)}.photo-slot{display:flex;align-items:center;gap:12px}.photo-btns{display:flex;flex-direction:column;gap:6px}.qr-steps{text-align:left;margin:0 0 14px;padding-left:20px;color:var(--steel);font-size:13.5px}.qr-steps li{margin-bottom:3px}.qr-img{width:220px;height:220px;border:1px solid var(--line);border-radius:10px;padding:6px;background:#fff}.qr-url{margin-top:10px;font-family:var(--mono);font-size:12px;color:var(--muted);word-break:break-all}.qr-note{margin-top:10px;font-size:13px;color:var(--steel)}.qr-warn{margin-top:12px;background:#fdf3e6;border:1px solid #f0d3a8;color:#8a5410;border-radius:8px;padding:10px 12px;font-size:13px;text-align:left;line-height:1.5}.qr-waiting{margin-top:14px;font-size:13px;color:var(--amber-dk);font-weight:600}.m-page{max-width:520px;margin:0 auto;padding:26px 20px;min-height:100vh;gap:18px}.m-logo,.m-page{display:flex;flex-direction:column;align-items:center}.m-logo{line-height:1;margin-top:10px}.m-logo b{font-size:24px;color:var(--steel);letter-spacing:.5px}.m-logo span{font-size:11px;color:var(--amber);letter-spacing:2px;text-transform:uppercase;margin-top:6px}.m-tip{color:var(--muted);text-align:center;font-size:15px;line-height:1.5}.m-btn{display:flex;align-items:center;justify-content:center;background:var(--amber);color:#241503;font-weight:700;font-size:19px;padding:22px 24px;border-radius:14px;width:100%;cursor:pointer;box-shadow:0 6px 18px rgba(232,145,45,.35)}.m-btn-off{opacity:.6;pointer-events:none}.m-done{background:#e9f7ef;border:1px solid #b6e3c8;color:#1e7a45;border-radius:12px;padding:22px;font-size:17px;font-weight:600;line-height:1.5}.m-done,.m-err{text-align:center}.m-err{color:var(--red);font-size:14px}.photo-preview{width:82px;height:82px;border:1px dashed var(--line);border-radius:8px;background:#fff;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:11px;text-align:center;padding:4px;flex:0 0 auto}.photo-preview.has-img{border-style:solid;border-color:var(--amber);padding:0}.photo-preview img{width:100%;height:100%;object-fit:cover;cursor:zoom-in;display:block}.photo-preview .rm-photo{position:absolute;top:3px;right:3px;background:rgba(0,0,0,.65);color:#fff;border:none;width:22px;height:22px;border-radius:50%;font-size:15px;line-height:1;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.photo-preview .rm-photo:hover{background:var(--red)}.photo-thumb{display:inline-block;width:34px;height:34px;border-radius:6px;overflow:hidden;vertical-align:middle;margin-left:8px;border:1px solid var(--line);cursor:zoom-in;background:#f0f0f0}.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block}.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.88);display:none;align-items:center;justify-content:center;z-index:100;padding:24px;cursor:zoom-out}.lightbox.on{display:flex}.lightbox img{max-width:100%;max-height:100%;border-radius:6px;box-shadow:0 20px 60px rgba(0,0,0,.5)}.scan-overlay{position:fixed;inset:0;background:rgba(9,14,20,.9);display:flex;align-items:center;justify-content:center;padding:16px;z-index:150}.scan-modal{background:#fff;border-radius:13px;max-width:460px;width:100%;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5)}.scan-modal-head{background:var(--steel);color:#fff;padding:14px 18px;font-size:16px;font-weight:600;display:flex;align-items:center;justify-content:space-between}.scan-modal-head .x{background:none;border:none;color:#9fb0c0;font-size:22px;line-height:1;cursor:pointer}.scan-video-wrap{position:relative;background:#000;aspect-ratio:4/3;display:flex;align-items:center;justify-content:center;overflow:hidden}.scan-video{width:100%;height:100%;object-fit:cover;display:block}.scan-reticle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:78%;height:38%;border:3px solid var(--amber);border-radius:12px;box-shadow:0 0 0 2000px rgba(0,0,0,.28)}.scan-tip{padding:14px 18px;color:var(--steel)}.scan-error,.scan-tip{font-size:14px;text-align:center}.scan-error{padding:16px 18px;color:var(--red);line-height:1.5}.scan-modal-foot{padding:12px 18px;border-top:1px solid var(--line-soft);display:flex;justify-content:flex-end;background:#fafbfc}.label-sheet{display:none}.flash{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--steel);color:#fff;padding:12px 20px;border-radius:9px;box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:80;opacity:0;transition:opacity .25s;border-left:4px solid var(--amber);max-width:90vw}.flash.on{opacity:1}.flash.ok{border-left-color:var(--green)}.flash.err{border-left-color:var(--red)}.foot{max-width:1180px;margin:10px auto 40px;padding:0 22px;color:var(--muted);font-size:12.5px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}@media(max-width:640px){.top-in{flex-wrap:wrap}.scan-hint,table.caisses-t thead{display:none}table.caisses-t td{display:block;border:none;padding:4px 0}.caisse-block{padding:12px}}@media print{body *{visibility:hidden}.label-sheet,.label-sheet *{visibility:visible}.label-sheet{display:block;position:absolute;left:0;top:0;width:100%}.lbl{page-break-after:always;width:90mm;padding:6mm;border:1.5pt solid #000;margin:0 auto 4mm}.lbl .lbl-no{font-family:var(--mono);font-size:22pt;font-weight:800;letter-spacing:1px}.lbl .lbl-aff{font-size:13pt;font-weight:700;margin-top:2mm}.lbl .lbl-loc{font-size:12pt;margin-top:1mm}.lbl .lbl-meta{font-size:9pt;color:#333;margin-top:1mm}.lbl svg{display:block;margin:3mm auto 0}.lbl .lbl-brand{font-size:8pt;letter-spacing:2px;text-transform:uppercase;border-top:1pt solid #000;margin-top:3mm;padding-top:1.5mm;text-align:center}}