diff --git a/src/psyc/cockpit/static/cockpit.css b/src/psyc/cockpit/static/cockpit.css
index bf2f1fa..fdf937d 100644
--- a/src/psyc/cockpit/static/cockpit.css
+++ b/src/psyc/cockpit/static/cockpit.css
@@ -10,6 +10,7 @@
--green: #4ade80;
--amber: #fbbf24;
--red: #f87171;
+ --font-display: "Space Grotesk", ui-sans-serif, system-ui, sans-serif;
}
* { box-sizing: border-box; }
@@ -25,6 +26,13 @@ a { color: #93c5fd; text-decoration: none; }
a:hover { text-decoration: underline; }
code { background: var(--panel-2); padding: 1px 5px; border-radius: 3px; }
+/* Space Grotesk for headings + chrome (neuronetz family type); data stays monospace */
+h1, h2, h3,
+.brand-sub, .nav a, .family-tag, .family-hub, .bot-name { font-family: var(--font-display); }
+
+/* one-line purpose statement under a page title */
+.page-intro { color: var(--muted); font-size: 13px; line-height: 1.55; margin: 4px 0 18px; max-width: 74ch; }
+
.topbar {
display: flex; justify-content: space-between; align-items: center;
padding: 10px 24px;
@@ -40,7 +48,7 @@ code { background: var(--panel-2); padding: 1px 5px; border-radius: 3px; }
height: 48px; width: 160px;
object-fit: cover; object-position: center;
display: block;
- filter: drop-shadow(0 0 8px var(--accent-glow));
+ filter: drop-shadow(0 0 3px var(--accent-glow)) drop-shadow(0 0 11px var(--accent-glow));
}
.brand-sub {
color: var(--muted); font-size: 11px;
@@ -50,6 +58,16 @@ code { background: var(--panel-2); padding: 1px 5px; border-radius: 3px; }
.nav a { margin-left: 18px; color: var(--muted); }
.nav a:hover { color: var(--text); }
+/* neuronetz family framing — right of the topbar */
+.family { display: flex; align-items: center; gap: 14px; }
+.family-tag {
+ font-size: 10px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase;
+ color: var(--accent); background: var(--panel-2);
+ border: 1px solid var(--border); border-radius: 4px; padding: 3px 9px;
+}
+.family-hub { color: var(--muted); font-size: 12px; }
+.family-hub:hover { color: var(--accent); text-decoration: none; }
+
.content { padding: 24px; max-width: 1280px; margin: 0 auto; }
.footer { text-align: center; color: var(--muted); padding: 24px; font-size: 12px; }
diff --git a/src/psyc/cockpit/static/psyc-logo.png b/src/psyc/cockpit/static/psyc-logo.png
index b9ad7b5..90235a6 100644
Binary files a/src/psyc/cockpit/static/psyc-logo.png and b/src/psyc/cockpit/static/psyc-logo.png differ
diff --git a/src/psyc/cockpit/templates/base.html b/src/psyc/cockpit/templates/base.html
index 91c16d4..1996033 100644
--- a/src/psyc/cockpit/templates/base.html
+++ b/src/psyc/cockpit/templates/base.html
@@ -4,6 +4,9 @@
{% block content %}{% endblock %}
diff --git a/src/psyc/cockpit/templates/case_detail.html b/src/psyc/cockpit/templates/case_detail.html
index 829b15b..46ae14e 100644
--- a/src/psyc/cockpit/templates/case_detail.html
+++ b/src/psyc/cockpit/templates/case_detail.html
@@ -8,6 +8,7 @@
▶ case journey
{{ case.summary }}
+ The full record for one case — how Classifyline rated it, what Scoutline observed, the evidence Sealine encrypted, where Routeline may send it, and every ledger entry it produced.
diff --git a/src/psyc/cockpit/templates/cases.html b/src/psyc/cockpit/templates/cases.html
index 9b87880..df8d1eb 100644
--- a/src/psyc/cockpit/templates/cases.html
+++ b/src/psyc/cockpit/templates/cases.html
@@ -6,6 +6,7 @@
Case Queue
{{ total }} case{{ '' if total == 1 else 's' }}
+
Every threat case psyc is tracking — ingested from URLhaus, CISA KEV, and Feodo Tracker, then classified by severity and TLP. The live queue of what the platform currently knows about; click any case to follow it through the pipeline.
{% if not cases %}
No cases yet. Run psyc fetch urlhaus to ingest.
{% else %}
diff --git a/src/psyc/cockpit/templates/journey.html b/src/psyc/cockpit/templates/journey.html
index 7ccfb83..75910af 100644
--- a/src/psyc/cockpit/templates/journey.html
+++ b/src/psyc/cockpit/templates/journey.html
@@ -39,6 +39,7 @@
▶ replay
{{ case.summary }}
+ Watch the case move through psyc's worker mesh — seven bots, each performing one pipeline stage and reporting its real result. The Classifier bot's severity verdict comes from the live fine-tuned model; hit ▶ replay to run it again.
diff --git a/src/psyc/cockpit/templates/ledger.html b/src/psyc/cockpit/templates/ledger.html
index ee7fec6..88923d5 100644
--- a/src/psyc/cockpit/templates/ledger.html
+++ b/src/psyc/cockpit/templates/ledger.html
@@ -6,6 +6,7 @@
Immutable Audit Ledger
{{ total }} entr{{ 'y' if total == 1 else 'ies' }}
+ The append-only audit trail. Every external submission and every policy-blocked route is recorded here — nothing leaves psyc without a row. This is the platform's proof of exactly what happened, when, and to whom.
{% if not entries %}
No ledger entries yet. Run psyc submit <case_id> or psyc demo.
{% else %}
diff --git a/src/psyc/cockpit/templates/train.html b/src/psyc/cockpit/templates/train.html
index 8082194..1ab13f3 100644
--- a/src/psyc/cockpit/templates/train.html
+++ b/src/psyc/cockpit/templates/train.html
@@ -6,6 +6,7 @@
Trainline — Datasets
{{ datasets|length }} dataset{{ '' if datasets|length == 1 else 's' }}
+ Trainline turns reviewed cases into LoRA training data and tracks the fine-tuned adapters built from it — the JSONL datasets below, and the trained adapters with their loss curves further down. The adapter behind the Classifier bot is trained here.
{% if not datasets %}
No datasets yet. Run psyc train-build-all.
{% else %}