*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f4f6f9;--surface:#fff;--surface2:#f1f5f9;--border:#e5e7eb;--text:#374151;--text-dim:#9ca3af;--text-h:#111827;--accent:#00a878;--accent-h:#00c490;--green:#22c55e;--yellow:#eab308;--red:#ef4444;--radius:8px}html,body,#root{height:100%;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:system-ui,Segoe UI,sans-serif;font-size:14px}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer;color:inherit;background:0 0;border:none}input,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);outline:none}input:focus,textarea:focus{border-color:var(--accent)}.spinner-page{justify-content:center;align-items:center;height:100vh;display:flex}.landing-page{background-color:#f4f6f9;background-image:radial-gradient(circle,#00a87833 1.5px,#0000 1.5px);background-size:28px 28px;flex-direction:column;min-height:100vh;display:flex}.landing-nav{z-index:10;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#f4f6f9d9;border-bottom:1px solid #00a8781f;justify-content:space-between;align-items:center;padding:18px 48px;display:flex;position:sticky;top:0}.landing-logo{color:var(--text-h);font-size:18px;font-weight:700}.landing-nav-links{gap:32px;display:flex}.landing-nav-link{color:var(--text-dim);font-size:14px;transition:color .15s}.landing-nav-link:hover{color:var(--text-h)}.landing-hero{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;padding:80px 48px;display:flex}.landing-title{color:var(--text-h);letter-spacing:-.02em;font-size:clamp(52px,9vw,92px);font-weight:900;line-height:1.08}.landing-subtitle{color:var(--accent);letter-spacing:.01em;margin-top:4px;font-size:16px;font-style:italic}.landing-slogan{color:var(--text);margin-top:10px;font-size:22px;font-weight:500}.landing-actions{gap:14px;margin-top:28px;display:flex}.btn-landing-primary{background:var(--accent);color:#fff;border-radius:50px;padding:14px 40px;font-size:16px;font-weight:600;transition:background .2s,transform .1s,box-shadow .2s;box-shadow:0 4px 20px #00a87859}.btn-landing-primary:hover{background:var(--accent-h);transform:translateY(-2px);box-shadow:0 8px 28px #00a87866}.btn-landing-primary:active{transform:none}.btn-landing-ghost{border:1.5px solid var(--border);color:var(--text);background:#ffffffb3;border-radius:50px;padding:14px 40px;font-size:16px;font-weight:500;transition:border-color .2s,background .2s}.btn-landing-ghost:hover{border-color:var(--accent);background:#fffffff2}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;background:#00000059;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;width:400px;max-width:calc(100vw - 32px);padding:32px;position:relative;box-shadow:0 24px 64px #0000001f}.modal-close{background:var(--surface2);width:28px;height:28px;color:var(--text-dim);border-radius:50%;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:14px;right:14px}.modal-close:hover{background:var(--border);color:var(--text)}.modal-tabs{border-bottom:1px solid var(--border);margin-bottom:24px;display:flex}.modal-tab{color:var(--text-dim);border-bottom:2px solid #0000;flex:1;margin-bottom:-1px;padding:10px 0;font-size:15px;font-weight:500;transition:color .15s,border-color .15s}.modal-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.modal-tab:hover:not(.active){color:var(--text)}.modal-form{flex-direction:column;gap:16px;display:flex}.modal-error{color:var(--red);background:#ef444414;border:1px solid #ef444433;border-radius:6px;padding:8px 12px;font-size:13px}.btn-modal-submit{border-radius:var(--radius);background:var(--accent);color:#fff;margin-top:4px;padding:12px;font-size:15px;font-weight:600;transition:background .15s}.btn-modal-submit:hover{background:var(--accent-h)}.btn-modal-submit:disabled{opacity:.5;cursor:not-allowed}.modal-switch{text-align:center;color:var(--text-dim);margin-top:16px;font-size:13px}.modal-switch button{color:var(--accent);margin-left:4px;font-size:13px}.modal-switch button:hover{text-decoration:underline}.form-field{flex-direction:column;gap:6px;display:flex}.form-field label{color:var(--text-dim);font-size:12px;font-weight:500}.form-field input{width:100%;padding:10px 12px}.chat-layout{background:var(--bg);height:100vh;display:flex;overflow:hidden}.thread-sidebar{border-right:1px solid var(--border);background:var(--surface);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.thread-sidebar-header{border-bottom:1px solid var(--border);color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 14px 12px;font-size:12px;font-weight:600;display:flex}.thread-sidebar-footer{border-top:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:10px 14px;display:flex}.thread-sidebar-user{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.btn-logout{border:1px solid var(--border);color:var(--text-dim);border-radius:5px;flex-shrink:0;padding:4px 10px;font-size:12px;transition:border-color .15s,color .15s}.btn-logout:hover{border-color:var(--red);color:var(--red)}.btn-icon{color:var(--text-dim);border-radius:5px;padding:4px 8px;font-size:18px;line-height:1}.btn-icon:hover{background:var(--surface2);color:var(--text)}.thread-list{flex:1;padding:6px 0;overflow-y:auto}.thread-item{cursor:pointer;color:var(--text);border-radius:6px;align-items:center;gap:4px;margin:1px 6px;padding:8px 14px;font-size:13px;transition:background .12s;display:flex}.thread-item-title{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.btn-delete-thread{width:20px;height:20px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:0;font-size:14px;line-height:1;display:none}.btn-delete-thread:hover{color:var(--red);background:#ef44441f}.thread-item:hover .btn-delete-thread{justify-content:center;align-items:center;display:flex}.thread-item.active .btn-delete-thread{color:#ffffffbf}.thread-item.active .btn-delete-thread:hover{color:#fff;background:#fff3}.thread-rename-input{border:1px solid var(--accent);background:var(--surface);min-width:0;color:var(--text);border-radius:4px;outline:none;flex:1;padding:2px 6px;font-size:13px}.thread-item:hover{background:var(--surface2)}.thread-item.active{background:var(--accent);color:#fff}.thread-item.active .thread-rename-input{color:#fff;background:#fff3;border-color:#ffffff80}.chat-main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.messages-area{flex-direction:column;flex:1;gap:20px;padding:24px 32px;display:flex;overflow-y:auto}.message-row{gap:12px;display:flex}.message-row.user{flex-direction:row-reverse}.msg-avatar{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;font-weight:600;display:flex}.msg-avatar.user{background:var(--accent);color:#fff}.msg-avatar.assistant{background:var(--surface2);color:var(--text-h);border:1px solid var(--border)}.msg-bubble{white-space:pre-wrap;word-break:break-word;border-radius:12px;max-width:70%;padding:10px 14px;font-size:13.5px;line-height:1.55}.msg-bubble.user{background:var(--accent);color:#fff;border-bottom-right-radius:3px}.msg-bubble.assistant{background:var(--surface);color:var(--text-h);white-space:normal;border:1px solid var(--border);border-bottom-left-radius:3px}.msg-bubble.assistant p{margin:0 0 8px}.msg-bubble.assistant p:last-child{margin-bottom:0}.msg-bubble.assistant ul,.msg-bubble.assistant ol{margin:4px 0 8px 18px;padding:0}.msg-bubble.assistant li{margin-bottom:3px}.msg-bubble.assistant h1,.msg-bubble.assistant h2,.msg-bubble.assistant h3,.msg-bubble.assistant h4,.msg-bubble.assistant h5,.msg-bubble.assistant h6{color:var(--text-h);margin:10px 0 6px;line-height:1.3}.msg-bubble.assistant h1{font-size:16px}.msg-bubble.assistant h2{font-size:15px}.msg-bubble.assistant h3{font-size:14px}.msg-bubble.assistant code{background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:Cascadia Code,Fira Code,monospace;font-size:12.5px}.msg-bubble.assistant pre{background:var(--surface2);border:1px solid var(--border);border-radius:6px;margin:6px 0;padding:10px 12px;line-height:1.45;overflow-x:auto}.msg-bubble.assistant pre code{background:0 0;border:none;padding:0}.msg-bubble.assistant blockquote{border-left:3px solid var(--accent);color:var(--text);background:#00a8780f;border-radius:0 4px 4px 0;margin:6px 0;padding:4px 10px}.msg-bubble.assistant table{border-collapse:collapse;margin:6px 0;font-size:12.5px}.msg-bubble.assistant th,.msg-bubble.assistant td{border:1px solid var(--border);padding:5px 10px}.msg-bubble.assistant th{background:var(--surface2);font-weight:600}.msg-bubble.assistant strong{color:var(--text-h)}.msg-bubble.assistant hr{border:none;border-top:1px solid var(--border);margin:8px 0}.step-timeline{flex-wrap:wrap;gap:6px;padding:4px 14px;display:flex}.step-chip{border:1px solid var(--border);color:var(--text-dim);border-radius:20px;padding:2px 8px;font-size:11px}.step-chip.running{border-color:var(--accent);color:var(--accent)}.step-chip.done{color:#15803d;border-color:#86efac}.citations-bar{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;gap:8px;padding:8px 32px;display:flex}.citation-tag{background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:200px;padding:3px 8px;font-size:11px;overflow:hidden}.grade-badge{border-radius:4px;margin-left:auto;padding:3px 8px;font-size:11px;font-weight:600}.grade-A{color:#15803d;background:#dcfce7}.grade-B{color:#a16207;background:#fef9c3}.grade-C,.grade-D{color:#b91c1c;background:#fee2e2}.grade-sufficient,.grade-high{color:#15803d;background:#dcfce7}.grade-weak,.grade-medium{color:#a16207;background:#fef9c3}.grade-insufficient,.grade-low{color:#b91c1c;background:#fee2e2}.detail-panel{border-left:1px solid var(--border);background:var(--surface);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.detail-panel-header{border-bottom:1px solid var(--border);color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 14px;font-size:12px;font-weight:600;display:flex}.detail-panel-body{flex-direction:column;flex:1;gap:12px;padding:12px;display:flex;overflow-y:auto}.detail-panel-empty{color:var(--text-dim);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;font-size:12px;display:flex}.message-row.assistant.selected .msg-bubble{outline:2px solid var(--accent);outline-offset:2px}.resize-handle{cursor:col-resize;background:0 0;flex:0 0 5px;align-self:stretch;transition:background .15s}.resize-handle:hover,.resize-handle:active{background:var(--accent)}.msg-content{flex-direction:column;gap:6px;min-width:0;max-width:72%;display:flex}.message-row.assistant .msg-content{align-items:flex-start;max-width:86%}.message-row.user .msg-content{align-items:flex-end}.msg-content .msg-bubble{max-width:100%}.rag-detail{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:100%;overflow:hidden}.rag-detail-summary{cursor:pointer;color:var(--text-dim);-webkit-user-select:none;user-select:none;align-items:center;gap:10px;padding:7px 12px;font-size:12px;display:flex}.rag-detail-summary:hover{color:var(--text)}.rag-detail.open .rag-detail-summary{border-bottom:1px solid var(--border)}.rag-detail-count{background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:20px;padding:1px 7px;font-size:11px}.rag-detail-summary .grade-badge{margin-left:auto}.rag-detail-body{flex-direction:column;gap:12px;padding:10px 12px;display:flex}.rag-steps{flex-wrap:wrap;gap:6px;display:flex}.rag-citations{flex-direction:column;gap:8px;list-style:none;display:flex}.rag-citation{border-left:2px solid var(--accent);padding:4px 0 4px 10px}.rag-citation-head{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:3px;display:flex}.rag-citation-label{color:var(--accent);font-size:12px;font-weight:600}.rag-citation-file{color:var(--text-h);font-size:12.5px;font-weight:500}.rag-citation-loc{color:var(--text-dim);font-size:11px}.rag-citation-snippet{color:var(--text);white-space:pre-wrap;word-break:break-word;font-size:12.5px;line-height:1.5}.rag-empty{color:var(--text-dim);font-size:12px}.composer{border-top:1px solid var(--border);background:var(--surface);align-items:flex-end;gap:10px;padding:14px 24px;display:flex}.composer-input{border-radius:var(--radius);resize:none;background:var(--surface2);flex:1;min-height:42px;max-height:160px;padding:10px 14px;line-height:1.5}.btn-send{border-radius:var(--radius);background:var(--accent);color:#fff;flex-shrink:0;padding:10px 18px;font-size:14px;font-weight:500;transition:background .15s,opacity .15s}.btn-send:hover{background:var(--accent-h)}.btn-send:disabled{opacity:.5;cursor:not-allowed}.btn-stop{border-radius:var(--radius);background:var(--red);color:#fff;cursor:pointer;border:none;flex-shrink:0;padding:10px 18px;font-size:14px;font-weight:500;transition:background .15s}.btn-stop:hover{background:#dc2626}.btn-upload{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-dim);background:var(--surface);flex-shrink:0;padding:9px 11px;font-size:17px;line-height:1;transition:border-color .15s,color .15s,background .15s}.btn-upload:hover{border-color:var(--accent);color:var(--accent);background:#00a8780f}.btn-upload:disabled{opacity:.45;cursor:not-allowed}.upload-toast{z-index:50;white-space:nowrap;border-radius:8px;padding:10px 22px;font-size:13px;font-weight:500;animation:.3s fadeInUp;position:fixed;bottom:90px;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0000001a}.upload-toast.ok{color:#15803d;background:#f0fdf4;border:1px solid #86efac}.upload-toast.err{color:#dc2626;background:#fef2f2;border:1px solid #fca5a5}@keyframes fadeInUp{0%{opacity:0;transform:translate(-50%)translateY(8px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.error-banner{color:var(--red);cursor:pointer;background:#ef444414;border:1px solid #ef444433;border-radius:6px;justify-content:space-between;align-items:center;margin:8px 16px 0;padding:8px 16px;font-size:13px;display:flex}.empty-state{color:var(--text-dim);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;display:flex}.empty-state h2{color:var(--text-h);font-size:18px;font-weight:500}.kb-page{flex-direction:column;gap:24px;padding:32px;display:flex;overflow-y:auto}.kb-header{justify-content:space-between;align-items:center;display:flex}.kb-title{color:var(--text-h);font-size:18px;font-weight:600}.upload-zone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-dim);cursor:pointer;padding:32px;transition:border-color .2s,background .2s}.upload-zone:hover,.upload-zone.drag{border-color:var(--accent);background:#00a8780a}.upload-zone input{display:none}.doc-table{border-collapse:collapse;width:100%}.doc-table th{text-align:left;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);padding:8px 12px;font-size:11px;font-weight:600}.doc-table td{border-bottom:1px solid var(--border);padding:10px 12px;font-size:13px}.doc-table tr:last-child td{border-bottom:none}.doc-table tr:hover td{background:var(--surface2)}.status-badge{border-radius:20px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-block}.status-ready,.status-indexed{color:#15803d;background:#dcfce7}.status-processing,.status-uploaded{color:#2563eb;background:#dbeafe}.status-failed{color:#dc2626;background:#fee2e2}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#9ca3af}.spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}
