*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden}body{background:#111;color:#eee;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-user-select:none;user-select:none;touch-action:none;overscroll-behavior:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}canvas{display:block;touch-action:none}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:.75rem;pointer-events:none;z-index:10}.overlay.interactive{pointer-events:auto}.loading{font-size:.95rem;letter-spacing:.04em;opacity:.85}.bar{width:min(260px,60vw);height:3px;background:#333;border-radius:2px;overflow:hidden}.bar>span{display:block;height:100%;background:#eee;transition:width .2s ease}.hint{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));transform:translate(-50%);font-size:.8rem;opacity:.6;z-index:5;text-align:center;pointer-events:none}.prompt{cursor:pointer;background:#08080a8c}.card{text-align:center;padding:2rem 2.5rem;border:1px solid rgba(255,255,255,.12);border-radius:14px;background:#14141899;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.card h1{font-size:1.4rem;font-weight:600;margin-bottom:.5rem}.card p{font-size:1rem;opacity:.85}.card .sub{font-size:.8rem;opacity:.55;margin-top:.75rem}.reticle{position:fixed;left:50%;top:50%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;background:#ffffff59;box-shadow:0 0 0 1px #00000040;z-index:5;pointer-events:none;transition:transform .15s ease,background .15s ease}.reticle.active{background:#ffffffe6;transform:scale(1.5)}.caption{position:fixed;left:50%;bottom:calc(56px + env(safe-area-inset-bottom));transform:translate(-50%,8px);min-width:200px;max-width:80vw;padding:.7rem 1.1rem;text-align:center;background:#101014b8;border:1px solid rgba(255,255,255,.1);border-radius:10px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;z-index:6}.caption.show{opacity:1;transform:translate(-50%)}.caption-title{font-size:1rem;font-weight:600}.caption-artist{font-size:.8rem;opacity:.6;margin-top:.15rem}.reticle.hang{width:10px;height:10px;margin:-5px 0 0 -5px;background:#39ff9e;box-shadow:0 0 0 1px #0006}.hangbar{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translate(-50%);z-index:16;padding:.5rem .9rem;font-size:.8rem;white-space:nowrap;color:#eee;background:#101014c7;border:1px solid rgba(57,255,158,.4);border-radius:9px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none}.hangbar strong{color:#39ff9e}.picker{position:fixed;left:50%;top:calc(14px + env(safe-area-inset-top));transform:translate(-50%);z-index:16;max-width:92vw;display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:auto}.picker-tray{display:flex;gap:6px;padding:6px;max-width:92vw;overflow-x:auto;background:#101014d1;border:1px solid rgba(57,255,158,.4);border-radius:10px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.picker-add{flex:0 0 auto;display:flex;align-items:center;padding:0 12px;height:56px;font-size:.8rem;color:#39ff9e;border:1px dashed rgba(57,255,158,.6);border-radius:7px;cursor:pointer;white-space:nowrap}.thumb{position:relative;flex:0 0 auto;width:76px;height:56px;padding:0;border:2px solid transparent;border-radius:7px;background:#222;color:#aaa;font-size:.7rem;cursor:pointer;overflow:hidden}.thumb.blank{display:flex;align-items:center;justify-content:center;background:#ffffff0f}.thumb img{width:100%;height:100%;object-fit:cover;display:block}.thumb.on{border-color:#39ff9e}.thumb-num{position:absolute;left:3px;top:3px;min-width:14px;padding:0 3px;font-size:.65rem;text-align:center;color:#fff;background:#0009;border-radius:4px}.thumb-x{position:absolute;right:2px;top:1px;color:#fff;background:#0000008c;border-radius:50%;width:16px;height:16px;line-height:15px;text-align:center;font-size:.8rem}.thumb-x:hover{background:#dc3c3cd9}.picker-orient{display:flex;align-items:center;gap:6px;font-size:.78rem;color:#ccc;background:#101014d1;border:1px solid rgba(255,255,255,.12);border-radius:9px;padding:5px 10px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.chip{font:inherit;font-size:.78rem;color:#ddd;background:#ffffff14;border:1px solid rgba(255,255,255,.16);border-radius:7px;padding:3px 10px;cursor:pointer}.chip.on{color:#0c0c0e;background:#39ff9e;border-color:#39ff9e}.dashlink{position:fixed;top:calc(16px + env(safe-area-inset-top));right:calc(16px + env(safe-area-inset-right));z-index:15;padding:.45rem .8rem;font:inherit;font-size:.85rem;color:#eee;background:#101014b8;border:1px solid rgba(255,255,255,.18);border-radius:9px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer}.dashlink:hover{background:#202028d1}.dash{max-width:880px;margin:0 auto;padding:28px 20px 80px;color:#e8e8ea;overflow-y:auto;height:100%}.dash-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}.dash-head h1{font-size:1.7rem;font-weight:700}.dash-head p{opacity:.6;margin-top:2px}.dash-actions{display:flex;gap:8px;flex-wrap:wrap}.dash-actions button,.dash-actions .btn{font:inherit;font-size:.85rem;color:#e8e8ea;background:#ffffff14;border:1px solid rgba(255,255,255,.16);border-radius:8px;padding:6px 12px;cursor:pointer}.dash-actions button:hover,.dash-actions .btn:hover{background:#ffffff24}.dash-actions .danger:hover{background:#c83c3cb3;border-color:#c83c3ccc}.dash-card{background:#ffffff0a;border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:16px 18px;margin-bottom:16px}.dash-card h2{font-size:1rem;font-weight:600;margin-bottom:12px}.dash-card h2 .dash-hint{font-weight:400;font-size:.78rem;opacity:.5;margin-left:8px}.dash-card>label{display:flex;flex-direction:column;gap:4px;font-size:.78rem;opacity:.7;margin-bottom:10px}.dash input,.dash textarea,.dash select{font:inherit;font-size:.9rem;color:#fff;background:#00000040;border:1px solid rgba(255,255,255,.16);border-radius:7px;padding:7px 9px}.dash textarea{resize:vertical}.dash-hint{opacity:.55;font-size:.8rem}.room{border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:#00000026}.room.soon{opacity:.78}.room-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.room-name{flex:1 1 160px;font-weight:600}.room-count{font-size:.78rem;opacity:.55;min-width:64px}.room-top button{font:inherit;font-size:.8rem;color:#e8e8ea;background:#ffffff14;border:1px solid rgba(255,255,255,.16);border-radius:7px;padding:5px 10px;cursor:pointer}.room-top button:hover{background:#39ff9e2e;border-color:#39ff9e66}.room-art{margin-top:10px;display:flex;flex-direction:column;gap:8px}.art-row{display:flex;align-items:center;gap:8px}.art-row input{flex:1}.art-thumb{width:52px;height:40px;flex:0 0 auto;border-radius:5px;overflow:hidden;background:#ffffff14;display:flex;align-items:center;justify-content:center;font-size:.65rem;opacity:.6}.art-thumb img{width:100%;height:100%;object-fit:cover}.art-row .danger{font:inherit;font-size:.78rem;color:#e8e8ea;background:#ffffff14;border:1px solid rgba(255,255,255,.16);border-radius:7px;padding:5px 9px;cursor:pointer}.art-row .danger:hover{background:#c83c3cb3}.dash-foot{opacity:.45;font-size:.8rem;margin-top:18px;text-align:center}.fade{position:fixed;top:0;right:0;bottom:0;left:0;background:#000;z-index:20;pointer-events:none;transition:opacity .28s ease}.backbtn{position:fixed;top:calc(16px + env(safe-area-inset-top));left:calc(16px + env(safe-area-inset-left));z-index:15;padding:.5rem .9rem;font:inherit;font-size:.9rem;color:#eee;background:#101014b8;border:1px solid rgba(255,255,255,.18);border-radius:9px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer}.backbtn:hover{background:#202028d1}.joy-base,.joy-knob{position:fixed;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:6}.joy-base{width:120px;height:120px;border:2px solid rgba(255,255,255,.25);background:#ffffff0d}.joy-knob{width:54px;height:54px;background:#ffffff59}.deepzoom{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#0b0b0d;touch-action:none;overscroll-behavior:none}.deepzoom__view{position:absolute;top:0;right:0;bottom:0;left:0}.deepzoom__close{position:fixed;top:calc(16px + env(safe-area-inset-top));right:calc(16px + env(safe-area-inset-right));z-index:41;width:44px;height:44px;font:inherit;font-size:1.2rem;line-height:1;color:#eee;background:#101014b8;border:1px solid rgba(255,255,255,.18);border-radius:50%;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer}.deepzoom__close:hover{background:#202028d1}.deepzoom__cap{position:fixed;left:calc(16px + env(safe-area-inset-left));bottom:calc(16px + env(safe-area-inset-bottom));z-index:41;max-width:min(520px,80vw);padding:.6rem .9rem;color:#eee;background:#101014a8;border:1px solid rgba(255,255,255,.14);border-radius:10px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none}.deepzoom__title{font-weight:600}.deepzoom__artist{opacity:.7;margin-left:.5rem}.deepzoom__note{margin:.35rem 0 0;font-size:.82rem;opacity:.7;line-height:1.4}
