:root{--nav:#273650;--navdark:#202e46;--blue:#0878cf;--ink:#1f3046;--muted:#8491a3;--line:#e5eaf0;--bg:#f3f5f8;--green:#22a57c;--red:#e16b64;--orange:#e7a343;--shadow:0 8px 28px #20344816}*{box-sizing:border-box}body{margin:0;font:14px/1.55 "Microsoft YaHei","PingFang SC",Arial,sans-serif;color:var(--ink);background:var(--bg)}button,input,select,textarea{font:inherit}button{cursor:pointer;transition:background .15s,border .15s}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,a:focus-visible{outline:3px solid #80c6ff;outline-offset:2px}a{color:var(--blue)}.sidebar{width:214px;position:fixed;inset:0 auto 0 0;background:var(--nav);color:#dbe5f3;z-index:15;display:flex;flex-direction:column}.brand{height:76px;display:flex;align-items:center;gap:11px;padding:0 22px;background:var(--navdark)}.brand-icon{font-size:27px;color:#9bd4ff}.brand strong{font-size:16px;letter-spacing:1px}.brand small{display:block;letter-spacing:4px;font-size:10px;color:#9eafc7;margin-top:2px}.project-badge{margin:24px 18px 20px;padding:12px;border:1px solid #ffffff15;border-radius:4px;color:#b0c0d7;font-size:11px}.project-badge strong{display:block;color:#edf4ff;font-size:14px;margin:4px 0}.nav-label{font-size:10px;color:#879bb9;padding:10px 23px;letter-spacing:2px}.nav-item{border:0;color:#c7d4e5;background:none;display:flex;align-items:center;gap:13px;width:100%;padding:16px 23px;text-align:left;font-size:14px;border-left:3px solid transparent}.nav-item.active{background:var(--blue);color:#fff;border-color:#8ed3ff}.nav-item:not(.active):hover{background:#ffffff09}.nav-icon{width:19px;font-size:18px}.nav-bottom{margin-top:auto;border-top:1px solid #ffffff12;padding:18px 22px;font-size:11px;color:#90a3be}.online{display:inline-block;background:#48b89b;width:6px;height:6px;border-radius:50%;margin-right:6px}.workspace{margin-left:214px;min-height:100vh}.topbar{height:64px;background:#fff;border-bottom:1px solid var(--line);padding:0 28px;display:flex;align-items:center;justify-content:space-between;gap:16px}.crumb{color:#a3adba;font-size:12px}.crumb b{color:#65758a;font-weight:400}.top-right{display:flex;align-items:center;gap:22px;font-size:12px}.project-name{font-weight:600}.avatar{display:inline-flex;width:29px;height:29px;align-items:center;justify-content:center;background:#e8f2fb;color:var(--blue);border-radius:50%;margin-right:7px}.text-btn{background:none;border:0;color:var(--blue);padding:2px 5px}.notify{position:relative;color:#738295;font-size:20px;background:none;border:0}.notify b{position:absolute;font-size:9px;background:var(--red);color:white;right:-5px;top:0;border-radius:8px;padding:0 4px}.page-header{background:#fff;padding:23px 28px 0}.heading-line{display:flex;justify-content:space-between;align-items:center;gap:15px}.heading-line h1{font-weight:600;font-size:22px;margin:0 0 5px;letter-spacing:.5px}.subtitle{font-size:12px;color:var(--muted);margin-bottom:19px}.subtabs{display:flex;gap:30px;border-bottom:1px solid var(--line)}.tab{border:0;background:none;padding:12px 0 14px;color:#6d7c90;border-bottom:2px solid transparent}.tab.active{color:var(--blue);border-color:var(--blue);font-weight:600}.content{padding:20px 24px 28px;max-width:2100px;margin:auto}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.toolbar.between{justify-content:space-between}.toolbar-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap;min-height:33px;padding:6px 13px;background:white;border:1px solid #d6dee8;border-radius:3px;color:#485c73;font-size:12px}.btn:hover{border-color:#87b8df;color:var(--blue);background:#f8fbff}.btn.primary{background:var(--blue);border-color:var(--blue);color:white}.btn.primary:hover{background:#066dbb}.btn.danger{color:#cf6561}.btn.small{min-height:27px;padding:3px 9px;font-size:11px}.input,select,textarea{border:1px solid #d9e1eb;border-radius:3px;padding:7px 10px;min-height:33px;background:#fff;color:var(--ink);font-size:12px;outline:0}.input:focus,select:focus,textarea:focus{border-color:#63afe5}.input::placeholder{color:#a7b1c0}.search{width:230px}.panel{background:#fff;border:1px solid var(--line);border-radius:4px}.panel-header{padding:15px 18px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);gap:10px}.panel-title{font-weight:600;font-size:14px}.panel-sub{font-size:11px;color:var(--muted);font-weight:400}.muted{color:var(--muted);font-size:12px}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}.metric{background:#fff;border:1px solid var(--line);border-radius:4px;padding:17px 19px;position:relative}.metric-label{color:#7d8c9f;font-size:12px}.metric-val{font-size:29px;line-height:1.4;font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:-1px;margin:5px 0}.metric-val small{font-size:13px;font-weight:400;color:#8793a4;margin-left:5px;letter-spacing:0}.metric-foot{font-size:11px;color:#99a4b3}.metric-icon{position:absolute;right:17px;top:18px;background:#f1f7fc;color:#87accb;font-size:17px;width:30px;height:30px;text-align:center;border-radius:4px}.blue{color:var(--blue)}.green{color:var(--green)}.red{color:var(--red)}.amber{color:var(--orange)}.split{display:grid;grid-template-columns:minmax(420px,1.1fr) minmax(430px,1fr);gap:16px;align-items:stretch}.overview-split{grid-template-columns:minmax(430px,1.4fr) minmax(330px,.8fr)}.model-panel{min-height:530px;position:relative;overflow:hidden;display:flex;flex-direction:column}.model-head{padding:12px 15px;background:white;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;font-size:12px}.model-head select{max-width:220px}.model-canvas{background:radial-gradient(ellipse at 50% 55%,#fff 0,#f4f7fa 58%,#edf2f6 100%);flex:1;min-height:430px;position:relative;overflow:hidden}.model-canvas svg{width:100%;height:100%;position:absolute;inset:0;min-height:400px}.model-canvas .model-shape{cursor:pointer;transition:filter .2s;outline:0}.model-canvas .model-shape:hover{filter:brightness(1.13)}.model-canvas .model-shape.selected{filter:drop-shadow(0 0 7px #078bff)}.model-label{position:absolute;left:18px;top:15px;font-size:11px;color:#8b9caf;pointer-events:none}.model-label strong{display:block;font-size:13px;color:#64788b;letter-spacing:1px;margin-bottom:4px}.model-compass{position:absolute;right:16px;top:18px;border:1px solid #cdd8e2;background:#ffffffad;width:38px;height:38px;transform:rotate(30deg);display:grid;place-items:center;color:#8296a9;font-size:11px}.model-compass span{transform:rotate(-30deg)}.model-legend{display:flex;gap:14px;padding:10px 15px;border-top:1px solid var(--line);font-size:10px;color:#728397;flex-wrap:wrap}.dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px}.model-footer{padding:7px 15px;color:#9aa6b4;font-size:10px;background:#fbfcfd;display:flex;justify-content:space-between}.model-detail{position:absolute;bottom:20px;left:16px;right:16px;background:#fff;padding:12px 14px;box-shadow:var(--shadow);border:1px solid #dde9f4;border-left:3px solid var(--blue);display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:11px}.model-detail strong{display:block;font-size:13px;margin-bottom:4px}.task-card{padding:13px 16px;border-bottom:1px solid #edf0f4;cursor:pointer;transition:background .15s}.task-card:hover{background:#f7fbff}.task-card:last-child{border:0}.task-card-top{display:flex;justify-content:space-between;gap:10px;align-items:center}.task-card-title{font-weight:500;font-size:12px}.task-card-meta{font-size:10px;color:#94a1b1;margin:5px 0 8px}.progress-row{display:flex;align-items:center;gap:10px;font-size:11px}.progress-track{height:5px;background:#edf1f5;flex:1;border-radius:5px;overflow:hidden}.progress-bar{background:var(--blue);height:100%;border-radius:5px}.status{font-size:10px;display:inline-block;padding:2px 7px;border-radius:3px;background:#f0f3f7;color:#8c99aa;white-space:nowrap;line-height:1.6}.status.ok{background:#eaf7f1;color:#2e9b78}.status.warn{background:#fff4e4;color:#c89545}.status.bad{background:#fcefee;color:#d36a64}.status.info{background:#eaf3fc;color:#438dc5}.section-gap{margin-top:18px}.table-wrap{overflow:auto;max-width:100%}table{border-collapse:collapse;min-width:100%;font-size:12px;white-space:nowrap;text-align:left}th{background:#f5f7fa;color:#7b899c;font-size:11px;font-weight:500;padding:12px 13px;border-bottom:1px solid var(--line)}td{padding:12px 13px;border-bottom:1px solid #edf0f4;height:50px}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#f9fbfd}.row-parent{background:#fafbfd;font-weight:600}.row-selected{background:#eef7ff!important}.code{font-size:10px;color:#9ba7b6;font-family:Arial,sans-serif;letter-spacing:.15px}.num{font-variant-numeric:tabular-nums}.table-name{min-width:210px;white-space:normal}.row-actions{display:flex;gap:8px;font-size:11px}.link{color:var(--blue);border:0;background:none;padding:0;white-space:nowrap;font-size:11px}.link:hover{text-decoration:underline}.table-footer{padding:12px 15px;display:flex;justify-content:space-between;align-items:center;color:#94a0af;font-size:11px;border-top:1px solid var(--line)}.pagination{display:flex;gap:7px;align-items:center}.page-no{background:#eaf4fd;color:var(--blue);border:1px solid #aad0ee;padding:2px 8px;border-radius:2px}.note{color:#8593a5;font-size:11px;margin:11px 0 0;line-height:1.8}.info-line{padding:10px 14px;border:1px solid #dceaf6;background:#f4f9fd;border-radius:3px;font-size:11px;color:#6b8fab}.warn-line{padding:11px 14px;border:1px solid #eed5ac;background:#fff9f0;color:#bd8d49;border-radius:3px;font-size:12px}.empty{padding:50px 20px;text-align:center;color:#96a3b4;font-size:12px}.tree-toggle{border:0;background:none;color:#7b8ca1;width:20px;padding:0}.cell-progress{display:flex;gap:8px;align-items:center;min-width:100px}.cell-progress .progress-track{max-width:65px}.tree-layout{display:grid;grid-template-columns:240px minmax(300px,1fr);gap:16px}.tree-panel{padding:12px 0;align-self:start}.tree-title{padding:5px 17px 13px;font-size:12px;font-weight:600;border-bottom:1px solid var(--line)}.tree-item{padding:10px 15px;display:flex;align-items:center;font-size:12px;cursor:pointer;border-left:2px solid transparent}.tree-item.active{background:#edf6fe;color:var(--blue);border-left-color:var(--blue)}.tree-item.sub{padding-left:28px;font-size:11px}.tree-item:hover{background:#f5f9fd}.tree-count{margin-left:auto;color:#a2adbb;font-size:10px}.quantity-summary{padding:15px}.quantity-card{border:1px solid var(--line);padding:14px;margin-bottom:10px;border-radius:3px;cursor:pointer}.quantity-card.active{border-color:#94c4e9;background:#f8fcff}.quantity-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.quantity-values{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}.quantity-values b{font-size:22px;font-weight:600}.quantity-values small{font-size:10px;color:#94a1b1;display:block}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 20px;padding:19px 0}.kv label{font-size:11px;color:#91a0b2;display:block;margin-bottom:6px}.kv b{font-size:13px;font-weight:500}.divider{border-top:1px solid var(--line);margin:18px 0}.modal-backdrop{position:fixed;inset:0;z-index:100;background:#17263d59;display:flex;justify-content:center;align-items:center;backdrop-filter:blur(1px)}.modal{width:600px;max-width:94vw;max-height:90vh;background:#fff;border-radius:5px;box-shadow:0 20px 80px #17263d44;display:flex;flex-direction:column;animation:enter .18s}.modal.wide{width:800px}.drawer{position:fixed;right:0;top:0;bottom:0;width:520px;max-width:95vw;background:#fff;display:flex;flex-direction:column;box-shadow:-10px 0 50px #17263d25;animation:slide .2s}.modal-header{padding:19px 23px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;font-size:16px;font-weight:600}.close{border:0;background:none;color:#9ba8b7;font-size:22px;padding:0 3px}.modal-body{padding:20px 23px;overflow:auto}.modal-footer{padding:14px 23px;display:flex;justify-content:flex-end;gap:9px;border-top:1px solid var(--line);background:#fcfdfe}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:17px}.form-field label{display:block;font-size:12px;margin-bottom:7px;color:#687b92}.form-field input,.form-field select,.form-field textarea{width:100%}.form-field.full{grid-column:1/-1}.required{color:var(--red)}.form-readonly{padding:8px 10px;background:#f5f7fa;border:1px solid #e6ebf1;border-radius:3px;font-size:12px}.form-error{padding:8px 0;color:var(--red);font-size:12px;min-height:17px}.timeline-item{padding:0 0 23px 20px;border-left:1px solid #dce5ee;position:relative;font-size:12px}.timeline-item:before{content:"";position:absolute;left:-4px;top:5px;width:7px;height:7px;background:#74add8;border:2px solid #fff;border-radius:50%}.timeline-item time{display:block;font-size:10px;color:#99a5b5;margin-bottom:6px}.timeline-item p{font-size:11px;color:#8191a4;margin:5px 0}.blocked{border:1px solid #f0ccca;background:#fff5f4;border-radius:4px;padding:14px;margin-bottom:16px}.blocked h3{font-size:14px;color:#c66059;margin:0 0 6px}.blocked p{font-size:12px;color:#aa7773;margin:3px 0}.chips{display:flex;gap:7px;flex-wrap:wrap}.chip{padding:3px 8px;border:1px solid #dce4ed;border-radius:3px;font-size:11px;color:#7a8ca0;background:#fff}.chip.active{background:#ebf5fe;border-color:#94c4eb;color:var(--blue)}.association-bar{background:#f4f9fe;border:1px solid #d5e7f6;padding:12px 15px;border-radius:3px;display:flex;justify-content:space-between;align-items:center;font-size:12px}.association-check{padding:9px 0;border-bottom:1px solid #eef1f6;display:flex;gap:10px;font-size:12px;align-items:center}.association-check input{accent-color:var(--blue)}.qr-card{border:1px solid #e2e7ee;border-radius:4px;padding:22px;display:flex;align-items:center;gap:20px;background:white}.qr-card svg{width:125px;height:125px;flex-shrink:0}.qr-card strong{font-size:18px}.qr-card p{font-size:11px;color:#7d8fa2;margin:5px 0}.label-preview{border:1px dashed #c9d8e6;padding:20px;background:#f9fbfd;border-radius:3px;margin-top:15px}.checklist{display:flex;flex-direction:column;gap:12px;margin-top:15px;font-size:12px}.checklist label{cursor:pointer}.checklist input{accent-color:var(--blue);margin-right:8px}.mini-table td,.mini-table th{padding:9px;font-size:11px}.gantt-bar{height:7px;background:#bad9f0;border-radius:2px}.gantt-actual{height:7px;background:#39a789;margin-top:5px;border-radius:2px}.notice-row{display:flex;gap:12px;padding:15px 0;border-bottom:1px solid var(--line);cursor:pointer}.notice-symbol{color:var(--orange);font-size:20px}.notice-row p{font-size:12px;margin:0 0 5px}.notice-row time{font-size:10px;color:#98a5b5}.message-empty{padding:30px 0;color:#94a2b4;text-align:center}#toast{position:fixed;top:22px;left:50%;transform:translate(-50%,-20px);background:#21364bea;color:white;font-size:12px;padding:11px 22px;border-radius:4px;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.2s;z-index:300}#toast.show{opacity:1;transform:translate(-50%,0)}.demo-indicator{font-size:10px;color:#97a5b6;border:1px solid #e0e7ee;padding:2px 7px;border-radius:3px}.connection{font-size:10px;color:#9aa8b8;margin-top:8px}.summary-kpis{display:grid;grid-template-columns:repeat(3,1fr);padding:16px;gap:8px;border-bottom:1px solid var(--line)}.summary-kpis>div{border-right:1px solid var(--line);text-align:center}.summary-kpis>div:last-child{border:0}.summary-kpis b{display:block;font-size:23px;font-weight:500}.summary-kpis span{font-size:10px;color:#93a0b0}.selected-tag{font-size:10px;color:var(--blue);padding:1px 6px;background:#edf6ff;border-radius:3px}.clickable{cursor:pointer}.field-help{font-size:10px;color:#99a7b7;margin-top:5px}.history-tabs{margin-top:20px;font-size:13px;font-weight:600;border-bottom:1px solid var(--line);padding-bottom:10px}.print-sheet{background:white;padding:20px}.heading-tag{font-size:10px;color:#7890a8;font-weight:400;margin-left:10px}.stat-click{cursor:pointer}.stat-click:hover{border-color:#a7cdec}.csv-drop{border:1px dashed #b9cde0;padding:28px;text-align:center;background:#f8fbfe;border-radius:4px;margin-bottom:14px}.csv-drop input{max-width:100%;font-size:12px}.tree-empty{padding:20px;color:#9eabba;font-size:11px}@keyframes enter{from{transform:translateY(7px);opacity:.4}}@keyframes slide{from{transform:translateX(25px);opacity:.4}}@media(min-width:1650px){.model-panel{min-height:600px}.model-canvas{min-height:490px}}@media(max-width:1180px){.sidebar{width:180px}.workspace{margin-left:180px}.content{padding:16px}.split{grid-template-columns:1fr}.metrics{gap:8px}.metric{padding:13px}.model-panel{min-height:470px}.model-canvas{min-height:390px}.project-name{display:none}.tree-layout{grid-template-columns:200px minmax(300px,1fr)}}@media(max-width:760px){.sidebar{width:60px}.brand{padding:0 15px}.brand strong,.project-badge,.nav-label,.nav-item span:not(.nav-icon),.nav-bottom{display:none}.nav-item{padding:17px}.workspace{margin-left:60px}.topbar{padding:0 15px}.top-right{gap:10px}.page-header{padding:18px 15px 0}.metrics{grid-template-columns:1fr 1fr}.tree-layout{grid-template-columns:1fr}.tree-panel{display:none}.form-grid{grid-template-columns:1fr}.form-field.full{grid-column:auto}.heading-line{align-items:flex-start}.subtabs{gap:22px}.model-head select{max-width:180px}.search{width:180px}}@media print{body{background:white}.sidebar,.workspace,#toast{display:none}.modal-backdrop{position:static;background:white;display:block}.modal{box-shadow:none;max-height:none;width:100%}.modal-header,.modal-footer{display:none}.modal-body{overflow:visible}.no-print{display:none}}
:root{color-scheme:light}.brand strong{font-size:15px;white-space:nowrap}.brand small{font-size:9px;letter-spacing:2.2px}.form-field input:disabled{color:#8897a9}.model-shape:focus{filter:drop-shadow(0 0 6px #078bff)}
.pour-check-panel{border:1px solid #dce8f2;border-radius:3px;background:#f7fbff;padding:14px;margin:16px 0;color:#344c64;font-size:12px}
.pour-check-panel p{margin:10px 0}
.pour-check-panel details{margin-top:12px}
.pour-check-panel summary{color:#0878cf;cursor:pointer;padding:4px 0}
.pour-check-panel .table-wrap{margin-top:10px;background:#fff}
.quantity-filters{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);border-radius:4px;padding:14px;margin-bottom:16px}
.quantity-filters label{display:flex;flex-direction:column;gap:5px;font-size:11px;color:#7d8c9f}
.quantity-filters select{min-width:110px;max-width:220px}
.quantity-filters .input{width:143px}
button.quantity-card{display:block;width:100%;text-align:left;background:#fff;color:var(--ink);font:inherit}
button.quantity-card.active{background:#f8fcff}
.quantity-values{grid-template-columns:repeat(3,minmax(0,1fr))}
.quantity-values b{font-size:21px}
.warehouse-installation{margin-top:18px}
.quantity-filters+.split .model-panel{min-height:510px}
input[readonly]{background:#f5f7fa;color:#8897a9}
.metrics+.warehouse-installation{margin-top:0}
.quantity-values{grid-template-columns:repeat(2,minmax(0,1fr))}
.gantt-table{width:100%;min-width:1020px;table-layout:fixed}
.gantt-table .gantt-task-name{width:280px;white-space:normal}
.gantt-table .gantt-key{width:88px;color:#8997a7;font-size:10px}
.gantt-table th:last-child{width:85px}
.gantt-table td{height:62px;padding:8px 12px}
.gantt-name-content{display:flex;align-items:center;gap:2px}
.gantt-name-content>.link{white-space:normal;text-align:left;color:var(--ink);font-size:11px}
.gantt-leaf-space{width:20px;flex:0 0 20px}
.gantt-axis-cell{padding:8px 12px}
.gantt-axis{height:28px;position:relative}
.gantt-tick{position:absolute;top:4px;font-size:10px;white-space:nowrap}
.gantt-tick.last{transform:translateX(-100%)}
.gantt-chart-cell{background-image:linear-gradient(to right,#e9edf3 1px,transparent 1px);background-size:20% 100%}
.gantt-track{height:42px;position:relative}
.gantt-today{position:absolute;top:-8px;bottom:-8px;border-left:1px dashed #e5a365;z-index:2;pointer-events:none}
.gantt-plan-slot,.gantt-actual-slot{position:relative;height:21px}
.gantt-plan-block,.gantt-actual-block{position:absolute;top:5px;height:9px;border-radius:2px;min-width:2px;overflow:hidden}
.gantt-plan-block{background:#a9cfe9}
.gantt-actual-block{background:#dcefe9;border:1px solid #89c9b4}
.gantt-actual-block>span{display:block;height:100%;background:#35a37e}
.gantt-key>div{height:21px;display:flex;align-items:center;gap:5px}
.gantt-key i{width:9px;height:6px;border-radius:1px;display:inline-block}
.gantt-plan-key{background:#a9cfe9}.gantt-actual-key{background:#35a37e}
.gantt-not-started{font-size:10px;color:#a6b0be;line-height:21px}
