:root{--bg:#16181c;--panel:#1f2228;--panel-2:#262a31;--line:#343943;--text:#e6e8ec;--text-dim:#969ba5;--accent:#4a9eff;--danger:#e05252;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,system-ui,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);overflow:hidden}.app{grid-template:"toolbar toolbar""workspace inspector"1fr/1fr 260px;height:100%;display:grid}.toolbar{grid-area:toolbar}.workspace{grid-area:workspace;min-width:0;min-height:0;display:grid}.workspace.mode-split{grid-template-columns:1fr 1fr}.workspace.mode-plan,.workspace.mode-view3d{grid-template-columns:1fr}.inspector{grid-area:inspector}.toolbar{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:14px;padding:8px 12px;display:flex}.toolbar .group{align-items:center;gap:6px;display:flex}.toolbar .doc-name{width:160px;font-weight:600}button,select,input{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:5px;padding:4px 9px}button{cursor:pointer}button:hover:not(:disabled){background:#2e333b;border-color:#4b525d}button:disabled{opacity:.4;cursor:default}button.active{background:var(--accent);border-color:var(--accent);color:#08101c;font-weight:600}button.danger{color:var(--danger);border-color:#4a2c2c;width:100%;margin-top:8px}button.danger:hover{background:#3a2323}.segmented{gap:0}.segmented button{border-right-width:0;border-radius:0}.segmented button:first-child{border-radius:5px 0 0 5px}.segmented button:last-child{border-right-width:1px;border-radius:0 5px 5px 0}.toolbar label{color:var(--text-dim);align-items:center;gap:5px;display:inline-flex}.toolbar label.check input{accent-color:var(--accent);padding:0}.plan2d{border-right:1px solid var(--line);background:#101215;min-width:0;min-height:0;position:relative}.plan2d svg{touch-action:none;width:100%;height:100%;display:block}.plan2d.tool-wall svg{cursor:crosshair}.plan2d.panning svg{cursor:grab}.grid-line-fine{stroke:#22262c;stroke-width:1px}.grid-line-coarse{stroke:#2f353d;stroke-width:1px}.grid-axis{stroke:#4a5260;stroke-width:1px}.wall-body{fill:#b9c0cb;stroke:#e8edf5;stroke-width:1px;cursor:pointer}.wall-body.wall-bearing{fill:#8f97a3}.wall-body.wall-virtual{fill:none;stroke:#6c7480;stroke-dasharray:6 4}.wall-body.selected{fill:var(--accent);stroke:#bcdcff;stroke-width:2px}.room-fill{fill:#7896be1a;stroke:none;cursor:pointer}.room-fill:hover{fill:#7896be2e}.room.selected .room-fill{fill:#4a9eff3d}.room-name{fill:#cdd5e0;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round;font-weight:600}.room-area{fill:#9aa3af;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round}.item-body{fill:#6b7688;fill-opacity:.55;stroke:#cbd5e4;stroke-width:1px;cursor:move}.item-body.item-layer-appliance{fill:#5c6c78}.item-body.item-layer-sanitary{fill:#59707d}.item.selected .item-body{fill:var(--accent);fill-opacity:.6;stroke:#cfe6ff;stroke-width:2px}.item-front{stroke:#ffd166;stroke-width:2px}.item-label{fill:#e2e7ee;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round;pointer-events:none}.item-clearance{fill:#ffd16612;stroke:#ffd16680;stroke-width:1px;stroke-dasharray:6 4;pointer-events:none}.item-ghost-body{fill:#4a9eff4d;stroke:var(--accent);stroke-width:1px}.plan2d.tool-item svg{cursor:copy}.rotate-row{align-items:center;gap:8px;margin-bottom:7px;display:flex}.rotate-row button{padding:2px 10px;font-size:14px;line-height:1.2}.rotate-value{font-variant-numeric:tabular-nums;color:var(--text);text-align:center;min-width:44px}.plan2d.tool-select .wall-body:hover{fill:#d3dae4}.plan2d.tool-select .item:hover .item-body{fill-opacity:.75;stroke-width:2px}.plan2d.tool-select .opening:hover .opening-jamb,.plan2d.tool-select .opening:hover .window-line,.plan2d.tool-select .opening:hover .door-leaf{stroke:#ffe08a}.plan2d.tool-select .route:hover .route-line{stroke-width:4px}.plan2d.tool-select .dimension:hover .dim-line,.plan2d.tool-select .dimension:hover .dim-ext{stroke:#f0d79a}.overlay-backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:20;background:#080a0d99;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.shortcuts{background:var(--panel);border:1px solid var(--line);border-radius:10px;width:min(760px,92vw);max-height:86vh;overflow-y:auto;box-shadow:0 18px 50px #00000080}.shortcuts header{border-bottom:1px solid var(--line);background:var(--panel);justify-content:space-between;align-items:center;padding:14px 18px;display:flex;position:sticky;top:0}.shortcuts h2{margin:0;font-size:15px}.shortcuts header button{padding:2px 10px}.shortcut-groups{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:4px 28px;padding:16px 18px 20px;display:grid}.shortcut-groups h3{text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin:12px 0 8px;font-size:12px}.shortcut-row{color:var(--text-dim);grid-template-columns:148px 1fr;align-items:baseline;gap:10px;padding:3px 0;display:grid}.shortcut-row kbd{color:var(--text);background:var(--panel-2);border:1px solid var(--line);text-align:center;border-bottom-width:2px;border-radius:4px;padding:2px 7px;font-family:inherit;font-size:12px}.flip-row{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:6px;display:grid}.flip-row button{padding:5px 4px}.preset-grid{grid-template-columns:1fr 1fr;gap:5px;margin-bottom:8px;display:grid}button.preset{text-align:center;padding:5px 6px;font-size:12px;line-height:1.3}button.preset.active{background:var(--accent);border-color:var(--accent);color:#08101c;font-weight:600}.dim-note{color:var(--text-dim);font-size:12px}.layer-group{margin-bottom:8px}.layer-group-name{color:var(--text-dim);opacity:.75;margin:6px 0 3px;font-size:11px}.badge{vertical-align:1px;border-radius:9px;margin-left:6px;padding:0 6px;font-size:11px;font-weight:600;line-height:16px;display:inline-block}.badge.error{color:#f0a0a0;background:#e0525238}.badge.warning{color:#e8cf95;background:#d8b25c38}.issue{text-align:left;width:100%;color:var(--text-dim);background:0 0;border-color:#0000;grid-template-columns:auto 1fr;align-items:start;gap:8px;margin-bottom:5px;padding:6px 8px;line-height:1.55;display:grid}.issue:hover:not(:disabled){background:var(--panel-2);border-color:var(--line)}.issue.active{color:var(--text);background:#4a9eff24;border-color:#4a9eff80}.issue-dot{border-radius:50%;width:7px;height:7px;margin-top:6px}.issue.error .issue-dot{background:var(--danger)}.issue.warning .issue-dot{background:#d8b25c}.readout.ok{color:#7fbf8f}.material-field{grid-template-columns:46px 1fr}.material-pick{align-items:center;gap:6px;min-width:0;display:flex}.material-pick select{flex:1;min-width:0}.material-pick .swatch{border:1px solid var(--line);flex:none;width:12px;height:12px;margin:0}.route-line{fill:none;stroke-linejoin:round;stroke-linecap:round}.route-line.draft{stroke-dasharray:8 5}.route-dot{pointer-events:none}.route-drop{fill:#101215}.route-label{fill:#b9c2ce;font-variant-numeric:tabular-nums;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round}.route-hit{fill:none;stroke:#0000;cursor:pointer}.route.selected .route-label{fill:#cfe6ff}.plan2d.tool-route svg{cursor:crosshair}.swatch{vertical-align:baseline;border-radius:2px;width:10px;height:10px;margin-right:6px;display:inline-block}.system-row{color:var(--text-dim);cursor:pointer;grid-template-columns:auto auto 1fr auto;align-items:center;gap:6px;margin-bottom:5px;display:grid}.system-row input{accent-color:var(--accent);padding:0}.system-length{font-variant-numeric:tabular-nums;color:var(--text)}.total-row{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}.inspector h2.sub{margin-top:14px}.readout .dim{color:var(--text-dim)}.warning{color:#f0b4b4;background:#e052521f;border:1px solid #e0525259;border-radius:5px;margin:10px 0 0;padding:8px 10px;font-size:12px;line-height:1.6}.dim-line{stroke:#d8b25c;stroke-width:1px}.dim-ext{stroke:#8a7440;stroke-width:1px;stroke-dasharray:3 3}.dim-label{fill:#f0d79a;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round}.dim-hit{stroke:#0000;cursor:pointer}.dimension.selected .dim-line{stroke:var(--accent);stroke-width:2px}.dimension.selected .dim-label{fill:#bcdcff}.plan2d.tool-dimension svg{cursor:crosshair}.opening-jamb{stroke:#e8edf5;stroke-width:1.5px}.window-line{stroke:#7fb6e0;stroke-width:1.5px}.door-leaf{stroke:#d9cfbe;stroke-width:2px}.door-arc{fill:none;stroke:#6f7784;stroke-width:1px;stroke-dasharray:4 3}.niche-body{fill:#3c424b;stroke:#8f97a3;stroke-width:1px;stroke-dasharray:5 3}.opening-hit{fill:#0000;cursor:pointer}.opening.selected .opening-jamb,.opening.selected .window-line,.opening.selected .door-leaf{stroke:var(--accent);stroke-width:3px}.opening.selected .door-arc{stroke:var(--accent)}.opening-ghost{fill:#4a9eff59;stroke:var(--accent);stroke-width:1px;vector-effect:non-scaling-stroke}.plan2d.tool-opening svg{cursor:copy}.wall-centerline{stroke:#566070;stroke-width:1px;stroke-dasharray:8 4 2 4}.wall-label{fill:#aeb6c2;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round}.wall-node{fill:#101215;stroke:var(--accent);stroke-width:2px;cursor:move}.wall-node.selected{fill:var(--accent)}.draft-line{stroke:var(--accent);stroke-width:2px;stroke-dasharray:6 4}.draft-label{fill:#cfe6ff;paint-order:stroke;stroke:#101215;stroke-width:3px;stroke-linejoin:round}.cursor-mark{fill:none;stroke:#8fb8ff;stroke-width:1px}.marquee{fill:#4a9eff1f;stroke:var(--accent);stroke-width:1px;stroke-dasharray:5 4}.cursor-mark.snapped{stroke:#ffd166;stroke-width:2px}.view3d{min-width:0;min-height:0;position:relative}.view3d canvas{display:block}.crosshair{pointer-events:none;width:14px;height:14px;margin:-7px 0 0 -7px;position:absolute;top:50%;left:50%}.crosshair:before,.crosshair:after{content:"";background:#ffffffbf;position:absolute;box-shadow:0 0 2px #000000e6}.crosshair:before{width:2px;height:14px;top:0;left:6px}.crosshair:after{width:14px;height:2px;top:6px;left:0}.walk-banner{border:1px solid var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);pointer-events:none;white-space:nowrap;background:#14161ad9;border-radius:20px;align-items:center;gap:10px;padding:6px 12px;display:flex;position:absolute;top:14px;left:50%;transform:translate(-50%)}.walk-banner strong{color:var(--accent)}.walk-banner span{color:var(--text-dim)}.sensitivity{color:var(--text-dim);white-space:nowrap;align-items:center;gap:7px;display:flex}.sensitivity input[type=range]{width:92px;accent-color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0}.sensitivity-value{font-variant-numeric:tabular-nums;color:var(--text);text-align:right;min-width:40px}.plan2d-hud,.view3d-hud{border:1px solid var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#14161ad9;border-radius:6px;align-items:center;gap:10px;padding:5px 8px;display:flex;position:absolute;bottom:10px;left:10px}.hud-readout{font-variant-numeric:tabular-nums;color:var(--text-dim);min-width:110px}.hud-hint{color:var(--text-dim)}.inspector{background:var(--panel);border-left:1px solid var(--line);padding:12px;overflow-y:auto}.inspector section{margin-bottom:20px}.inspector h2{text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin:0 0 10px;font-size:12px;font-weight:600}.number-field,.select-field{grid-template-columns:46px 1fr auto;align-items:center;gap:6px;margin-bottom:7px;display:grid}.select-field{grid-template-columns:46px 1fr}.nf-label{color:var(--text-dim)}.nf-unit{color:var(--text-dim);font-size:11px}.number-field input,.select-field select{text-align:right;font-variant-numeric:tabular-nums;width:100%}.select-field select{text-align:left}.readout{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-bottom:6px}.readout strong{color:var(--text);font-weight:600}.text-field{grid-template-columns:46px 1fr;align-items:center;gap:6px;margin-bottom:7px;display:grid}.text-field input{width:100%}.check-row{color:var(--text-dim);align-items:center;gap:6px;margin-bottom:7px;display:flex}.check-row input{accent-color:var(--accent);padding:0}.hint{color:var(--text-dim);margin:10px 0 0;font-size:12px;line-height:1.6}
