:root{--bg:#f5f6f8;--panel:#fff;--border:#e3e6ea;--text:#1f2329;--text-dim:#8a9099;--accent:#2b6cb0;--accent-soft:#ebf2fa;--ok:#2f855a;--warn:#b7791f;--err:#c53030;font-family:Microsoft YaHei,PingFang SC,system-ui,sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font-size:14px}.app{flex-direction:column;height:100vh;display:flex}.topbar{background:var(--panel);border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;height:52px;padding:0 16px;display:flex}.brand{align-items:baseline;gap:10px;display:flex}.brand strong{font-size:17px}.ver{color:var(--text-dim);font-size:12px}.status{flex-wrap:wrap;align-items:center;gap:10px;font-size:12px;display:flex}.dot.ok{color:var(--ok)}.dot.error{color:var(--err)}.dot.loading{color:var(--text-dim)}.body{flex:1;min-height:0;display:flex}.sidebar{background:var(--panel);border-right:1px solid var(--border);flex:none;width:168px;padding:8px;overflow-y:auto}.nav-item{cursor:pointer;text-align:left;width:100%;color:var(--text);background:0 0;border:none;border-radius:6px;flex-direction:column;align-items:flex-start;margin-bottom:4px;padding:8px 10px;display:flex}.nav-item:hover{background:var(--accent-soft)}.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.nav-label{font-size:14px}.nav-note{color:var(--text-dim);margin-top:2px;font-size:11px}.content{flex-direction:column;flex:1;gap:12px;min-width:0;padding:14px;display:flex;overflow:auto}.panel{background:var(--panel);border:1px solid var(--border);border-radius:8px;flex-direction:column;flex:1;min-height:0;padding:12px 14px;display:flex}.panel-auto{flex:none}.panel-head{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:10px;display:flex}.panel h2{white-space:nowrap;margin:0;font-size:15px}.sub{color:var(--text-dim);margin-left:6px;font-size:12px;font-weight:400}.hint{color:var(--text-dim)}.error-panel p{color:var(--err)}.foot-hint{color:var(--text-dim);margin:8px 0 0;font-size:12px}.muted{color:var(--text-dim)}.search{border:1px solid var(--border);border-radius:6px;outline:none;flex:1;max-width:420px;height:30px;padding:0 10px;font-size:13px}.search:focus{border-color:var(--accent)}.count{color:var(--text-dim);white-space:nowrap;margin-left:auto;font-size:12px}.loading-block{color:var(--text-dim);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;display:flex}.loading-spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:26px;height:26px;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.grid-wrap{border:1px solid var(--border);border-radius:6px;flex:1;min-height:0;overflow:hidden}.grid-scroll{height:100%;overflow:auto}.grid{border-collapse:separate;border-spacing:0;table-layout:fixed;width:100%}.grid thead th{z-index:1;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;text-overflow:ellipsis;background:#fafbfc;padding:7px 8px;font-size:13px;font-weight:600;position:sticky;top:0;overflow:hidden}.grid thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.grid thead th.sortable:hover{background:var(--accent-soft)}.grid-row{width:100%;display:flex;position:absolute;top:0;left:0}.grid td{white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #f0f2f4;flex:1;padding:6px 8px;font-size:13px;overflow:hidden}.grid tbody{width:100%}.grid thead,.grid tbody tr.grid-row{display:flex}.grid-empty{text-align:center;color:var(--text-dim);padding:24px;display:block}.tbl-wrap{border:1px solid var(--border);border-radius:6px;flex:1;min-height:0;overflow:auto}.tbl{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}.tbl thead th{z-index:1;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;background:#fafbfc;padding:7px 8px;font-size:13px;font-weight:600;position:sticky;top:0}.tbl td{white-space:nowrap;vertical-align:top;border-bottom:1px solid #f0f2f4;padding:6px 8px}.tbl tbody tr:hover{background:#fafbfc}.tbl-empty{color:var(--text-dim);border:1px dashed var(--border);border-radius:6px;flex:1;justify-content:center;align-items:center;padding:24px;display:flex}.tag{color:#4a5563;background:#eef1f4;border-radius:10px;padding:1px 8px;font-size:12px;display:inline-block}.tag-part{color:#256b3f;background:#e6f4ea}.tag-comp{color:#2b4f9e;background:#e8eefc}.tag-top{color:#8a6100;background:#fff3d6}.tag-warn{color:var(--warn);background:#fff3d6}.tag-bad{color:var(--err);background:#fdeaea}.tag-select{border:1px solid var(--border);background:#fff;border-radius:6px;flex-wrap:wrap;align-items:center;gap:6px;min-height:34px;max-height:132px;padding:6px 8px;display:flex;overflow:auto}.tag-select .tag{cursor:pointer;transition:all .12s}.tag-select .tag:hover{transform:translateY(-1px)}.tag-select-empty{color:var(--text-dim);padding:6px 2px;font-size:12px}.tag-filter{border:1px solid var(--border);background:#fafbfc;border-radius:6px;flex-direction:column;gap:8px;margin-bottom:10px;padding:10px 12px;display:flex}.tag-filter-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.tag-filter-row .search-box{border:1px solid var(--border);background:#fff;border-radius:4px;flex:1;min-width:180px;padding:4px 8px;font-size:13px}.tag-filter-row .search-box:focus{border-color:var(--accent);outline:none}.tag-mode-toggle{border:1px solid var(--border);border-radius:4px;display:inline-flex;overflow:hidden}.tag-mode-toggle button{color:var(--text-dim);cursor:pointer;background:#fff;border:none;padding:4px 10px;font-size:12px}.tag-mode-toggle button.active{background:var(--accent);color:#fff}.tag-cloud{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.tag-cloud .tag{cursor:pointer;transition:all .12s}.tag-cloud .tag.tag-on,.tag-select .tag.tag-on{background:var(--accent);color:#fff;font-weight:500}.tag-cloud .tag:hover{transform:translateY(-1px)}.tag-filter-count{color:var(--text-dim);font-size:12px}.tag-segment{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.tag-segment+.tag-segment{border-left:1px solid var(--border);padding-left:8px}.tag-group-chip{color:#45505e;cursor:pointer;white-space:nowrap;background:#f0f3f7;border:1px dashed #c9d2dd;border-radius:10px;padding:1px 8px;font-size:12px;font-weight:600;transition:all .12s;display:inline-block}.tag-group-chip:hover{transform:translateY(-1px)}.tag-group-chip.active,.tag-group-chip.tag-on{background:var(--accent-soft);color:var(--accent);border-style:solid;border-color:var(--accent)}.tag-group-num{opacity:.7;font-variant-numeric:tabular-nums;margin-left:4px;font-size:10px}.tag-lv1{padding-bottom:6px}.tag-lv2{border-top:1px dashed var(--border);align-items:center;min-height:30px;padding-top:8px}.tag-picked-hint{margin-left:auto}.matrix{width:max-content;min-width:100%}.matrix th,.matrix td{text-align:right;font-variant-numeric:tabular-nums}.matrix .mx-corner{z-index:3;color:var(--text-dim);background:#fafbfc;font-weight:500;position:sticky;top:0;left:0}.matrix .mx-head{text-align:center;color:var(--accent)}.matrix .mx-row{z-index:2;background:var(--panel);text-align:left;white-space:nowrap;border-bottom:1px solid #f0f2f4;padding:6px 8px;font-weight:600;position:sticky;left:0}.mx-name{color:var(--text-dim);font-size:11px;font-weight:400;display:block}.mx-hit{color:var(--text);font-weight:600}.mx-zero{color:#c9ced6}.gen{flex-wrap:wrap;gap:14px 24px;display:flex}.gen-field{flex-direction:column;gap:4px;min-width:140px;display:flex}.gen-field>span{color:var(--text-dim);font-size:12px}.gen-field select{border:1px solid var(--border);background:#fff;border-radius:6px;outline:none;height:30px;padding:0 8px;font-size:13px}.gen-field select:focus{border-color:var(--accent)}.gen-field strong{font-size:14px;font-weight:600;line-height:30px}.gen-code{color:var(--accent);letter-spacing:1px;font-family:Consolas,Courier New,monospace}.gen-wide{min-width:260px}.gen-ok{color:var(--ok)}.gen-bad{color:var(--err)}.drawings-main{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.drawings-toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.drawings-toolbar .form-input{width:230px;height:30px}.drawings-toolbar .drawings-format-filter{width:130px}.drawings-table{border-collapse:collapse;table-layout:fixed;width:100%;font-size:12px}.drawings-table th,.drawings-table td{border-bottom:1px solid var(--border);text-align:left;vertical-align:top;word-break:break-word;padding:7px 8px}.drawings-table th{z-index:1;color:var(--text-dim);white-space:nowrap;background:#f6f7f9;font-weight:500;position:sticky;top:0}.drawings-table tbody tr:hover td{background:#fafbfc}.drawings-actions{flex-wrap:wrap;gap:4px;display:flex}.drawing-component-code{color:var(--accent);font-family:Consolas,Courier New,monospace;font-weight:600}.drawing-file{color:var(--text-dim);text-overflow:ellipsis;font-size:11px;overflow:hidden}.drawing-remark{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.drawing-state{white-space:nowrap;border-radius:8px;padding:1px 6px;font-size:11px;display:inline-block}.drawing-state.draft{color:#8a6d3b;background:#fff3cd}.drawing-state.released{color:#0f5132;background:#d1e7dd}.drawing-state.obsolete{color:#6c757d;background:#e2e3e5}.drawing-lock{color:#b26a00;white-space:nowrap;font-size:11px}.publish-action{white-space:nowrap;border-radius:8px;padding:1px 6px;font-size:11px;display:inline-block}.publish-action.ADD{color:#0f5132;background:#d1e7dd}.publish-action.REPLACE{color:#8a6d3b;background:#fff3cd}.publish-action.SKIP{color:#6c757d;background:#e2e3e5}.publish-status{white-space:nowrap;border-radius:8px;padding:1px 6px;font-size:11px;display:inline-block}.publish-status.PENDING{color:#555;background:#eef1f5}.publish-status.RUNNING{color:#084298;background:#cfe2ff}.publish-status.SUCCEEDED{color:#0f5132;background:#d1e7dd}.publish-status.SKIPPED{color:#6c757d;background:#e2e3e5}.publish-status.FAILED{color:#842029;background:#f8d7da}.publish-dryrun{color:var(--text);cursor:pointer;align-items:center;gap:6px;margin-top:10px;font-size:12px;display:flex}.publish-error-text{color:#b02a37;font-size:12px}.drawing-format{letter-spacing:.02em;color:#3559a8;white-space:nowrap;background:#e8eefc;border-radius:8px;padding:1px 6px;font-size:10px;font-weight:600;display:inline-block}.drawing-format.pdf{color:#b02a2a;background:#fdeaea}.drawing-format.dwg,.drawing-format.dxf{color:#1a5fa8;background:#e7f3ff}.drawing-format.step,.drawing-format.iges{color:#2a7a44;background:#e8f6ec}.drawing-format.stl,.drawing-format.obj,.drawing-format.gltf{color:#5a3a9e;background:#f1eafc}.drawing-format.image{color:#94600f;background:#fdf3e3}.drawing-format.obsolete{opacity:.55;text-decoration:line-through}.drawings-obsolete-toggle{color:var(--text-dim);white-space:nowrap;cursor:pointer;align-items:center;gap:4px;font-size:12px;display:flex}.upload-file-list{border:1px solid var(--border);background:#fafbfd;border-radius:6px;max-height:150px;margin:4px 0 0;padding:6px 8px;list-style:none;overflow:auto}.upload-file-list li{align-items:center;gap:8px;padding:3px 0;display:flex}.upload-file-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;overflow:hidden}.drawings-empty{text-align:center;color:var(--text-dim);padding:24px}.banner-error{color:var(--err);background:#fdeaea;border-bottom-color:#f3d3d3}.drawing-preview-mask{z-index:2000;background:#0f172a8c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.drawing-preview{background:#fff;border-radius:10px;flex-direction:column;width:min(1240px,96vw);height:min(88vh,920px);display:flex;overflow:hidden;box-shadow:0 20px 60px #0000004d}.drawing-formats{flex-wrap:wrap;gap:4px;display:flex}.drawing-preview-tabs{border-bottom:1px solid var(--border);background:#f7f9fc;flex-wrap:wrap;flex:none;gap:6px;padding:8px 14px;display:flex}.drawing-preview-tab{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:#fff;border-radius:14px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;display:inline-flex}.drawing-preview-tab.active{color:#24457f;background:#eaf1ff;border-color:#3559a8;font-weight:600}.drawing-preview-tab-version{font-size:11px}.drawing-preview-tab-no{text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.drawing-preview-head{border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;gap:16px;padding:10px 14px;display:flex}.drawing-preview-title-wrap{min-width:0}.drawing-preview-title{color:var(--text);align-items:center;gap:8px;font-size:15px;font-weight:600;display:flex}.drawing-preview-version{background:var(--accent-soft);color:var(--accent);border-radius:8px;padding:1px 6px;font-size:11px}.drawing-preview-sub{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-size:12px;overflow:hidden}.drawing-preview-actions{flex:none;gap:6px;display:flex}.drawing-preview-body{background:#f5f7fa;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;position:relative;overflow:hidden}.drawing-preview-frame{background:#fff;border:0;width:100%;height:100%}.drawing-preview-image{object-fit:contain;background:#fff;max-width:100%;max-height:100%}.drawing-preview-canvas{width:100%;height:100%;position:relative;overflow:hidden}.drawing-measure-bar{z-index:6;border:1px solid var(--border);background:#fffffff0;border-radius:6px;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;font-size:12px;display:flex;position:absolute;top:8px;left:8px;right:8px;box-shadow:0 2px 8px #0f233c14}.drawing-measure-title{color:var(--text);margin-right:2px;font-weight:600}.drawing-measure-bar button{border:1px solid var(--border);color:var(--text);cursor:pointer;background:#fff;border-radius:4px;padding:2px 8px;font-size:12px}.drawing-measure-bar button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.drawing-measure-bar button.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:600}.drawing-measure-bar button:disabled{opacity:.45;cursor:not-allowed}.drawing-measure-hint{color:var(--text-dim);margin-left:auto;line-height:1.5}.drawing-measure-labels{pointer-events:none;overflow:hidden}.drawing-measure-label{color:#c1121f;white-space:nowrap;background:#fffffff5;border:1px solid #ff3b30;border-radius:4px;padding:2px 7px;font-size:12px;font-weight:600;transform:translateY(-50%);box-shadow:0 1px 4px #0f233c2e}.drawing-measure-label.distance{color:#0b7285;border-color:#0b7285}.drawing-measure-label.thickness{color:#6f42c1;border-color:#6f42c1}.drawing-preview-message{color:var(--text-dim);text-align:center;flex-direction:column;align-items:center;gap:10px;padding:24px;font-size:13px;display:flex}.drawing-preview-error{color:var(--err)}.drawing-preview-notice{z-index:2;color:#8a6d3b;background:#fff3cdf0;border-radius:4px;max-width:calc(100% - 16px);padding:3px 8px;font-size:11px;position:absolute;top:8px;left:8px}.drawing-preview-rebuild{flex-direction:column;align-items:center;gap:4px;display:flex}.drawing-preview-rebuild-error{max-width:560px;color:var(--err);word-break:break-word;font-size:12px}.drawing-preview-history{border-top:1px solid var(--border);background:#fbfcfe;flex:none;max-height:180px;padding:8px 14px;overflow-y:auto}.drawing-preview-history-head{color:var(--text);justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:4px;font-size:12px;font-weight:600;display:flex}.drawing-preview-history-filter{color:var(--text-dim);font-size:11px;font-weight:400}.drawing-preview-history-list{margin:0;padding:0;list-style:none}.drawing-preview-history-item{border-radius:4px;align-items:baseline;gap:8px;padding:3px 6px;font-size:12px;display:flex}.drawing-preview-history-item.current{background:#eaf1ff}.drawing-preview-history-item.obsolete{opacity:.6}.drawing-preview-history-version{white-space:nowrap;flex:none;font-weight:600}.drawing-preview-history-meta{color:var(--text-dim);white-space:nowrap;flex:none;font-size:11px}.drawing-preview-history-remark{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.drawing-preview-loading{color:var(--text-dim);background:#f5f7fadb;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;inset:0}.drawing-preview-foot{border-top:1px solid var(--border);color:var(--text-dim);flex:none;padding:7px 14px;font-size:11px}.drawing-pdf{flex-direction:column;width:100%;height:100%;display:flex}.drawing-pdf-toolbar{border-bottom:1px solid var(--border);color:var(--text-dim);background:#fff;flex:none;justify-content:center;align-items:center;gap:10px;padding:6px 10px;font-size:12px;display:flex}.drawing-pdf-scroll{background:#eef1f5;flex:1;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:relative;overflow:auto}.drawing-pdf-scroll canvas{background:#fff;box-shadow:0 2px 12px #0000001f}.dot.warn{color:var(--warn)}.banner{color:#7a5b00;background:#fff8e6;border-bottom:1px solid #f0e0b8;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:8px 16px;font-size:13px;display:flex}.banner-muted{border-bottom-color:var(--border);color:var(--text-dim);background:#f4f6f8}.banner-sync{color:#1d3c78;background:#eef5ff;border-bottom-color:#cfe0fb}.banner-sync-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.sync-progress{vertical-align:middle;background:#d7e4fb;border-radius:3px;flex:none;width:220px;height:6px;display:inline-block;overflow:hidden}.sync-progress>i{background:#2f6feb;height:100%;transition:width .3s;display:block}.btn-mini-on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.btn-mini{border:1px solid var(--border);color:var(--text);cursor:pointer;white-space:nowrap;background:#fff;border-radius:5px;padding:4px 10px;font-size:12px}.btn-mini:hover:not(.disabled):not(:disabled){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.btn-mini:disabled,.btn-mini.disabled{opacity:.45;cursor:not-allowed}.btn-mini-danger{color:var(--err);border-color:#f3d3d3}.btn-mini-danger:hover:not(.disabled):not(:disabled){border-color:var(--err);color:var(--err);background:#fdeaea}.btn-primary{background:var(--accent);color:#fff;cursor:pointer;white-space:nowrap;border:none;border-radius:6px;padding:6px 14px;font-size:13px}.btn-primary:hover:not(:disabled){filter:brightness(1.08)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{border:1px solid var(--border);color:var(--text);cursor:pointer;background:#fff;border-radius:6px;padding:6px 14px;font-size:13px}.btn-ghost-danger{color:var(--err);border-color:#f3d3d3}.btn-ghost-danger:hover:not(:disabled){border-color:var(--err);background:#fdeaea}.modal-mask{z-index:50;background:#00000073;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal{background:#fff;border-radius:10px;flex-direction:column;width:100%;max-width:560px;max-height:88vh;display:flex;box-shadow:0 18px 48px #00000047}.modal-head{border-bottom:1px solid var(--border);padding:14px 18px;font-size:15px;font-weight:600}.modal-body{padding:16px 18px;overflow:auto}.modal-foot{border-top:1px solid var(--border);justify-content:flex-end;gap:10px;padding:12px 18px;display:flex}.form{flex-direction:column;gap:12px;display:flex}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.form-row{flex-direction:column;gap:4px;min-width:0;display:flex}.form-label{color:var(--text-dim);font-size:12px}.form-input{border:1px solid var(--border);background:#fff;border-radius:6px;outline:none;width:100%;height:32px;padding:0 10px;font-size:13px}.form-input:focus{border-color:var(--accent)}.form-input:disabled{color:var(--text-dim);background:#f6f7f9}.form-static{font-size:13px;line-height:32px}.alert{color:#a3271f;background:#fdecea;border:1px solid #f6cfcb;border-radius:6px;padding:8px 12px;font-size:13px}.op-btns{gap:6px;display:flex}.picker{min-width:0;position:relative}.picker-input{border:1px solid var(--border);border-radius:6px;outline:none;width:100%;height:32px;padding:0 10px;font-size:13px}.picker-input:focus{border-color:var(--accent)}.picker-panel{z-index:60;border:1px solid var(--border);background:#fff;border-radius:8px;min-width:460px;max-width:min(680px,80vw);max-height:300px;position:absolute;top:36px;left:0;overflow:auto;box-shadow:0 10px 26px #00000029}.picker-item{cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:6px 10px;font-size:13px;display:flex}.picker-item:hover{background:var(--accent-soft)}.picker-code{font-family:Consolas,Courier New,monospace}.picker-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.picker-spec{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;max-width:180px;font-size:12px;overflow:hidden}.picker-empty{color:var(--text-dim);padding:12px;font-size:13px}.picker-hint{border-top:1px solid var(--border);color:var(--text-dim);padding:6px 10px;font-size:11px}.split{flex:1;gap:10px;min-height:0;display:flex}.cat-tree{border:1px solid var(--border);background:#fff;border-radius:6px;flex:none;width:212px;padding:6px 0;overflow:auto}.cat-item{cursor:pointer;align-items:center;gap:6px;padding:4px 8px;font-size:13px;display:flex}.cat-item:hover{background:var(--accent-soft)}.cat-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.cat-toggle{width:14px;color:var(--text-dim);text-align:center;flex:none;font-size:11px}.cat-toggle-empty{cursor:default}.cat-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.cat-num{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:11px}.grp-list{flex-direction:column;flex:1;gap:10px;min-height:0;display:flex;overflow:auto}.grp{border:1px solid var(--border);border-radius:8px;flex:none;overflow:hidden}.grp-head{background:#fafbfc;align-items:center;gap:10px;padding:8px 10px;display:flex}.grp-tag{color:var(--accent);background:var(--accent-soft);border-radius:4px;padding:1px 8px;font-family:Consolas,Courier New,monospace;font-weight:600}.grp-name{font-weight:600}.grp-spec{color:var(--text-dim);font-size:12px}.grp-count{color:var(--text-dim);margin-left:auto;font-size:12px}.grp-btn{flex:none}.grp .tbl-wrap{border:none;border-radius:0}.multi{border:1px solid var(--border);border-radius:6px;overflow:hidden}.multi-head,.multi-row{grid-template-columns:minmax(0,1fr) 90px minmax(0,1fr) 44px;align-items:start;gap:8px;padding:6px 8px;display:grid}.multi-head{color:var(--text-dim);border-bottom:1px solid var(--border);background:#fafbfc;font-size:12px}.multi-row+.multi-row{border-top:1px dashed var(--border)}.multi-code{flex-direction:column;gap:4px;min-width:0;display:flex}.multi-kind{font-size:11px}.panel-scroll{overflow:auto}.multi-edit{overflow:visible}.multi-edit .multi-head,.multi-edit .multi-row{grid-template-columns:150px minmax(0,1.1fr) minmax(0,1.3fr) 66px minmax(0,.9fr) 112px;align-items:center;gap:6px;padding:4px 8px}.multi-edit .multi-head{padding-top:6px;padding-bottom:6px;font-size:11px}.multi-edit .multi-row{font-size:12px}.multi-edit .form-input,.multi-edit .picker-input{height:28px;padding:0 6px;font-size:12px}.multi-edit .picker-panel{top:30px}.multi-edit .btn-mini{padding:3px 8px}.multi-static{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-dim);font-size:12px;overflow:hidden}.bolt-row{border:1px solid var(--border);cursor:pointer;border-radius:6px;align-items:center;gap:8px;margin-top:6px;padding:6px 8px;display:flex}.bolt-row.miss{opacity:.5;cursor:not-allowed}.bolt-row .picker-name{flex:1;min-width:0}.edit-body{flex-direction:column;flex:1;min-width:0;display:flex}.drag-src{width:250px;min-width:0}.drag-resizer{z-index:1;cursor:col-resize;touch-action:none;background:0 0;flex:none;align-self:stretch;width:20px;margin:0 -10px;position:relative}.drag-resizer:before{content:"";background:var(--border);border-radius:2px;width:4px;margin-left:-2px;position:absolute;top:0;bottom:0;left:50%}.drag-resizer:hover:before,.drag-resizer.on:before,.drag-resizer:focus-visible:before{background:var(--accent);opacity:.65}.drag-resizer:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:3px}.drag-src-head{z-index:1;color:var(--text-dim);border-bottom:1px solid var(--border);background:#fff;padding:6px 8px;font-size:11px;position:sticky;top:0}.drag-cat{color:var(--text-dim);align-items:center;gap:6px;padding:6px 8px 2px;font-size:11px;display:flex}.drag-item{cursor:grab;border-radius:6px;flex-wrap:wrap;align-items:center;gap:3px 6px;padding:3px 8px;font-size:12px;display:flex}.drag-item:hover{background:var(--accent-soft)}.drag-item-on{background:#f3f7ff}.drag-item-empty{color:var(--text-dim);cursor:default;font-size:11px}.drag-item-empty:hover{background:0 0}.drag-main{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.drag-tags{flex-wrap:wrap;flex:none;gap:5px;width:100%;display:flex}.drag-tag{color:#3a4653;white-space:nowrap;background:#dde5ee;border:1px solid #b3c1d1;border-radius:8px;padding:0 6px;font-size:10px;line-height:16px}.drag-code{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.drag-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.drag-spec{text-overflow:ellipsis;white-space:nowrap;max-width:84px;color:var(--text-dim);flex:none;font-size:11px;overflow:hidden}.drag-dup{color:var(--accent);border:1px solid var(--accent);border-radius:4px;flex:none;padding:0 4px;font-size:10px}.drop-cell{border-radius:6px;min-width:0}.drop-cell.over{outline:1px dashed var(--accent);outline-offset:1px;background:var(--accent-soft)}.drop-zone{border:1px dashed var(--border);color:var(--text-dim);text-align:center;border-radius:6px;margin-top:6px;padding:6px 8px;font-size:12px}.drop-zone.over{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.cat-chip{white-space:nowrap;border-radius:4px;align-items:center;padding:1px 7px;font-size:11px;font-weight:600;line-height:18px;display:inline-flex}.cat-dot{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.sub-block{margin-bottom:10px}.sub-block-head{align-items:center;gap:10px;margin-bottom:6px;font-size:13px;font-weight:600;display:flex}.sub-block-toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.sub-block-toggle:hover{color:var(--accent)}.sub-block-arrow{width:14px;color:var(--text-dim)}.sub-block-action{color:var(--accent);font-size:12px;font-weight:400}.sum-group+.sum-group{border-top:1px dashed var(--border);margin-top:10px;padding-top:8px}.sum-group .tbl{table-layout:fixed}.sum-group .tbl td{white-space:normal;word-break:break-word}.mode-switch{border:1px solid var(--border);border-radius:6px;align-self:flex-start;display:inline-flex;overflow:hidden}.mode-switch button{color:var(--text-dim);cursor:pointer;white-space:nowrap;background:#fff;border:none;padding:6px 12px;font-size:13px}.mode-switch button.active{background:var(--accent);color:#fff}.mode-switch button+button{border-left:1px solid var(--border)}.issue-box{border:1px dashed var(--border);background:#fafbfc;border-radius:6px;flex-direction:column;gap:10px;padding:10px 12px;display:flex}.issue-line{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.issue-line .form-label{flex:none}.issue-select{width:auto;min-width:150px}.issue-line .form-input{flex:1;width:auto;min-width:150px}.issue-line .gen-code{font-size:15px}.modal-wide{max-width:760px}.inline-field{align-items:center;gap:6px;display:flex}.inline-field>span{color:var(--text-dim);white-space:nowrap;font-size:12px}.inline-field select{width:auto;min-width:230px}.alert-ok{color:#1e6b3a;background:#e9f7ef;border-color:#c6e9d3}
