*,:before,:after{box-sizing:border-box}body{margin:0}#root{width:100%;height:100dvh}:root,[data-theme=dark]{--bg:#0d1117;--bg2:#161b22;--bg3:#1c2333;--border:#21262d;--border2:#30363d;--text:#e6edf3;--text2:#8b949e;--text3:#6e7681;--accent:#58a6ff;--accent-dim:#1f3a5f;--user-bubble:#1c2d3f;--assistant-bubble:#161b22;--select-bg:#21262d;--shadow:#0006;--accent-linux:#f97316;--accent-rag:#58a6ff;--accent-wiki:#a78bfa}[data-theme=light]{--bg:#f6f8fa;--bg2:#fff;--bg3:#f0f2f5;--border:#d0d7de;--border2:#b6bec8;--text:#1f2328;--text2:#57606a;--text3:#8c959f;--accent:#0969da;--accent-dim:#ddf4ff;--user-bubble:#ddf4ff;--assistant-bubble:#fff;--select-bg:#f6f8fa;--shadow:#0000001a;--accent-linux:#ea580c;--accent-rag:#0969da;--accent-wiki:#7c3aed}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{background:var(--bg);height:100%;color:var(--text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px;overflow:hidden}.layout{width:100%;height:100dvh;display:flex}.main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.sidebar{background:var(--bg2);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:240px;display:flex;overflow:hidden}.sidebar-top{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 14px 10px;display:flex}.sidebar-brand{color:var(--accent);letter-spacing:.02em;font-size:.95rem;font-weight:700}.icon-btn{color:var(--text2);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;padding:4px;transition:background .15s,color .15s;display:flex}.icon-btn:hover{background:var(--bg3);color:var(--text)}.sidebar-nav{border-bottom:1px solid var(--border);flex-direction:column;gap:2px;padding:8px 8px 4px;display:flex}.nav-item{color:var(--text2);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:.85rem;transition:background .12s,color .12s;display:flex}.nav-item:hover{background:var(--bg3);color:var(--text)}.nav-item.active{background:var(--accent-dim);color:var(--accent)}.new-thread-btn{border:1px dashed var(--border2);color:var(--text2);cursor:pointer;background:0 0;border-radius:6px;align-items:center;gap:6px;margin:8px;padding:7px 10px;font-size:.82rem;transition:all .12s;display:flex}.new-thread-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-dim)}.thread-list{flex-direction:column;flex:1;gap:2px;padding:4px 8px 8px;display:flex;overflow-y:auto}.thread-item{cursor:pointer;border-radius:6px;align-items:center;gap:6px;min-width:0;padding:6px 8px;transition:background .12s;display:flex}.thread-item:hover{background:var(--bg3)}.thread-item.active{background:var(--accent-dim)}.thread-title{min-width:0;color:var(--text2);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.82rem;overflow:hidden}.thread-item.active .thread-title{color:var(--accent)}.thread-delete{color:var(--text3);cursor:pointer;opacity:0;background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px;transition:opacity .1s,color .1s;display:flex}.thread-item:hover .thread-delete{opacity:1}.thread-delete:hover{color:#f85149}.thread-empty{color:var(--text3);padding:8px 4px;font-size:.8rem}.chat-wrapper{flex-direction:column;height:100%;display:flex;overflow:hidden}.chat-page{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.chat-toolbar{border-bottom:1px solid var(--border);background:var(--bg2);flex-wrap:wrap;align-items:center;gap:16px;padding:10px 20px;display:flex}.toolbar-warning{color:#d29922;white-space:nowrap;background:#d299221a;border:1px solid #d299224d;border-radius:6px;padding:4px 10px;font-size:12px}.toolbar-group{align-items:center;gap:6px;display:flex}.toolbar-label{color:var(--text2);white-space:nowrap;font-size:.78rem}.toolbar-select{border:1px solid var(--border2);background:var(--select-bg);color:var(--text);cursor:pointer;border-radius:6px;outline:none;padding:4px 8px;font-size:.82rem;transition:border-color .12s}.toolbar-select:hover,.toolbar-select:focus{border-color:var(--accent)}.toolbar-select:disabled{opacity:.5;cursor:not-allowed}.messages{flex-direction:column;flex:1;align-self:center;gap:16px;width:100%;max-width:900px;padding:24px 20px;display:flex;overflow-y:auto}.scroll-to-bottom{display:none}.empty-state{text-align:center;margin:auto;padding:40px 20px}.empty-title{color:var(--text);margin-bottom:8px;font-size:1.1rem;font-weight:600}.empty-sub{color:var(--text2);font-size:.88rem}.message{display:flex}.message.user{justify-content:flex-end}.message.assistant{justify-content:flex-start}.bubble{border-radius:14px;max-width:82%;padding:10px 14px;font-size:.88rem;line-height:1.65}.user-bubble{background:var(--user-bubble);color:var(--text);border:1px solid var(--border2);border-bottom-right-radius:4px}.assistant-bubble{background:var(--assistant-bubble);border:1px solid var(--border);color:var(--text);border-bottom-left-radius:4px;min-width:40px}.md-content p{margin-bottom:8px}.md-content p:last-child{margin-bottom:0}.md-inline-code{background:var(--bg3);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:.82rem}.md-content ul,.md-content ol{margin:6px 0;padding-left:20px}.md-content li{margin-bottom:3px}.md-content strong{color:var(--text)}.md-content blockquote{border-left:3px solid var(--border2);color:var(--text2);margin:6px 0;padding-left:10px}.md-content h1,.md-content h2,.md-content h3{margin:10px 0 4px;font-weight:600}.md-content table{border-collapse:collapse;-webkit-overflow-scrolling:touch;width:max-content;max-width:100%;margin:10px 0;font-size:.8rem;line-height:1.4;display:block;overflow-x:auto}.md-content thead{background:var(--bg3);position:sticky;top:0}.md-content th{background:var(--bg3);color:var(--text);border:1px solid var(--border2);white-space:nowrap;text-align:left;padding:6px 12px;font-weight:600}.md-content td{border:1px solid var(--border);text-align:left;vertical-align:top;padding:5px 12px}.md-content tbody tr:nth-child(2n) td{background:color-mix(in srgb, var(--bg3) 60%, transparent)}.md-content tbody tr:hover td{background:color-mix(in srgb, var(--accent-dim) 40%, transparent);transition:background .1s}.message-actions{opacity:0;gap:4px;margin-top:8px;transition:opacity .15s;display:flex}.message.assistant:hover .message-actions{opacity:1}.action-btn{border:1px solid var(--border);color:var(--text3);cursor:pointer;background:0 0;border-radius:5px;align-items:center;padding:3px 6px;transition:all .12s;display:flex}.action-btn:hover{border-color:var(--accent);color:var(--accent)}.token-stats{color:var(--text3);opacity:.7;gap:10px;margin-top:6px;font-size:11px;display:flex}.context-bar{color:var(--text3);opacity:.75;justify-content:center;gap:12px;padding:2px 12px 4px;font-size:11px;display:flex}.ctx-detail{color:var(--text3);opacity:.8;font-style:italic}.composer-root{align-items:flex-end;gap:8px;width:100%;display:flex}.composer-input{resize:none;background:var(--bg3);border:1px solid var(--border2);color:var(--text);field-sizing:content;border-radius:10px;flex:1;min-height:40px;max-height:160px;padding:10px 14px;font-family:inherit;font-size:.88rem;line-height:1.5;transition:border-color .15s;overflow-y:auto}.composer-input:focus{border-color:var(--accent);outline:none}.composer-input:disabled{opacity:.5;cursor:not-allowed}.tool-call-bubble{border:1px solid var(--border);border-radius:7px;margin:6px 0;font-size:.8rem;overflow:hidden}.tool-call-bubble.pending{border-color:var(--accent);opacity:.8}.tool-call-bubble.done{border-color:var(--border)}.tool-call-header{text-align:left;background:var(--bg3);cursor:pointer;width:100%;color:var(--text2);border:none;align-items:center;gap:6px;padding:6px 10px;transition:background .1s;display:flex}.tool-call-header:hover{background:var(--bg)}.tool-call-name{color:var(--accent);font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:.78rem}.tool-call-status{color:var(--text3);flex:1;font-size:.75rem;font-style:italic}.tool-call-tokens{color:var(--text3);opacity:.7;white-space:nowrap;font-size:.7rem}.tool-call-body{background:var(--bg2);border-top:1px solid var(--border);flex-direction:column;gap:4px;padding:8px 10px;display:flex}.tool-call-section-label{color:var(--text3);text-transform:uppercase;letter-spacing:.05em;margin-top:4px;font-size:.72rem}.tool-call-pre{color:var(--text2);white-space:pre-wrap;word-break:break-word;background:var(--bg3);border:1px solid var(--border);border-radius:5px;max-height:200px;padding:6px 8px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:.75rem;overflow-y:auto}.tool-call-result{color:var(--text)}.cursor{color:var(--accent);margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.missing-key-banner{background:color-mix(in srgb, var(--accent) 10%, transparent);border-top:1px solid color-mix(in srgb, var(--accent) 30%, transparent);color:var(--text2);align-self:center;align-items:center;gap:8px;width:100%;max-width:900px;padding:10px 20px;font-size:.85rem;display:flex}.missing-key-link{color:var(--accent);font-weight:500;text-decoration:none}.missing-key-link:hover{text-decoration:underline}.input-area{border-top:1px solid var(--border);background:var(--bg2);align-self:center;align-items:flex-end;gap:8px;width:100%;max-width:900px;padding:14px 20px;display:flex}.btn-send,.btn-stop{cursor:pointer;border:none;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;transition:all .15s;display:flex}.btn-send{background:var(--accent);color:#fff}.btn-send:hover:not(:disabled){opacity:.85}.btn-send:disabled{opacity:.35;cursor:not-allowed}.btn-stop{color:#fff;background:#f85149}.btn-stop:hover{opacity:.85}.tools-page{flex-direction:column;height:100%;display:flex;overflow-y:auto}.tools-hero{border-bottom:1px solid var(--border);background:var(--bg2);padding:32px 40px 24px}.tools-hero h1{color:var(--text);margin-bottom:6px;font-size:1.4rem;font-weight:700}.tools-hero p{color:var(--text2);max-width:600px;font-size:.88rem;line-height:1.6}.tools-content{flex-direction:column;gap:32px;max-width:860px;padding:24px 40px 40px;display:flex}.server-section{flex-direction:column;gap:12px;display:flex}.server-header{border-left:3px solid;justify-content:space-between;align-items:flex-start;gap:16px;padding-left:14px;display:flex}.server-title{color:var(--text);margin-bottom:3px;font-size:1rem;font-weight:600}.server-desc{color:var(--text2);font-size:.82rem}.server-link{color:var(--text3);white-space:nowrap;border:1px solid var(--border);border-radius:6px;flex-shrink:0;align-items:center;gap:5px;padding:3px 8px;font-size:.78rem;text-decoration:none;transition:all .12s;display:flex}.server-link:hover{color:var(--accent);border-color:var(--accent)}.tool-list{flex-direction:column;gap:8px;display:flex}.tool-card{border:1px solid var(--border);background:var(--bg2);border-radius:8px;overflow:hidden}.tool-card-header{text-align:left;cursor:pointer;width:100%;color:var(--text2);background:0 0;border:none;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 14px;transition:background .1s;display:flex}.tool-card-header:hover{background:var(--bg3)}.tool-name{color:var(--accent);margin-bottom:3px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:.85rem;display:block}.tool-desc{color:var(--text2);font-size:.8rem;line-height:1.5}.tool-params{border-top:1px solid var(--border);background:var(--bg3);flex-direction:column;gap:6px;padding:10px 14px;display:flex}.tool-param-row{flex-wrap:wrap;align-items:baseline;gap:6px;font-size:.8rem;display:flex}.param-name{border-radius:4px;padding:1px 6px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:.78rem}.param-name.required{color:#f85149;background:#f8514926;border:1px solid #f851494d}.param-name.optional{background:var(--bg);color:var(--text2);border:1px solid var(--border)}.param-type{color:var(--text3);font-style:italic}.param-desc{color:var(--text2)}.param-default{color:var(--text3);font-size:.75rem}.tools-loading{color:var(--text3);padding:4px 0;font-size:.82rem}.tools-error{color:#f85149;padding:4px 0;font-size:.82rem}.sidebar-footer{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:6px;margin-top:auto;padding:10px 12px;display:flex}.sidebar-user{color:var(--text3);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.78rem;overflow:hidden}.sidebar-user-btn{cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:5px;padding:3px 5px;transition:background .15s,color .15s;display:flex}.sidebar-user-btn:hover,.sidebar-user-btn.active{background:var(--hover);color:var(--text1)}.sidebar-user-btn span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.auth-loading{justify-content:center;align-items:center;width:100%;height:100dvh;display:flex}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:28px;height:28px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.login-page{background:var(--bg);justify-content:center;align-items:center;min-height:100dvh;display:flex}.login-card{background:var(--bg2);border:1px solid var(--border);width:100%;max-width:380px;box-shadow:0 8px 32px var(--shadow);border-radius:12px;padding:36px 32px}.login-title{color:var(--accent);text-align:center;margin-bottom:4px;font-size:1.6rem;font-weight:700}.login-subtitle{color:var(--text2);text-align:center;margin-bottom:28px;font-size:.85rem}.login-form{flex-direction:column;gap:16px;display:flex}.form-group{flex-direction:column;gap:6px;display:flex}.form-group label{color:var(--text2);font-size:.82rem}.form-group input{border:1px solid var(--border2);background:var(--bg3);color:var(--text);border-radius:8px;outline:none;padding:9px 12px;font-family:inherit;font-size:.88rem;transition:border-color .15s}.form-group input:focus{border-color:var(--accent)}.input-with-check{position:relative}.input-with-check input{box-sizing:border-box;width:100%;padding-right:32px}.key-set-check{color:#3fb950;pointer-events:none;font-size:.95rem;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.form-error,.form-message{color:#f85149;font-size:.82rem}.form-message-ok{color:#3fb950}.settings-divider{border:none;border-top:1px solid var(--border);margin:24px 0}.btn-primary{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:10px 16px;font-size:.9rem;font-weight:600;transition:opacity .15s}.btn-primary:hover:not(:disabled){opacity:.85}.btn-primary:disabled{opacity:.45;cursor:not-allowed}.settings-page{max-width:520px;height:100%;padding:36px 40px;overflow-y:auto}.settings-page h2{color:var(--text);margin-bottom:8px;font-size:1.2rem;font-weight:700}.settings-desc{color:var(--text2);margin-bottom:20px;font-size:.85rem;line-height:1.6}.key-status{color:var(--text2);background:var(--bg2);border:1px solid var(--border);border-radius:8px;gap:16px;margin-bottom:20px;padding:10px 14px;font-size:.82rem;display:flex}.settings-form{flex-direction:column;gap:16px;display:flex}.publi-page{background:var(--bg);flex-direction:column;height:100%;display:flex;overflow:hidden}.publi-header{border-bottom:1px solid var(--border);background:var(--bg2);flex-shrink:0;padding:20px 28px 14px}.publi-header h2{color:var(--text);margin-bottom:12px;font-size:1.1rem;font-weight:700}.publi-toolbar{align-items:center;gap:14px;display:flex}.publi-search{border:1px solid var(--border2);background:var(--bg3);max-width:440px;color:var(--text);border-radius:8px;outline:none;flex:1;padding:7px 12px;font-family:inherit;font-size:.85rem;transition:border-color .15s}.publi-search:focus{border-color:var(--accent)}.publi-count{color:var(--text3);white-space:nowrap;font-size:.8rem}.publi-error{color:#f85149;padding:16px 28px;font-size:.85rem}.publi-table-wrap{flex:1;padding:0;overflow:auto}.publi-table{border-collapse:collapse;table-layout:fixed;width:100%;font-size:.82rem}.publi-table thead{z-index:1;background:var(--bg2);position:sticky;top:0}.publi-table th{text-align:left;color:var(--text2);border-bottom:1px solid var(--border2);white-space:nowrap;text-transform:uppercase;letter-spacing:.04em;padding:10px 14px;font-size:.78rem;font-weight:600}.publi-table th:first-child{width:130px}.publi-table th:nth-child(2){width:160px}.publi-table th:nth-child(3){width:60px}.publi-table th:nth-child(4){width:auto}.publi-table th:nth-child(5){text-align:center;width:44px}.publi-table td{border-bottom:1px solid var(--border);vertical-align:top;color:var(--text);padding:8px 14px}.publi-table tbody tr:hover td{background:var(--bg3)}.publi-hal-link{color:var(--accent);white-space:nowrap;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:.78rem;text-decoration:none}.publi-hal-link:hover{text-decoration:underline}.publi-team-author{color:var(--text2);font-size:.8rem}.publi-year{color:var(--text2);font-variant-numeric:tabular-nums;white-space:nowrap}.publi-title{-webkit-line-clamp:2;color:var(--text);-webkit-box-orient:vertical;line-height:1.45;display:-webkit-box;overflow:hidden}.publi-pdf-cell{text-align:center}.publi-pdf-link{color:var(--text3);align-items:center;transition:color .12s;display:inline-flex}.publi-pdf-link:hover{color:var(--accent)}.publi-empty{text-align:center;color:var(--text3);font-style:italic;padding:32px!important}.publi-pagination{border-top:1px solid var(--border);background:var(--bg2);flex-shrink:0;justify-content:center;align-items:center;gap:16px;padding:12px 20px;display:flex}.publi-page-btn{border:1px solid var(--border2);color:var(--text2);cursor:pointer;background:0 0;border-radius:6px;padding:6px 14px;font-size:.82rem;transition:all .12s}.publi-page-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.publi-page-btn:disabled{opacity:.35;cursor:not-allowed}.publi-page-info{color:var(--text3);text-align:center;min-width:140px;font-size:.82rem}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text3)}
