diff --git a/src/lib/ae_elements/AE_Record_Controls.svelte b/src/lib/ae_elements/AE_Record_Controls.svelte
index 50451671..08ad9216 100644
--- a/src/lib/ae_elements/AE_Record_Controls.svelte
+++ b/src/lib/ae_elements/AE_Record_Controls.svelte
@@ -28,7 +28,7 @@
Bell,
BellOff,
Trash2,
- MinusCircle,
+ CircleMinus,
Settings
} from '@lucide/svelte';
@@ -186,7 +186,7 @@
class="btn-icon btn-icon-sm preset-filled-warning-500 hover:preset-filled-warning-600 transition"
title="Disable / soft-remove this {obj_label}"
>
-
+
{/if}
diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte
index 129427c9..32f0d3c6 100644
--- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte
+++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte
@@ -147,69 +147,82 @@
it in the compiled layout CSS files.
-->
-
+ Instead of trying to coerce #ae_main_content into a centering container
+ (which requires fighting its min-height, overflow, max-width, flex-col etc.),
+ we use `display: contents` to dissolve the intermediate wrappers from the
+ layout. This makes .event_badge_wrapper a direct flex child of
, and
+ body becomes the single centering container for the whole printed page.
+
+ For PVC / fanfold: the @page size below matches the badge exactly, so
+ margin: 0 fills the page cleanly. If per-template margins are needed,
+ set cfg_json: { "print_margin": { "top": "0.25in", ... } } on the template
+ and a dynamic @page rule can be injected here via print_margin_cfg. -->
+
{#if $lq__event_badge_template_obj?.layout === 'badge_3.5x5.5_pvc'}
{:else if $lq__event_badge_template_obj?.layout === 'badge_4x5_fanfold'}
{:else}
{/if}
diff --git a/src/routes/events/[event_id]/(launcher)/launcher/+page.svelte b/src/routes/events/[event_id]/(launcher)/launcher/+page.svelte
index dc2005b4..ab386902 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher/+page.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher/+page.svelte
@@ -27,7 +27,8 @@
(async () => {
// Check Dexie cache first — sessions are typically cached from prior page visits
- let session = await db_events.session.get(session_id);
+ // Typed as any: Dexie returns Session|undefined, API returns ae_EventSession|null — both duck-type fine
+ let session: any = await db_events.session.get(session_id);
if (!session) {
// Not cached — fetch from API and save to Dexie
session = await events_func.load_ae_obj_id__event_session({
diff --git a/src/routes/events/[event_id]/(pres_mgmt)/event_page_menu.svelte b/src/routes/events/[event_id]/(pres_mgmt)/event_page_menu.svelte
index 569e1284..bf695daf 100644
--- a/src/routes/events/[event_id]/(pres_mgmt)/event_page_menu.svelte
+++ b/src/routes/events/[event_id]/(pres_mgmt)/event_page_menu.svelte
@@ -1,29 +1,22 @@
-