From 1cdab21514b7f2e5b12a4380da8c9ad0c340d41a Mon Sep 17 00:00:00 2001 From: MechaCat02 Date: Sat, 16 May 2026 19:01:54 +0200 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20a11y=20backdrop,=20=E2=89=A544?= =?UTF-8?q?px=20PIN=20button,=20test-ids=20on=20auth=20&=20upload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - account/+page.svelte: remove `aria-hidden="true"` from the leave-confirm and data-mode-warning bottom-sheet backdrops. The attribute cascaded into the dialog children, making the inner Abmelden/Aktivieren/Abbrechen buttons unreachable in the accessibility tree (and to Playwright's `getByRole`). Discovered while writing the E2E suite; the visual layout is unchanged. - join/+page.svelte: bump the PIN-copy button from `py-1` (28px tall) to `min-h-11 min-w-11 py-2` so it clears the ≥44px touch-target floor on mobile. Touch-target audit revealed the gap. - data-testid attributes on stable interactive elements (join name input, join submit, PIN modal + copy + continue, recovery PIN + submit + try- different-name, admin login password + submit + error, recover name + PIN + submit + error, upload header submit + sticky submit + caption textarea). Targeted at ~20 spots where semantic locators were ambiguous (e.g. two "Hochladen" buttons on /upload, German strings that may iterate). Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/src/routes/account/+page.svelte | 4 ++-- frontend/src/routes/admin/login/+page.svelte | 4 +++- frontend/src/routes/join/+page.svelte | 19 +++++++++++++------ frontend/src/routes/recover/+page.svelte | 5 ++++- frontend/src/routes/upload/+page.svelte | 3 +++ 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/frontend/src/routes/account/+page.svelte b/frontend/src/routes/account/+page.svelte index bbdce47..ec04814 100644 --- a/frontend/src/routes/account/+page.svelte +++ b/frontend/src/routes/account/+page.svelte @@ -384,7 +384,7 @@ {#if dataModeWarningOpen} -
(dataModeWarningOpen = false)} aria-hidden="true"> +
(dataModeWarningOpen = false)}>
e.stopPropagation()} @@ -418,7 +418,7 @@ {#if leaveConfirmOpen} -
(leaveConfirmOpen = false)} aria-hidden="true"> +
(leaveConfirmOpen = false)}>
e.stopPropagation()} diff --git a/frontend/src/routes/admin/login/+page.svelte b/frontend/src/routes/admin/login/+page.svelte index 38add3e..79cb1b7 100644 --- a/frontend/src/routes/admin/login/+page.svelte +++ b/frontend/src/routes/admin/login/+page.svelte @@ -45,16 +45,18 @@ bind:value={password} placeholder="Passwort" autocomplete="current-password" + data-testid="admin-password-input" class="mb-3 w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-lg text-gray-900 placeholder-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:placeholder-gray-500" /> {#if error} -

{error}

+

{error}

{/if}
{#if showPinModal} -
+

Dein Wiederherstellungs-PIN

@@ -178,10 +183,11 @@

- {pin} + {pin} @@ -189,6 +195,7 @@