Redesign the setup flow and consolidate the CSS into one primitives layer

Onboarding asks explicitly for one or two parents and shows one card per
parent for balances; the balance form is per parent with inline
validation; the partner can be filled from the FK deduction or added
from it. Settings and Dashboard reuse the same form.

CSS: bare buttons carry no colour any more; buttons, cards, choice
cards, fields, alerts, badges, eyebrow and modal chrome are defined once
in primitives.css. Media queries live only in responsive.css. A style
guard test blocks hex, !important and stray media queries. Bilingual
fixes: calendar selects size by content, header no longer wraps. Vitest
is capped at four workers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-19 12:27:29 +02:00
parent e4719cb9ae
commit ae6db7e16f
105 changed files with 5683 additions and 3690 deletions
+17 -1
View File
@@ -59,7 +59,6 @@ const unauthenticated = {
const workspace: Workspace = {
id: 'ws1',
name: 'Our workspace',
planningMode: 'couple',
createdAt: '2026-01-01T00:00:00Z',
}
@@ -373,4 +372,21 @@ describe('WorkspaceContext', () => {
'useWorkspace must be used inside <WorkspaceProvider>',
)
})
it('bumpPlanVersion increments planVersion, giving hooks watching it a reason to refetch', () => {
vi.mocked(useAuth).mockReturnValue(unauthenticated)
const { result } = renderHook(() => useWorkspace(), { wrapper })
expect(result.current.planVersion).toBe(0)
act(() => {
result.current.bumpPlanVersion()
})
expect(result.current.planVersion).toBe(1)
act(() => {
result.current.bumpPlanVersion()
})
expect(result.current.planVersion).toBe(2)
})
})