diff --git a/frontend/src/v2/__tests__/v2-layout-invariants.test.ts b/frontend/src/v2/__tests__/v2-layout-invariants.test.ts index f4279325a4..2c3d199226 100644 --- a/frontend/src/v2/__tests__/v2-layout-invariants.test.ts +++ b/frontend/src/v2/__tests__/v2-layout-invariants.test.ts @@ -5041,16 +5041,28 @@ describe('task priority and lease signals (TASK-443)', () => { expect(badge).toContain('var(--v2-font-mono)'); expect(badge).toContain('border-radius: 4px'); expect(badge).toContain('background: none'); + expect(badge).toContain('color: var(--v2-prio-ink)'); + expect(badge).toContain('border: 1px solid var(--v2-prio-edge)'); + // P0 is the only filled badge: red fill, white label (B-lite, Sam 10-31). const urgent = ruleBody(css, '.v2-board__priority--p0'); - expect(urgent).toContain('border-color: var(--v2-text-primary)'); - expect(urgent).toContain('color: var(--v2-text-primary)'); - expect(urgent).not.toMatch(/background/); + expect(urgent).toContain('background: var(--v2-prio-p0-bg)'); + expect(urgent).toContain('color: var(--v2-prio-p0-fg)'); + // Status and priority colour are tokens, so the D215 colour choice is a value swap. + expect(css).toMatch(/--v2-prio-p0-bg:\s*#b42318/); + expect(css).toMatch(/--v2-prio-p2-fg:\s*#667085/); + expect(css).toMatch(/--v2-status-live:\s*var\(--v2-accent\)/); + expect(ruleBody(css, '.v2-board__priority--p2')).toContain('color: var(--v2-prio-p2-fg)'); + }); + test('blocked is red with a thin edge on blocked cards only', () => { + expect(css).toMatch(/--v2-status-blocked:\s*#d92d20/); + expect(ruleBody(css, '.v2-board__card--blocked')).toContain('box-shadow: inset 3px 0 0 var(--v2-status-blocked-edge)'); + expect(ruleBody(css, '.v2-board__col--blocked .v2-board__col-name')).toContain('color: var(--v2-status-blocked)'); }); test('live, unclaimed and expired ownership retain distinct dots', () => { - expect(ruleBody(css, '.v2-board__owner-dot--live')).toContain('background: var(--v2-accent)'); - expect(ruleBody(css, '.v2-board__owner-dot--not-claimed')).toContain('border: 1px dashed var(--v2-border-strong)'); + expect(ruleBody(css, '.v2-board__owner-dot--live')).toContain('background: var(--v2-status-live)'); + expect(ruleBody(css, '.v2-board__owner-dot--not-claimed')).toContain('border: 1px dashed var(--v2-status-pending)'); const expired = ruleBody(css, '.v2-board__owner-dot--expired'); - expect(expired).toContain('border: 1px solid var(--v2-border-strong)'); + expect(expired).toContain('border: 1px solid var(--v2-status-idle)'); expect(expired).toContain('background: none'); }); }); diff --git a/frontend/src/v2/components/V2PodBoard.tsx b/frontend/src/v2/components/V2PodBoard.tsx index f9ac01575e..477e7a54fa 100644 --- a/frontend/src/v2/components/V2PodBoard.tsx +++ b/frontend/src/v2/components/V2PodBoard.tsx @@ -735,7 +735,7 @@ const V2PodBoard: React.FC = () => { {COLUMNS.map((col) => { const items = columnTasks.get(col.key) || []; return ( -
+
{t(col.labelKey)} {items.length} @@ -744,7 +744,7 @@ const V2PodBoard: React.FC = () => {
{t(col.emptyKey)}
)} {items.map((task) => ( -
+