diff --git a/.changeset/fuzzy-notification-padding.md b/.changeset/fuzzy-notification-padding.md
new file mode 100644
index 0000000000..22118d9b44
--- /dev/null
+++ b/.changeset/fuzzy-notification-padding.md
@@ -0,0 +1,7 @@
+---
+"@runfusion/fusion": patch
+---
+
+summary: Fix cramped padding on the Notifications "Failure notification mode" settings card.
+category: fix
+dev: Wrap the failure-notification card fields in `.notification-provider-body` in NotificationsSection so it matches sibling provider-card padding on desktop and mobile.
diff --git a/packages/dashboard/app/__tests__/settings-sections.test.tsx b/packages/dashboard/app/__tests__/settings-sections.test.tsx
index 4ab5d2b3d0..7cfe9b51ab 100644
--- a/packages/dashboard/app/__tests__/settings-sections.test.tsx
+++ b/packages/dashboard/app/__tests__/settings-sections.test.tsx
@@ -165,6 +165,24 @@ describe("NotificationsSection", () => {
expect(updater(emptyForm)).toMatchObject({ failureNotificationMode: "all" });
});
+ it("nests the failure-notification mode field inside the padded provider body", () => {
+ render(
+ ,
+ );
+
+ const select = screen.getByLabelText("Failure notification mode") as HTMLSelectElement;
+ const providerBody = select.closest(".notification-provider-body");
+ expect(providerBody).not.toBeNull();
+ expect(providerBody?.closest(".notification-provider-card")).not.toBeNull();
+ });
+
it("shows the ntfy topic field only when ntfy is enabled", () => {
const { rerender } = render(
{t("settings.notifications.notifications", "Notifications")}
-
-
-
- {t("settings.notifications.stickyOnlySuppressesRecoveredFailuresTerminalOnlyWaits", "Sticky-only suppresses recovered failures; terminal-only waits for paused/in-review failed tasks; all restores legacy alerts.")}
-
-
-
- {
- const parsed = Number(e.target.value);
- setForm((f) => ({
- ...f,
- failureNotificationDelayMs: Number.isFinite(parsed) && parsed >= 0 ? parsed : 0,
- }));
- }}/>
- {t("settings.notifications.howLongAFailureMustPersistBeforeA", " How long a failure must persist before a push notification is sent. 0 = notify immediately. Default: 30000 (30 seconds). ")}
+ {/*
+ FNXC:SettingsLayout 2026-07-11-19:00:
+ The failure-notification card must reuse `.notification-provider-body` because `.notification-provider-card` has no own padding; this keeps its field gutters aligned with ntfy/webhook provider cards on desktop and mobile.
+ */}
+
+
+
+
+ {t("settings.notifications.stickyOnlySuppressesRecoveredFailuresTerminalOnlyWaits", "Sticky-only suppresses recovered failures; terminal-only waits for paused/in-review failed tasks; all restores legacy alerts.")}
+
+
+
+ {
+ const parsed = Number(e.target.value);
+ setForm((f) => ({
+ ...f,
+ failureNotificationDelayMs: Number.isFinite(parsed) && parsed >= 0 ? parsed : 0,
+ }));
+ }}/>
+ {t("settings.notifications.howLongAFailureMustPersistBeforeA", " How long a failure must persist before a push notification is sent. 0 = notify immediately. Default: 30000 (30 seconds). ")}
+