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
+22 -23
View File
@@ -14,24 +14,27 @@ export const settings = {
'dayOverridesInput.offStatus': 'Jag är ledig den här dagen',
'dayOverridesInput.statusLegend': 'Status',
'dayOverridesInput.workingStatus': 'Jag jobbar den här dagen',
'manualFetchModal.cancelButton': 'Avbryt',
'manualFetchModal.closeAria': 'Stäng',
'manualFetchModal.daysRemaining': 'Kvarvarande dagar:',
'manualFetchModal.daysUsedLabel': 'Använda dagar',
'manualFetchModal.description': 'Ange dina uppgifter om föräldrapenning från Försäkringskassan manuellt om automatisk hämtning inte är tillgänglig.',
'manualFetchModal.dubbeldagarLabel': 'Dubbeldagar kvar (0–60)',
'manualFetchModal.lagstaUsedLabel': 'Använda dagar på lägstanivå (90-nivån)',
'manualFetchModal.remainingBreakdownTitle': 'Fördelning av kvarvarande dagar',
'manualFetchModal.reservedDaysLabel': 'Reserverade dagar kvar',
'manualFetchModal.saveButton': 'Spara',
'manualFetchModal.saveError': 'Det gick inte att spara de manuella uppgifterna',
'manualFetchModal.savingButton': 'Sparar…',
'manualFetchModal.sjukpenningUsedLabel': 'Använda dagar på sjukpenningnivå (390-nivån)',
'manualFetchModal.tierBreakdownTitle': 'Fördelning per nivå',
'manualFetchModal.title': 'Ange föräldrapenninguppgifter',
'manualFetchModal.totalDaysLabel': 'Totalt antal dagar (0–480)',
'manualFetchModal.totalDaysSectionTitle': 'Totalt antal dagar',
'manualFetchModal.transferableDaysLabel': 'Överlåtbara dagar kvar',
'parentBalance.advancedToggle': 'Avancerat',
'parentBalance.cancelButton': 'Avbryt',
'parentBalance.closeAria': 'Stäng',
'parentBalance.description': 'Siffrorna finns på Mina sidor hos Försäkringskassan under Föräldrapenning.',
'parentBalance.dubbeldagarHelper': 'Gäller båda föräldrarna tillsammans, de första 15 månaderna.',
'parentBalance.dubbeldagarLeftLabel': 'Dubbeldagar kvar (0–60)',
'parentBalance.invalid': 'Summan (sjukpenningnivå + lägstanivå) kan inte överstiga {total} dagar.',
'parentBalance.lagstaLeftLabel': 'Lägstanivå kvar (0–90)',
'parentBalance.loadingBalance': 'Laddar saldo…',
'parentBalance.presetButton': 'Inga dagar uttagna',
'parentBalance.rangeError': 'Ange ett tal mellan {min} och {max}.',
'parentBalance.reservedExceedsError': 'Reserverade dagar kan inte överstiga sjukpenningnivå + lägstanivå kvar.',
'parentBalance.reservedLeftHelper': 'Lämna tomt så räknar vi ut det.',
'parentBalance.reservedLeftLabel': 'Reserverade dagar kvar (0–90)',
'parentBalance.saveButton': 'Spara',
'parentBalance.saveError': 'Det gick inte att spara dagarna kvar',
'parentBalance.savingButton': 'Sparar…',
'parentBalance.sjukpenningLeftLabel': 'Sjukpenningnivå kvar (0–390)',
'parentBalance.summary': '= {left} av {total} dagar kvar',
'parentBalance.title': '{name}s dagar kvar',
'parentBalance.titleSelf': 'Dina dagar kvar',
'parentProfileInput.employed': 'Anställd',
'parentProfileInput.employmentStatusLabel': 'Sysselsättning',
'parentProfileInput.hourly': 'Timlön',
@@ -57,6 +60,7 @@ export const settings = {
'settings.addPartnerError': 'Kunde inte lägga till partner',
'settings.addPartnerSuccess': 'Partner tillagd!',
'settings.addingPartner': 'Lägger till...',
'settings.balanceButton': 'Dagar kvar',
'settings.calendarSectionTitle': 'Kalender',
'settings.cancelButton': 'Avbryt',
'settings.childBirthDateLabel': 'Barnets födelsedatum',
@@ -78,8 +82,6 @@ export const settings = {
'settings.partnerNamePlaceholder': 'Partnerns namn',
'settings.partnerNameRequired': 'Ange ett namn för partnern',
'settings.partnerSectionTitle': 'Partner',
'settings.planningHelp': 'Ditt planeringsmål och om du planerar själv eller tillsammans med en partner styr hur planeraren föreslår fördelning av dagar.',
'settings.planningSectionTitle': 'Planering',
'settings.preschoolHelp': 'Förskolor stänger oftast ca 6 dagar per år för planering. Ange hur många dagar din förskola har, så reserveras de i planeringen.',
'settings.preschoolPlanningDaysLabel': 'Förskolans planeringsdagar per år',
'settings.profileHelp': 'Din lönetyp och sysselsättning används för att uppskatta din SGI och planera din ledighet.',
@@ -102,9 +104,6 @@ export const settings = {
'settings.saveChildButton': 'Spara barnuppgifter',
'settings.saveChildError': 'Kunde inte spara barnets uppgifter',
'settings.saveChildSuccess': 'Barnets uppgifter sparade!',
'settings.savePlanningButton': 'Spara planering',
'settings.savePlanningError': 'Kunde inte spara planeringsinställningar',
'settings.savePlanningSuccess': 'Planeringsinställningar sparade!',
'settings.saveProfileButton': 'Spara din profil',
'settings.saveProfileError': 'Kunde inte spara din profil',
'settings.saveProfileSuccess': 'Din profil sparades!',