:root{--ink:#20382f;--muted:#6c7c75;--paper:#f5f7f2;--line:#d9e1d8;--forest:#315f48;--amber:#a96b23}*{box-sizing:border-box}body{margin:0;overflow:hidden;color:var(--ink);font:13px/1.5 "Microsoft YaHei","PingFang SC",sans-serif;background:#dfe6e3}button,select,input{font:inherit}button,select{color:inherit}button{cursor:pointer;border:1px solid var(--line);background:#fff;padding:9px 12px;border-radius:5px}button:hover{background:#e7eee4;border-color:#9eaf9c}button:focus-visible,select:focus-visible,input:focus-visible,summary:focus-visible{outline:3px solid #b1803b;outline-offset:2px}button.active{background:var(--forest);color:white;border-color:var(--forest)}#canvas{position:fixed;inset:0}#canvas canvas{display:block;width:100%;height:100%;touch-action:none}header{position:fixed;top:20px;left:24px;right:24px;display:flex;align-items:center;gap:13px;pointer-events:none;z-index:5;text-shadow:0 1px 8px #fff}.brand{font:600 24px Georgia,serif;border-bottom:2px solid #315f48;padding:4px}.brand span{color:#8b9d7e;font-weight:400}.eyebrow{font:10px/1.4 Consolas,monospace;letter-spacing:1.4px;color:#688171}h1{font-size:19px;letter-spacing:1px;margin:2px 0;font-weight:600}.version{margin-left:auto;font:11px Consolas,monospace;letter-spacing:1.5px}.controls{position:fixed;left:24px;top:100px;width:246px;max-height:calc(100vh - 170px);overflow:auto;background:#f7f9f4ee;border:1px solid #ffffffb0;border-radius:9px;box-shadow:0 6px 25px #1b392515;backdrop-filter:blur(15px);z-index:5}.section-top{display:flex;justify-content:space-between;align-items:center;font-weight:600;padding:12px 16px;border-bottom:1px solid var(--line)}#collapse{border:0;background:none;padding:0 5px;font-size:20px;line-height:20px}.section{padding:15px 16px;border-bottom:1px solid var(--line)}.label{display:block;font-size:11px;font-weight:600;color:var(--muted);letter-spacing:.5px;margin-bottom:9px}.label small{float:right;font-size:10px;font-weight:400}select{width:100%;border:1px solid #c9d4c7;border-radius:4px;background:#fff;padding:8px 7px;font-size:12px}.range-row{display:flex;align-items:center;gap:7px;margin-top:11px;font-size:11px;color:var(--muted)}input[type=range]{width:108px;accent-color:var(--forest)}output{font:11px Consolas,monospace}.toggle{display:flex;align-items:center;justify-content:space-between;margin:11px 0;cursor:pointer;font-size:12px}.toggle:last-child{margin-bottom:0}.toggle input{accent-color:var(--forest);height:15px;width:15px;cursor:pointer}.toggle small{font:10px Consolas,monospace;color:var(--muted)}.dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:7px;vertical-align:2px}.plant{background:#4c7852}.amber{background:#be8038}.wide{width:100%;margin-top:8px;font-size:11px}.method{padding:12px 16px;font-size:10px;color:var(--muted)}.method summary{cursor:pointer}.method p{line-height:1.8}.views{position:fixed;top:95px;left:calc(50% + 100px);transform:translateX(-50%);display:flex;gap:4px;z-index:5;padding:4px;background:#f4f6f0df;border:1px solid white;border-radius:7px}.views button{font-size:11px;padding:7px 12px;white-space:nowrap;border-color:transparent;background:transparent}.views button.active{background:var(--forest)}.details{position:fixed;right:24px;bottom:72px;width:285px;padding:19px 21px;background:#f7f9f4ef;border-radius:8px;border:1px solid white;box-shadow:0 6px 25px #1b392515;z-index:5}.details h2{font-size:18px;margin:8px 0 16px;font-weight:500}#close-detail{position:absolute;top:10px;right:12px;background:none;border:0;padding:0;font-size:19px;color:var(--muted)}.metric{display:flex;justify-content:space-between;gap:14px;padding:8px 0;border-bottom:1px solid var(--line);font-size:11px}.metric b{font:12px Consolas,monospace;text-align:right;font-weight:600}.note{font-size:10px;line-height:1.8;color:var(--muted);margin:11px 0 0}.details .wide{margin-top:14px}footer{position:fixed;bottom:0;left:0;right:0;height:48px;display:flex;align-items:center;padding:0 24px;gap:20px;background:#f4f7f0df;border-top:1px solid #fff9;color:var(--muted);font-size:10px;z-index:5}#status{color:var(--ink)}.hint{margin-left:auto}.north{font:14px Consolas,monospace;border-left:1px solid #bbc8ba;padding-left:17px;color:#31553d}.north small{font:9px sans-serif;display:block}#labels{position:fixed;inset:0;pointer-events:none;z-index:3}.label3d{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;font:11px Consolas,"Microsoft YaHei",sans-serif;padding:4px 7px;border-radius:3px;background:#f7faf4e8;color:#294431;border:1px solid #b1c6ad;box-shadow:0 2px 6px #183b1a19;pointer-events:auto;cursor:pointer}.label3d.drop{background:#fff4e4e8;border-color:#d1a363;color:#88551b}.label3d.pond{background:#edf8f9eb;border-color:#84b6bc;color:#28666d}.label3d.boundary{background:#fcf0e8ed;border-color:#c19171;color:#8d5534}.label3d.selected{background:#254f39;color:white;border-color:#254f39;font-size:12px}#loading{position:fixed;inset:0;background:#e4ebe5ef;display:grid;place-items:center;z-index:20}.loading-card{width:340px}.loading-card h2{font-size:27px;font-weight:400;letter-spacing:2px;margin:10px 0}.loading-card p{font-size:12px;color:var(--muted)}.loading-card small{font-size:10px;color:#849285}.progress{height:3px;background:#c5d0c4;margin:25px 0 10px}#progress{width:3%;height:100%;background:#315f48;transition:width .2s}@media(max-width:1000px){.controls{left:14px;width:215px}.views{left:auto;right:14px;transform:none}.details{width:245px;right:14px}.hint{display:none}}@media(max-width:650px){header{left:14px;right:14px;top:12px}.version{display:none}h1{font-size:16px}.controls{top:125px;width:185px;max-height:calc(100vh - 195px)}.controls .section{padding:11px}.views{left:14px;right:auto;top:78px;gap:0}.views button{padding:7px 8px;font-size:10px}.details{right:12px;bottom:60px;width:210px;padding:13px;max-height:35vh;overflow:auto}.details h2{font-size:15px;margin-bottom:9px}.metric{padding:5px 0}footer{padding:0 14px}.north{margin-left:auto}.label3d{font-size:10px}.range-row input{width:70px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}

.label3d.muted-drop{opacity:.35}.label3d.selected{background:#fff5e4;color:#9b4c00;border:2px solid #ef8c1d;font-weight:700;box-shadow:0 2px 8px #7c440533}.label3d.parcel{font-size:13px;font-weight:700;border-color:#95734e;color:#634826;padding:6px 10px}.label3d.dimension{font-weight:600}

#neon-lines{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:2;overflow:hidden}#neon-lines path{fill:none;stroke:#a9fcff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 3px #00d9ff) drop-shadow(0 0 7px #00b8ff)}

#distance-panel{position:fixed;right:24px;top:150px;width:285px;max-height:calc(100vh - 215px);overflow:auto;z-index:6;background:#f7f9f4f5;border:1px solid white;border-radius:8px;box-shadow:0 6px 25px #1b39251a}#distance-panel[hidden]{display:none}.distance-body{padding:12px 16px}#distance-help{font-size:11px;line-height:1.7;margin:0 0 12px;color:#52695c}.distance-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px}.distance-actions button{font-size:11px;padding:7px}button:disabled{opacity:.4;cursor:default}.distance-group{margin-top:16px;border-top:1px solid #c5d6c9;padding-top:12px;font-size:11px}.distance-total{font:26px/1.7 Consolas,monospace;color:#246169}.distance-total small{font:10px "Microsoft YaHei";color:#65786e}.distance-segment{display:grid;grid-template-columns:1fr auto;gap:4px;margin-top:8px;border-top:1px solid #d7e2d8;padding-top:7px}.distance-segment small{grid-column:1/-1;color:#6b7c71;font-size:10px}.label3d.distance,.label3d.distance-point{pointer-events:none;border-color:#48b7c8;background:#effefff5;color:#15586a}.label3d.distance-point{font-weight:bold;border-radius:20px}.distance-active #labels .label3d:not(.distance):not(.distance-point){opacity:.22;pointer-events:none}#distance-overlay{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:2;overflow:hidden}@media(max-width:650px){.views{max-width:calc(100vw - 24px);flex-wrap:wrap}.views button{padding:6px 7px}#distance-panel{right:10px;top:auto;bottom:60px;width:210px;max-height:38vh}.distance-body{padding:9px 12px}.distance-total{font-size:22px}}
#utility-panel{position:fixed;right:24px;top:150px;bottom:65px;width:340px;overflow:auto;z-index:7;background:#f7f9f4f7;border:1px solid white;border-radius:8px;box-shadow:0 6px 25px #1b39251a}#utility-panel[hidden],#utility-panel [hidden]{display:none!important}.utility-body{padding:12px 16px}.utility-help{font-size:12px;line-height:1.7;padding:10px;background:#e6eee4;margin:0 0 12px;border-radius:4px}.utility-help.error{background:#f9e6dd;color:#9b351c}.u-field{display:block;font-size:11px;color:#506659;margin:10px 0}.u-field input,.u-field textarea,.u-node input{display:block;width:100%;padding:7px;border:1px solid #c9d4c7;border-radius:4px;background:white;color:#20382f;font:12px 'Microsoft YaHei',sans-serif;margin-top:4px}.u-field select{margin-top:4px}.u-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.u-grid.three{grid-template-columns:1fr 1fr 1fr}.u-grid>*{min-width:0}.u-actions{display:flex;gap:6px;margin:9px 0}.u-actions button{flex:1;padding:8px 5px;font-size:11px}.u-actions .primary{background:#315f48;color:white}.u-toggles{display:grid;grid-template-columns:1fr 1fr;gap:8px;font-size:11px;border-bottom:1px solid #c9d4c7;padding:8px 0 12px}.u-toggles input{accent-color:#315f48}.u-node{display:grid;grid-template-columns:1fr 1fr;gap:7px;font-size:10px;border-top:1px solid #d7e2d8;padding:10px 0}.u-node>span{grid-column:1/-1;color:#6c7c75}.u-node button{font-size:10px;padding:6px}.utility-body h3{font-size:12px;margin:18px 0 6px}#utility-overlay{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:3;overflow:hidden}.label3d.utility{border-color:#4aa5ac;background:#e9ffff;color:#20565a}.utilities-active #labels .label3d{pointer-events:none;opacity:.25}.utilities-active #labels .label3d.utility{opacity:1}.label3d.utility:not(button){pointer-events:none}@media(max-width:650px){#utility-panel{right:8px;top:160px;bottom:60px;width:min(300px,calc(100vw - 16px));max-height:64vh}.utility-body{padding:10px 12px}.views{right:10px;left:10px;justify-content:center}.u-actions button{padding:8px 4px}}
.u-layer-filters{font-size:11px;margin:12px 0;color:#506659}.u-layer-filters summary{cursor:pointer}.u-layer-filters>div{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px}.u-layer-filters label{display:flex;align-items:center;gap:5px;font-size:10px}.u-layer-filters i{width:7px;height:7px;display:inline-block;border-radius:50%;flex-shrink:0}.u-layer-filters input{accent-color:#315f48}
@media(max-width:650px){#utility-panel{top:auto;max-height:44vh}.utilities-active #utility-panel{max-height:26vh}}
.views #access-mode{width:auto;min-width:96px;padding:5px 8px;font-size:11px;border-color:#bdcdbb;background:#f7faf4}.viewer-mode .admin-only{display:none!important}.utility-info:not(:empty){margin:12px 0;padding:12px;background:#eaf1e8;border:1px solid #cadbc5;border-radius:5px;font-size:11px}.utility-info p{margin:6px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}.u-node-name{grid-column:1/-1}.building-name-editor{display:flex;align-items:center;gap:6px}.building-name-editor input{min-width:0;width:100%;padding:6px;border:1px solid #8fa58a;border-radius:4px;font:15px 'Microsoft YaHei',sans-serif;color:#20382f;background:#fff}.building-name-editor button{font-size:11px;padding:7px 8px}#building-name-status{display:block;margin:4px 0 0;font-size:10px;color:#527052;font-weight:400}.admin-mode #access-mode{background:#315f48;color:#fff;border-color:#315f48}@media(max-width:650px){.views #access-mode{font-size:10px;min-width:90px;padding:4px}.controls{top:150px}#utility-panel{max-height:43vh}}
#admin-switch{position:fixed;right:9px;bottom:12px;z-index:9;padding:0;width:21px;height:21px;border:0;background:transparent;color:#60746a;opacity:.32;font-size:15px;line-height:21px}#admin-switch:hover,#admin-switch:focus-visible{opacity:1;background:#e1e9de}#admin-switch[aria-pressed=true]{opacity:.85;color:#9b6a28}#admin-dialog{border:1px solid #c9d6c5;border-radius:10px;padding:24px;width:320px;max-width:calc(100vw - 32px);color:#20382f;background:#f7f9f4;box-shadow:0 15px 80px #17312355}#admin-dialog::backdrop{background:#20382f66;backdrop-filter:blur(3px)}#admin-dialog h2{font-size:20px;font-weight:500;margin:0 0 18px}#admin-answer{width:100%;padding:11px;border:1px solid #bdcdb7;border-radius:5px;font-size:18px;letter-spacing:3px}#admin-error{min-height:20px;color:#9d3d23;font-size:12px}.dialog-actions{display:flex;justify-content:flex-end;gap:9px}#admin-submit{background:#315f48;color:#fff}#project-status{font-size:10px;max-width:35vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#scene-editor{position:fixed;right:24px;top:150px;bottom:65px;width:350px;overflow:auto;z-index:7;border:1px solid #fff;border-radius:8px;background:#f7f9f4f7;box-shadow:0 6px 25px #1b39251a}#scene-editor[hidden],#scene-editor [hidden]{display:none!important}.editor-body{padding:12px 15px}#se-message{background:#e6eee4;font-size:11px;line-height:1.8;padding:10px;margin:0 0 10px;border-radius:4px}#se-message.error{background:#fae5db;color:#963b24}.editor-actions,.editor-tabs{display:flex;gap:5px;margin:9px 0}.editor-actions button{flex:1;font-size:11px;padding:8px 5px}.editor-tabs{border-bottom:1px solid #c6d4c2;padding-bottom:8px}.editor-tabs button{flex:1;font-size:12px}.editor-project{font-size:11px;margin:12px 0;padding:10px 0;border-bottom:1px solid #d9e1d8}.editor-project summary{cursor:pointer}.editor-project select{margin-top:9px}#se-save{background:#315f48;color:#fff}.u-grid.three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}#se-gallery{display:grid;grid-template-columns:1fr 1fr;gap:8px;max-height:330px;overflow:auto}.asset-card{padding:4px;text-align:left;font-size:10px;min-width:0}.asset-card img{display:block;width:100%;aspect-ratio:4/3;object-fit:contain;background:#e5ece1}.asset-card span{display:block;padding:4px;overflow-wrap:anywhere}.road-node{border-top:1px solid #d9e1d8;padding:10px 0;font-size:11px}.road-node input{width:100%;padding:7px;border:1px solid #c9d4c7;border-radius:4px;margin:5px 0;background:#fff;color:#20382f}.road-node details{font-size:10px}.road-node summary{cursor:pointer}.road-node .u-grid{gap:8px}.editor-body input[type=color]{padding:2px;height:32px}.admin-mode #save-project{color:#315f48;font-weight:600}@media(max-width:1000px){#scene-editor{right:14px;width:310px}#project-status{max-width:25vw}}@media(max-width:650px){#scene-editor{right:8px;top:auto;bottom:60px;width:calc(100vw - 16px);max-width:330px;max-height:46vh}.editor-body{padding:10px 12px}#se-gallery{max-height:230px}#project-status{max-width:125px}footer #status{display:none}.north{margin-right:17px}.views{flex-wrap:wrap}.controls{top:150px}.admin-mode .controls{top:180px}}

.north{margin-right:22px}
#batch-properties{position:fixed;right:24px;top:150px;width:330px;max-height:calc(100vh - 215px);overflow:auto;z-index:8;border:1px solid white;border-radius:8px;background:#f7f9f4f7;box-shadow:0 8px 30px #1b392526}#batch-properties[hidden]{display:none!important}#batch-properties .section-top{position:sticky;top:0;background:#f1f5ee;z-index:1}#se-batch-close{border:0;background:transparent;font-size:20px;padding:0 5px}#se-batch-message{font-size:11px;line-height:1.8;margin:0 0 12px;color:#506659}#se-batch-message.error{color:#963b24}#batch-properties .batch-panel{margin:0;padding:0;border:0}#batch-properties .selection-icon{flex:0 0 48px;width:48px;height:44px;padding:10px 12px}#batch-properties .selection-icon svg{display:block;width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}@media(max-width:1000px){#batch-properties{right:14px}}@media(max-width:650px){#batch-properties{right:8px;top:auto;bottom:60px;max-height:44vh;width:calc(100vw - 16px);max-width:330px}}
.batch-selecting #labels .label3d{pointer-events:none!important}
.batch-panel{border-top:1px solid var(--line);margin-top:18px;padding-top:10px}.batch-panel h3{font-size:13px;margin:2px 0 8px}#se-batch-summary{font-size:12px;font-weight:600;background:#e2eee5;border-radius:4px;padding:10px;margin:10px 0}#se-batch-delete:not(:disabled){background:#8e4334;color:white;border-color:#8e4334}#batch-overlay{position:fixed;inset:0;pointer-events:none;width:100%;height:100%;z-index:4;overflow:hidden}#batch-overlay[hidden]{display:none!important}#batch-overlay path{fill:#3aa59930;stroke:#eeffff;stroke-width:2;stroke-dasharray:6 3;stroke-linejoin:round;filter:drop-shadow(0 0 2px #205c54)}
#object-properties{position:fixed;right:24px;top:150px;max-height:calc(100vh - 215px);width:340px;overflow:auto;z-index:8;border:1px solid #fff;border-radius:8px;background:#f7f9f4f7;box-shadow:0 8px 30px #1b392526}#object-properties[hidden],#object-properties [hidden],#object-tools[hidden],#pen-overlay[hidden]{display:none!important}#object-properties .section-top{position:sticky;top:0;background:#f1f5ee;z-index:1}#se-properties-close{border:0;background:transparent;font-size:20px;padding:0 5px}#se-property-message{font-size:11px;line-height:1.8;margin:0;color:#506659}#se-property-message.error{color:#963b24}#object-tools{position:fixed;top:148px;left:calc(50% + 90px);transform:translateX(-50%);display:flex;gap:4px;padding:5px;background:#f7f9f4f5;border:1px solid white;border-radius:8px;box-shadow:0 4px 18px #1b39251a;z-index:8}#object-tools button{width:40px;height:40px;padding:9px}#object-tools svg{display:block;width:22px;height:22px;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round;fill:none}#pen-overlay{position:fixed;inset:0;width:100%;height:100%;z-index:4;pointer-events:none;touch-action:none;overflow:hidden}.pen-arm{stroke:#e9fff3;stroke-width:1.5;filter:drop-shadow(0 1px 2px #20382f);pointer-events:none}.pen-dot{pointer-events:all;stroke:#fff;stroke-width:2;fill:#2c715e;cursor:grab;filter:drop-shadow(0 1px 3px #20382f)}.pen-dot:active{cursor:grabbing}.pen-dot.handle{fill:#e8b45e;stroke:#533d21}.pen-help{background:#e9f0e4;padding:9px;border-radius:4px}#se-road-pen{font-weight:600}#se-road-nodes{max-height:280px;overflow:auto}
@media(max-width:1000px){#object-properties{right:14px;width:310px}}@media(max-width:650px){#object-properties{right:8px;top:auto;bottom:60px;width:calc(100vw - 16px);max-width:330px;max-height:43vh}#object-tools{top:137px;left:auto;right:10px;transform:none}#object-tools button{width:36px;height:36px;padding:7px}}
