diff --git a/messages/de.json b/messages/de.json
index 8e99698..a39976a 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -163,7 +163,7 @@
"biaReport": "BIA-Report (PDF)",
"critTable": "Kritikalität der Prozesse",
"process": "Geschäftsprozess",
- "detailHeading": "Prozess-Detail · {name}",
+ "detailHeading": "{name}",
"detailSub": "Zugeordnete Assets nach Rolle",
"critLabel": "Kritikalität: {label}",
"primaryPill": "★ Primäres Asset",
@@ -217,7 +217,7 @@
"status": "Status",
"owner": "Owner",
"empty": "Noch keine Risiken erfasst.",
- "detailHeading": "Risiko-Detail · {ref}",
+ "detailHeading": "{ref} · {name}",
"detailSub": "Bewertung, betroffene Assets & Behandlung",
"editTitle": "Risiko bearbeiten",
"createTitle": "Risiko anlegen",
@@ -291,7 +291,7 @@
"newMeasure": "Maßnahme",
"board": "Maßnahmen-Board",
"empty": "Keine Maßnahmen.",
- "detailHeading": "Maßnahme · {ref}",
+ "detailHeading": "{ref} · {name}",
"detailSub": "Status, Verantwortung & verknüpfte Risiken",
"editTitle": "Maßnahme bearbeiten",
"createTitle": "Maßnahme anlegen",
diff --git a/messages/en.json b/messages/en.json
index b89a7d2..9e8c4cf 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -163,7 +163,7 @@
"biaReport": "BIA report (PDF)",
"critTable": "Process criticality",
"process": "Business process",
- "detailHeading": "Process detail · {name}",
+ "detailHeading": "{name}",
"detailSub": "Assigned assets by role",
"critLabel": "Criticality: {label}",
"primaryPill": "★ Primary asset",
@@ -217,7 +217,7 @@
"status": "Status",
"owner": "Owner",
"empty": "No risks recorded yet.",
- "detailHeading": "Risk detail · {ref}",
+ "detailHeading": "{ref} · {name}",
"detailSub": "Rating, affected assets & treatment",
"editTitle": "Edit risk",
"createTitle": "Create risk",
@@ -291,7 +291,7 @@
"newMeasure": "Measure",
"board": "Measures board",
"empty": "No measures.",
- "detailHeading": "Measure · {ref}",
+ "detailHeading": "{ref} · {name}",
"detailSub": "Status, responsibility & linked risks",
"editTitle": "Edit measure",
"createTitle": "Create measure",
diff --git a/src/app/(app)/assets/page.tsx b/src/app/(app)/assets/page.tsx
index 1029fa4..020007d 100644
--- a/src/app/(app)/assets/page.tsx
+++ b/src/app/(app)/assets/page.tsx
@@ -9,6 +9,7 @@ import { Button } from "@/components/ui/button";
import { FilterTabs } from "@/components/filter-tabs";
import {
CiaBadge,
+ CiaLegend,
KpiCard,
OwnerChip,
PageHead,
@@ -196,7 +197,12 @@ export default async function AssetsPage({
Asset
{t("type")}
{t("owner")}
- {t("protection")} (C/I/A)
+
+
+ {t("protection")}
+
+
+
{t("dependencies")}
{t("status")}
diff --git a/src/components/asset-modals.tsx b/src/components/asset-modals.tsx
index b36dd59..0fbaa65 100644
--- a/src/components/asset-modals.tsx
+++ b/src/components/asset-modals.tsx
@@ -12,7 +12,7 @@ import {
import { Button } from "@/components/ui/button";
import { Modal } from "@/components/modal";
import { AssetForm } from "@/components/asset-form";
-import { CiaBadge, Pill, Tag } from "@/components/mockup-ui";
+import { CiaBadge, CiaLegend, Pill, Tag } from "@/components/mockup-ui";
import { riskLevel, riskRef, RISK_PILL_TONE } from "@/lib/risk";
export type AssetWithRelations = Prisma.AssetGetPayload<{
@@ -145,6 +145,15 @@ export async function AssetDetailModal({
{tc("none")}
)}
+
+
+ |
+ |
+
+
+ |
+
+
{asset.relationsFrom.map((rel) => (
diff --git a/src/components/measure-modals.tsx b/src/components/measure-modals.tsx
index bdf9613..291b8d5 100644
--- a/src/components/measure-modals.tsx
+++ b/src/components/measure-modals.tsx
@@ -42,7 +42,7 @@ export async function MeasureDetailModal({
return (
diff --git a/src/components/mockup-ui.tsx b/src/components/mockup-ui.tsx
index f4c3a57..58050e8 100644
--- a/src/components/mockup-ui.tsx
+++ b/src/components/mockup-ui.tsx
@@ -55,11 +55,11 @@ export function KpiCard({
);
}
-// Segmentbalken-Farben je Stufe 1–4 (Referenz docs/ISMS-GUI-Verbesserungen-GEFIM.html)
+// Segmentbalken-Farben je Stufe 1–4 als Ampel: Grün → Gelb → Orange → Rot
const CIA_BAR_COLORS: Record = {
- 1: "bg-[#9db2c9]",
- 2: "bg-[#5d8fbf]",
- 3: "bg-[#e0982e]",
+ 1: "bg-[#2e9e6b]",
+ 2: "bg-[#e5b000]",
+ 3: "bg-[#e07d2e]",
4: "bg-[#d64c4c]",
};
@@ -113,6 +113,19 @@ export function CiaBadge({
);
}
+/** VER/INT/VFB-Beschriftung passend zur Balkenbreite — einmal pro Tabelle als Überschrift. */
+export function CiaLegend() {
+ return (
+
+ {["VER", "INT", "VFB"].map((l) => (
+
+ {l}
+
+ ))}
+
+ );
+}
+
export function Tag({ children }: { children: React.ReactNode }) {
return (
@@ -142,6 +155,7 @@ export function OwnerChip({ name, noOwnerLabel }: { name?: string | null; noOwne
const PILL_TONES = {
ok: "bg-[#e7f6ee] text-[#2e9e6b]",
warn: "bg-[#fbf1de] text-[#a9760f]",
+ orange: "bg-[#fbdcc0] text-[#c2681a]",
risk: "bg-[#fbe7e7] text-[#d64c4c]",
info: "bg-[#e7f1fa] text-[#3a86c8]",
mut: "bg-[#eef0f4] text-muted-foreground",
diff --git a/src/components/modal.tsx b/src/components/modal.tsx
index 22bb5b1..e49ebea 100644
--- a/src/components/modal.tsx
+++ b/src/components/modal.tsx
@@ -26,7 +26,7 @@ export function Modal({
}) {
return (
-
+
diff --git a/src/components/process-modals.tsx b/src/components/process-modals.tsx
index 09c3cf8..6404a5b 100644
--- a/src/components/process-modals.tsx
+++ b/src/components/process-modals.tsx
@@ -16,7 +16,7 @@ import { Label } from "@/components/ui/label";
import { Textarea } from "@/components/ui/textarea";
import { Modal } from "@/components/modal";
import { SegmentedRating } from "@/components/segmented-rating";
-import { CiaBadge, CriticalityPill, Pill, Tag } from "@/components/mockup-ui";
+import { CiaBadge, CiaLegend, CriticalityPill, Pill, Tag } from "@/components/mockup-ui";
import { riskLevel, riskRef, RISK_PILL_TONE } from "@/lib/risk";
export type LinkedRisk = {
@@ -158,6 +158,15 @@ export async function ProcessDetailModal({
{secondary.length === 0 &&
{t("noAssets")}
}
+
+
+ |
+ |
+
+
+ |
+
+
{secondary.map((pa) => (
diff --git a/src/components/risk-modals.tsx b/src/components/risk-modals.tsx
index 2640951..95cc7dc 100644
--- a/src/components/risk-modals.tsx
+++ b/src/components/risk-modals.tsx
@@ -19,7 +19,7 @@ import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Textarea } from "@/components/ui/textarea";
import { Modal } from "@/components/modal";
-import { CiaBadge, Pill, Tag } from "@/components/mockup-ui";
+import { CiaBadge, CiaLegend, Pill, Tag } from "@/components/mockup-ui";
import { riskLevel, riskRef, RISK_PILL_TONE } from "@/lib/risk";
import { measureRef, MEASURE_STATUS_TONE } from "@/lib/measure";
@@ -123,7 +123,7 @@ function RiskScoreScale({ gross, residual }: { gross: number; residual: number |
// 5×5 → Score 1..25; Position linear auf der Skala
const pos = (v: number) => `${((Math.min(25, Math.max(1, v)) - 1) / 24) * 100}%`;
return (
-
+
@@ -241,6 +241,15 @@ export async function RiskDetailModal({
{t("noAssets")}
)}
+
+
+ |
+ |
+
+
+ |
+
+
{risk.riskAssets.map((ra) => (
@@ -266,9 +275,10 @@ export async function RiskDetailModal({
- {/* Brutto → Rest-Risiko: zwei Karten mit Pfeil + Farbskala */}
+ {/* Brutto → Rest-Risiko: Farbskala oben, darunter zwei Karten mit Pfeil */}
-
{/* Notwendige Maßnahmen — echt verknüpft */}
diff --git a/src/components/segmented-rating.tsx b/src/components/segmented-rating.tsx
index b14fa05..af1418e 100644
--- a/src/components/segmented-rating.tsx
+++ b/src/components/segmented-rating.tsx
@@ -3,11 +3,11 @@
import { useState } from "react";
import { cn } from "@/lib/utils";
-// Farblogik Stufe 1–4 (Referenz docs/ISMS-GUI-Verbesserungen-GEFIM.html)
+// Ampel-Farblogik Stufe 1–4: Grün → Gelb → Orange → Rot
const LEVEL_STYLE: Record
= {
- 1: { on: "bg-[#9db2c9] text-white border-transparent", border: "border-[#9db2c9]" },
- 2: { on: "bg-[#5d8fbf] text-white border-transparent", border: "border-[#5d8fbf]" },
- 3: { on: "bg-[#e0982e] text-white border-transparent", border: "border-[#e0982e]" },
+ 1: { on: "bg-[#2e9e6b] text-white border-transparent", border: "border-[#2e9e6b]" },
+ 2: { on: "bg-[#e5b000] text-[#3b3b3a] border-transparent", border: "border-[#e5b000]" },
+ 3: { on: "bg-[#e07d2e] text-white border-transparent", border: "border-[#e07d2e]" },
4: { on: "bg-[#d64c4c] text-white border-transparent", border: "border-[#d64c4c]" },
};
diff --git a/src/lib/risk.ts b/src/lib/risk.ts
index ef3bc03..35eaaed 100644
--- a/src/lib/risk.ts
+++ b/src/lib/risk.ts
@@ -19,11 +19,11 @@ export const RISK_CELL_COLORS: Record = {
critical: "#ef9a98",
};
-/** Pillen-Ton je Stufe (mockup-ui Pill). */
-export const RISK_PILL_TONE: Record = {
+/** Pillen-Ton je Stufe — gemäß Heatmap-Skala: Grün → Gelb → Orange → Rot. */
+export const RISK_PILL_TONE: Record = {
low: "ok",
- medium: "info",
- elevated: "warn",
+ medium: "warn",
+ elevated: "orange",
high: "risk",
critical: "risk",
};