diff --git a/containers/libreportal/frontend/js/components/admin/admin-overview.js b/containers/libreportal/frontend/js/components/admin/admin-overview.js
index f7e5592..7ceb40f 100644
--- a/containers/libreportal/frontend/js/components/admin/admin-overview.js
+++ b/containers/libreportal/frontend/js/components/admin/admin-overview.js
@@ -139,6 +139,20 @@ class AdminOverview {
return `
${this.escape(label)}${this.escape(value)}
`;
}
+ // Small inline icon for a card action button. Inherits the button's text
+ // colour (no per-button colour) — the icon + the card's status dot do the
+ // distinguishing, so the footer stays calm.
+ icon(name) {
+ const paths = {
+ update: '',
+ verify: '',
+ backup: '',
+ ssh: '',
+ system: '',
+ };
+ return ``;
+ }
+
render() {
const root = this.root();
if (!root) return;
@@ -157,8 +171,8 @@ class AdminOverview {
// Update now takes priority when one's available; otherwise offer Verify now.
const updActions = (updAvail && upd.can_update)
- ? ``
- : ``;
+ ? ``
+ : ``;
const updCard = this.card(
'Updates',
@@ -180,7 +194,7 @@ class AdminOverview {
this.line('Apps protected', `${protectedApps} / ${apps.length}`)
+ this.line('Locations', String(locs.length))
+ this.line('Stored', this.bytes(totalSize)),
- ``
+ ``
);
// SSH & Security
@@ -195,7 +209,7 @@ class AdminOverview {
this.line('Password login', pwOn ? 'On' : 'Key-only')
+ this.line('Authorized keys', String(keyCount))
+ this.line('Login user', s.user || '—'),
- ``
+ ``
);
// System health
@@ -212,7 +226,7 @@ class AdminOverview {
? `${this.gb(mem.used)} / ${this.gb(mem.total)} (${Math.round(mem.percent) || 0}%)`
: (mem.text || '—'))
+ this.line('Uptime', this.shortUptime(info.uptime)),
- ``
+ ``
);
root.innerHTML = `