diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte
index 09cc71cf..e7cbf63c 100644
--- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte
+++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte
@@ -399,46 +399,54 @@
+ is_dirty: Save uses warning style when changed, invisible when clean.
+ Layout always fixed: [Revert (or gap)] [Save] [X]
+ Buttons are always rendered to keep X pinned at the right end. -->
{#snippet field_actions(field_key: string, on_save: () => void, on_cancel: () => void, on_revert?: () => void, is_dirty = false)}
{@const status = field_save_status[field_key]}
- {@const show_save = is_dirty || (status && status !== 'idle')}
+ {@const save_visible = is_dirty || (status && status !== 'idle')}
- {#if on_revert}
-
- {/if}
- {#if show_save}
-
- {/if}
+
+
+
+
+