diff --git a/stacks/homepage/conf/custom.css b/stacks/homepage/conf/custom.css
index fc87853..54fa723 100644
--- a/stacks/homepage/conf/custom.css
+++ b/stacks/homepage/conf/custom.css
@@ -448,6 +448,44 @@ body,
font-variant-numeric: tabular-nums !important;
}
+/* ---------- widget stat wells (Plex, Jellyfin, Paperless, Uptime Kuma) ----------
+ Stock Homepage builds each stat as:
+
353
<- the VALUE
+ Movies
<- the LABEL
+ which is exactly backwards. The number you actually came to read is
+ weight 100 at 13px; the label shouting beside it is weight 700. Skyfall's
+ rule is that hierarchy comes emphatically from weight AND size, and that
+ numbers are the data — so this inverts the pair: the value goes big, bold
+ and bright, the label drops to a quiet eyebrow.
+
+ The well itself is --surface-input, one step DOWN from the card it sits on,
+ so stats read as inset data rather than as another floating surface. Depth
+ here is a recess, so it takes the hairline without the shadow. */
+.service-block {
+ background: var(--surface-input) !important;
+ border: 1px solid var(--border-subtle) !important;
+ border-radius: var(--radius-sm) !important;
+ padding: var(--space-2) var(--space-1) !important;
+}
+
+.service-block > div:first-child {
+ color: var(--text-heading) !important;
+ font-family: var(--font-mono) !important;
+ font-size: var(--text-xl) !important;
+ font-weight: var(--weight-bold) !important;
+ line-height: var(--leading-tight) !important;
+ font-variant-numeric: tabular-nums !important;
+}
+
+.service-block > div:last-child {
+ color: var(--text-faint) !important;
+ font-family: var(--font-body) !important;
+ font-size: var(--text-2xs) !important;
+ font-weight: var(--weight-medium) !important;
+ letter-spacing: var(--tracking-caps) !important;
+ line-height: var(--leading-snug) !important;
+}
+
/* ---------- tabs ----------
The active rail is one of only two sanctioned accent expressions:
a 2px accent bar plus an --accent-soft fill. No glow — glows are
@@ -526,8 +564,10 @@ body,
Semantic colour is the whole point: the system communicates status with
colour and icons, never emoji, and accents are semantic-ONLY. Stock
Homepage paints every pill the same slate, which throws away the signal. */
+/* .service-block is deliberately NOT in this list — the stat wells get their
+ own treatment above, and folding them in here is what made every number
+ render at --text-2xs. */
.service-tag,
-.service-block,
.service-stats {
background: var(--surface-raised) !important;
border: 1px solid var(--border-subtle) !important;
diff --git a/stacks/homepage/theme/skyfall.css.in b/stacks/homepage/theme/skyfall.css.in
index 9061fbd..1884abd 100644
--- a/stacks/homepage/theme/skyfall.css.in
+++ b/stacks/homepage/theme/skyfall.css.in
@@ -104,6 +104,44 @@ body,
font-variant-numeric: tabular-nums !important;
}
+/* ---------- widget stat wells (Plex, Jellyfin, Paperless, Uptime Kuma) ----------
+ Stock Homepage builds each stat as:
+ 353
<- the VALUE
+ Movies
<- the LABEL
+ which is exactly backwards. The number you actually came to read is
+ weight 100 at 13px; the label shouting beside it is weight 700. Skyfall's
+ rule is that hierarchy comes emphatically from weight AND size, and that
+ numbers are the data — so this inverts the pair: the value goes big, bold
+ and bright, the label drops to a quiet eyebrow.
+
+ The well itself is --surface-input, one step DOWN from the card it sits on,
+ so stats read as inset data rather than as another floating surface. Depth
+ here is a recess, so it takes the hairline without the shadow. */
+.service-block {
+ background: var(--surface-input) !important;
+ border: 1px solid var(--border-subtle) !important;
+ border-radius: var(--radius-sm) !important;
+ padding: var(--space-2) var(--space-1) !important;
+}
+
+.service-block > div:first-child {
+ color: var(--text-heading) !important;
+ font-family: var(--font-mono) !important;
+ font-size: var(--text-xl) !important;
+ font-weight: var(--weight-bold) !important;
+ line-height: var(--leading-tight) !important;
+ font-variant-numeric: tabular-nums !important;
+}
+
+.service-block > div:last-child {
+ color: var(--text-faint) !important;
+ font-family: var(--font-body) !important;
+ font-size: var(--text-2xs) !important;
+ font-weight: var(--weight-medium) !important;
+ letter-spacing: var(--tracking-caps) !important;
+ line-height: var(--leading-snug) !important;
+}
+
/* ---------- tabs ----------
The active rail is one of only two sanctioned accent expressions:
a 2px accent bar plus an --accent-soft fill. No glow — glows are
@@ -182,8 +220,10 @@ body,
Semantic colour is the whole point: the system communicates status with
colour and icons, never emoji, and accents are semantic-ONLY. Stock
Homepage paints every pill the same slate, which throws away the signal. */
+/* .service-block is deliberately NOT in this list — the stat wells get their
+ own treatment above, and folding them in here is what made every number
+ render at --text-2xs. */
.service-tag,
-.service-block,
.service-stats {
background: var(--surface-raised) !important;
border: 1px solid var(--border-subtle) !important;