diff --git a/shared/playground-design-system/README.md b/shared/playground-design-system/README.md
index 97f7a60..3fafd12 100644
--- a/shared/playground-design-system/README.md
+++ b/shared/playground-design-system/README.md
@@ -20,6 +20,7 @@ shared/
│ ├── base.css # Reset, typography, primitives, focus, print
│ ├── components.css # Tier 1: radar, matrix, findings-browser, critique-card, wizard, live-meter
│ ├── components-tier2.css # Tier 2: decision-tree, traffic-lights, diff-review, treemap, distribution, command-pipeline, pyramide, pipeline-cockpit, verdict-pill+risk-meter, codepoint-reveal, small-multiples, OWASP badges
+│ ├── components-tier3.css # Tier 3: pair-before-after, AI Act timeline, 3-track entry, FRIA rights-matrix, capability-matrix, parallel-agent-status, ErrorSummary, GuidePanel
│ ├── print.css # A4 print stylesheet with B/W severity patterns
│ └── schemas/ # Cross-plugin JSON schemas
│ ├── finding.schema.json # Used by llm-security, config-audit, ultraplan-review, ms-ai-review
@@ -108,6 +109,21 @@ See `tokens.css` for full reference. Highlights:
Plus app-shell primitives: `.app-header`, `.sidepanel`, `.scrim`, `.theme-toggle`.
+### Tier 3 (`components-tier3.css`)
+
+Critical components for ms-ai-architect Playground v3 plus universal Aksel patterns. Authored 2026-05-02 in Claude Code (not via claude.ai/design — visual coherence verified against Tier 1+2 in `playground-examples/tier3-preview.html`).
+
+| Component | Class prefix | Used by |
+|---|---|---|
+| Inherent + residual pair | `.pair-before-after` | ms-ai ROS before/after, DPIA, AI Act mitigations, OKR check-ins |
+| AI Act compliance-tidslinje | `.aiact-timeline`, `.aiact-countdown` | ms-ai-architect classify flow + dashboard |
+| 3-track entry | `.tracks` | All plugins — entry-level UX choice (Guide/Explore/Expert) |
+| FRIA rights-matrix | `.rights-matrix` | ms-ai-architect FRIA (Art. 27, 12 EU Charter rights × impact) |
+| Capability-matrix | `.capability-matrix` | ms-ai-architect license × kapabilitet mapping |
+| Parallel-agent-status | `.agent-grid`, `.agent-card` | ms-ai utredning multi-worker, ultraplan multi-wave execute |
+| ErrorSummary | `.error-summary` | All plugins — Aksel/GOV.UK form-validation pattern |
+| GuidePanel | `.guide-panel` | All plugins — Aksel friendly inline guidance with optional CTA |
+
### Tier 2 (`components-tier2.css`)
| Component | Class prefix | Used by |
diff --git a/shared/playground-design-system/base.css b/shared/playground-design-system/base.css
index 6b7efa0..e82f2d8 100644
--- a/shared/playground-design-system/base.css
+++ b/shared/playground-design-system/base.css
@@ -170,9 +170,12 @@ button { font-family: inherit; }
.inline-message--info { border-color: var(--color-state-info); background: #EAF3FB; color: #08416B; }
.inline-message--success { border-color: var(--color-state-success); background: var(--color-severity-low-soft); color: var(--color-severity-low-on); }
.inline-message--warning { border-color: var(--color-state-warning); background: var(--color-severity-medium-soft); color: var(--color-severity-medium-on); }
-.inline-message--error { border-color: var(--color-severity-critical); background: var(--color-severity-critical-soft); color: var(--color-severity-critical-on); }
+.inline-message--error { border-color: var(--color-severity-critical); background: var(--color-surface); color: var(--color-text-primary); }
+.inline-message--error strong, .inline-message--error b { color: var(--color-severity-critical); }
-[data-theme="dark"] .inline-message--info { background: #0E2A3F; color: #9CC0EA; }
+[data-theme="dark"] .inline-message--info { background: #0E2A3F; color: #9CC0EA; }
+[data-theme="dark"] .inline-message--error { background: var(--color-surface); color: var(--color-text-primary); }
+[data-theme="dark"] .inline-message--error strong, [data-theme="dark"] .inline-message--error b { color: #F09095; }
/* ---------- Form controls ---------- */
.input, .select, .textarea {
diff --git a/shared/playground-design-system/components-tier3.css b/shared/playground-design-system/components-tier3.css
new file mode 100644
index 0000000..52811d2
--- /dev/null
+++ b/shared/playground-design-system/components-tier3.css
@@ -0,0 +1,716 @@
+/* =============================================================================
+ components-tier3.css — Tier 3 components (Phase 2)
+ Critical components for ms-ai-architect Playground v3 + universal Aksel patterns.
+ 19. Inherent + residual pair (before/after matrix transition)
+ 20. AI Act compliance-tidslinje (4-milepel timeline + countdown)
+ 21. 3-track entry (Guide/Explore/Expert — carried from Playground v2)
+ 22. FRIA rights-matrix (12 EU Charter rights × impact level)
+ 23. Capability-matrix (license × kapabilitet — available/cost/missing/conditional)
+ 24. Parallel-agent-status panel (multi-worker status grid)
+ 25. ErrorSummary (Aksel/GOV.UK form error pattern)
+ 26. GuidePanel (Aksel friendly inline guidance)
+ ============================================================================= */
+
+/* =============================================================================
+ 19. INHERENT + RESIDUAL PAIR
+ Used by: ROS (before/after mitigation), DPIA, AI Act mitigations, OKR check-ins
+ Pattern: two cells/scores side-by-side with arrow showing transition.
+ ============================================================================= */
+.pair-before-after {
+ display: grid;
+ grid-template-columns: 1fr auto 1fr;
+ gap: var(--space-4);
+ align-items: center;
+}
+.pair-before-after__cell {
+ background: var(--color-surface);
+ border: 1px solid var(--color-border-subtle);
+ border-radius: var(--radius-md);
+ padding: var(--space-3) var(--space-4);
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+}
+.pair-before-after__cell-label {
+ font-size: var(--font-size-xs);
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ color: var(--color-text-tertiary);
+ font-weight: var(--font-weight-semibold);
+}
+.pair-before-after__cell-value {
+ font-size: var(--font-size-2xl);
+ font-weight: var(--font-weight-bold);
+ font-variant-numeric: tabular-nums;
+ letter-spacing: -0.02em;
+ line-height: 1;
+}
+.pair-before-after__cell-meta {
+ font-size: var(--font-size-xs);
+ color: var(--color-text-secondary);
+}
+.pair-before-after__cell--severity-low { border-left: 4px solid var(--color-severity-low); }
+.pair-before-after__cell--severity-medium { border-left: 4px solid var(--color-severity-medium); }
+.pair-before-after__cell--severity-high { border-left: 4px solid var(--color-severity-high); }
+.pair-before-after__cell--severity-critical { border-left: 4px solid var(--color-severity-critical); }
+.pair-before-after__cell--severity-extreme { border-left: 4px solid var(--color-severity-extreme); }
+
+.pair-before-after__arrow {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: var(--font-size-2xl);
+ color: var(--color-text-tertiary);
+ line-height: 1;
+ user-select: none;
+}
+.pair-before-after__arrow::before { content: "→"; font-family: var(--font-family-sans); }
+.pair-before-after__arrow--down::before { content: "↓"; }
+
+.pair-before-after__delta {
+ display: inline-flex;
+ align-items: baseline;
+ gap: 4px;
+ font-family: var(--font-family-mono);
+ font-size: var(--font-size-xs);
+ padding: 2px 8px;
+ border-radius: var(--radius-pill);
+ margin-top: 2px;
+}
+.pair-before-after__delta--improved {
+ background: var(--color-severity-low-soft);
+ color: var(--color-severity-low-on);
+}
+.pair-before-after__delta--worsened {
+ background: var(--color-severity-critical-soft);
+ color: var(--color-severity-critical-on);
+}
+
+@media (max-width: 640px) {
+ .pair-before-after { grid-template-columns: 1fr; }
+ .pair-before-after__arrow { transform: rotate(90deg); }
+}
+
+/* =============================================================================
+ 20. AI ACT COMPLIANCE-TIDSLINJE
+ Horizontal timeline with 4 fixed EU AI Act milestones (2025-02-02, 2025-08-02,
+ 2026-08-02, 2027-08-02) plus a "today" marker and per-system countdown chips.
+ ============================================================================= */
+.aiact-timeline {
+ position: relative;
+ padding: var(--space-8) 0 var(--space-4);
+ margin: var(--space-4) 0;
+}
+.aiact-timeline__track {
+ position: relative;
+ height: 4px;
+ background: var(--color-border-subtle);
+ border-radius: var(--radius-pill);
+ margin: 0 12px;
+}
+.aiact-timeline__progress {
+ position: absolute;
+ top: 0; bottom: 0; left: 0;
+ background: var(--color-primary-500);
+ border-radius: var(--radius-pill);
+ /* width set inline based on today vs milestone span */
+}
+.aiact-timeline__milestone {
+ position: absolute;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ /* left set inline as percentage based on date span */
+}
+.aiact-timeline__dot {
+ width: 16px; height: 16px;
+ border-radius: 50%;
+ background: var(--color-surface);
+ border: 3px solid var(--color-border-moderate);
+ cursor: pointer;
+ transition: transform var(--duration-fast) var(--ease-default),
+ border-color var(--duration-fast) var(--ease-default);
+}
+.aiact-timeline__dot:hover { transform: scale(1.15); }
+.aiact-timeline__milestone[data-state="passed"] .aiact-timeline__dot {
+ background: var(--color-primary-500);
+ border-color: var(--color-primary-500);
+}
+.aiact-timeline__milestone[data-state="active"] .aiact-timeline__dot {
+ background: var(--color-severity-critical);
+ border-color: var(--color-severity-critical);
+ box-shadow: 0 0 0 4px var(--color-severity-critical-soft);
+}
+.aiact-timeline__milestone[data-state="upcoming"] .aiact-timeline__dot {
+ background: var(--color-surface);
+ border-color: var(--color-border-strong);
+}
+
+.aiact-timeline__today {
+ position: absolute;
+ top: -6px; bottom: -6px;
+ width: 2px;
+ background: var(--color-text-primary);
+ /* left set inline based on current date */
+}
+.aiact-timeline__today::after {
+ content: "I dag";
+ position: absolute;
+ top: -22px;
+ left: 50%;
+ transform: translateX(-50%);
+ font-size: 10px;
+ font-family: var(--font-family-mono);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-text-primary);
+ background: var(--color-bg);
+ padding: 2px 6px;
+ border-radius: var(--radius-sm);
+ white-space: nowrap;
+}
+
+.aiact-timeline__label {
+ position: absolute;
+ top: 22px; left: 50%;
+ transform: translateX(-50%);
+ text-align: center;
+ white-space: nowrap;
+ font-size: 11px;
+ font-family: var(--font-family-mono);
+ color: var(--color-text-secondary);
+}
+.aiact-timeline__label-date { font-weight: var(--font-weight-semibold); display: block; }
+.aiact-timeline__label-name { color: var(--color-text-tertiary); display: block; margin-top: 1px; max-width: 140px; white-space: normal; line-height: 1.2; }
+
+.aiact-countdown {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ padding: 4px 10px;
+ font-size: var(--font-size-xs);
+ font-family: var(--font-family-mono);
+ border-radius: var(--radius-pill);
+ background: var(--color-bg-soft);
+ border: 1px solid var(--color-border-subtle);
+}
+.aiact-countdown__days {
+ font-weight: var(--font-weight-bold);
+ font-variant-numeric: tabular-nums;
+}
+.aiact-countdown[data-urgency="urgent"] { background: var(--color-severity-critical-soft); color: var(--color-severity-critical-on); border-color: transparent; }
+.aiact-countdown[data-urgency="soon"] { background: var(--color-severity-medium-soft); color: var(--color-severity-medium-on); border-color: transparent; }
+.aiact-countdown[data-urgency="distant"] { background: var(--color-severity-low-soft); color: var(--color-severity-low-on); border-color: transparent; }
+
+/* =============================================================================
+ 21. 3-TRACK ENTRY (Guide / Explore / Expert)
+ Carried forward from Playground v2 — the most-validated UX pattern in our
+ fleet. Three large cards as the very first decision the user makes.
+ ============================================================================= */
+.tracks {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: var(--space-5);
+ margin: var(--space-8) 0;
+}
+.tracks__card {
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-3);
+ padding: var(--space-6);
+ background: var(--color-surface);
+ border: 1px solid var(--color-border-subtle);
+ border-radius: var(--radius-lg);
+ cursor: pointer;
+ transition: border-color var(--duration-fast) var(--ease-default),
+ transform var(--duration-fast) var(--ease-default),
+ box-shadow var(--duration-fast) var(--ease-default);
+ text-decoration: none;
+ color: inherit;
+ position: relative;
+ overflow: hidden;
+}
+.tracks__card::before {
+ content: "";
+ position: absolute;
+ top: 0; left: 0; right: 0;
+ height: 4px;
+ background: var(--color-border-moderate);
+ transition: background var(--duration-fast) var(--ease-default);
+}
+.tracks__card:hover {
+ border-color: var(--color-border-strong);
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-md);
+}
+.tracks__card--guided::before { background: var(--color-state-success); }
+.tracks__card--explore::before { background: var(--color-primary-500); }
+.tracks__card--expert::before { background: var(--color-text-primary); }
+
+.tracks__card-icon {
+ width: 40px; height: 40px;
+ border-radius: var(--radius-md);
+ background: var(--color-bg-soft);
+ display: flex; align-items: center; justify-content: center;
+ color: var(--color-text-secondary);
+}
+.tracks__card-title {
+ font-size: var(--font-size-lg);
+ font-weight: var(--font-weight-semibold);
+ margin: 0;
+}
+.tracks__card-desc {
+ font-size: var(--font-size-sm);
+ color: var(--color-text-secondary);
+ line-height: var(--line-height-snug);
+ margin: 0;
+}
+.tracks__card-meta {
+ margin-top: auto;
+ padding-top: var(--space-3);
+ display: flex; justify-content: space-between; align-items: baseline;
+ font-size: var(--font-size-xs);
+ color: var(--color-text-tertiary);
+ font-family: var(--font-family-mono);
+}
+.tracks__card-cta {
+ font-family: var(--font-family-sans);
+ font-weight: var(--font-weight-medium);
+ color: var(--color-text-primary);
+}
+
+@media (max-width: 880px) {
+ .tracks { grid-template-columns: 1fr; }
+}
+
+/* =============================================================================
+ 22. FRIA RIGHTS-MATRIX
+ 12 EU Charter rights × impact level. Long left labels, compact right cells.
+ Each cell shows checkmark + severity color when right is impacted.
+ ============================================================================= */
+.rights-matrix {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 1px;
+ background: var(--color-border-subtle);
+ border: 1px solid var(--color-border-subtle);
+ border-radius: var(--radius-md);
+ overflow: hidden;
+}
+.rights-matrix__head,
+.rights-matrix__row {
+ display: grid;
+ grid-template-columns: 1fr repeat(5, 64px);
+ background: var(--color-surface);
+}
+.rights-matrix__head {
+ background: var(--color-bg-soft);
+}
+.rights-matrix__head-cell,
+.rights-matrix__name,
+.rights-matrix__cell {
+ padding: 10px 12px;
+ font-size: var(--font-size-sm);
+ display: flex;
+ align-items: center;
+}
+.rights-matrix__head-cell {
+ font-size: var(--font-size-xs);
+ font-weight: var(--font-weight-semibold);
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: var(--color-text-secondary);
+ justify-content: center;
+}
+.rights-matrix__head-cell--name { justify-content: flex-start; }
+.rights-matrix__name {
+ font-weight: var(--font-weight-medium);
+ color: var(--color-text-primary);
+}
+.rights-matrix__name-meta {
+ display: block;
+ font-size: var(--font-size-xs);
+ color: var(--color-text-tertiary);
+ font-weight: var(--font-weight-regular);
+ margin-top: 2px;
+}
+.rights-matrix__cell {
+ justify-content: center;
+ font-family: var(--font-family-mono);
+ font-size: var(--font-size-sm);
+ font-weight: var(--font-weight-semibold);
+ font-variant-numeric: tabular-nums;
+ color: var(--color-text-tertiary);
+ border-left: 1px solid var(--color-border-subtle);
+}
+.rights-matrix__cell[data-impact="0"]::before { content: "—"; color: var(--color-text-tertiary); }
+.rights-matrix__cell[data-impact="1"] { background: var(--color-severity-low-soft); color: var(--color-severity-low-on); }
+.rights-matrix__cell[data-impact="2"] { background: var(--color-severity-medium-soft); color: var(--color-severity-medium-on); }
+.rights-matrix__cell[data-impact="3"] { background: var(--color-severity-high-soft); color: var(--color-severity-high-on); }
+.rights-matrix__cell[data-impact="4"] { background: var(--color-severity-critical-soft); color: var(--color-severity-critical-on); }
+.rights-matrix__cell[data-impact="5"] { background: var(--color-severity-critical); color: var(--color-severity-critical-on); }
+
+@media (max-width: 720px) {
+ .rights-matrix__head,
+ .rights-matrix__row { grid-template-columns: 1fr repeat(5, 44px); }
+ .rights-matrix__head-cell,
+ .rights-matrix__cell { padding: 8px 6px; font-size: var(--font-size-xs); }
+}
+
+/* =============================================================================
+ 23. CAPABILITY-MATRIX
+ Rows = capabilities (e.g. "Generate text via M365 Chat"), columns = licenses
+ (E3, E5, Copilot, etc.). Cells use one of four states with explicit icon +
+ color so meaning never depends solely on color.
+ ============================================================================= */
+.capability-matrix {
+ display: grid;
+ gap: 1px;
+ background: var(--color-border-subtle);
+ border: 1px solid var(--color-border-subtle);
+ border-radius: var(--radius-md);
+ overflow: hidden;
+ font-size: var(--font-size-sm);
+}
+.capability-matrix__head,
+.capability-matrix__row {
+ display: grid;
+ background: var(--color-surface);
+ /* grid-template-columns set inline based on license count */
+}
+.capability-matrix__head { background: var(--color-bg-soft); }
+.capability-matrix__head-cell,
+.capability-matrix__name,
+.capability-matrix__cell {
+ padding: 10px 12px;
+ display: flex;
+ align-items: center;
+ gap: 6px;
+}
+.capability-matrix__head-cell {
+ font-size: var(--font-size-xs);
+ font-weight: var(--font-weight-semibold);
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: var(--color-text-secondary);
+ justify-content: center;
+}
+.capability-matrix__head-cell--name { justify-content: flex-start; }
+.capability-matrix__name {
+ font-weight: var(--font-weight-medium);
+ border-right: 1px solid var(--color-border-subtle);
+}
+.capability-matrix__cell {
+ justify-content: center;
+ font-family: var(--font-family-mono);
+ font-size: var(--font-size-md);
+ border-left: 1px solid var(--color-border-subtle);
+}
+.capability-matrix__cell-icon {
+ font-style: normal;
+ width: 22px; height: 22px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ font-size: 13px;
+ font-weight: var(--font-weight-bold);
+}
+.capability-matrix__cell[data-status="available"] { background: var(--color-severity-low-soft); }
+.capability-matrix__cell[data-status="available"] .capability-matrix__cell-icon { background: var(--color-severity-low); color: #fff; }
+.capability-matrix__cell[data-status="available"] .capability-matrix__cell-icon::before { content: "✓"; }
+.capability-matrix__cell[data-status="cost"] { background: var(--color-severity-medium-soft); }
+.capability-matrix__cell[data-status="cost"] .capability-matrix__cell-icon { background: var(--color-severity-medium); color: #fff; }
+.capability-matrix__cell[data-status="cost"] .capability-matrix__cell-icon::before { content: "kr"; font-size: 10px; }
+.capability-matrix__cell[data-status="conditional"] { background: var(--color-severity-high-soft); }
+.capability-matrix__cell[data-status="conditional"] .capability-matrix__cell-icon { background: var(--color-severity-high); color: #fff; }
+.capability-matrix__cell[data-status="conditional"] .capability-matrix__cell-icon::before { content: "!"; }
+.capability-matrix__cell[data-status="missing"] { background: var(--color-bg-soft); }
+.capability-matrix__cell[data-status="missing"] .capability-matrix__cell-icon { background: var(--color-text-tertiary); color: #fff; }
+.capability-matrix__cell[data-status="missing"] .capability-matrix__cell-icon::before { content: "×"; }
+
+.capability-matrix__legend {
+ display: flex;
+ gap: var(--space-4);
+ flex-wrap: wrap;
+ font-size: var(--font-size-xs);
+ margin-top: var(--space-3);
+ color: var(--color-text-secondary);
+}
+.capability-matrix__legend-item {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+}
+
+/* =============================================================================
+ 24. PARALLEL-AGENT-STATUS PANEL
+ Used by ms-ai-architect utredning (4 parallel workers — security-worker,
+ cost-worker, dpia-worker, diagram-worker writing to .work/-files) and
+ ultraplan-local multi-wave execute. Grid of agent cards with state pills,
+ progress bars, and per-agent metrics.
+ ============================================================================= */
+.agent-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
+ gap: var(--space-3);
+}
+.agent-card {
+ background: var(--color-surface);
+ border: 1px solid var(--color-border-subtle);
+ border-radius: var(--radius-md);
+ padding: var(--space-4);
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-2);
+ position: relative;
+}
+.agent-card__head {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: var(--space-2);
+}
+.agent-card__name {
+ font-weight: var(--font-weight-semibold);
+ font-size: var(--font-size-sm);
+ margin: 0;
+}
+.agent-card__role {
+ font-family: var(--font-family-mono);
+ font-size: 11px;
+ color: var(--color-text-tertiary);
+}
+.agent-card__state {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ padding: 2px 8px;
+ font-size: 11px;
+ font-weight: var(--font-weight-medium);
+ border-radius: var(--radius-pill);
+ white-space: nowrap;
+}
+.agent-card__state[data-state="queued"] { background: var(--color-bg-soft); color: var(--color-text-tertiary); }
+.agent-card__state[data-state="running"] { background: var(--color-severity-medium-soft); color: var(--color-severity-medium-on); }
+.agent-card__state[data-state="done"] { background: var(--color-severity-low-soft); color: var(--color-severity-low-on); }
+.agent-card__state[data-state="failed"] { background: var(--color-state-failed); color: #fff; }
+.agent-card__state[data-state="blocked"] { background: var(--color-state-blocked); color: #fff; }
+.agent-card__state-dot {
+ width: 6px; height: 6px;
+ border-radius: 50%;
+ background: currentColor;
+}
+.agent-card__state[data-state="running"] .agent-card__state-dot {
+ animation: agent-pulse 1.4s var(--ease-default) infinite;
+}
+@keyframes agent-pulse {
+ 0%, 100% { opacity: 1; }
+ 50% { opacity: 0.35; }
+}
+
+.agent-card__progress {
+ height: 4px;
+ background: var(--color-surface-sunken);
+ border-radius: var(--radius-pill);
+ overflow: hidden;
+}
+.agent-card__progress-fill {
+ height: 100%;
+ background: var(--color-primary-500);
+ transition: width var(--duration-normal) var(--ease-default);
+}
+.agent-card__metrics {
+ display: flex;
+ gap: var(--space-3);
+ font-size: var(--font-size-xs);
+ color: var(--color-text-secondary);
+}
+.agent-card__metric { display: flex; gap: 4px; align-items: baseline; }
+.agent-card__metric-value {
+ font-variant-numeric: tabular-nums;
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-text-primary);
+}
+.agent-card__output {
+ font-family: var(--font-family-mono);
+ font-size: 11px;
+ background: var(--color-surface-sunken);
+ padding: 6px 8px;
+ border-radius: var(--radius-sm);
+ max-height: 56px;
+ overflow: hidden;
+ color: var(--color-text-secondary);
+ white-space: pre-wrap;
+ word-break: break-word;
+}
+.agent-card__output::after {
+ content: "";
+ position: absolute;
+ bottom: var(--space-4);
+ left: var(--space-4);
+ right: var(--space-4);
+ height: 18px;
+ background: linear-gradient(to bottom, transparent, var(--color-surface));
+ pointer-events: none;
+}
+
+/* =============================================================================
+ 25. ERROR-SUMMARY (Aksel/GOV.UK pattern)
+ Concentrated list of validation errors at top of a form. Each error
+ anchor-links to the offending field. Required for accessible long forms.
+ ============================================================================= */
+.error-summary {
+ background: var(--color-surface);
+ border: 1px solid var(--color-severity-critical);
+ border-left-width: 4px;
+ border-radius: var(--radius-md);
+ padding: var(--space-4) var(--space-5);
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-2);
+}
+.error-summary__heading {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ font-size: var(--font-size-md);
+ font-weight: var(--font-weight-semibold);
+ color: var(--color-severity-critical);
+ margin: 0;
+}
+[data-theme="dark"] .error-summary__heading { color: #F09095; }
+.error-summary__heading::before {
+ content: "!";
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 20px; height: 20px;
+ border-radius: 50%;
+ background: var(--color-severity-critical);
+ color: #fff;
+ font-size: 14px;
+ font-weight: var(--font-weight-bold);
+ flex-shrink: 0;
+}
+.error-summary__body {
+ font-size: var(--font-size-sm);
+ color: var(--color-text-primary);
+ line-height: var(--line-height-snug);
+}
+.error-summary__list {
+ margin: var(--space-2) 0 0;
+ padding: 0 0 0 var(--space-5);
+ list-style: disc;
+ color: var(--color-text-primary);
+}
+.error-summary__item { margin-bottom: 4px; }
+.error-summary__link {
+ color: var(--color-severity-critical);
+ text-decoration: underline;
+ text-underline-offset: 2px;
+ text-decoration-thickness: 1px;
+ font-weight: var(--font-weight-medium);
+}
+.error-summary__link:hover { text-decoration-thickness: 2px; color: var(--color-severity-extreme); }
+[data-theme="dark"] .error-summary__link { color: #F09095; }
+[data-theme="dark"] .error-summary__link:hover { color: #FFB7BA; }
+
+/* =============================================================================
+ 26. GUIDE-PANEL (Aksel pattern)
+ Friendly inline guidance with optional illustration and CTA. Used to scaffold
+ first-time users through unfamiliar territory without scolding tone.
+ ============================================================================= */
+.guide-panel {
+ display: grid;
+ grid-template-columns: 56px 1fr auto;
+ gap: var(--space-4);
+ align-items: start;
+ background: var(--color-bg-soft);
+ border: 1px solid var(--color-border-subtle);
+ border-radius: var(--radius-lg);
+ padding: var(--space-4) var(--space-5);
+}
+.guide-panel--info { background: #EAF3FB; border-color: rgba(9, 105, 218, 0.25); }
+.guide-panel--success { background: var(--color-severity-low-soft); border-color: rgba(26, 127, 55, 0.3); }
+.guide-panel--warn { background: var(--color-severity-medium-soft); border-color: rgba(191, 135, 0, 0.3); }
+[data-theme="dark"] .guide-panel--info { background: #0E2A3F; border-color: rgba(111, 165, 221, 0.3); }
+
+.guide-panel__icon {
+ width: 56px; height: 56px;
+ border-radius: var(--radius-md);
+ background: var(--color-surface);
+ border: 1px solid var(--color-border-subtle);
+ display: flex; align-items: center; justify-content: center;
+ color: var(--color-primary-500);
+}
+.guide-panel--info .guide-panel__icon { color: var(--color-state-info); }
+.guide-panel--success .guide-panel__icon { color: var(--color-state-success); }
+.guide-panel--warn .guide-panel__icon { color: var(--color-severity-medium); }
+
+.guide-panel__body {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ min-width: 0;
+}
+.guide-panel__title {
+ font-size: var(--font-size-md);
+ font-weight: var(--font-weight-semibold);
+ margin: 0;
+ color: var(--color-text-primary);
+}
+.guide-panel__text {
+ font-size: var(--font-size-sm);
+ color: var(--color-text-secondary);
+ line-height: var(--line-height-snug);
+ margin: 0;
+ max-width: var(--measure);
+}
+.guide-panel__action {
+ align-self: center;
+ white-space: nowrap;
+}
+.guide-panel__dismiss {
+ position: absolute;
+ top: var(--space-2);
+ right: var(--space-2);
+ background: none;
+ border: none;
+ cursor: pointer;
+ width: 28px; height: 28px;
+ border-radius: var(--radius-sm);
+ display: flex; align-items: center; justify-content: center;
+ color: var(--color-text-tertiary);
+ font-family: inherit;
+}
+.guide-panel__dismiss:hover { background: rgba(0,0,0,0.06); color: var(--color-text-primary); }
+
+@media (max-width: 640px) {
+ .guide-panel {
+ grid-template-columns: 40px 1fr;
+ gap: var(--space-3);
+ }
+ .guide-panel__icon { width: 40px; height: 40px; }
+ .guide-panel__action {
+ grid-column: 1 / -1;
+ align-self: stretch;
+ }
+}
+
+/* =============================================================================
+ Print rules for Tier 3
+ ============================================================================= */
+@media print {
+ .pair-before-after { page-break-inside: avoid; }
+ .aiact-timeline { page-break-inside: avoid; }
+ .agent-grid { page-break-inside: avoid; }
+ .tracks { display: none; } /* entry choice = screen-only */
+ .guide-panel__dismiss { display: none; } /* dismiss only meaningful on screen */
+ .error-summary {
+ background: #FFF !important;
+ border: 1pt solid #000 !important;
+ color: #000 !important;
+ }
+ .error-summary__heading,
+ .error-summary__body,
+ .error-summary__link { color: #000 !important; }
+}
diff --git a/shared/playground-examples/tier3-preview.html b/shared/playground-examples/tier3-preview.html
new file mode 100644
index 0000000..e6a5a4e
--- /dev/null
+++ b/shared/playground-examples/tier3-preview.html
@@ -0,0 +1,500 @@
+
+
+
+
+
+ Tier 3 preview — Playground Design System
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tier 3 — Critical components
+
+ 8 komponenter bygd direkte for ms-ai-architect Playground v3. Hvis disse ser ut som de hører hjemme i samme familie som Tier 1 + 2, beholder vi dem og lar claude.ai/design lage de resterende 12 (sankey/toxic-flow, fleet-overview, kanban Keep/Review/Remove, maturity-ladder, classify-and-transform, cycle-ribbon, persistent-antipattern badge, suppressed-signals panel, ExpansionCard, ReadMore, FormProgress, Aspirational vs Committed visual).
+
+
+
+
+
+
+ 19
+
Inherent + residual pair
+
+ Brukes i ROS før/etter mitigering, DPIA inherent → residual, OKR check-in score over tid.
+
+
+
T-001: Eksponering av personopplysninger via Copilot Chat
+
+
+ Inherent risiko
+ 20
+ S4 × K5 — Kritisk sone
+
+
+
+ Etter M-001 + M-002
+ 8
+ S2 × K4 — Gul sone
+ −12 (60 % reduksjon)
+
+
+
+
+
+
+
+
+ 20
+
AI Act compliance-tidslinje
+
+ 4 milepeler i EU AI Act med per-system countdown. Brukes i ms-ai-architect classify-flow og dashboard.
+
+
+
+
+
+
+
+
+
+ 2025-02-02
+ Forbudte praksiser (Art. 5)
+
+
+
+
+
+
+ 2025-08-02
+ Governance og sanksjoner (Art. 99)
+
+
+
+
+
+
+
+
+ 2026-08-02
+ GPAI + Annex III høyrisiko
+
+
+
+
+
+
+ 2027-08-02
+ Full compliance for all høyrisiko
+
+
+
+
+
+
+
+ Kommunal Copilot-utrulling:
+ 92 dager
+ til Annex III-frist
+
+
+ Saksbehandling AI:
+ 457 dager
+ til full compliance
+
+
+ Intern HR-bot:
+ 457 dager
+ (begrenset risiko)
+
+
+
+
+
+
+
+
+ 21
+
3-track entry
+
+ Carry-forward fra Playground v2. Den første beslutningen — bruker velger sin ferdighetsnivå-vei inn i Playground.
+
+
+
+
+
+
+
+ 22
+
FRIA rights-matrix
+
+ 12 EU Charter-rettigheter × konsekvensnivå (0–5). Brukes i FRIA-vurdering (Art. 27 EU AI Act) for offentlig sektor høyrisiko-systemer.
+
+
+
+
+
Grunnleggende rettighet (EU Charter)
+
N/A
+
Lav
+
Med
+
Høy
+
Kritisk
+
+
+
Art. 7 — Rett til privatlivKorrespondanse, hjem, familieliv
+
+
+
+
●
+
+
+
+
Art. 8 — PersonopplysningerGDPR-forankret
+
+
+
+
+
●
+
+
+
Art. 11 — YtringsfrihetInnhentings- og spredningsfrihet
+
+
●
+
+
+
+
+
+
Art. 21 — DiskrimineringsforbudKjønn, etnisitet, religion, alder
+
+
+
+
+
●
+
+
+
Art. 41 — God forvaltningHabilitet, begrunnelse, klagerett
+
+
+
+
●
+
+
+
+
Art. 47 — Effektivt rettsmiddelRett til rettferdig rettergang
+
+
+
●
+
+
+
+
+
Demo viser 6 av 12 rettigheter. Full FRIA dekker alle relevante artikler i EU-pakten.
+
+
+
+
+
+
+ 23
+
Capability-matrix
+
+ Brukes i ms-ai-architect for å mappe kapabilitet × lisens. Statuser: tilgjengelig, koster ekstra, betinget, mangler. Aldri kun farge — ikon + farge sammen.
+
+
+
+
+
Kapabilitet
+
M365 E3
+
M365 E5
+
Copilot
+
Power Premium
+
+
+
Generer tekst i M365 Chat
+
+
+
+
+
+
+
Sensitivity Labels på dokumenter
+
+
+
+
+
+
+
DLP for endpoints
+
+
+
+
+
+
+
Power Automate AI Builder-flows
+
+
+
+
+
+
+
Copilot Studio agent (custom)
+
+
+
+
+
+
+
+ ✓ Tilgjengelig
+ kr Krever tilleggslisens
+ ! Betinget (krever konfigurasjon)
+ × Ikke tilgjengelig
+
+
+
+
+
+
+
+ 24
+
Parallel-agent-status panel
+
+ Brukes i ms-ai-architect utredning (4 parallelle workers skriver til .work/) og ultraplan-local multi-wave execute. Per worker: tilstand, fremdrift og siste output-utdrag.
+
+
+
+
+
+
+
security-worker
+ 6×5 sikkerhetsmatrise
+
+
Ferdig
+
+
+
+ Tid: 2m 14s
+ Funn: 12
+
+
+
+
+
+
+
cost-worker
+ P10/P50/P90 NOK-estimat
+
+
Kjører
+
+
+
+ Tid: 1m 32s
+ SKU-er: 8 / 12
+
+
+
+
+
+
+
dpia-worker
+ GDPR Art. 35-vurdering
+
+
Kjører
+
+
+
+ Tid: 42s
+ Risiko: 2 / 10
+
+
+
+
+
+
+
diagram-worker
+ Imagen 3 / Mermaid fallback
+
+
Feilet
+
+
+
+ Feil: MCP timeout
+
+
+
+
+
+
+
+
+
+ 25
+
ErrorSummary (Aksel/GOV.UK)
+
+ Konsentrert valideringsfeil-liste øverst i lange skjemaer. Hver feil har anker-link til feltet. Skjermlesere leser hele listen først — kritisk for tilgjengelig skjema-UX.
+
+
+
+
Det er 4 feil i ROS-skjemaet
+
Rett opp feilene før du fortsetter. Hver feil lenker til feltet.
+
+
+
+
+
+
+
+
+ 26
+
GuidePanel (Aksel)
+
+ Vennlig inline-veiledning for første-gangs-brukere. Skala av hjelp uten å være skoleflink.
+
+
+
+
+
+
Første gang du gjør en ROS for AI?
+
Vi følger NS 5814:2021 og bruker "evalueringskriterier" (ikke "akseptkriterier"). De 49 forhåndsdefinerte truslene er hentet fra EU AI Act Annex III og NSM grunnprinsipper for IKT-sikkerhet.
+
+
Les metodikk
+
+
+
+
+
+
Onboarding fullført
+
Profilen din er lagret i org/profile.md. Alle agenter (security, cost, dpia, diagram) leser denne automatisk — du slipper å skrive om virksomheten på nytt.
+
+
+
+
+
+
+
Schrems II-flagging
+
Du har valgt en region som ikke er EU/EØS. For offentlig sektor i Norge krever dette rettslig vurdering av overføringsmekanismen (SCCs + supplementary measures eller Microsoft EU Data Boundary).
+
+
Vis vurderingsmal
+
+
+
+
+
+
Hvis disse 8 ser ut som de hører til familien: behold dem. Hvis ikke: scrap og kjør alle 20 i claude.ai/design.
+
← Til hovedoversikt
+
+
+
+
+
+