:root{color-scheme:light;font-family:Segoe UI,Microsoft YaHei,PingFang SC,Arial,sans-serif;--paper: #f2f3f0;--surface: #ffffff;--surface-soft: #f7f8f5;--ink: #171918;--ink-soft: #363b38;--muted: #737a75;--line: #d8dbd6;--line-strong: #bec3bd;--accent: #e65d26;--accent-dark: #bd3f12;--ai: #176b5d;--ai-dark: #104b42;--ai-soft: #edf7f4;--success: #287757;--warning: #a96513;--danger: #b43a32;--stage: #dfe2dd;--mono: "Cascadia Mono", "Segoe UI Mono", Consolas, monospace;--header-height: 66px;--control-width: 318px;--inspector-width: 292px}*{box-sizing:border-box}[hidden]{display:none!important}html,body{width:100%;min-width:320px;height:100%;margin:0;background:var(--paper);color:var(--ink)}body{overflow:hidden}button,input,select{font:inherit}button,summary{-webkit-tap-highlight-color:transparent}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,a:focus-visible{outline:3px solid rgba(230,93,38,.24);outline-offset:2px}.app-shell{display:grid;grid-template-rows:var(--header-height) minmax(0,1fr);width:100%;height:100vh;background:var(--paper)}.topbar{z-index:10;display:grid;grid-template-columns:var(--control-width) minmax(180px,1fr) auto;align-items:center;min-width:0;border-bottom:1px solid var(--line);background:#fffffff5}.brand{display:flex;align-items:center;align-self:stretch;gap:12px;padding:0 22px;border-right:1px solid var(--line);color:inherit;text-decoration:none}.brand-mark{position:relative;display:grid;width:34px;height:34px;flex:0 0 auto;place-items:center;border:2px solid var(--ink)}.brand-mark:before,.brand-mark:after,.brand-mark span{position:absolute;display:block;background:var(--ink);content:""}.brand-mark:before{width:2px;height:22px;transform:rotate(45deg)}.brand-mark:after{width:22px;height:2px;transform:rotate(45deg)}.brand-mark span{right:-5px;bottom:-5px;width:9px;height:9px;background:var(--accent);box-shadow:0 0 0 3px var(--surface)}.brand-copy{display:grid;min-width:0;gap:1px}.brand-copy strong{font-size:17px;font-weight:800}.brand-copy small{color:var(--muted);font-size:11px;white-space:nowrap}.topbar-center{display:flex;align-items:baseline;min-width:0;gap:12px;padding:0 22px}.topbar-center strong{overflow:hidden;font-size:14px;font-weight:680;text-overflow:ellipsis;white-space:nowrap}.project-kicker,.step-index,.summary-hint,.format-badge{color:var(--muted);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:0;text-transform:uppercase}.topbar-actions{display:flex;align-items:center;gap:8px;padding-right:14px}.service-status{display:flex;align-items:center;gap:7px;margin-right:4px;color:var(--muted);font-size:11px;font-weight:650}.service-dot{width:7px;height:7px;border-radius:50%;background:var(--success);box-shadow:0 0 0 3px #2877571f}.service-status[data-tone=checking] .service-dot,.mode-availability[data-tone=checking],.ai-runtime-strip[data-tone=checking] .runtime-indicator{background:var(--warning)}.service-status[data-tone=error] .service-dot,.mode-availability[data-tone=error],.ai-runtime-strip[data-tone=error] .runtime-indicator{background:var(--danger)}.button,.icon-button{display:inline-flex;align-items:center;justify-content:center;height:36px;border:1px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink);cursor:pointer;transition:border-color .14s ease,background .14s ease,color .14s ease,transform .14s ease}.button{gap:8px;padding:0 13px;font-size:12px;font-weight:700}.icon-button{width:36px;flex:0 0 auto;padding:0}.button svg,.icon-button svg{width:16px;height:16px;stroke-width:2}.button:hover,.icon-button:hover{border-color:var(--line-strong);background:var(--surface-soft);transform:translateY(-1px)}.button-dark{border-color:var(--ink);background:var(--ink);color:#fff}.button-dark:hover{border-color:#000;background:#000}.button-accent{border-color:var(--accent);background:var(--accent);color:#fff}.button-accent:hover{border-color:var(--accent-dark);background:var(--accent-dark)}.button-full{width:100%;height:42px}.button:disabled,.icon-button:disabled,.source-button:disabled{cursor:wait;opacity:.42;transform:none}.workspace{display:grid;grid-template-columns:var(--control-width) minmax(420px,1fr) var(--inspector-width);min-height:0}.control-rail,.inspector{min-width:0;min-height:0;background:var(--surface)}.control-rail{border-right:1px solid var(--line)}.inspector{border-left:1px solid var(--line)}.rail-scroll,.inspector-scroll{height:100%;overflow:auto;scrollbar-gutter:stable}.rail-scroll{padding:24px 22px 36px}.inspector-scroll{padding:0 18px 28px}.rail-intro{padding-bottom:20px}.rail-intro .step-index{color:var(--accent-dark)}body[data-generation-mode=ai] .rail-intro .step-index{color:var(--ai)}.rail-intro h1{margin:11px 0 12px;font-size:26px;font-weight:760;line-height:1.25;letter-spacing:0}.rail-intro p{margin:0;color:var(--muted);font-size:12px;line-height:1.65}.generation-mode-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:12px;border:1px solid var(--line-strong);border-radius:4px;overflow:hidden;background:var(--surface-soft)}.generation-mode-button{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr);align-items:center;min-width:0;min-height:54px;gap:8px;border:0;border-right:1px solid var(--line-strong);padding:8px 10px;background:transparent;color:var(--ink-soft);text-align:left;cursor:pointer;transition:background .14s ease,color .14s ease}.generation-mode-button:last-child{border-right:0}.generation-mode-button>svg{width:17px;height:17px}.generation-mode-button>span{display:grid;min-width:0;gap:2px}.generation-mode-button strong,.generation-mode-button small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.generation-mode-button strong{font-size:11px}.generation-mode-button small{color:currentColor;font-size:8px;opacity:.62}.generation-mode-button:hover{background:#eceeeb}.generation-mode-button.is-active{background:var(--ink);color:#fff}.generation-mode-button[data-generation-mode=ai].is-active{background:var(--ai-dark)}.mode-availability{position:absolute;top:7px;right:7px;width:6px;height:6px;border-radius:50%;background:var(--success);box-shadow:0 0 0 2px #ffffffa6}.source-actions{display:grid;gap:9px;padding-bottom:22px}.source-button{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;width:100%;min-height:62px;gap:11px;border:1px solid var(--line);border-radius:5px;padding:9px 12px;background:var(--surface);color:var(--ink);text-align:left;cursor:pointer;transition:border-color .14s ease,box-shadow .14s ease,transform .14s ease}.source-button:hover{border-color:var(--line-strong);box-shadow:0 8px 24px #17191812;transform:translateY(-1px)}.source-button-primary{border-color:var(--ink);background:var(--ink);color:#fff}.source-button-primary:hover{border-color:#000;box-shadow:0 10px 26px #1719182e}.source-button-ai{border-color:var(--ai-dark);background:var(--ai-dark);color:#fff}.source-button-ai:hover{border-color:#0a3933;box-shadow:0 10px 26px #104b4233}.source-icon{display:grid;width:36px;height:36px;place-items:center;border:1px solid currentColor;border-radius:3px;opacity:.86}.source-icon svg{width:17px;height:17px}.source-copy{display:grid;gap:3px}.source-copy strong{font-size:13px}.source-copy small{color:currentColor;font-size:10px;opacity:.62}.source-arrow{color:currentColor;font-family:var(--mono);font-size:17px;opacity:.66}.settings-group,.reference-panel{border-top:1px solid var(--line)}.settings-group>summary,.reference-panel>summary{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:48px;list-style:none;color:var(--ink-soft);font-size:12px;font-weight:760;cursor:pointer}.settings-group>summary::-webkit-details-marker,.reference-panel>summary::-webkit-details-marker,.advanced-settings>summary::-webkit-details-marker{display:none}.settings-group>summary:after,.reference-panel>summary:after{width:7px;height:7px;margin-left:auto;border-right:1px solid var(--muted);border-bottom:1px solid var(--muted);content:"";transform:rotate(45deg) translateY(-2px);transition:transform .14s ease}.settings-group[open]>summary:after,.reference-panel[open]>summary:after{transform:rotate(225deg) translate(-2px,-1px)}.settings-group>summary>span:first-child,.reference-panel>summary>span:first-child{display:flex;align-items:center;gap:9px}.settings-body,.reference-body{display:grid;gap:12px;padding:4px 0 20px}.ai-runtime-strip{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;min-width:0;gap:8px;padding:9px;border:1px solid #bfd7d0;border-radius:3px;background:var(--ai-soft)}.runtime-indicator{width:7px;height:7px;border-radius:50%;background:var(--success)}.ai-runtime-strip>span:nth-child(2){display:grid;min-width:0;gap:2px}.ai-runtime-strip strong,.ai-runtime-strip small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-runtime-strip strong{color:var(--ink-soft);font-size:10px}.ai-runtime-strip small{color:var(--muted);font-size:8px}.ai-runtime-strip code{max-width:82px;overflow:hidden;color:var(--ai-dark);font-family:var(--mono);font-size:8px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.ai-runtime-strip[data-tone=error]{border-color:#e1bbb6;background:#fbf0ef}.mode-note{display:flex;align-items:flex-start;gap:7px;margin:0;color:var(--muted);font-size:9px;line-height:1.45}.mode-note svg{width:13px;height:13px;flex:0 0 auto;margin-top:1px}.field-grid,.advanced-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.field{display:grid;min-width:0;gap:6px;color:var(--muted);font-size:10px;font-weight:700}.field input,.field select{width:100%;height:36px;min-width:0;border:1px solid var(--line);border-radius:3px;padding:0 9px;background:var(--surface-soft);color:var(--ink);font-size:12px;font-weight:630}.field input::placeholder{color:#a2a8a3}.manual-model-field{display:grid;gap:6px}.manual-model-control{display:grid;grid-template-columns:minmax(0,1fr) 36px;gap:7px}.manual-model-control input{width:100%;height:36px;min-width:0;border:1px solid var(--line);border-radius:3px;padding:0 9px;background:var(--surface-soft);color:var(--ink);font-family:var(--mono);font-size:11px;font-weight:650}.manual-model-control input::placeholder{color:#a2a8a3}.manual-model-control .icon-button{border-color:#bfd7d0;color:var(--ai-dark)}.input-with-unit{position:relative}.input-with-unit input{padding-right:34px}.input-with-unit em{position:absolute;top:50%;right:9px;color:var(--muted);font-family:var(--mono);font-size:9px;font-style:normal;transform:translateY(-50%)}.switch-field{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:45px}.switch-field>span{display:grid;gap:3px}.switch-field strong{font-size:11px}.switch-field small{color:var(--muted);font-size:9px}.switch-field input{position:relative;width:34px;height:19px;flex:0 0 auto;margin:0;border-radius:10px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#c8ccc7;cursor:pointer;transition:background .14s ease}.switch-field input:after{position:absolute;top:3px;left:3px;width:13px;height:13px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #00000038;content:"";transition:transform .14s ease}.switch-field input:checked{background:var(--accent)}.switch-field input:checked:after{transform:translate(15px)}.advanced-settings{border:1px solid var(--line);border-radius:3px;background:var(--surface-soft)}.advanced-settings>summary{padding:9px 10px;list-style:none;color:var(--muted);font-size:10px;font-weight:700;cursor:pointer}.advanced-settings>summary:after{float:right;content:"+"}.advanced-settings[open]>summary:after{content:"−"}.advanced-body{padding:0 9px 10px}.stage-wrap{display:grid;grid-template-rows:54px minmax(0,1fr);min-width:0;min-height:0;padding:0 12px 12px;background:var(--paper)}.stage-header{display:flex;align-items:center;justify-content:space-between;min-width:0;gap:20px;padding:0 4px}.stage-header>div{display:flex;align-items:baseline;gap:10px}.stage-header strong{font-size:13px}.stage-help{overflow:hidden;color:var(--muted);font-family:var(--mono);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.viewport{position:relative;min-width:0;min-height:0;overflow:hidden;border:1px solid var(--line-strong);border-radius:3px;background:linear-gradient(rgba(23,25,24,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(23,25,24,.035) 1px,transparent 1px),var(--stage);background-size:28px 28px}.viewport:before{position:absolute;z-index:2;top:10px;right:10px;bottom:10px;left:10px;border:1px solid rgba(23,25,24,.09);content:"";pointer-events:none}.viewport canvas{position:relative;z-index:1;display:block;width:100%;height:100%}.empty-stage{position:absolute;z-index:3;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;justify-items:center;gap:7px;color:var(--muted);pointer-events:none}.empty-stage strong{color:var(--ink-soft);font-size:14px}.empty-stage>span:last-child{font-size:10px}.empty-stage-icon{display:grid;width:48px;height:48px;margin-bottom:6px;place-items:center;border:1px dashed var(--line-strong);border-radius:50%}.empty-stage-icon svg{width:20px;height:20px}.viewport.has-model .empty-stage{display:none}.viewport.is-loading .empty-stage{display:grid}.viewport.is-loading .empty-stage strong:after{content:"处理中…";font-size:14px}.viewport.is-loading .empty-stage strong,.viewport.is-loading .empty-stage>span:last-child{font-size:0}.viewport.is-loading .empty-stage>span:last-child:after{content:"正在解析图纸并构建几何模型";font-size:10px}.viewport.is-dragging:after{position:absolute;z-index:5;top:10px;right:10px;bottom:10px;left:10px;display:grid;place-items:center;border:2px solid var(--accent);background:#e65d2614;color:var(--accent-dark);content:"松开以导入文件";font-size:14px;font-weight:760;pointer-events:none}.view-switcher,.viewport-tools{position:absolute;z-index:4;display:flex;align-items:center;border:1px solid rgba(23,25,24,.18);border-radius:3px;background:#ffffffe6;box-shadow:0 8px 24px #17191814;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.view-switcher{top:22px;left:22px;max-width:calc(100% - 140px);gap:8px;padding:5px 6px 5px 9px}.view-switcher[hidden]{display:none}.view-switcher>span{color:var(--muted);font-family:var(--mono);font-size:9px;font-weight:700}.view-buttons{display:flex;min-width:0;gap:4px;overflow-x:auto}.view-number-button{display:grid;width:28px;height:28px;flex:0 0 auto;place-items:center;border:1px solid var(--line);border-radius:2px;background:var(--surface);color:var(--ink-soft);font-family:var(--mono);font-size:10px;font-weight:750;cursor:pointer}.view-number-button:hover,.view-number-button.is-active{border-color:var(--ink);background:var(--ink);color:#fff}.viewport-tools{bottom:22px;left:22px;gap:2px;padding:4px}.viewport-tool-button{width:32px;height:32px;border-color:transparent;background:transparent}.tool-divider{width:1px;height:18px;margin:0 2px;background:var(--line)}.axis-key{position:absolute;right:22px;bottom:22px;z-index:4;width:47px;height:47px;color:var(--muted);font-family:var(--mono);font-size:8px;pointer-events:none}.axis-key:before,.axis-key:after{position:absolute;bottom:12px;left:14px;width:30px;height:1px;background:var(--ink-soft);content:"";transform-origin:left}.axis-key:after{transform:rotate(-35deg)}.axis-key span{position:absolute;font-weight:800}.axis-x{right:0;bottom:8px}.axis-y{right:5px;top:5px}.axis-z{left:11px;top:0;color:var(--accent-dark)}.viewport.is-expanded,.viewport:fullscreen{position:fixed;z-index:50;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;border:0;border-radius:0}.status-panel,.model-summary,.delivery-panel,.reference-panel{padding:20px 0;border-bottom:1px solid var(--line)}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:13px}.status-chip{display:inline-flex;align-items:center;gap:6px;color:var(--success);font-size:9px;font-weight:750}.status-chip>span{width:6px;height:6px;border-radius:50%;background:currentColor}.status-chip[data-tone=working]{color:var(--warning)}.status-chip[data-tone=error]{color:var(--danger)}.status-title{display:block;color:var(--ink);font-size:18px;font-weight:740;line-height:1.25}.generation-progress{display:grid;gap:7px;margin-top:14px}.generation-progress-track{position:relative;display:block;width:100%;height:4px;overflow:hidden;background:#e4e7e2}.generation-progress-track>span{display:block;width:0;height:100%;background:var(--accent);transition:width .26s ease}body[data-generation-mode=ai] .generation-progress-track>span{background:var(--ai)}.generation-progress[data-indeterminate=true] .generation-progress-track>span{width:38%!important;animation:progress-sweep 1.15s ease-in-out infinite}.generation-progress-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--muted);font-family:var(--mono);font-size:8px}.generation-progress-meta>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.generation-progress-meta time{flex:0 0 auto;color:var(--ink-soft);font-variant-numeric:tabular-nums}@keyframes progress-sweep{0%{transform:translate(-105%)}to{transform:translate(270%)}}.notice{margin:12px 0 0;padding:10px;border-left:2px solid var(--warning);background:#fbf6ed;color:#77501b;font-size:10px;line-height:1.55;overflow-wrap:anywhere}.notice[hidden]{display:none}.format-badge{padding:3px 5px;border:1px solid var(--line);border-radius:2px;color:var(--ink-soft)}.model-name{display:-webkit-box;margin-bottom:15px;overflow:hidden;font-size:13px;line-height:1.4;overflow-wrap:anywhere;-webkit-box-orient:vertical;-webkit-line-clamp:2}.metrics-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin:0;border-top:1px solid var(--line);border-left:1px solid var(--line)}.metric{min-width:0;padding:11px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.metric-wide{grid-column:1 / -1}.metric dt{margin-bottom:5px;color:var(--muted);font-size:9px}.metric dd{margin:0;overflow:hidden;color:var(--ink);font-family:var(--mono);font-size:12px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.delivery-panel p{margin:10px 0 0;color:var(--muted);font-size:9px;line-height:1.5}.reference-panel{padding-bottom:0}.reference-panel>summary .compact-icon-button{margin-left:auto}.compact-icon-button{width:30px;height:30px}.reference-body{padding-top:4px}.reference-summary{padding:8px;border:1px solid var(--line);background:var(--surface-soft);color:var(--muted);font-size:9px;line-height:1.45}.reference-summary.is-warning{border-color:#ddc49f;background:#fbf6ed;color:#77501b}.reference-results{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.reference-item{display:grid;min-width:0;gap:5px;padding:5px;border:1px solid var(--line);background:var(--surface)}.reference-item.is-selected{border-color:var(--accent);box-shadow:0 0 0 2px #e65d2626}.reference-thumb{position:relative;width:100%;aspect-ratio:4 / 3;overflow:hidden;border:0;border-radius:2px;padding:0;background:var(--paper);cursor:pointer}.reference-thumb img{display:block;width:100%;height:100%;object-fit:cover}.reference-thumb.has-image-error img{display:none}.reference-thumb.has-image-error:after{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--muted);content:"无预览";font-size:9px}.reference-title{display:-webkit-box;overflow:hidden;color:var(--ink-soft);font-size:9px;font-weight:700;line-height:1.35;text-decoration:none;-webkit-box-orient:vertical;-webkit-line-clamp:2}.reference-meta{overflow:hidden;color:var(--muted);font-size:8px;text-overflow:ellipsis;white-space:nowrap}.reference-empty,.reference-links{grid-column:1 / -1}.reference-empty{padding:9px;border:1px dashed var(--line-strong);color:var(--muted);font-size:9px}.reference-links{display:grid;gap:5px}.reference-links a{display:flex;align-items:center;justify-content:space-between;min-height:30px;gap:6px;padding:0 8px;border:1px solid var(--line);color:var(--ink-soft);font-size:9px;font-weight:700;text-decoration:none}.reference-links svg{width:12px;height:12px}@media(max-width:1120px){:root{--control-width: 286px;--inspector-width: 258px}.rail-scroll{padding-inline:18px}.service-status,.button-quiet span{display:none}.button-quiet{width:36px;padding:0}}@media(max-width:860px){body{overflow:auto}.app-shell{height:auto;min-height:100vh;grid-template-rows:auto auto}.topbar{position:sticky;top:0;grid-template-columns:1fr auto;min-height:58px}.brand{min-height:58px;padding-inline:16px;border-right:0}.brand-copy small,.topbar-center,.button-quiet{display:none}.topbar-actions{padding-right:10px}.workspace{grid-template-columns:1fr;grid-template-rows:auto minmax(480px,68vh) auto}.control-rail,.inspector{border:0}.control-rail{border-bottom:1px solid var(--line)}.inspector{border-top:1px solid var(--line)}.rail-scroll,.inspector-scroll{height:auto;overflow:visible}.rail-scroll{padding:22px 16px}.rail-intro h1 br{display:none}.source-actions{grid-template-columns:1fr}.settings-group{display:inline-block;width:100%}.stage-wrap{min-height:480px;padding:0 8px 8px}.inspector-scroll{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px;padding:0 16px 24px}.reference-panel{grid-column:1 / -1}}@media(max-width:560px){.brand-copy strong{font-size:15px}.button-dark{width:38px;padding:0}.button-dark span{display:none}.rail-intro h1{font-size:23px}.source-actions,.field-grid{grid-template-columns:1fr}.workspace{grid-template-rows:auto 62vh auto}.stage-wrap{min-height:420px}.stage-help{display:none}.inspector-scroll{grid-template-columns:1fr}.reference-panel{grid-column:auto}.view-switcher{max-width:calc(100% - 100px)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
