:root{--ink:#1f2427;--ink-2:#5d6468;--paper:#faf8f3f0;--paper-solid:#faf8f3;--line:#1f24271a;--accent:#4b4036;--accent-ink:#f6f1e8;--hot:#e8572a;--pressed:#ece5d8;--radius:14px;--shadow:0 1px 2px #0000000f, 0 6px 24px #14181c24;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px)}*{box-sizing:border-box}html,body{height:100%;color:var(--ink);-webkit-font-smoothing:antialiased;background:#cdd6dc;margin:0;font:14px/1.4 ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overflow:hidden}body{touch-action:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}input,textarea{font:inherit;color:inherit;-webkit-user-select:text;user-select:text}#app{position:fixed;inset:0}#canvas{touch-action:none;outline:none;width:100%;height:100%;display:block}body[data-tool=measure] #canvas,body[data-tool=note] #canvas,body[data-tool=inspect] #canvas{cursor:crosshair}body[data-mode=walk] #canvas{cursor:grab}body[data-mode=walk] #canvas:active{cursor:grabbing}.ico{flex:none;width:20px;height:20px}.card{background:var(--paper);-webkit-backdrop-filter:blur(14px)saturate(1.3);border-radius:var(--radius);box-shadow:var(--shadow)}[hidden]{display:none!important}#loading{z-index:50;background:linear-gradient(#e9eef1,#d6dee3);place-items:center;transition:opacity .8s;display:grid;position:fixed;inset:0}body.loaded #loading{opacity:0;pointer-events:none}.loading-card{color:var(--accent);justify-items:center;gap:6px;display:grid}.loading-card strong{color:var(--ink);font-size:18px}.loading-card span{color:var(--ink-2)}.loading-house{stroke-dasharray:140;stroke-dashoffset:140px;width:64px;height:64px;animation:1.6s ease-in-out infinite alternate draw}@keyframes draw{to{stroke-dashoffset:0}}#top{top:calc(12px + var(--safe-t));pointer-events:none;z-index:10;align-items:flex-start;gap:10px;display:flex;position:fixed;left:12px;right:12px}#top>*{pointer-events:auto}.brand{min-width:0;padding:10px 14px}.brand-name{letter-spacing:.01em;font-size:15px;font-weight:650}.brand-sub{color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.loc{color:var(--ink-2);margin-top:6px;font-size:12.5px}.loc span{color:var(--ink);font-weight:600}.loc em{color:var(--accent);font-style:normal;font-weight:600}.modes{gap:2px;margin-left:auto;padding:4px;display:flex}.modes button{color:var(--ink-2);border-radius:10px;align-items:center;gap:6px;padding:8px 14px;font-weight:600;transition:background .15s,color .15s;display:flex}.modes button:hover{color:var(--ink);background:#0000000a}.modes button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}.actions{gap:2px;padding:4px;display:flex}.icon-btn{width:38px;height:38px;color:var(--ink-2);border-radius:10px;place-items:center;transition:background .15s,color .15s;display:grid}.icon-btn:hover{color:var(--ink);background:#0000000d}.icon-btn.small{width:30px;height:30px}.icon-btn.small .ico{width:16px;height:16px}:focus-visible{outline:2px solid var(--hot);outline-offset:2px}#panel{z-index:9;left:12px;top:calc(120px + var(--safe-t));flex-direction:column;width:330px;display:flex;position:fixed;bottom:96px;overflow:hidden}.panel-head{border-bottom:1px solid var(--line);align-items:center;padding:4px;display:flex}.tabs{flex:1;gap:2px;display:flex}.tabs button{color:var(--ink-2);border-radius:9px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:6px 2px;font-size:11.5px;font-weight:600;display:flex}.tabs button .ico{width:18px;height:18px}.tabs button[aria-selected=true]{background:var(--pressed);color:var(--ink)}.panel-body{overscroll-behavior:contain;touch-action:pan-y;flex:1;padding:10px;overflow:auto}.panel-body section{flex-direction:column;gap:10px;display:flex}.search{border:1px solid var(--line);background:#fff;border-radius:10px;outline:none;width:100%;padding:9px 12px}.search:focus{border-color:var(--accent)}.room-list,.finish-list,.note-list,.measure-list{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.room-list li{border-radius:10px;align-items:center;transition:background .12s;display:flex}.room-list li:hover,.room-list li.active{background:#4b403614}.room-list li.active .rname{color:var(--accent)}.room-list li>button:first-child{text-align:left;flex-direction:column;flex:1;min-width:0;padding:8px 10px;display:flex}.rname{font-weight:600}.rsub,.rfloor{color:var(--ink-2);font-size:12px}.rfloor{opacity:.8}.walk-here{width:36px;height:36px;color:var(--ink-2);border-radius:9px;flex:none;place-items:center;margin-right:4px;display:grid}.walk-here:hover{background:var(--accent);color:var(--accent-ink)}.finish-list li{align-items:center;gap:10px;padding:6px 4px;display:flex}.finish-list li>span:last-child{flex-direction:column;display:flex}.finish-list small{color:var(--ink-2);font-size:12px}.swatch{border-radius:8px;flex:none;width:30px;height:30px;box-shadow:inset 0 0 0 1px #0000001f}.fine{color:var(--ink-2);margin:0;font-size:12px;line-height:1.45}.btn{box-shadow:inset 0 0 0 1px var(--line);background:#fff;border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:9px 14px;font-weight:600;transition:background .15s;display:inline-flex}.btn:hover{background:#f3efe7}.btn.primary{background:var(--accent);color:var(--accent-ink);box-shadow:none}.btn.primary:hover{background:#3c332b}.btn.small{padding:6px 10px;font-size:12.5px}.btn.link{box-shadow:none;color:var(--ink-2);background:0 0;text-decoration:underline}.btn .ico{width:17px;height:17px}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row .btn,.spacer{flex:1}.note-list li{border-radius:10px}.note-list li.empty{color:var(--ink-2);background:#00000008;padding:10px;font-size:13px}.note-row{text-align:left;border-radius:10px;align-items:flex-start;gap:10px;width:100%;padding:8px;display:flex}.note-row:hover{background:#4b403614}.note-row>span:last-child{flex-direction:column;min-width:0;display:flex}.note-text{white-space:pre-wrap;overflow-wrap:anywhere}.note-row small{color:var(--ink-2);font-size:11.5px}.note-num{background:var(--hot);color:#fff;border-radius:50%;flex:none;place-items:center;width:24px;height:24px;font-size:12px;font-weight:700;display:grid}.note-list li.done .note-num{background:#8b9a7a}.note-list li.done .note-text{color:var(--ink-2);text-decoration:line-through}.measure-list li{background:#00000008;border-radius:10px;justify-content:space-between;align-items:center;padding:6px 8px;display:flex}.measure-list li>span{flex-direction:column;display:flex}.measure-list small{color:var(--ink-2);font-size:12px}#bottom{z-index:10;left:50%;bottom:calc(14px + var(--safe-b));pointer-events:none;flex-direction:column;align-items:center;gap:8px;max-width:calc(100vw - 24px);display:flex;position:fixed;transform:translate(-50%)}#bottom>*{pointer-events:auto}.views{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}body:not([data-mode=orbit]) .views,body.touring #bottom{display:none}.chip{background:var(--paper);box-shadow:var(--shadow);color:var(--ink-2);-webkit-backdrop-filter:blur(12px);border-radius:999px;padding:6px 12px;font-size:12.5px;font-weight:600}.chip:hover{color:var(--ink)}#dock{gap:2px;padding:5px;display:flex}.tool{min-width:62px;color:var(--ink-2);border-radius:10px;flex-direction:column;align-items:center;gap:2px;padding:6px 8px;font-size:11.5px;font-weight:600;transition:background .15s,color .15s;display:flex}.tool:hover{color:var(--ink);background:#0000000a}.tool[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}.popover,#popover{z-index:30;flex-direction:column;gap:8px;min-width:240px;max-width:min(340px,100vw - 16px);padding:12px;display:flex;position:fixed}#settings{width:320px;max-height:calc(100vh - 120px);overflow:auto}.pop-title{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2);justify-content:space-between;font-size:11.5px;font-weight:700;display:flex}.fps{text-transform:none;letter-spacing:0;font-weight:500}.seg{background:#0000000d;border-radius:10px;gap:2px;padding:3px;display:flex}.seg button{color:var(--ink-2);white-space:nowrap;border-radius:8px;flex:1;padding:7px 8px;font-size:12.5px;font-weight:600}.seg button[aria-pressed=true]{color:var(--ink);background:#fff;box-shadow:0 1px 3px #0000001f}.range{align-items:center;gap:10px;font-size:13px;display:flex}.range input{accent-color:var(--accent);flex:1}.range output{text-align:right;font-variant-numeric:tabular-nums;min-width:64px;font-weight:600}.qual{flex-direction:column;gap:2px;display:flex}.qopt{cursor:pointer;border-radius:9px;align-items:flex-start;gap:10px;padding:6px;display:flex}.qopt:hover{background:#0000000a}.qopt input{accent-color:var(--accent);margin-top:3px}.qopt span{flex-direction:column;display:flex}.qopt small{color:var(--ink-2);font-size:12px}.layer-list{grid-template-columns:1fr 1fr;gap:4px;display:grid}.check{cursor:pointer;align-items:center;gap:8px;padding:3px 0;font-size:13px;display:flex}.check input{accent-color:var(--accent);width:16px;height:16px}#settings input[type=text],#settings input[type=password]{border:1px solid var(--line);background:#fff;border-radius:9px;outline:none;padding:8px 10px}.inspect-head{align-items:center;gap:10px;display:flex}.inspect-head strong{font-size:14px}.inspect-line{color:var(--ink-2);font-size:12.5px}#tour{z-index:11;left:50%;bottom:calc(16px + var(--safe-b));width:min(640px,100vw - 24px);padding:0 16px 12px;transition:transform .45s cubic-bezier(.2,.8,.2,1);position:fixed;overflow:hidden;transform:translate(-50%,140%)}body.touring #tour{transform:translate(-50%)}.tour-progress{background:#0000000f;height:3px;margin:0 -16px 12px}.tour-progress-bar{background:var(--accent);width:0;height:100%;transition:width .6s}.tour-main{flex-direction:column;gap:4px;display:flex}.tour-title{font-size:17px;font-weight:700}.tour-sub{color:var(--ink-2);font-size:12.5px}.tour-text{margin:4px 0 8px;line-height:1.5}.tour-ctl{align-items:center;gap:4px;display:flex}.tour-step{color:var(--ink-2);font-variant-numeric:tabular-nums;margin:0 auto 0 8px;font-size:12px}#tour.paused .tour-progress-bar{background:var(--ink-2)}#labels{z-index:2}.room-label{pointer-events:auto;color:var(--ink);white-space:nowrap;background:#ffffffe0;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:650;transition:background .15s,transform .15s;box-shadow:0 1px 4px #00000026}.room-label:hover{background:#fff;transform:scale(1.05)}.room-label.active{background:var(--accent);color:var(--accent-ink)}.room-label small{opacity:.7;margin-left:5px;font-weight:450}body.hide-labels .room-label{display:none}body[data-tool=measure] .room-label,body[data-tool=note] .room-label{pointer-events:none;opacity:.6}.note-pin{pointer-events:auto;background:var(--hot);color:#fff;border:2px solid #fff;border-radius:50% 50% 50% 0;place-items:center;width:26px;height:26px;font-size:12px;font-weight:700;display:grid;transform:translateY(-15px)rotate(-45deg);box-shadow:0 2px 8px #0000004d}.note-pin>*{transform:rotate(45deg)}.note-pin{line-height:22px}.note-pin.done{background:#8b9a7a}.measure-label{background:var(--hot);color:#fff;white-space:nowrap;text-align:center;font-variant-numeric:tabular-nums;border-radius:8px;padding:3px 9px;font-size:13px;font-weight:700;box-shadow:0 2px 8px #00000040}.measure-label small{opacity:.9;font-size:11px;font-weight:500;display:block}#compass{z-index:10;right:16px;bottom:calc(18px + var(--safe-b));background:var(--paper);width:52px;height:52px;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(12px);border-radius:50%;place-items:center;display:grid;position:fixed}#compass .needle{width:30px;height:30px;color:var(--hot);place-items:center;display:grid}#compass .needle .ico{fill:currentColor;width:30px;height:30px}#compass span{color:var(--ink-2);font-size:9px;font-weight:800;position:absolute;top:2px}#hint{z-index:12;left:50%;top:calc(96px + var(--safe-t));color:#fff;opacity:0;pointer-events:none;text-align:center;background:#1f2427db;border-radius:999px;max-width:calc(100vw - 32px);padding:9px 16px;font-size:13px;transition:opacity .3s,transform .3s;position:fixed;transform:translate(-50%,-10px)}#hint.show{opacity:1;transform:translate(-50%)}#toast{z-index:60;left:50%;bottom:calc(110px + var(--safe-b));background:var(--ink);color:#fff;opacity:0;pointer-events:none;border-radius:12px;padding:10px 16px;font-weight:500;transition:opacity .25s,transform .25s;position:fixed;transform:translate(-50%,10px)}#toast.show{opacity:1;transform:translate(-50%)}#modal{z-index:40;background:#14181c59;place-items:center;padding:16px;animation:.2s fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.modal-card{background:var(--paper-solid);width:min(520px,100%);max-height:calc(100vh - 32px);padding:20px;overflow:auto}.modal-card h2{margin:0 0 8px;font-size:20px}.modal-card p{color:var(--ink-2);margin:0 0 14px;line-height:1.5}.welcome-grid{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px;display:grid}.welcome-opt{box-shadow:inset 0 0 0 1px var(--line);text-align:left;background:#fff;border-radius:12px;flex-direction:column;align-items:flex-start;gap:4px;padding:14px;transition:box-shadow .15s,transform .15s;display:flex}.welcome-opt:hover{box-shadow:inset 0 0 0 2px var(--accent);transform:translateY(-1px)}.welcome-opt .ico{width:26px;height:26px;color:var(--accent);margin-bottom:4px}.welcome-opt small{color:var(--ink-2);font-size:12px}.help table{border-collapse:collapse;width:100%;margin-bottom:14px}.help th{text-align:left;white-space:nowrap;vertical-align:top;color:var(--accent);padding:6px 14px 6px 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}.help td{color:var(--ink-2);border-bottom:1px solid var(--line);padding:6px 0}.note-edit{flex-direction:column;gap:10px;display:flex}.note-edit textarea{resize:vertical;border:1px solid var(--line);background:#fff;border-radius:10px;outline:none;width:100%;min-height:96px;padding:10px 12px}.note-edit textarea:focus{border-color:var(--accent)}.joystick{z-index:10;left:24px;bottom:calc(110px + var(--safe-b));-webkit-backdrop-filter:blur(6px);touch-action:none;background:#ffffff47;border-radius:50%;place-items:center;width:120px;height:120px;display:grid;position:fixed;box-shadow:inset 0 0 0 2px #ffffff8c,0 4px 18px #00000026}.joy-knob{background:#ffffffeb;border-radius:50%;width:52px;height:52px;transition:transform 80ms;box-shadow:0 2px 10px #00000040}body[data-mode=orbit] .joystick{display:none}@media (max-width:760px){#top{left:8px;right:8px;top:calc(8px + var(--safe-t));flex-wrap:wrap;gap:6px}.brand{flex:1;padding:8px 12px}.brand-name{font-size:14px}.brand-sub{display:none}.loc{margin-top:2px}.actions{order:2}.actions .hide-narrow{display:none}.modes{order:3;width:100%;margin:0}.modes button{flex:1;justify-content:center;padding:8px}.icon-btn{width:36px;height:36px}#panel{width:auto;max-height:62vh;padding-bottom:var(--safe-b);z-index:20;border-radius:18px 18px 0 0;animation:.25s up;inset:auto 0 0}@keyframes up{0%{opacity:0;transform:translateY(40px)}}#bottom{bottom:calc(8px + var(--safe-b));width:calc(100vw - 16px)}#dock{justify-content:space-between;width:100%}.tool{flex:1;min-width:0;padding:6px 2px;font-size:10.5px}.views{scrollbar-width:none;touch-action:pan-x;flex-wrap:nowrap;justify-content:flex-start;width:100%;padding:2px 2px 4px;overflow-x:auto}.views::-webkit-scrollbar{display:none}.chip{flex:none}#compass{right:10px;top:calc(118px + var(--safe-t));width:44px;height:44px;bottom:auto}#compass .needle,#compass .needle .ico{width:24px;height:24px}#tour{bottom:calc(8px + var(--safe-b))}.tour-text{font-size:13.5px}.welcome-grid{grid-template-columns:1fr}.welcome-opt{flex-flow:wrap;align-items:center;column-gap:10px}.welcome-opt small{width:100%;margin-top:-4px;padding-left:36px}.welcome-opt .ico{margin:0}#hint{top:calc(126px + var(--safe-t));border-radius:12px;font-size:12.5px}#settings{width:auto;max-width:none;left:8px!important;right:8px!important}.joystick{bottom:calc(96px + var(--safe-b));left:18px}body.panel-open #bottom{display:none}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}body.far .room-label small{display:none}.photo{flex-direction:column;gap:10px;display:flex}.photo h2,.photo p{margin:0}.photo-opts{display:grid}#develop{z-index:45;background:#14181c40;place-items:center;display:grid;position:fixed;inset:0}.dev-card{flex-direction:column;gap:8px;width:min(340px,100vw - 32px);padding:18px 20px;display:flex}.dev-card span{color:var(--ink-2);font-variant-numeric:tabular-nums;font-size:13px}.dev-track{background:#00000014;border-radius:3px;height:6px;overflow:hidden}.dev-bar{background:var(--accent);width:0;height:100%;transition:width .2s}.dev-card .btn{align-self:flex-end}
