:root{--bg: #f6f7f9;--surface: #ffffff;--surface-soft: #fafbfc;--surface-hover: #f4f6f7;--line: #ebedf0;--line-soft: #f2f4f6;--line-strong: #dfe3e7;--ink-1: #17191c;--ink-2: #3f464e;--ink-3: #71787f;--ink-4: #9ba2aa;--brand: #3e5a76;--brand-600: #33506b;--brand-100: #d8e3ec;--brand-50: #eff4f8;--brand-ring: rgba(62, 90, 118, .12);--clay: #8a6a4b;--clay-50: #faf6f1;--clay-100: #ece1d3;--success: #4c7a5a;--warn: #a9832f;--warn-50: #faf5e9;--danger: #b4544f;--danger-50: #fbf2f1;--primary: var(--brand);--accent: var(--brand);--accent-2: var(--brand);--accent-bg: var(--brand-50);--text: var(--ink-1);--text-soft: var(--ink-2);--text-mute: var(--ink-3);--border: var(--line);--panel: var(--surface);--panel-2: var(--surface-soft);--shadow-1: 0 1px 2px rgba(16, 24, 40, .04);--shadow-2: 0 2px 8px rgba(16, 24, 40, .06);--shadow-3: 0 12px 32px rgba(16, 24, 40, .12);--fs-2xs: 11px;--fs-xs: 12px;--fs-sm: 13px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 20px;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--bar-plan: #e4e8ec;--bar-plan-fill: #bcc7d1;--row-late: #fffaf9;--r-xs: 6px;--r-sm: 8px;--r: 10px;--r-lg: 14px;--r-pill: 999px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;color:var(--ink-2);background:var(--bg);font-size:var(--fs-md);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{scrollbar-width:thin;scrollbar-color:#d8dce0 transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-thumb{background:#dfe3e7;border-radius:999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:#cbd2d8;background-clip:content-box}button,input,select{font-family:inherit}.app{display:grid;grid-template-rows:60px minmax(0,1fr);grid-template-columns:var(--tree-w, 300px) minmax(0,1fr) 344px;grid-template-areas:"topbar topbar topbar" "tree canvas props";gap:16px;padding:0 16px 16px;height:100vh;height:100dvh;background:var(--bg);overflow:hidden}.app.has-tree{grid-template-rows:60px minmax(0,var(--tree-h, 1fr))}.app.no-tree{grid-template-columns:0 minmax(0,1fr) 344px}.app.no-props{grid-template-columns:var(--tree-w, 300px) minmax(0,1fr) 0}.app.no-tree.no-props{grid-template-columns:0 minmax(0,1fr) 0}.tree-col{grid-area:tree;position:relative;display:flex;align-items:flex-start;min-width:0;min-height:0;pointer-events:none}.tree-col>.panel{flex:1;min-width:0;height:100%;pointer-events:auto}.col-resizer,.row-resizer,.corner-resizer{position:absolute;z-index:30;touch-action:none;pointer-events:auto}.col-resizer{top:0;right:-8px;width:16px;height:100%;cursor:col-resize}.row-resizer{left:0;right:26px;bottom:-8px;height:16px;cursor:row-resize}.corner-resizer{right:-8px;bottom:-8px;width:26px;height:26px;cursor:nwse-resize;z-index:31}.col-resizer:after,.row-resizer:after{content:"";position:absolute;border-radius:2px;background:transparent;transition:background .15s}.col-resizer:after{right:6px;top:0;bottom:0;width:3px}.row-resizer:after{bottom:6px;left:0;right:0;height:3px}.col-resizer:hover:after,.col-resizer:active:after,.row-resizer:hover:after,.row-resizer:active:after{background:var(--brand)}.corner-resizer:after{content:"";position:absolute;right:4px;bottom:4px;width:11px;height:11px;border-right:2px solid var(--ink-4);border-bottom:2px solid var(--ink-4);border-radius:0 0 3px;opacity:.5;transition:opacity .15s,border-color .15s}.corner-resizer:hover:after,.corner-resizer:active:after{opacity:1;border-color:var(--brand)}.tree-col.is-resizing>.panel,body.is-resizing .app{transition:none!important}.tree-col.is-resizing .col-resizer:after,.tree-col.is-resizing .row-resizer:after{background:var(--brand)}.tree-col.is-resizing .corner-resizer:after{opacity:1;border-color:var(--brand)}body.is-resizing{user-select:none;-webkit-user-select:none}.app.is-snapping{transition:grid-template-columns .3s cubic-bezier(.22,1,.36,1)}.app.is-snapping .tree-col>.panel{transition:height .3s cubic-bezier(.22,1,.36,1)}.topbar{grid-area:topbar;margin:0 -16px;display:flex;align-items:center;gap:12px;padding:0 20px;background:var(--surface);border-bottom:1px solid var(--line);z-index:10}.topbar .brand{display:flex;align-items:center;gap:10px;font-weight:600;font-size:var(--fs-lg);color:var(--ink-1);letter-spacing:.2px;white-space:nowrap}.topbar .brand .logo{width:28px;height:28px;border-radius:var(--r-sm);background:var(--brand-50);border:1px solid var(--brand-100);color:var(--brand);display:inline-flex;align-items:center;justify-content:center;font-weight:600;font-size:var(--fs-sm)}.topbar .spacer{flex:1}.topbar .file-name{font-size:var(--fs-xs);color:var(--ink-3);max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:4px 10px;border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface-soft)}.btn{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);padding:7px 14px;border-radius:var(--r-sm);cursor:pointer;font-size:var(--fs-sm);display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.btn:hover{border-color:var(--brand-100);color:var(--brand);background:var(--brand-50)}.btn:active{transform:translateY(.5px)}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-600);border-color:var(--brand-600);color:#fff}.btn.secondary{background:var(--surface-soft)}.btn.ghost{background:var(--surface);border-color:var(--line-strong);color:var(--ink-2)}.btn.ghost:hover{border-color:var(--brand-100);color:var(--brand);background:var(--brand-50)}.btn.active{background:var(--brand);border-color:var(--brand);color:#fff}.btn:disabled{opacity:.45;cursor:not-allowed;background:var(--surface);border-color:var(--line);color:var(--ink-4)}.btn.disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.model-select{appearance:none;-webkit-appearance:none;border:1px solid var(--line-strong);background-color:var(--surface);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5 6 7.5 9 4.5' fill='none' stroke='%239BA2AA' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>");background-repeat:no-repeat;background-position:right 10px center;color:var(--ink-2);padding:7px 28px 7px 12px;border-radius:var(--r-sm);cursor:pointer;font-size:var(--fs-sm);max-width:220px;outline:none;transition:border-color .15s,box-shadow .15s}.model-select:hover{border-color:var(--brand-100)}.model-select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring)}.mode-toggle{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface-hover)}.mode-toggle .seg{border:none;background:transparent;color:var(--ink-3);padding:5px 14px;border-radius:var(--r-pill);cursor:pointer;font-size:var(--fs-sm);font-weight:500;white-space:nowrap;transition:background .15s,color .15s,box-shadow .15s}.mode-toggle .seg:hover{color:var(--ink-1)}.mode-toggle .seg.active{background:var(--surface);color:var(--brand);font-weight:600;box-shadow:var(--shadow-1)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);overflow:hidden;display:flex;flex-direction:column;min-height:0}.panel.tree{grid-area:tree}.right-panels{grid-area:props;display:flex;flex-direction:column;gap:14px;overflow-y:auto;overflow-x:hidden;min-height:0;padding-right:2px}.right-panels>.panel{flex:none}.panel-head{padding:14px 16px;font-weight:600;font-size:var(--fs-sm);color:var(--ink-1);border-bottom:1px solid var(--line);background:var(--surface);display:flex;align-items:center;justify-content:space-between;gap:8px;flex:none}.panel-head .count{font-size:var(--fs-xs);color:var(--ink-4);font-weight:400}.panel-close{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;border-radius:var(--r-xs);color:var(--ink-4);cursor:pointer;flex:none;transition:background .15s,color .15s}.panel-close:hover{background:var(--surface-hover);color:var(--ink-1)}.panel.collapsible{overflow:hidden}.collapsible-head{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:13px 16px;border:none;background:var(--surface);cursor:pointer;text-align:left;transition:background .15s}.collapsible-head:hover{background:var(--surface-hover)}.collapsible-title{font-size:var(--fs-sm);font-weight:600;color:var(--ink-1)}.collapsible-caret{color:var(--ink-4);flex:none;transform:rotate(-90deg);transition:transform .18s,color .15s}.panel.collapsible.open .collapsible-caret{transform:rotate(0)}.collapsible-head:hover .collapsible-caret{color:var(--ink-2)}.collapsible-body{border-top:1px solid var(--line)}.tool-body,.status-panel-body{padding:16px}.drawer-empty{padding:20px 16px;font-size:var(--fs-sm);line-height:1.8;color:var(--ink-4);text-align:center}.panel-switcher{position:sticky;bottom:0;margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:2px;padding:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-2);overflow:visible}.panel-switcher .icon-btn{width:40px;height:40px;border-radius:var(--r-sm)}.layout-toggles{display:inline-flex;gap:6px}.search-box{padding:12px 16px;border-bottom:1px solid var(--line);flex:none}.search-box input{width:100%;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);font-size:var(--fs-sm);color:var(--ink-1);background:var(--surface);outline:none;transition:border-color .15s,box-shadow .15s}.search-box input::placeholder{color:var(--ink-4)}.search-box input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring)}.tree-cat{border-bottom:1px solid var(--line)}.tree-cat>.cat-title{display:flex;align-items:center;gap:8px;padding:9px 16px;cursor:pointer;font-weight:600;-webkit-user-select:none;user-select:none;background:var(--surface)}.tree-cat>.cat-title:hover{background:var(--surface-hover)}.cat-dot{width:8px;height:8px;border-radius:3px;flex:none}.cat-title .cnt{margin-left:auto;font-size:var(--fs-2xs);color:var(--ink-4);font-weight:400}.tree-group{padding:4px 0}.tree-group .grp-title{padding:5px 16px 5px 32px;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer;display:flex;align-items:center;gap:6px}.tree-group .grp-title:hover{background:var(--surface-hover)}.tree-group .grp-title .cnt{margin-left:auto;color:var(--ink-4);font-size:var(--fs-xs)}.tree-item{padding:5px 16px 5px 44px;font-size:var(--fs-sm);cursor:pointer;display:flex;align-items:center;gap:6px;color:var(--ink-2)}.tree-item:hover{background:var(--surface-hover)}.tree-item.selected{background:var(--brand-50);color:var(--brand);font-weight:600}.tree-item .mid{color:var(--ink-4);font-size:var(--fs-xs)}.cat-chips{display:flex;flex-wrap:wrap;gap:6px;padding:12px 16px;border-bottom:1px solid var(--line);flex:none}.cat-chips .chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface);font-size:var(--fs-xs);color:var(--ink-2);cursor:pointer;transition:border-color .15s,background .15s,color .15s}.cat-chips .chip:hover{border-color:var(--brand-100);background:var(--brand-50);color:var(--brand)}.cat-chips .chip i{width:7px;height:7px;border-radius:50%;flex:none}.cat-chips .chip b{font-weight:500;color:var(--ink-4);font-variant-numeric:tabular-nums}.cat-chips .chip.off{opacity:.5;text-decoration:line-through}.tree-list{flex:1;overflow-y:auto;overflow-x:auto;min-height:0}.tree-list .list-head{display:grid;grid-template-columns:var(--tree-cols);gap:8px;align-items:center;padding:8px 16px;font-size:var(--fs-2xs);letter-spacing:.04em;color:var(--ink-4);border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface);z-index:1;white-space:nowrap}.tree-list .list-head .col-caret{width:14px}.tree-list .list-head .col-idx,.tree-list .list-head .col-cnt{text-align:center}.tree-list .list-head .col-extra.num{text-align:right}.tree-list .list-head .col-edit{width:26px}.mark-block{border-bottom:1px solid var(--line-soft)}.mark-row{display:grid;grid-template-columns:var(--tree-cols);gap:8px;align-items:center;padding:10px 16px;background:var(--surface);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .12s}.mark-row:hover{background:var(--surface-hover)}.mark-row.selected{background:var(--brand-50);box-shadow:inset 2px 0 0 var(--brand)}.mark-row.selected .mark-name{color:var(--brand)}.mark-row.current{background:var(--surface-hover);box-shadow:inset 2px 0 0 var(--line-strong)}.mark-row.current .mark-name{color:var(--ink-1);font-weight:600}.mark-row .caret{width:14px;flex:none;font-size:8px;color:var(--ink-4);transition:transform .18s}.mark-row .caret.open{transform:rotate(90deg)}.mark-row .mark-idx{min-width:0;text-align:center;font-size:var(--fs-2xs);color:var(--ink-4);font-variant-numeric:tabular-nums}.mark-row .mark-name{min-width:0;font-weight:600;font-size:var(--fs-sm);color:var(--ink-1);display:flex;align-items:baseline;gap:6px;overflow:hidden;white-space:nowrap}.mark-row .mark-name:hover{color:var(--brand)}.mark-row .mark-name em{font-style:normal;font-weight:400;font-size:var(--fs-xs);color:var(--ink-4);flex:none;overflow:hidden;text-overflow:ellipsis}.mark-row .mark-extra{min-width:0;font-size:var(--fs-xs);color:var(--ink-2);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mark-row .mark-extra.num{text-align:right}.mark-row .mark-extra.empty{color:var(--line-strong)}.mark-row .mark-edit{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:var(--r-sm, 6px);background:transparent;color:var(--ink-4);cursor:pointer;opacity:0;transition:opacity .12s,background .12s,color .12s}.mark-row:hover .mark-edit,.mark-row .mark-edit:focus-visible{opacity:1}.mark-row .mark-edit:hover{background:var(--brand-50);color:var(--brand)}.mark-row span.mark-edit{opacity:0}.badge-count{flex:none;min-width:32px;text-align:center;padding:2px 8px;border-radius:var(--r-pill);background:var(--surface-hover);color:var(--ink-3);font-size:var(--fs-xs);font-weight:500;font-variant-numeric:tabular-nums}.badge-count.ghost{background:transparent;border:1px dashed var(--line-strong);color:var(--ink-4);font-weight:400}.part-group{padding:2px 0 8px;background:var(--surface-soft)}.part-row{display:grid;grid-template-columns:var(--tree-cols);gap:8px;align-items:center;padding:7px 16px;cursor:pointer;transition:background .12s}.part-row:hover{background:var(--surface-hover)}.part-row.selected{background:var(--brand-50)}.part-row.selected .part-label{color:var(--brand);font-weight:600}.part-row.focus-all{color:var(--ink-3);font-size:var(--fs-sm)}.part-row .part-idx{width:20px;height:20px;border:1px solid var(--line-strong);border-radius:50%;background:var(--surface);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);color:var(--ink-4);font-variant-numeric:tabular-nums}.part-row .part-idx.dot{border-style:dashed}.part-row .part-label{min-width:0;font-size:var(--fs-sm);color:var(--ink-2);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.part-row .part-extra{min-width:0;font-size:var(--fs-2xs);color:var(--ink-3);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.part-row .part-extra.num{text-align:right}.part-row .part-extra.empty{color:var(--line-strong)}.more-btn{padding:12px 16px;text-align:center;font-size:var(--fs-sm);color:var(--brand);cursor:pointer;border-bottom:1px solid var(--line);background:var(--surface)}.more-btn:hover{background:var(--brand-50)}.canvas-wrap{grid-area:canvas;position:relative;background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);overflow:hidden;min-height:0}#viewer-container{position:absolute;inset:0}#viewer-container canvas{display:block;outline:none}.canvas-toolbar{position:absolute;top:14px;left:14px;display:flex;gap:2px;z-index:5;flex-wrap:wrap;max-width:calc(100% - 28px);padding:5px;background:#ffffffeb;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-2)}.view-btn{height:32px;min-width:32px;padding:0;border:none;border-radius:var(--r-xs);background:transparent;cursor:pointer;font-size:var(--fs-sm);font-weight:500;color:var(--ink-2);transition:background .15s,color .15s}.view-btn:hover{background:var(--surface-hover);color:var(--ink-1)}.view-btn.wide{padding:0 12px}.view-btn.active{background:var(--brand);color:#fff}.view-btn:disabled{opacity:.4;cursor:not-allowed;background:transparent}.view-nav{position:absolute;top:12px;right:12px;z-index:6;width:132px;height:126px;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;pointer-events:none}.view-nav button{pointer-events:auto}.vn-home{position:absolute;left:-4px;top:-4px;z-index:5;width:32px;height:32px;display:grid;place-items:center;padding:0;border:0;border-radius:9px;background:transparent;color:#54749b;cursor:pointer;transition:color .15s,background .15s}.vn-home:hover{color:var(--brand-600);background:#3e5a7617}.vn-home:focus-visible{outline:2px solid var(--brand);outline-offset:1px}.vn-stage{position:absolute;inset:0;perspective:620px}.vn-ring{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.vn-ring-band{fill:none;stroke:url(#vnRingGrad);stroke-width:13}.vn-ring-edge{fill:none;stroke:#ffffff29;stroke-width:13;stroke-dasharray:2 999}.vn-hotspots{position:absolute;inset:0;pointer-events:none}.vn-hot{position:absolute;left:0;top:0;width:30px;height:24px;display:grid;place-items:center;padding:0;border:0;border-radius:6px;background:transparent;color:#ffffffa8;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:var(--fs-2xs);font-weight:500;line-height:1;letter-spacing:.5px;cursor:pointer;pointer-events:auto;text-shadow:0 1px 2px rgba(0,0,0,.35);transition:color .15s,background .15s}.vn-hot:hover{color:#fff;background:#ffffff38}.vn-hot:focus-visible{outline:2px solid #9fc0dd;outline-offset:1px}.vn-cube{position:absolute;left:66px;top:60px;width:54px;height:54px;margin-left:-27px;margin-top:-27px;transform-style:preserve-3d;will-change:transform}.vn-face{position:absolute;inset:0;display:grid;place-items:center;padding:0;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:var(--fs-lg);font-weight:700;line-height:1;color:#3b444e;background:#fff;border:1.4px solid #4a545f;cursor:pointer;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:background .15s,color .15s}.vn-face:hover{background:#e9f1f8;color:var(--brand-600)}.vn-face:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}.vn-f-front{transform:translateZ(27px);background:#fafbfc}.vn-f-back{transform:rotateY(180deg) translateZ(27px);background:#f7f9fa}.vn-f-right{transform:rotateY(90deg) translateZ(27px);background:#f4f6f8}.vn-f-left{transform:rotateY(-90deg) translateZ(27px);background:#f4f6f8}.vn-f-top{transform:rotateX(90deg) translateZ(27px);background:#fff}.vn-f-bottom{transform:rotateX(-90deg) translateZ(27px);background:#f2f4f6}.vn-more{position:absolute;right:0;bottom:2px;z-index:5;width:24px;height:22px;display:grid;place-items:center;padding:0;border:0;border-radius:6px;background:transparent;color:#6b7683;cursor:pointer;transition:color .15s,background .15s,transform .15s}.vn-more:hover{color:var(--brand-600);background:#3e5a7617}.vn-more.open{color:var(--brand-600);transform:rotate(180deg)}.vn-more:focus-visible{outline:2px solid var(--brand);outline-offset:1px}.vn-menu-mask{position:fixed;left:-200vw;top:-200vh;width:500vw;height:500vh;z-index:40;pointer-events:auto}.vn-menu{position:absolute;top:calc(100% - 6px);right:0;z-index:41;display:grid;grid-template-columns:1fr 1fr;gap:2px;padding:6px;min-width:148px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-3);animation:ctxIn .12s ease-out}.vn-menu-item{padding:7px 10px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--ink-2);font-family:inherit;font-size:var(--fs-sm);text-align:left;cursor:pointer;transition:background .12s,color .12s}.vn-menu-item:hover{background:var(--brand-50);color:var(--brand-600)}.anno{position:absolute;left:0;top:0;transform:translate(-50%,calc(-100% - 14px));display:inline-flex;align-items:center;gap:8px;padding:5px 10px;border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-2);font-size:var(--fs-sm);font-weight:600;color:var(--ink-1);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;z-index:8}.anno:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:14px;background:var(--line-strong)}.anno:before{content:"";position:absolute;left:50%;top:100%;margin-top:14px;width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%)}.anno-tag{font-size:var(--fs-2xs);font-weight:500;padding:1px 7px;border-radius:var(--r-pill);color:#fff}.anno-num{letter-spacing:.3px}.anno.pt{border-color:var(--clay-100)}.anno.pt .anno-tag{background:var(--clay)}.anno.pt:before{background:var(--clay)}.anno.mk{border-color:var(--brand-100)}.anno.mk .anno-tag{background:var(--brand)}.anno.mk:before{background:var(--brand)}.iso-banner{position:absolute;top:14px;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:10px;padding:6px 8px 6px 14px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--line);color:var(--ink-2);font-size:var(--fs-sm);box-shadow:var(--shadow-2);z-index:8}.iso-banner .iso-dot{width:7px;height:7px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 3px var(--brand-ring);flex:none}.mini-btn{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);font-size:var(--fs-xs);padding:3px 11px;border-radius:var(--r-pill);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.mini-btn:hover{border-color:var(--brand-100);background:var(--brand-50);color:var(--brand)}.canvas-hint{position:absolute;bottom:14px;left:14px;display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-xs);color:var(--ink-3);background:#ffffffeb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line);padding:6px 12px;border-radius:var(--r-sm);box-shadow:var(--shadow-1);z-index:5;max-width:calc(100% - 28px)}.canvas-hint-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:var(--r-pill);background:transparent;color:var(--ink-4);cursor:pointer;transition:background .15s,color .15s}.canvas-hint-close:hover{background:var(--surface-hover);color:var(--ink-1)}.loading-mask{position:absolute;inset:0;background:#f6f7f9e6;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:20;color:var(--ink-2);font-size:var(--fs-sm)}.spinner{width:32px;height:32px;border:2.5px solid var(--line-strong);border-top-color:var(--brand);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.progress{width:240px;height:4px;background:var(--line-strong);border-radius:var(--r-pill);overflow:hidden}.progress>i{display:block;height:100%;background:var(--brand);border-radius:var(--r-pill);transition:width .2s}.loading-text{max-width:min(420px,80vw);text-align:center}.loading-pct{margin-top:-6px;font-size:var(--fs-xs);font-weight:600;color:var(--brand);font-variant-numeric:tabular-nums}.empty-state{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--ink-3);text-align:center;padding:32px}.empty-state h2{margin:0;font-size:var(--fs-lg);font-weight:600;color:var(--ink-1)}.empty-state p{margin:0;font-size:var(--fs-sm);max-width:380px;line-height:1.7}.empty-state-hint{font-size:var(--fs-xs)!important;color:var(--ink-4)!important}.empty-state .btn{margin-top:6px}.prop-section{padding:4px 16px 12px}.prop-row{display:flex;padding:9px 0;border-bottom:1px dashed var(--line);gap:12px;font-size:var(--fs-sm)}.prop-row:last-child{border-bottom:none}.prop-row .k{width:92px;flex:none;color:var(--ink-4)}.prop-row .v{flex:1;color:var(--ink-1);word-break:break-all;font-weight:500;min-width:0}.prop-badge{display:inline-block;padding:1px 8px;border-radius:var(--r-pill);font-size:var(--fs-2xs);font-weight:600;color:#fff}.prop-title{font-size:var(--fs-md);font-weight:600;color:var(--ink-1);padding:16px 16px 4px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.prop-title .tag{font-size:var(--fs-2xs);padding:2px 8px;border-radius:var(--r-xs);background:var(--surface-hover);color:var(--ink-3);font-weight:500}.prop-primary{display:flex;align-items:baseline;gap:12px;margin:10px 16px 0;padding:12px 14px;border-radius:var(--r);border:1px solid var(--line)}.prop-primary .lbl{font-size:var(--fs-xs);font-weight:500;color:#fff;padding:2px 10px;border-radius:var(--r-pill);flex:none}.prop-primary .val{font-size:var(--fs-lg);font-weight:600;letter-spacing:.3px;font-variant-numeric:tabular-nums;word-break:break-all}.prop-primary.pt{background:var(--clay-50);border-color:var(--clay-100)}.prop-primary.pt .lbl{background:var(--clay)}.prop-primary.pt .val{color:#6e5335}.prop-primary.mk{background:var(--brand-50);border-color:var(--brand-100)}.prop-primary.mk .lbl{background:var(--brand)}.prop-primary.mk .val{color:var(--brand-600)}.sub-title{font-size:var(--fs-xs);font-weight:600;color:var(--ink-4);letter-spacing:.06em;padding:16px 16px 2px}.muted{color:var(--ink-3)}.modal-overlay{position:fixed;inset:0;background:#17191c47;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}.modal{background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-3);width:400px;max-width:100%;max-height:calc(100vh - 40px);overflow-y:auto}.modal-header{padding:22px 24px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.modal-header h2{margin:0;font-size:var(--fs-lg);font-weight:600;color:var(--ink-1)}.modal-close{border:none;background:none;font-size:var(--fs-xl);line-height:1;cursor:pointer;color:var(--ink-4);padding:4px;border-radius:var(--r-xs)}.modal-close:hover{color:var(--ink-1);background:var(--surface-hover)}.modal-form{padding:8px 24px 24px}.form-group{margin-bottom:16px}.form-group label{display:block;font-size:var(--fs-sm);font-weight:500;color:var(--ink-3);margin-bottom:6px}.form-group input{width:100%;padding:10px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);font-size:var(--fs-md);color:var(--ink-1);outline:none;transition:border-color .15s,box-shadow .15s}.form-group input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring)}.form-error{background:var(--danger-50);border:1px solid #f0d8d6;color:var(--danger);padding:10px 12px;border-radius:var(--r-sm);font-size:var(--fs-sm);margin-bottom:16px}.btn-block{width:100%;padding:11px;font-size:var(--fs-md)}.modal-footer{padding:16px 24px 22px;border-top:1px solid var(--line);text-align:center;font-size:var(--fs-sm);color:var(--ink-3)}.link-btn{border:none;background:none;color:var(--brand);cursor:pointer;font-size:var(--fs-sm);padding:0;margin-left:4px}.link-btn:hover{text-decoration:underline}.mock-accounts{padding:4px 24px 22px;font-size:var(--fs-xs);color:var(--ink-4)}.mock-accounts p{margin:0 0 8px;font-weight:500}.mock-accounts ul{margin:0;padding:0 0 0 18px;line-height:1.9}.user-menu{position:relative}.user-menu-btn{display:flex;align-items:center;gap:8px;padding:5px 10px 5px 6px;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:var(--surface);color:var(--ink-2);cursor:pointer;font-size:var(--fs-sm);transition:border-color .15s,background .15s}.user-menu-btn:hover{border-color:var(--brand-100);background:var(--brand-50)}.user-avatar{width:26px;height:26px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:var(--fs-xs);font-weight:600;flex:none}.role-badge{font-size:var(--fs-2xs);color:var(--ink-3);background:var(--surface-hover);border-radius:var(--r-pill);padding:1px 8px}.user-dropdown{position:absolute;top:calc(100% + 8px);right:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-3);min-width:172px;z-index:100;padding:6px;overflow:hidden}.user-dropdown-item{display:block;width:100%;padding:9px 12px;border:none;background:none;border-radius:var(--r-xs);text-align:left;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer}.user-dropdown-item:hover{background:var(--surface-hover)}.user-dropdown-item.danger{color:var(--danger)}.user-dropdown-item.danger:hover{background:var(--danger-50)}.panel.status{overflow:visible}.status-legend{border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;background:var(--surface-soft)}.status-legend .sub-title{padding:0 0 6px}.status-item{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:var(--fs-sm)}.status-dot{width:10px;height:10px;border-radius:50%;flex:none}.status-label{flex:1;color:var(--ink-2)}.status-count{color:var(--ink-4);font-size:var(--fs-xs);font-variant-numeric:tabular-nums}.status-actions{margin-top:18px}.status-btn-group{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.status-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink-2);font-size:var(--fs-sm);cursor:pointer;transition:background .15s,border-color .15s,color .15s}.status-btn:hover{background:var(--surface-hover)}.status-btn.active{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand-600);font-weight:500}.status-hint{margin-top:10px;padding:10px 12px;background:var(--brand-50);border-left:2px solid var(--brand);border-radius:var(--r-xs);font-size:var(--fs-xs);color:var(--ink-3);line-height:1.7}.status-excel{margin-top:18px}.excel-btns{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}.status-controls{display:flex;gap:8px;margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}.status-controls .btn{flex:1}.drawer-section{padding:16px;border-bottom:1px solid var(--line)}.drawer-section .field-label{font-size:var(--fs-xs);font-weight:600;letter-spacing:.06em;color:var(--ink-4);margin-bottom:8px}.drawer-section .model-select{width:100%;max-width:none;font-size:var(--fs-lg)}.drawer-actions{display:flex;gap:8px;flex-wrap:wrap}.page-toggle{display:inline-flex;gap:2px;padding:3px;background:var(--surface-soft);border:1px solid var(--line);border-radius:var(--r-sm)}.page-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border:none;border-radius:var(--r-xs);background:transparent;color:var(--ink-3);font-size:var(--fs-sm);cursor:pointer;transition:background .15s,color .15s}.page-btn:hover{background:var(--surface-hover);color:var(--ink-1)}.page-btn.active{background:var(--surface);color:var(--brand);font-weight:600;box-shadow:var(--shadow-1)}.icon-btn{position:relative;width:36px;height:36px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--r-sm);background:transparent;color:var(--ink-3);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.icon-btn:hover:not(:disabled){background:var(--surface-hover);color:var(--ink-1)}.icon-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--brand-ring)}.icon-btn.active{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand)}.icon-btn:disabled{opacity:.35;cursor:not-allowed}.icon-btn-quiet{border-color:var(--line-strong);background:var(--surface);color:var(--ink-4)}.icon-btn-quiet:hover:not(:disabled){border-color:var(--brand-100);background:var(--brand-50);color:var(--brand)}.icon-btn-quiet.active{border-color:var(--brand-100);background:var(--brand-50);color:var(--brand)}.icon-btn:after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%,4px);padding:5px 9px;border-radius:var(--r-xs);background:#17191cf0;color:#fff;font-size:var(--fs-xs);line-height:1.4;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .14s,transform .14s;z-index:60}.icon-btn[data-tip-pos=down]:after{bottom:auto;top:calc(100% + 8px);transform:translate(-50%,-4px)}.icon-btn:hover:after,.icon-btn:focus-visible:after{opacity:1;transform:translate(-50%)}.icon-btn:disabled:after{display:none}.viewport-banners{position:absolute;top:14px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;z-index:8;max-width:calc(100% - 200px)}.viewport-banners .iso-banner{position:static;top:auto;left:auto;transform:none}.canvas-hint.mobile{left:12px;right:12px;bottom:calc(78px + env(safe-area-inset-bottom));justify-content:center;font-size:var(--fs-xs);text-align:center}.app.is-status{grid-template-columns:minmax(0,5fr) minmax(0,7fr);grid-template-rows:60px auto minmax(0,1fr);grid-template-areas:"topbar topbar" "dash   sched" "canvas canvas"}@media(max-width:1023px)and (min-width:769px){.app.is-status{grid-template-columns:minmax(0,1fr);grid-template-rows:60px auto auto minmax(0,1fr);grid-template-areas:"topbar" "dash" "sched" "canvas"}.app.is-status .dash-chips{grid-template-columns:repeat(3,minmax(0,1fr))}.sched-body{max-height:200px}}.dash{grid-area:dash;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);padding:18px 20px 14px;min-width:0}.dash{grid-area:dash;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);padding:12px 16px;min-width:0}.dash-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--line);margin-bottom:10px}.dash-head-left{display:flex;align-items:center;gap:14px;flex-wrap:wrap;min-width:0}.dash-head-right{display:flex;align-items:center;gap:10px;flex:none}.dash-toggle{padding:5px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-soft);color:var(--ink-3);font-size:var(--fs-xs);cursor:pointer}.dash-toggle:hover{background:#fff;color:var(--ink-1)}.dash-title{margin:0;font-size:var(--fs-md);font-weight:600;color:var(--ink-1)}.dash-legend{display:inline-flex;align-items:center;gap:12px;font-size:var(--fs-xs);color:var(--ink-3)}.dash-legend-item{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.dash-legend-item i{width:8px;height:8px;border-radius:50%;flex:none}.dash-mini{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--ink-3);white-space:nowrap}.dash-mini strong{color:var(--ink-1);font-weight:600}.dash-mini em{font-style:normal;color:var(--ink-4)}.dash-row{display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap}.dash-row-label{font-size:var(--fs-2xs);letter-spacing:.05em;color:var(--ink-4);text-transform:uppercase;flex:none;align-self:center}.dash-chips{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;flex:1;min-width:0}.dash-chip{position:relative;overflow:hidden;display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;column-gap:6px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface-soft);text-align:left;font-size:var(--fs-xs);color:var(--ink-1);transition:border-color .12s;isolation:isolate;min-width:0}.dash-chip:before{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--p, 0%);background:var(--c, var(--ink-4));opacity:.16;transition:width .35s;z-index:-1}.dash-chip.started{border-color:color-mix(in srgb,var(--c, var(--ink-4)) 45%,var(--line))}.dash-chip-dot{width:8px;height:8px;border-radius:50%;background:var(--c, var(--ink-4));flex:none;justify-self:start}.dash-chip-label{font-size:var(--fs-xs);color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-chip-num{font-size:var(--fs-md);font-weight:600;color:var(--ink-1);font-variant-numeric:tabular-nums;text-align:right}.dash-chip-pct{font-size:var(--fs-2xs);color:var(--ink-4);font-variant-numeric:tabular-nums;margin-left:2px}.dash-cum-tip{color:var(--ink-3);margin-left:6px;align-self:center;flex:none;white-space:nowrap}.dash-cum-tip strong{color:var(--ink-1);font-weight:600;margin-left:2px}.dash-note{margin-top:6px;font-size:var(--fs-xs);color:var(--ink-4);text-align:center}@media(max-width:768px){.dash{padding:10px 12px}.dash-head{padding-bottom:8px;margin-bottom:8px}.dash-title{font-size:var(--fs-sm)}.dash-legend{display:none}.dash-chips{grid-template-columns:repeat(2,minmax(0,1fr))}.dash-row{gap:10px}}@media(max-width:420px){.dash-chips{grid-template-columns:repeat(2,minmax(0,1fr))}}@keyframes sheetIn{0%{transform:translateY(100%)}to{transform:translateY(0)}}.ctx-menu{position:absolute;min-width:214px;max-width:260px;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-3);z-index:30;animation:ctxIn .12s ease-out}@keyframes ctxIn{0%{opacity:0;transform:translateY(-3px) scale(.99)}to{opacity:1;transform:none}}.ctx-head{display:flex;align-items:center;gap:8px;padding:7px 9px 6px}.ctx-title{flex:1;min-width:0;font-size:var(--fs-sm);font-weight:600;color:var(--ink-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ctx-close{width:28px;height:28px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:var(--r-xs);background:var(--surface);color:var(--ink-3);cursor:pointer}.ctx-meta{display:flex;flex-wrap:wrap;gap:6px;padding:0 9px 8px}.ctx-meta span{font-size:var(--fs-2xs);color:var(--ink-3);background:var(--surface-soft);border:1px solid var(--line);border-radius:var(--r-pill);padding:1px 8px}.ctx-list{display:flex;flex-direction:column;gap:1px}.ctx-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:none;border-radius:var(--r-xs);background:transparent;color:var(--ink-2);font-size:var(--fs-sm);text-align:left;cursor:pointer;transition:background .12s,color .12s}.ctx-item:hover:not(:disabled){background:var(--brand-50);color:var(--brand-600)}.ctx-item.danger:hover:not(:disabled){background:var(--danger-50);color:var(--danger)}.ctx-item:disabled{opacity:.4;cursor:not-allowed}.ctx-icon{display:inline-flex;color:var(--ink-4);flex:none}.ctx-item:hover:not(:disabled) .ctx-icon{color:inherit}.ctx-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ctx-sep{height:1px;margin:6px 4px;background:var(--line)}.ctx-section-title{padding:2px 10px 6px;font-size:var(--fs-2xs);letter-spacing:.06em;color:var(--ink-4)}.ctx-status-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}.ctx-status-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 10px;border:1px solid transparent;border-radius:var(--r-xs);background:transparent;color:var(--ink-2);font-size:var(--fs-sm);cursor:pointer;transition:background .12s,border-color .12s}.ctx-status-btn:hover{background:var(--surface-hover);border-color:var(--line)}.ctx-status-btn i{width:10px;height:10px;border-radius:50%;flex:none}.ctx-status-btn.current{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand-600);font-weight:500}.ctx-cur{margin-left:8px;font-size:var(--fs-2xs);letter-spacing:0;color:var(--brand)}.ctx-advance{display:flex;align-items:center;gap:8px;width:100%;margin:0 0 4px;padding:9px 10px;border:1px solid var(--brand-100);border-radius:var(--r-xs);background:var(--brand-50);color:var(--brand-600);font-size:var(--fs-sm);font-weight:500;cursor:pointer;transition:background .12s,border-color .12s}.ctx-advance:hover{background:var(--brand-100);border-color:var(--brand)}.ctx-advance-dot{width:10px;height:10px;border-radius:50%;flex:none}.ctx-overlay{position:fixed;inset:0;background:#17191c4d;z-index:300;display:flex;align-items:flex-end}.ctx-sheet{width:100%;background:var(--surface);border-radius:16px 16px 0 0;padding:10px 8px calc(12px + env(safe-area-inset-bottom));box-shadow:var(--shadow-3);animation:sheetIn .22s cubic-bezier(.22,1,.36,1);max-height:78vh;overflow-y:auto}.ctx-grabber,.sheet-grabber{display:block;width:38px;height:4px;margin:2px auto 8px;border-radius:var(--r-pill);background:var(--line-strong)}.bottom-bar{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));z-index:200;display:flex;align-items:center;justify-content:space-around;gap:2px;padding:6px;background:#fffffff5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-2);overflow:visible}.bottom-bar .icon-btn{flex:1 1 0;min-width:0;width:auto;height:52px;flex-direction:column;gap:1px;padding:5px 2px;border-radius:var(--r);font-size:var(--fs-2xs);line-height:1.15}.bottom-bar .icon-btn:before{content:attr(data-tip);font-size:var(--fs-2xs);opacity:.9;white-space:nowrap;overflow:hidden;max-width:100%;text-overflow:ellipsis}.bottom-bar .icon-btn:after{display:none}.sheet-overlay{position:fixed;inset:0;background:#17191c47;z-index:190;display:flex;align-items:flex-end}.sheet{width:100%;max-height:66vh;display:flex;flex-direction:column;background:var(--surface);border-radius:16px 16px 0 0;box-shadow:var(--shadow-3);animation:sheetIn .22s cubic-bezier(.22,1,.36,1);padding-bottom:calc(80px + env(safe-area-inset-bottom))}.sheet-head{position:relative;display:flex;align-items:center;gap:10px;padding:12px 14px 10px;border-bottom:1px solid var(--line)}.sheet-head .sheet-grabber{position:absolute;top:5px;left:50%;transform:translate(-50%);margin:0}.sheet-title{flex:1;font-size:var(--fs-md);font-weight:600;color:var(--ink-1)}.sheet-close{width:32px;height:32px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink-3);cursor:pointer}.sheet-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.sheet-body>.panel{border:none;border-radius:0;box-shadow:none}.more-body{display:flex;flex-direction:column}.more-body .btn{display:inline-flex;align-items:center;gap:8px}.status-panel-body .sub-title,.status-actions-block .sub-title{padding:0 0 4px}.status-legend .sub-title{display:flex;align-items:center;gap:8px}.sub-title-extra{margin-left:auto;font-weight:400;letter-spacing:0;color:var(--ink-4)}.status-count em{margin-left:6px;font-style:normal;color:var(--ink-4);opacity:.75}.status-bar{display:flex;height:6px;margin-top:10px;border-radius:var(--r-pill);background:#eceff2;overflow:hidden}.status-bar i{display:block;height:100%;transition:width .3s ease}.stage-cum{margin-top:14px}.stage-cum-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.stage-pill{display:inline-flex;align-items:center;gap:6px;padding:5px 9px;border:1px solid var(--line);border-left:3px solid var(--line-strong);border-radius:var(--r-xs);background:var(--surface);font-size:var(--fs-xs);color:var(--ink-3);white-space:nowrap}.stage-pill-name{color:var(--ink-2)}.stage-pill strong{color:var(--ink-1);font-variant-numeric:tabular-nums}.stage-pill em{font-style:normal;color:var(--ink-4);font-variant-numeric:tabular-nums}.stage-pill.zero{opacity:.55}.stage-pill.zero strong{color:var(--ink-3)}.link-btn{margin-left:8px;border:none;background:none;padding:0;color:var(--brand);font-size:var(--fs-xs);cursor:pointer;text-decoration:underline}.dash-entry{display:flex;align-items:center;gap:10px;width:100%;margin-bottom:14px;padding:11px 14px;border:1px solid var(--brand-100);border-radius:var(--r);background:var(--brand-50);color:var(--brand-600);font-size:var(--fs-sm);font-weight:600;cursor:pointer;text-align:left;transition:background .15s,box-shadow .15s}.dash-entry:hover{background:#e6eef5;box-shadow:var(--shadow-1)}.dash-entry-sub{margin-left:auto;font-size:var(--fs-xs);font-weight:400;color:var(--ink-4)}.props-empty{font-size:var(--fs-sm);line-height:1.9;color:var(--ink-4)}.props-body .prop-title{display:flex;align-items:center;gap:8px}.status-actions-block .status-hint.muted{background:var(--surface-soft);border-left-color:var(--line-strong)}.share-generate{width:100%}.share-block{margin-top:12px}.share-row{display:flex;gap:8px;margin-top:6px}.share-input{flex:1;min-width:0;padding:7px 9px;font-size:var(--fs-xs);border:1px solid var(--line-strong);border-radius:var(--r-xs);background:var(--surface-soft);color:var(--ink-2)}.btn.ok{border-color:var(--success);background:var(--success);color:#fff}.share-qr{margin-top:14px;text-align:center}.share-qr img{width:152px;height:152px;border:1px solid var(--line);border-radius:var(--r);background:#fff}.share-upload{margin-top:12px;padding:10px 12px;background:var(--brand-50);border-left:2px solid var(--brand);border-radius:var(--r-xs);display:flex;flex-direction:column;gap:8px}.share-upload .progress{width:100%}.share-upload-text{font-size:var(--fs-xs);color:var(--ink-2)}.share-upload-hint{font-size:var(--fs-2xs);color:var(--ink-4)}.status-hint.warn{background:var(--warn-50);border-left-color:var(--warn);color:var(--warn)}.share-blocked{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:24px;background:#f6f7f9f0;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.share-blocked-card{max-width:min(520px,100%);padding:22px 24px;background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--danger);border-radius:var(--r-lg);box-shadow:var(--shadow-2);text-align:left}.share-blocked-card h2{margin:0 0 10px;font-size:var(--fs-lg);color:var(--ink-1)}.share-blocked-card p{margin:0 0 10px;font-size:var(--fs-sm);color:var(--ink-2);line-height:1.75;word-break:break-all}.share-blocked-card .mono{padding:8px 10px;background:var(--surface-soft);border-left:2px solid var(--line-strong);border-radius:var(--r-xs);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--fs-xs);color:var(--ink-3)}.share-blocked-hint{padding:10px 12px;background:var(--danger-50);border-radius:var(--r-xs);font-size:var(--fs-xs)!important;color:var(--ink-3)}.share-blocked-card .btn{margin-top:4px}@media(max-width:768px){.app{grid-template-rows:56px minmax(0,1fr);grid-template-columns:1fr;grid-template-areas:"topbar" "canvas";gap:10px;padding:0 12px calc(74px + env(safe-area-inset-bottom))}.app.is-status{grid-template-rows:56px auto auto 55dvh;grid-template-columns:1fr;grid-template-areas:"topbar" "dash" "sched" "canvas";height:auto;min-height:100dvh;overflow-y:auto}.topbar{margin:0 -12px;padding:0 14px;gap:8px;flex-wrap:nowrap}.topbar .brand{font-size:var(--fs-md);gap:8px}.topbar .brand-text{font-size:var(--fs-md)}.topbar .brand .logo{width:26px;height:26px}.topbar .file-name,.topbar .model-select,.topbar .upload-btn{display:none}.mode-toggle .seg{padding:5px 12px;font-size:var(--fs-sm)}.user-menu-btn .u-name,.user-menu-btn .role-badge{display:none}.canvas-wrap{border-radius:var(--r-lg);min-height:calc(100dvh - 80px - env(safe-area-inset-bottom))}.canvas-toolbar{inset:12px auto auto 12px;transform:none;max-width:calc(100% - 126px);justify-content:flex-start;border-radius:var(--r)}.canvas-toolbar .icon-btn{width:34px;height:34px}.view-nav{top:6px;right:6px;transform:scale(.82);transform-origin:top right}.viewport-banners{top:auto;bottom:48px;max-width:calc(100% - 24px);font-size:var(--fs-xs)}.dash{padding:14px;display:flex;flex-direction:column;gap:14px}.dash-inner{display:contents}.dash-overview{order:1;gap:14px}.dash-cards-wrap{order:2}.dash-overview,.dash-cards-wrap{align-self:stretch}.dash-pipeline{order:3;margin-top:0}.dash-side{order:4}.dash-legend{order:5;margin-top:0}.ring,.ring svg{width:96px;height:96px}.dash-cards{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}.dash-card-value strong{font-size:var(--fs-xl)}.dash-pipeline-steps{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.pipe-step+.pipe-step:before{display:none}.dash-pipeline-flow{font-size:var(--fs-2xs)}.dash-side{border-left:none;padding-left:0;padding-top:14px;border-top:1px solid var(--line)}.dash-legend{gap:12px;font-size:var(--fs-xs)}input[type=text],input[type=password],select,textarea{font-size:var(--fs-lg)}.modal-overlay{padding:0;align-items:flex-end}.modal{width:100%;max-width:100%;max-height:92vh;border-radius:16px 16px 0 0;border-bottom:none}.anno{font-size:var(--fs-md);padding:6px 11px}.panel-head{padding:13px 16px}.search-box,.cat-chips,.mark-row{padding:12px 16px}.part-row{padding:9px 16px 9px 28px}.more-btn{padding:14px 16px}.status-btn{padding:9px 14px}.ctx-item,.ctx-status-btn{padding:12px}.sheet-body .panel-head{padding:12px 14px}}@media(min-width:769px)and (max-width:1180px){.app{grid-template-columns:var(--tree-w, 264px) minmax(0,1fr) 300px;gap:12px;padding:0 12px 12px}.topbar{margin:0 -12px;padding:0 16px}.topbar .file-name{max-width:180px}}@media(min-width:1600px){.app{grid-template-columns:var(--tree-w, 320px) minmax(0,1fr) 380px}}@media(max-width:400px){.topbar .brand-text{display:none}.bottom-bar .icon-btn{height:48px;font-size:var(--fs-2xs)}}.mx-overlay{position:fixed;inset:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:90;padding:16px}.mx-modal{width:420px;max-width:100%;max-height:90vh;overflow:auto;background:var(--surface);border-radius:var(--r-lg, 14px);box-shadow:0 18px 50px #0f172a40;display:flex;flex-direction:column}.mx-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line)}.mx-title{font-weight:600;font-size:var(--fs-md);color:var(--ink-1);display:flex;align-items:baseline;gap:8px}.mx-title em{font-style:normal;font-size:var(--fs-sm);font-weight:500;color:var(--brand)}.mx-close{border:none;background:transparent;color:var(--ink-4);cursor:pointer;padding:4px;border-radius:6px}.mx-close:hover{background:var(--surface-hover);color:var(--ink-2)}.mx-body{padding:12px 16px 4px}.mx-hint{font-size:var(--fs-xs);color:var(--ink-4);margin-bottom:10px}.mx-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px}.mx-field{display:flex;flex-direction:column;gap:4px}.mx-field:nth-last-child(-n+1):nth-child(odd){grid-column:1 / -1}.mx-label{font-size:var(--fs-xs);color:var(--ink-3);display:flex;align-items:center;gap:6px}.mx-type{font-style:normal;font-size:var(--fs-2xs);color:var(--ink-4);border:1px solid var(--line);border-radius:var(--r-pill);padding:0 6px}.mx-field input,.mx-field textarea{border:1px solid var(--line-strong);border-radius:8px;padding:7px 10px;font-size:var(--fs-sm);color:var(--ink-1);background:var(--surface);font-family:inherit;resize:vertical}.mx-field input:focus,.mx-field textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-50)}.mx-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 16px}@media(max-width:768px){.mx-grid{grid-template-columns:1fr}.mx-field:nth-last-child(-n+1):nth-child(odd){grid-column:auto}}.search-row{display:flex;align-items:flex-start;gap:8px;position:relative}.search-row .search-box{flex:1;min-width:0}.field-picker{position:relative;flex:none;padding-top:1px}.fp-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface);color:var(--ink-3);cursor:pointer}.fp-btn:hover,.fp-btn.open{color:var(--brand);border-color:var(--brand);background:var(--brand-50)}.fp-pop{position:absolute;top:36px;right:0;width:176px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px #0f172a29;z-index:40;overflow:hidden}.fp-head{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;font-size:var(--fs-xs);font-weight:600;color:var(--ink-2);border-bottom:1px solid var(--line-soft)}.fp-close{border:none;background:transparent;color:var(--ink-4);cursor:pointer;padding:2px;border-radius:4px;display:flex}.fp-close:hover{color:var(--ink-2);background:var(--surface-hover)}.fp-list{max-height:240px;overflow-y:auto;padding:4px 0}.fp-item{display:flex;align-items:center;gap:6px;padding:5px 10px;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer;-webkit-user-select:none;user-select:none}.fp-item:hover{background:var(--surface-hover)}.fp-item input[type=checkbox]{accent-color:var(--brand);width:14px;height:14px;flex:none;cursor:pointer}.fp-item span:last-child{flex:1}.fp-grip{color:var(--ink-4);font-size:var(--fs-2xs);width:12px;flex:none;text-align:center}.fp-foot{display:flex;gap:6px;padding:8px 10px;border-top:1px solid var(--line-soft)}.fp-foot .btn{flex:1;padding:5px 0;font-size:var(--fs-xs)}.mark-pop-wrap{position:relative}.mark-pop-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--fs-sm);white-space:nowrap}.mark-pop{position:absolute;top:calc(100% + 8px);right:0;z-index:60;width:340px;max-width:calc(100vw - 32px);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-2);overflow:hidden}.mark-pop-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--line-soft);font-size:var(--fs-sm);font-weight:600;color:var(--ink-2)}.mark-pop-close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--ink-3);cursor:pointer}.mark-pop-close:hover{background:var(--surface-2);color:var(--ink-1)}.mark-pop-body{padding:12px;max-height:62vh;overflow-y:auto}.mark-pop-body .status-excel{display:none}.sheet-foot{display:flex;gap:8px;padding:10px 16px 14px;border-top:1px solid var(--line-soft)}.sheet-foot .btn{flex:1 1 0;min-width:0;display:inline-flex;align-items:center;justify-content:center;gap:6px}.sched{grid-area:sched;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);padding:10px 16px 12px;min-width:0}.sched-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.sched-head-left{display:flex;align-items:baseline;gap:12px;min-width:0}.sched-title{margin:0;font-size:var(--fs-md);font-weight:600;color:var(--ink-1);white-space:nowrap}.sched-sum{font-size:var(--fs-xs);color:var(--ink-3)}.sched-sum strong{color:var(--ink-1);font-weight:600}.sched-sum strong.bad{color:var(--danger)}.sched-head-right{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.sched-field{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);color:var(--ink-3)}.sched-ro{margin:6px 0 0;font-size:var(--fs-xs);color:var(--ink-4)}.sched-tabs{display:flex;gap:4px;margin:8px 0 6px;flex-wrap:wrap}.sched-tab{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-3);font-size:var(--fs-xs);padding:3px 12px;border-radius:var(--r-pill);cursor:pointer}.sched-tab:hover{border-color:var(--brand-100);color:var(--brand)}.sched-tab.active{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand);font-weight:600}.sched-tab-badge{font-style:normal;font-size:var(--fs-2xs);min-width:15px;height:15px;line-height:15px;text-align:center;border-radius:8px;background:var(--danger);color:#fff;padding:0 4px}.sched-body{max-height:208px;overflow:auto;padding-top:2px}.inp{border:1px solid var(--line-strong);border-radius:6px;padding:3px 8px;font-size:var(--fs-sm);color:var(--ink-1);background:var(--surface);outline:none}.inp:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-ring)}.inp.tiny{width:58px;padding:2px 6px;font-size:var(--fs-xs)}.sched input[type=date],.sched select{border:1px solid var(--line-strong);border-radius:6px;padding:2px 6px;font-size:var(--fs-xs);color:var(--ink-1);background:var(--surface);outline:none}.sched input[type=date]:disabled,.sched select:disabled,.inp:disabled{background:var(--surface-soft);color:var(--ink-4)}.link{border:none;background:none;color:var(--brand);font-size:var(--fs-2xs);cursor:pointer;padding:0}.mini-btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.mini-btn.primary:hover{background:var(--brand-600);border-color:var(--brand-600);color:#fff}.mini-btn.danger{color:var(--danger);border-color:#f0d8d6}.mini-btn.danger:hover{background:var(--danger-50);color:var(--danger)}.mini-btn:disabled{opacity:.5;cursor:not-allowed}.gantt-empty{padding:18px 0;text-align:center;font-size:var(--fs-xs);color:var(--ink-4)}.gantt-axis,.gantt-row{display:flex;align-items:center}.gantt-axis{height:20px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface);z-index:1}.gantt-axis-label{width:152px;flex:none;font-size:var(--fs-2xs);color:var(--ink-4)}.gantt-axis-track{position:relative;flex:1;height:100%}.gantt-tick{position:absolute;top:3px;transform:translate(-50%);font-size:var(--fs-2xs);color:var(--ink-4);white-space:nowrap}.gantt-tick.edge-start{transform:translate(0)}.gantt-tick.edge-end{transform:translate(-100%)}.gantt-rows{position:relative}.gantt-row{height:32px;border-bottom:1px solid var(--line-soft);cursor:pointer}.gantt-row:hover{background:var(--surface-hover)}.gantt-row.late{background:var(--row-late)}.gantt-label{width:152px;flex:none;display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);overflow:hidden}.gantt-zone{color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:96px}.gantt-proc{font-size:var(--fs-2xs);flex:none}.gantt-track{position:relative;flex:1;height:100%}.gantt-grid{position:absolute;top:0;bottom:0;width:1px;background:var(--line-soft)}.gantt-today{position:absolute;top:0;bottom:0;width:0;border-left:1px dashed var(--danger)}.gantt-bar{position:absolute;height:8px;border-radius:3px;overflow:hidden}.gantt-bar.plan{top:6px;background:var(--bar-plan);min-width:2px}.gantt-bar-fill{display:block;height:100%;background:var(--bar-plan-fill)}.gantt-bar.actual{top:18px;min-width:2px}.gantt-nums{position:absolute;right:2px;top:7px;font-size:var(--fs-2xs);color:var(--ink-3);background:#ffffffc7;padding:0 3px;border-radius:4px;white-space:nowrap}.gantt-nums em{font-style:normal;color:var(--danger);margin-left:4px}.cmp{min-width:660px}.cmp-row{display:grid;grid-template-columns:170px 1fr 120px 56px 58px 52px 56px;align-items:center;gap:8px;padding:4px;border-bottom:1px solid var(--line-soft);font-size:var(--fs-xs);color:var(--ink-2)}.cmp-head{font-size:var(--fs-2xs);color:var(--ink-4);border-bottom:1px solid var(--line)}.cmp-row.lv-watch{background:#fffdf6}.cmp-row.lv-warn{background:#fff7ec}.cmp-row.lv-severe{background:#fdf1f0}.cmp-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cmp-name b{color:var(--ink-1)}.cmp-bars{display:flex;align-items:center;gap:8px}.cmp-bar{position:relative;flex:1;height:10px;border-radius:5px;background:#eef1f3;overflow:hidden}.cmp-bar i{position:absolute;left:0;top:0;height:100%}.cmp-bar i.plan{background:#cfd7de}.cmp-bar i.act{opacity:.95}.cmp-pct{width:66px;text-align:right;font-size:var(--fs-2xs);color:var(--ink-3)}.cmp-qty{display:flex;align-items:center;gap:4px}.cmp-qty .slash{color:var(--ink-4)}.cmp-dev.bad{color:var(--danger)}.cmp-level{font-weight:600}.alert-cfg{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:var(--fs-xs);color:var(--ink-3);padding:2px 0 8px}.alert-cfg label{display:inline-flex;align-items:center;gap:3px}.alert-none{padding:18px 0;text-align:center;font-size:var(--fs-xs);color:var(--ink-4)}.alert-row{display:grid;grid-template-columns:52px 180px 78px 1fr 190px 150px 92px;align-items:center;gap:8px;padding:5px 6px;margin-bottom:6px;border:1px solid var(--line);border-radius:8px;font-size:var(--fs-xs);color:var(--ink-2);cursor:pointer}.alert-row:hover{background:var(--surface-hover)}.alert-row.lv-severe{border-color:#f0d8d6;background:#fdf1f0}.alert-badge{color:#fff;font-size:var(--fs-2xs);text-align:center;border-radius:var(--r-pill);padding:1px 0}.alert-name b{color:var(--ink-1)}.alert-lag{color:var(--danger);font-weight:600}.alert-date{color:var(--ink-4);font-size:var(--fs-2xs)}.plan-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px;font-size:var(--fs-xs);color:var(--ink-3)}.plan-tools label{display:inline-flex;align-items:center;gap:4px}.plan-tr{display:grid;grid-template-columns:1.3fr 1fr 1.15fr 1.15fr .8fr .6fr;align-items:center;gap:6px;padding:3px 2px;border-bottom:1px solid var(--line-soft);font-size:var(--fs-xs);color:var(--ink-2)}.plan-table{min-width:660px}.plan-thead{font-size:var(--fs-2xs);color:var(--ink-4);border-bottom:1px solid var(--line)}.modal.zone-mgr{width:660px}.modal-head{padding:18px 20px 10px;display:flex;align-items:center;justify-content:space-between;gap:12px}.modal-head h4{margin:0;font-size:var(--fs-lg);font-weight:600;color:var(--ink-1)}.zone-mgr-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:0 20px 10px;border-bottom:1px solid var(--line)}.zone-mgr-body{max-height:52vh;overflow:auto;padding:10px 20px}.zone-row{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:8px}.zone-row-head{display:flex;align-items:center;gap:8px}.zone-name{flex:1;font-size:var(--fs-sm)}.zone-count{font-size:var(--fs-xs);color:var(--ink-3)}.zone-confirm{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0 2px;padding:8px 10px;border:1px solid var(--danger);border-radius:var(--r-xs);background:var(--danger-50);font-size:var(--fs-xs);line-height:1.5;color:var(--ink-2)}.zone-confirm>span{flex:1 1 210px;min-width:0}.tag-auto{font-size:var(--fs-2xs);color:var(--ink-4);border:1px solid var(--line-strong);border-radius:var(--r-pill);padding:0 6px}.zone-marks{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.zone-chip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line);border-radius:var(--r-pill);padding:1px 6px;font-size:var(--fs-xs);color:var(--ink-2);background:var(--surface-soft)}.zone-chip select{border:none;background:transparent;font-size:var(--fs-2xs);color:var(--ink-3);outline:none;max-width:96px}.zone-empty{font-size:var(--fs-xs);color:var(--ink-4)}.modal-foot{display:flex;align-items:center;justify-content:space-between;padding:12px 20px 16px;border-top:1px solid var(--line)}.modal-foot .hint{font-size:var(--fs-xs);color:var(--ink-4)}.modal-foot div{display:flex;gap:8px}@media(max-width:768px){.sched{padding:8px 10px}.sched-body{max-height:240px}.gantt-axis-label,.gantt-label{width:104px}.gantt-zone{max-width:60px}.alert-row{grid-template-columns:48px 1fr 72px 92px}.alert-row .alert-dev,.alert-row .alert-prog,.alert-row .alert-date{display:none}}@media(min-width:1024px)and (max-width:1199px){.app.is-status .dash-chips{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1200px){.app.is-status .dash-chips{grid-template-columns:repeat(3,minmax(0,1fr))}}.dash-chip.clickable{cursor:pointer}.dash-chip.clickable:hover{border-color:color-mix(in srgb,var(--c, var(--ink-4)) 55%,var(--line));background:var(--surface)}.dash-chip.clickable:active{transform:translateY(1px)}.dash-chip.active{border-color:var(--c, var(--brand));background:color-mix(in srgb,var(--c, var(--brand)) 12%,var(--surface));box-shadow:0 0 0 2px color-mix(in srgb,var(--c, var(--brand)) 28%,transparent)}.dash-chip.active .dash-chip-label{color:var(--ink-1);font-weight:600}.tool-split{width:1px;align-self:stretch;margin:4px;background:var(--line)}.proj-toggle{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--r-xs);background:var(--surface-hover)}.proj-btn{border:none;background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500;line-height:1;padding:8px 9px;border-radius:var(--r-xs);cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}.proj-btn:hover:not(:disabled){color:var(--ink-1);background:var(--surface)}.proj-btn.active{background:var(--surface);color:var(--brand);font-weight:600;box-shadow:var(--shadow-1)}.proj-btn:disabled{opacity:.45;cursor:not-allowed}@media(max-width:768px){.proj-btn{padding:8px 7px;font-size:var(--fs-xs)}.tool-split{margin:4px 2px}}.toast-host{position:fixed;right:20px;bottom:20px;z-index:900;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}.toast{pointer-events:auto;font-variant-numeric:tabular-nums;display:flex;align-items:flex-start;gap:9px;max-width:min(420px,calc(100vw - 40px));padding:10px 10px 10px 12px;border:1px solid var(--line);border-left:3px solid var(--ink-4);border-radius:var(--r-sm);background:#fffffff7;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:var(--shadow-3);color:var(--ink-1);font-size:var(--fs-sm);line-height:1.5;animation:toastIn .2s cubic-bezier(.22,1,.36,1)}.toast-icon{flex:none;display:inline-flex;margin-top:1px;color:var(--ink-3)}.toast-text{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}.toast-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin:-2px -2px 0 0;padding:0;border:none;border-radius:var(--r-xs);background:transparent;color:var(--ink-4);cursor:pointer;transition:background .15s,color .15s}.toast-close:hover{background:var(--surface-hover);color:var(--ink-1)}.toast-success{border-left-color:var(--success)}.toast-success .toast-icon{color:var(--success)}.toast-info{border-left-color:var(--brand)}.toast-info .toast-icon{color:var(--brand)}.toast-warn{border-left-color:var(--warn)}.toast-warn .toast-icon{color:var(--warn)}.toast-error{border-left-color:var(--danger)}.toast-error .toast-icon{color:var(--danger)}@keyframes toastIn{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}@media(max-width:768px){.toast-host{left:12px;right:12px;bottom:calc(78px + env(safe-area-inset-bottom));align-items:stretch}.toast{max-width:none}}@media(min-width:769px)and (max-width:1280px){.topbar{gap:8px}.mode-toggle .seg{padding:5px 10px}}@media(min-width:769px)and (max-width:1160px){.topbar .file-name{display:none}}@media(min-width:769px)and (max-width:1060px){.topbar .brand-text{display:none}.page-btn{padding-left:9px;padding-right:9px}.model-select{max-width:168px}}@media(min-width:769px)and (max-width:980px){.mark-pop-label{display:none}.mark-pop-btn{padding-left:9px;padding-right:9px}.model-select{max-width:130px}}@media(max-width:560px){.topbar .brand-text{display:none}}@media(max-width:430px){.mark-pop-label{display:none}.mark-pop-btn{padding-left:9px;padding-right:9px}}:where(a,button,[role=button],input,select,textarea,summary):focus-visible{outline:2px solid var(--brand);outline-offset:2px}.icon-btn:focus-visible,.vn-home:focus-visible,.vn-hot:focus-visible,.vn-face:focus-visible,.vn-more:focus-visible{outline:none}.dash-chip-num,.dash-chip-pct,.badge-count,.zone-count,.mark-extra.num,.gantt-nums{font-variant-numeric:tabular-nums}input[type=checkbox],input[type=radio],input[type=range]{accent-color:var(--brand)}::selection{background:var(--brand-100);color:var(--ink-1)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.spinner{animation-duration:1.6s!important;animation-iteration-count:infinite!important}}.measure-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2);margin-bottom:var(--sp-3)}.measure-modes .status-btn{justify-content:center}.measure-toggle{width:100%;margin-bottom:var(--sp-3)}.measure-toggle.danger{background:var(--danger-50);border-color:var(--danger);color:var(--danger)}.measure-toggle.danger:hover{background:var(--danger);border-color:var(--danger);color:#fff}.measure-live{padding:var(--sp-3);border:1px solid var(--brand-100);border-radius:var(--r-sm);background:var(--brand-50)}.measure-live-head{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-xs);color:var(--ink-3)}.measure-dot{width:7px;height:7px;border-radius:50%;background:var(--brand);animation:measure-pulse 1.4s ease-in-out infinite}@keyframes measure-pulse{0%,to{opacity:1}50%{opacity:.35}}.measure-live-mode{margin-left:auto;padding:1px 8px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--brand-100);color:var(--brand-600);font-weight:500}.measure-points{margin-top:var(--sp-2);display:flex;flex-direction:column;gap:3px}.measure-point{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-xs);color:var(--ink-2)}.measure-point-idx{flex:none;width:17px;height:17px;border-radius:50%;background:var(--brand);color:#fff;font-size:var(--fs-2xs);font-weight:600;display:inline-flex;align-items:center;justify-content:center}.measure-point-xyz{font-variant-numeric:tabular-nums;color:var(--ink-3)}.measure-live-tip{margin-top:var(--sp-2);font-size:var(--fs-xs);color:var(--ink-3);line-height:1.6}.measure-result{margin-top:var(--sp-2);padding:7px 10px;border-radius:var(--r-xs);background:var(--surface);border:1px solid var(--brand-100);color:var(--brand-600);font-size:var(--fs-md);font-weight:600;font-variant-numeric:tabular-nums}.measure-clear{width:100%;margin-top:var(--sp-2)}.measure-hud{position:absolute;left:0;right:0;margin-inline:auto;width:fit-content;bottom:16px;display:flex;align-items:center;gap:var(--sp-2);padding:6px 10px 6px 14px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--brand-100);box-shadow:var(--shadow-2);font-size:var(--fs-sm);color:var(--ink-2);z-index:7;max-width:calc(100% - 28px)}.measure-hud.mobile{bottom:78px}.measure-hud-dot{width:7px;height:7px;border-radius:50%;background:var(--brand);flex:none;animation:measure-pulse 1.4s ease-in-out infinite}.measure-hud-mode{flex:none;padding:1px 8px;border-radius:var(--r-pill);background:var(--brand-50);color:var(--brand-600);font-size:var(--fs-xs);font-weight:500}.measure-hud-text{display:flex;min-width:0;font-variant-numeric:tabular-nums;font-weight:500;color:var(--ink-1);white-space:nowrap;overflow:hidden}.measure-hud-val{flex:none}.measure-hud-sub{min-width:0;overflow:hidden;text-overflow:ellipsis}@media(max-width:768px){.measure-hud-sub{display:none}}.measure-hud .mini-btn{flex:none;white-space:nowrap}.snap-mark{position:absolute;left:0;top:0;width:0;height:0;z-index:6;pointer-events:none}.snap-mark-item{display:none;position:absolute;left:0;top:0;width:0;height:0}.snap-mark[data-type=endpoint] .snap-mark-item[data-t=endpoint],.snap-mark[data-type=midpoint] .snap-mark-item[data-t=midpoint],.snap-mark[data-type=perpendicular] .snap-mark-item[data-t=perpendicular],.snap-mark[data-type=center] .snap-mark-item[data-t=center],.snap-mark[data-type=nearest] .snap-mark-item[data-t=nearest]{display:block}.snap-mark-glyph{position:absolute;left:-11px;top:-11px;width:22px;height:22px;color:#ff6a1f;filter:drop-shadow(0 0 1.5px #fff) drop-shadow(0 0 3px rgba(255,255,255,.9))}.snap-mark-label{position:absolute;left:15px;top:-10px;padding:0 7px;border-radius:var(--r-pill);background:#fffffff7;border:1px solid #ff6a1f;box-shadow:var(--shadow-1);color:#a23c00;font-size:var(--fs-2xs);line-height:18px;white-space:nowrap}.snap-box{margin-top:var(--sp-3);padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-soft)}.snap-box.live{border-color:var(--brand-100);background:var(--brand-50)}.snap-head{display:flex;align-items:center;gap:var(--sp-2);color:var(--ink-2);font-size:var(--fs-sm)}.snap-title{font-weight:500;color:var(--ink-1)}.snap-now{padding:1px 8px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--line-strong);color:var(--ink-3);font-size:var(--fs-2xs);white-space:nowrap}.snap-now.on{background:var(--surface);border-color:var(--brand-100);color:var(--brand-600);font-weight:500}.switch{position:relative;margin-left:auto;flex:none;width:34px;height:20px;cursor:pointer}.switch input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.switch i{position:absolute;inset:0;border-radius:var(--r-pill);background:var(--line-strong);transition:background .15s}.switch i:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:var(--shadow-1);transition:transform .15s}.switch input:checked+i{background:var(--brand)}.switch input:checked+i:after{transform:translate(14px)}.switch input:focus-visible+i{outline:2px solid var(--brand-100);outline-offset:2px}.snap-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-2);margin-top:var(--sp-2)}.snap-chip{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-width:0;padding:6px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink-3);font-size:var(--fs-xs);cursor:pointer;transition:background .15s,border-color .15s,color .15s}.snap-chip:hover{background:var(--surface-hover)}.snap-chip .snap-glyph{flex:none;opacity:.5}.snap-chip.on{border-color:var(--brand-100);background:var(--surface);color:var(--brand-600);font-weight:500}.snap-chip.on .snap-glyph{opacity:1}.snap-free{display:flex;align-items:flex-start;gap:var(--sp-2);margin-top:var(--sp-3);color:var(--ink-2);font-size:var(--fs-xs);cursor:pointer}.snap-free input{flex:none;margin-top:2px}.snap-free em{display:block;margin-top:1px;color:var(--ink-4);font-size:var(--fs-2xs);font-style:normal;line-height:1.5}.snap-note{margin-top:var(--sp-2);color:var(--ink-3);font-size:var(--fs-2xs);line-height:1.6}.snap-note.warn{color:var(--danger)}.measure-hud-snap{display:inline-flex;align-items:center;gap:4px;flex:none;padding:1px 8px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--line-strong);color:var(--ink-3);font-size:var(--fs-xs)}.measure-hud-snap.on{border-color:var(--brand-100);color:var(--brand-600);font-weight:500}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(max-width:400px){.snap-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
