diff --git a/AGENTS.md b/AGENTS.md
index 5ff9dedb..b6f95f7f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -481,8 +481,9 @@ Use `@cio/ui/base/page` for dashboard page shells. See `packages/ui/README.md`
**Every settings page with save/discard** must use `Page.SettingsActions` as the last child of `Page.Root` (after `Page.Body`). Do not put Save in `Page.Header` or inline at the bottom of form sections.
-- Sticky at the viewport bottom while scrolling; docks naturally at the end of the page content
-- Save and Discard are disabled when `hasChanges` is false
+- Compact centered card (not full width), sticky at the viewport bottom while scrolling; docks naturally at the end of the page content
+- Only appears when `hasChanges` is true
+- Save is a primary button (not a split/combo control); Discard is secondary
- Labels come from dashboard translations: `common.unsaved_changes.label`, `common.discard`, `common.save_changes`
- Pair with `UnsavedChanges` for navigation guards where appropriate
diff --git a/packages/storybook/src/molecules/page/page.stories.svelte b/packages/storybook/src/molecules/page/page.stories.svelte
index e471375f..df7f80ae 100644
--- a/packages/storybook/src/molecules/page/page.stories.svelte
+++ b/packages/storybook/src/molecules/page/page.stories.svelte
@@ -428,7 +428,9 @@
{#snippet child()}
-
All changes saved.
+
+ All changes saved. The compact save card stays hidden until the form is dirty.
+