:root{--bg:#f4f5f6;--surface:#fff;--surface-sub:#edeef0;--surface-hover:#e6e8ea;--border:#dde0e3;--border-strong:#c6cbd1;--text:#16181b;--text-muted:#5b6472;--text-faint:#9aa1aa;--text-inverse:#fff;--accent:#1b4dff;--accent-hover:#153fcb;--accent-ink:#fff;--accent-soft:#e8edff;--ok:#15803d;--ok-soft:#e7f5ec;--warn:#b45309;--warn-soft:#fdf3e3;--bad:#b91c1c;--bad-soft:#fbeaea;--info:#1b4dff;--info-soft:#e8edff;--q-high:#15803d;--q-mid:#b45309;--q-low:#5b6472;--radius-sm:8px;--radius:12px;--radius-lg:16px;--radius-pill:999px;--shadow-1:0 1px 2px rgba(22,24,27,.06);--shadow-2:0 4px 16px rgba(22,24,27,.08);--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--s8:64px}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);font:15px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;margin:0}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover);text-decoration:underline}h1{font-size:28px;line-height:1.2;margin:0 0 var(--s4)}h1,h2{font-weight:600}h2{font-size:20px;line-height:1.3;margin:0 0 var(--s3)}h3{font-size:16px;font-weight:600;line-height:1.4;margin:0 0 var(--s2)}.container{margin:0 auto;max-width:1160px;padding:var(--s5) 32px var(--s7)}.muted{color:var(--text-muted)}.faint{color:var(--text-faint)}.small{font-size:13px;line-height:1.45}.caption{color:var(--text-muted);font-size:12px;line-height:1.4}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;letter-spacing:.04em;word-break:break-word}.mono,.num{font-variant-numeric:tabular-nums}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--s4)}.card+.card{margin-top:var(--s4)}.grid{display:grid;gap:var(--s4)}.grid-4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.grid-2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.row{flex-wrap:wrap}.row,.spread{align-items:center;display:flex;gap:var(--s3)}.spread{justify-content:space-between}.stack{display:grid;gap:var(--s3)}.toolbar{align-items:flex-end;display:flex;flex-wrap:wrap;gap:var(--s3);margin:var(--s3) 0 var(--s4)}.section{margin-top:var(--s5)}.stat-value{font-size:24px;font-variant-numeric:tabular-nums;font-weight:600;line-height:1.2;margin:var(--s1) 0 0}label{color:var(--text-muted);display:block;font-size:12px;margin-bottom:var(--s1)}input,select,textarea{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:inherit;padding:8px 10px;width:100%}input:hover,select:hover,textarea:hover{border-color:var(--border-strong)}input:disabled,select:disabled,textarea:disabled{background:var(--surface-sub);color:var(--text-muted)}textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;min-height:96px}.field{min-width:160px}.field-wide{flex:1 1 280px;min-width:280px}.checkbox{align-items:center;color:var(--text);display:inline-flex;font-size:15px;gap:var(--s2)}.checkbox input{width:auto}.hint{color:var(--text-muted)}.error-text,.hint{font-size:12px;margin-top:var(--s1)}.error-text{color:var(--bad)}.btn,button{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text);cursor:pointer;font:inherit;font-weight:600;padding:8px 12px}.btn:hover,button:hover:not(:disabled){background:var(--surface-sub);color:var(--text);text-decoration:none}button:disabled{cursor:not-allowed;opacity:.5}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-primary:hover:not(:disabled){background:var(--accent-hover);color:var(--accent-ink)}.btn-danger{background:var(--surface);border-color:var(--bad);color:var(--bad)}.btn-danger:hover:not(:disabled){background:var(--bad-soft);color:var(--bad)}.btn-quiet{background:transparent;border-color:transparent;color:var(--accent)}.btn-sm{font-size:13px;padding:5px 9px}.table-wrap{overflow-x:auto;width:100%}table{background:var(--surface);border-collapse:collapse;width:100%}caption{color:var(--text-muted);font-size:12px;padding:0 0 var(--s2)}caption,td,th{text-align:left}td,th{border-bottom:1px solid var(--border);font-size:13px;line-height:1.45;padding:var(--s2) var(--s3);vertical-align:top}th{background:var(--surface-sub);color:var(--text-muted);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}tbody tr:hover{background:var(--surface-hover)}td.actions{white-space:nowrap}td.actions .btn+.btn{margin-left:var(--s1)}.badge{align-items:center;background:var(--surface-sub);border:1px solid var(--border-strong);border-radius:var(--radius-pill);color:var(--text-muted);display:inline-flex;font-size:11px;gap:var(--s1);line-height:1.6;padding:2px 8px;white-space:nowrap}.badge-ok{background:var(--ok-soft);border-color:var(--ok);color:var(--ok)}.badge-warn{background:var(--warn-soft);border-color:var(--warn);color:var(--warn)}.badge-bad{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}.badge-info{background:var(--info-soft);border-color:var(--info);color:var(--info)}.alert{background:var(--surface-sub);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:13px;padding:10px 12px}.alert+.alert{margin-top:var(--s2)}.alert-error{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}.alert-ok{background:var(--ok-soft);border-color:var(--ok);color:var(--ok)}.alert-warn{background:var(--warn-soft);border-color:var(--warn);color:var(--warn)}.nav{border-bottom:1px solid var(--border);display:flex;flex-wrap:wrap;gap:var(--s1);margin:var(--s3) 0 var(--s5);padding-bottom:var(--s2)}.nav a{border-radius:var(--radius-sm);color:var(--text-muted);font-size:13px;font-weight:500;padding:6px 10px}.nav a.active{background:var(--accent-soft);color:var(--accent)}.nav a:hover{color:var(--text);text-decoration:none}.nav a:hover,.progress{background:var(--surface-sub)}.progress{border-radius:var(--radius-pill);height:8px;overflow:hidden}.progress-bar{background:var(--accent);height:100%;transition:width .3s ease}.progress-bar.is-done{background:var(--ok)}.progress-bar.is-failed{background:var(--bad)}.progress-bar.is-indeterminate{animation:progress-sweep 1.4s ease-in-out infinite;width:40%!important}@keyframes progress-sweep{0%{transform:translate(-110%)}to{transform:translate(260%)}}@media(prefers-reduced-motion:reduce){.progress-bar.is-indeterminate{animation:none;opacity:.45;width:100%!important}}.pager{align-items:center;display:flex;gap:var(--s3);margin-top:var(--s3)}.pager .spacer{flex:1}.modal-backdrop{background:#16181b73;display:grid;inset:0;padding:var(--s4);place-items:center;position:fixed;z-index:50}.modal{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-2);max-height:90vh;overflow:auto;padding:var(--s5);width:min(560px,100%)}.modal-wide{width:min(900px,100%)}.modal h2{margin-top:0}.modal-actions{display:flex;gap:var(--s3);justify-content:flex-end;margin-top:var(--s5)}.empty{color:var(--text-muted);padding:var(--s6) var(--s4);text-align:center}.skeleton{animation:skeleton 1.2s ease-in-out infinite;background:linear-gradient(90deg,var(--surface-sub),var(--surface-hover),var(--surface-sub));background-size:200% 100%;border-radius:var(--radius-sm);height:14px}@keyframes skeleton{0%{background-position:200% 0}to{background-position:-200% 0}}.toast{background:var(--text);border-radius:var(--radius);bottom:var(--s5);box-shadow:var(--shadow-2);color:var(--text-inverse);font-size:13px;max-width:420px;padding:10px 14px;position:fixed;right:var(--s5);z-index:60}.auth-wrap{display:grid;min-height:100vh;padding:var(--s5);place-items:center}.auth-card{width:min(400px,100%)}.barcode{cursor:pointer;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums;font-weight:500;letter-spacing:.04em}.btn-link{background:none;border:0;color:var(--accent);font-weight:500;padding:0}
