diff --git a/CLAUDE.md b/CLAUDE.md index b3ec33c..7423c26 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -136,7 +136,7 @@ src/: static/: index.html: "Login-Seite (Magic-Link), JS inline" dashboard.html: "Hauptdashboard (Sidebar + Reiter-Ansicht + 8 Modals + Chat-Widget)" - studio.html: "Studio (3-Spalten-Werkstatt, online nur fuer info@ sichtbar - Gating rein clientseitig)" + studio.html: "Studio (3-Spalten-Werkstatt, online nur fuer info@ sichtbar - Gating rein clientseitig). Reiter Einstellungen ersetzt das Bearbeiten-Modal der klassischen Ansicht und enthaelt die Wahl des KI-Wegs je Fall." css/: style.css: "AegisSight Design System (Dark/Light Theme, alle Komponenten)" studio.css: "Studio-spezifische Styles" @@ -144,7 +144,7 @@ src/: api.js: "REST-API-Client (fetch, Auth-Header, 30s Timeout, 403 -> Nur-Lese-Modus)" app.js: "Hauptlogik: ThemeManager, NotificationCenter, App-Objekt (181 KB)" components.js: "UI-Rendering: Sidebar, Faktenchecks, Toasts, Progress, Karte (geteilt mit Studio)" - studio.js: "Kompletter Studio-Controller (109 KB)" + studio.js: "Kompletter Studio-Controller (116 KB), enthaelt auch den Einstellungen-Reiter je Fall" chat.js: "Chat-Assistent Widget (Bedienfragen)" pipeline.js: "Grafische Analysepipeline (11 Schritte, Live-Animation)" layout.js: "Reiter-Umschalter je Lage (merkt letzten Reiter; enthaelt noch gridstack-Legacy-Stubs)" @@ -168,6 +168,9 @@ tests/: test_faktencheck_belegtiefe.py: "Belegzaehlung nach Medienhaus, Nachbedingung fuer bestaetigte Fakten, Sperre gegen das Hochstufen von developing, getrennte Bezeichnungen fuer Widerspruch und Widerlegung" test_rss_treffer.py: "Keyword-Matching der RSS-Auswertung: Mehrwort-Begriffe treffen wortweise, Auftrag verlangt Einzelbegriffe und Eigennamen" test_bedrock_wiederholung.py: "Wiederholung des EU-Wegs bei Kapazitaets- und Kontingentfehlern, Staffelung, Zeit- und Wartebudget, Sichtbarkeit im Refresh-Protokoll" + test_sammelaktionen.js: "Sammelaktionen der Seitenleiste im klassischen Dashboard, Auswahlmodus, Filterbeachtung, Loeschbestaetigung (Aufruf mit node)" + test_falleinstellungen.js: "Einstellungen-Reiter im Studio, Formular fuellen, nur Geaendertes speichern, KI-Weg umstellen samt Warnhinweis, Abo nachladen (Aufruf mit node)" + test_studio_struktur.py: "Strukturpruefung beider Oberflaechen ohne Browser, eindeutige IDs, jedes onclick zeigt auf eine vorhandene Methode, Cache-Buster, Design-Tokens" test_quellenausgabe.py: "Ausgabetreue des Quellenverzeichnisses: Nummern aus dem Lagebild statt Zeilennummern, keine Kappung, ein Verlag ein Name, Statistik deckungsgleich mit dem Verzeichnis" ``` diff --git a/src/static/css/studio.css b/src/static/css/studio.css index 632d82e..b183d15 100644 --- a/src/static/css/studio.css +++ b/src/static/css/studio.css @@ -1377,3 +1377,112 @@ .chat-offer-focus{font-size:12px;opacity:.7;margin-bottom:8px;} .chat-offer-btn{cursor:pointer;} .chat-offer-btn:disabled{opacity:.6;cursor:default;} + +/* === Einstellungen des Falls ========================================== */ +/* Ersetzt das Bearbeiten-Modal der klassischen Ansicht. Eine Spalte mit + begrenzter Breite, damit die Felder auf breiten Schirmen nicht auseinander + laufen. */ +.settings-panel { + max-width: 560px; + padding: 4px 2px 16px; +} + +.settings-panel .form-group { + margin-bottom: 16px; +} + +.settings-panel label { + display: block; + margin-bottom: 6px; + font-size: 13px; + font-weight: 500; + color: var(--text-secondary); +} + +.settings-panel .toggle-label { + display: flex; + margin-bottom: 0; +} + +.settings-panel input[type="text"], +.settings-panel input[type="number"], +.settings-panel input[type="time"], +.settings-panel select, +.settings-panel textarea { + width: 100%; +} + +.settings-panel textarea { + min-height: 72px; + resize: vertical; +} + +/* Hinweis auf einen gerade laufenden Schritt */ +.settings-note { + margin-bottom: 16px; + padding: 10px 12px; + border-radius: var(--radius); + border: 1px solid var(--border); + background: var(--bg-elevated); + font-size: 12px; + color: var(--text-secondary); +} + +.settings-note[hidden] { + display: none; +} + +/* Warnung, sobald der KI-Weg vom gespeicherten Stand abweicht */ +.settings-warn { + margin-top: 8px; + padding: 8px 10px; + border-left: 2px solid var(--warning); + background: var(--tint-warning); + color: var(--text-secondary); +} + +.settings-warn[hidden] { + display: none; +} + +.settings-foot { + display: flex; + align-items: center; + gap: 8px; + padding-top: 12px; + border-top: 1px solid var(--border); +} + +/* Der Zustandstext schiebt die Knoepfe nach rechts */ +.settings-state { + flex: 1; + min-width: 0; + font-size: 12px; + color: var(--text-tertiary); +} + +.settings-state.ok { + color: var(--success); +} + +.settings-state.fehler { + color: var(--error); +} + +/* Kennzeichen des KI-Wegs in der Fallliste. Schrumpft nicht, der Titel + kuerzt sich stattdessen. */ +.case-ai-tag { + flex-shrink: 0; + font-size: 10px; + font-weight: 700; + letter-spacing: 0.02em; + text-transform: uppercase; +} + +.case-ai-tag.ai-eu { + color: #10B981; +} + +.case-ai-tag.ai-anthropic { + color: var(--text-disabled); +} diff --git a/src/static/dashboard.html b/src/static/dashboard.html index 040d3f2..6b57189 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -13,7 +13,7 @@ - +