:root{--bg:#17181a;--fg:#e8e8e6;--fg-dim:#9a9a96;--accent:#4f8ff7;--panel:#1e1f22e0;--radius:6px}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);height:100%;color:var(--fg);-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,sans-serif;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none}#viewer{touch-action:none;position:fixed;inset:0}#viewer canvas{outline:none;display:block}#loader{background:var(--bg);z-index:20;justify-content:center;align-items:center;transition:opacity .6s;display:flex;position:fixed;inset:0}#loader.hidden{opacity:0;pointer-events:none}#loader.instant{transition:none}#loader-poster{filter:blur(20px);opacity:0;background-position:50%;background-size:cover;transition:opacity .4s;position:absolute;inset:0;transform:scale(1.12)}#loader-poster.visible{opacity:.45}.loader-content{text-align:center;flex-direction:column;align-items:center;gap:.6rem;max-width:26rem;padding:0 2rem;display:flex;position:relative}#loader-logo{max-width:12rem;max-height:3.5rem;margin-bottom:1rem}#loader-name{letter-spacing:-.01em;font-size:1.35rem;font-weight:600}#loader-meta{color:var(--fg-dim);font-size:.85rem}.loader-bar{background:#ffffff1f;border-radius:1px;width:13rem;height:2px;margin-top:1.4rem;overflow:hidden}.loader-bar[hidden]{display:none}#loader-bar-fill{background:var(--accent);width:0%;height:100%;transition:width .25s}#loader-status{color:var(--fg-dim);font-variant-numeric:tabular-nums;min-height:1em;font-size:.75rem}#loader-notice.error{color:#e07a6a;font-size:.9rem}#loader-notice{color:#e0b46a;max-width:22rem;margin-top:.8rem;font-size:.82rem;line-height:1.5}#loader-notice[hidden]{display:none}#loader-retry{color:#fff;background:var(--accent);border-radius:var(--radius);margin-top:.9rem;padding:.55rem 1.1rem;font-size:.8rem;font-weight:500}#loader-retry[hidden]{display:none}#loader-hint{bottom:calc(2rem + env(safe-area-inset-bottom));color:var(--fg-dim);text-align:center;padding:0 1.5rem;font-size:.78rem;position:absolute;left:50%;transform:translate(-50%)}#scan-bar{left:50%;bottom:calc(1rem + env(safe-area-inset-bottom));z-index:8;background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);align-items:center;gap:.15rem;max-width:calc(100vw - 2rem);padding:.3rem .35rem .3rem .75rem;transition:opacity .4s;display:flex;position:fixed;transform:translate(-50%)}.scan-bar-line{color:var(--fg-dim);white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.scan-bar-info{width:28px;height:28px;color:var(--fg-dim);border-radius:calc(var(--radius) - 2px);flex:none;justify-content:center;align-items:center;transition:color .15s,background-color .15s;display:flex}.scan-bar-info svg{width:15px;height:15px}.scan-bar-info:hover{color:var(--fg);background:#ffffff14}#viewpoints{bottom:calc(3.6rem + env(safe-area-inset-bottom));background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);z-index:10;scrollbar-width:none;gap:.4rem;max-width:calc(100vw - 2rem);padding:.3rem;display:flex;position:fixed;left:50%;overflow-x:auto;transform:translate(-50%)}#viewpoints::-webkit-scrollbar{display:none}#viewpoints button{color:var(--fg-dim);border-radius:calc(var(--radius) - 2px);white-space:nowrap;min-height:44px;padding:.55rem .9rem;font-size:.8rem;font-weight:500;transition:color .15s,background-color .15s}#viewpoints button:hover{color:var(--fg)}#viewpoints button.active{color:var(--fg);box-shadow:inset 0 -2px 0 var(--accent);background:#ffffff14}#anchors{pointer-events:none;z-index:5;position:fixed;inset:0}.pin{pointer-events:auto;color:#fff;background:var(--accent);will-change:transform;border:2px solid #ffffffd9;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:.75rem;font-weight:600;transition:opacity .25s;display:flex;position:absolute;top:0;left:0;box-shadow:0 1px 6px #00000073}.pin:after{content:"";position:absolute;inset:-8px}.pin.hidden{opacity:0;pointer-events:none}.pin.selected{outline:2px solid var(--fg);outline-offset:2px}.pin.note-pin{background:var(--accent);border:2px solid #ffffffe6;width:18px;height:18px;transition:opacity .25s,width .12s,height .12s;box-shadow:0 1px 5px #00000080}.pin.note-pin:hover,.pin.note-pin.selected{width:22px;height:22px}.pin.note-pin.selected{outline:none}.note-callout{pointer-events:none;z-index:6;will-change:transform;width:0;height:0;position:absolute;top:0;left:0}.note-card{background:var(--panel);-webkit-backdrop-filter:blur(14px);border-radius:var(--radius);opacity:0;width:max-content;max-width:min(17rem,70vw);padding:.6rem .7rem;transition:opacity .18s,transform .18s;position:absolute;bottom:16px;left:50%;transform:translate(-50%)translateY(4px);box-shadow:0 4px 18px #00000073}.note-callout.open .note-card{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)}.note-callout.hidden{opacity:0}.note-card-head{align-items:center;gap:.5rem;margin-bottom:.3rem;display:flex}.note-card-head strong{color:var(--accent);flex:1;font-size:.72rem;font-weight:600}.note-card-close{width:20px;height:20px;color:var(--fg-dim);flex:none;font-size:1rem;line-height:1}.note-card-close:hover{color:var(--fg)}.note-card p{white-space:pre-line;font-size:.85rem;line-height:1.45}.note-card span{color:var(--fg-dim);margin-top:.4rem;font-size:.7rem;display:block}.pin.note-pin.preview{animation:1.2s ease-in-out infinite note-pulse}@keyframes note-pulse{0%,to{box-shadow:0 0 #ffffff59}50%{box-shadow:0 0 0 7px #fff0}}body.placing-note #viewer{cursor:crosshair}body.placing-note .pin{pointer-events:none}.hud-button.active{background:var(--accent);color:#fff}.pin.measure-pin{color:var(--fg);background:#1e1f22eb;border-color:#ffffff8c;font-size:.8rem}.pin.measure-pin.selected{background:var(--fg);color:var(--bg);outline:none}#measure-overlay{pointer-events:none;z-index:4;width:100%;height:100%;display:none;position:fixed;inset:0}#measure-overlay.visible{display:block}#measure-overlay line{stroke:#ffffffe6;stroke-width:1.5px}#measure-overlay circle{fill:#fff;stroke:#00000080;stroke-width:1px}.measure-label{z-index:6;background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);pointer-events:none;text-align:center;white-space:nowrap;flex-direction:row;align-items:center;gap:.5rem;padding:.35rem .65rem;display:none;position:fixed;top:0;left:0}.measure-label.visible{display:flex}.measure-label strong{font-variant-numeric:tabular-nums;font-size:.85rem;font-weight:600}.measure-label span{color:var(--fg-dim);font-size:.7rem}.measure-texts{flex-direction:column;align-items:center;gap:.05rem;display:flex}.measure-delete{pointer-events:auto;color:var(--fg-dim);border-radius:calc(var(--radius) - 2px);flex:none;align-items:center;padding:.3rem .4rem;font-size:.72rem;transition:color .15s,background-color .15s;display:flex}.measure-delete svg{width:15px;height:15px}.measure-delete:hover{color:#e07a6a;background:#e07a6a1f}.measure-delete.confirm{color:#fff;white-space:nowrap;background:#b5432f;font-weight:500}#devtools{bottom:calc(1rem + env(safe-area-inset-bottom));z-index:30;background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);max-width:min(480px,100vw - 2rem);padding:.7rem .8rem;font-size:.72rem;position:fixed;left:1rem}.dev-row{align-items:center;gap:.5rem;margin-bottom:.35rem;display:flex}.dev-label{width:5.5rem;color:var(--fg-dim);flex:none}.dev-row code{color:var(--fg);white-space:nowrap;scrollbar-width:none;flex:1;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.68rem;overflow-x:auto}.dev-row button{color:#fff;background:var(--accent);border-radius:calc(var(--radius) - 2px);flex:none;padding:.25rem .55rem;font-size:.7rem;font-weight:500}.dev-row button:disabled{opacity:.4;cursor:default}.dev-hint{color:var(--fg-dim);font-size:.68rem}#panel{z-index:15;background:var(--panel);-webkit-backdrop-filter:blur(16px);border-radius:var(--radius);flex-direction:column;transition:transform .2s;display:none;position:fixed}#panel.open{display:flex}.panel-handle{display:none}.panel-close{width:36px;height:36px;color:var(--fg-dim);border-radius:var(--radius);font-size:1.3rem;line-height:1;position:absolute;top:.4rem;right:.4rem}.panel-close:hover{color:var(--fg)}.panel-body{overscroll-behavior:contain;padding:1.1rem 1.2rem 1.2rem;overflow-y:auto}.pin-content header{align-items:center;gap:.6rem;margin-bottom:.7rem;padding-right:2rem;display:flex}.pin-badge{color:#fff;background:var(--accent);border-radius:50%;flex:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:.7rem;font-weight:600;display:flex}.pin-content h2{font-size:1rem;font-weight:600}.pin-text{color:var(--fg);white-space:pre-line;font-size:.875rem;line-height:1.55}.pin-meta{color:var(--fg-dim);margin-top:.8rem;font-size:.75rem}@media (width>=769px){#panel{width:330px;max-height:calc(100vh - 5.4rem);top:4.4rem;right:1rem}}#hud{top:calc(.9rem + env(safe-area-inset-top));right:calc(.9rem + env(safe-area-inset-right));z-index:10;gap:.4rem;display:flex;position:fixed}.hud-button{width:42px;height:42px;color:var(--fg);background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);justify-content:center;align-items:center;transition:background-color .15s;display:flex}.hud-button:hover{background:#ffffff1f}.hud-button svg{width:19px;height:19px}#hud,#viewpoints{transition:opacity .4s}body.ui-hidden #hud,body.ui-hidden #viewpoints,body.ui-hidden #scan-bar{opacity:0;pointer-events:none}#gesture-help{bottom:calc(7.6rem + env(safe-area-inset-bottom));color:var(--fg);background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);white-space:nowrap;opacity:0;pointer-events:none;z-index:10;padding:.55rem 1rem;font-size:.8rem;transition:opacity .5s;position:fixed;left:50%;transform:translate(-50%)}#gesture-help.visible{opacity:1}#toast{bottom:calc(7.6rem + env(safe-area-inset-bottom));color:var(--fg);background:var(--panel);-webkit-backdrop-filter:blur(12px);border-radius:var(--radius);white-space:nowrap;opacity:0;pointer-events:none;z-index:25;padding:.55rem 1rem;font-size:.8rem;transition:opacity .3s,transform .3s;position:fixed;left:50%;transform:translate(-50%)translateY(6px)}#toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.notes-content h2{padding-right:2rem;font-size:1rem;font-weight:600}.notes-hint{color:var(--fg-dim);margin-top:.3rem;font-size:.75rem}.notes-list{flex-direction:column;gap:.4rem;margin-top:.8rem;list-style:none;display:flex}.notes-list button{text-align:left;border-radius:var(--radius);background:#ffffff0d;flex-direction:row;align-items:center;gap:.6rem;width:100%;padding:.6rem .7rem;transition:background-color .15s;display:flex}.note-texts{flex-direction:column;gap:.15rem;min-width:0;display:flex}.notes-list .list-badge{width:24px;height:24px;box-shadow:none;pointer-events:none;flex:none;position:static;transform:none}.notes-list .list-badge.note-pin{width:14px;height:14px}.measure-detail-value{font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:.2rem;font-size:1.5rem;font-weight:600}.notes-list button:hover{background:#ffffff1a}.note-label{color:var(--accent);font-size:.72rem;font-weight:600}.note-snippet{color:var(--fg);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.85rem;line-height:1.4;display:-webkit-box;overflow:hidden}.note-form{flex-direction:column;gap:.5rem;margin-top:1rem;display:flex}.note-form textarea,.note-form input{font:inherit;color:var(--fg);border-radius:var(--radius);background:#ffffff0f;border:1px solid #ffffff1f;padding:.6rem .7rem;font-size:.875rem}.note-form textarea{resize:vertical;min-height:4.5rem}.note-form textarea:focus,.note-form input:focus{border-color:var(--accent);outline:none}.note-actions{flex-wrap:wrap;gap:.5rem;margin-top:1rem;display:flex}.note-actions .note-add{white-space:nowrap;flex:1;align-self:auto}.measure-temp{pointer-events:none;will-change:transform;background:#fff;border:2px solid #00000080;border-radius:50%;width:10px;height:10px;position:absolute;top:0;left:0}.measure-temp.hidden{opacity:0}.note-save{color:#fff;background:var(--accent);border-radius:var(--radius);align-self:flex-end;padding:.5rem .9rem;font-size:.8rem;font-weight:500}.note-detail-header{justify-content:space-between;align-items:center;gap:.6rem;margin-bottom:.6rem;padding-right:2rem;display:flex}.note-delete{color:var(--fg-dim);border-radius:var(--radius);flex:none;align-items:center;gap:.35rem;padding:.4rem .5rem;font-size:.75rem;transition:color .15s,background-color .15s;display:flex}.note-delete svg{width:16px;height:16px}.note-delete:hover{color:#e07a6a;background:#e07a6a1f}.note-delete.confirm{color:#fff;background:#b5432f;font-weight:500}.note-cancel{color:var(--fg);border-radius:var(--radius);background:#ffffff14;flex:1;padding:.5rem .9rem;font-size:.8rem;font-weight:500}.note-cancel:hover{background:#ffffff24}.note-save.note-danger{background:#b5432f}.note-back{color:var(--fg-dim);margin-bottom:.5rem;font-size:.78rem}.note-back:hover{color:var(--fg)}@media (width<=768px){#panel{border-radius:calc(var(--radius) * 2) calc(var(--radius) * 2) 0 0;max-height:55vh;padding-bottom:env(safe-area-inset-bottom);bottom:0;left:0;right:0}.panel-handle{background:#ffffff40;border-radius:2px;flex:none;width:36px;height:4px;margin:.5rem auto 0;display:block}}
