From 6beed389999cc637d58a47e3796a0d5293152339 Mon Sep 17 00:00:00 2001 From: BigSimmo <87357024+BigSimmo@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:26:11 +0800 Subject: [PATCH 1/6] Implement mobile touch ergonomics audit recommendations --- src/app/documents/search/loading.tsx | 2 +- src/app/globals.css | 10 ++++++++-- src/components/AccessibleTable.tsx | 2 +- src/components/DocumentTagCloud.tsx | 2 +- .../calculator-mockups/bedside-sheet-mockup.tsx | 8 ++++---- .../calculator-mockups/calculator-ui.tsx | 2 +- .../calculator-mockups/directory-grid-mockup.tsx | 2 +- .../calculator-mockups/popup-sheet-mockup.tsx | 6 +++--- .../calculator-mockups/search-detail-mockup.tsx | 10 +++++----- src/lib/haptics.ts | 16 ++++++++++++++++ 10 files changed, 41 insertions(+), 19 deletions(-) create mode 100644 src/lib/haptics.ts diff --git a/src/app/documents/search/loading.tsx b/src/app/documents/search/loading.tsx index 7a40dd076..bb2b591d2 100644 --- a/src/app/documents/search/loading.tsx +++ b/src/app/documents/search/loading.tsx @@ -2,7 +2,7 @@ import { DocumentSearchPageSkeleton } from "@/components/mode-home-page-skeleton export default function Loading() { return ( -
+
); diff --git a/src/app/globals.css b/src/app/globals.css index 7e560bc47..2ac6e7a5d 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -502,7 +502,8 @@ a, summary, input, textarea, -select { +select, +.touch-card { outline: none; touch-action: manipulation; -webkit-tap-highlight-color: transparent; @@ -536,7 +537,7 @@ summary { inline body/citation links down 1px on tap, which reads oddly for text links. */ button:active, summary:active { - transform: translateY(1px); + transform: scale(0.97); } summary::-webkit-details-marker { @@ -587,6 +588,11 @@ summary::-webkit-details-marker { background: color-mix(in srgb, var(--surface) 72%, transparent); } + .modal-landscape-container { + padding-left: max(1rem, var(--safe-area-left)); + padding-right: max(1rem, var(--safe-area-right)); + } + .universal-header-mode-button { border-color: var(--border); background: var(--surface); diff --git a/src/components/AccessibleTable.tsx b/src/components/AccessibleTable.tsx index 912c22c16..40b84e54b 100644 --- a/src/components/AccessibleTable.tsx +++ b/src/components/AccessibleTable.tsx @@ -458,7 +458,7 @@ export function AccessibleTable({ portal testId="table-fullscreen-dialog" contentClassName="sm:max-w-none" - bodyClassName="p-3 pb-[max(1rem,env(safe-area-inset-bottom))] sm:p-3" + bodyClassName="py-3 pb-[max(1rem,env(safe-area-inset-bottom))] modal-landscape-container sm:p-3" >
{lowConfidence ? ( diff --git a/src/components/DocumentTagCloud.tsx b/src/components/DocumentTagCloud.tsx index 2fec24755..b4b69c484 100644 --- a/src/components/DocumentTagCloud.tsx +++ b/src/components/DocumentTagCloud.tsx @@ -75,7 +75,7 @@ function DocumentTagChip({ }) { const Icon = groupIcon[tag.group]; const tagClassName = cn( - "inline-flex max-w-full items-center gap-1 rounded-md border font-semibold shadow-[var(--shadow-inset)]", + "relative inline-flex max-w-full items-center gap-1 rounded-md border font-semibold shadow-[var(--shadow-inset)] before:absolute before:-inset-y-2 before:-inset-x-1 before:content-['']", compact ? "min-h-6 px-2 text-2xs" : "min-h-7 px-2 text-2xs", groupToneClass(tag.group), tag.queryMatched && "ring-2 ring-[color:var(--focus)]/25", diff --git a/src/components/calculator-mockups/bedside-sheet-mockup.tsx b/src/components/calculator-mockups/bedside-sheet-mockup.tsx index 9a520f42e..b0c89bd30 100644 --- a/src/components/calculator-mockups/bedside-sheet-mockup.tsx +++ b/src/components/calculator-mockups/bedside-sheet-mockup.tsx @@ -87,7 +87,7 @@ function SheetSection({ )} {derived.flags.length > 0 ? (
{startedCalcs.length ? ( -
+
{startedCalcs.map(({ calc, derived }) => (