diff --git a/src/components/admin/_shared.tsx b/src/components/admin/_shared.tsx index b4ef25354..441750dbf 100644 --- a/src/components/admin/_shared.tsx +++ b/src/components/admin/_shared.tsx @@ -195,11 +195,18 @@ export function SettingsToggle({ onCheckedChange: (checked: boolean) => void; disabled: boolean; }) { + // v1.4.27 MB7 / CF-56 — stack the toggle row vertically on ` -
- {Icon && } -
+
+
+ {Icon && } +

{label}

{description && (

{description}

@@ -210,6 +217,7 @@ export function SettingsToggle({ checked={checked} onCheckedChange={onCheckedChange} disabled={disabled} + className="self-end sm:self-auto" />
); diff --git a/src/components/admin/feedback-inbox-section.tsx b/src/components/admin/feedback-inbox-section.tsx index 589808fa3..76852cff5 100644 --- a/src/components/admin/feedback-inbox-section.tsx +++ b/src/components/admin/feedback-inbox-section.tsx @@ -85,20 +85,28 @@ export function FeedbackInboxSection() { onValueChange={(v) => setActiveStatus(v as FeedbackStatusType)} className="mt-4" > - - {FEEDBACK_STATUS_TABS.map((s) => ( - - - {t( - `admin.feedback.tab${s.charAt(0) + s.slice(1).toLowerCase()}`, - )} - - - {counts[s] ?? 0} - - - ))} - + {/* v1.4.27 MB7 / CF-55 — wrap the TabsList in an + overflow-x-auto strip so the 4 status pills + their count + badges scroll horizontally on Pixel 5 / Galaxy Fold + instead of squashing the badge text below the legibility + floor. Hide the scrollbar visually but keep the gesture + working (matches the Insights tab-strip pattern). */} +
+ + {FEEDBACK_STATUS_TABS.map((s) => ( + + + {t( + `admin.feedback.tab${s.charAt(0) + s.slice(1).toLowerCase()}`, + )} + + + {counts[s] ?? 0} + + + ))} + +
{FEEDBACK_STATUS_TABS.map((s) => ( diff --git a/src/components/admin/general-settings-section.tsx b/src/components/admin/general-settings-section.tsx index 14e5236b3..61ca20bfe 100644 --- a/src/components/admin/general-settings-section.tsx +++ b/src/components/admin/general-settings-section.tsx @@ -41,8 +41,10 @@ export function GeneralSettingsSection() { disabled={updateSettings.isPending} /> -
-
+ {/* v1.4.27 MB7 / CF-56 — match the SettingsToggle stacking + contract: stack on ` +

{t("admin.defaultLanguage")}

{t("admin.defaultLanguageDescription")} @@ -54,7 +56,7 @@ export function GeneralSettingsSection() { updateSettings.mutate({ defaultLocale: e.target.value }) } disabled={updateSettings.isPending} - className="w-auto" + className="self-end sm:w-auto sm:self-auto" > diff --git a/src/components/settings/integrations-section.tsx b/src/components/settings/integrations-section.tsx index d58415f6e..3518bace0 100644 --- a/src/components/settings/integrations-section.tsx +++ b/src/components/settings/integrations-section.tsx @@ -389,7 +389,16 @@ function WithingsCard({ {t("settings.withingsCredentials")}

-
+ {/* v1.4.27 MB7 / CF-53 — the credentials grid drops from + a 3-column row (client-id / secret / save) to a + 2-column row of inputs at `sm:`, with the Save button + lifted out into its own row below. The previous + "invisible Label" hack to align the button with the + input baselines fell apart on Galaxy Fold; lifting + the button into a dedicated `flex justify-end` row + gives it consistent placement on every viewport and + lets the input pair span the full width. */} +
-
- - -
+
+
+
{credsMsg && (

-

+ {/* v1.4.27 MB7 / CF-57 — the action row already wraps via + `flex-wrap`, but on Pixel 5 the four AlertDialog + + test-connection triggers each took a fractional slot + that read jagged. Force each button to a `min-w-[10rem]` + on `