{# Mission Control — Theme B root layout. Datadog / Grafana / Vercel-Observability vibe. Dense KPI strip + time-series chart + filterable findings table + agent-status sparklines. Dark theme by default; auto-switches to a light variant via prefers-color-scheme. This template is intentionally self-contained (not extending base.html) so the chrome / typography stays scoped to .mission. Sections (in order): 1. Topbar (brand, scan-id pill, theme switcher, locality) 2. KPI strip — six tiles, each with a sparkline-in-background 3. Body grid (1024px+): - Left: agent panel (per-agent sparklines, click to filter) - Right top: AIVSS / findings-over-time time-series chart - Right bottom: ASI horizontal-bar breakdown 4. Findings table with severity filter chips 5. Status strip (sticky bottom) 6. Drill-down slide-over (right edge, hidden by default) Chart data is injected into a {# ============== TOPBAR ============== #} {# ============== KPI STRIP ============== #} {% include "dashboard/mission/_kpi_strip.html" %} {# ============== BODY GRID ============== #}
{% include "dashboard/mission/_agent_sparkline_list.html" %} {% include "dashboard/mission/_aivss_timeseries.html" %}
{# ============== FINDINGS TABLE ============== #} {% include "dashboard/mission/_findings_table.html" %} {# ============== STATUS STRIP ============== #} {# ============== DRILL-DOWN SLIDE-OVER ============== #} {% include "dashboard/mission/_drilldown_slideover.html" %} {# Chart data island. mission_charts.js parses this on DOMContentLoaded and hands it to Chart.js. Using a JSON-script island (rather than a data-* attribute) avoids Jinja-escaping pitfalls when finding summaries contain quotes or apostrophes. #} {# Live SSE patcher — mirrors the editorial dashboard's data-live update pattern so the same /scans//live stream drives this theme too. #}