42d4b4d9c5
CI / detect-changes (push) Successful in 19s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Successful in 7s
CI / validate-canonical-controls (push) Successful in 4s
CI / loc-budget (push) Successful in 21s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 3m13s
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Has been skipped
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
Schritt A (Tokens): zentrale Design-Sprache aus dem Claude-Design-Handoff —
Tailwind-Tokens (re/geltung/severity/domain) + Fonts (Public Sans / Source
Serif 4 / IBM Plex Mono) + components/redesign/{tokens.ts,Chips.tsx}
(GeltungChip, SeverityChip, DomainTag, MonoId) + Showcase /sdk/design-system.
Bestehende Farben/sans unangetastet.
Schritt B (Ebene 2): CyberMeetsSafety als USP-Hero im CRA/Cyber-Tab
(/sdk/iace/[id]/cra) — Domaenen-Bar, Hazard-Karten (CE-gemildert -> Cyber-Befund
-> Restrisiko, Warum-Box, Pflicht/Empfehlung-Massnahmen, aufklappbarer
Norm-Bezug), Massnahmen-Backlog mit Geltung-Filter. Gebunden an echte
cross_links/findings/open_measures. Bisheriger CRACyberView bleibt eingeklappt
erhalten -> kein Inhaltsverlust.
Guardrail-Doku: design/redesign/ (HANDOFF_README, CONTENT_INVENTORY mit
40-Screen-Mapping + Waisen-Liste, Arbeitsbereich.dc.html-Referenz).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
255 lines
14 KiB
Markdown
255 lines
14 KiB
Markdown
# Handoff: BreakPilot Compliance — Redesign (Design-Sprache + Projekt-Arbeitsbereich)
|
||
|
||
> Sprache: Deutsch (UI-Texte sind Teil der Spezifikation). Diese README ist
|
||
> selbsttragend — sie reicht aus, um das Redesign ohne Kenntnis des
|
||
> ursprünglichen Gesprächs umzusetzen.
|
||
|
||
## Overview
|
||
Redesign der Compliance-Plattform „BreakPilot" (Produkt-Compliance physischer
|
||
Produkte mit digitalen Elementen — Verbindung von Maschinensicherheit/CE und
|
||
Cyber-Sicherheit/CRA). Ziel: eine Oberfläche, die **zwei Zielgruppen** gleichzeitig
|
||
bedient — (1) Jurist:innen/DSB (Nachvollziehbarkeit, Normbezug, Versionierung,
|
||
Pflicht-vs-Empfehlung) und (2) Ingenieur:innen (Bauteile, Gefährdungen,
|
||
Schutzfunktionen, konkrete Maßnahmen, ohne Jurist:in zu sein).
|
||
|
||
Dieser Handoff enthält die **durchgängige Design-Sprache** und einen
|
||
**vollständig spezifizierten Referenz-Screen** (Projekt-Arbeitsbereich), der alle
|
||
Prinzipien demonstriert — inklusive des USP „Cyber trifft Safety".
|
||
|
||
## About the Design Files
|
||
Die Datei `Arbeitsbereich.dc.html` ist eine **Design-Referenz in HTML** — ein
|
||
Prototyp, der Aussehen und Verhalten zeigt, **kein** direkt zu kopierender
|
||
Produktionscode. Aufgabe: dieses Design in der **bestehenden Codebasis**
|
||
(React/Next + eurem Styling-Stack) mit euren etablierten Patterns nachbauen.
|
||
Alle Layout-/Farb-/Typo-Werte stehen als Inline-Styles im Markup und sind hier
|
||
unten zusätzlich als Tokens dokumentiert.
|
||
|
||
> Hinweis zur Datei: `Arbeitsbereich.dc.html` ist als „Design Component" gebaut
|
||
> und braucht zum Rendern eine Plattform-Laufzeit (`support.js`), die **nicht**
|
||
> Teil dieses Pakets ist. Für die Umsetzung ist das egal — Struktur, Inline-Styles
|
||
> und Daten/Logik sind im Klartext lesbar. Die dynamischen Stellen sind als
|
||
> `{{ … }}`-Platzhalter markiert; die zugehörigen Daten stehen in der Logik-Klasse
|
||
> am Ende der Datei (`class Component extends DCLogic`).
|
||
|
||
## Fidelity
|
||
**High-fidelity.** Finale Farben (Hex), Typografie, Abstände und Interaktionen.
|
||
Pixelnah nachbauen, aber mit euren vorhandenen Komponenten/Bibliotheken.
|
||
|
||
---
|
||
|
||
## Leitprinzipien (gelten als Akzeptanzkriterien)
|
||
1. **3 Ebenen pro Screen** (progressive disclosure):
|
||
Ebene 1 Überblick (Management/Klartext) → Ebene 2 Cyber × Safety → Ebene 3
|
||
technische Tiefe (standardmäßig **eingeklappt**).
|
||
2. **Klartext führt.** Interne IDs (`CRA-AI-8`, `M542`) nie als Überschrift —
|
||
immer in Monospace **nachgestellt/sekundär**.
|
||
3. **Co-Pilot statt Roboter-Anwalt.** Keine Panik-Rot-Blöcke, keine
|
||
Bußgeld-Drohung zuerst. Leitsatz sichtbar: „Wir analysieren — Sie entscheiden
|
||
mit DSB/Anwalt."
|
||
4. **Pflicht / Empfehlung / Kann** immer visuell getrennt und durchgängig
|
||
konsistent (eigenes Chip-System, siehe Tokens).
|
||
5. **Status/Fortschritt sichtbar** (geführter Flow, nicht 30 gleichwertige Tabs).
|
||
6. Rot ist **echten kritischen Punkten und Fristen** vorbehalten — Severity wird
|
||
sonst über getönte Flächen kommuniziert, nicht über Neon-Blöcke.
|
||
|
||
---
|
||
|
||
## Design Tokens
|
||
|
||
### Farben — Neutrale / Flächen
|
||
| Token | Hex | Verwendung |
|
||
|---|---|---|
|
||
| `bg/page` | `#EDEFF3` | Seitenhintergrund |
|
||
| `surface` | `#FFFFFF` | Karten |
|
||
| `border` | `#E4E7EE` | Standard-Kartenrahmen |
|
||
| `border/soft` | `#F0F1F5` | Trennlinien in Listen |
|
||
| `ink` | `#1A1D29` | Primärtext |
|
||
| `text/muted` | `#5A6273` | Fließtext sekundär |
|
||
| `text/muted-2` | `#6B7184` | Labels |
|
||
| `text/faint` | `#8089A0` | Hilfstext |
|
||
| `text/fainter` | `#9AA1B2` | Versions-/Metainfo |
|
||
|
||
### Farben — Marke (Indigo)
|
||
| Token | Hex | Verwendung |
|
||
|---|---|---|
|
||
| `primary` | `#4338CA` | Primär-Button-Fläche |
|
||
| `primary/text` | `#3B36B0` | Links, aktive Zustände, betonte Marke |
|
||
| `primary/grad` | `#5B52E0 → #4338CA` | Fortschrittsbalken (linear 90deg) |
|
||
| `primary/tint` | `#EEF0FF` | Chip-/Badge-Hintergrund |
|
||
| `primary/tint-2` | `#F6F4FF` / `#F0EBFD` | Co-Pilot-Banner / Marken-Badge |
|
||
|
||
### Farben — Geltung (Pflicht / Empfehlung / Kann) — Kernsystem
|
||
| Stufe | bg | text | border | Marker |
|
||
|---|---|---|---|---|
|
||
| **Pflicht** | `#FBECEA` | `#A23323` | `#F3D2CC` | gefülltes Quadrat `#C0362C` (7×7px, radius 2px) |
|
||
| **Empfehlung** | `#EEF0FF` | `#3B36B0` | `#DAD9F7` | Glyph `◇` (offene Raute) |
|
||
| **Kann** | `#F1F3F7` | `#5A6273` | `#E2E6EE` | Glyph `○` (offener Kreis) |
|
||
|
||
Chip-Form: `padding:3px 9px; border-radius:6px; font-weight:700; font-size:11px; 1px solid <border>`.
|
||
|
||
### Farben — Severity (Dringlichkeit)
|
||
| Stufe | bg | text |
|
||
|---|---|---|
|
||
| Kritisch | `#FBE9E7` | `#B5362A` |
|
||
| Hoch | `#FBF1E0` | `#9A6410` |
|
||
| Mittel | `#FAF6DD` | `#897209` |
|
||
| Niedrig | `#E9F5EF` | `#2C7A52` |
|
||
|
||
Chip-Form: `padding:4px 11px; border-radius:7px; font-weight:700; font-size:12px`. Getönte Flächen, kein Neon.
|
||
|
||
### Farben — Domänen
|
||
| Domäne | Akzent | bg-tint | border |
|
||
|---|---|---|---|
|
||
| **Safety** (Maschine/CE) | `#0E8A66` | `#F3FAF7` | `#D7ECE3` |
|
||
| **Cyber** (CRA/Resilienz) | `#6A43D6` | `#F6F1FE` | `#E4D8F7` |
|
||
| **Schnittstelle** (Cyber × Safety) | `#BE7714` | `#FCF6EF` | `#F2E6D5` (Warntext `#9A6410`) |
|
||
|
||
### Dark-Panel (Leitprinzipien-Block)
|
||
bg `#15182A` · Text `#E8EAF2` (stark) / `#C7CBDA` (normal) · Akzent-Ziffern `#9B8BF5`.
|
||
|
||
### Typografie
|
||
- **Public Sans** (Google Fonts; 400/500/600/700/800) — gesamte UI & Überschriften.
|
||
- **Source Serif 4** (Google Fonts; italic) — Normzitate / rechtliche Texte.
|
||
- **IBM Plex Mono** (Google Fonts; 400/500/600) — interne IDs, Codes, Risiko-Formeln.
|
||
|
||
| Rolle | Größe / Gewicht / Tracking |
|
||
|---|---|
|
||
| H1 (Projektname) | 30px / 800 / -0.02em / line-height 1.1 |
|
||
| H2 (Ebenen-Titel) | 19px / 800 / -0.01em |
|
||
| Kartentitel | 17–18px / 700–800 / -0.01em |
|
||
| Body | 13–15px / 400–500 / line-height 1.45–1.5 |
|
||
| Label/Caption | 11.5–12.5px / 600–700, `letter-spacing:.04–.08em` für Großbuchstaben-Labels |
|
||
| Mono (IDs) | 11.5–12.5px |
|
||
|
||
### Radius / Schatten / Spacing
|
||
- Radius: Header `18px` · Hazard-Karten `16px` · Standardkarten `14px` · innere Boxen `10–11px` · Controls `7–10px` · Pills/Chips `6px`/`999px`.
|
||
- Schatten: nur sehr dezent — `0 1px 2px rgba(20,24,40,.04)` auf der Header-Karte; Karten sonst flach mit Border.
|
||
- Spacing-Basis 8px. Karten-Gaps `14px`; Sektionsabstand `margin-top:38–44px`; Karten-Padding `18–20px` (Standard) bzw. `22–26px` (groß).
|
||
|
||
---
|
||
|
||
## Layout
|
||
- Container: `max-width:1320px; margin:0 auto`. Seiten-Padding `30px 24px 90px`.
|
||
- **Header-Karte** (volle Breite): links Projektinfo (Status-Pill „Entwurf", Version
|
||
`V001` in Mono, H1, Beschreibung, Co-Pilot-Banner), rechts (280px) Konformitäts-%
|
||
+ Fortschrittsbalken + zwei Frist-Kacheln (Tage bis CE-Pflicht / Tage bis
|
||
Reporting-Pflicht).
|
||
- **Body**: `display:flex; gap:24px; align-items:flex-start`.
|
||
- **Linke Nav** (212px, `position:sticky; top:20px`): die drei Ebenen als
|
||
Sprungmarken (nummerierte Quadrat-Icons in den Ebenen-Farben) + „Design-Sprache".
|
||
Klick scrollt sanft zur Sektion (`window.scrollTo`, **nicht** `scrollIntoView`).
|
||
- **Main** (`flex:1`): vier Sektionen gestapelt (Ebene 1 → 2 → 3 → Design-Sprache).
|
||
|
||
---
|
||
|
||
## Screens / Views (eine Seite, vier Sektionen)
|
||
|
||
### Sektion „Ebene 1 — Überblick"
|
||
- **Zweck:** Management-Blick: Was trifft das Produkt?
|
||
- **Layout:** 2×2-Grid (`grid-template-columns:repeat(2,1fr); gap:14px`) aus 4 Kacheln.
|
||
- **Kacheln** (je: farbiges Großbuchstaben-Label, plakative Klartext-Aussage,
|
||
1 Zeile Erklärung, optional „Warum?"-Link in `primary/text`):
|
||
1. **GELTUNG** (Label `#0E8A66`): „Fällt unter CRA & Maschinenverordnung" · „Vernetzt & mit Software-Updates → Produkt mit digitalem Element." · Link „Warum? → Begründung & Quellen".
|
||
2. **FRISTEN** (Label `#9A6410`): „CE-Pflicht ab 11.12.2027" · „Vulnerability-Reporting (24h/72h) bereits ab **11.09.2026** — in 85 Tagen." · „Maßgeblich: das Inverkehrbringen, nicht der Entwicklungszeitpunkt."
|
||
3. **OFFENE PUNKTE** (Label `#B5362A`): „6 kritische Anforderungen offen" · „von 40 CRA-Anforderungen. Dazu: **2 Safety-Gefährdungen durch Cyber wieder geöffnet.**" (Hervorhebung in `#BE7714`) · Link „Zu den 2 Punkten →".
|
||
4. **KONFORMITÄTSPFAD** (Label `#3B36B0`): „Selbstbewertung (Modul A)" · „Kein externes Audit nötig. Technische Doku + Konformitätserklärung bleiben Pflicht." · grüner Status-Dot „Klassifikation: Standard".
|
||
|
||
### Sektion „Ebene 2 — Cyber trifft Safety" (Herzstück / USP)
|
||
- **Zweck:** sichtbar machen, wo ein **Cyber-Befund** eine bereits mechanisch
|
||
**gemilderte Gefährdung wieder aufreißt**.
|
||
- **Domänen-Bar** (eine Karte, 3 Spalten, `flex`): links Safety-Panel (Border-left
|
||
4px `#0E8A66`), Mitte Schnittstellen-Knoten (bg `#FCF6EF`, ⚡-Icon, „2 wieder
|
||
geöffnet" in `#BE7714`), rechts Cyber-Panel (Border-left 4px `#6A43D6`).
|
||
- **Hazard-Karten** (eine pro betroffener Gefährdung), Aufbau von oben nach unten:
|
||
1. **Kopf:** kleines Domänen-Label (z. B. „Mechanische Gefährdung", grau) + H3
|
||
Klartext-Name; rechts Pill „Restrisiko: wieder offen" (bg `#FBECEA`, Text
|
||
`#A23323`, gefülltes Quadrat-Marker).
|
||
2. **Kette (3 Knoten + Pfeile `→`):**
|
||
`[CE — GEMILDERT]` (Safety-tint, ✓-Kreis, z. B. „Zweihandschaltung +
|
||
trennende Schutzeinrichtung (PL d)") → `[CYBER-BEFUND]` (Cyber-tint, ⚡, z. B.
|
||
„Authentifizierungs-Umgehung · manipulierte Firmware") → `[RESTRISIKO]`
|
||
(Severity-rot-tint, !-Kreis, „Schutzfunktion aushebelbar — Gefährdung wieder
|
||
offen"). Knoten `flex:1; min-width:200px; border-radius:12px`, Pfeile in
|
||
`#C5A86F`. Auf schmal umbrechend.
|
||
3. **„Warum:"-Box** (Schnittstellen-tint `#FBFAF7`/`#EFEADF`): Mechanismus in
|
||
Klartext, z. B. „Über eine Authentifizierungs-Umgehung oder manipulierte
|
||
Firmware lässt sich die Zweihandschaltung aushebeln — die mechanisch
|
||
gemilderte Quetschgefahr ist damit wieder offen."
|
||
4. **EMPFOHLENE MASSNAHMEN:** Liste, je Zeile [Geltung-Chip] + Klartext-Maßnahme
|
||
+ Mono-ID rechts (`#A2A8B8`).
|
||
5. **Ebene-3-Aufklapper** (Fuß der Karte, bg `#FBFBFC`): Button „▸/▾ Auslösende
|
||
Befunde & Norm-Bezug (Ebene 3)". Aufgeklappt: 2 Spalten —
|
||
„AUSLÖSENDE CYBER-BEFUNDE" (Mono-Pills, z. B. `Hub-Steuerung_(SPS)-ctrl-noauth`)
|
||
und „NORM- & ANNEX-BEZUG" (Mono-Pills in `primary`-tint, z. B.
|
||
`ISO 12100:2010`, `CRA-AI-8 · Annex I 1(3)(d)`).
|
||
- **Maßnahmen-Backlog** (Karte): Titel + Zähler „{n} Maßnahmen · nach Geltung";
|
||
rechts Segmented-Filter **Alle / Pflicht / Empfehlung** (aktiv = gefüllter
|
||
Indigo-Dot vor dem Label). Tabelle: [Geltung-Chip 96px] · Maßnahme · Kategorie
|
||
(150px, grau) · Aufwand (z. B. „2 PT") · Mono-ID rechts. Filter blendet Zeilen
|
||
nach Geltung.
|
||
|
||
### Sektion „Ebene 3 — Technische Tiefe"
|
||
- **Zweck:** Auditor:innen & Ingenieur:innen; standardmäßig **eingeklappt**.
|
||
- Toggle-Button rechts „Technische Details anzeigen/ausblenden". Eingeklappt: gestrichelte
|
||
Platzhalter-Karte mit Inline-„Anzeigen". Aufgeklappt: 2-Spalten-Grid mit
|
||
- **Norm- & Annex-Referenzen** (Tabelle: Mono-Norm-ID · Geltungs-/Typ-Badge ·
|
||
Kurzlabel) + Serif-Hinweis kursiv: „Normtexte werden nie reproduziert — nur
|
||
Nummern, Titel & Abschnittsverweise."
|
||
- **Risiko-Modelle**: zwei Boxen, Formeln in Mono — `R = S × (F + W + P) = 27`
|
||
(EN-62061-Stil) und `R = P × E × C = 63` (Fine-Kinney).
|
||
- **Deterministische Pipeline** (volle Breite): 10 Mono-Step-Pills + grünes Badge
|
||
„reproduzierbar ohne LLM".
|
||
|
||
### Sektion „Design-Sprache"
|
||
Referenz-Legende: Geltung (3 Chips + Bedeutung), Severity (4 Chips), Domänen-Farben
|
||
(3 Swatches), Typografie (3 Specimens), und ein dunkler **Leitprinzipien**-Block (4 Punkte).
|
||
|
||
---
|
||
|
||
## Interactions & Behavior
|
||
- **Linke Nav → Sprung:** sanftes Scrollen zur Sektion via
|
||
`window.scrollTo({top: el.getBoundingClientRect().top + scrollY - 16, behavior:'smooth'})`.
|
||
**Niemals `scrollIntoView`.**
|
||
- **Hazard-Aufklapper:** pro Karte unabhängig auf/zu (Caret ▸/▾).
|
||
- **Technik-Toggle:** globaler Show/Hide für Ebene-3-Inhalte; Button-Label wechselt.
|
||
- **Geltung-Filter:** Alle/Pflicht/Empfehlung filtert den Backlog; aktiver Zustand
|
||
via gefülltem Indigo-Dot (kein Layout-Shift).
|
||
- **Hover:** Nav-Items bekommen weißen Hintergrund; Buttons leichte
|
||
Farb-/Rahmen-Verschiebung. Transitionen ~120–160ms.
|
||
|
||
## State Management
|
||
| State | Typ | Trigger / Default |
|
||
|---|---|---|
|
||
| `showTech` | bool | Technik-Toggle · default `false` |
|
||
| `geltung` | `'alle' \| 'pflicht' \| 'empfehlung'` | Filter-Buttons · default `'alle'` |
|
||
| `open[hazardIndex]` | bool-Map | Hazard-Aufklapper · default: erste Karte offen |
|
||
|
||
Konfigurierbare Defaults (im Prototyp als Props): `technikDefault`,
|
||
`startFilter`, `hazardOpen` (`erste`/`alle`/`keine`).
|
||
|
||
## Beispiel-Daten (im Prototyp hinterlegt — als Platzhalter ersetzen)
|
||
Zwei Hazards: „Quetschen zwischen Last und Rahmen" (CE: Zweihandschaltung +
|
||
trennende Schutzeinrichtung PL d; Cyber: Authentifizierungs-Umgehung/Firmware;
|
||
Maßnahmen M542 Pflicht, M541 Pflicht, M-INFO-2 Empfehlung) und „Lastabsturz durch
|
||
Überlast" (CE: Überlastsicherung/Lastmomentbegrenzer; Cyber: manipulierte
|
||
Signale/Parameter; Maßnahmen M547 Pflicht, M601 Pflicht, M-INFO-5 Empfehlung).
|
||
Backlog-Top-6, Norm-Refs und Pipeline-Steps siehe `renderVals()` in der Datei.
|
||
|
||
## Assets
|
||
Keine Bilddateien. Icons sind Unicode-Glyphen (◈ ◑ ◇ ○ ✓ ! ⚡ → 🧭) — im
|
||
Zielsystem durch euer Icon-Set ersetzen. Fonts via Google Fonts (s. o.).
|
||
|
||
## Files
|
||
- `Arbeitsbereich.dc.html` — Referenz-Markup (Inline-Styles) + Daten/Logik am Ende.
|
||
|
||
---
|
||
|
||
## Vorschlag für den ersten Claude-Code-Prompt
|
||
> „Implementiere die Sektion *Ebene 2 — Cyber trifft Safety* aus
|
||
> `design_handoff_breakpilot_redesign/README.md` als React-Komponente in unserem
|
||
> bestehenden Stack. Nutze unsere vorhandenen Card-/Badge-/Button-Komponenten,
|
||
> aber führe das **Geltung-Chip-System** (Pflicht/Empfehlung/Kann) und die
|
||
> **Domänen-Farben** (Safety/Cyber/Schnittstelle) exakt nach den Tokens ein.
|
||
> Halte die 3-Ebenen-Hierarchie und den Co-Pilot-Ton ein. IDs nur in Monospace
|
||
> nachgestellt, nie als Überschrift."
|