*{margin:0;padding:0;box-sizing:border-box}body{font-family:Microsoft YaHei,SimHei,Arial,sans-serif;background:#2b2b2b;color:#d4d4d4;overflow:hidden;height:100vh;display:flex;flex-direction:column;user-select:none}.menu-bar{background:#3c3c3c;border-bottom:1px solid #555;height:28px;display:flex;align-items:center;padding:0 8px;flex-shrink:0}.menu-bar .brand-label{color:#e94560;font-size:14px;font-weight:700;padding:4px 16px 4px 4px;margin-right:8px;border-right:1px solid #555;white-space:nowrap}.menu-bar .menu-item{padding:4px 12px;color:#d4d4d4;cursor:pointer;font-size:13px;border-radius:2px}.menu-bar .menu-item:hover{background:#505050}.menu-bar .menu-item.menu-dropdown{position:relative}.menu-bar .menu-item.menu-dropdown.open{background:#094771;color:#fff}.dropdown-menu{display:none;position:absolute;top:100%;left:0;min-width:170px;background:#2d2d2d;border:1px solid #555;box-shadow:0 4px 12px #00000080;padding:4px 0;z-index:1000}.menu-item.menu-dropdown.open .dropdown-menu{display:block}.dropdown-item{padding:8px 16px;font-size:13px;color:#d4d4d4;cursor:pointer;display:flex;align-items:center;gap:8px;white-space:nowrap}.dropdown-item:hover{background:#094771;color:#fff}.dropdown-item .icon{font-size:15px}.toolbar{background:#333;border-bottom:1px solid #555;height:36px;display:flex;align-items:center;padding:0 8px;gap:4px;flex-shrink:0}.toolbar .tool-btn{padding:4px 12px;background:#4a4a4a;border:1px solid #666;color:#e0e0e0;cursor:pointer;font-size:12px;border-radius:3px;display:flex;align-items:center;gap:4px}.toolbar .tool-btn:hover{background:#5a5a5a;border-color:#888}.toolbar .tool-btn.primary{background:#0e639c;border-color:#17b}.toolbar .tool-btn.primary:hover{background:#1177bb}.toolbar .tool-btn.active{background:#1177bb;border-color:#1a8ae8;color:#fff}.toolbar .tool-btn.workflow{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border:none;color:#fff;font-weight:700;padding:6px 16px;font-size:13px;box-shadow:0 2px 8px #667eea66;transition:all .3s ease}.toolbar .tool-btn.workflow:hover{transform:translateY(-1px);box-shadow:0 4px 12px #667eea99}.toolbar .separator{width:1px;height:20px;background:#555;margin:0 4px}.main-workspace{flex:1;display:flex;overflow:hidden}.model-library-wrapper{width:411px;background:#1e1e1e;border-right:1px solid #3c3c3c;display:flex;flex-shrink:0;transition:width .2s ease}.model-library-wrapper.library-collapsed{width:80px}.model-library-wrapper.library-collapsed .sub-categories-wrapper,.model-library-wrapper.library-collapsed .model-grid-wrapper{display:none}.primary-categories{width:80px;background:#252526;display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto}.primary-cat-item{padding:12px 8px;text-align:center;cursor:pointer;border-bottom:1px solid #2a2a2a;transition:all .2s}.primary-cat-item:hover{background:#2d2d2d}.primary-cat-item.active{background:#0e639c}.primary-cat-item .cat-icon{font-size:20px;margin-bottom:4px}.primary-cat-item .cat-name{font-size:11px;color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.primary-cat-item.active .cat-name{color:#fff}.primary-cat-item.space-add{border-top:1px solid #3c3c3c;margin-top:4px}.primary-cat-item.space-add .cat-name{color:#ffd93d}.primary-cat-item.space-add:hover{background:#3a3320}.primary-cat-item.space-add.active{background:#b8860b}.primary-cat-item.space-add.active .cat-name{color:#fff}.sub-categories-wrapper{width:150px;background:#1e1e1e;display:flex;flex-direction:column;flex-shrink:0;border-right:1px solid #2a2a2a}.model-search-bar{padding:8px;border-bottom:1px solid #2a2a2a}.model-search-input{width:100%;background:#3c3c3c;border:1px solid #555;color:#d4d4d4;padding:6px 10px;border-radius:4px;font-size:12px;outline:none}.model-search-input:focus{border-color:#007acc}.model-search-input::placeholder{color:#666}.sub-categories{flex:1;overflow-y:auto;padding:4px 0}.sub-cat-group{margin-bottom:2px}.sub-cat-header{padding:8px 12px;font-size:11px;color:#888;font-weight:700;cursor:pointer;background:#252526;border-bottom:1px solid #2a2a2a}.sub-cat-header:hover{color:#ccc;background:#2d2d2d}.sub-cat-group.collapsed .sub-cat-content{display:none}.sub-cat-content{padding:2px 0}.sub-cat-item{padding:6px 12px 6px 20px;font-size:12px;color:#aaa;cursor:pointer;transition:all .15s}.sub-cat-item:hover{background:#2a2d2e;color:#ddd}.sub-cat-item.active{background:#094771;color:#fff;border-left:3px solid #007acc}.model-grid-wrapper{flex:1;background:#1a1a1a;overflow-y:auto}.model-grid{display:grid;grid-template-columns:1fr;gap:8px;padding:10px}.model-card{background:#252526;border-radius:6px;overflow:hidden;cursor:grab;transition:all .2s;border:2px solid transparent;position:relative}.model-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0006;border-color:#4ecdc4}.model-card:active{cursor:grabbing}.model-card-thumb{height:80px;background:#333;display:flex;align-items:center;justify-content:center;position:relative}.model-card-thumb-icon{font-size:36px}.model-card-info{padding:8px}.model-card-name{font-size:12px;color:#ddd;font-weight:700;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.model-card-size{font-size:10px;color:#888}.model-card-fav{position:absolute;top:4px;right:4px;width:20px;height:20px;background:rgba(0,0,0,.5);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;color:#888;cursor:pointer;z-index:10}.model-card-fav:hover,.model-card-fav.active{color:gold}.model-grid-empty{grid-column:1 / -1;text-align:center;padding:40px;color:#666;font-size:13px}.left-panel{width:220px;background:#252526;border-right:1px solid #3c3c3c;display:flex;flex-direction:column;flex-shrink:0}.panel-header{background:#333;padding:8px 12px;font-size:12px;font-weight:700;color:#e0e0e0;border-bottom:1px solid #3c3c3c;display:flex;justify-content:space-between;align-items:center}.panel-header .toggle-btn{cursor:pointer;color:#aaa;font-size:14px}.panel-header .toggle-btn:hover{color:#fff}.panel-header{cursor:pointer;user-select:none}.left-panel.collapsed{width:auto;min-width:0;flex-grow:0}.left-panel.collapsed .tree-container{display:none}.tree-container{flex:1;overflow-y:auto;padding:4px 0}.tree-item{padding:6px 12px 6px 20px;cursor:pointer;font-size:13px;color:#ccc;border-left:3px solid transparent;display:flex;align-items:center;gap:6px}.tree-item:hover{background:#2a2d2e}.tree-item.active{background:#094771;border-left-color:#007acc;color:#fff}.tree-item .icon{font-size:14px}.tree-group-header{padding:6px 12px;font-size:11px;color:#888;font-weight:700;text-transform:uppercase;cursor:pointer;display:flex;align-items:center;gap:4px}.tree-group-header:hover{color:#ccc}.tree-group-header .arrow{font-size:10px;transition:transform .2s}.tree-group-header.collapsed .arrow{transform:rotate(-90deg)}.tree-group-content{overflow:hidden}.tree-group-content.collapsed{display:none}.tree-item.sub{padding-left:36px;font-size:12px}.tree-item .count{margin-left:auto;background:#444;color:#aaa;padding:1px 6px;border-radius:10px;font-size:11px}.tree-item.active .count{background:#1a6a9e;color:#fff}.cabinet-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cabinet-name-input{flex:1 1 auto;min-width:40px;padding:1px 4px;font-size:12px;color:#e0e0e0;background:#1e1e1e;border:1px solid #0e639c;border-radius:2px;outline:none}.tree-panel{height:160px;border-bottom:1px solid #3c3c3c;display:flex;flex-direction:column}.tree-content{flex:1;overflow-y:auto;padding:4px 0}.properties-panel{height:430px;border-top:1px solid #3c3c3c;display:flex;flex-direction:column}.properties-content{flex:1;overflow-y:auto;padding:8px}.prop-row{display:flex;align-items:center;margin-bottom:4px;font-size:12px}.prop-label{width:60px;color:#888;flex-shrink:0}.prop-value{flex:1;color:#d4d4d4;background:#3c3c3c;padding:3px 6px;border:1px solid #555;border-radius:2px;font-size:12px}.prop-value input{width:100%;background:transparent;border:none;color:#d4d4d4;outline:none;font-size:12px}.prop-input{flex:1;min-width:0;max-width:96px;background:#3c3c3c;border:1px solid #555;color:#d4d4d4;padding:3px 6px;border-radius:2px;font-size:12px;outline:none}.prop-input:focus{border-color:#007acc}.prop-select{flex:1;background:#3c3c3c;border:1px solid #555;color:#d4d4d4;padding:3px 6px;border-radius:2px;font-size:12px;outline:none}.prop-select:focus{border-color:#007acc}.prop-unit{color:#888;margin-left:4px;font-size:11px}.tex-swatch-img{width:22px;height:22px;flex-shrink:0;margin-left:6px;border:1px solid #555;border-radius:2px;object-fit:cover;background:#3c3c3c}.prop-category-title{display:flex;align-items:center;justify-content:space-between;font-size:12px;font-weight:700;color:#e0e0e0;padding:2px 2px 8px;margin-bottom:8px;border-bottom:1px solid #3c3c3c}.prop-category-count{font-size:11px;font-weight:400;color:#aaa;background:#444;padding:1px 6px;border-radius:10px}.prop-panel-card{border:1px solid #3c3c3c;border-radius:3px;padding:8px;margin-bottom:8px;background:#2a2a2a}.prop-panel-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;font-size:12px;color:#4fc3f7}.prop-panel-card-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prop-panel-card-type{flex-shrink:0;margin-left:6px;font-size:10px;color:#aaa;background:#444;padding:1px 6px;border-radius:10px}.center-area{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.view-tabs{background:#252526;display:flex;border-bottom:1px solid #3c3c3c;height:30px;align-items:center;flex-shrink:0}.view-tab{padding:6px 16px;cursor:pointer;font-size:12px;color:#888;border-right:1px solid #3c3c3c}.view-tab:hover{color:#ccc;background:#2d2d2d}.view-tab.active{color:#fff;background:#1e1e1e;border-bottom:2px solid #007acc}.dual-view{flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.view-3d{flex:1;min-width:0;min-height:0;background:#1a1a2e;position:relative;display:flex;flex-direction:column}.view-label{position:absolute;top:8px;left:8px;background:rgba(0,0,0,.7);padding:4px 10px;border-radius:3px;font-size:11px;color:#aaa;z-index:5}.view-3d-canvas{flex:1;min-width:0;min-height:0;display:block}.view-controls{position:absolute;top:8px;right:8px;display:flex;gap:4px;z-index:10}.view-controls .vc-btn{padding:4px 10px;background:rgba(60,60,60,.9);border:1px solid #666;color:#ccc;cursor:pointer;font-size:11px;border-radius:3px}.view-controls .vc-btn:hover{background:rgba(80,80,80,.9)}.view-controls .vc-btn.active{background:#0e639c;border-color:#17b;color:#fff}.view-controls .vc-sep{width:1px;height:18px;background:#555;margin:0 2px}.view-controls .space-tool-group{display:none;align-items:center;gap:4px}.view-controls .space-tool-group.visible{display:flex}.view-3d-canvas.brush-cursor{cursor:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cline x1='21' y1='3' x2='11' y2='13' stroke='%23000' stroke-width='6' stroke-linecap='round'/%3E%3Cline x1='21' y1='3' x2='11' y2='13' stroke='%23e67e22' stroke-width='3' stroke-linecap='round'/%3E%3Cpolygon points='12,13 4,20 9,21 14,16' fill='%23000'/%3E%3Cpolygon points='12.5,14 6,20 9,20.5 13.5,16' fill='%239b59b6'/%3E%3C/svg%3E") 3 21,crosshair}.right-panel{width:220px;background:#252526;border-left:1px solid #3c3c3c;display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto}.right-section{border-bottom:1px solid #3c3c3c}.right-section .section-title{padding:10px 12px;font-size:12px;font-weight:700;color:#e0e0e0;background:#333;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.right-section .section-content{padding:10px 12px}.right-panel[data-mode=space] .right-section[data-panel=cabinet]{display:none}.right-panel[data-mode=space] .right-section[data-panel=space]{border-left:3px solid #4ECDC4}.param-row{display:flex;align-items:center;margin-bottom:8px}.param-label{width:80px;color:#aaa;font-size:12px;flex-shrink:0}.param-input{flex:1;min-width:0;max-width:96px;background:#3c3c3c;border:1px solid #555;color:#d4d4d4;padding:5px 8px;border-radius:3px;font-size:12px;outline:none}.param-input:focus{border-color:#007acc}.param-select{flex:1;background:#3c3c3c;border:1px solid #555;color:#d4d4d4;padding:5px 8px;border-radius:3px;font-size:12px;outline:none}.preset-btns{display:flex;gap:4px;flex-wrap:wrap}.preset-btn{padding:4px 10px;background:#3c3c3c;border:1px solid #555;color:#ccc;cursor:pointer;font-size:11px;border-radius:3px}.preset-btn:hover{background:#4a4a4a}.preset-btn.active{background:#0e639c;border-color:#17b;color:#fff}.action-btn{width:100%;padding:8px;background:#0e639c;border:none;color:#fff;cursor:pointer;font-size:13px;border-radius:3px;margin-bottom:6px}.action-btn:hover{background:#1177bb}.action-btn.success{background:#2ea043}.action-btn.success:hover{background:#3fb950}.action-btn.warning{background:#d29922}.action-btn.warning:hover{background:#e3b341}.action-btn.danger{background:#da3633}.action-btn.danger:hover{background:#f85149}.action-btn.small{padding:5px 10px;font-size:11px;width:auto;display:inline-block}.status-bar{background:#007acc;height:24px;display:flex;align-items:center;padding:0 12px;font-size:12px;color:#fff;flex-shrink:0}.status-bar .status-left{flex:1}.status-bar .status-right{display:flex;gap:16px}.status-bar .status-item{display:flex;align-items:center;gap:4px}.status-dot{width:8px;height:8px;border-radius:50%}.status-dot.green{background:#4caf50}.status-dot.red{background:#f44336}.status-dot.yellow{background:#ff9800}.log-bar{background:#1e1e1e;height:100px;border-top:1px solid #3c3c3c;display:flex;flex-direction:column;flex-shrink:0}.log-tabs{display:flex;background:#333;border-bottom:1px solid #3c3c3c}.log-tab{padding:4px 12px;font-size:11px;color:#888;cursor:pointer;border-right:1px solid #3c3c3c}.log-tab:hover{color:#ccc}.log-tab.active{color:#fff;background:#1e1e1e}.log-content{flex:1;overflow-y:auto;padding:4px 8px;font-family:Consolas,Courier New,monospace;font-size:12px;user-select:text;-webkit-user-select:text;cursor:text}.log-line{padding:2px 0;display:flex;align-items:center;gap:6px}.log-line.info{color:#4fc3f7}.log-line.success{color:#4caf50}.log-line.warning{color:#ff9800}.log-line.error{color:#f44336}.log-time{color:#666;font-size:11px}.checkbox-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12px}.checkbox-row input[type=checkbox]{accent-color:#007acc}.divider{height:1px;background:#3c3c3c;margin:8px 0}#three-canvas{width:100%;height:100%;display:block}.panel-info-overlay{position:absolute;bottom:12px;left:12px;background:rgba(30,30,30,.9);border:1px solid #3c3c3c;padding:10px 14px;border-radius:4px;z-index:10;display:none;min-width:200px}.panel-info-overlay h4{color:#007acc;font-size:13px;margin-bottom:6px}.panel-info-overlay .info-row{font-size:11px;color:#aaa;margin:2px 0}.clip-controls{position:absolute;bottom:12px;right:12px;background:rgba(30,30,30,.9);border:1px solid #3c3c3c;padding:10px 14px;border-radius:4px;z-index:10;display:none}.clip-controls label{font-size:11px;color:#aaa;display:block;margin-top:6px}.clip-controls input[type=range]{width:140px;accent-color:#007acc}.drag-hint{position:absolute;top:40px;left:50%;transform:translate(-50%);background:rgba(218,54,51,.9);padding:6px 16px;border-radius:4px;font-size:12px;color:#fff;display:none;z-index:10}.space-draw-hint{position:absolute;top:40px;left:50%;transform:translate(-50%);background:rgba(78,205,196,.18);border:1px solid rgba(78,205,196,.6);padding:6px 16px;border-radius:14px;font-size:12px;color:#7ff0e6;display:none;z-index:30;white-space:nowrap;pointer-events:none}.space-draw-hint.inputting{background:rgba(255,217,61,.2);border-color:#ffd93dbf;color:#ffe066;font-weight:700}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#1e1e1e}::-webkit-scrollbar-thumb{background:#424242;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.snap-indicator{position:absolute;background:#ff0;opacity:.5;pointer-events:none;z-index:20}.hole-indicator{position:absolute;width:6px;height:6px;border-radius:50%;background:#ff0;pointer-events:none;z-index:15}.handle-indicator{position:absolute;width:12px;height:4px;background:#0ff;pointer-events:none;z-index:15;border-radius:2px}.context-menu{position:absolute;background:#2d2d2d;border:1px solid #555;border-radius:4px;padding:4px 0;z-index:100;display:none;min-width:160px;box-shadow:0 4px 12px #00000080}.context-menu-info{padding:6px 16px;font-size:12px;color:#6fd08c;background:rgba(0,0,0,.25);border-bottom:1px solid #444;margin-bottom:4px;white-space:nowrap}.context-menu-info.hint{color:#888}.context-menu-info.partial{color:#e5c07b}.context-menu-info.ready{color:#6fd08c;font-weight:700}.context-menu-item{padding:8px 16px;font-size:13px;color:#d4d4d4;cursor:pointer;display:flex;align-items:center;gap:8px}.context-menu-item:hover{background:#094771;color:#fff}.context-menu-item .icon{font-size:16px}.context-menu-item.disabled{opacity:.4;pointer-events:none}.context-menu-divider{height:1px;background:#444;margin:4px 0}.validation-report-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#2d2d2d;border:1px solid #555;border-radius:8px;z-index:1000;min-width:600px;max-width:800px;max-height:80vh;display:none;box-shadow:0 8px 32px #0009}.report-header{background:#3c3c3c;padding:12px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #555;cursor:move;user-select:none}.report-header h3{color:#e0e0e0;font-size:16px;margin:0}.report-header .close-btn{background:none;border:none;color:#aaa;font-size:24px;cursor:pointer;padding:0 4px;line-height:1}.report-header .close-btn:hover{color:#fff}.report-body{padding:16px;overflow-y:auto;max-height:calc(80vh - 120px)}.report-footer{background:#3c3c3c;padding:12px 16px;border-radius:0 0 8px 8px;display:flex;gap:8px;justify-content:flex-end;border-top:1px solid #555}.report-footer .action-btn{padding:6px 16px;background:#0e639c;border:1px solid #1177bb;color:#fff;cursor:pointer;font-size:12px;border-radius:3px}.report-footer .action-btn:hover{background:#1177bb}.report-summary{display:flex;gap:16px;margin-bottom:16px;padding:12px;background:#333;border-radius:6px}.summary-item{flex:1;text-align:center;font-size:13px;color:#aaa}.summary-item strong{display:block;font-size:20px;margin-top:4px}.summary-item.total strong{color:#4fc3f7}.summary-item.passed strong{color:#4caf50}.summary-item.errors strong{color:#f44336}.summary-item.warnings strong{color:#ff9800}.summary-item.duration strong{color:#e0e0e0}.report-issues h4{color:#e0e0e0;font-size:14px;margin-bottom:12px}.issue-item{background:#333;border-radius:6px;padding:12px;margin-bottom:8px;border-left:3px solid #555}.issue-item.error{border-left-color:#f44336}.issue-item.warning{border-left-color:#ff9800}.issue-item.info{border-left-color:#4fc3f7}.issue-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.issue-rule{font-size:13px;color:#e0e0e0;font-weight:700}.issue-severity{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:700}.issue-severity.error{background:#f44336;color:#fff}.issue-severity.warning{background:#ff9800;color:#fff}.issue-severity.info{background:#4fc3f7;color:#fff}.issue-message{font-size:12px;color:#aaa;margin-bottom:6px}.issue-holes{font-size:11px;color:#888}.fix-btn{margin-top:8px;padding:4px 12px;background:#0e639c;border:1px solid #1177bb;color:#fff;cursor:pointer;font-size:11px;border-radius:3px}.fix-btn:hover{background:#1177bb}.report-success{text-align:center;padding:40px;color:#4caf50;font-size:16px}.cad-progress-overlay{position:fixed;inset:0;z-index:2000;background:radial-gradient(circle at 50% 50%,rgba(78,205,196,.1) 0%,rgba(8,10,16,0) 55%),rgba(6,9,15,.62);-webkit-backdrop-filter:blur(6px) saturate(1.1);backdrop-filter:blur(6px) saturate(1.1);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .28s ease,visibility .28s ease}.cad-progress-overlay.show{opacity:1;visibility:visible}.cad-progress-overlay:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(78,205,196,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(78,205,196,.055) 1px,transparent 1px);background-size:34px 34px;-webkit-mask-image:radial-gradient(circle at 50% 50%,#000 0%,transparent 72%);mask-image:radial-gradient(circle at 50% 50%,#000 0%,transparent 72%);animation:cadGridDrift 24s linear infinite}.cad-progress-card{position:relative;width:470px;max-width:90vw;padding:20px 22px 18px;border-radius:12px;color:#d7e6f0;background:linear-gradient(160deg,rgba(24,32,46,.62) 0%,rgba(12,18,28,.52) 100%);-webkit-backdrop-filter:blur(16px) saturate(1.25);backdrop-filter:blur(16px) saturate(1.25);border:1px solid rgba(78,205,196,.38);box-shadow:0 20px 60px #0000009e,0 0 32px #4ecdc429,inset 0 0 44px #4ecdc40f;overflow:hidden;transform:translateY(16px) scale(.97);transition:transform .3s cubic-bezier(.2,.8,.3,1),border-color .35s ease,box-shadow .35s ease}.cad-progress-overlay.show .cad-progress-card{transform:translateY(0) scale(1)}.cad-progress-overlay.done .cad-progress-card{border-color:#4caf508c;box-shadow:0 20px 60px #0000009e,0 0 34px #4caf503d,inset 0 0 44px #4caf5012}.cad-progress-overlay.error .cad-progress-card{border-color:#f8514999;box-shadow:0 20px 60px #0000009e,0 0 34px #f8514942}.cad-corner{position:absolute;width:16px;height:16px;border:2px solid rgba(78,205,196,.85);pointer-events:none}.cad-corner.tl{top:7px;left:7px;border-right:none;border-bottom:none}.cad-corner.tr{top:7px;right:7px;border-left:none;border-bottom:none}.cad-corner.bl{bottom:7px;left:7px;border-right:none;border-top:none}.cad-corner.br{bottom:7px;right:7px;border-left:none;border-top:none}.cad-progress-overlay.done .cad-corner{border-color:#4caf50e6}.cad-progress-overlay.error .cad-corner{border-color:#f85149e6}.cad-scanline{position:absolute;left:0;right:0;top:0;height:90px;pointer-events:none;background:linear-gradient(180deg,rgba(78,205,196,0) 0%,rgba(78,205,196,.09) 55%,rgba(78,205,196,0) 100%);animation:cadScanDown 3.6s ease-in-out infinite}.cad-progress-overlay.done .cad-scanline,.cad-progress-overlay.error .cad-scanline{animation:none;opacity:0}.cad-progress-head{position:relative;display:flex;align-items:center;gap:14px;margin-bottom:14px}.cad-radar{position:relative;width:48px;height:48px;flex-shrink:0;border-radius:50%;background:radial-gradient(circle,rgba(78,205,196,.16) 0%,rgba(78,205,196,.03) 70%);border:1px solid rgba(78,205,196,.35);box-shadow:0 0 16px #4ecdc438 inset,0 0 12px #4ecdc424;overflow:hidden}.cad-radar-ring{position:absolute;inset:8px;border-radius:50%;border:1px dashed rgba(78,205,196,.45);animation:cadSpin 6s linear infinite}.cad-radar-ring.inner{inset:16px;border-style:solid;border-color:#4ecdc44d;animation-duration:4s;animation-direction:reverse}.cad-radar-cross:before,.cad-radar-cross:after{content:"";position:absolute;background:rgba(78,205,196,.28)}.cad-radar-cross:before{left:50%;top:6px;bottom:6px;width:1px;transform:translate(-50%)}.cad-radar-cross:after{top:50%;left:6px;right:6px;height:1px;transform:translateY(-50%)}.cad-radar-sweep{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg,rgba(78,205,196,.55) 0deg,rgba(78,205,196,.06) 60deg,transparent 120deg);animation:cadSpin 1.5s linear infinite}.cad-radar-core{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:Consolas,Courier New,monospace;font-size:10px;font-weight:700;letter-spacing:.5px;color:#7cf0e6;text-shadow:0 0 8px rgba(78,205,196,.9);z-index:2}.cad-progress-overlay.done .cad-radar{border-color:#4caf5099;box-shadow:0 0 16px #4caf504d}.cad-progress-overlay.done .cad-radar-sweep{background:conic-gradient(from 0deg,rgba(76,175,80,.45) 0deg,transparent 90deg);animation-duration:3s}.cad-progress-overlay.done .cad-radar-core{color:#8ff0a0;text-shadow:0 0 8px rgba(76,175,80,.9)}.cad-progress-overlay.error .cad-radar{border-color:#f8514999}.cad-progress-overlay.error .cad-radar-sweep{animation-play-state:paused;background:conic-gradient(from 0deg,rgba(248,81,73,.4) 0deg,transparent 90deg)}.cad-progress-overlay.error .cad-radar-core{color:#ff8b84}.cad-progress-headtext{flex:1;min-width:0}.cad-progress-title{font-size:14px;font-weight:600;color:#eaf6ff;letter-spacing:.4px;text-shadow:0 0 12px rgba(78,205,196,.35)}.cad-progress-file{margin-top:4px;font-size:11px;color:#7f8ea3;font-family:Consolas,Courier New,monospace;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-progress-pct{flex-shrink:0;font-family:Consolas,Courier New,monospace;font-size:26px;font-weight:700;line-height:1;letter-spacing:1px;color:#7cf0e6;font-variant-numeric:tabular-nums;text-shadow:0 0 14px rgba(78,205,196,.75),0 0 3px rgba(124,240,230,.9)}.cad-progress-overlay.done .cad-progress-pct{color:#8ff0a0;text-shadow:0 0 14px rgba(76,175,80,.8)}.cad-progress-overlay.error .cad-progress-pct{color:#ff8b84;text-shadow:0 0 14px rgba(248,81,73,.8)}.cad-progress-steps{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin-bottom:12px}.cad-step{display:flex;align-items:center;gap:8px;font-family:Consolas,Courier New,monospace;font-size:11px;color:#64707f;transition:color .2s ease}.cad-step-dot{position:relative;width:12px;height:12px;flex-shrink:0;border:1px solid #46505f;border-radius:2px;transform:rotate(45deg);transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease}.cad-step.active{color:#d5ecf5}.cad-step.active .cad-step-dot{border-color:#4ecdc4;box-shadow:0 0 8px #4ecdc4cc;animation:cadPulse 1.1s ease-in-out infinite}.cad-step.done{color:#8fd6a1}.cad-step.done .cad-step-dot{border-color:#4caf50;background:#4caf50;box-shadow:0 0 8px #4caf50b3}.cad-step.done .cad-step-dot:after{content:"";position:absolute;left:3px;top:-1px;width:3px;height:7px;border:solid #0b1a10;border-width:0 2px 2px 0;transform:rotate(45deg)}.cad-terminal{border:1px solid rgba(78,205,196,.22);border-radius:6px;background:rgba(6,12,18,.55);box-shadow:inset 0 0 22px #4ecdc412;margin-bottom:12px;overflow:hidden}.cad-terminal-bar{display:flex;align-items:center;gap:5px;padding:5px 9px;background:rgba(78,205,196,.07);border-bottom:1px solid rgba(78,205,196,.16)}.cad-term-dot{width:7px;height:7px;border-radius:50%}.cad-term-dot.red{background:#f85149}.cad-term-dot.yellow{background:#d29922}.cad-term-dot.green{background:#3fb950}.cad-terminal-label{margin-left:6px;font-family:Consolas,Courier New,monospace;font-size:10px;letter-spacing:.6px;color:#5f8b96}.cad-terminal-body{height:96px;overflow:hidden;padding:7px 10px;font-family:Consolas,Courier New,monospace;font-size:11px;line-height:1.65}.cad-stream-line{color:#6d8f9b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cad-stream-line .cad-stream-tag{color:#2c8c85;margin-right:6px}.cad-stream-line.ok{color:#7fb98c}.cad-stream-line.ok .cad-stream-tag{color:#3fb950}.cad-stream-line.active{color:#cfeef5}.cad-stream-line.active .cad-stream-tag{color:#4ecdc4}.cad-stream-line.scan{color:#56707d}.cad-stream-line.err{color:#ff8b84}.cad-stream-line.err .cad-stream-tag{color:#f85149}.cad-stream-cursor{display:inline-block;width:7px;height:12px;background:#4ECDC4;vertical-align:-2px;animation:cadBlink 1s steps(1) infinite;margin-left:2px}.cad-progress-overlay.done .cad-terminal{border-color:#4caf5059}.cad-progress-overlay.done .cad-stream-cursor{background:#4caf50}.cad-progress-overlay.error .cad-terminal{border-color:#f8514966;background:rgba(28,8,10,.5)}.cad-progress-track{position:relative;height:9px;border-radius:5px;overflow:hidden;background:rgba(8,14,20,.85);border:1px solid rgba(78,205,196,.18);box-shadow:inset 0 1px 4px #000000b3}.cad-progress-track:after{content:"";position:absolute;inset:0;pointer-events:none;background-image:repeating-linear-gradient(90deg,rgba(255,255,255,.09) 0 1px,transparent 1px 12px)}.cad-progress-fill{position:relative;overflow:hidden;width:0%;height:100%;background:linear-gradient(90deg,#1f7a72,#4ECDC4 70%,#7cf0e6);box-shadow:0 0 12px #4ecdc4b3,0 0 4px #7cf0e6e6;transition:width .25s ease}.cad-progress-fill:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:cadShine 1.2s linear infinite}.cad-progress-overlay.done .cad-progress-fill{background:linear-gradient(90deg,#2ea043,#4caf50,#7ee787);box-shadow:0 0 12px #4caf50b3}.cad-progress-overlay.error .cad-progress-fill{background:linear-gradient(90deg,#da3633,#f85149);box-shadow:0 0 10px #f8514999}.cad-progress-overlay.done .cad-progress-fill:after,.cad-progress-overlay.error .cad-progress-fill:after{animation:none;opacity:0}.cad-board-strip{display:flex;align-items:flex-end;gap:4px;height:16px;margin-top:10px}.cad-board-chip{flex:1;min-width:0;height:100%;border-radius:2px;opacity:.25;background:linear-gradient(180deg,#4ECDC4,#1f7a72);transform-origin:bottom;animation:cadBoardPop 1.4s ease-in-out infinite}.cad-progress-overlay.done .cad-board-chip{opacity:.9;animation:none}.cad-progress-overlay.error .cad-board-chip{background:linear-gradient(180deg,#f85149,#a32820);animation:none;opacity:.45}.cad-progress-meta{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:10px;font-family:Consolas,Courier New,monospace;font-size:11px;color:#7f8ea3;letter-spacing:.3px}.cad-progress-meta .cad-count strong{color:#7cf0e6;font-size:14px;text-shadow:0 0 10px rgba(78,205,196,.6)}.cad-progress-overlay.done .cad-progress-meta .cad-count strong{color:#8ff0a0;text-shadow:0 0 10px rgba(76,175,80,.6)}.cad-progress-meta .cad-elapsed{color:#5f8b96;font-variant-numeric:tabular-nums}@keyframes cadSpin{to{transform:rotate(360deg)}}@keyframes cadPulse{0%,to{box-shadow:0 0 #4ecdc480}50%{box-shadow:0 0 8px 2px #4ecdc40d}}@keyframes cadBoardPop{0%,to{opacity:.16;transform:scaleY(.5)}45%{opacity:1;transform:scaleY(1)}}@keyframes cadShine{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes cadBlink{0%,50%{opacity:1}50.01%,to{opacity:0}}@keyframes cadScanDown{0%{transform:translateY(-100%);opacity:0}25%{opacity:1}75%{opacity:1}to{transform:translateY(460%);opacity:0}}@keyframes cadGridDrift{0%{background-position:0 0,0 0}to{background-position:34px 34px,34px 34px}}.login-overlay{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 50%,#0a0a1a 0%,#16213e 35%,#0f3460 100%);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.login-overlay .login-bg-line{position:absolute;inset:0;pointer-events:none;background-image:repeating-linear-gradient(90deg,rgba(0,180,255,.05) 0px,rgba(0,180,255,.05) 1px,transparent 1px,transparent 30px),repeating-linear-gradient(0deg,rgba(0,180,255,.05) 0px,rgba(0,180,255,.05) 1px,transparent 1px,transparent 30px)}.login-card{position:relative;display:flex;width:900px;height:550px;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 10px 30px #0000004d;border:1px solid rgba(255,255,255,.1)}.login-left{flex:1;position:relative;overflow:hidden;background:linear-gradient(135deg,#16213e 0%,#0f3460 100%);color:#fff;padding:60px 40px;display:flex;flex-direction:column;justify-content:space-between}.login-left:before{content:"";position:absolute;inset:0;background:linear-gradient(45deg,rgba(64,158,255,.1) 0%,transparent 50%),linear-gradient(135deg,rgba(102,126,234,.1) 0%,transparent 50%)}.login-left>*{position:relative;z-index:1}.login-logo{display:flex;align-items:center;gap:15px;margin-bottom:60px}.login-logo-icon{width:50px;height:50px;border-radius:10px;background:#fff;display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:700;color:#667eea}.login-logo-text{font-size:24px;font-weight:600;margin-bottom:5px}.login-logo-sub{font-size:14px;opacity:.9}.login-welcome{flex:1;display:flex;flex-direction:column;justify-content:center}.login-welcome h2{font-size:32px;font-weight:600;margin:0 0 10px}.login-welcome p{font-size:18px;opacity:.9;margin:0}.login-icp{font-size:12px;opacity:.8}.login-right{flex:1;padding:60px 40px;display:flex;flex-direction:column;justify-content:center}.login-title{font-size:24px;font-weight:600;color:#333;margin-bottom:30px;text-align:center}.login-item{margin-bottom:10px}.login-item label{display:block;font-size:14px;font-weight:500;color:#555;margin-bottom:6px}.login-item input{width:100%;box-sizing:border-box;padding:10px;border:1px solid #e0e0e0;border-radius:6px;font-size:14px;transition:all .3s ease}.login-item input:focus{outline:none;border-color:#409eff;box-shadow:0 0 0 2px #409eff1a}.login-btn{width:100%;padding:12px;margin:10px 0 15px;border:none;border-radius:6px;font-size:16px;font-weight:600;color:#fff;background:linear-gradient(135deg,#409eff 0%,#667eea 100%);cursor:pointer;transition:all .3s ease}.login-btn:hover{transform:translateY(-2px);box-shadow:0 5px 15px #409eff4d}.login-btn:disabled{opacity:.65;cursor:not-allowed;transform:none}.login-toast{position:fixed;left:50%;top:40px;transform:translate(-50%,-12px);padding:10px 26px;border-radius:8px;font-size:14px;color:#fff;background:rgba(0,0,0,.78);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;z-index:100000}.login-toast.show{opacity:1;transform:translate(-50%)}.login-toast.error{background:rgba(200,40,40,.92)}.login-toast.success{background:rgba(30,150,90,.92)}.login-toast.info{background:rgba(0,0,0,.8)}@media (max-width: 968px){.login-card{width:92%;height:auto;max-height:95vh;flex-direction:column}.login-left{padding:34px 26px;text-align:center}.login-logo{justify-content:center;margin-bottom:20px}.login-right{padding:30px 22px}}.menu-bar-user{margin-left:auto;display:flex;align-items:center;gap:8px;padding-left:12px;flex-shrink:0}.menu-bar-user .user-avatar{width:20px;height:20px;border-radius:50%;background:#e94560;color:#fff;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;user-select:none}.menu-bar-user .user-meta{display:flex;align-items:baseline;gap:6px;max-width:340px;overflow:hidden}.menu-bar-user .user-name{color:#fff;font-size:13px;font-weight:600;white-space:nowrap}.menu-bar-user .user-company{color:#9aa4b2;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.menu-bar-user .user-company:empty{display:none}.logout-btn{margin-left:4px;padding:2px 10px;font-size:12px;color:#ffb4b4;background:transparent;border:1px solid rgba(255,107,107,.5);border-radius:4px;cursor:pointer;transition:all .2s ease}.logout-btn:hover{color:#fff;background:rgba(255,107,107,.75);border-color:#ff6b6b}html.pcs-locked{overflow:hidden}html.pcs-locked body>*:not(#login-overlay){visibility:hidden!important}html.pcs-locked #login-overlay{visibility:visible!important}.login-server-hint{margin:6px 0 12px;padding:10px 12px;border-radius:6px;background:rgba(255,165,0,.1);border:1px solid rgba(255,165,0,.55);color:#8a6100;font-size:12px;line-height:1.7}.login-server-hint .hint-title{font-weight:600;color:#d97706;margin-bottom:4px}.login-server-hint .hint-body{color:#8a6100}.login-server-hint code{background:rgba(0,0,0,.07);padding:0 4px;border-radius:3px;font-family:Consolas,Courier New,monospace}.drawer-model-overlay{position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.55)}.drawer-model-card{width:560px;max-width:94vw;max-height:88vh;display:flex;flex-direction:column;background:#252526;border:1px solid #454545;border-radius:8px;box-shadow:0 12px 40px #000000a6;color:#d4d4d4;font-size:13px}.drawer-model-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#2f2f30;border-bottom:1px solid #454545;border-radius:8px 8px 0 0}.drawer-model-header h3{margin:0;font-size:15px;color:#e8e8e8;font-weight:600}.drawer-model-header .dm-close{background:none;border:none;color:#aaa;font-size:22px;line-height:1;cursor:pointer;padding:0 4px}.drawer-model-header .dm-close:hover{color:#fff}.drawer-model-body{padding:14px 16px;overflow-y:auto}.dm-info{background:#1f1f20;border:1px solid #3a3a3a;border-radius:6px;padding:8px 12px;margin-bottom:12px}.dm-info-line{display:flex;gap:10px;padding:2px 0;font-size:12px;color:#9a9a9a}.dm-info-line span{flex:0 0 62px;color:gray}.dm-info-line b{color:#dcdcaa;font-weight:500}.dm-params{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px}.dm-row{display:flex;align-items:center;gap:8px}.dm-row .dm-label{flex:0 0 84px;color:#b0b0b0;font-size:12px}.dm-row .dm-input{flex:1 1 auto;min-width:0;background:#1e1e1e;color:#e0e0e0;border:1px solid #3c3c3c;border-radius:4px;padding:4px 6px;font-size:12px;outline:none}.dm-row .dm-input:focus{border-color:#0e639c;box-shadow:0 0 0 1px #0e639c99}.dm-row .dm-unit{flex:0 0 auto;color:#7d7d7d;font-size:11px}.dm-preview{margin-top:14px;padding:10px 12px;border-radius:6px;background:rgba(14,99,156,.12);border:1px solid rgba(14,99,156,.5)}.dm-preview.error{background:rgba(200,40,40,.12);border-color:#dc464699}.dm-preview-title{font-size:12px;font-weight:600;color:#6fb3e0;margin-bottom:6px}.dm-preview.error .dm-preview-title{color:#ff8b84}.dm-preview-err{font-size:12px;color:#ffb4b4;line-height:1.6}.dm-preview-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 14px}.dm-preview-grid>div{display:flex;justify-content:space-between;font-size:12px}.dm-preview-grid span{color:#9a9a9a}.dm-preview-grid b{color:#dcdcaa;font-weight:500}.dm-preview-note{margin-top:6px;font-size:11px;color:#8a8a8a;line-height:1.5}.drawer-model-footer{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#2f2f30;border-top:1px solid #454545;border-radius:0 0 8px 8px}.drawer-model-footer .dm-spacer{flex:1 1 auto}.dm-btn{padding:6px 16px;font-size:12px;border-radius:4px;cursor:pointer;background:#3a3a3a;color:#d4d4d4;border:1px solid #4a4a4a;transition:background .15s ease}.dm-btn:hover{background:#454545}.dm-btn.ghost{background:transparent;color:#9a9a9a}.dm-btn.ghost:hover{background:#3a3a3a;color:#d4d4d4}.dm-btn.primary{background:#0e639c;border-color:#17b;color:#fff}.dm-btn.primary:hover{background:#1177bb}.dm-btn.primary:disabled{opacity:.45;cursor:not-allowed;background:#0e639c}
