:root{--ink: #15213b;--ink-2: #1e2d4d;--ink-3: #2c3d63;--ink-text: #c9d3e6;--cyan: #0086a3;--cyan-600: #006f88;--cyan-50: #e6f5f8;--magenta: #c21f6a;--yellow: #e0b000;--bg: #f3f5f8;--surface: #ffffff;--surface-2: #f8f9fb;--line: #dde2ea;--line-strong: #c3cad6;--text: #17202f;--text-2: #4b5567;--text-3: #7b8597;--green: #17803d;--green-bg: #e7f5ec;--orange: #b85c00;--orange-bg: #fdf0e1;--red: #c42323;--red-bg: #fdeaea;--none-bg: #f1f3f6;--focus: 0 0 0 3px rgba(0, 134, 163, .28);--radius: 6px;--radius-sm: 4px;--font: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;--mono: "Cascadia Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace;--shadow-pop: 0 10px 30px rgba(21, 33, 59, .18), 0 2px 6px rgba(21, 33, 59, .08);color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font:14px/1.45 var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}a{color:var(--cyan-600);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em}h1{font-size:22px}h2{font-size:17px}h3{font-size:15px}p{margin:0}code,.mono{font-family:var(--mono);font-size:12.5px}.num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.muted{color:var(--text-3)}.small{font-size:12.5px}.nowrap{white-space:nowrap}.row{display:flex;gap:10px;align-items:center}.row.wrap{flex-wrap:wrap}.row.end{justify-content:flex-end}.row.between{justify-content:space-between}.stack{display:flex;flex-direction:column;gap:12px}.grow{flex:1;min-width:0}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}@media(max-width:1100px){.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:1fr 1fr}}@media(max-width:760px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.shell{display:grid;grid-template-columns:232px 1fr;height:100%}.sidebar{background:var(--ink);color:var(--ink-text);display:flex;flex-direction:column;min-height:0;border-right:1px solid #0c1428}.brand-logo{display:block;flex:none;object-fit:contain}.brand{display:flex;align-items:center;gap:10px;padding:16px 18px 14px;color:#fff}.brand-name{font-weight:700;letter-spacing:.04em;font-size:15px;line-height:1.1}.brand-name small{display:block;font-weight:500;letter-spacing:0;color:#8fa0c3;font-size:11.5px}.nav{padding:6px 10px 16px;overflow-y:auto;flex:1}.nav-group{margin-top:14px}.nav-group>div{padding:0 10px 4px;color:#7f8fb2;font-size:11.5px;font-weight:600}.nav a{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:var(--radius);color:var(--ink-text);font-size:13.5px}.nav a:hover{background:var(--ink-2);color:#fff;text-decoration:none}.nav a.active{background:var(--ink-3);color:#fff;box-shadow:inset 3px 0 0 var(--cyan)}.nav a .count{margin-left:auto;background:var(--red);color:#fff;font-size:11px;font-weight:700;border-radius:9px;padding:0 6px;min-width:18px;text-align:center;line-height:18px}.nav svg{width:17px;height:17px;flex:none;opacity:.85}.sidebar-foot{padding:12px 18px;border-top:1px solid #0c1428;font-size:12.5px}.sidebar-foot b{color:#fff;font-weight:600}.main{display:flex;flex-direction:column;min-width:0;min-height:0}.topbar{height:56px;display:flex;align-items:center;gap:12px;padding:0 20px;background:var(--surface);border-bottom:1px solid var(--line);flex:none;position:relative;z-index:20}.content{flex:1;overflow-y:auto;padding:20px 24px 40px}.page-head{display:flex;align-items:flex-end;gap:16px;margin-bottom:16px;flex-wrap:wrap}.page-head h1{flex:1;min-width:200px}.page-head .sub{color:var(--text-3);font-size:13px;margin-top:2px}.btn.burger{display:none}@media(max-width:900px){.shell{grid-template-columns:1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:250px;z-index:50;transform:translate(-100%);transition:transform .18s ease}.sidebar.open{transform:none}.btn.burger{display:inline-flex}.content{padding:16px}}.search{position:relative;flex:1;max-width:560px}.search input{padding-left:34px;height:36px;background:var(--surface-2)}.search svg{position:absolute;left:10px;top:10px;width:16px;height:16px;color:var(--text-3)}.search-pop{position:absolute;top:42px;left:0;right:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-pop);max-height:70vh;overflow-y:auto;padding:6px}.search-item{display:flex;gap:10px;align-items:center;padding:7px 8px;border-radius:var(--radius-sm);cursor:pointer}.search-item:hover,.search-item.sel{background:var(--cyan-50)}.search-item img,.thumb{width:34px;height:34px;object-fit:cover;border-radius:4px;background:var(--none-bg);border:1px solid var(--line);flex:none}.thumb.lg{width:72px;height:72px}.thumb-ph{display:grid;place-items:center;color:var(--text-3);font-size:11px;font-weight:600}.search-sec{font-size:11.5px;color:var(--text-3);font-weight:600;padding:8px 8px 4px}input,select,textarea{font:inherit;color:inherit;width:100%;padding:7px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);min-height:34px}textarea{min-height:72px;resize:vertical}input:focus,select:focus,textarea:focus,button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:none;box-shadow:var(--focus);border-color:var(--cyan)}input[type=checkbox]{width:16px;height:16px;min-height:0;accent-color:var(--cyan)}label.field{display:flex;flex-direction:column;gap:4px;font-size:12.5px;color:var(--text-2);font-weight:550}label.field>span.hint{font-weight:400;color:var(--text-3)}label.field input,label.field select,label.field textarea{font-weight:400;color:var(--text)}label.check{display:inline-flex;gap:8px;align-items:center;font-size:13.5px;cursor:pointer}.field-err{color:var(--red);font-size:12px;font-weight:500}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:34px;padding:0 14px;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);color:var(--text);font:550 13.5px var(--font);cursor:pointer;white-space:nowrap;text-decoration:none!important}.btn:hover{background:var(--surface-2);border-color:#aab3c2}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--cyan);border-color:var(--cyan);color:#fff}.btn.primary:hover{background:var(--cyan-600);border-color:var(--cyan-600)}.btn.danger{color:var(--red);border-color:#e7b3b3}.btn.danger:hover{background:var(--red-bg)}.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover{background:var(--surface-2)}.btn.sm{height:28px;padding:0 10px;font-size:12.5px}.btn.icon{width:34px;padding:0}.btn svg{width:16px;height:16px}@media(pointer:coarse){.btn{height:40px}.btn.sm{height:34px}input,select{min-height:40px}}.seg{display:inline-flex;align-self:flex-start;max-width:100%;overflow-x:auto;border:1px solid var(--line-strong);border-radius:var(--radius);overflow:hidden;background:var(--surface)}.seg button{border:0;background:transparent;padding:0 12px;height:32px;font:550 13px var(--font);color:var(--text-2);cursor:pointer;border-right:1px solid var(--line)}.seg button:last-child{border-right:0}.seg button.on{background:var(--ink);color:#fff}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.panel-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line)}.panel-head h2,.panel-head h3{flex:1}.panel-body{padding:16px}.panel-body.tight{padding:0}.kpi{padding:14px 16px}.kpi .v{font-size:26px;font-weight:650;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.kpi .l{color:var(--text-2);font-size:13px}.kpi.alert .v{color:var(--red)}.kpi.warn .v{color:var(--orange)}.kpi a{color:inherit}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}.tabs button{border:0;background:none;padding:9px 14px;font:550 13.5px var(--font);color:var(--text-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}.tabs button:hover{color:var(--text)}.tabs button.on{color:var(--ink);border-bottom-color:var(--cyan)}.tabs .badge{margin-left:6px}.table-wrap{overflow-x:auto}table.t{width:100%;border-collapse:collapse;font-size:13.5px}table.t th{text-align:left;font-weight:600;color:var(--text-2);font-size:12.5px;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--surface-2);white-space:nowrap;position:sticky;top:0}table.t td{padding:8px 12px;border-bottom:1px solid #edf0f4;vertical-align:middle}table.t tr:last-child td{border-bottom:0}table.t tr.click{cursor:pointer}table.t tr.click:hover td{background:#f6fafc}table.t th.num,table.t td.num{text-align:right}table.t tfoot td{font-weight:650;background:var(--surface-2);border-top:1px solid var(--line)}table.t input{min-height:30px;padding:4px 8px}.badge{display:inline-flex;align-items:center;gap:5px;padding:1px 8px;border-radius:10px;font-size:12px;font-weight:600;background:var(--none-bg);color:var(--text-2);white-space:nowrap;line-height:20px}.badge.green{background:var(--green-bg);color:var(--green)}.badge.orange{background:var(--orange-bg);color:var(--orange)}.badge.red{background:var(--red-bg);color:var(--red)}.badge.blue{background:var(--cyan-50);color:var(--cyan-600)}.badge.ink{background:var(--ink);color:#fff}.dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none}.dot.green{background:var(--green)}.dot.orange{background:#e08a00}.dot.red{background:var(--red)}.dot.none{background:#b7bfcc}.qty-neg{color:var(--red)}.qty-pos{color:var(--green)}.matrix-tools{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:12px}.matrix-scroll{overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);max-width:100%;width:fit-content}table.matrix{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums}table.matrix th,table.matrix td{border-right:1px solid var(--line);border-bottom:1px solid var(--line)}table.matrix thead th{position:sticky;top:0;z-index:2;background:var(--surface-2);padding:8px 10px;font-size:12.5px;font-weight:600;min-width:84px;text-align:center;vertical-align:bottom}table.matrix thead th.corner{left:0;z-index:3;text-align:left;color:var(--text-3);font-weight:550;min-width:90px}table.matrix tbody th{position:sticky;left:0;z-index:1;background:var(--surface-2);text-align:left;padding:0 12px;font-weight:650;font-size:13.5px;white-space:nowrap}.swatch-head{display:flex;flex-direction:column;align-items:center;gap:5px}.swatch{display:inline-block;vertical-align:middle;width:22px;height:22px;border-radius:50%;border:1px solid rgba(0,0,0,.18);flex:none;box-shadow:inset 0 0 0 2px #ffffff59}.swatch.sm{width:14px;height:14px}.swatch.none{background:repeating-linear-gradient(45deg,#fff 0,#fff 3px,#dfe3ea 3px,#dfe3ea 6px)}table.matrix td.cell{padding:0;height:44px;min-width:84px;position:relative;background:var(--surface)}table.matrix td.cell.na{background:repeating-linear-gradient(135deg,#f7f8fa 0,#f7f8fa 6px,#eef1f5 6px,#eef1f5 12px)}.mcell{width:100%;height:100%;min-height:44px;display:flex;flex-direction:column;align-items:flex-end;justify-content:center;padding:3px 10px;cursor:pointer;border:0;background:transparent;font:inherit;color:inherit;text-align:right}.mcell:hover{background:#f1f8fb}.mcell .big{font-size:16px;font-weight:650;line-height:1.1}.mcell .sub{font-size:11px;color:var(--text-3);line-height:1.2}td.cell.st-green{box-shadow:inset 3px 0 0 var(--green)}td.cell.st-orange{box-shadow:inset 3px 0 #e08a00;background:#fffaf2}td.cell.st-red{box-shadow:inset 3px 0 0 var(--red);background:#fff6f6}td.cell.st-none .big{color:#9aa3b2}td.cell.sel{outline:2px solid var(--cyan);outline-offset:-2px}.minput{width:92px;height:44px;border:0;border-radius:0;text-align:right;padding:0 10px;font-size:15px;font-weight:600;background:transparent;font-variant-numeric:tabular-nums;min-height:0}.minput:disabled{background:repeating-linear-gradient(135deg,#f7f8fa 0,#f7f8fa 6px,#eef1f5 6px,#eef1f5 12px);cursor:not-allowed}.minput:focus{box-shadow:inset 0 0 0 2px var(--cyan);background:#f0fafc}td.cell.changed{background:#fff9db}td.cell.changed .minput{color:#7a5200}td.cell .hint{position:absolute;left:6px;top:3px;font-size:10.5px;color:var(--text-3);pointer-events:none}table.matrix .tot{background:var(--surface-2);font-weight:650;text-align:right;padding:0 10px;font-size:13.5px}table.matrix tfoot th{position:sticky;left:0;background:var(--surface-2);text-align:left;padding:8px 12px}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--text-2)}.legend span{display:inline-flex;gap:6px;align-items:center}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a61;z-index:80;display:flex}.drawer{margin-left:auto;width:min(560px,100%);height:100%;background:var(--surface);box-shadow:var(--shadow-pop);display:flex;flex-direction:column;animation:slidein .16s ease-out}.drawer-head{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;gap:12px;align-items:flex-start}.drawer-body{padding:16px 20px 28px;overflow-y:auto;flex:1}.modal{margin:auto;width:min(640px,calc(100% - 24px));max-height:calc(100% - 40px);background:var(--surface);border-radius:8px;box-shadow:var(--shadow-pop);display:flex;flex-direction:column;animation:pop .14s ease-out}.modal.wide{width:min(1000px,calc(100% - 24px))}.modal-head{padding:14px 18px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}.modal-head h2{flex:1}.modal-body{padding:16px 18px;overflow-y:auto}.modal-foot{padding:12px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}@keyframes slidein{0%{transform:translate(24px);opacity:.6}}@keyframes pop{0%{transform:scale(.98);opacity:.6}}@media(prefers-reduced-motion:reduce){.drawer,.modal{animation:none}.sidebar{transition:none}}.stat-row{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.stat-row>div{padding:10px 12px;border-right:1px solid var(--line)}.stat-row>div:last-child{border-right:0}.stat-row .v{font-size:20px;font-weight:650;font-variant-numeric:tabular-nums}.stat-row .l{font-size:12px;color:var(--text-2)}dl.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0;font-size:13.5px}dl.kv dt{color:var(--text-3)}dl.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.toasts{position:fixed;bottom:18px;right:18px;z-index:100;display:flex;flex-direction:column;gap:8px}.toast{background:var(--ink);color:#fff;padding:10px 14px;border-radius:var(--radius);box-shadow:var(--shadow-pop);font-size:13.5px;max-width:420px;border-left:4px solid var(--cyan)}.toast.error{border-left-color:#ff6b6b}.toast.warn{border-left-color:var(--yellow)}.alert{padding:10px 14px;border-radius:var(--radius);font-size:13.5px;border:1px solid}.alert.error{background:var(--red-bg);border-color:#f1c0c0;color:#8f1919}.alert.info{background:var(--cyan-50);border-color:#b4e0ea;color:#0b5566}.alert.warn{background:var(--orange-bg);border-color:#f2cfa3;color:#7a3e00}.empty{text-align:center;padding:40px 20px;color:var(--text-2)}.empty h3{margin-bottom:6px;color:var(--text)}.spinner{width:18px;height:18px;border:2px solid var(--line);border-top-color:var(--cyan);border-radius:50%;animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.loading{display:flex;gap:10px;align-items:center;color:var(--text-3);padding:24px}.login{min-height:100%;display:grid;grid-template-columns:1.1fr 1fr}.login-art{background:var(--ink);color:#fff;padding:48px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.login-art h1{font-size:34px;letter-spacing:.06em}.login-art p{color:var(--ink-text);max-width:380px;margin-top:10px}.login-watermark{position:absolute;right:-70px;bottom:-70px;width:360px;height:360px;opacity:.08;z-index:0}.login-art>:not(.login-watermark){position:relative;z-index:1}.login-form{display:grid;place-items:center;padding:32px}.login-form form{width:min(360px,100%);display:flex;flex-direction:column;gap:14px}@media(max-width:800px){.login{grid-template-columns:1fr}.login-art{min-height:200px;padding:28px;gap:16px}.login-art h1{font-size:24px}.login-watermark{width:180px;height:180px;right:-40px;bottom:-40px}}.scanbox{font-size:17px;height:52px;font-family:var(--mono);letter-spacing:.04em}.bar{height:8px;background:var(--none-bg);border-radius:4px;overflow:hidden}.bar>span{display:block;height:100%;background:var(--cyan)}.hr{height:1px;background:var(--line);margin:14px 0}.kbd{font:11.5px var(--mono);border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:4px;padding:0 5px;color:var(--text-2);background:var(--surface)}.pagination{display:flex;gap:8px;align-items:center;justify-content:flex-end;padding:10px 12px}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border:1px solid var(--line-strong);border-radius:14px;font-size:13px;cursor:pointer;background:var(--surface);-webkit-user-select:none;user-select:none}.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}.tree-indent{display:inline-block}@media(max-width:760px){.hide-sm{display:none!important}.stat-row{grid-template-columns:1fr 1fr}}.sticky-actions{position:sticky;bottom:0;z-index:6;background:var(--bg);padding:10px 0;display:flex;gap:10px;justify-content:flex-end;border-top:1px solid var(--line)}@media print{.sidebar,.topbar,.page-head .btn,.page-head a.btn,.sticky-actions,.toasts{display:none!important}.shell{display:block}.content{overflow:visible;padding:0}body{background:#fff}.panel{border-color:#ccc;break-inside:avoid}}.camera-box{position:relative;width:100%;background:#0b1220;border-radius:var(--radius);overflow:hidden}.camera-box video{width:100%;height:100%;object-fit:cover;display:block}.camera-frame{position:absolute;left:12%;right:12%;top:28%;bottom:28%;border:3px solid rgba(255,255,255,.9);border-radius:10px;box-shadow:0 0 0 9999px #00000047;pointer-events:none}.camera-frame.paused{border-color:var(--yellow)}.camera-msg{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:20px;color:#fff;text-align:center;font-size:14px}.camera-msg.error{background:#3a1212}.qr-box{width:220px;height:220px;display:grid;place-items:center;border:1px solid var(--line);border-radius:var(--radius);background:#fff;padding:8px;flex:none}.qr-box img{width:100%;height:100%;image-rendering:pixelated}.btn.remote-on{border-color:#9fd3b0;background:var(--green-bg);color:var(--green)}.btn.remote-wait{border-color:#f2cfa3;background:var(--orange-bg);color:var(--orange)}.pair{min-height:100%;background:var(--bg)}.pair-head{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--ink);color:#fff;position:sticky;top:0;z-index:5}.pair-main{padding:14px 16px 40px;display:flex;flex-direction:column;gap:12px;max-width:560px;margin:0 auto}.pair-start{height:56px;font-size:17px;width:100%}.pair-last{border-radius:var(--radius);padding:12px 14px;border:1px solid}.pair-last.ok{background:var(--green-bg);border-color:#9fd3b0;color:#0f5a2a}.pair-last.warn{background:var(--orange-bg);border-color:#f2cfa3;color:#7a3e00}.pair-last-label{font-size:18px;font-weight:650;margin:2px 0}input.scan-filled,textarea.scan-filled{background:#e6f7ec;border-color:var(--green);transition:background .2s}.img-drop{display:flex;flex-direction:column;gap:8px;padding:14px;border:2px dashed var(--line-strong);border-radius:10px;background:var(--surface-2);transition:border-color .15s,background .15s}.img-drop.over{border-color:var(--cyan-600);background:var(--cyan-50)}.img-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}.img-card{overflow:hidden}.img-card.primary{outline:2px solid var(--cyan-600);outline-offset:-1px}.img-card img{display:block;width:100%;aspect-ratio:1;object-fit:contain;background:var(--surface-2)}.img-card select{width:100%}.img-group-title{gap:8px;font-size:14px;margin:6px 0 0}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}select.sm{padding:4px 8px;font-size:12.5px;min-height:30px}.mx-img{width:40px;height:40px;object-fit:cover;border-radius:6px;background:var(--none-bg);display:block}.mx-img.sm{width:28px;height:28px;margin:0}@media(hover:hover)and (pointer:fine){.only-touch{display:none!important}}
