fix(ui): Header während der ersten Recherche bedienbar halten

Das blockierende Fortschritts-Overlay (.progress-overlay.blocking) liegt
position:fixed über dem gesamten Viewport und schluckt damit auch die
Klicks auf den globalen Header. Beim ersten Durchlauf eines Falls waren so
Barrierefreiheit, Theme-Wechsel, Konto-Menü inkl. Org-Switcher und
Abmelden nicht erreichbar.

Neue Body-Klasse first-refresh-blocking hebt den Header per z-index über
das Overlay, solange dieses blockierend sichtbar ist. UI._syncHeaderAccess()
spiegelt den Overlay-Zustand an allen Stellen, die das Overlay ein- oder
ausblenden.

Die fallbezogenen Aktionen (Aktualisieren, Bearbeiten, ...) bleiben
unverändert gesperrt: dafür sorgen weiterhin #incident-view.refresh-blurred
und .incident-header-actions.first-refresh-locked.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-07-23 20:55:46 +00:00
Ursprung 3a3076c4cf
Commit e3b4e25429
4 geänderte Dateien mit 33 neuen und 3 gelöschten Zeilen

Datei anzeigen

@@ -784,6 +784,7 @@ const App = {
// Hide any popup/mini from previous incident
const prevOverlay = document.getElementById('progress-overlay');
if (prevOverlay) prevOverlay.style.display = 'none';
if (typeof UI !== 'undefined' && UI._syncHeaderAccess) UI._syncHeaderAccess();
const prevMini = document.getElementById('progress-mini');
if (prevMini) prevMini.style.display = 'none';
const blurTarget = document.getElementById('incident-view');
@@ -2596,6 +2597,7 @@ async handleRefresh() {
// Temporarily hide progress popup so confirm dialog is fully visible
const progressOverlay = document.getElementById('progress-overlay');
if (progressOverlay) progressOverlay.style.display = 'none';
UI._syncHeaderAccess();
const ok = await confirmDialog((typeof T === 'function' ? T('confirm.cancel_running_research', 'Laufende Recherche abbrechen?') : 'Laufende Recherche abbrechen?'));
@@ -2603,11 +2605,13 @@ async handleRefresh() {
if (!ok) {
const state = UI._progressState[this.currentIncidentId];
if (state && progressOverlay) progressOverlay.style.display = 'flex';
UI._syncHeaderAccess();
return;
}
// Show cancelling state in popup
if (progressOverlay) progressOverlay.style.display = 'flex';
UI._syncHeaderAccess();
const btn = document.getElementById('progress-cancel-btn');
if (btn) {
btn.textContent = (typeof T === 'function' ? T('action.cancelling', 'Wird abgebrochen...') : 'Wird abgebrochen...');

Datei anzeigen

@@ -355,6 +355,20 @@ const UI = {
this._showPopupProgress(status, extra, state);
},
/**
* Hält den globalen Header bedienbar, solange das blockierende
* Fortschritts-Overlay sichtbar ist. Die Body-Klasse hebt den Header per
* z-index über das Overlay: Barrierefreiheit, Theme, Konto-Menü und
* Abmelden müssen jederzeit erreichbar sein.
*/
_syncHeaderAccess() {
const overlay = document.getElementById('progress-overlay');
const blocking = !!overlay
&& overlay.classList.contains('blocking')
&& overlay.style.display !== 'none';
document.body.classList.toggle('first-refresh-blocking', blocking);
},
_showPopupProgress(status, extra, state) {
const overlay = document.getElementById('progress-overlay');
const popup = document.getElementById('progress-popup');
@@ -381,6 +395,7 @@ const UI = {
} else {
overlay.classList.remove('blocking');
}
this._syncHeaderAccess();
// Minimize button: only for updates (not first)
const minBtn = document.getElementById('progress-popup-minimize');
@@ -485,6 +500,7 @@ const UI = {
// Hide popup
const overlay = document.getElementById('progress-overlay');
if (overlay) overlay.style.display = 'none';
this._syncHeaderAccess();
},
minimizeProgress(incidentId) {
@@ -528,6 +544,7 @@ const UI = {
overlay.style.display = 'flex';
overlay.classList.remove('blocking');
}
this._syncHeaderAccess();
// Mark all steps done
document.querySelectorAll('.progress-check-item').forEach(item => {
@@ -620,6 +637,7 @@ const UI = {
if (incidentId === App.currentIncidentId) {
const overlay = document.getElementById('progress-overlay');
if (overlay) { overlay.style.display = 'none'; overlay.classList.remove('blocking'); }
this._syncHeaderAccess();
const mini = document.getElementById('progress-mini');
if (mini) mini.style.display = 'none';
}