:root{
  --bg:#0e1117; --panel:#161b22; --panel2:#1c2230; --border:#2a3140;
  --text:#e6edf3; --muted:#8b949e; --accent:#4c8dff; --accent2:#7c5cff;
  --user:#1f6feb22; --tool:#1a2432; --ok:#2ea043; --warn:#d29922;
}
:root[data-theme="light"]{
  --bg:#f6f8fa; --panel:#ffffff; --panel2:#eef1f5; --border:#d5dbe3;
  --text:#1b2430; --muted:#5b6672; --accent:#2f6feb; --accent2:#7c5cff;
  --user:#2f6feb18; --tool:#eef2f8; --ok:#1a7f37; --warn:#9a6700;
}
:root[data-theme="light"] .msg .body pre,:root[data-theme="light"] .msg .body code,
:root[data-theme="light"] .doc-body pre,:root[data-theme="light"] .tool .result pre,
:root[data-theme="light"] .result-box .transcript{background:#f0f3f7}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;display:flex;flex-direction:column;height:100vh;overflow:hidden}
button{cursor:pointer;font:inherit}
select,textarea,input{font:inherit;color:var(--text);background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:6px 8px}
select:focus,textarea:focus,input:focus{outline:1px solid var(--accent)}

.topbar{flex:0 0 auto;position:sticky;top:0;z-index:15;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 14px;background:var(--panel);border-bottom:1px solid var(--border);box-shadow:0 1px 6px #0003}
.brand{font-weight:700;font-size:16px;white-space:nowrap;flex:0 0 auto}
.brand-name{background:linear-gradient(90deg,var(--accent),var(--accent2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
@media(max-width:720px){.brand-name{display:none}}
.controls{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}
.controls::-webkit-scrollbar{height:5px}
.grp{display:flex;align-items:center;gap:3px;padding-right:8px;border-right:1px solid var(--border);flex:0 0 auto}
.grp.last{border-right:none;padding-right:0}
.badge{background:var(--panel2);border:1px solid var(--border);border-radius:999px;padding:3px 10px;font-size:11px;color:var(--muted);white-space:nowrap}
.ghost{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:8px;padding:4px 10px}
.ghost:hover{border-color:var(--accent)}
.ic{background:transparent;border:1px solid transparent;color:var(--text);border-radius:8px;width:34px;height:32px;display:inline-flex;align-items:center;justify-content:center;font-size:15px;flex:0 0 auto;transition:background .12s,border-color .12s}
.ic:hover{background:var(--panel2);border-color:var(--border)}
.ic:active{transform:translateY(1px)}
.model-sel{max-width:190px}
.topbar select{border-radius:8px;padding:5px 8px;max-width:200px}

.layout{flex:1;min-height:0;display:grid;grid-template-columns:var(--left-w,240px) 1fr var(--right-w,340px)}
.layout.no-left{grid-template-columns:1fr var(--right-w,340px)}
.layout.no-left .chats-bar{display:none}
.layout.no-right{grid-template-columns:var(--left-w,240px) 1fr}
.layout.no-right .sidebar{display:none}
.layout.no-left.no-right{grid-template-columns:1fr}
/* drag handle to resize the chat bar */
.chats-bar{position:relative}
.resizer{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:5}
.resizer:hover,.resizer.drag{background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.6}
.layout.no-left.no-right .chats-bar,.layout.no-left.no-right .sidebar{display:none}
.chat{display:flex;flex-direction:column;min-width:0;min-height:0}
.chats-bar,.sidebar{min-height:0}

.chats-bar{border-right:1px solid var(--border);background:var(--panel);display:flex;flex-direction:column;min-height:0}
.chat-list{flex:1;overflow-y:auto;padding:6px 8px}
.chat-item{display:flex;align-items:center;gap:2px;padding:6px 8px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--text)}
.chat-item:hover{background:var(--panel2)}
.chat-item.active{background:var(--panel2);outline:1px solid var(--accent)}
.chat-item .t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-item .time{font-size:10px;color:var(--muted)}
/* compact per-chat action buttons; hidden until hover to reduce clutter */
.chat-item .excl,.chat-item .del{border:none;background:transparent;color:var(--muted);font-size:11px;line-height:1;padding:2px;width:20px;height:20px;cursor:pointer;opacity:0;flex:0 0 auto}
.chat-item:hover .excl,.chat-item:hover .del{opacity:.7}
.chat-item .excl:hover,.chat-item .del:hover{opacity:1}
.chat-item .del:hover{color:#f85149}
.chat-item .excl.on{opacity:1}
.chat-list .empty{color:var(--muted);font-size:12px;padding:10px}
.chat-group-head{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:8px 8px 2px;margin-top:4px}

/* "AI is working" indicator */
.working{display:flex;align-items:center;gap:8px;padding:8px 20px;color:var(--muted);font-size:13px}
.working.hidden{display:none}
.slash-menu{margin:0 16px;background:var(--panel2);border:1px solid var(--border);border-radius:10px;overflow:hidden;max-height:240px;overflow-y:auto}
.slash-menu.hidden{display:none}
.slash-item{padding:8px 12px;cursor:pointer;font-size:13px;display:flex;gap:8px}
.slash-item:hover,.slash-item.sel{background:var(--tool)}
.slash-item .cmd{color:var(--accent);font-family:ui-monospace,monospace;flex:0 0 auto}
.slash-item .d{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.spinner{width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.dots::after{content:'';animation:dots 1.4s steps(4,end) infinite}
@keyframes dots{0%{content:''}25%{content:'.'}50%{content:'..'}75%{content:'...'}}
.messages{flex:1;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:14px}
.msg{max-width:820px;width:fit-content;padding:12px 15px;border-radius:14px;border:1px solid var(--border);background:var(--panel);box-shadow:0 1px 2px #0000000d}
.msg.user{align-self:flex-end;background:var(--user);border-color:#1f6feb55;border-bottom-right-radius:4px}
.msg.assistant{border-bottom-left-radius:4px}
.msg.assistant{align-self:flex-start}
.msg .role{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:4px}
.msg .body{white-space:normal;word-wrap:break-word}
.msg .body p{margin:.4em 0}
.msg .body pre{background:#0b0f16;border:1px solid var(--border);border-radius:8px;padding:10px;overflow-x:auto}
.msg .body code{background:#0b0f16;padding:1px 5px;border-radius:4px;font-size:13px}
.msg .body pre code{background:none;padding:0}
.msg .body a{color:var(--accent)}

.regen{margin-top:8px;background:transparent;border:1px solid var(--border);color:var(--accent);border-radius:8px;padding:5px 12px;font-size:13px}
.regen:hover{border-color:var(--accent);background:var(--panel2)}
.moreinfo{margin:2px 0;font-size:13px}
.moreinfo>summary{cursor:pointer;color:var(--accent2);list-style:none}
.moreinfo>summary::-webkit-details-marker{display:none}
.moreinfo-body{padding:8px 0 2px}
.moreinfo-body b{display:block;margin:8px 0 4px;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.03em}
.moreinfo-body pre{background:#0b0f16;border:1px solid var(--border);border-radius:8px;padding:10px;max-height:260px;overflow:auto;white-space:pre-wrap;font-size:12px}
.tool-line{max-width:820px;align-self:flex-start;font-family:ui-monospace,monospace;font-size:12px;color:var(--muted);background:var(--tool);border:1px solid var(--border);border-radius:8px;padding:6px 10px;margin:2px 0;overflow-x:auto;white-space:nowrap}
.tool-line.call{color:var(--accent)}
.reasoning{margin:6px 0;font-size:13px;color:var(--muted)}
.reasoning summary{cursor:pointer;color:var(--accent2)}
.reasoning .content{white-space:pre-wrap;padding:6px 0 0 6px;border-left:2px solid var(--border)}

.tool{margin:8px 0;border:1px solid var(--border);border-radius:10px;background:var(--tool);overflow:hidden}
.tool .head{display:flex;align-items:center;gap:8px;padding:7px 10px;font-size:13px}
.tool .icon{font-size:14px}
.tool .name{font-weight:600}
.tool.sub .name::before{content:"⤷ ";color:var(--accent2)}
.tool .args{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:520px}
.tool .result{padding:0 10px 8px;font-size:12px;color:var(--muted)}
.tool .result pre{margin:4px 0 0;max-height:160px;overflow:auto;background:#0b0f16;border:1px solid var(--border);border-radius:6px;padding:8px}
.tool .result a.dl{display:inline-block;margin:4px 8px 4px 0;padding:5px 10px;background:var(--accent);color:#fff;border-radius:6px;font-size:12px;text-decoration:none}
.tool-img{display:block;max-width:320px;max-height:320px;border-radius:8px;border:1px solid var(--border);margin:6px 0}
.tool .status{margin-left:auto;font-size:11px;color:var(--muted)}
.tool .status.ok{color:var(--ok)} .tool .status.err{color:#f85149}

.composer{display:flex;gap:10px;padding:14px 16px;border-top:1px solid var(--border);background:var(--panel)}
.composer textarea{flex:1;resize:none;max-height:180px}
.composer button{background:var(--accent);border:none;color:#fff;border-radius:8px;padding:0 20px;font-weight:600}
.composer button:disabled{opacity:.5;cursor:default}
.composer button.stop{background:#b3261e}
.attach-btn{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:8px;padding:0 12px}
.attach-btn:hover{border-color:var(--accent)}
.attach-btn.hidden{display:none}
.attach-preview{display:flex;gap:8px;flex-wrap:wrap;padding:0 16px}
.attach-preview .chip{position:relative}
.attach-preview img{height:56px;border-radius:6px;border:1px solid var(--border)}
.attach-preview .x{position:absolute;top:-6px;right:-6px;background:#b3261e;color:#fff;border:none;border-radius:50%;width:18px;height:18px;font-size:11px;cursor:pointer}
.msg-img{display:block;max-width:260px;max-height:260px;border-radius:8px;border:1px solid var(--border);margin-top:6px}
.ctx-meter{display:flex;align-items:center;gap:8px;padding:4px 16px;font-size:11px;color:var(--muted)}
.ctx-meter.hidden{display:none}
.ctx-meter .ctx-bar{flex:1;height:4px;border-radius:3px;background:var(--border);overflow:hidden}
.ctx-meter .ctx-bar i{display:block;height:100%;width:0;background:var(--accent);transition:width .3s}
.ctx-meter.warn .ctx-bar i{background:#e0913a}
.ctx-meter.warn{color:#e0913a}
.ctx-meter .ctx-label{white-space:nowrap}
.ctx-note{margin:0 0 8px;padding:8px 10px;border-radius:8px;background:rgba(224,145,58,.12);border:1px solid rgba(224,145,58,.4);color:#e0913a;font-size:12px}

.sidebar{border-left:1px solid var(--border);background:var(--panel);display:flex;flex-direction:column;min-height:0}
.side-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border)}
.wiki-stats{padding:8px 14px;color:var(--muted);font-size:12px}
.wiki-search{margin:6px 14px;padding:6px 8px}
.wiki-tree{flex:1;overflow-y:auto;padding:6px 8px 16px}
.node{padding:3px 6px;border-radius:6px;font-size:13px;cursor:default}
.node.doc{cursor:pointer;display:flex;gap:6px;align-items:baseline}
.node.doc:hover{background:var(--panel2)}
.node .type{font-size:10px;color:var(--accent2);border:1px solid var(--border);border-radius:4px;padding:0 4px}
.node.dir{color:var(--muted);font-weight:600;margin-top:6px;cursor:pointer;user-select:none}
.node.dir .caret{display:inline-block;width:12px;font-size:10px;color:var(--accent2)}
.children{margin-left:12px;border-left:1px solid var(--border);padding-left:6px}

.modal{position:fixed;inset:0;background:#000a;display:flex;align-items:center;justify-content:center;padding:24px;z-index:10}
/* Not logged in: hide the whole app shell so nav/chat never leak behind login. */
body.gated > header, body.gated > main{display:none !important}
body.gated #loginOverlay{background:var(--bg)}
.modal.hidden{display:none}
.modal-box{background:var(--panel);border:1px solid var(--border);border-radius:14px;max-width:820px;width:100%;max-height:85vh;display:flex;flex-direction:column}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600}
.doc-body{overflow-y:auto;padding:16px 20px}
.doc-body pre{background:#0b0f16;border:1px solid var(--border);border-radius:8px;padding:10px;overflow-x:auto}
.oc-intro p{margin:0 0 10px}
.oc-intro .oc-step{margin-top:16px}
.oc-cmd{display:flex;align-items:center;gap:8px;background:#0b0f16;border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin:6px 0}
.oc-cmd code{flex:1;overflow-x:auto;white-space:nowrap;font-size:13px;color:#e6edf3}
.oc-cmd .ghost{color:#e6edf3}
.oc-cmd .ghost{flex:0 0 auto}
.login-legal{display:flex;gap:8px;justify-content:center;padding:10px 16px 14px;font-size:12px}
.login-legal a{color:var(--muted);text-decoration:none}
.login-legal a:hover{color:var(--text);text-decoration:underline}
.users-list{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.user-row{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--panel2);border:1px solid var(--border);border-radius:8px}
.user-row .u-name{font-weight:600}
.user-row .u-role{font-size:11px;padding:1px 7px;border-radius:99px;border:1px solid var(--border);color:var(--muted)}
.user-row .u-role.admin{color:var(--accent);border-color:var(--accent)}
.user-row .u-ws{flex:1;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.users-new{border-top:1px solid var(--border);padding-top:14px}
.users-new .fld{margin-top:8px}
.doc-body table{border-collapse:collapse} .doc-body td,.doc-body th{border:1px solid var(--border);padding:4px 8px}
.graph-wrap{position:relative;height:72vh;background:var(--bg)}
#graphCanvas{width:100%;height:100%;display:block;cursor:grab}
.graph-hint{position:absolute;bottom:8px;left:10px;font-size:11px;color:var(--muted);pointer-events:none}
#graphMeta{font-weight:400;font-size:12px}

.head-actions{display:flex;gap:4px}
.head-actions .ghost{padding:2px 7px}

.ctx-menu{position:fixed;z-index:20;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:4px;box-shadow:0 6px 20px #0008}
.ctx-menu.hidden{display:none}
.ctx-menu button{display:block;width:100%;text-align:left;background:transparent;border:none;color:var(--text);padding:7px 12px;border-radius:6px;font-size:13px}
.ctx-menu button:hover{background:var(--panel2)}

.todo{display:flex;gap:8px;align-items:flex-start;padding:10px;border:1px solid var(--border);border-radius:8px;margin-bottom:8px}
.todo.done{opacity:.55}
.todo.done .todo-text{text-decoration:line-through}
.todo input[type=checkbox]{margin-top:3px}
.todo-main{flex:1;min-width:0}
.todo-src{font-size:11px;color:var(--muted);margin-top:4px}
.todo-src a{color:var(--accent);cursor:pointer}
.todo .del{background:transparent;border:none;color:var(--muted);cursor:pointer}
.todo .del:hover{color:#f85149}

.chat-item .excl{opacity:.35;border:none;background:transparent;font-size:12px;cursor:pointer}
.chat-item .excl.on{opacity:1}

.consol-status{font-size:11px;color:var(--muted);padding:0 14px 6px}
.muted{color:var(--muted);font-size:13px}
.fld{display:block;margin:10px 0;font-size:13px;color:var(--muted)}
.fld input,.fld textarea{display:block;width:100%;margin-top:4px}
button.primary{background:var(--accent);border:none;color:#fff;border-radius:8px;padding:8px 16px;font-weight:600;margin-top:6px}
button.primary:disabled{opacity:.5}
.theme-row{display:flex;gap:8px;margin:8px 0}
.modal-box.wide{max-width:900px}
.auto-tabs{display:flex;gap:6px;border-bottom:1px solid var(--border);margin-bottom:12px}
.auto-tabs .tab{background:transparent;border:none;color:var(--muted);padding:8px 14px;border-bottom:2px solid transparent;font-size:14px}
.auto-tabs .tab.active{color:var(--text);border-bottom-color:var(--accent)}
.auto-item{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:8px}
.auto-item .row{display:flex;align-items:center;gap:8px}
.auto-item .nm{font-weight:600}
.auto-item .meta{color:var(--muted);font-size:12px;margin-top:3px;word-break:break-word}
.auto-item .sp{flex:1}
.auto-item button{border:1px solid var(--border);background:transparent;color:var(--text);border-radius:6px;padding:4px 9px;font-size:12px}
.auto-item button:hover{border-color:var(--accent)}
.auto-item button.danger:hover{border-color:#f85149;color:#f85149}
.auto-empty{color:var(--muted);font-size:13px;padding:12px}
.auto-add{margin-top:10px;display:grid;gap:6px;grid-template-columns:1fr 1fr;align-items:end}
.auto-add input,.auto-add textarea{width:100%}
.auto-add .full{grid-column:1/3}
.result-box{margin-top:12px;font-size:13px;white-space:pre-wrap}
.result-box .transcript{max-height:200px;overflow:auto;background:#0b0f16;border:1px solid var(--border);border-radius:8px;padding:10px;margin-top:8px}

@media(max-width:1100px) and (min-width:1001px){.layout{grid-template-columns:var(--left-w,240px) 1fr}.sidebar{display:none}}

/* Mobile / narrow: single-column chat; side panels become off-canvas drawers. */
#drawerBackdrop{display:none}
@media(max-width:1000px){
  .layout{grid-template-columns:1fr !important}
  .resizer{display:none}
  .chats-bar,.sidebar{position:fixed;top:49px;bottom:0;z-index:40;width:86%;max-width:340px;transition:transform .22s ease;box-shadow:0 0 30px #000a;display:flex !important}
  .chats-bar{left:0;transform:translateX(-104%)}
  .sidebar{right:0;transform:translateX(104%)}
  .chats-bar.drawer-open,.sidebar.drawer-open{transform:none}
  #drawerBackdrop{position:fixed;inset:49px 0 0 0;background:#0007;z-index:39;display:none}
  #drawerBackdrop.show{display:block}
  .ic{width:40px;height:38px;font-size:16px}
  .topbar{gap:8px;padding:6px 10px}
  .modal{padding:0}
  .modal-box{max-width:100% !important;width:100%;height:100%;max-height:100%;border-radius:0}
  .graph-wrap{height:60vh}
  .msg{max-width:100%}
  .composer{padding:10px}
  .chat-item{padding:10px 10px}
  .chat-item .excl,.chat-item .del{opacity:.7;width:26px;height:26px;font-size:13px}
  .node.doc{padding:8px 6px}
}
