diff --git a/hiddifypanel/admin_v2/src/features/users/views/UsersView.vue b/hiddifypanel/admin_v2/src/features/users/views/UsersView.vue
index 4bbae9db2..9046e2077 100644
--- a/hiddifypanel/admin_v2/src/features/users/views/UsersView.vue
+++ b/hiddifypanel/admin_v2/src/features/users/views/UsersView.vue
@@ -272,6 +272,7 @@
{{ t('users.selectAll', { n: rows.length }, rows.length) }}
+
{{ group.owner || '—' }}{{ group.users.length }}
@@ -1801,18 +1803,30 @@ onBeforeUnmount(() => {
font-weight: 500;
cursor: pointer;
}
-/* One line: what does not fit scrolls sideways, with the edge fading out */
-.u-sorts {
- display: flex;
+/* One line: what does not fit scrolls sideways, with the edge fading out. The fade is drawn over the strip, not a
+ mask-image on it: phone browsers stop painting the page below a masked sideways scroller in RTL. */
+.u-sorts-wrap {
+ position: relative;
flex: 1;
min-width: 0;
+}
+.u-sorts-wrap::after {
+ content: '';
+ position: absolute;
+ inset-block: 0;
+ inset-inline-end: 0;
+ width: 1rem;
+ pointer-events: none;
+ background: linear-gradient(to right, transparent, var(--p-content-background));
+}
+html[dir='rtl'] .u-sorts-wrap::after {
+ background: linear-gradient(to left, transparent, var(--p-content-background));
+}
+.u-sorts {
+ display: flex;
gap: 0.3rem;
overflow-x: auto;
scrollbar-width: none;
- mask-image: linear-gradient(to right, #000 calc(100% - 1rem), transparent);
-}
-:global([dir='rtl']) .u-sorts {
- mask-image: linear-gradient(to left, #000 calc(100% - 1rem), transparent);
}
.u-sorts::-webkit-scrollbar {
display: none;