:root{font-family:Inter,"Segoe UI","Microsoft YaHei",sans-serif;color:#17303c;background:#edf1f4;font-size:16px;font-synthesis:none;--ink:#17303c;--muted:#647885;--accent:#087f80;--line:#e0e7eb}
.material-controls .section-title{margin-bottom:10px}.reflection-control{display:flex;align-items:center;gap:8px;font-size:11px;color:#617b87;margin-top:14px;white-space:nowrap}.reflection-control input{min-width:0;width:100%;accent-color:#087f80}.reflection-control output{min-width:32px;font-variant-numeric:tabular-nums}.material-note{font-size:11px;line-height:1.7;color:#728893;margin-top:8px}
.solar-controls{background:linear-gradient(160deg,#f4faf9,#fff)}.solar-controls label{font-size:12px;color:#526e7b}.solar-controls input:not([type=range]):not([type=checkbox]){width:100%;min-width:0;font:inherit;font-size:13px;color:var(--ink);background:#fff;border:1px solid #dce4e9;border-radius:6px;padding:8px 5px;margin-top:6px}.solar-date-row{display:grid;grid-template-columns:1.3fr 1fr;gap:9px}.solar-date-row label{min-width:0}#solarSlider{width:100%;margin:18px 0 2px;accent-color:#087f80;cursor:pointer}.solar-ticks{display:flex;justify-content:space-between;font:10px Consolas,monospace;color:#718692}.solar-presets{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin:14px 0 10px}.solar-presets button{font-size:12px;padding:7px 2px}.solar-play-row{display:grid;grid-template-columns:1fr 1.15fr auto;gap:5px}.solar-play-row button,.solar-play-row select{font-size:11px;padding:8px 5px}.solar-shadow-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:16px}.solar-shadow-row label{white-space:nowrap;display:flex;align-items:center;gap:3px}.solar-shadow-row input{accent-color:#087f80}.solar-shadow-row select{width:120px;font-size:12px;padding:6px}.solar-metrics{display:flex;justify-content:space-between;font-size:11px;color:#6a808c;margin-top:15px}.solar-metrics b{font-size:12px;color:#2a535e;font-variant-numeric:tabular-nums}.solar-status{font-size:11px;color:#598087;margin-top:10px}.solar-calibration{font-size:11px;color:#708690;margin-top:13px;line-height:1.7}.solar-calibration summary{cursor:pointer}.solar-calibration p{margin:8px 0}.solar-calibration label{display:flex;align-items:center;gap:12px}.solar-calibration input#solarNorth{width:75px;margin:0}#solarStamp{font:12px Consolas,"Microsoft YaHei",monospace;color:#355f69;background:#ffffffbd;border:1px solid #ffffff70;border-radius:5px;padding:7px 9px;width:fit-content}input:focus-visible{outline:3px solid #11afab;outline-offset:2px}body[data-solar-phase="夜间"] .scene-heading #sceneCaption,body[data-solar-phase="夜间"] .scene-heading .eyebrow{color:#bdcdda}
*{box-sizing:border-box}body{margin:0}button,select{font:inherit}button{cursor:pointer;transition:background .15s,color .15s;border:1px solid var(--line);background:#fff;color:var(--ink);padding:10px 14px;border-radius:7px;font-size:.875rem;font-weight:600}button:hover:not(:disabled){background:#e9f5f3;border-color:#6caeaa}button:disabled,select:disabled{cursor:default;opacity:.45}button:focus-visible,select:focus-visible,canvas:focus-visible{outline:3px solid #11afab;outline-offset:3px}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.primary:hover{background:#066869}h1,h2,h3,p{margin:0}[hidden]{display:none!important}
.header{height:78px;background:#102a38;color:#f1f8fa;display:flex;align-items:center;justify-content:space-between;padding:0 28px;border-bottom:1px solid #244453;gap:18px}.brand{display:flex;gap:13px;align-items:center}.brand-mark{display:grid;place-items:center;width:40px;height:40px;border:1px solid #4b8e96;color:#56ded0;border-radius:9px;font-size:30px}.brand h1{font-size:1.125rem;letter-spacing:.08em;font-weight:650}.brand div>span{color:#a2b9c4;font-size:.75rem;display:block;margin-top:5px;letter-spacing:.1em}.totals{display:flex;gap:30px;font-size:.8125rem;color:#afc1ca}.totals b{font-size:1.25rem;color:#f2fafc;font-weight:550;font-variant-numeric:tabular-nums;margin-right:5px}.version{font-size:.75rem;color:#c0d2da;white-space:nowrap}.version span{color:#819ba9}
main{display:grid;grid-template-columns:310px minmax(0,1fr);height:calc(100dvh - 78px);min-height:520px}.sidebar{background:#fff;border-right:1px solid var(--line);overflow-y:auto;display:flex;flex-direction:column;z-index:2}.sidebar section{padding:23px 22px;border-bottom:1px solid var(--line)}h2{font-size:.9375rem;font-weight:650}.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.eyebrow{font-size:.6875rem;font-weight:700;letter-spacing:.15em;color:#84969f}.segmented{background:#edf2f4;padding:4px;border-radius:9px;display:grid;grid-template-columns:1fr 1fr;gap:4px}.segmented button{border:none;background:transparent;color:#637986;padding:10px 3px}.segmented button.active{background:#fff;color:#006c71;box-shadow:0 2px 5px #17303c14}.helper{font-size:.8125rem;line-height:1.7;color:var(--muted);margin-top:12px}.locate-controls h2{margin-bottom:15px}.locate-controls label{display:block;font-size:.8125rem;color:var(--muted);margin:13px 0 7px}select{width:100%;background:#f8fafb;border:1px solid #dce4e9;border-radius:6px;padding:10px 8px;font-size:.875rem;color:var(--ink)}.details-section{flex:1}.selection-badge{font-size:.6875rem;border:1px solid #dbe9e7;border-radius:4px;padding:3px 6px;color:#087677;background:#f0f8f6}.empty{padding:21px 0 29px;text-align:center;color:var(--muted)}.empty>span{font-size:42px;font-weight:300;color:#9fb6bd;display:block;margin-bottom:12px}.empty strong{font-size:.875rem;font-weight:500}.empty p{font-size:.75rem;margin-top:8px;line-height:1.7}.selected-id{font-family:Consolas,monospace;font-size:1.03rem;font-weight:700;color:#076f75;word-break:break-word;padding:5px 0 10px}dl{margin:4px 0 18px}dl div{display:flex;align-items:start;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px solid #f0f3f5;font-size:.8125rem}dt{color:var(--muted);flex-shrink:0}dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.selection-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:17px}.review-notice{font-size:.75rem;line-height:1.7;padding:10px;border-radius:5px;background:#fff4dc;color:#87551c;border-left:3px solid #d89b33}.component-title{display:flex;align-items:center;justify-content:space-between;margin:24px 0 10px}.component-title h3{font-size:.8125rem}.component-title span{font-size:.6875rem;color:var(--muted)}.component-list{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.component-list button{font:12px Consolas,monospace;padding:8px 1px;background:#f7f9fa}.component-list button.selected{color:#086c70;background:#ddf4ee;border-color:#329b91}.sidebar-footer{padding:19px 22px;font-size:.6875rem;line-height:1.9;color:#78909d}.sidebar-footer code{font-family:Consolas,monospace;color:#506976}
.viewport{position:relative;overflow:hidden;background:#e8eef2;min-width:0;min-height:380px}#canvas{display:block;width:100%;height:100%;touch-action:none}.scene-heading{position:absolute;top:27px;left:27px;pointer-events:none;display:flex;flex-direction:column;gap:8px}.scene-heading .eyebrow{color:#758b98;font-size:.625rem}#sceneCaption{font-size:.875rem;color:#4c6471}.view-tools{position:absolute;top:24px;right:25px;display:flex;gap:7px}.view-tools button{box-shadow:0 3px 12px #263e5010;background:#ffffffed;font-size:.8125rem}.view-bottom{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:space-between;gap:15px;padding:13px 24px;background:#f4f7f9e8;border-top:1px solid #d8e1e8;font-size:.75rem;color:#667e8b;pointer-events:none}#selectionStatus{color:#296c70}.loading-overlay{position:absolute;inset:0;background:#e8eef2f2;display:grid;place-items:center;z-index:4}.loading-box{width:min(330px,80%);text-align:center}.loading-box h2{font-size:1rem;margin:20px 0 9px}.loading-box p{font-size:.8125rem;color:var(--muted);line-height:1.8;overflow-wrap:anywhere}.loading-box progress{height:5px;width:100%;margin:24px 0;accent-color:var(--accent);border:0}.loader{display:block;width:32px;height:32px;border:2px solid #b6cdd0;border-top-color:var(--accent);border-radius:50%;margin:auto;animation:spin 1s linear infinite}body[data-state="error"] .loader{display:none}#retry{margin-top:18px}#tooltip{position:absolute;pointer-events:none;background:#102a38eb;border:1px solid #4c6975;color:#f1f8fb;font:12px Consolas,monospace;padding:8px 11px;border-radius:5px;z-index:3;white-space:nowrap;box-shadow:0 4px 16px #0a1e3030}@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:1000px){.header{padding:0 18px}.totals{gap:15px}.version{display:none}main{grid-template-columns:275px minmax(0,1fr)}.sidebar section{padding:20px 16px}.view-tools{right:15px;top:19px;gap:4px}.view-tools button{padding:9px}.scene-heading{top:76px;left:18px}.view-bottom{padding:11px 15px;flex-wrap:wrap;gap:5px}}
@media(max-width:650px){.header{height:auto;min-height:98px;flex-wrap:wrap;gap:10px;padding:14px 16px}.brand-mark{width:32px;height:32px;font-size:25px}.brand h1{font-size:1rem}.brand div>span{font-size:.6875rem}.totals{width:100%;justify-content:space-between;font-size:.6875rem}.totals b{font-size:1rem}main{height:auto;min-height:calc(100dvh - 98px);display:flex;flex-direction:column}.viewport{order:-1;height:55dvh;min-height:340px}.sidebar{overflow:visible;border-right:0}.sidebar section{padding:18px}.scene-heading{top:69px}.view-bottom{font-size:.6875rem}.component-list{grid-template-columns:repeat(5,1fr)}.empty{padding:8px}.empty>span{display:none}.sidebar-footer{padding:15px 18px}}

.engine-info{display:flex;align-items:center;gap:15px}.engine-badge{font-size:12px;padding:6px 9px;border:1px solid #426d78;border-radius:5px;color:#b9d8e2;white-space:nowrap}.engine-badge[data-backend="webgpu"]{color:#66edcc;border-color:#308b78;background:#113e3d}.engine-badge[data-backend="webgl2"]{color:#f5cd8d;border-color:#866949}.backend-notice{font-size:12px;color:#815823;background:#fff5df;padding:7px 9px;border-radius:4px;max-width:260px;line-height:1.6}@media(max-width:1000px){.engine-info .version{display:none}}@media(max-width:650px){.engine-info{position:absolute;right:12px;top:22px}.engine-badge{font-size:11px;padding:5px}.brand div>span{max-width:150px}}
