diff --git a/plugins/llm-security/playground/llm-security-playground.html b/plugins/llm-security/playground/llm-security-playground.html
index 2bef55f..d5e3c14 100644
--- a/plugins/llm-security/playground/llm-security-playground.html
+++ b/plugins/llm-security/playground/llm-security-playground.html
@@ -43,24 +43,24 @@
@@ -6707,13 +6631,12 @@
const orgName = (store.state.shared.organization && store.state.shared.organization.name) || '';
const isReturning = !!orgName;
- const headerHtml = (
- ''
- );
+ const headerHtml = renderPageShell({
+ eyebrow: (isReturning ? 'RE-ONBOARDING' : 'ONBOARDING') + ' · ' + allCompleteCount + ' av ' + ONBOARDING_GROUPS.length + ' grupper komplette',
+ title: isReturning ? 'Oppdater fellesfeltene' : 'Velkommen — la oss sette opp llm-security for ' + (orgName || 'din virksomhet'),
+ lede: 'Disse 5 gruppene er felles state. De forhåndsutfyller alle command-skjemaer for nye prosjekter, så du slipper å re-skrive samme info.',
+ meta: ['Gruppe ' + (ONBOARDING_GROUPS.findIndex(function (g) { return g.id === group.id; }) + 1) + ' av ' + ONBOARDING_GROUPS.length, group.title || group.id]
+ }, '');
const stepNavHtml = (
'' +
@@ -6880,6 +6803,12 @@
? 'Velg arbeidsspor eller utforsk eksisterende prosjekter. Felles state er aktiv og forhåndsutfyller skjemaer.'
: 'Single-file sikkerhetsskanning + auditing for Claude Code-prosjekter. Start med onboarding for å aktivere felles state.',
verdict: 'n-a',
+ hero: true,
+ meta: [
+ 'Plugin v7.5.0',
+ projects.length + ' prosjekt' + (projects.length === 1 ? '' : 'er'),
+ CATALOG.commands.length + ' kommandoer'
+ ],
keyStats: [
{ label: 'PROSJEKTER', value: projects.length },
{ label: 'AKTIVE RAPPORTER', value: activeReportCount },
@@ -6977,6 +6906,11 @@
title: 'Command-katalog',
lede: 'Alle ' + total + ' kommandoer gruppert på kategori. Bygg pipeline-strenger uten et aktivt prosjekt.',
verdict: 'n-a',
+ meta: [
+ total + ' kommandoer',
+ reportCount + ' rapport-produserende',
+ toolCount + ' verktøy'
+ ],
keyStats: [
{ label: 'TOTALT', value: total },
{ label: 'RAPPORT-KOMMANDOER', value: reportCount },
@@ -7159,6 +7093,11 @@
title: project.name,
lede: project.description || '',
verdict: inferProjectVerdict(project),
+ meta: [
+ 'Target: ' + (project.target || project.target_path || '—'),
+ 'Sist oppdatert: ' + inferProjectLastUpdated(project),
+ (project.scenario || project.template || 'standard')
+ ],
keyStats: [
{ label: 'RAPPORTER', value: reportFilled + '/' + reportTotal },
{ label: 'SIST OPPDATERT', value: inferProjectLastUpdated(project) },
@@ -7206,17 +7145,30 @@
return '
' + items + '
';
}
+ /**
+ * Render page-shell — DS Tier 3 page__header-klyngen brukt på alle 4 overflater:
+ * - onboarding: page__eyebrow="ONBOARDING · n av 5 grupper komplette"
+ * - home: page__eyebrow="HJEM" (m/ hero-modifier for editorial type-hierarki)
+ * - catalog: page__eyebrow="KATALOG"
+ * - project: page__eyebrow="PROSJEKT ·
"
+ * Pluss alle 18 rapport-renderere (eyebrow per archetype).
+ * opts: { eyebrow, title, lede, meta:[], verdict, hero, keyStats }
+ */
function renderPageShell(opts, bodyHtml) {
opts = opts || {};
const eyebrow = opts.eyebrow ? '' + escapeHtml(opts.eyebrow) + '' : '';
const title = '' + escapeHtml(opts.title || '') + '
';
const lede = opts.lede ? '' + escapeHtml(opts.lede) + '
' : '';
+ const meta = (opts.meta && opts.meta.length)
+ ? '' + opts.meta.map(function (m) { return '' + escapeHtml(m) + ''; }).join('') + '
'
+ : '';
const verdict = (opts.verdict && opts.verdict !== 'n-a') ? renderVerdictPill(opts.verdict) : '';
const aside = verdict ? '' : '';
const stats = renderKeyStatsGrid(opts.keyStats);
+ const heroClass = opts.hero ? ' page__header--hero' : '';
return (
- '