diff --git a/tests/unit/vyndrParityQA.test.js b/tests/unit/vyndrParityQA.test.js index 824ff35..9e28a34 100644 --- a/tests/unit/vyndrParityQA.test.js +++ b/tests/unit/vyndrParityQA.test.js @@ -298,3 +298,14 @@ describe('P1-8 — Compare verdict is time-honest (form, not a phantom game)', ( expect(compare).toMatch(/on current form/i); }); }); + +// ── P2-10 lock — ledger read cards are dense (3-4 per phone screen) ────────── +describe('P2-10 — ledger cards are tightened for density', () => { + const ledger = read('app/ledger/page.tsx'); + it('the read card uses tight padding for density (3-4 per phone screen)', () => { + // the LedgerCard
padding dropped 16 -> 12 (showDesc is INLINE, so + // density comes from padding/margins, not from stripping the archetype meaning) + expect(ledger).toMatch(/animate-fade-up stagger-[^]*?padding: 12 \}\}>/); + expect(ledger).toMatch(/ArchetypeBadge[^]*?showDesc/); // meaning preserved (inline, no height cost) + }); +}); diff --git a/web/src/app/ledger/page.tsx b/web/src/app/ledger/page.tsx index af923e0..b57b3b9 100644 --- a/web/src/app/ledger/page.tsx +++ b/web/src/app/ledger/page.tsx @@ -333,8 +333,8 @@ function LedgerCard({ row, index, ladder }: { row: LedgerRow; index: number; lad const rungs = Array.isArray(ladder) ? ladder : [row]; const isLadder = rungs.length > 1; return ( -
-
+
+
{row.sport.toUpperCase()} @@ -348,10 +348,13 @@ function LedgerCard({ row, index, ladder }: { row: LedgerRow; index: number; lad
-

{row.player_name}

- {/* Part 5 — the archetype glyph+chip, propagated (self-hides when absent). */} +

{row.player_name}

+ {/* Part 5 — the archetype glyph+chip, propagated (self-hides when absent). + showDesc renders INLINE (same row), so it costs no vertical height — + kept for its one-line meaning. P2-10 density comes from the tighter + padding/margins, not from stripping this. */} {row.archetype && ( -
+
)} @@ -362,7 +365,7 @@ function LedgerCard({ row, index, ladder }: { row: LedgerRow; index: number; lad

{row.stat.replace(/_/g, ' ')} · {rungs.length} lines

-
+
{rungs.map((rung) => ( {rung.side}{rung.line} @@ -376,7 +379,7 @@ function LedgerCard({ row, index, ladder }: { row: LedgerRow; index: number; lad {row.side} {row.line} {row.stat.replace(/_/g, ' ')}

)} -

+

{row.book ? : '—'}{row.locked_odds ? ` · ${row.locked_odds}` : ''} · {row.game_date} {/* model_value is MODEL output — always labeled, never blended with market numbers. */} {row.model_value != null && · MODEL {row.model_value}}