chore: dashboard layout polish + sqlite_vec dependency

* Dashboard / Layout / index CSS — flexbox cleanup so the sidebar
  scrolls independently and dashboard panels fill available height
  without overflowing the viewport (min-height: 0 on the flex
  ancestors that were collapsing).
* pyproject.toml — add sqlite_vec runtime dep (groundwork for an
  embeddings-backed feature ANTI is wiring up separately).
This commit is contained in:
2026-04-27 10:12:55 -04:00
parent 828165783e
commit 94a0b46fb9
4 changed files with 33 additions and 6 deletions

View File

@@ -2,6 +2,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 24px; gap: 24px;
min-height: 100%;
} }
/* Page header */ /* Page header */
@@ -219,6 +220,7 @@
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 0;
} }
.section-header { .section-header {
@@ -258,12 +260,24 @@
display: grid; display: grid;
grid-template-columns: 2fr 1fr; grid-template-columns: 2fr 1fr;
gap: 16px; gap: 16px;
flex: 1;
min-height: 0;
}
.dash-grid > .logs-section .logs-table-container {
flex: 1;
max-height: none;
} }
.dash-side { .dash-side {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 16px; gap: 16px;
min-height: 0;
}
.dash-side > .logs-section {
flex: 1;
} }
/* Attacker/siege rows */ /* Attacker/siege rows */
@@ -363,6 +377,7 @@
overflow-x: auto; overflow-x: auto;
overflow-y: auto; overflow-y: auto;
max-height: 420px; max-height: 420px;
min-height: 0;
} }
.logs-table { .logs-table {

View File

@@ -56,10 +56,16 @@
} }
.sidebar-nav { .sidebar-nav {
flex-grow: 1; flex: 1 1 0;
min-height: 0;
overflow-y: auto;
padding: 20px 0; padding: 20px 0;
} }
.sidebar-footer {
flex-shrink: 0;
}
.nav-item { .nav-item {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@@ -211,7 +211,12 @@ input:focus {
} }
/* ── Scrollbar ─────────────────────────────────── */ /* ── Scrollbar ─────────────────────────────────── */
::-webkit-scrollbar { width: 8px; height: 8px; } * {
::-webkit-scrollbar-track { background: var(--bg); } scrollbar-width: thin;
::-webkit-scrollbar-thumb { background: var(--panel); border: 1px solid var(--border); } scrollbar-color: var(--accent) transparent;
::-webkit-scrollbar-thumb:hover { background: var(--border); } }
::-webkit-scrollbar { width: 4px; height: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--accent); border: none; border-radius: 2px; opacity: 0.6; }
::-webkit-scrollbar-thumb:hover { background: var(--accent); opacity: 1; }
::-webkit-scrollbar-corner { background: transparent; }

View File

@@ -38,7 +38,8 @@ dependencies = [
"python-multipart>=0.0.20", "python-multipart>=0.0.20",
"httpx>=0.28.1", "httpx>=0.28.1",
"requests>=2.33.1", "requests>=2.33.1",
"slowapi>=0.1.9" "slowapi>=0.1.9",
"sqlite_vec>=0.1.9"
] ]
[project.optional-dependencies] [project.optional-dependencies]