.sheet{--ink:#16181d;--ink-soft:#5b5d66;--label:#83858e;--line:#1418231c;--line-soft:#1418230f;--accent:#0a63f0;--amber:#c18a2b9e;--paper:#fff;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;background:var(--paper);min-height:100vh;color:var(--ink);flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:13px;display:flex}.bar{border-bottom:1px solid var(--line);z-index:30;-webkit-backdrop-filter:saturate(160%)blur(10px);backdrop-filter:saturate(160%)blur(10px);background:#ffffffeb;align-items:center;gap:18px;padding:14px 28px;display:flex;position:sticky;top:0}.bar-brand{letter-spacing:.01em;font-size:14px;font-weight:800}.bar-brand small{color:var(--label);margin-left:8px;font-weight:600}.bar-meta{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;max-width:46ch;font-size:12px;overflow:hidden}.bar-spacer{flex:1}.bar-stat{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ink-soft);font-size:12px}.bar-stat b{color:var(--ink);font-weight:700}.btn{appearance:none;border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#fff;border-radius:6px;padding:7px 14px;font-size:12.5px;font-weight:600;transition:border-color .15s,background .15s,transform 50ms}.btn:hover{border-color:var(--ink)}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.07)}.btn:disabled{opacity:.45;cursor:default}.ai-legend{color:var(--label);align-items:center;gap:8px;padding:10px 28px 0;font-size:11.5px;display:flex}.ai-legend-mark{border-bottom:1.5px solid #c18a2bb3;width:20px;height:8px;display:inline-block}.tablewrap{flex:1;padding:6px 0 44px;overflow:auto}.qtable{border-collapse:separate;border-spacing:0;width:100%;min-width:1120px;font-size:13px}.qtable thead th{z-index:10;-webkit-backdrop-filter:saturate(160%)blur(8px);backdrop-filter:saturate(160%)blur(8px);text-transform:uppercase;letter-spacing:.15em;color:var(--label);text-align:left;border-bottom:1px solid var(--line);white-space:nowrap;background:#fafbfcf0;padding:10px 10px 8px;font-size:9.5px;font-weight:700;position:sticky;top:0}.qtable tbody td{border-bottom:1px solid var(--line-soft);vertical-align:middle;padding:4px 6px}.qtable tbody tr:hover{box-shadow:inset 2px 0 0 var(--accent);background:#f7f8fa}.qtable tbody tr.asm{background:#fafbfc}.qtable tbody tr.asm td{font-weight:650}.qtable tbody tr.excl td{color:var(--ink-soft)}.qtable .c-idx{width:44px;color:var(--label);font-family:var(--mono);font-size:11px}.qtable .c-level{width:72px;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ink-soft);white-space:nowrap;font-size:12px}.qtable .c-name{min-width:300px}.qtable .c-cat{width:76px}.qtable .c-qty,.qtable .c-qty2{text-align:right;width:74px}.qtable .c-mat{width:120px}.qtable .c-thk{width:64px}.qtable .c-fin{width:150px}.qtable .c-flag{min-width:180px}.qtable .c-rmk{border-left:1px solid var(--line-soft);min-width:200px}th.c-qty,th.c-qty2{text-align:right!important}.qtable .c-img{width:92px}.thumb-box{display:block}.thumb-dims{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--label);text-align:center;white-space:nowrap;margin-top:2px;font-size:9.5px;display:block}.thumb{object-fit:contain;cursor:pointer;background:#f4f6f9;border-radius:3px;width:80px;height:60px;transition:transform .12s,box-shadow .12s;display:block}.thumb:hover{transform:scale(1.05);box-shadow:0 4px 14px #14182329}.thumb-loading{background:#eef1f5;border-radius:3px;width:80px;height:60px;display:block}.thumb-empty{width:80px;height:60px;display:block}.viewer-overlay{z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#10121873;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.viewer-card{background:#fff;border-radius:12px;width:min(920px,92vw);overflow:hidden;box-shadow:0 24px 80px #0a0e1659}.viewer-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:12px 18px;display:flex}.viewer-title{font-size:14px;font-weight:700}.viewer-dims{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ink-soft);flex:1;margin-left:14px;font-size:12px}.viewer-canvas{width:100%;height:min(560px,62vh)}.name-cell{align-items:center;gap:6px;display:flex}.tree-pad{display:inline-block}.tree-tick{color:var(--line);font-family:var(--mono)}.cat-chip{border:1px solid var(--line);color:var(--ink-soft);white-space:nowrap;border-radius:999px;padding:2px 7px;font-size:10.5px;font-weight:700;display:inline-block}.cat-chip.cat-钣金件{color:#0a63f0;background:#0a63f00d;border-color:#0a63f059}.cat-chip.cat-机加件{color:#7c3aed;background:#7c3aed0d;border-color:#7c3aed4d}.cat-chip.cat-塑胶件{color:#db2777;background:#db27770d;border-color:#db27774d}.cat-chip.cat-铜排{color:#b45309;background:#b453090f;border-color:#b4530959}.cat-chip.cat-型材{color:#0f766e;background:#0f766e0d;border-color:#0f766e59}.cat-chip.cat-组件{color:var(--label);border-style:dashed}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;display:block}.num.strong{font-weight:700}.cell-in{width:100%;color:var(--ink);background:0 0;border:1px solid #0000;border-radius:3px;outline:none;padding:5px 7px;font-family:inherit;font-size:12.5px}.cell-in:hover{border-color:var(--line);background:#fff}.cell-in:focus{border-color:var(--ink);background:#fff;box-shadow:0 0 0 3px #1418230d}.cell-in.ai{box-shadow:inset 0 -1.5px #c18a2b8c}.cell-in.ai:focus{box-shadow:0 0 0 3px #1418230d,inset 0 -1.5px #c18a2b8c}.flag-badge{color:#9a6700;background:#c18a2b14;border:1px solid #c18a2b47;border-radius:4px;margin:1px 4px 1px 0;padding:2px 7px;font-size:11px;display:inline-block}.src-note{color:var(--label);margin-top:2px;font-size:10.5px}.section-head{align-items:baseline;gap:10px;padding:26px 28px 8px;display:flex}.section-head h2{text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);font-size:12px;font-weight:800}.section-head .hint{color:var(--label);font-size:11.5px}.sheet-foot{border-top:1px solid var(--line);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffffff0;align-items:center;gap:16px;padding:12px 28px;font-size:12.5px;display:flex;position:sticky;bottom:0}.sf-label{text-transform:uppercase;letter-spacing:.14em;color:var(--label);font-size:10px;font-weight:800}.sf-item{color:var(--ink-soft);font-family:var(--mono);font-variant-numeric:tabular-nums}.sf-spacer{flex:1}.sf-model{color:var(--label);font-size:11px;font-family:var(--mono)}.home{width:100%;max-width:860px;margin:0 auto;padding:64px 28px}.home h1{letter-spacing:-.01em;font-size:22px;font-weight:800}.home .sub{color:var(--ink-soft);margin-top:8px;line-height:1.6}.drop{border:1.5px dashed var(--line);text-align:center;cursor:pointer;border-radius:12px;margin-top:28px;padding:54px 32px;transition:border-color .15s,background .15s}.drop:hover,.drop.on{border-color:var(--accent);background:#0a63f008}.drop .big{font-size:15px;font-weight:700}.drop .small{color:var(--label);margin-top:6px;font-size:12px}.upload-state{color:var(--ink-soft);font-size:12.5px;font-family:var(--mono);margin-top:18px}.joblist{margin-top:44px}.joblist h3{text-transform:uppercase;letter-spacing:.13em;color:var(--label);margin-bottom:10px;font-size:11px;font-weight:800}.jobrow{border:1px solid var(--line-soft);color:var(--ink);border-radius:8px;align-items:center;gap:14px;margin-bottom:8px;padding:12px 14px;text-decoration:none;transition:border-color .15s;display:flex}.jobrow:hover{border-color:var(--accent)}.jobrow .jname{text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:650;overflow:hidden}.jobrow .jdate{color:var(--label);font-size:11.5px;font-family:var(--mono)}.status-pill{white-space:nowrap;border-radius:999px;padding:3px 9px;font-size:10.5px;font-weight:700}.status-pill.ready{color:#0a7d33;background:#0a7d3314}.status-pill.error{color:#c02626;background:#c0262614}.status-pill.busy{color:#0a63f0;background:#0a63f014}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}.pulsing{animation:1.2s ease-in-out infinite pulse}.center-note{text-align:center;color:var(--ink-soft);padding:80px 28px}.center-note .err{color:#c02626;font-family:var(--mono);white-space:pre-wrap;margin-top:10px;font-size:12px}
