#app{position:fixed;top:0;right:0;bottom:0;left:0}.viewer{position:absolute;top:0;right:0;bottom:0;left:0}.viewer canvas{display:block;touch-action:none}.top{position:fixed;top:0;left:0;right:0;padding:10px 12px;background:linear-gradient(#0d1014ee,#0d101400);z-index:5;pointer-events:none}.title{font-size:14px;font-weight:700;letter-spacing:.02em}.title small{font-weight:400;color:var(--sub);font-size:11px}.floors{position:fixed;top:52px;left:0;right:0;display:flex;gap:6px;padding:0 12px;z-index:5;flex-wrap:wrap}.fbtn{pointer-events:auto;border:1px solid var(--line);background:var(--panel);color:var(--sub);font-size:12px;padding:7px 11px;border-radius:9px;font-weight:600}.fbtn.on{color:var(--ink);border-color:#4a5a6b;background:#1b2531}.legend{position:fixed;left:12px;bottom:14px;z-index:5;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:11px;max-width:46vw}.lg{display:flex;align-items:center;gap:7px;margin:5px 0;color:var(--sub)}.sw{width:12px;height:12px;border-radius:3px;flex:none}.jbtn{position:fixed;right:12px;bottom:14px;z-index:6;pointer-events:auto;border:1px solid var(--line);background:var(--panel);color:var(--ink);font-size:12px;font-weight:600;padding:9px 13px;border-radius:11px}.sheet{position:fixed;inset:auto 0 0 0;z-index:20;background:#0f141af2;border-top:1px solid var(--line);border-radius:16px 16px 0 0;max-height:74vh;transform:translateY(102%);transition:transform .28s ease;display:flex;flex-direction:column}.sheet.open{transform:translateY(0)}.shead{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line)}.shead b{font-size:13px}.shead span{color:var(--sub);font-size:12px;cursor:pointer}.sheet pre{margin:0;padding:12px 14px;overflow:auto;font-size:11px;line-height:1.5;color:#c9d4e0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.k{color:#7fb2e6}.s{color:#c1946a}.n{color:#8fc98f}.hint{position:fixed;left:50%;bottom:62px;transform:translate(-50%);z-index:4;color:var(--sub);font-size:11px;background:#0d1014aa;padding:4px 10px;border-radius:20px}.tracer{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column}.tracer-stage{position:relative;flex:1;overflow:hidden;touch-action:none;background:#11151a}.tracer-img{position:absolute;top:0;left:0;transform-origin:0 0;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:.85}.tracer-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.tracer-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--sub);font-size:12px}.tracer-empty .big{border:1px solid #4a5a6b;background:#1b2531;color:var(--ink);font-size:15px;font-weight:700;padding:14px 22px;border-radius:12px}.tracer-panel{z-index:5;background:var(--panel);border-top:1px solid var(--line);padding:10px 12px calc(10px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.tracer-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.tracer-row input{width:80px;border:1px solid var(--line);background:#11151a;color:var(--ink);font-size:14px;padding:7px 9px;border-radius:9px}.tracer-note{color:var(--sub);font-size:11px}.fbtn:disabled{opacity:.4}.trace-btn{margin-left:auto;color:var(--amber);border-color:#6b4a2a}.plans-btn{bottom:60px}.plans-body{overflow:auto;padding:12px 14px;display:flex;flex-direction:column;gap:10px}.plans-list{display:flex;flex-direction:column;gap:8px}.plans-item{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:10px;padding:8px 10px}.plans-meta{flex:1;display:flex;flex-direction:column;gap:2px;font-size:13px;min-width:0}.plans-meta b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fbtn.del{color:#e0533d;border-color:#6b3a32}.legal{border-top:1px solid var(--line);margin-top:8px;padding-top:6px}.legal .lg.ok{color:var(--grass)}.legal .lg.over{color:var(--accent);font-weight:700}.legal .lg.small{font-size:9px}.legal .lim{display:inline-flex;align-items:center;gap:2px;color:var(--sub);font-weight:400}.legal .lim input{width:44px;border:1px solid var(--line);background:#11151a;color:var(--ink);font-size:11px;padding:2px 4px;border-radius:6px;pointer-events:auto}.notes-input{flex:1;min-width:200px;border:1px solid var(--line);background:#11151a;color:var(--ink);font-size:12px;padding:7px 9px;border-radius:9px;font-family:inherit;resize:vertical}.tracer-row select{border:1px solid var(--line);background:#11151a;color:var(--ink);font-size:12px;padding:7px 9px;border-radius:9px}.fixture-info{position:absolute;left:12px;right:12px;bottom:12px;z-index:8;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:13px 15px;max-height:50vh;overflow:auto}.fixture-info h3{margin:0 0 2px;font-size:15px}.fixture-info .dim{color:var(--sub);font-size:11px;margin-bottom:9px;font-family:ui-monospace,monospace}.fixture-info .note{display:flex;gap:8px;margin:6px 0;font-size:12.5px;line-height:1.45;color:#d7dee6}.fixture-info .note:before{content:"▪";color:#e0b23d}.fixture-info .close{float:right;color:var(--sub);font-size:12px;cursor:pointer}.sun-panel{position:fixed;top:96px;right:12px;z-index:6;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;width:min(280px,calc(100vw - 24px))}.sun-panel label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink)}.sun-panel input[type=range]{width:100%;accent-color:var(--amber)}.walk{position:absolute;top:0;right:0;bottom:0;left:0}.walk-mini{position:fixed;right:12px;top:150px;z-index:6;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px;pointer-events:none}.floors select{pointer-events:auto;border:1px solid var(--line);background:var(--panel);color:var(--sub);font-size:12px;padding:7px 9px;border-radius:9px;font-weight:600}:root{--bg: #0d1014;--panel: rgba(18, 22, 28, .86);--line: #2a323d;--ink: #e8edf2;--sub: #8b97a6;--amber: #d08a3e;--cyan: #57c6dc;--slate: #8794a3;--accent: #e0533d;--grass: #5fae6a}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{margin:0;height:100%;overflow:hidden;background:var(--bg);font-family:-apple-system,Hiragino Kaku Gothic ProN,Yu Gothic,system-ui,sans-serif;color:var(--ink)}
