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 title %}psyc cockpit{% endblock %} + + + @@ -17,8 +20,11 @@ Cases Ledger Trainline - Health +
+ NN-sc · Security + neuronetz.ai ▸ +
{% 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 @@

{{ 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 %}