diff --git a/src/components/admin/reminders-section.tsx b/src/components/admin/reminders-section.tsx
index 40a2ccef5..c1f1877cb 100644
--- a/src/components/admin/reminders-section.tsx
+++ b/src/components/admin/reminders-section.tsx
@@ -132,6 +132,8 @@ export function RemindersSection() {
{t("settings.username")}
-
+
{t("auth.email")}
@@ -366,6 +371,8 @@ export function AccountSection() {
onChange={(e) => setEmail(e.target.value)}
placeholder={t("auth.emailPlaceholder")}
maxLength={320}
+ autoComplete="email"
+ enterKeyHint="next"
/>
@@ -392,6 +399,8 @@ export function AccountSection() {
setHeightCm(e.target.value)}
placeholder="175"
diff --git a/src/components/settings/integrations-section.tsx b/src/components/settings/integrations-section.tsx
index 79a0f9c44..d58415f6e 100644
--- a/src/components/settings/integrations-section.tsx
+++ b/src/components/settings/integrations-section.tsx
@@ -404,6 +404,11 @@ function WithingsCard({
: t("settings.withingsClientId")
}
maxLength={200}
+ autoComplete="off"
+ inputMode="text"
+ spellCheck={false}
+ autoCapitalize="none"
+ enterKeyHint="next"
/>
@@ -420,6 +425,11 @@ function WithingsCard({
: t("settings.withingsClientSecret")
}
maxLength={200}
+ autoComplete="off"
+ inputMode="text"
+ spellCheck={false}
+ autoCapitalize="none"
+ enterKeyHint="done"
/>
@@ -703,6 +713,10 @@ function MoodLogCard({
placeholder={t("settings.moodLogUrlPlaceholder")}
value={url}
onChange={(e) => setUrl(e.target.value)}
+ autoComplete="off"
+ spellCheck={false}
+ autoCapitalize="none"
+ enterKeyHint="next"
/>
@@ -718,6 +732,11 @@ function MoodLogCard({
}
value={apiKey}
onChange={(e) => setApiKey(e.target.value)}
+ autoComplete="off"
+ inputMode="text"
+ spellCheck={false}
+ autoCapitalize="none"
+ enterKeyHint="done"
/>
diff --git a/src/components/settings/notifications-section.tsx b/src/components/settings/notifications-section.tsx
index 90ff728ba..0b2bc37eb 100644
--- a/src/components/settings/notifications-section.tsx
+++ b/src/components/settings/notifications-section.tsx
@@ -54,18 +54,23 @@ export function NotificationsSection() {
+ {/* v1.4.27 MB3 — `scroll-mt-28` keeps each notification card's
+ anchor target below the safe-area sticky page header when the
+ user lands on `/settings/notifications#telegram` or similar.
+ Without the offset the section title pins under the header on
+ mobile and the user has to scroll back up to find it. */}
{showTelegram && (
-
+
)}
{showNtfy && (
-
+
)}
{showWebPush && (
-
+
)}
diff --git a/src/components/settings/telegram-card.tsx b/src/components/settings/telegram-card.tsx
index 28298fd2a..c3ea62163 100644
--- a/src/components/settings/telegram-card.tsx
+++ b/src/components/settings/telegram-card.tsx
@@ -148,6 +148,11 @@ export function TelegramCard({
: "123456:ABC-DEF..."
}
maxLength={100}
+ autoComplete="off"
+ inputMode="text"
+ spellCheck={false}
+ autoCapitalize="none"
+ enterKeyHint="next"
/>
@@ -158,6 +163,11 @@ export function TelegramCard({
onChange={(e) => setChatId(e.target.value)}
placeholder="123456789"
maxLength={50}
+ autoComplete="off"
+ inputMode="text"
+ spellCheck={false}
+ autoCapitalize="none"
+ enterKeyHint="done"
/>
diff --git a/src/components/settings/thresholds-editor-section.tsx b/src/components/settings/thresholds-editor-section.tsx
index e87b2bc95..1905d4709 100644
--- a/src/components/settings/thresholds-editor-section.tsx
+++ b/src/components/settings/thresholds-editor-section.tsx
@@ -282,6 +282,8 @@ function MetricRow({