diff --git a/public/admin/assets/css/layout.css b/public/admin/assets/css/layout.css
index 13b07d8..a878bcc 100644
--- a/public/admin/assets/css/layout.css
+++ b/public/admin/assets/css/layout.css
@@ -95,27 +95,28 @@ header.app-header h1 span {
/* ── stats bar ── */
+/* each .stat owns its own horizontal padding so the vertical separator
+ renders edge-to-edge; no margin gap between cells. */
.stats-bar {
display: flex;
- gap: 0;
background: var(--bg-card);
border-bottom: 1px solid var(--border);
- padding: 0 24px;
flex-wrap: wrap;
}
.stat {
display: flex;
flex-direction: column;
- gap: 3px;
- padding: 14px 28px 14px 0;
- margin-right: 28px;
+ justify-content: center;
+ gap: 4px;
+ padding: 16px 32px;
border-right: 1px solid var(--border);
- padding-right: 28px;
+ flex: 0 0 auto;
}
-.stat:last-child { border-right: none; }
+.stat:first-child { padding-left: 24px; }
+.stat:last-child { border-right: none; }
.stat .label {
color: var(--muted-dark);
diff --git a/public/admin/pages/articles.html b/public/admin/pages/articles.html
index 3b33f15..16e9230 100644
--- a/public/admin/pages/articles.html
+++ b/public/admin/pages/articles.html
@@ -44,7 +44,7 @@
-
+
diff --git a/public/admin/pages/events.html b/public/admin/pages/events.html
index d8e7a6f..ef32aab 100644
--- a/public/admin/pages/events.html
+++ b/public/admin/pages/events.html
@@ -43,7 +43,7 @@
-
+
diff --git a/public/admin/pages/intelligence/knowledge.html b/public/admin/pages/intelligence/knowledge.html
index 1a9aaeb..8fb0373 100644
--- a/public/admin/pages/intelligence/knowledge.html
+++ b/public/admin/pages/intelligence/knowledge.html
@@ -56,7 +56,7 @@
-
+
diff --git a/public/admin/pages/intelligence/predictions.html b/public/admin/pages/intelligence/predictions.html
index 21dfa20..7c9be4e 100644
--- a/public/admin/pages/intelligence/predictions.html
+++ b/public/admin/pages/intelligence/predictions.html
@@ -48,7 +48,7 @@
-
+
diff --git a/src/routes/admin.js b/src/routes/admin.js
index d1b9cee..6da8032 100644
--- a/src/routes/admin.js
+++ b/src/routes/admin.js
@@ -78,11 +78,14 @@ async function adminRoutes(fastify) {
});
// static assets (css + js) under /admin/assets/*
+ // use must-revalidate so the browser always checks for a newer copy;
+ // prevents the admin getting stuck on old js after a deploy.
fastify.register(fastifyStatic, {
root: assetsDir,
prefix: '/admin/assets/',
decorateReply: false,
- cacheControl: false,
+ cacheControl: true,
+ maxAge: 0,
});
// top-level entry — redirect to articles