:root{--bg:#f4f6f9;--panel:#fff;--panel-2:#f8fafc;--overlay:#0f172a73;--line:#eef0f3;--line-strong:#cbd5e1;--line-soft:#e5e9f0;--ink:#1f2937;--ink-2:#475569;--muted:#64748b;--faint:#94a3b8;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-soft:#eff6ff;--accent-softer:#dbeafe;--accent-ring:#2563eb2e;--success:#16a34a;--success-soft:#dcfce7;--success-ink:#15803d;--warning:#d97706;--warning-soft:#fef3c7;--warning-ink:#b45309;--danger:#dc2626;--danger-hover:#b91c1c;--danger-soft:#fee2e2;--danger-ink:#b91c1c;--info:#0284c7;--info-soft:#e0f2fe;--info-ink:#0369a1;--pos:var(--success);--neg:var(--danger);--r-sm:6px;--r-md:8px;--r-lg:12px;--r-pill:999px;--shadow-sm:0 1px 2px #0f172a0f;--shadow-md:0 1px 3px #0f172a1a, 0 1px 2px #0f172a0f;--shadow-lg:0 12px 32px #0f172a29;--shadow-modal:0 20px 50px #0f172a40;--ctl-h:32px;--focus-ring:0 0 0 3px var(--accent-ring);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--font-sans:-apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--nav-bg:#111827;--nav-ink:#cbd5e1;--nav-faint:#94a3b8;--nav-hover:#1f2937;--nav-w:216px;--nav-w-collapsed:56px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);min-height:100vh;color:var(--ink);font:14px/1.5 var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;display:flex}:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:4px}header{width:var(--nav-w);background:var(--nav-bg);color:#fff;scrollbar-width:thin;flex-direction:column;flex:none;gap:3px;height:100vh;padding:14px 10px;transition:width .18s;display:flex;position:sticky;top:0;overflow-y:auto}header .nav-brand{align-items:center;gap:9px;padding:2px 4px;display:flex}header .nav-logo{background:linear-gradient(135deg, var(--accent), var(--info));color:#fff;letter-spacing:.02em;width:26px;height:26px;box-shadow:var(--shadow-sm);border-radius:7px;flex:none;justify-content:center;align-items:center;font-size:10.5px;font-weight:700;display:inline-flex}header .nav-brand b{letter-spacing:.01em;white-space:nowrap;font-size:14.5px;font-weight:650;overflow:hidden}header .nav-collapse{border-radius:var(--r-sm);width:24px;height:24px;color:var(--nav-faint);background:0 0;border:1px solid #2b3547;flex:none;justify-content:center;align-items:center;margin-left:auto;padding:0;display:inline-flex}header .nav-collapse:hover{background:var(--nav-hover);color:#fff;border-color:#3b4759}header .brand-sub{color:var(--nav-faint);margin:4px 4px 12px;font-size:11.5px;line-height:1.6}header .brand-sub .hot-on{color:#4ade80}header .brand-sub .hot-off{color:#facc15}.nav-list{flex-direction:column;gap:3px;display:flex}.tab{border-radius:var(--r-sm);color:var(--nav-ink);align-items:center;gap:9px;padding:7.5px 10px;font-size:13.5px;line-height:20px;text-decoration:none;transition:background .12s,color .12s;display:flex;position:relative}.tab .nav-icon{opacity:.85;flex:none}.tab .tab-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tab:hover{background:var(--nav-hover);color:#f1f5f9}.tab.on{color:#fff;background:#2563eb38;font-weight:600}.tab.on .nav-icon{opacity:1}.tab.on:before{content:"";background:var(--accent);border-radius:2px;width:3px;position:absolute;top:6px;bottom:6px;left:-10px}.tab-group{flex-direction:column;gap:3px;display:flex}header button.tab-parent{border-radius:var(--r-sm);width:100%;color:var(--nav-ink);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:9px;padding:7.5px 10px;font-size:13.5px;line-height:20px;transition:background .12s,color .12s;display:flex;position:relative}header button.tab-parent .nav-icon{opacity:.85;flex:none}header button.tab-parent .tab-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}header button.tab-parent:hover{background:var(--nav-hover);color:#f1f5f9}header button.tab-parent.has-on{color:#fff;font-weight:600}header button.tab-parent.has-on:before{content:"";background:var(--accent);opacity:.7;border-radius:2px;width:3px;position:absolute;top:7px;bottom:7px;left:-10px}header.collapsed button.tab-parent.has-on:before{left:-8px}.tab-parent .caret{color:var(--nav-faint);flex:none;transition:transform .16s;transform:rotate(-90deg)}.tab-parent[aria-expanded=true] .caret{transform:rotate(0)}.tab-children{border-left:1px solid #243044;flex-direction:column;gap:2px;margin-left:17px;padding-left:10px;display:flex}.tab.sub{padding:6px 10px;font-size:13px}.tab-children .tab.on:before{left:-10px}header.collapsed{width:var(--nav-w-collapsed);padding:14px 8px;overflow:visible}header.collapsed .brand-sub,header.collapsed .nav-user-name,header.collapsed .tab-label,header.collapsed .caret,header.collapsed .nav-brand b{display:none}header.collapsed .nav-brand{flex-direction:column;gap:8px}header.collapsed .nav-collapse{margin:0}header.collapsed .tab,header.collapsed button.tab-parent{justify-content:center;padding:9px 0}header.collapsed .tab.on:before{left:-8px}header.collapsed .tab-group{position:relative}header.collapsed .tab-children{border-radius:var(--r-md);box-shadow:var(--shadow-lg);z-index:60;background:#1b2432;border:none;min-width:148px;margin:0;padding:6px;display:none;position:absolute;top:-6px;left:calc(100% + 10px)}header.collapsed .tab-group:hover .tab-children,header.collapsed .tab-group:focus-within .tab-children{display:flex}header.collapsed .tab-children .tab.sub{white-space:nowrap}header.collapsed .tab-children .tab.on:before{left:-4px}main{flex:1;align-items:flex-start;gap:16px;min-width:0;padding:20px 24px;display:flex}.content{flex:1;min-width:0;max-width:1680px}.page-head{margin-bottom:var(--space-4)}.page-title{letter-spacing:.01em;margin:0;font-size:20px;font-weight:600}.page-desc{color:var(--muted);margin:2px 0 0;font-size:13px}.bar{gap:var(--space-2);row-gap:var(--space-2);margin-bottom:var(--space-4);flex-wrap:wrap;align-items:center;display:flex}.bar input[type=text],.bar input[type=date],.bar input[type=number],.bar select{height:var(--ctl-h);border:1px solid var(--line-strong);border-radius:var(--r-sm);font:inherit;color:var(--ink);background:#fff;padding:0 10px}.bar input:focus,.bar select:focus{border-color:var(--accent);box-shadow:var(--focus-ring);outline:none}.bar input[type=text]{width:260px}.ranges{align-items:center;gap:6px;display:flex}button{height:var(--ctl-h);border:1px solid var(--line-strong);border-radius:var(--r-sm);cursor:pointer;font:inherit;color:var(--ink);background:#fff;padding:0 12px;transition:background .12s,border-color .12s,color .12s}button:hover{background:#f1f5f9;border-color:#b6c2d2}button.btn-sm{height:26px;padding:0 8px;font-size:12px}button.icon-btn[aria-label]:empty{min-width:26px}.muted{color:var(--muted)}:where(input[type=text],input[type=number],input[type=email],input[type=password],input[type=search],input[type=date],input[type=url],input[type=tel],textarea,select):not(.edit):not(.cell-edit-input){height:var(--ctl-h);border:1px solid var(--line-strong);border-radius:var(--r-sm);color:var(--ink);font:inherit;background:#fff;padding:0 10px;transition:border-color .12s,box-shadow .12s,background .12s}:where(textarea):not(.edit){resize:vertical;height:auto;min-height:64px;padding:8px 10px}:where(input,textarea)::placeholder{color:var(--faint)}:where(input,textarea,select):not(.edit):not(.cell-edit-input):hover:not(:disabled):not(:focus){border-color:#b6c2d2}:where(input,textarea,select):not(.edit):not(.cell-edit-input):focus{border-color:var(--accent);box-shadow:var(--focus-ring);outline:none}:where(input,textarea,select):disabled{background:var(--panel-2);color:var(--muted);cursor:not-allowed}:where(input,textarea):read-only:not(:disabled){background:var(--panel-2)}:where(input.invalid,input[aria-invalid=true],select.invalid,textarea.invalid){border-color:var(--danger)}:where(input.invalid,input[aria-invalid=true],select.invalid,textarea.invalid):focus{border-color:var(--danger);box-shadow:0 0 0 3px #dc262626}.input-lg{border-radius:var(--r-md);height:40px;padding:0 12px;font-size:14px}:where(input[type=number]){appearance:textfield}:where(input[type=number])::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}:where(input[type=number])::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:where(select):not(.edit){appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%2364748b\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"/></svg>");background-position:right 9px center;background-repeat:no-repeat;background-size:12px;padding-right:28px}:where(select):not(.edit):disabled{cursor:not-allowed;background-image:url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%2394a3b8\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"/></svg>")}select.select-sm{height:28px;padding-top:0;padding-bottom:0;font-size:12px}:where(input[type=checkbox],input[type=radio]){accent-color:var(--accent);cursor:pointer;width:14px;height:14px}.ctl-wrap{align-items:center;display:inline-flex;position:relative}.ctl-wrap>input{width:100%}.ctl-wrap .ctl-icon{color:var(--faint);pointer-events:none;display:inline-flex;position:absolute;left:9px}.ctl-wrap.has-icon>input{padding-left:28px}.ctl-wrap .ctl-unit{color:var(--muted);pointer-events:none;font-size:12px;position:absolute;right:10px}.ctl-wrap.has-unit>input{padding-right:32px}table{border-collapse:collapse;background:var(--panel);width:100%}.table-wrap{border-radius:var(--r-md);border:1px solid var(--line);box-shadow:var(--shadow-sm);overflow-x:auto}.table-wrap.table-sticky{max-height:calc(100vh - 230px);overflow-y:auto}th,td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:8px 12px}th{background:var(--panel-2);cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--ink-2);letter-spacing:.02em;font-size:12px;font-weight:600}.table-sticky thead th{z-index:2;box-shadow:0 1px 0 var(--line);position:sticky;top:0}td.n,th.n{text-align:right;font-variant-numeric:tabular-nums}tbody tr{transition:background .1s}tbody tr:hover{background:var(--accent-soft);cursor:pointer}tbody tr.active{background:var(--accent-softer)}.td-ellipsis{text-overflow:ellipsis;white-space:nowrap;max-width:240px;overflow:hidden}.empty{text-align:center;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);padding:40px 24px;font-size:13px}.empty:before{content:"—";color:var(--faint);margin-bottom:6px;font-size:22px;display:block}.pos{color:var(--success)}.neg{color:var(--danger)}.order-items{white-space:normal;flex-direction:column;gap:6px;min-width:250px;display:flex}.order-item,.detail-item{align-items:center;gap:8px;display:flex}.order-item-thumb{border:1px solid var(--line);width:42px;height:42px;color:var(--muted);background:#f8fafc;border-radius:6px;flex:0 0 42px;justify-content:center;align-items:center;font-size:11px;display:inline-flex;overflow:hidden}.order-item-thumb img{object-fit:cover;width:100%;height:100%;display:block}.order-item-copy{min-width:0}.order-item-name{text-overflow:ellipsis;white-space:nowrap;max-width:260px;font-weight:500;overflow:hidden}.detail-item{white-space:normal;min-width:220px}.detail{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);width:420px;box-shadow:var(--shadow-sm);flex:none;max-height:calc(100vh - 32px);padding:16px;position:sticky;top:16px;overflow:auto}.detail h3{margin:0 0 6px;font-size:16px}.detail h4{color:var(--muted);margin:14px 0 4px;font-size:13px}.detail table{font-size:12px}.detail th,.detail td{white-space:nowrap;padding:5px 8px}.detail td:not(.n),.detail th:not(.n){white-space:normal;overflow-wrap:anywhere}.detail .detail-item>span{white-space:normal}.spark{margin-bottom:4px;display:block}.insights{gap:var(--space-4);margin-bottom:var(--space-4);flex-direction:column;display:flex}.page-wide{flex:auto;width:100%;min-width:0;max-width:none}.grid-wide{gap:var(--space-4);grid-template-columns:minmax(0,3fr) minmax(260px,1fr);display:grid}.grid-half{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(480px,1fr));display:grid}.kpis{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;display:grid}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm);padding:12px 14px}.kpi-label{color:var(--muted);margin-bottom:2px;font-size:12px}.kpi-value{font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:24px;font-weight:650}.kpi-value.pos{color:var(--success)}.kpi-value.neg{color:var(--danger)}.kpi-value.warn{color:var(--warning)}.kpi-hint{color:var(--faint);margin-top:2px;font-size:12px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm);padding:14px;overflow-x:auto}.panel h4{color:var(--ink-2);align-items:center;gap:12px;margin:0 0 10px;font-size:13px;font-weight:600;display:flex}.grid2{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(380px,1fr));display:grid}table.plain th{cursor:default}.stack{border-radius:4px;height:18px;margin-bottom:10px;display:flex;overflow:hidden}.stack-item{cursor:pointer;opacity:.85}.stack-item:hover,.stack-item.on{opacity:1;outline:2px solid var(--ink);outline-offset:-2px}.dot{border-radius:50%;width:9px;height:9px;margin-right:6px;display:inline-block}.bar-cell{min-width:110px;height:20px;line-height:20px;position:relative}.bar-fill{background:#bfdbfe;border-radius:3px;position:absolute;top:2px;bottom:2px;left:0}.bar-cell span{padding-left:6px;position:relative}button.link{color:var(--accent);background:0 0;border:none;padding:0}button.link-underline{box-shadow:none;color:var(--accent);text-underline-offset:3px;cursor:pointer;background:0 0;border:none;margin-left:4px;padding:0;text-decoration:underline}button.link-underline:hover{opacity:.8}tr.selected td{background:#eff6ff}.tag-bar{margin-bottom:var(--space-4);flex-direction:column;gap:8px;display:flex}.tag-list{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.tag{color:#3730a3;white-space:nowrap;background:#e0e7ff;border-radius:999px;align-items:center;gap:4px;padding:1px 8px;font-size:12px;line-height:20px;display:inline-flex}.tag.clickable{cursor:pointer;color:var(--ink);background:#f1f5f9}.tag.clickable:hover{background:#e2e8f0}.tag.on{background:var(--accent);color:#fff}.tag-x{color:inherit;cursor:pointer;background:0 0;border:none;padding:0 2px;line-height:1}.tag-x:hover{color:var(--neg);background:0 0}.tag-input{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.tag-input input[type=text]{min-width:180px;font:inherit;border:1px solid #cbd5e1;border-radius:6px;flex:1;padding:6px 10px}.tag-editor{flex-direction:column;gap:8px;display:flex}.spacer{flex:1}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover{background:#2563eb}button:disabled{opacity:.5;cursor:not-allowed}.edit{width:84px;font:inherit;color:inherit;background:0 0;border:1px solid #0000;border-radius:4px;padding:3px 6px}.edit:focus{background:#fff;border-color:#cbd5e1;outline:none;box-shadow:0 0 0 2px #3b82f640}.edit.solid{background:#fff;border-color:#cbd5e1}select.edit:not(.solid){appearance:none;cursor:pointer}input.edit[type=number]{appearance:textfield}input.edit[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.edit[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.edit.w-md{width:120px}.edit.w-lg{width:180px}.edit.dirty{background:#fef9c3;border-color:#facc15}.edit.bad{border-color:var(--neg);background:#fee2e2}.tag.red{background:var(--danger-soft);color:var(--danger-ink)}.tag.amber{background:var(--warning-soft);color:var(--warning-ink)}.tag.green{background:var(--success-soft);color:var(--success-ink)}.tag.blue{background:var(--info-soft);color:var(--info-ink)}.tag.gray{color:var(--ink-2);background:#eef2f7}.notice{border-radius:var(--r-md);border:1px solid #0000;align-items:center;gap:8px;margin-bottom:10px;padding:9px 12px;font-size:13px;display:flex}.notice.ok{background:var(--success-soft);color:var(--success-ink);border-color:#bbf7d0}.notice.err{background:var(--danger-soft);color:#991b1b;border-color:#fecaca}.notice.warn{background:var(--warning-soft);color:var(--warning-ink);border-color:#fde68a}.notice.info{background:var(--info-soft);color:var(--info-ink);border-color:#bae6fd}.notice a{color:inherit;margin-left:6px;font-weight:600}.ship{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;margin:14px 0 4px;padding:12px}.ship-head{align-items:center;gap:8px;margin-bottom:10px;display:flex}.ship-head .tag{color:#475569;background:#e2e8f0}.ship-head .tag.green{color:#15803d;background:#dcfce7}.ship-head .tag.amber{color:#b45309;background:#fef3c7}.ship-head .tag.red{color:#b91c1c;background:#fee2e2}.ship-cfg{color:var(--accent);font-size:12px;text-decoration:none}.ship-steps{flex-direction:column;gap:0;margin-bottom:10px;display:flex}.ship-step{gap:10px;padding-bottom:12px;display:flex;position:relative}.ship-step:last-child{padding-bottom:0}.ship-step:not(:last-child):before{content:"";background:#cbd5e1;width:2px;position:absolute;top:20px;bottom:0;left:9px}.ship-step.done:not(:last-child):before{background:var(--pos)}.ship-dot{color:#fff;text-align:center;background:#fff;border:2px solid #cbd5e1;border-radius:50%;flex:none;width:20px;height:20px;font-size:12px;line-height:16px}.ship-step.done .ship-dot{background:var(--pos);border-color:var(--pos)}.ship-step.fail .ship-dot{background:var(--neg);border-color:var(--neg)}.ship-step.skip .ship-dot{background:#cbd5e1}.ship-step-title{font-weight:600;line-height:20px}.ship-step-sub{color:var(--muted);word-break:break-all;font-size:12px}.ship-step.fail .ship-step-sub{color:var(--neg)}.ship-nums{background:#fff;border:1px solid #e2e8f0;border-radius:8px;grid-template-columns:1fr 1fr;gap:8px 12px;margin-bottom:8px;padding:10px;display:grid}.ship-k{color:var(--muted);font-size:12px}.ship-v{word-break:break-all;font:600 13px ui-monospace,Consolas,monospace}.ship-actions{grid-column:1/-1;gap:8px;display:flex}a.btn{color:var(--ink);background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:6px 12px;text-decoration:none}a.btn:hover{background:#f1f5f9}.ship-act{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.ship-notify{color:var(--muted);align-items:center;gap:6px;font-size:13px;display:flex}.ship .notice{margin:10px 0 0}.ship-weight{color:var(--muted);flex-direction:column;gap:2px;margin-bottom:8px;font-size:12px;display:flex}.ship-weight a{color:var(--accent);margin-left:4px}.ship-quotes{border:1px solid var(--line-soft);border-radius:var(--r-md);background:var(--panel-2);margin-bottom:8px;padding:8px 10px}.ship-quotes-head{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;font-size:13px;font-weight:600;display:flex}.ship-quotes-head button{flex:none}.ship-quote{border-radius:var(--r-sm);cursor:pointer;border:1px solid #0000;align-items:flex-start;gap:8px;padding:8px 10px;font-size:13px;transition:background .12s,border-color .12s;display:flex}.ship-quote:hover{background:#eef2f7}.ship-quote.sel{border-color:var(--accent);box-shadow:var(--focus-ring);background:#fff}.ship-quote.cheapest{background:var(--success-soft)}.ship-quote.cheapest .ship-quote-price{color:var(--success-ink)}.ship-quote-cheapest-badge{border-radius:var(--r-pill);background:var(--success);color:#fff;white-space:nowrap;padding:0 7px;font-size:11px;font-weight:600;line-height:18px}.ship-quote input{flex:none;margin:3px 0 0}.ship-quote-main{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.ship-quote-name{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.ship-quote-name .muted{font-size:12px;font-weight:400}.ship-quote-meta{white-space:nowrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.ship-quote-price{font:600 13px var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}.modal .ship-quotes{background:var(--panel-2)}.ship-btns{gap:8px;margin-left:auto;display:flex}.modal-mask{z-index:50;background:var(--overlay);justify-content:center;align-items:center;padding:20px;animation:.15s mask-in;display:flex;position:fixed;inset:0}@keyframes mask-in{0%{opacity:0}to{opacity:1}}.modal{border-radius:var(--r-lg);width:780px;max-width:100%;max-height:100%;box-shadow:var(--shadow-modal);background:#fff;flex-direction:column;animation:.16s modal-in;display:flex}@keyframes modal-in{0%{opacity:0;transform:translateY(8px)scale(.99)}to{opacity:1;transform:none}}.modal-head,.modal-foot{align-items:center;gap:12px;padding:14px 18px;display:flex}.modal-head{border-bottom:1px solid var(--line)}.modal-head h3{margin:0;font-size:15px}.modal-foot{border-top:1px solid var(--line)}.modal-body{padding:4px 18px 14px;overflow:auto}.modal-body h4{color:var(--ink-2);margin:14px 0 6px;font-size:13px;font-weight:600}.mgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;display:grid}.mgrid label,.modal-body>label{color:var(--muted);flex-direction:column;gap:3px;font-size:12px;display:flex}.mgrid .span2{grid-column:1/-1}.req:after{content:" *";color:var(--danger)}.field-err{color:var(--danger);font-size:12px}.modal input[type=text],.modal input[type=number],.modal input[type=email],.modal input[type=password],.modal select,.modal textarea{height:var(--ctl-h);border:1px solid var(--line-strong);border-radius:var(--r-sm);font:inherit;color:var(--ink);background:#fff;min-width:0;padding:0 10px}.modal textarea{height:auto;padding:8px 10px}.modal input:focus,.modal select:focus,.modal textarea:focus{border-color:var(--accent);box-shadow:var(--focus-ring);outline:none}.modal input.invalid,.modal select.invalid{border-color:var(--danger)}.modal input.invalid:focus{box-shadow:0 0 0 3px #dc262626}.mtable th{cursor:default}.mtable input.w-name{width:190px}.mtable input.w-num{text-align:right;width:80px}.msum{margin-top:6px;font-size:12px}.mcheck{align-items:center;margin-bottom:4px;display:flex;color:var(--ink)!important;flex-direction:row!important;gap:6px!important;font-size:13px!important}.set-page{max-width:1100px}.set-title{margin:0 0 4px}.set-sub{margin-bottom:14px}.set-card{flex-direction:column;gap:12px;display:flex}.set-card.hl{box-shadow:0 0 0 2px var(--accent)}.set-head{align-items:center;gap:8px;font-size:15px;display:flex}.set-field{flex-direction:column;gap:4px;display:flex}.set-label{font-size:13px;font-weight:600}.set-field input{font:inherit;background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:7px 10px}.set-field input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px #3b82f640}.set-hint,.set-note{color:var(--muted);font-size:12px}.set-test{align-items:center;gap:10px;display:flex}.set-actions{margin-top:14px}.data-refresh{align-items:center;gap:8px;display:inline-flex}.data-refresh-msg{max-width:420px;font-size:12px}.manage-table{border-collapse:separate;border-spacing:0;table-layout:fixed;width:100%;min-width:1752px}.manage-table th,.manage-table td{border-bottom:1px solid var(--line);vertical-align:middle;padding:7px 9px}.manage-table thead th{color:var(--muted);letter-spacing:.02em;white-space:nowrap;background:#f8fafc;font-size:12px;font-weight:600}.manage-table tbody tr:hover{cursor:default;background:#f8fafc}.catalog-thumb{border:1px solid var(--line);color:#94a3b8;background:#fff;border-radius:9px;flex:none;justify-content:center;align-items:center;width:38px;height:38px;font-size:11px;display:inline-flex;overflow:hidden;box-shadow:0 1px 2px #0f172a0f}.catalog-thumb img{object-fit:cover;width:100%;height:100%;display:block}.spu-toggle-cell{text-align:center;width:30px;padding-left:8px!important;padding-right:0!important}.spu-toggle{color:#94a3b8;background:0 0;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;width:22px;height:22px;transition:background .14s,color .14s,border-color .14s;display:inline-flex}.spu-toggle:before{content:"";border:2px solid;border-width:0 2px 2px 0;width:6px;height:6px;margin-left:-2px;transition:transform .18s;display:block;transform:rotate(-45deg)}.manage-table tr.spu-row:hover .spu-toggle{color:#475569;background:#eef2f7}.spu-toggle.open{color:var(--accent);background:#3b82f61f;border-color:#3b82f647}.spu-toggle.open:before{margin-top:-2px;margin-left:0;transform:rotate(45deg)}.manage-table tr.spu-row{cursor:pointer;background:#fbfcfe}.manage-table tr.spu-row>td{border-top:1px solid var(--line);padding-top:8px;padding-bottom:8px}.manage-table tr.spu-row:hover{background:#f4f7fb}.manage-table tr.spu-row.open{background:#f2f6fd}.manage-table tr.spu-row.open>td:first-child{box-shadow:inset 3px 0 0 var(--accent)}.spu-thumb-cell{width:48px}.spu-head{white-space:normal;min-width:240px}.spu-head-main{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.spu-name{color:var(--ink);letter-spacing:.01em;font-size:13.5px;font-weight:600}.spu-sub{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:420px;margin-top:2px;font-size:12px;overflow:hidden}.spu-sep{color:#cbd5e1;margin:0 6px}.pill{color:#64748b;white-space:nowrap;background:#eef2f7;border:1px solid #e2e8f0;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:600;line-height:17px;display:inline-block}.pill.amber{color:#b45309;background:#fef6e0;border-color:#fde68a}.manage-table tr.sku-row{background:#fff}.manage-table tr.sku-row:hover{background:#f8fafc}.manage-table tr.sku-row>td{border-bottom:1px solid #f1f5f9}.manage-table tr.sku-row.active>td,.manage-table tr.active>td{background:#fefce8}.sku-indent{vertical-align:middle;border-bottom:1.5px solid #dde3ea;border-left:1.5px solid #dde3ea;border-bottom-left-radius:7px;width:14px;height:22px;margin-left:2px;display:inline-block}.manage-table .n{font-variant-numeric:tabular-nums}.manage-table td.n .edit{text-align:right}.manage-table col.col-toggle{width:36px}.manage-table col.col-image{width:56px}.manage-table col.col-title{width:300px}.manage-table col.col-price,.manage-table col.col-compare{width:116px}.manage-table col.col-discount{width:92px}.manage-table col.col-orders{width:78px}.manage-table col.col-inventory{width:84px}.manage-table col.col-cost,.manage-table col.col-profit{width:88px}.manage-table col.col-notes{width:176px}.manage-table col.col-created{width:136px}.manage-table col.col-vendor{width:128px}.manage-table col.col-link{width:176px}.manage-table col.col-weight{width:82px}.manage-table th,.manage-table td{text-overflow:ellipsis;overflow:hidden}.manage-table .edit{background:#f6f8fb;border:1px solid #e5e9f0;border-radius:6px;width:100%;padding:3px 8px;transition:background .12s,border-color .12s,box-shadow .12s}.manage-table .edit:hover{background:#fff;border-color:#cbd5e1}.manage-table .edit:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px #3b82f629}.manage-table .edit.dirty{background:#fef9c3;border-color:#facc15}.manage-table .edit.bad{border-color:var(--neg);background:#fee2e2}.manage-table .money-edit{justify-content:flex-end;align-items:center;gap:4px;display:flex}.manage-table .money-edit .edit{flex:none;padding-left:4px;padding-right:6px}.manage-table tr.spu-row td.n{font-size:12px}.thumb-wrap{vertical-align:middle;display:inline-flex;position:relative}.thumb-preview{z-index:60;border:1px solid var(--line);pointer-events:none;background:#fff;border-radius:10px;width:192px;height:192px;padding:4px;position:fixed;box-shadow:0 12px 32px #0f172a2e}.thumb-preview img{object-fit:contain;width:100%;height:100%;display:block}.manage-table td{font-variant-numeric:tabular-nums}.manage-table .spu-head{white-space:normal;min-width:220px}.inv-table{border-collapse:separate;border-spacing:0;table-layout:fixed;width:100%;min-width:1100px}.inv-table th,.inv-table td{border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap;text-overflow:ellipsis;padding:7px 9px;overflow:hidden}.inv-table thead th{color:var(--muted);letter-spacing:.02em;background:#f8fafc;font-size:12px;font-weight:600}.inv-table .n{font-variant-numeric:tabular-nums;text-align:right}.inv-table td.center,.inv-table th.center{text-align:center}.inv-table tr.inv-variant-row:hover{background:#f8fafc}.inv-table tr.inv-variant-row.active{background:#fefce8}.inv-table tr.inv-variant-row.sel{background:#fee2e2}.inv-table tr.inv-spu-row{cursor:pointer;background:#fbfcfe}.inv-table tr.inv-spu-row:hover{background:#f4f7fb}.inv-table tr.inv-spu-row.open{background:#f2f6fd}.inv-table tr.inv-spu-row.open>td:first-child{box-shadow:inset 3px 0 0 var(--accent)}.inv-title-cell{white-space:normal}.inv-title-main{align-items:center;gap:8px;display:flex}.inv-title-col,.inv-custom-title{flex-direction:column;flex:1;min-width:0;display:flex}.inv-name{color:var(--ink);font-size:13.5px;font-weight:600}.inv-vname{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.inv-sku{color:#94a3b8;letter-spacing:.02em;text-overflow:ellipsis;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.inv-custom-title .edit{width:100%}.inv-thumb{border:1px solid var(--line);color:#94a3b8;background:#fff;border-radius:7px;flex:none;justify-content:center;align-items:center;width:30px;height:30px;font-size:10px;display:inline-flex;overflow:hidden}.inv-thumb img{object-fit:cover;width:100%;height:100%;display:block}.inv-table .edit{width:100%;font:inherit;color:inherit;background:#f6f8fb;border:1px solid #e5e9f0;border-radius:6px;padding:3px 8px;transition:background .12s,border-color .12s,box-shadow .12s}.inv-table .edit:hover{background:#fff;border-color:#cbd5e1}.inv-table .edit:focus{border-color:var(--accent);background:#fff;outline:none;box-shadow:0 0 0 3px #3b82f629}.inv-table .edit.dirty{background:#fef9c3;border-color:#facc15}.inv-table td.n .edit{text-align:right}.inv-table input[type=number]{appearance:textfield}.inv-table input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.inv-table input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.icon-btn{border:1px solid var(--line);color:#475569;cursor:pointer;background:#fff;border-radius:6px;padding:1px 7px;font-size:12px;line-height:20px}.icon-btn:hover{background:#f1f5f9;border-color:#cbd5e1}.ts-btn{border:1px solid var(--line);color:#475569;cursor:pointer;font-variant-numeric:tabular-nums;background:#fff;border-radius:6px;padding:3px 8px;font-size:12px}.ts-btn:hover{border-color:var(--accent);color:var(--accent)}.ts-btn.manual{color:#b45309;background:#fef6e0;border-color:#fde68a}button.danger{background:var(--neg);color:#fff;border-color:var(--neg)}button.danger:hover{background:#b91c1c}.inv-foot{justify-content:flex-end}.inv-pick{flex-direction:column;gap:4px;max-height:46vh;margin-top:10px;display:flex;overflow:auto}.inv-pick-item{cursor:pointer;border:1px solid #0000;border-radius:8px;align-items:center;gap:10px;padding:6px 8px;display:flex}.inv-pick-item:hover{border-color:var(--line);background:#f8fafc}.inv-pick-item.on{background:#eff6ff;border-color:#bfdbfe}.inv-pick-main{flex-direction:column;flex:1;min-width:0;display:flex}.inv-pick-title{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.inv-check{text-align:center;width:20px;color:var(--accent);font-weight:700}.inv-link-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:6px 0;display:flex}.inv-link-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.finance-head{margin-bottom:var(--space-4);flex-wrap:wrap;align-items:center;gap:8px;display:flex}.finance-head h1{margin:0;font-size:20px}.ftabs{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:2px;margin-bottom:16px;display:flex}.ftab{color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-1px;padding:8px 14px;font-weight:500}.ftab:hover{background:#f1f5f9}.ftab.on{border-bottom-color:var(--accent);color:var(--accent);background:0 0}.finance-summary .bar{margin-bottom:var(--space-4)}.bar select,.exp-toolbar select,.exp-actions select{font:inherit;background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:6px 10px}.exp-toolbar,.exp-actions{margin-bottom:var(--space-4);flex-wrap:wrap;align-items:center;gap:8px;display:flex}.exp-search{font:inherit;background:#fff;border:1px solid #cbd5e1;border-radius:6px;width:240px;padding:6px 10px}.exp-toolbar input[type=date]{font:inherit;border:1px solid #cbd5e1;border-radius:6px;padding:6px 8px}.exp-stat{color:var(--accent);border:1px solid var(--line);text-align:center;background:#fff;border-radius:6px;min-width:90px;padding:4px 12px;font-weight:700}.cell-edit{cursor:text;border-radius:4px;align-items:center;min-height:26px;padding:2px 6px;display:flex}.cell-edit:hover{background:#f1f5f9}.cell-edit-input{border:1px solid var(--accent);width:100%;min-width:60px;font:inherit;background:#fff;border-radius:4px;padding:3px 6px;box-shadow:0 0 0 2px #3b82f633}.exp-table td{vertical-align:middle}.exp-table tbody tr:hover{cursor:default;background:#f8fafc}.exp-table tr.row-group>td{background:#eff6ff;font-weight:500}.exp-table tr.row-group:hover>td{background:#e0ecff}.exp-table tr.row-child>td{background:#f8fbff}.exp-table tr.row-transferred>td{color:var(--muted);background:#f0fdf4}.exp-table tr.row-pending-del>td{opacity:.7;background:#fee2e2;text-decoration:line-through}.exp-caret{width:18px;color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 2px;line-height:1}.exp-caret:hover{color:var(--ink);background:0 0}header .nav-user{color:#e2e8f0;border-top:1px solid #243044;align-items:center;gap:9px;margin-top:auto;padding:10px 8px 4px;font-size:13px;display:flex}header .nav-avatar{background:linear-gradient(135deg, var(--accent), var(--info));color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:28px;height:28px;font-size:12px;font-weight:600;display:inline-flex}header .nav-user-name{white-space:nowrap;text-overflow:ellipsis;flex-direction:column;flex:1;gap:2px;min-width:0;line-height:1.3;display:flex;overflow:hidden}header .nav-user-role{border-radius:var(--r-pill);color:var(--nav-faint);border:1px solid #334155;align-self:flex-start;padding:0 7px;font-size:10.5px;line-height:16px}header .nav-logout{border-radius:var(--r-sm);width:28px;height:28px;color:var(--nav-faint);cursor:pointer;background:0 0;border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}header .nav-logout:hover{background:var(--nav-hover);color:#fca5a5}header.collapsed .nav-user{justify-content:center;padding:10px 0 4px}.login-wrap{background:radial-gradient(900px 500px at 15% -10%, #2563eb1a, transparent 60%), radial-gradient(800px 500px at 110% 110%, #0284c714, transparent 60%), var(--bg);flex:1;justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-card{background:var(--panel);border:1px solid var(--line);width:100%;max-width:380px;box-shadow:var(--shadow-lg);border-radius:16px;flex-direction:column;gap:14px;padding:32px 28px;display:flex}.login-card h1{letter-spacing:.01em;margin:0;font-size:22px}.login-brand-mark{background:linear-gradient(135deg, var(--accent), var(--info));color:#fff;letter-spacing:.02em;width:40px;height:40px;box-shadow:var(--shadow-md);border-radius:10px;justify-content:center;align-items:center;font-size:15px;font-weight:700;display:flex}.login-sub{color:var(--muted);margin:-6px 0 4px;font-size:13px}.login-field{color:var(--ink-2);flex-direction:column;gap:6px;font-size:13px;font-weight:500;display:flex}.login-field input{border:1px solid var(--line-strong);border-radius:var(--r-md);height:40px;color:var(--ink);padding:0 12px;font-size:14px;transition:border-color .12s,box-shadow .12s}.login-field input:focus{border-color:var(--accent);box-shadow:var(--focus-ring);outline:none}.login-error{border-radius:var(--r-sm);background:var(--danger-soft);color:#991b1b;padding:8px 12px;font-size:13px}.login-submit{border-radius:var(--r-md);background:var(--accent);color:#fff;cursor:pointer;border:none;height:42px;font-size:14px;font-weight:600;transition:background .12s}.login-submit:hover:not(:disabled){background:var(--accent-hover)}.login-submit:disabled{opacity:.6;cursor:default}.login-hint{color:var(--faint);margin:0;font-size:12px;line-height:1.6}.acct{flex-direction:column;flex:1;gap:16px;min-width:0;display:flex}.acct-title{margin:0;font-size:20px}.acct-notice{cursor:pointer;border-radius:8px;padding:10px 14px;font-size:13px}.acct-notice.ok{color:#065f46;background:#ecfdf5;border:1px solid #a7f3d0}.acct-notice.err{color:#991b1b;background:#fef2f2;border:1px solid #fecaca}.acct-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px}.acct-card h2{margin:0 0 12px;font-size:15px}.acct-card-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.acct-card-head h2{margin:0}.acct-hint{color:var(--muted);margin:0 0 12px;font-size:12px}.acct-table{border-collapse:collapse;width:100%;font-size:13px}.acct-table th,.acct-table td{text-align:left;border-bottom:1px solid var(--line);vertical-align:middle;padding:8px 10px}.acct-table th{color:var(--muted);white-space:nowrap;font-weight:600}.acct-table select,.acct-form input{color:var(--ink);background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:6px 9px;font-size:13px}.acct-name{width:120px;color:var(--ink);background:0 0;border:1px solid #0000;border-radius:6px;padding:5px 7px;font-size:13px}.acct-name:hover{border-color:#d1d5db}.acct-name:focus{border-color:var(--accent);background:#fff;outline:none}.acct-self{color:var(--accent);margin-left:6px;font-size:11px}.acct-on{color:var(--pos)}.acct-off{color:var(--neg)}.acct-row-off{opacity:.6}.acct-actions{white-space:nowrap;gap:6px;display:flex}.acct-actions button,.acct-form button,.acct-card-head button{color:var(--ink);cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:5px 10px;font-size:13px}.acct-actions button:hover,.acct-form button:hover{background:#f3f4f6}.acct-actions button.danger{color:var(--neg);border-color:#fecaca}.acct-actions button.danger:hover{background:#fef2f2}.acct-form{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.acct-form label{color:var(--muted);flex-direction:column;gap:5px;font-size:12px;display:flex}.acct-form input{min-width:180px}.acct-form button{background:var(--accent);color:#fff;border-color:var(--accent);padding:8px 16px}.acct-form button:disabled,.acct-card-head button:disabled{opacity:.55;cursor:default}.acct-card-head button{background:var(--accent);color:#fff;border-color:var(--accent)}.acct-card-head button:disabled{color:#9ca3af;background:#e5e7eb;border-color:#e5e7eb}.acct-table.perm td,.acct-table.perm th{text-align:center}.acct-table.perm td:first-child,.acct-table.perm th:first-child{text-align:left}.perm-fixed{color:var(--muted);font-size:12px}.load-error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;margin:0 0 12px;padding:10px 14px;font-size:13px}.page-denied{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);text-align:center;min-width:0;max-width:520px;box-shadow:var(--shadow-sm);flex:1;margin:64px auto 0;padding:36px 32px}.page-denied-icon{background:var(--warning-soft);width:52px;height:52px;color:var(--warning);border-radius:14px;justify-content:center;align-items:center;margin:0 auto 14px;font-size:24px;display:flex}.page-denied h1{margin:0 0 10px;font-size:20px}.page-denied p{color:var(--muted);margin:0 0 20px;font-size:14px;line-height:1.6}.page-denied-actions{justify-content:center;display:flex}.page-denied-btn{border-radius:var(--r-md);background:var(--accent);color:#fff;padding:9px 20px;font-size:14px;font-weight:500;text-decoration:none;transition:background .12s;display:inline-block}.page-denied-btn:hover{background:var(--accent-hover)}.spinner{border:2px solid #64748b4d;border-top-color:var(--accent);vertical-align:-2px;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite spin;display:inline-block}.spinner.on-light{border-color:#fff #ffffff59 #ffffff59}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{border-radius:var(--r-sm);background:linear-gradient(90deg,#eef1f5 25%,#f6f8fb 50%,#eef1f5 75%) 0 0/200% 100%;animation:1.3s infinite skeleton-wave}@keyframes skeleton-wave{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-block{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);flex-direction:column;gap:10px;padding:14px;display:flex}.orders-table th,.orders-table td{padding:7px 9px}.orders-table .order-items{min-width:200px}.detail .detail-item{min-width:0}.detail-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.detail-head h3{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;font-size:16px;overflow:hidden}.detail-close{border:1px solid var(--line);border-radius:var(--r-sm);width:28px;height:28px;color:var(--muted);background:#fff;flex:none;justify-content:center;align-items:center;padding:0;font-size:13px;line-height:1;display:inline-flex}.detail-close:hover{color:var(--ink);background:#f1f5f9}.kv-list{grid-template-columns:1fr 1fr;gap:8px 16px;margin:0;display:grid}.kv-list .kv{flex-direction:column;gap:1px;min-width:0;display:flex}.kv-list dt{color:var(--muted);font-size:12px}.kv-list dd{font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;overflow:hidden}@media (min-width:1501px){.orders-detail{z-index:40;width:clamp(560px,45vw,640px);max-height:none;box-shadow:var(--shadow-lg);animation:.18s drawer-in;position:fixed;top:16px;bottom:16px;right:16px}@keyframes drawer-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}}@media (max-width:1500px){main:has(>.orders-detail){flex-direction:column;align-items:stretch}.orders-detail{width:100%;max-height:none;position:static;overflow:visible}.orders-table th,.orders-table td{padding:7px 8px}.orders-table .td-ellipsis{max-width:150px}.orders-table .order-items{min-width:150px}.orders-table .order-item-name{max-width:180px}main:has(>.detail){flex-direction:column;align-items:stretch}main:has(>.detail)>.detail{width:100%;max-height:none;position:static}}button.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft);font-weight:600}.table-wrap>.bar{margin-bottom:0}.scroll-box{border-radius:var(--r-sm);max-height:480px;overflow:auto}.scroll-box thead th{z-index:1;background:var(--panel-2);box-shadow:0 1px 0 var(--line);position:sticky;top:0}
