:root{--bg: #0b0e13;--panel: rgba(16, 20, 28, .82);--panel-border: rgba(120, 200, 255, .18);--accent: #4fd1ff;--accent-dim: #2b7a99;--text: #dbe6f0;--text-dim: #8aa0b4;--danger: #ff5c7a}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:Segoe UI,system-ui,-apple-system,sans-serif;overflow:hidden}#app{position:fixed;inset:0}#scene{display:block;width:100%;height:100%}#topbar{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.65rem 1rem;background:linear-gradient(180deg,rgba(8,11,16,.85),transparent);pointer-events:none}#topbar .brand{font-weight:700;letter-spacing:.04em;color:var(--text)}#topbar .brand:before{content:"▣ ";color:var(--accent)}#topbar .site{color:var(--text-dim);font-size:.9rem}#toolkit{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem 1rem;background:linear-gradient(0deg,rgba(8,11,16,.9),transparent)}.toolkit-label{color:var(--text-dim);font-size:.72rem;letter-spacing:.18em;font-weight:700}.tool-tray{display:flex;flex-wrap:wrap;gap:.5rem}.tool{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem .8rem;border:1px solid var(--panel-border);border-radius:10px;background:var(--panel);color:var(--text);font-size:.85rem;cursor:pointer;user-select:none;transition:border-color .15s,transform .08s,box-shadow .15s}.tool:hover{border-color:var(--accent-dim)}.tool:active{transform:translateY(1px)}.tool.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 0 18px #4fd1ff40}.tool .ico{font-size:1rem}.status{position:absolute;left:50%;bottom:5.25rem;transform:translate(-50%);max-width:min(680px,90vw);padding:.6rem .9rem;background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;color:var(--text);font-size:.9rem;text-align:center}.status.error{border-color:var(--danger);color:#ffd4dd}#topbar,#toolkit{z-index:10}.status{z-index:1500}#hotspot-layer{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:5}.hotspot{position:absolute;top:0;left:0;pointer-events:auto;display:flex;align-items:center;gap:.4rem;padding:0;background:none;border:none;cursor:pointer;color:var(--text);font:inherit;white-space:nowrap}.hs-dot{width:16px;height:16px;border-radius:50%;background:#4fd1ff40;border:2px solid var(--accent);box-shadow:0 0 0 4px #4fd1ff1f;flex:0 0 auto;transition:transform .12s,background .12s;animation:hs-pulse 2.4s ease-in-out infinite}.hotspot--screen .hs-dot{width:22px;height:22px;border-style:dashed}.hotspot:hover .hs-dot{transform:scale(1.25);background:#4fd1ff80}.hs-label{opacity:0;transform:translate(-4px);transition:opacity .12s,transform .12s;background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;padding:.15rem .45rem;font-size:.78rem}.hotspot:hover .hs-label{opacity:1;transform:translate(0)}@keyframes hs-pulse{0%,to{box-shadow:0 0 0 4px #4fd1ff1f}50%{box-shadow:0 0 0 7px #4fd1ff0a}}.hotspot-editor{position:fixed;top:56px;left:12px;width:260px;z-index:1500;background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;padding:.7rem;font-size:.82rem}.hotspot-editor .he-title{font-weight:700;margin-bottom:.4rem}.hotspot-editor select{width:100%;margin:.2rem 0 .4rem}.hotspot-editor .he-hint{color:var(--text-dim);margin:.2rem 0}.hotspot-editor .he-json{background:#060a0f;border-radius:6px;padding:.4rem;max-height:180px;overflow:auto;font-size:.72rem}.hotspot-editor .he-copy{margin-top:.4rem;width:100%;padding:.35rem;background:var(--accent-dim);color:#fff;border:none;border-radius:6px;cursor:pointer}.window{position:fixed;min-width:320px;min-height:160px;background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;box-shadow:0 18px 50px #0000008c;display:flex;flex-direction:column;overflow:hidden;z-index:1000}.window__bar{display:flex;align-items:center;justify-content:space-between;padding:.5rem .65rem;background:#1e2836f2;border-bottom:1px solid var(--panel-border);cursor:grab;user-select:none;touch-action:none}.window__bar:active{cursor:grabbing}.window__title{font-weight:600;font-size:.9rem}.window__close{background:none;border:none;color:var(--text-dim);font-size:1.1rem;line-height:1;cursor:pointer;padding:0 .25rem}.window__close:hover{color:var(--danger)}.window__body{flex:1;overflow:auto;padding:1rem}.placeholder-window h2{margin:0 0 .5rem}.placeholder-window p{color:var(--text-dim)}.placeholder-window__status{color:var(--accent)!important}.placeholder-window__token{display:inline-block;margin-top:.6rem;font-size:.72rem;color:var(--text-dim)}.dialog-backdrop{position:fixed;inset:0;background:#04070b8c;display:flex;align-items:center;justify-content:center;z-index:2000}.dialog{max-width:min(440px,90vw);background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:1.2rem}.dialog__title{font-weight:700;font-size:1.05rem;margin-bottom:.5rem}.dialog__title:before{content:"ⓘ ";color:var(--accent)}.dialog__body{color:var(--text-dim);line-height:1.5;white-space:pre-line}.dialog__linka{display:inline-block;margin-top:.8rem;color:var(--accent);font-size:.88rem;text-decoration:none;border-bottom:1px dotted var(--accent-dim)}.dialog__linka:hover{color:#7fe0ff}.dialog__close{margin-top:1rem;padding:.4rem .9rem;background:var(--accent-dim);color:#fff;border:none;border-radius:8px;cursor:pointer}.fallback2d{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:4rem 1rem 6rem}.fallback2d__note{max-width:520px;text-align:center;color:var(--text-dim);font-size:.9rem}.fallback2d__svg{width:min(620px,92vw);height:auto}.fallback2d__cap{fill:var(--text-dim);font-size:13px;font-family:inherit}.hs2d{cursor:pointer;outline:none}.hs2d__ring{fill:#4fd1ff38;stroke:var(--accent);stroke-width:2.5;transition:fill .12s,r .12s}.hs2d:hover .hs2d__ring,.hs2d:focus .hs2d__ring{fill:#4fd1ff80}.hs2d__label{fill:var(--text);font-size:13px;font-family:inherit;opacity:0;transition:opacity .12s;paint-order:stroke;stroke:#0b0e13;stroke-width:3px}.hs2d:hover .hs2d__label,.hs2d:focus .hs2d__label{opacity:1}.window__body:has(.kiosk){padding:0}.kiosk{height:100%;display:flex;flex-direction:column;background:#0b1016}.kiosk__topbar{display:flex;align-items:center;justify-content:space-between;padding:.55rem .9rem;background:#11202b;border-bottom:1px solid var(--panel-border)}.kiosk__brand{font-weight:700;letter-spacing:.02em}.kiosk__user{display:inline-flex;align-items:center;gap:.6rem;font-size:.85rem;color:var(--text-dim)}.kiosk__logout{background:none;border:1px solid var(--panel-border);color:var(--text);border-radius:6px;padding:.2rem .5rem;cursor:pointer;font-size:.8rem}.kiosk__logout:hover{border-color:var(--accent-dim)}.kiosk__screen{flex:1;overflow:auto;padding:1rem}.kiosk__loading,.kiosk__error{color:var(--text-dim)}.kiosk__error{color:#ffd4dd}.sw-login{max-width:340px;margin:1.5rem auto;text-align:center}.sw-brand{font-size:1.4rem;font-weight:700}.sw-sub{color:var(--text-dim);font-size:.88rem;margin:.3rem 0 1.2rem}#sw-login-form{display:flex;flex-direction:column;gap:.7rem;text-align:left}#sw-login-form label{display:flex;flex-direction:column;gap:.2rem;font-size:.8rem;color:var(--text-dim)}#sw-login-form input{padding:.5rem;border-radius:8px;border:1px solid var(--panel-border);background:#060a0f;color:var(--text);font-size:.95rem}#sw-login-form button{margin-top:.3rem;padding:.55rem;border:none;border-radius:8px;background:var(--accent-dim);color:#fff;font-weight:600;cursor:pointer}#sw-login-form button:hover{background:#3690b3}.sw-error{color:#ffd4dd;font-size:.85rem}.sw-foot{margin-top:1.4rem;color:var(--text-dim);font-size:.72rem}.kiosk__banner{background:#4fd1ff1a;border:1px solid var(--accent-dim);border-radius:8px;padding:.6rem .75rem;font-size:.85rem;margin-bottom:.9rem}.kiosk__banner code{color:var(--accent);font-size:.82rem}.kiosk__row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.kiosk__row h3{margin:.2rem 0;font-size:1rem}.kiosk__link{background:none;border:none;color:var(--accent);cursor:pointer;font-size:.85rem}.kiosk__patients{display:grid;gap:.5rem;margin-top:.5rem}.kiosk__patient{display:flex;flex-direction:column;gap:.15rem;text-align:left;padding:.6rem .75rem;border:1px solid var(--panel-border);border-radius:8px;background:var(--panel);color:var(--text);cursor:pointer}.kiosk__patient:hover{border-color:var(--accent-dim)}.kiosk__pname{font-weight:600}.kiosk__pmeta{color:var(--text-dim);font-size:.78rem;font-weight:400}.kiosk__pstudy{color:var(--text-dim);font-size:.82rem}.kiosk__study{color:var(--text-dim);font-size:.85rem;margin:.2rem 0 .6rem}.kiosk__canvas{width:100%;height:260px;display:block;border-radius:10px;border:1px solid var(--panel-border);background:#05090d}.kiosk__scanctl{margin:.7rem 0}.kiosk__primary{padding:.5rem 1rem;border:none;border-radius:8px;background:var(--accent-dim);color:#fff;font-weight:600;cursor:pointer}.kiosk__primary:disabled{opacity:.6;cursor:default}.kiosk__result{display:flex;flex-direction:column;gap:.2rem;padding:.6rem .75rem;border-radius:8px;border:1px solid var(--panel-border)}.kiosk__result--ok{border-color:#3fbf7f}.kiosk__result--ok strong{color:#6fe0a0}.kiosk__result--alert{border-color:var(--danger)}.kiosk__result--alert strong{color:#ff8099}.kiosk__result--err{border-color:var(--danger);color:#ffd4dd}.kiosk__result span{color:var(--text-dim);font-size:.85rem}.kiosk__about dl{display:grid;grid-template-columns:auto 1fr;gap:.3rem 1rem;font-size:.88rem}.kiosk__about dt{color:var(--text-dim)}.window__body:has(.terminal-host){padding:0}.terminal-host{height:100%;width:100%;background:#0a0e13;padding:6px 8px;box-sizing:border-box}.terminal-host .xterm{height:100%}.sw-status{margin:.6rem 0 .2rem;padding:.35rem .5rem;border:1px dashed var(--panel-border);border-radius:6px;font-size:.78rem;color:var(--text-dim);text-align:center}.sw-status b{color:var(--text);letter-spacing:.04em}.window__body:has(.extdisp){padding:0}.extdisp{height:100%;box-sizing:border-box;padding:1rem 1.2rem;background:radial-gradient(circle at 50% 0%,#07140f,#050a07 70%);color:#8dffc2;font-family:Cascadia Mono,Consolas,monospace;font-size:.85rem;position:relative;overflow:hidden}.extdisp:after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(to bottom,#0000 0 2px,#0000002e 3px)}.extdisp__loading,.extdisp__nosignal{color:#6ad0a0}.extdisp__nosignal{font-size:1.4rem;letter-spacing:.3em;text-align:center;margin-top:3rem}.extdisp__hdr{color:#c8ffe6;border-bottom:1px solid rgba(141,255,194,.3);padding-bottom:.4rem}.extdisp__note{color:#ffcf6a;font-size:.72rem;margin:.5rem 0 .8rem;letter-spacing:.05em}.extdisp__rec{display:grid;grid-template-columns:auto 1fr;gap:.25rem 1.2rem;margin:0}.extdisp__rec dt{color:#5fae89}.extdisp__rec dd{margin:0;color:#d6ffe9}.extdisp__diag{margin-top:1rem;padding-top:.6rem;border-top:1px solid rgba(141,255,194,.3);color:#ffe08a;word-break:break-all}.extdisp__ctl{display:flex;align-items:center;justify-content:space-between;margin:.5rem 0 .7rem;color:#9fe0bd;font-size:.78rem}.extdisp__btns button{background:#8dffc21f;border:1px solid rgba(141,255,194,.4);color:#c8ffe6;border-radius:6px;padding:.15rem .5rem;margin-left:.3rem;cursor:pointer;font-family:inherit;font-size:.76rem}.extdisp__btns button:disabled{opacity:.4;cursor:default}.extdisp__note--raw{color:#ff9a6a}.extdisp__sys{margin:.6rem 0 0;color:#5fae89;font-size:.76rem;white-space:pre-wrap}.extdisp__hint{margin-top:.8rem;color:#ffcf6a;font-size:.76rem}.hid{display:flex;flex-direction:column;height:100%;gap:.6rem}.hid__intro{color:var(--text-dim);font-size:.85rem;margin:0}.hid__intro code{color:var(--accent)}.hid__editor{flex:0 0 auto;height:150px;resize:vertical;background:#060a0f;color:#ffe08a;border:1px solid var(--panel-border);border-radius:8px;padding:.6rem;font-family:Cascadia Mono,Consolas,monospace;font-size:.82rem;line-height:1.4}.hid__ctl{display:flex}.hid__run{padding:.45rem .9rem;background:var(--accent-dim);color:#fff;border:none;border-radius:8px;cursor:pointer;font-weight:600}.hid__run:disabled{opacity:.6;cursor:default}.hid__out{flex:1;margin:0;overflow:auto;background:#05090d;border:1px solid var(--panel-border);border-radius:8px;padding:.6rem;font-family:Cascadia Mono,Consolas,monospace;font-size:.82rem;color:#8dffc2;white-space:pre-wrap}.ble{display:flex;flex-direction:column;height:100%;gap:.6rem}.ble__bar{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.ble__stat{color:var(--text-dim);font-size:.82rem}.ble__stat b{color:var(--danger)}.ble__export{padding:.4rem .7rem;background:var(--accent-dim);color:#fff;border:none;border-radius:8px;cursor:pointer;font-size:.82rem}.ble__export:disabled{opacity:.5;cursor:default}.ble__stream{flex:1;margin:0;overflow:auto;background:#05090d;border:1px solid var(--panel-border);border-radius:8px;padding:.6rem;font-family:Cascadia Mono,Consolas,monospace;font-size:.78rem;color:#7fd6a0;white-space:pre}.ble__stream::-webkit-scrollbar{width:10px}
