diff --git a/src/components/settings/account-section.tsx b/src/components/settings/account-section.tsx index 9768680ac..2b158cbf7 100644 --- a/src/components/settings/account-section.tsx +++ b/src/components/settings/account-section.tsx @@ -458,39 +458,57 @@ export function AccountSection() { )} - {/* Password card */} + {/* Password card. v1.4.19 A6: action-button placement contract — + on mobile (`=sm`) it + right-aligns next to the title. The previous + `flex items-center justify-between` pattern overflowed the + card edge on Pixel 5 once button copy got longer than ~24 ch + (the German "Passwort ändern" already pushes it; the tour + card's "Restart onboarding tour" actually broke through the + right border by ~48 px). */}
-
-
- -

- {t("settings.passwordReset")} -

+
+
+
+ +

+ {t("settings.passwordReset")} +

+
+

+ {t("settings.changePasswordDescription")} +

-

- {t("settings.changePasswordDescription")} -

{/* Tour replay card. v1.4.15 Phase B5: a one-shot button that resets `users.onboarding_tour_completed` on the server AND dispatches a window event so a dashboard already in the - background reopens the spotlight tour immediately. */} + background reopens the spotlight tour immediately. v1.4.19 + A6 — same stack-on-mobile / right-align-on-desktop contract + as the password card so both action surfaces look identical. */}
-
-
- -

- {t("onboarding.tour.restart")} -

+
+
+
+ +

+ {t("onboarding.tour.restart")} +

+
+

+ {t("onboarding.tour.restartHint")} +

-

- {t("onboarding.tour.restartHint")} -

{tourMsg && (

-

+ {/* v1.4.19 A6 — title / action row uses the same stack-on-mobile, + right-align-on-desktop contract as Account → Password + + Restart onboarding tour. Avoids the long German "Auf Standard + zurücksetzen" copy clipping the card edge at narrow widths. */} +

@@ -171,6 +175,7 @@ export function DashboardLayoutSection({ id }: { id: string }) { size="sm" onClick={() => resetMutation.mutate()} disabled={resetMutation.isPending} + className="self-end sm:self-auto" > {t("dashboard.layoutReset")}