Lay the Almanacka design foundation: tokens, type, shell

New token system in global.css (near-white surfaces, one ink-blue
accent, no sub-12px type), self-hosted Schibsted Grotesk, rewritten
primitives (buttons, fields, modal shell, segmented, disclosure,
skeleton), a borderless 56px header with an SV | EN language toggle,
an Icon component replacing glyphs, page skeletons that keep the
layout during loading, and leave-type colours moved out of TS into
CSS variables. Feature blocks keep their structure for later phases.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-19 18:25:04 +02:00
parent 95444d3bf4
commit d14f86478a
44 changed files with 1358 additions and 485 deletions
+1 -5
View File
@@ -71,10 +71,6 @@ vi.mock('@/components/layout/Layout', () => ({
Layout: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
}))
vi.mock('@/components/common/LoadingSpinner', () => ({
LoadingSpinner: () => <div>Loading...</div>,
}))
vi.mock('@/components/modals/PlannedDayModal', () => ({
// Exposes the props this test suite cares about as data attributes/buttons
// so tests can assert on Calendar.tsx's wiring without rendering the real
@@ -313,7 +309,7 @@ describe('Calendar', () => {
vi.mocked(useWorkspace).mockReturnValue({ ...mockWorkspace, isLoading: true })
render(<Calendar />)
expect(screen.getByText('Loading...')).toBeInTheDocument()
expect(screen.getByTestId('page-skeleton')).toBeInTheDocument()
})
it('renders 7 weekday headers in Monday-first Swedish order', () => {