G-Madhuri's picture
deploy to hf space
7e2f74d
Raw
History Blame Contribute Delete
39.8 kB
/* ═══════════════════════════════════════════════════════════════
Repository Intelligence Platform — Premium SaaS Theme
Palette: Warm Sage / Teal inspired, high readability
═══════════════════════════════════════════════════════════════ */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&family=Sora:wght@600;700;800&display=swap');
/* ── Design Tokens ─────────────────────────────────────────── */
:root {
/* Core Palette — Phase 3B specification */
--bg-primary: #F8F6F4;
--bg-secondary: #E3F4F4;
--bg-card: #D2E9E9;
--bg-card-hover: #C4DFDF;
--bg-accent: #C4DFDF;
--bg-muted: #E3F4F4;
/* Text */
--text-primary: #1E293B;
--text-secondary: #475569;
--text-muted: #64748B;
--text-placeholder:#94A3B8;
/* Borders */
--border-color: #BFD6D6;
--border-hover: #99C4C4;
--border-focus: #4A9E9E;
/* Brand Accent Colors */
--accent-teal: #2E9E9E;
--accent-teal-dk: #1E7A7A;
--accent-teal-lt: #A8D8D8;
--accent-blue: #3B82F6;
--accent-green: #059669;
--accent-amber: #D97706;
--accent-rose: #E11D48;
--accent-purple: #7C3AED;
--accent-indigo: #4338CA;
/* Status colors */
--status-success-bg: #ECFDF5;
--status-success-txt: #065F46;
--status-error-bg: #FFF1F2;
--status-error-txt: #9F1239;
--status-warn-bg: #FFFBEB;
--status-warn-txt: #92400E;
--status-info-bg: #EFF6FF;
--status-info-txt: #1E40AF;
/* Shadows */
--shadow-sm: 0 1px 3px rgba(30,41,59,0.06), 0 1px 2px rgba(30,41,59,0.04);
--shadow-md: 0 4px 6px rgba(30,41,59,0.07), 0 2px 4px rgba(30,41,59,0.05);
--shadow-lg: 0 10px 15px rgba(30,41,59,0.08), 0 4px 6px rgba(30,41,59,0.04);
--shadow-xl: 0 20px 25px rgba(30,41,59,0.10), 0 10px 10px rgba(30,41,59,0.04);
--shadow-teal: 0 0 0 3px rgba(46,158,158,0.18);
/* Typography */
--font-body: 'Inter', system-ui, -apple-system, sans-serif;
--font-display: 'Sora', 'Inter', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
/* Radii */
--radius-sm: 6px;
--radius-md: 10px;
--radius-lg: 16px;
--radius-xl: 24px;
--radius-full: 9999px;
/* Spacing */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-5: 1.25rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-10: 2.5rem;
--space-12: 3rem;
/* Transitions */
--ease: 0.18s ease;
--ease-spring: 0.22s cubic-bezier(0.34, 1.56, 0.64, 1);
}
/* ── Reset ─────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html {
font-size: 16px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
scroll-behavior: smooth;
}
body {
font-family: var(--font-body);
background-color: var(--bg-primary);
color: var(--text-primary);
line-height: 1.6;
min-height: 100vh;
}
img, svg { display: block; max-width: 100%; }
button, input, select, textarea { font-family: inherit; }
a { color: var(--accent-teal); text-decoration: none; }
a:hover { text-decoration: underline; }
/* ── Scrollbar ─────────────────────────────────────────────── */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: var(--bg-muted); }
::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--border-hover); }
/* ── Layout ────────────────────────────────────────────────── */
.app-container {
min-height: 100vh;
display: flex;
flex-direction: column;
background: var(--bg-primary);
}
/* ── Header ─────────────────────────────────────────────────── */
.app-header {
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border-color);
padding: 0 var(--space-8);
height: 64px;
display: flex;
align-items: center;
justify-content: space-between;
position: sticky;
top: 0;
z-index: 100;
box-shadow: var(--shadow-sm);
}
.brand-section {
display: flex;
align-items: center;
gap: var(--space-3);
}
.brand-icon {
width: 40px;
height: 40px;
background: linear-gradient(135deg, var(--accent-teal) 0%, var(--accent-indigo) 100%);
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
flex-shrink: 0;
box-shadow: 0 2px 8px rgba(46,158,158,0.3);
}
.brand-title {
font-family: var(--font-display);
font-size: 1.1rem;
font-weight: 700;
color: var(--text-primary);
letter-spacing: -0.01em;
}
.brand-subtitle {
font-size: 0.72rem;
color: var(--text-muted);
font-weight: 500;
letter-spacing: 0.02em;
}
/* ── Main Content ───────────────────────────────────────────── */
.main-content {
flex: 1;
padding: var(--space-8);
max-width: 1600px;
margin: 0 auto;
width: 100%;
}
/* ── Buttons ────────────────────────────────────────────────── */
.btn-primary {
display: inline-flex;
align-items: center;
gap: var(--space-2);
background: linear-gradient(135deg, var(--accent-teal) 0%, var(--accent-teal-dk) 100%);
color: #fff;
border: none;
border-radius: var(--radius-md);
padding: 0.7rem 1.5rem;
font-size: 0.9rem;
font-weight: 600;
cursor: pointer;
transition: all var(--ease);
box-shadow: 0 2px 8px rgba(46,158,158,0.25);
width: 100%;
justify-content: center;
}
.btn-primary:hover:not(:disabled) {
transform: translateY(-1px);
box-shadow: 0 4px 16px rgba(46,158,158,0.35);
}
.btn-primary:disabled { opacity: 0.55; cursor: not-allowed; transform: none; }
.btn-secondary {
display: inline-flex;
align-items: center;
gap: var(--space-2);
background: #fff;
color: var(--text-secondary);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.55rem 1.1rem;
font-size: 0.84rem;
font-weight: 500;
cursor: pointer;
transition: all var(--ease);
text-decoration: none;
white-space: nowrap;
}
.btn-secondary:hover {
background: var(--bg-muted);
border-color: var(--border-hover);
color: var(--text-primary);
text-decoration: none;
}
.btn-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
background: #fff;
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
cursor: pointer;
color: var(--text-secondary);
transition: all var(--ease);
}
.btn-icon:hover { background: var(--bg-muted); border-color: var(--border-hover); color: var(--text-primary); }
/* ── Cards / Panels ─────────────────────────────────────────── */
.card {
background: rgba(227, 244, 244, 0.92);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(196, 223, 223, 0.65);
border-radius: var(--radius-lg);
padding: var(--space-6);
box-shadow: var(--shadow-sm);
transition: box-shadow var(--ease), transform var(--ease);
}
.card:hover { box-shadow: var(--shadow-md); }
.card-teal {
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
padding: var(--space-6);
}
/* ── Glass Panel ─────────────────────────────────────────────── */
.glass-panel {
background: rgba(227, 244, 244, 0.78);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
border: 1px solid rgba(196, 223, 223, 0.75);
border-radius: var(--radius-lg);
padding: var(--space-6);
box-shadow: var(--shadow-md);
transition: box-shadow var(--ease), border-color var(--ease);
}
.glass-panel:hover {
border-color: var(--border-hover);
box-shadow: var(--shadow-lg);
}
/* ── Form Elements ──────────────────────────────────────────── */
.form-group { margin-bottom: var(--space-5); }
.form-label {
display: block;
font-size: 0.82rem;
font-weight: 600;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: var(--space-2);
}
.input-wrapper {
position: relative;
display: flex;
align-items: center;
}
.input-icon {
position: absolute;
left: var(--space-3);
color: var(--text-muted);
flex-shrink: 0;
pointer-events: none;
}
.form-input {
width: 100%;
background: #fff;
border: 1.5px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.65rem var(--space-4) 0.65rem 2.75rem;
font-size: 0.92rem;
color: var(--text-primary);
outline: none;
transition: border-color var(--ease), box-shadow var(--ease);
}
.form-input::placeholder { color: var(--text-placeholder); }
.form-input:focus {
border-color: var(--border-focus);
box-shadow: var(--shadow-teal);
}
.form-input:disabled { background: var(--bg-muted); color: var(--text-muted); }
/* ── Input Section (Landing) ────────────────────────────────── */
.input-section {
max-width: 680px;
width: 100%;
margin: 3rem auto 0;
}
.section-title {
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 700;
color: var(--text-primary);
letter-spacing: -0.02em;
margin-bottom: var(--space-2);
}
.section-desc {
font-size: 0.9rem;
color: var(--text-secondary);
line-height: 1.6;
margin-bottom: var(--space-6);
}
/* ── Drag Drop ──────────────────────────────────────────────── */
.drag-drop-area {
border: 2px dashed var(--border-color);
border-radius: var(--radius-lg);
padding: var(--space-10) var(--space-8);
text-align: center;
cursor: pointer;
transition: all var(--ease);
color: var(--text-secondary);
}
.drag-drop-area:hover, .drag-drop-area.drag-active {
border-color: var(--accent-teal);
background: var(--bg-muted);
color: var(--text-primary);
}
.upload-icon {
margin: 0 auto var(--space-3);
color: var(--accent-teal);
}
/* ── Dashboard Tabs ─────────────────────────────────────────── */
.dashboard-tabs {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
margin-bottom: var(--space-5);
}
.tab-btn {
display: inline-flex;
align-items: center;
gap: var(--space-2);
background: #fff;
border: 1.5px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.5rem 1rem;
font-size: 0.84rem;
font-weight: 500;
color: var(--text-secondary);
cursor: pointer;
transition: all var(--ease);
white-space: nowrap;
}
.tab-btn:hover {
background: var(--bg-muted);
border-color: var(--border-hover);
color: var(--text-primary);
}
.tab-btn.active {
background: var(--accent-teal);
border-color: var(--accent-teal);
color: #fff;
box-shadow: 0 2px 8px rgba(46,158,158,0.3);
}
.tab-pane {
min-height: 300px;
}
/* ── Dashboard Grid ──────────────────────────────────────────── */
.dashboard-grid {
display: grid;
grid-template-columns: 260px 1fr;
gap: var(--space-6);
align-items: start;
}
.sidebar-panel {
position: sticky;
top: 80px;
max-height: calc(100vh - 100px);
overflow-y: auto;
padding: var(--space-4);
}
/* ── Dashboard Header ────────────────────────────────────────── */
.dashboard-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
gap: var(--space-4);
padding: var(--space-5) var(--space-6);
background: rgba(227, 244, 244, 0.88);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(196, 223, 223, 0.7);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
margin-bottom: var(--space-5);
}
.download-bar {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
}
.repo-meta {
display: inline-flex;
align-items: center;
gap: var(--space-2);
font-size: 0.84rem;
color: var(--text-secondary);
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-full);
padding: 0.25rem 0.75rem;
}
/* ── Progress Panel ──────────────────────────────────────────── */
.progress-panel {
max-width: 580px;
margin: 4rem auto 0;
}
.spinner {
width: 44px;
height: 44px;
border: 3px solid var(--bg-card);
border-top-color: var(--accent-teal);
border-radius: 50%;
animation: spin 0.9s linear infinite;
margin: 0 auto var(--space-5);
}
@keyframes spin { to { transform: rotate(360deg); } }
.spin-slow { animation: spin 1.4s linear infinite; }
.progress-steps {
display: flex;
flex-direction: column;
gap: var(--space-3);
}
.progress-step {
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-3) var(--space-4);
border-radius: var(--radius-md);
background: var(--bg-muted);
border: 1px solid var(--border-color);
transition: all var(--ease);
}
.progress-step.active {
background: var(--bg-card);
border-color: var(--accent-teal);
}
.progress-step.completed {
opacity: 0.6;
}
.step-icon {
width: 28px;
height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.75rem;
font-weight: 700;
background: var(--bg-card);
border: 1.5px solid var(--border-color);
color: var(--text-muted);
flex-shrink: 0;
}
.step-icon.active {
background: var(--accent-teal);
border-color: var(--accent-teal);
color: #fff;
}
.step-icon.completed {
background: var(--accent-green);
border-color: var(--accent-green);
color: #fff;
}
/* ── Error Panel ─────────────────────────────────────────────── */
.error-panel {
display: flex;
align-items: flex-start;
gap: var(--space-3);
background: var(--status-error-bg);
border: 1px solid #FECDD3;
border-radius: var(--radius-md);
padding: var(--space-4);
color: var(--status-error-txt);
margin-bottom: var(--space-4);
}
.error-title {
font-weight: 600;
font-size: 0.9rem;
margin-bottom: 0.2rem;
}
/* ── Report Content (Markdown) ───────────────────────────────── */
.report-content {
font-size: 0.93rem;
line-height: 1.75;
color: var(--text-primary);
}
.report-content h1 { font-family: var(--font-display); font-size: 1.7rem; font-weight: 800; margin: 0 0 1rem; color: var(--text-primary); }
.report-content h2 { font-family: var(--font-display); font-size: 1.25rem; font-weight: 700; margin: 2rem 0 0.75rem; color: var(--text-primary); padding-bottom: 0.4rem; border-bottom: 2px solid var(--bg-card); }
.report-content h3 { font-size: 1.05rem; font-weight: 600; margin: 1.5rem 0 0.5rem; color: var(--text-secondary); }
.report-content p { margin-bottom: 0.75rem; color: var(--text-secondary); }
.report-content ul, .report-content ol { padding-left: 1.5rem; margin-bottom: 0.75rem; }
.report-content li { margin-bottom: 0.3rem; color: var(--text-secondary); }
.report-content code {
font-family: var(--font-mono);
font-size: 0.82rem;
background: var(--bg-card);
color: var(--accent-teal-dk);
padding: 0.15rem 0.4rem;
border-radius: var(--radius-sm);
border: 1px solid var(--border-color);
}
.report-content pre {
background: #1E293B;
border-radius: var(--radius-md);
padding: var(--space-4);
overflow-x: auto;
margin-bottom: 1rem;
border: 1px solid #334155;
}
.report-content pre code {
background: none;
border: none;
color: #E2E8F0;
padding: 0;
font-size: 0.82rem;
}
.report-content blockquote {
border-left: 3px solid var(--accent-teal);
padding-left: var(--space-4);
margin: 1rem 0;
color: var(--text-muted);
font-style: italic;
}
.report-content table { width: 100%; border-collapse: collapse; margin-bottom: 1rem; }
.report-content th { background: var(--bg-card); padding: 0.5rem 0.75rem; font-size: 0.82rem; text-align: left; border: 1px solid var(--border-color); color: var(--text-secondary); }
.report-content td { padding: 0.5rem 0.75rem; border: 1px solid var(--border-color); font-size: 0.85rem; color: var(--text-secondary); }
.report-content tr:nth-child(even) td { background: var(--bg-muted); }
/* ── Summary Cards ───────────────────────────────────────────── */
.summary-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: var(--space-5);
}
.summary-card {
background: #fff;
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
padding: var(--space-6);
box-shadow: var(--shadow-sm);
}
.summary-card.full-width { grid-column: 1 / -1; }
.summary-title {
display: flex;
align-items: center;
gap: var(--space-2);
font-family: var(--font-display);
font-size: 0.95rem;
font-weight: 700;
color: var(--text-primary);
margin-bottom: var(--space-4);
padding-bottom: var(--space-3);
border-bottom: 1.5px solid var(--border-color);
}
.list-styled { list-style: none; display: flex; flex-direction: column; gap: var(--space-2); }
.list-item-styled {
display: flex;
align-items: flex-start;
gap: var(--space-3);
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-sm);
font-size: 0.875rem;
color: var(--text-secondary);
transition: background var(--ease);
}
.list-item-styled:hover { background: var(--bg-muted); }
.list-item-icon {
color: var(--accent-teal);
font-size: 0.8rem;
margin-top: 0.1rem;
flex-shrink: 0;
}
.list-item-icon.risk { color: var(--accent-amber); }
/* ── Tech Cards ──────────────────────────────────────────────── */
.tech-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: var(--space-4);
margin-bottom: var(--space-5);
}
.tech-card {
background: #fff;
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
padding: var(--space-5);
box-shadow: var(--shadow-sm);
transition: box-shadow var(--ease);
}
.tech-card:hover { box-shadow: var(--shadow-md); }
.tech-card-header {
display: flex;
align-items: center;
gap: var(--space-2);
font-size: 0.82rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
margin-bottom: var(--space-4);
}
.badge-container { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.tech-badge {
display: inline-flex;
align-items: center;
padding: 0.3rem 0.75rem;
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-full);
font-size: 0.78rem;
font-weight: 500;
color: var(--text-secondary);
transition: all var(--ease);
}
.tech-badge:hover { background: var(--bg-card); border-color: var(--border-hover); }
.tech-badge.language { color: var(--accent-teal-dk); background: #E6F7F7; border-color: var(--accent-teal-lt); }
.tech-badge.db { color: var(--accent-indigo); background: #EEF2FF; border-color: #C7D2FE; }
/* ── JSON Block ──────────────────────────────────────────────── */
.json-block {
background: #1E293B;
color: #94A3B8;
font-family: var(--font-mono);
font-size: 0.78rem;
line-height: 1.6;
padding: var(--space-4);
border-radius: var(--radius-md);
overflow-x: auto;
max-height: 400px;
overflow-y: auto;
border: 1px solid #334155;
}
/* ── Repo Tree ───────────────────────────────────────────────── */
.tree-container { font-family: var(--font-mono); font-size: 0.8rem; }
.tree-title {
font-family: var(--font-display);
font-size: 0.9rem;
font-weight: 700;
color: var(--text-primary);
margin-bottom: var(--space-4);
display: flex;
align-items: center;
gap: var(--space-2);
}
.tree-item {
display: flex;
align-items: center;
gap: var(--space-2);
padding: 0.2rem var(--space-2);
border-radius: var(--radius-sm);
cursor: pointer;
color: var(--text-secondary);
user-select: none;
transition: background var(--ease);
}
.tree-item:hover { background: var(--bg-muted); }
.tree-item.file { color: var(--text-muted); }
/* ── Repository Assistant ────────────────────────────────────── */
.chat-container {
display: flex;
flex-direction: column;
height: 600px;
background: rgba(227, 244, 244, 0.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(196, 223, 223, 0.7);
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-md);
}
.chat-header {
padding: var(--space-4) var(--space-5);
background: var(--bg-muted);
border-bottom: 1px solid var(--border-color);
display: flex;
justify-content: space-between;
align-items: center;
}
.chat-header-title {
font-family: var(--font-display);
font-size: 1rem;
font-weight: 700;
color: var(--text-primary);
display: flex;
align-items: center;
gap: var(--space-2);
}
.chat-messages {
flex: 1;
overflow-y: auto;
padding: var(--space-5);
display: flex;
flex-direction: column;
gap: var(--space-4);
}
.chat-welcome {
text-align: center;
padding: var(--space-8) var(--space-4);
color: var(--text-muted);
}
.chat-welcome-icon { font-size: 2.5rem; margin-bottom: var(--space-3); }
.chat-message {
max-width: 82%;
}
.chat-message.user { align-self: flex-end; }
.chat-message.assistant { align-self: flex-start; }
.chat-bubble {
padding: var(--space-3) var(--space-4);
border-radius: var(--radius-lg);
font-size: 0.9rem;
line-height: 1.6;
word-break: break-word;
}
.chat-message.user .chat-bubble {
background: var(--accent-teal);
color: #fff;
border-bottom-right-radius: var(--radius-sm);
}
.chat-message.assistant .chat-bubble {
background: var(--bg-muted);
color: var(--text-primary);
border: 1px solid var(--border-color);
border-bottom-left-radius: var(--radius-sm);
}
.chat-meta {
font-size: 0.7rem;
color: var(--text-muted);
margin-top: var(--space-1);
padding: 0 var(--space-2);
}
.chat-message.user .chat-meta { text-align: right; }
.agent-tag {
display: inline-flex;
align-items: center;
gap: 0.2rem;
font-size: 0.68rem;
font-weight: 600;
padding: 0.15rem 0.4rem;
border-radius: var(--radius-sm);
background: var(--bg-card);
border: 1px solid var(--border-color);
color: var(--text-muted);
margin-right: 0.25rem;
}
.chat-input-area {
padding: var(--space-4) var(--space-5);
background: #fff;
border-top: 1px solid var(--border-color);
}
.chat-input-row {
display: flex;
gap: var(--space-2);
align-items: flex-end;
}
.chat-input {
flex: 1;
background: var(--bg-muted);
border: 1.5px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.65rem var(--space-4);
font-size: 0.9rem;
color: var(--text-primary);
outline: none;
resize: none;
min-height: 44px;
max-height: 120px;
transition: border-color var(--ease), box-shadow var(--ease);
}
.chat-input::placeholder { color: var(--text-placeholder); }
.chat-input:focus { border-color: var(--border-focus); box-shadow: var(--shadow-teal); background: #fff; }
.chat-send-btn {
display: flex;
align-items: center;
justify-content: center;
width: 44px;
height: 44px;
background: var(--accent-teal);
border: none;
border-radius: var(--radius-md);
color: #fff;
cursor: pointer;
flex-shrink: 0;
transition: all var(--ease);
box-shadow: 0 2px 8px rgba(46,158,158,0.25);
}
.chat-send-btn:hover:not(:disabled) {
background: var(--accent-teal-dk);
transform: translateY(-1px);
}
.chat-send-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
/* Agent decision chips */
.agent-decision-box {
font-size: 0.78rem;
color: var(--text-muted);
padding: var(--space-2) var(--space-3);
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
margin-top: var(--space-2);
line-height: 1.5;
}
.confidence-badge {
display: inline-flex;
align-items: center;
gap: 0.25rem;
font-size: 0.7rem;
font-weight: 600;
padding: 0.15rem 0.5rem;
border-radius: var(--radius-full);
background: var(--status-success-bg);
color: var(--status-success-txt);
border: 1px solid #A7F3D0;
}
.confidence-badge.medium {
background: var(--status-warn-bg);
color: var(--status-warn-txt);
border-color: #FDE68A;
}
.confidence-badge.low {
background: var(--status-error-bg);
color: var(--status-error-txt);
border-color: #FECDD3;
}
/* Suggested questions */
.suggested-questions {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
margin-top: var(--space-3);
}
.suggested-q-btn {
display: inline-flex;
align-items: center;
gap: var(--space-1);
padding: 0.35rem 0.75rem;
background: #fff;
border: 1.5px solid var(--border-color);
border-radius: var(--radius-full);
font-size: 0.78rem;
color: var(--text-secondary);
cursor: pointer;
transition: all var(--ease);
}
.suggested-q-btn:hover {
background: var(--bg-muted);
border-color: var(--accent-teal);
color: var(--accent-teal-dk);
}
/* ── Graph Viewer ────────────────────────────────────────────── */
.graph-legend {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
margin-bottom: var(--space-4);
}
.legend-item {
display: flex;
align-items: center;
gap: var(--space-2);
font-size: 0.78rem;
color: var(--text-secondary);
}
.legend-dot {
width: 10px;
height: 10px;
border-radius: 50%;
flex-shrink: 0;
}
/* ── Knowledge Explorer ──────────────────────────────────────── */
.ke-container {
display: flex;
flex-direction: column;
gap: var(--space-5);
}
.ke-tabs {
display: flex;
gap: var(--space-2);
flex-wrap: wrap;
border-bottom: 2px solid var(--border-color);
padding-bottom: var(--space-3);
}
.ke-tab-btn {
display: flex;
align-items: center;
gap: var(--space-2);
background: transparent;
border: none;
border-bottom: 2px solid transparent;
margin-bottom: -2px;
padding: var(--space-2) var(--space-4);
font-size: 0.84rem;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
transition: all var(--ease);
}
.ke-tab-btn:hover { color: var(--text-primary); }
.ke-tab-btn.active {
color: var(--accent-teal);
border-bottom-color: var(--accent-teal);
font-weight: 600;
}
.ke-panel {
background: rgba(227, 244, 244, 0.88);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(196, 223, 223, 0.7);
border-radius: var(--radius-lg);
padding: var(--space-6);
box-shadow: var(--shadow-sm);
}
.ke-panel-title {
font-family: var(--font-display);
font-size: 1.05rem;
font-weight: 700;
color: var(--text-primary);
display: flex;
align-items: center;
gap: var(--space-2);
margin-bottom: var(--space-2);
}
.ke-panel-desc {
font-size: 0.85rem;
color: var(--text-secondary);
margin-bottom: var(--space-5);
line-height: 1.6;
}
/* Search form */
.search-form-row {
display: flex;
gap: var(--space-2);
flex-wrap: wrap;
margin-bottom: var(--space-4);
}
.ke-input {
flex-grow: 1;
min-width: 200px;
background: var(--bg-muted);
border: 1.5px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.65rem var(--space-4);
color: var(--text-primary);
font-size: 0.9rem;
outline: none;
transition: border-color var(--ease), box-shadow var(--ease);
}
.ke-input::placeholder { color: var(--text-placeholder); }
.ke-input:focus { border-color: var(--border-focus); box-shadow: var(--shadow-teal); background: #fff; }
.ke-select {
background: var(--bg-muted);
border: 1.5px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.65rem var(--space-3);
color: var(--text-secondary);
font-size: 0.84rem;
outline: none;
cursor: pointer;
transition: border-color var(--ease);
}
.ke-select:focus { border-color: var(--border-focus); }
.ke-select-sm { min-width: 90px; }
.ke-search-btn {
display: flex;
align-items: center;
gap: var(--space-2);
background: var(--accent-teal);
border: none;
border-radius: var(--radius-md);
padding: 0.65rem 1.25rem;
color: #fff;
font-size: 0.86rem;
font-weight: 600;
cursor: pointer;
transition: all var(--ease);
white-space: nowrap;
box-shadow: 0 2px 8px rgba(46,158,158,0.25);
}
.ke-search-btn:hover:not(:disabled) {
background: var(--accent-teal-dk);
transform: translateY(-1px);
}
.ke-search-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.ke-latency-badge {
display: inline-flex;
align-items: center;
gap: var(--space-1);
font-size: 0.72rem;
color: var(--status-success-txt);
background: var(--status-success-bg);
border: 1px solid #A7F3D0;
padding: 0.2rem 0.6rem;
border-radius: var(--radius-full);
margin-bottom: var(--space-3);
}
.ke-error-box {
background: var(--status-error-bg);
border: 1px solid #FECDD3;
border-radius: var(--radius-md);
color: var(--status-error-txt);
padding: var(--space-3) var(--space-4);
font-size: 0.85rem;
margin-bottom: var(--space-3);
}
/* Search results */
.search-results-list {
display: flex;
flex-direction: column;
gap: var(--space-3);
max-height: 520px;
overflow-y: auto;
padding-right: var(--space-1);
}
.search-result-card {
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: var(--space-4);
transition: border-color var(--ease), box-shadow var(--ease);
}
.search-result-card:hover {
border-color: var(--accent-teal-lt);
box-shadow: var(--shadow-sm);
}
.src-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-2);
margin-bottom: var(--space-3);
}
.src-category-tag {
font-size: 0.68rem;
font-weight: 700;
border: 1px solid;
border-radius: var(--radius-full);
padding: 0.1rem 0.55rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.src-path-tag {
font-family: var(--font-mono);
font-size: 0.7rem;
color: var(--text-muted);
background: var(--bg-card);
border: 1px solid var(--border-color);
padding: 0.1rem 0.4rem;
border-radius: var(--radius-sm);
}
.src-score-bar-wrap {
display: flex;
align-items: center;
gap: var(--space-2);
min-width: 110px;
}
.src-score-label {
font-size: 0.72rem;
font-family: var(--font-mono);
color: var(--text-muted);
min-width: 30px;
text-align: right;
}
.src-score-bg {
flex: 1;
height: 5px;
background: var(--bg-card);
border-radius: 3px;
overflow: hidden;
}
.src-score-fill {
height: 100%;
border-radius: 3px;
transition: width 0.3s;
}
.src-content {
font-family: var(--font-mono);
font-size: 0.78rem;
color: var(--text-secondary);
background: #fff;
border: 1px solid var(--border-color);
padding: var(--space-3);
border-radius: var(--radius-sm);
white-space: pre-wrap;
word-break: break-word;
max-height: 120px;
overflow-y: auto;
line-height: 1.5;
}
/* Memory inspector */
.memory-stats-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: var(--space-4);
margin-bottom: var(--space-5);
}
.memory-stat-card {
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: var(--space-5);
}
.msc-label {
font-size: 0.72rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: var(--space-2);
font-weight: 600;
}
.msc-value {
font-family: var(--font-display);
font-size: 1.6rem;
font-weight: 800;
color: var(--accent-teal-dk);
line-height: 1.2;
}
.msc-sub {
font-size: 0.7rem;
color: var(--text-muted);
margin-top: var(--space-1);
}
/* Info box */
.ke-info-box {
display: flex;
gap: var(--space-3);
align-items: flex-start;
background: var(--status-info-bg);
border: 1px solid #BFDBFE;
border-radius: var(--radius-md);
padding: var(--space-4);
font-size: 0.83rem;
color: var(--status-info-txt);
line-height: 1.5;
}
.ke-info-box code {
font-family: var(--font-mono);
background: #DBEAFE;
padding: 0.05rem 0.3rem;
border-radius: 3px;
font-size: 0.78rem;
}
/* Category legend */
.ke-category-legend { margin-top: var(--space-5); }
.ke-legend-title {
font-size: 0.72rem;
font-weight: 700;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: var(--space-3);
}
.ke-legend-grid { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-5); }
.ke-legend-item { display: flex; align-items: center; gap: var(--space-2); font-size: 0.78rem; color: var(--text-secondary); }
.ke-legend-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
/* Conversations */
.conv-list { display: flex; flex-direction: column; gap: var(--space-2); max-height: 480px; overflow-y: auto; }
.conv-item {
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: var(--space-4);
cursor: pointer;
transition: all var(--ease);
}
.conv-item:hover { border-color: var(--border-hover); background: var(--bg-card); }
.conv-item.selected { border-color: var(--accent-teal); background: #E6F7F7; }
.conv-item-header { display: flex; align-items: center; gap: var(--space-2); margin-bottom: var(--space-1); }
.conv-idx { font-size: 0.7rem; color: var(--text-muted); font-family: var(--font-mono); min-width: 24px; }
.conv-summary { flex-grow: 1; font-size: 0.88rem; color: var(--text-primary); font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.conv-count {
font-size: 0.7rem;
color: var(--accent-teal-dk);
background: #E6F7F7;
border: 1px solid var(--accent-teal-lt);
padding: 0.1rem 0.5rem;
border-radius: var(--radius-full);
white-space: nowrap;
}
.conv-item-meta { display: flex; gap: var(--space-4); }
.conv-id { font-family: var(--font-mono); font-size: 0.68rem; color: var(--text-muted); }
.conv-time { font-size: 0.7rem; color: var(--text-muted); }
/* Tool catalog */
.tool-catalog-grid { display: flex; flex-direction: column; gap: var(--space-3); }
.tool-card {
display: flex;
align-items: center;
gap: var(--space-4);
background: var(--bg-muted);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: var(--space-4);
transition: all var(--ease);
}
.tool-card:hover { border-color: var(--border-hover); background: var(--bg-card); box-shadow: var(--shadow-sm); }
.tc-icon-wrap {
width: 38px;
height: 38px;
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
border: 1px solid;
}
.tc-body { flex-grow: 1; }
.tc-name { font-family: var(--font-mono); font-size: 0.85rem; font-weight: 600; color: var(--text-primary); margin-bottom: 0.15rem; }
.tc-desc { font-size: 0.78rem; color: var(--text-secondary); }
.tc-badge {
font-family: var(--font-mono);
font-size: 0.68rem;
color: var(--status-success-txt);
background: var(--status-success-bg);
border: 1px solid #A7F3D0;
padding: 0.15rem 0.5rem;
border-radius: var(--radius-full);
white-space: nowrap;
}
/* Shared helpers */
.ke-empty {
color: var(--text-muted);
font-size: 0.85rem;
text-align: center;
padding: var(--space-12) var(--space-4);
border: 2px dashed var(--border-color);
border-radius: var(--radius-lg);
background: var(--bg-muted);
}
.ke-spinner-row {
display: flex;
align-items: center;
gap: var(--space-3);
color: var(--text-muted);
font-size: 0.85rem;
padding: var(--space-8) 0;
}
.ke-refresh-btn {
display: flex;
align-items: center;
gap: var(--space-2);
background: #fff;
border: 1.5px solid var(--border-color);
border-radius: var(--radius-md);
padding: 0.35rem 0.75rem;
color: var(--text-secondary);
font-size: 0.78rem;
cursor: pointer;
transition: all var(--ease);
}
.ke-refresh-btn:hover { border-color: var(--accent-teal); color: var(--accent-teal-dk); }
/* Text color utilities */
.text-teal { color: var(--accent-teal); }
.text-teal-dk { color: var(--accent-teal-dk); }
.text-green { color: var(--accent-green); }
.text-amber { color: var(--accent-amber); }
.text-rose { color: var(--accent-rose); }
.text-muted { color: var(--text-muted); }
/* API endpoint list */
.api-endpoint-item {
font-family: var(--font-mono);
font-size: 0.8rem;
padding: 0.4rem 0.75rem;
background: var(--bg-muted);
border-radius: var(--radius-sm);
border-left: 3px solid var(--accent-teal);
color: var(--text-secondary);
margin-bottom: var(--space-2);
}
/* Module chips */
.module-chip {
display: inline-flex;
align-items: center;
font-size: 0.78rem;
padding: 0.3rem 0.65rem;
background: #fff;
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-secondary);
font-family: var(--font-mono);
}
/* RAG context badges on chat */
.rag-context-strip {
display: flex;
flex-wrap: wrap;
gap: var(--space-1);
margin-top: var(--space-2);
}
.rag-badge {
font-size: 0.65rem;
padding: 0.1rem 0.4rem;
background: #E6F7F7;
border: 1px solid var(--accent-teal-lt);
color: var(--accent-teal-dk);
border-radius: var(--radius-full);
font-weight: 500;
}
/* Responsive */
@media (max-width: 900px) {
.dashboard-grid { grid-template-columns: 1fr; }
.sidebar-panel { position: relative; top: 0; max-height: 280px; }
.main-content { padding: var(--space-4); }
}
@media (max-width: 640px) {
.app-header { padding: 0 var(--space-4); }
.brand-title { font-size: 0.95rem; }
.summary-grid { grid-template-columns: 1fr; }
.tech-cards-grid { grid-template-columns: 1fr 1fr; }
.chat-container { height: 500px; }
.dashboard-header { flex-direction: column; align-items: stretch; }
}