- {% for u in users %}
-
{{ u.username }}{% if u.name %} ({{ u.name }}) {% endif %}
- {% endfor %}
+
+ ⌕
+
-
Gem medlemmer
+
+ {% for u in people %}{{ ucard(u) }}{% endfor %}
+
+ {% if svcs %}
+
+ Service-konti ({{ svcs|length }})
+ {% for u in svcs %}{{ ucard(u) }}{% endfor %}
+
+ {% endif %}
+
Gem medlemmer
+
{% endblock %}
diff --git a/templates/admin_users.html b/templates/admin_users.html
index 2ff66fd..044a649 100644
--- a/templates/admin_users.html
+++ b/templates/admin_users.html
@@ -2,39 +2,83 @@
{% block title %}Admin — brugere{% endblock %}
{% block body %}
Brugere
-
Opret og administrér brugere. Adgang til services styres via grupper (en app er bundet til en gruppe).
+
Opret og administrér brugere. Adgang til services styres via grupper .
{% if saved %}
{{ saved }}
{% endif %}
-
Opret ny bruger
-
+
+ + Opret ny bruger
+
+
-
Alle brugere ({{ users|length }})
-
- Bruger Email Grupper Status
-
+
+
+
-
+
+Ingen brugere matcher.
+
+
+
{% endblock %}
diff --git a/templates/base.html b/templates/base.html
index bc622fd..ee9bca7 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -113,6 +113,23 @@
code { background:var(--surface2); padding:.12em .42em; border-radius:.35rem; font-size:.85em; }
.stat { background:color-mix(in srgb, var(--surface) 70%, transparent); border:1px solid var(--border); border-radius:1rem; padding:1.3rem; }
.stat .n { font-size:2.1rem; font-weight:800; letter-spacing:-.02em; }
+ /* bruger-kort (medlemskab/tildeling) — fixed bredde + afkortning, intet overlap */
+ .ucards { display:grid; gap:.55rem; grid-template-columns:repeat(auto-fill,minmax(15rem,1fr)); margin-top:.6rem; }
+ .ucard { position:relative; display:flex; align-items:center; gap:.6rem; padding:.55rem .7rem; border:1px solid var(--border);
+ border-radius:.8rem; background:color-mix(in srgb,var(--surface) 70%,transparent); cursor:pointer; min-width:0;
+ transition:border-color .15s, background .15s; }
+ .ucard:hover { border-color:var(--accent); }
+ .ucard input { position:absolute; opacity:0; pointer-events:none; }
+ .ucard:has(input:checked) { border-color:var(--accent); background:color-mix(in srgb,var(--accent) 12%,transparent); }
+ .ucard .uini { flex:0 0 auto; width:1.9rem; height:1.9rem; border-radius:.5rem; display:grid; place-items:center;
+ font-weight:700; font-size:.85rem; background:color-mix(in srgb,var(--accent) 16%,transparent); color:var(--accent); }
+ .ucard .ubody { min-width:0; flex:1; }
+ .ucard .uname { font-weight:600; font-size:.9rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
+ .ucard .usub { color:var(--muted); font-size:.78rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
+ .ucard .uchk { flex:0 0 auto; width:1.25rem; height:1.25rem; border:1.5px solid var(--border); border-radius:.35rem;
+ display:grid; place-items:center; color:transparent; font-size:.8rem; font-weight:700; }
+ .ucard:has(input:checked) .uchk { background:var(--accent); border-color:var(--accent); color:#06101f; }
+ .ucard.hidden { display:none; }
/* footer */
.foot { width:100%; max-width:960px; margin:0 auto; padding:1.6rem 1.25rem 2.5rem; color:var(--muted); font-size:.85rem; border-top:1px solid var(--border); }
.foot a { color:var(--accent); text-decoration:none; }