:root{--bg: #0b0f14;--bg2: #111823;--bg3: #182231;--border: #223047;--text: #dbe4f0;--muted: #7d8ca1;--accent: #38bdf8;--accent2: #6366f1;--danger: #f87171;--ok: #34d399;--radius: 10px}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--text);font:15px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-tap-highlight-color:transparent}#root{height:100%}h1,h2,h3{margin:0 0 .5rem;font-weight:600}h2{font-size:1.1rem}h3{font-size:1rem}a{color:var(--accent)}.muted{color:var(--muted)}.small{font-size:.82rem}.error{color:var(--danger);margin:.3rem 0}.center{height:100%;display:flex;align-items:center;justify-content:center}.center-text{text-align:center;padding:2rem}.row{display:flex;gap:.6rem;align-items:flex-end}.row.wrap{flex-wrap:wrap;align-items:center}.banner{background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:var(--radius);padding:.5rem .8rem;font-size:.88rem}.btn{background:var(--bg3);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .9rem;font-size:.92rem;cursor:pointer;transition:background .15s,border-color .15s}.btn:hover:not(:disabled){background:#1e2a3c;border-color:#31435f}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:linear-gradient(135deg,var(--accent),var(--accent2));border:none;color:#06111c;font-weight:600}.btn.primary:hover:not(:disabled){filter:brightness(1.1);background:linear-gradient(135deg,var(--accent),var(--accent2))}.btn.ghost{background:transparent;border-color:transparent;color:var(--muted)}.btn.ghost:hover:not(:disabled){color:var(--text);background:var(--bg3)}.btn.danger{color:var(--danger)}.btn.small{padding:.3rem .6rem;font-size:.82rem}.btn.icon{padding:.5rem .7rem}input,select{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .7rem;font-size:.95rem;width:100%}input:focus,select:focus{outline:1px solid var(--accent);border-color:var(--accent)}input[type=checkbox]{width:auto;accent-color:var(--accent)}input[type=number]{width:7rem}label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:var(--muted)}progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:6px;border:none;border-radius:3px;background:var(--bg3);overflow:hidden}progress::-webkit-progress-bar{background:var(--bg3);border-radius:3px}progress::-webkit-progress-value{background:linear-gradient(90deg,var(--accent),var(--accent2));border-radius:3px}progress::-moz-progress-bar{background:var(--accent);border-radius:3px}.card{background:var(--bg2);border:1px solid var(--border);border-radius:14px;padding:1.1rem}.shell{height:100%;height:100dvh;display:flex}.nav{display:flex;flex-direction:column;gap:.2rem;padding:.8rem .5rem;border-right:1px solid var(--border);background:var(--bg2);width:130px;flex-shrink:0}.nav-brand{display:flex;align-items:center;gap:.4rem;padding:.3rem .6rem 1rem}.brand-mark{font-weight:700;color:var(--accent);font-family:ui-monospace,monospace}.brand-mark.big{font-size:1.6rem}.brand-name{font-weight:700}.conn-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);margin-left:auto}.conn-dot.on{background:var(--ok)}.nav-btn{display:flex;align-items:center;gap:.55rem;background:none;border:none;color:var(--muted);padding:.55rem .6rem;border-radius:var(--radius);font-size:.92rem;cursor:pointer;text-align:left}.nav-btn:hover,.nav-btn.active{color:var(--text);background:var(--bg3)}.nav-spacer{flex:1}.nav-me{border-top:1px solid var(--border);padding-top:.5rem}.nav-user{display:block;padding:0 .6rem .3rem;font-size:.85rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis}.main{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden}.login-card{width:min(360px,92vw);display:flex;flex-direction:column;gap:.8rem}.login-brand{display:flex;align-items:baseline;gap:.6rem}.chat{flex:1;display:flex;min-height:0}.chat-rooms{width:210px;flex-shrink:0;border-right:1px solid var(--border);padding:.9rem .6rem;overflow-y:auto;background:var(--bg)}.rooms-head{display:flex;align-items:center;justify-content:space-between;padding:0 .4rem .4rem}.rooms-sub{color:var(--muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;padding:.8rem .4rem .3rem}.room-btn{display:flex;align-items:center;gap:.45rem;width:100%;background:none;border:none;color:var(--text);padding:.45rem .6rem;border-radius:var(--radius);cursor:pointer;font-size:.92rem;text-align:left}.room-btn:hover,.room-btn.active{background:var(--bg3)}.presence{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;display:inline-block}.presence.on{background:var(--ok)}.chat-main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.chat-head{display:flex;align-items:center;gap:.6rem;padding:.7rem 1rem;border-bottom:1px solid var(--border)}.chat-head h2{margin:0}.rooms-toggle{display:none}.msg-list{flex:1;overflow-y:auto;padding:.8rem 1rem;display:flex;flex-direction:column;gap:.55rem}.load-older{align-self:center}.msg{max-width:78%;align-self:flex-start}.msg.mine{align-self:flex-end}.msg-meta{display:flex;gap:.5rem;align-items:baseline;padding:0 .2rem .15rem}.msg.mine .msg-meta{flex-direction:row-reverse}.msg-user{font-size:.8rem;font-weight:600;color:var(--accent)}.msg.mine .msg-user{color:var(--accent2)}.msg-time{font-size:.72rem;color:var(--muted)}.msg-body{background:var(--bg2);border:1px solid var(--border);border-radius:4px 14px 14px;padding:.5rem .75rem;white-space:pre-wrap;word-break:break-word}.msg.mine .msg-body{background:#16233a;border-top-left-radius:14px;border-top-right-radius:4px}.msg-img{max-width:min(320px,70vw);max-height:320px;border-radius:10px;display:block;margin-top:.2rem}.chip{display:inline-flex;gap:.4rem;align-items:center;background:var(--bg2);border:1px solid var(--border);border-radius:999px;padding:.35rem .8rem;text-decoration:none;color:var(--text);font-size:.88rem;margin-top:.2rem;word-break:break-all}.typing{font-size:.8rem;padding:0 .2rem}.composer{display:flex;gap:.5rem;padding:.7rem 1rem calc(.7rem + env(safe-area-inset-bottom));border-top:1px solid var(--border)}.composer-input{flex:1}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:30;padding:1rem}.modal{width:min(420px,94vw);display:flex;flex-direction:column;gap:.7rem;max-height:85vh;overflow-y:auto}.files,.jobs,.admin{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.8rem}.files-head{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.files-head h2{margin:0;flex:1}.quota{display:flex;flex-direction:column;gap:.2rem;width:180px}.vault-bar{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .8rem}.vault-open{color:var(--ok)}.priv-toggle{flex-direction:row;align-items:center;gap:.35rem;color:var(--text);font-size:.9rem;cursor:pointer;-webkit-user-select:none;user-select:none}.file-row.private .file-name{color:var(--accent)}.dropzone{border:1.5px dashed var(--border);border-radius:var(--radius);padding:.9rem;text-align:center;color:var(--muted);font-size:.88rem}.dropzone.drag{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.upload-row{display:flex;align-items:center;gap:.8rem;font-size:.88rem}.upload-row progress{width:160px}.sel-bar{display:flex;align-items:center;gap:.6rem;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .8rem;position:sticky;top:0;z-index:5}.file-list{display:flex;flex-direction:column}.file-row{display:flex;align-items:center;gap:.7rem;padding:.55rem .3rem;border-bottom:1px solid var(--border)}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-actions{display:flex;gap:.35rem}.job-row{display:flex;align-items:center;gap:.8rem;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:.65rem .9rem}.job-icon{font-size:1.1rem;width:1.4rem;text-align:center}.status-done .job-icon{color:var(--ok)}.status-failed .job-icon{color:var(--danger)}.status-running .job-icon{color:var(--accent)}.job-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.2rem}.admin{gap:1rem;max-width:720px}.invite-code{margin-top:.6rem;display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.invite-code code{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:.35rem .6rem;font-size:.85rem;word-break:break-all}.table{margin-top:.7rem}.table-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.4rem 0;border-bottom:1px solid var(--border);font-size:.88rem}.user-row{display:flex;align-items:center;gap:.8rem;padding:.5rem 0;border-bottom:1px solid var(--border);flex-wrap:wrap}.quota-edit{flex-direction:row;align-items:center;gap:.4rem}@media(max-width:700px){.shell{flex-direction:column-reverse}.nav{flex-direction:row;width:100%;border-right:none;border-top:1px solid var(--border);padding:.3rem .4rem calc(.3rem + env(safe-area-inset-bottom));align-items:center}.nav-brand,.nav-user{display:none}.nav-btn{flex:1;flex-direction:column;gap:.1rem;padding:.35rem .2rem;font-size:.7rem;align-items:center}.nav-icon{font-size:1.15rem}.nav-spacer{display:none}.nav-me{border-top:none;padding-top:0;flex:1;display:flex}.nav-me .nav-btn{width:100%}.chat-rooms{position:fixed;top:0;right:30%;bottom:0;left:0;z-index:20;transform:translate(-100%);transition:transform .2s;border-right:1px solid var(--border);background:var(--bg2);padding-top:1rem}.chat-rooms.open{transform:none;box-shadow:0 0 40px #0009}.rooms-toggle{display:block}.msg{max-width:88%}.quota{width:130px}}
