diff --git a/src/components/speedtest/speedtest-rpc-client.tsx b/src/components/speedtest/speedtest-rpc-client.tsx
index 234c26d8e..679c9f156 100644
--- a/src/components/speedtest/speedtest-rpc-client.tsx
+++ b/src/components/speedtest/speedtest-rpc-client.tsx
@@ -347,19 +347,26 @@ function Gauge({
)}
-
-
+ {/* Readout sits in the dial's open mouth (the 240° sweep leaves
+ the bottom-center free), Speedtest-style: number, then the unit
+ under it. Sized to never collide with the 1/1000 scale labels
+ at the mouth edges, at any tile width. */}
+
+
{eased == null ? "—" : Math.round(eased)}
-
-
- ms
-
-
{label}
-
{sub}
+
+
+ MS
+
+
+ {/* Identity in normal flow below the dial: immune to overlap. */}
+
);
@@ -811,27 +818,22 @@ export function SpeedtestRpcClient() {
const blocked = endpoints.filter((e) => e.status === "cors_blocked");
return (
<>
-
- {visible.map((ep) => {
+ {/* Flex-wrap + justify-center: tiles keep an ideal width
+ at every count and orphan rows self-center (4 tiles
+ read as a clean 2x2, a lone 7th sits centered). */}
+
+ {visible.map((ep, tileIdx) => {
const s = stats(ep);
const isActive = ep.id === activeId;
const dirEntry = directoryEntryForUrl(ep.url);
return (
{dirEntry && (