3. The hot window: row count is the master lever
Every leg — query scan, templ render, compression CPU, wire bytes,
browser parse, datastar init, morph walk — scales linearly with rendered
rows (~830B and ~12–15µs of server render per roster row; ~0.3ms of
browser work per row on land). Rosters default to the first 500 rows
(LensNDefault) with a sticky "Show all"; search/filters/facet counts/
select-all still operate on the full set server-side. 500 rows keeps
every interaction in the ~100ms class on an Orange Pi 5; "Show all" at
3.5k re-enters the slow class knowingly.