From 112475e873fdd420461b296d47e5ebce5fd6b091 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 21:27:07 +0000 Subject: [PATCH] Kundenansicht neu E-Fix F2: Sperre der Mitarbeiter-Kundenansicht als echte Sperre in der neuen Seite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit public/kundenansicht.js hängt bei 409 view_replaced und 401 view_expired .kb-view-overlay an den Body; die Regeln dafür standen nur in der alten kundenbereich.css. In der neuen Seite entstand ein unformatierter Absatz mit nacktem Knopf unter der Leiste. Jetzt: fixiert, deckend weiß, über Konto und Leiste, Text und Knopf "Tab schließen" (44 px, schwarz). Pin in test/knEfixCss.test.js, Ansicht kn-huelle-sperre im Werkzeug. Co-Authored-By: Claude Sonnet 5.5 --- public/neu/huelle.css | 10 ++++++++++ test/knEfixCss.test.js | 26 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 test/knEfixCss.test.js diff --git a/public/neu/huelle.css b/public/neu/huelle.css index 98f0c5a..e362705 100644 --- a/public/neu/huelle.css +++ b/public/neu/huelle.css @@ -76,6 +76,16 @@ } @keyframes kn-sheet-hoch { from { transform: translateY(100%); } } +/* ---------- Sperre der Mitarbeiter-Kundenansicht (E-Fix F2) ---------- + public/kundenansicht.js hängt bei 409 view_replaced bzw. 401 view_expired ein div.kb-view-overlay (role alertdialog) an den Body. Die alte Seite + gestaltet es in kundenbereich.css, die dashboard.html nicht lädt: hier die Regeln für die neue Seite. Deckend weiß über allem (Konto 60, Leiste 40), + damit nichts Veraltetes bedienbar bleibt. */ +.kb-view-overlay { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: max(24px, env(safe-area-inset-top)) 24px max(24px, env(safe-area-inset-bottom)); background: var(--kn-bg); } +.kb-view-overlay-card { width: 100%; max-width: 420px; text-align: center; } +.kb-view-overlay-card p { margin: 0 0 24px; font-size: 17px; line-height: 26px; color: var(--kn-text); } +.kb-view-overlay-card button { min-height: 44px; padding: 0 24px; border-radius: var(--kn-radius); background: var(--kn-accent); color: #fff; font-weight: 600; box-shadow: var(--kn-shadow-btn); } +.kb-view-overlay-card button:hover { background: var(--kn-accent-hover); } + /* ---------- Gerüst: Spalte, Inhalt, Menü (Desktop) und Kopf ---------- */ .kn { --kn-kopf-h: 52px; } diff --git a/test/knEfixCss.test.js b/test/knEfixCss.test.js new file mode 100644 index 0000000..309cde4 --- /dev/null +++ b/test/knEfixCss.test.js @@ -0,0 +1,26 @@ +import { test } from 'node:test' +import assert from 'node:assert/strict' +import { lies } from './support/knHuelle.js' + +// Abschlussprüfung Phase E (Fix-Welle): Pins für die CSS-Befunde der neuen Seite. Sie lesen nur Quelltext, kein Browser. +const HUELLE = lies('huelle.css') +const regel = (css, selektor) => { + const m = css.match(new RegExp(`(?:^|\\n)${selektor.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*\\{([^}]*)\\}`)) + return m ? m[1] : '' +} + +test('F2: die Sperre der Mitarbeiter-Kundenansicht (.kb-view-overlay) ist in der neuen Seite eine echte Sperre', () => { + const o = regel(HUELLE, '.kb-view-overlay') + assert.match(o, /position:\s*fixed/) + assert.match(o, /inset:\s*0\b/) + assert.match(o, /z-index:\s*(\d{3,})/) // über Konto (60), Leiste (40) und Banner + assert.ok(Number(o.match(/z-index:\s*(\d+)/)?.[1]) > 60) + assert.match(o, /background:\s*var\(--kn-bg\)/) // deckend weiß, kein Glas, kein rgba mit Durchsicht + assert.doesNotMatch(o, /rgba|transparent|opacity/) + const karte = regel(HUELLE, '.kb-view-overlay-card') + assert.match(karte, /max-width:\s*\d+px/) + const knopf = regel(HUELLE, '.kb-view-overlay-card button') + assert.match(knopf, /min-height:\s*44px/) + assert.match(knopf, /background:\s*var\(--kn-accent\)/) + assert.match(regel(HUELLE, '.kb-view-overlay-card p'), /font-size:\s*\d+px/) +})