From 16e0e98943eec99aea85f59dfe567c7f4f2c34d8 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 9 May 2026 20:21:38 -0400 Subject: [PATCH] =?UTF-8?q?feat(web):=20mobile=20mechanical=20sweep=20?= =?UTF-8?q?=E2=80=94=20pointer-aware=20arrows,=20h3=20dividers,=20modal=20?= =?UTF-8?q?safe-area?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HorizontalScrollRow arrows bump 32px → 40px on coarse pointers (touch screens) for finger-friendly hits; mouse pointers unchanged. - AlphabeticalGrid divider letter is now

so screen readers announce it as a section heading. Margin reset to preserve layout. - Modal overlay gets p-4 so max-w-md modals stay inside the safe area at 375px viewport. Covers all routes that use the shared component (discover track-confirm, quarantine typed-DELETE, users password-reset, etc.). Co-Authored-By: Claude Opus 4.7 (1M context) --- web/src/lib/components/AlphabeticalGrid.svelte | 4 +++- web/src/lib/components/HorizontalScrollRow.svelte | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/web/src/lib/components/AlphabeticalGrid.svelte b/web/src/lib/components/AlphabeticalGrid.svelte index 33f2c687..4a735a67 100644 --- a/web/src/lib/components/AlphabeticalGrid.svelte +++ b/web/src/lib/components/AlphabeticalGrid.svelte @@ -33,7 +33,7 @@ {#each segments as seg, i (i)} {#if seg.divider}
- {seg.divider} +

{seg.divider}

{/if} @@ -61,6 +61,8 @@ font-size: 24px; font-weight: 500; color: var(--fs-parchment); + /* h3 default browser margin would push the divider; reset. */ + margin: 0; } .rule { flex: 1; diff --git a/web/src/lib/components/HorizontalScrollRow.svelte b/web/src/lib/components/HorizontalScrollRow.svelte index 1bd92f23..bdb91497 100644 --- a/web/src/lib/components/HorizontalScrollRow.svelte +++ b/web/src/lib/components/HorizontalScrollRow.svelte @@ -152,4 +152,12 @@ } .arrow:hover:not(:disabled) { color: var(--fs-parchment); } .arrow:disabled { opacity: 0.3; cursor: not-allowed; } + /* Coarse pointers (touch screens) get larger arrows for finger-friendly + hit area; mouse pointers keep the visually compact 32px size. */ + @media (pointer: coarse) { + .arrow { + width: 40px; + height: 40px; + } + }