/* What a tap looks like before the server answers, for the counter app. * * The twin of app/my/(app)/loading.tsx, and here for the same reason: every screen under /m is * rendered from its own server query, App Router keeps the previous screen fully painted until that * query comes back, and on linen-room wifi that is seconds in which nothing acknowledges the tap. * People tap again — and on this app the second tap can land on a different row. * * It draws the app's own chrome (the 56px ink bar and the 4px accent rule, the shape MTop and MRule * make) so the change reads as "loading" rather than "gone", and deliberately not the tab bar: the * nav belongs to the four screens that draw it, and painting one here would flash it into existence * on the way to a detail screen that has none. The bar carries no screen title for the same reason * — this one fallback covers every route in the group, so any title would be wrong somewhere. */ const INK = "#201e1d"; const GROUND = "#f3f2f2"; /** A grey block standing in for a line of text. Sized in the same 2px system as everything else. */ function Bar({ w, h = 16 }: { w: string; h?: number }) { return
; } export default function CounterLoading() { return ( <>
One moment
{/* Announced once, quietly. The blocks below are decoration and say nothing. */}
Loading…
); }