PR #12886 — loading rows are a loaded row tall
Before/after of every DataTable loading row, measured on Tenants and Prospects. Board row p11-x-skeleton-everywhere.
Tenants
| What | Loading screen, before | Loading screen, after | Loaded page | Verdict |
|---|---|---|---|---|
| Single-line row height | 33px | 34.5px | 35.5px | ✓ matches within 1px |
| Drift over 15 rows | 37.5px | 15px | — | ✓ smaller |
Screenshots
Prospects
| What | Loading screen, before | Loading screen, after | Loaded page | Verdict |
|---|---|---|---|---|
| Single-line row height | 33px | 34.5px | 39.5px | residual 5px — the loaded row is taller than one text line (see note) |
| Drift over 15 rows | 97.5px | 75px | — | ✓ smaller |
Screenshots
What this does not fix
What this does not fix. Prospects' loaded rows are 39.5px because a cell in them is taller than one line of text; a one-line ghost cannot match that, and this PR does not claim it. Also visible and NOT in scope: with Every company picked, the loaded Tenants table adds a Company column the loading screen does not draw (selection-dependent, same class as the single-building column), and Prospects' Last Activity header is right-aligned on the page but left in the loading screen.
How these were captured
How these were captured. Local dev server bound to the
propflow-stage table (anonymized by construction), signed in as the smoke login, desktop 1440×900, on 2026-09-28. The loading screen shots hold the page's server render with an uncommitted local hook (a cookie-gated 45 s wait in each list's page.tsx) so the route's loading.tsx stays on screen. That hook is NOT in any PR. Heights are read from the rendered DOM (getBoundingClientRect), not estimated. Before = origin/main; after = the PR's branch.