diff --git a/assets/css/app.css b/assets/css/app.css
index f39dacbd..8b998608 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -704,24 +704,15 @@
#members-keyboard .table.table-xs thead tr { font-size: 0.8125rem; }
/*
- * Density-tracking badges and sort icons in the member overview.
- *
- * The member table renders its rows via LiveView streams, so toggling density
- * only swaps the
size class (table-xs <-> table-md); it does NOT
- * re-render the streamed rows. A per-row `size=` conditional therefore bakes a
- * stale badge size into the streamed DOM. To make badges (and, for visual
- * consistency, the header sort glyphs) follow the density toggle without any
- * row re-render, their size is driven purely from the table size class here.
- *
- * Badge values mirror daisyUI's own .badge-xs / .badge-md (font-size, --size
- * which the base .badge uses for height, and padding-inline). Scoped to the
- * member overview via #members-keyboard so unrelated badges are unaffected.
+ * Overview badges (fee status, groups) keep a CONSISTENT size across both
+ * densities. Compact mode now differs from comfortable only in row spacing, not
+ * font size (see the table-xs font rule above), so the badges match in both —
+ * otherwise a compact badge would read smaller than the text beside it. The size
+ * is driven from the table size class in CSS (not a per-row `size` attr) because
+ * the streamed rows are not re-rendered on a density toggle. Values mirror
+ * daisyUI's .badge-md; scoped to #members-keyboard so other badges are untouched.
*/
-#members-keyboard .table.table-xs .badge {
- --size: calc(var(--size-selector, 0.25rem) * 4);
- font-size: 0.75rem;
- padding-inline: calc(0.25rem * 2 - var(--border));
-}
+#members-keyboard .table.table-xs .badge,
#members-keyboard .table.table-md .badge {
--size: calc(var(--size-selector, 0.25rem) * 6);
font-size: 0.875rem;