From a689f69c1d430806b6bb16a333a9b5d036702886 Mon Sep 17 00:00:00 2001 From: BigSimmo <87357024+BigSimmo@users.noreply.github.com> Date: Mon, 13 Jul 2026 00:04:42 +0800 Subject: [PATCH 1/4] fix(responsive): resolve site-wide layout defects across all breakpoints Site-wide responsive review driving every production route at 11 widths (320-1536px + landscape) in Chromium, with page-overflow and internal-clip probes plus visual triage. Fixes 7 layout defects: - Answer follow-up composer was dragged ~186px off-screen across the entire 640-1023px band in the submitted-answer view. Root cause: the composer was `sm:sticky` (top-docked) in that band, but the centering CSS is written for a `fixed` element, so translateX(-50%) pushed it off the left edge. Made the answer composer `fixed bottom-0` at all widths (bottom-docked, consistent with phone/desktop); the existing rail-aware centering rules handle it, so the earlier CSS workaround was reverted (globals.css unchanged). Desktop and phone layouts are unchanged; only the tablet band changes. - DocumentViewer "Answer from this" button clipped at 320px: gate whitespace-nowrap to sm so it wraps on narrow phones. - Service detail long status chip collapsed into a circle when its text wrapped: rounded-full -> rounded-2xl (still a pill when single-line). - Tools/Applications list-row CTAs clipped at <=390px: nested single-column display:grid implicit auto columns weren't shrinking -> grid-cols-1. - documents-source monitoring table cards + evidence header overflowed at 320px: responsive column/title sizing (sm: restores the desktop sizing). - Differentials candidate-card title clipped a long word at 320px: break-words. Verified: verify:cheap green, verify:ui exit 0, ui-tools+ui-overlap 57 passed, zero horizontal overflow at any width. Co-Authored-By: Claude Opus 4.8 --- src/components/DocumentViewer.tsx | 2 +- src/components/applications-launcher-page.tsx | 6 +++--- .../clinical-dashboard/master-search-header.tsx | 2 +- .../differential-presentation-workflow-page.tsx | 2 +- src/components/master-document-flow-mockups.tsx | 10 ++++++---- src/components/services/service-detail-page.tsx | 4 ++-- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/components/DocumentViewer.tsx b/src/components/DocumentViewer.tsx index 28a40eafdb..0e4e4eef21 100644 --- a/src/components/DocumentViewer.tsx +++ b/src/components/DocumentViewer.tsx @@ -1889,7 +1889,7 @@ function DocumentOverviewLanding({ onClick={onAskFromDocument} disabled={!canSummarizeDocument} icon={Sparkles} - className={cn(secondaryButton, "min-h-12 whitespace-nowrap px-2 text-xs sm:text-sm")} + className={cn(secondaryButton, "min-h-12 px-2 text-xs sm:whitespace-nowrap sm:text-sm")} > Answer from this diff --git a/src/components/applications-launcher-page.tsx b/src/components/applications-launcher-page.tsx index 446c2a73bd..4b2fea7093 100644 --- a/src/components/applications-launcher-page.tsx +++ b/src/components/applications-launcher-page.tsx @@ -785,7 +785,7 @@ export function ApplicationsLauncherWorkspace({
@@ -801,7 +801,7 @@ export function ApplicationsLauncherWorkspace({
-
+
{filteredApps.length === 0 ? (

{copy.emptyTitle}

@@ -814,7 +814,7 @@ export function ApplicationsLauncherWorkspace({ ))}
-
+
{filteredApps.map((app) => ( ))} diff --git a/src/components/clinical-dashboard/master-search-header.tsx b/src/components/clinical-dashboard/master-search-header.tsx index 2510ebc563..50ebd81a73 100644 --- a/src/components/clinical-dashboard/master-search-header.tsx +++ b/src/components/clinical-dashboard/master-search-header.tsx @@ -1136,7 +1136,7 @@ export function MasterSearchHeader({ isDesktopHomeComposer ? "universal-home-search-edge mx-auto w-full" : usesAnswerFooterStyle - ? "floating-composer-edge dashboard-composer-edge z-40 mx-auto max-w-3xl max-sm:fixed max-sm:bottom-0 sm:sticky sm:top-[calc(4.75rem+env(safe-area-inset-top))] sm:z-20 lg:fixed lg:bottom-0 lg:top-auto lg:max-w-4xl" + ? "floating-composer-edge dashboard-composer-edge fixed bottom-0 z-40 mx-auto max-w-3xl lg:max-w-4xl" : usesMobileBottomStyle ? cn( usesPhoneFooterDock diff --git a/src/components/differentials/differential-presentation-workflow-page.tsx b/src/components/differentials/differential-presentation-workflow-page.tsx index f84fb3dea5..5b9c59fe5d 100644 --- a/src/components/differentials/differential-presentation-workflow-page.tsx +++ b/src/components/differentials/differential-presentation-workflow-page.tsx @@ -474,7 +474,7 @@ function MobileCandidateCard({ - + {candidate.record.title} diff --git a/src/components/master-document-flow-mockups.tsx b/src/components/master-document-flow-mockups.tsx index 6b7b822304..cc4972b653 100644 --- a/src/components/master-document-flow-mockups.tsx +++ b/src/components/master-document-flow-mockups.tsx @@ -473,7 +473,7 @@ function MonitoringRowCards({ compact = false }: { compact?: boolean }) {
@@ -482,7 +482,7 @@ function MonitoringRowCards({ compact = false }: { compact?: boolean }) {

{row[0]}

-
+
{monitoringTableHeadings.slice(1).map((heading, index) => (
{heading}
@@ -1596,11 +1596,13 @@ function MasterEvidenceDetailContent({ >
-
+
{filteredApps.length === 0 ? (

{copy.emptyTitle}