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. */} +
+

{label}

+

{sub}

); @@ -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 && (