:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Noto Sans TC,sans-serif;color-scheme:dark;background:#0d1117;color:#e6edf3}*{box-sizing:border-box}body{margin:0;min-height:100vh}button{font:inherit;cursor:pointer;background:#1f6feb;color:#fff;border:none;padding:.5rem 1rem;border-radius:6px}button:hover{background:#388bfd}button:disabled{background:#30363d;cursor:not-allowed}input{font:inherit;background:#161b22;color:inherit;border:1px solid #30363d;padding:.5rem .75rem;border-radius:6px;min-width:380px}.app{max-width:1280px;margin:0 auto;padding:2rem 1.5rem}.admin-app{max-width:none;margin:0;padding:0;height:100vh;display:flex;flex-direction:column;overflow:hidden}.admin-app .admin-topbar{display:flex;align-items:center;flex-wrap:wrap;gap:.3rem 1rem;padding:.3rem 1rem;border-bottom:1px solid #30363d;flex-shrink:0}.admin-app .admin-topbar h1{margin:0;white-space:nowrap;font-size:1.05rem}.admin-app .admin-topbar .subtitle{margin:0}.admin-app .admin-topbar .loader-form{margin:0 0 0 auto;flex-wrap:nowrap}.admin-app .admin-topbar .loader-form input{min-width:220px}.admin-header-slot{display:flex;align-items:center;gap:.5rem;min-width:0;flex-wrap:wrap}.admin-app>.error{flex-shrink:0;margin:.5rem 1rem}.admin-main{flex:1;min-width:0;overflow-y:auto;padding:.35rem .75rem .5rem}.app header h1{margin:0 0 .25rem;font-size:1.25rem;font-weight:600}.app header .subtitle{color:#8b949e;font-size:.9rem;margin-bottom:1.5rem}.loader-form{display:flex;gap:.5rem;margin-bottom:1.5rem;flex-wrap:wrap}.error{background:#f85149;color:#fff;padding:.75rem 1rem;border-radius:6px;margin-bottom:1rem}.building-meta{display:flex;align-items:center;gap:1rem;padding:1rem;background:#161b22;border:1px solid #30363d;border-radius:8px;margin-bottom:1.5rem}.building-meta h2{margin:0;font-size:1.1rem}.building-meta .meta-line{color:#8b949e;font-size:.85rem}.panorama-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem}.panorama-card{background:#161b22;border:1px solid #30363d;border-radius:8px;overflow:hidden;cursor:pointer;transition:transform .15s ease,border-color .15s ease}.panorama-card:hover{transform:translateY(-2px);border-color:#1f6feb}.panorama-card .thumb{width:100%;aspect-ratio:2 / 1;object-fit:cover;background:#0d1117;display:block}.panorama-card .info{padding:.5rem .75rem;font-size:.85rem}.panorama-card .name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panorama-card .category{color:#8b949e;font-size:.75rem}.viewer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000;z-index:100;display:flex;flex-direction:column}.viewer-overlay .topbar{position:absolute;top:0;left:0;right:0;z-index:2;display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:linear-gradient(to bottom,rgba(0,0,0,.7),transparent);color:#fff;pointer-events:none}.viewer-overlay .topbar button{pointer-events:auto}.viewer-overlay .canvas-wrap{flex:1}.viewer-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#fff;pointer-events:none}.hud-tip{position:absolute;top:4rem;left:50%;transform:translate(-50%);background:#000000b3;color:#fff;padding:.5rem 1rem;border-radius:6px;pointer-events:none;z-index:3;font-size:.95rem}.badge{display:inline-block;margin-left:.4rem;padding:.05rem .4rem;border-radius:4px;font-size:.7rem;background:#30363d;color:#e6edf3}.badge.mesh{background:#1f6feb}.badge.splat{background:#a371f7}.badge.pose{background:#2da44e}.badge.doors{background:#db61a2}.floorplan{background:#161b22;border:1px solid #30363d;border-radius:8px;padding:.75rem;margin-bottom:1.5rem}.floorplan-header{font-size:.9rem;margin-bottom:.5rem;color:#e6edf3}.floorplan-svg{width:100%;height:280px;background:#0d1117;border-radius:6px;-webkit-user-select:none;user-select:none}.mode-switcher{position:fixed;bottom:1.5rem;left:50%;transform:translate(-50%);display:flex;gap:.5rem;z-index:200;background:#0009;padding:.4rem;border-radius:8px;pointer-events:auto}.mode-switcher button{min-width:64px}.building-scene{background:#161b22;border:1px solid #30363d;border-radius:8px;padding:.75rem;margin-bottom:1.5rem}.building-scene-header{font-size:.9rem;margin-bottom:.5rem;color:#e6edf3;display:flex;align-items:center}.building-scene-canvas{width:100%;height:460px;background:#0d1117;border-radius:6px;overflow:hidden}.admin-main .building-scene-canvas{height:70vh}.building-scene.empty{color:#8b949e;text-align:center;padding:1.5rem}.help-fab{position:fixed;right:1rem;bottom:1rem;width:38px;height:38px;border-radius:50%;background:#30363d;color:#fff;font:inherit;font-weight:600;cursor:pointer;border:1px solid #484f58;z-index:50}.help-fab:hover{background:#484f58}.help-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:grid;place-items:center;z-index:300}.help-card{background:#161b22;border:1px solid #30363d;border-radius:10px;padding:1.25rem 1.5rem;max-width:460px;width:calc(100vw - 2rem);color:#e6edf3}.help-card h3{margin:0 0 .5rem;font-size:.95rem;letter-spacing:.04em;text-transform:uppercase;color:#8b949e}.help-card table{border-collapse:collapse}.help-card td{padding:.2rem .4rem;vertical-align:top;font-size:.9rem}.help-card td:first-child{width:86px}kbd{display:inline-block;background:#0d1117;border:1px solid #30363d;border-radius:4px;padding:.05rem .4rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em}.floorplan-svg line.connection{stroke:#a371f7;stroke-width:.04;stroke-dasharray:.15 .1;opacity:.85}.floor-tabs{display:flex;align-items:center;gap:.4rem;margin-bottom:1rem;font-size:.85rem;color:#e6edf3}.floor-tabs button{background:#30363d;padding:.35rem .7rem;font-size:.85rem;border-radius:6px}.floor-tabs button.active{background:#1f6feb}.env-badge{display:inline-block;font-size:.7rem;padding:.1rem .5rem;border-radius:4px;vertical-align:middle;margin-left:.4rem;font-weight:600}.env-badge.admin{background:#a371f7;color:#fff}.job-progress{background:#161b22;border:1px solid #30363d;border-radius:8px;padding:1rem 1.25rem;margin-bottom:1.5rem}.job-progress-header{display:flex;align-items:center;gap:.75rem;margin-bottom:.5rem}.job-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;color:#8b949e}.job-pct{margin-left:auto;font-weight:600;color:#1f6feb}.job-progress-bar{width:100%;height:8px;background:#0d1117;border-radius:4px;overflow:hidden;margin-bottom:.75rem}.bar-fill{height:100%;transition:width .3s ease}.bar-fill.running{background:linear-gradient(to right,#1f6feb,#a371f7)}.bar-fill.done{background:#2da44e}.bar-fill.err{background:#f85149}.job-timeline{list-style:none;padding:0;margin:0 0 .5rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.4rem 1rem}.job-stage{display:flex;align-items:center;gap:.5rem;font-size:.85rem;padding:.3rem .5rem;border-radius:6px;background:#0d1117}.stage-symbol{font-size:1rem;min-width:1.2rem;text-align:center}.stage-pending .stage-label{color:#6e7681}.stage-current .stage-label{color:#e6edf3;font-weight:500}.stage-current{box-shadow:0 0 0 1px #1f6feb inset}.stage-done .stage-label{color:#2da44e}.stage-error .stage-label{color:#f85149}.job-log{background:#0d1117;border-radius:6px;padding:.5rem .75rem;margin-top:.5rem;max-height:130px;overflow-y:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;color:#c9d1d9}.log-line{display:flex;gap:.4rem;padding:.1rem 0}.log-stage{color:#8b949e;min-width:5rem}.log-msg{color:#e6edf3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-error .log-msg{color:#f85149}.job-error{margin-top:.5rem;padding:.5rem .75rem;background:#2a0e10;border:1px solid #f8514944;color:#ffa198;border-radius:6px;font-size:.85rem}.job-error pre{white-space:pre-wrap;word-break:break-word;font-size:.75rem;max-height:240px;overflow-y:auto}.blist-head{display:flex;align-items:flex-start;gap:1rem;margin-bottom:1.25rem}.blist-head h1{margin:0 0 .35rem}.blist-head .subtitle{color:#8b949e;font-size:.82rem}.blist-count{color:#8b949e;font-size:.8rem;font-weight:400;margin-left:.5rem}.blist-add{margin-left:auto;flex-shrink:0;background:#238636;white-space:nowrap}.blist-add:hover{background:#2ea043}.blist-bar{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center;margin-bottom:.6rem}.blist-search{position:relative;flex:1 1 260px;max-width:360px}.blist-search .ic{position:absolute;left:.6rem;top:50%;transform:translateY(-50%);color:#6e7681;font-size:.85rem;pointer-events:none}.blist-search input{width:100%;min-width:0;padding:.4rem 1.9rem .4rem 1.8rem;font-size:.85rem;background:#0d1117}.blist-search input:focus{outline:none;border-color:#1f6feb}.blist-search .clr{position:absolute;right:.35rem;top:50%;transform:translateY(-50%);background:none;color:#6e7681;padding:.1rem .35rem;font-size:.75rem}.blist-search .clr:hover{background:none;color:#e6edf3}.blist-sel{font:inherit;font-size:.85rem;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:6px;padding:.4rem .5rem}.blist-seg{display:flex;border:1px solid #30363d;border-radius:6px;overflow:hidden}.blist-seg button{background:#0d1117;color:#8b949e;border:none;border-radius:0;padding:.4rem .7rem;font-size:.85rem;white-space:nowrap}.blist-seg button:hover{background:#161b22;color:#e6edf3}.blist-seg button.on,.blist-seg button.on:hover{background:#1f6feb;color:#fff}.blist-chips{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:1rem}.blist-chips .chip{background:#0d1117;color:#8b949e;border:1px solid #30363d;border-radius:999px;padding:.25rem .75rem;font-size:.78rem}.blist-chips .chip:hover{color:#e6edf3;background:#161b22}.blist-chips .chip.on,.blist-chips .chip.on:hover{background:#1f6feb2e;border-color:#1f6feb;color:#79b8ff}.blist-empty{color:#6e7681;font-size:.85rem;text-align:center;padding:2rem;border:1px dashed #30363d;border-radius:8px}.blist-table-wrap{overflow-x:auto}.blist-table{width:100%;min-width:960px;table-layout:fixed;border-collapse:collapse;font-size:.85rem}.blist-table td.c-name,.blist-table td.c-note{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.blist-table .c-note{width:20%}.blist-table th{text-align:left;font-weight:400;font-size:.72rem;color:#8b949e;padding:.45rem .6rem;border-bottom:1px solid #21262d;white-space:nowrap}.blist-table td{padding:.55rem .6rem;border-bottom:1px solid #161b22;vertical-align:middle}.blist-table tbody tr:hover td{background:#12171f}.blist-table tbody tr:hover .blist-act{opacity:1}.blist-table tr.pending td{background:#d299220f}.blist-table .c-pin{width:26px}.blist-table .c-thumb{width:64px}.blist-table .c-id{width:92px}.blist-table .c-rooms{width:40px;text-align:right;color:#8b949e}.blist-table .c-state{width:132px}.blist-table .c-time{width:84px;white-space:nowrap}.blist-table .c-act{width:132px}.blist-table .badge{margin-left:0;margin-right:.3rem}.blist-name{color:#e6edf3;text-decoration:none}.blist-name:hover{color:#79b8ff;text-decoration:underline}.blist-mini{width:56px;height:28px;object-fit:cover;border-radius:3px;display:block;background:#161b22}.blist-mini.empty{border:1px dashed #30363d;background:#0d1117}.blist-star,.blist-cstar{background:none;border:none;padding:0;line-height:1;color:#4d5866;font-size:.95rem}.blist-star:hover,.blist-cstar:hover{background:none;color:#8b949e}.blist-star.on,.blist-star.on:hover,.blist-cstar.on,.blist-cstar.on:hover{color:#fbbf24}.blist-cstar{position:absolute;top:6px;left:8px;z-index:2;font-size:1rem;text-shadow:0 1px 3px #000}.blist-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;color:#8b949e;background:#0d1117;border:1px solid #21262d;border-radius:4px;padding:.05rem .3rem;cursor:pointer}.blist-id:hover{color:#79b8ff;border-color:#30363d}.blist-note{color:#a9b4c2;font-size:.78rem;cursor:text;border-bottom:1px dashed transparent}.blist-note:hover{border-bottom-color:#30363d}.blist-note.empty{color:#3d4553}.blist-note-input{min-width:0;width:100%;padding:.15rem .4rem;font-size:.78rem;background:#0d1117;border-color:#1f6feb}.blist-note-input:focus{outline:none}.blist-note-line{color:#a9b4c2;font-size:.72rem;margin-top:.15rem}.blist-dim{color:#6e7681}.blist-fresh{color:#7ee2a8}.blist-hl{background:#facc1547;color:#ffe08a;border-radius:2px;padding:0 1px}.badge.pending{background:#d2992238;color:#e3b341}.blist-act{opacity:0;transition:opacity .12s ease;white-space:nowrap}.blist-act a,.blist-act button{color:#79b8ff;background:none;border:none;text-decoration:none;font-size:.75rem;padding:0 0 0 .55rem}.blist-act a:hover,.blist-act button:hover{background:none;text-decoration:underline}.blist-act button.del{color:#ff7b7b}.blist-act button:disabled{background:none;color:#6e7681}.blist-tchip{position:absolute;left:6px;top:calc(50% - .9rem);font-size:.7rem;padding:.05rem .45rem;border-radius:999px;background:#010409c7;color:#8b949e}.blist-tchip.fresh{color:#7ee2a8}.blist-card-del{position:absolute;top:8px;right:8px;width:30px;height:30px;padding:0;border-radius:6px;border:1px solid rgba(255,80,80,.4);background:#140a0cc7;color:#ff7b7b;font-size:.8rem;line-height:1;display:grid;place-items:center}.blist-card-del:hover{background:#280e10e6}.blist-card-del:disabled{cursor:wait}.panorama-card.pending{border-color:#d2992273}.blist-modal-back{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#010409b8;display:grid;place-items:center;padding:1rem}.blist-modal{width:100%;max-width:420px;background:#161b22;border:1px solid #30363d;border-radius:10px;padding:1.1rem 1.2rem 1rem}.blist-modal h2{margin:0 0 .9rem;font-size:1rem;font-weight:500}.blist-modal-label{display:block;font-size:.72rem;color:#8b949e;margin-bottom:.3rem}.blist-modal input{width:100%;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8rem;padding:.45rem .6rem;background:#0d1117}.blist-modal input:focus{outline:none;border-color:#1f6feb}.blist-modal-hint{font-size:.72rem;color:#6e7681;margin-top:.45rem}.blist-modal-box{margin-top:.7rem;padding:.55rem .7rem;border-radius:6px;font-size:.78rem}.blist-modal-box .ttl{color:#e6edf3;font-size:.85rem;margin-top:.25rem}.blist-modal-box .sub{color:#8b949e;font-size:.72rem;margin-top:.1rem}.blist-modal-box.ok{background:#2da44e1f;border:1px solid rgba(45,164,78,.35);color:#56d364}.blist-modal-box.warn{background:#d299221f;border:1px solid rgba(210,153,34,.35);color:#e3b341}.blist-modal-box.err{background:#f851491a;border:1px solid rgba(248,81,73,.35);color:#ff7b7b}.blist-modal-foot{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem}.blist-modal-foot button{font-size:.82rem;padding:.4rem .9rem}.blist-modal-foot .ghost{background:none;color:#8b949e}.blist-modal-foot .ghost:hover{background:#21262d;color:#e6edf3}.blist-modal-foot .go{background:#238636}.blist-modal-foot .go:hover{background:#2ea043}.badge.shell{background:#30363d;color:#8b949e}
