From 90e7d1af29afff71f20dd3d9afcd2bcc8c3fd985 Mon Sep 17 00:00:00 2001 From: Adam Eivy Date: Tue, 28 Apr 2026 07:08:48 +0000 Subject: [PATCH 1/2] style(client): improve mobile responsiveness across pages Make page headers stack on mobile (flex-col sm:flex-row), reduce padding on small screens (p-3 sm:p-4 md:p-6), enforce min-h-[40px] touch targets on buttons/inputs/selects, add overflow-x-auto for tab bars and tables, and use responsive grid breakpoints (grid-cols-2 sm:grid-cols-2 lg:grid-cols-4) to avoid skipped tiers. Affected pages: Search, PathFinder, Indexer, Integrity, Audit, Favorites (global + db-scoped), BrowserSettings, Gedcom, GenealogyProviders, Reports. --- client/src/components/audit/AuditPage.tsx | 83 ++++++++++--------- .../favorites/DatabaseFavoritesPage.tsx | 48 +++++------ .../components/favorites/FavoritesPage.tsx | 38 ++++----- client/src/components/indexer/IndexerPage.tsx | 39 +++++---- .../components/integrity/IntegrityPage.tsx | 46 +++++----- client/src/components/path/PathFinder.tsx | 41 ++++----- client/src/components/search/SearchPage.tsx | 43 +++++----- client/src/pages/BrowserSettingsPage.tsx | 27 +++--- client/src/pages/GedcomPage.tsx | 28 +++---- client/src/pages/GenealogyProviders.tsx | 49 +++++------ client/src/pages/ReportsPage.tsx | 34 ++++---- 11 files changed, 243 insertions(+), 233 deletions(-) diff --git a/client/src/components/audit/AuditPage.tsx b/client/src/components/audit/AuditPage.tsx index 84505a4..3c3effb 100644 --- a/client/src/components/audit/AuditPage.tsx +++ b/client/src/components/audit/AuditPage.tsx @@ -341,24 +341,24 @@ export function AuditPage() { } return ( -
+
{/* Header */} -
-
- -
-

Tree Auditor

+
+
+ +
+

Tree Auditor

{database && ( -

{database.rootName || database.id}

+

{database.rootName || database.id}

)}
-
+
{/* Config toggle */} @@ -377,13 +377,13 @@ export function AuditPage() { <> @@ -393,13 +393,13 @@ export function AuditPage() { <> @@ -410,8 +410,8 @@ export function AuditPage() { {/* Config panel */} {showConfig && config && ( -
-
+
+
@@ -422,7 +422,7 @@ export function AuditPage() { value={depthLimit ?? ''} placeholder="Unlimited" onChange={(e) => setDepthLimit(e.target.value ? parseInt(e.target.value, 10) : null)} - className="w-24 px-3 py-1.5 rounded-lg bg-app-bg border border-app-border text-app-text text-sm" + className="w-24 px-3 py-2 min-h-[40px] rounded-lg bg-app-bg border border-app-border text-app-text text-sm" /> generations
@@ -465,7 +465,7 @@ export function AuditPage() { {/* Summary cards */} {runs.length > 0 && ( -
+
-
+
+
{TABS.map(t => ( - + Page {page} of {totalPages} diff --git a/client/src/components/indexer/IndexerPage.tsx b/client/src/components/indexer/IndexerPage.tsx index c810828..4bb3ea6 100644 --- a/client/src/components/indexer/IndexerPage.tsx +++ b/client/src/components/indexer/IndexerPage.tsx @@ -143,13 +143,13 @@ export function IndexerPage() { const canStartIndexing = browserStatus?.connected && browserStatus?.familySearchLoggedIn && rootId; return ( -
-

Indexer

+
+

Indexer

{/* Top Row - Controls */} -
+
{/* Browser Status Panel */} -
+

Browser Connection

@@ -186,7 +186,7 @@ export function IndexerPage() { @@ -196,7 +196,7 @@ export function IndexerPage() { @@ -206,7 +206,7 @@ export function IndexerPage() { @@ -214,7 +214,7 @@ export function IndexerPage() { @@ -222,7 +222,7 @@ export function IndexerPage() {
{/* Indexer Status */} -
+

Status

{loading ? 'Stopping...' : 'Stop Indexing'} @@ -259,7 +259,7 @@ export function IndexerPage() {
{/* Start Form */} -
+

Start Indexing

@@ -272,7 +272,7 @@ export function IndexerPage() { value={rootId} onChange={e => setRootId(e.target.value.toUpperCase())} placeholder="e.g., KWCJ-RN4" - className="w-full px-3 py-2 border rounded-md bg-app-bg text-app-text border-app-border focus:border-app-accent focus:outline-none text-sm" + className="w-full px-3 py-2 min-h-[40px] border rounded-md bg-app-bg text-app-text border-app-border focus:border-app-accent focus:outline-none text-sm" />
@@ -286,7 +286,7 @@ export function IndexerPage() { value={maxGenerations} onChange={e => setMaxGenerations(e.target.value)} placeholder="∞" - className="w-full px-3 py-2 border rounded-md bg-app-bg text-app-text border-app-border focus:border-app-accent focus:outline-none text-sm" + className="w-full px-3 py-2 min-h-[40px] border rounded-md bg-app-bg text-app-text border-app-border focus:border-app-accent focus:outline-none text-sm" />
@@ -297,7 +297,7 @@ export function IndexerPage() { onProviderChange(e.target.value as BuiltInProvider)} - className="px-3 py-1.5 rounded-lg bg-app-bg border border-app-border text-app-text text-sm" + className="px-3 py-2 min-h-[40px] rounded-lg bg-app-bg border border-app-border text-app-text text-sm" disabled={discoveryRunning} > {PROVIDER_OPTIONS.map(opt => ( @@ -419,7 +419,7 @@ function ParentsTab({