fix(mobile): raise primary touch controls to the 44px floor

Sweep the primary touch controls that sat below the 44px tap-target
floor on phones onto the canonical `min-h-11 sm:min-h-9` (text) /
`size-11 sm:size-9` (icon) pattern, condensing back at `sm:` upward:

- Coach composer mic / stop / send icon buttons (were `size-9`).
- Dashboard hero CTA, link and action variants (were `size="sm"`).
- Vorsorge list-view "mark done" button (was `min-h-9`) and its kebab,
  which now uses `size="icon-lg"` so the rendered control is 44px
  rather than the icon variant's 40px.
- Illness list-view "log day" button (was `min-h-9`).
- Medication wizard Step 3 injection-sites disclosure (was `h-9`).

The Vorsorge dashboard-card capture action was raised alongside the
ListRow migration.
This commit is contained in:
Marc-André Bombeck committed 2026-06-19 21:18:19 +02:00
1 parent 54a2d19833
commit e3071d4f0a
5 files changed
+14 -12

No files matched your search

@@ -258,15 +258,17 @@ export function DashboardHero({
cta.kind === "link" ? (
<Button
asChild
size="sm"
size="default"
variant="outline"
className="min-h-11 sm:min-h-9"
data-slot="dashboard-hero-cta"
>
<Link href={cta.href}>{t(ctaLabelKey)}</Link>
</Button>
) : (
<Button
size="sm"
size="default"
className="min-h-11 sm:min-h-9"
data-slot="dashboard-hero-cta"
onClick={() => onQuickEntry(cta.target)}
>
+1 -1
View File
@@ -109,7 +109,7 @@ function EpisodeCard({
<Button
variant="outline"
size="sm"
className="min-h-9"
className="min-h-11 sm:min-h-9"
onClick={() => onLogDay(episode.id)}
>
{t("illness.logDay")}
@@ -352,7 +352,7 @@ export function CoachInput({
: t("insights.coach.dictate")
}
className={cn(
"size-9 shrink-0 rounded-xl transition-colors",
"size-11 shrink-0 rounded-xl transition-colors sm:size-9",
listening
? "text-dracula-pink bg-dracula-pink/10 hover:text-dracula-pink"
: "text-muted-foreground hover:text-foreground",
@@ -396,8 +396,8 @@ export function CoachInput({
// Desktop shrinks back to `text-sm` for the compact
// composer.
"min-w-0 flex-1 resize-none bg-transparent text-base leading-relaxed outline-none sm:text-sm",
// Centre the single-line state against the 36 px send
// button so the placeholder and the icon share a baseline.
// Centre the single-line state against the send button so
// the placeholder and the icon share a baseline.
"px-2 py-1.5",
"max-h-[9.5rem] overflow-auto",
// v1.18.7 — calm, thin scrollbar inside the composer when
@@ -420,7 +420,7 @@ export function CoachInput({
data-slot="coach-input-stop"
aria-label={t("insights.coach.stop")}
title={t("insights.coach.stop")}
className="size-9 shrink-0 rounded-xl"
className="size-11 shrink-0 rounded-xl sm:size-9"
>
<Square className="size-3.5 fill-current" aria-hidden="true" />
</Button>
@@ -432,7 +432,7 @@ export function CoachInput({
data-slot="coach-input-send"
aria-label={t("insights.coach.send")}
title={t("insights.coach.send")}
className="size-9 shrink-0 rounded-xl"
className="size-11 shrink-0 rounded-xl sm:size-9"
>
{isStreaming ? (
<Loader2
@@ -794,8 +794,8 @@ function VorsorgeCard({
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
size="icon"
className="min-h-11 min-w-11"
size="icon-lg"
className="sm:size-10"
aria-label={t("common.moreOptions")}
>
<MoreVertical className="h-4 w-4" />
@@ -909,7 +909,7 @@ function VorsorgeCard({
type="button"
size="sm"
className={cn(
"min-h-9",
"min-h-11 sm:min-h-9",
isDue && "bg-success text-success-foreground hover:bg-success/90",
)}
onClick={onPrimaryAction}
@@ -243,7 +243,7 @@ export function Step3Dose({ payload, applyPartial }: StepProps) {
<Button
type="button"
variant="ghost"
className="h-9 w-full justify-between px-2"
className="min-h-11 w-full justify-between px-2 sm:min-h-9"
aria-expanded={allowedOpen}
onClick={() => setAllowedOpen((prev) => !prev)}
>