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 7bb57251..b4aad3ea 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
@@ -153,11 +153,16 @@ const DEFAULT_AUTH_EDITABLE = [
'pronouns'
];
+// Default shown fields in the controls panel when the template has no explicit controls_cfg.
+// Pronouns and lead scanning are off by default — most events don't expose them.
+// WHY: prevents clutter for attendees at the badge table; events that need them must opt in via template config.
+const DEFAULT_SHOWN = ['name', 'title', 'affiliations', 'location'];
+
/** Is this field card shown in the panel at all? trusted+edit always sees all fields. */
function field_shown(field: string): boolean {
if (is_trusted && is_global_edit_mode) return true;
const cfg = template_controls_cfg;
- if (!cfg?.shown) return true;
+ if (!cfg?.shown) return DEFAULT_SHOWN.includes(field);
return cfg.shown.includes(field);
}
diff --git a/src/routes/events/[event_id]/(badges)/badges/config/+page.svelte b/src/routes/events/[event_id]/(badges)/badges/config/+page.svelte
index 8db1b1f9..04c9fbd4 100644
--- a/src/routes/events/[event_id]/(badges)/badges/config/+page.svelte
+++ b/src/routes/events/[event_id]/(badges)/badges/config/+page.svelte
@@ -26,6 +26,7 @@ import {
Check,
ChevronDown,
ChevronUp,
+ FileText,
Lock,
Save,
Settings
@@ -270,6 +271,11 @@ function toggle(key: string) {