From 314efe8b22c43f3d18027c782cc5a75f42fd1b0e Mon Sep 17 00:00:00 2001 From: Jakob Wennberg Date: Thu, 13 Aug 2026 11:27:25 +0200 Subject: [PATCH] fix(design): stop synthesizing bold on Hedvig display headings (#1555) * fix(design): stop synthesizing bold on Hedvig display headings Hedvig Letters Serif ships weight 400 only, but the h1-h3 base rule forced font-weight 500 and DialogTitle/SheetTitle stacked font-semibold on top, so every display heading rendered browser-synthesized bold: the smudged heavy look on dialog titles and page headings. Drop the base rule to 400, remove the weight utilities from the title primitives, and sweep the 41 files that hand-set font-medium/semibold/bold on serif headings (a pattern design.md already forbids). Headings that opt into font-sans keep their weight. Co-Authored-By: Claude Fable 5 * fix(design): drop empty className left by the weight sweep Co-Authored-By: Claude Fable 5 --------- Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com> Co-authored-by: Claude Fable 5 --- app/(auth)/login/login-client.tsx | 4 ++-- app/(auth)/mfa/enroll/page.tsx | 4 ++-- app/(auth)/mfa/verify/page.tsx | 2 +- app/(auth)/register/page.tsx | 4 ++-- app/(auth)/reset-password/page.tsx | 2 +- app/(dashboard)/error.tsx | 2 +- .../extensions/[sector]/[extension]/page.tsx | 4 ++-- app/(dashboard)/extensions/page.tsx | 4 ++-- app/(dashboard)/help/page.tsx | 2 +- .../kassaflodesanalys/KassaflodesanalysClient.tsx | 6 +++--- app/(public)/invoice-action/[token]/page.tsx | 6 +++--- app/(public)/privacy/page.tsx | 2 +- app/global-error.tsx | 2 +- app/globals.css | 7 ++++--- app/sandbox/page.tsx | 4 ++-- components/bookkeeping/CorrectionChain.tsx | 2 +- components/customers/CustomerForm.tsx | 8 ++++---- components/deadlines/DeadlineList.tsx | 2 +- components/docs/DocsLayout.tsx | 2 +- components/extensions/SectorCard.tsx | 2 +- .../extensions/general/ArcimMigrationWorkspace.tsx | 4 ++-- components/extensions/general/CloudBackupWorkspace.tsx | 2 +- .../extensions/general/EnableBankingWorkspace.tsx | 2 +- .../extensions/general/InvoiceInboxWorkspace.tsx | 10 +++++----- components/extensions/general/TicWorkspace.tsx | 4 ++-- components/extensions/shared/EmptyExtensionState.tsx | 2 +- components/extensions/shared/SetupPrompt.tsx | 2 +- components/import/BankFileColumnMappingStep.tsx | 4 ++-- components/invoices/RotRutPayoutDialog.tsx | 4 ++-- components/kpi/KPIStory.tsx | 2 +- components/onboarding/NewUserChecklist.tsx | 2 +- components/onboarding/agent/ReviewCard.tsx | 10 +++++----- components/reports/BankReconciliationView.tsx | 6 +++--- components/salary/OpeningBalancesPanel.tsx | 6 +++--- components/salary/run/RunEmployeesTable.tsx | 2 +- components/settings/BankDetailsForm.tsx | 2 +- components/suppliers/SupplierForm.tsx | 6 +++--- components/system/AppErrorBoundary.tsx | 2 +- components/ui/dialog.tsx | 2 +- components/ui/empty-state.tsx | 2 +- components/ui/sheet.tsx | 2 +- 41 files changed, 75 insertions(+), 74 deletions(-) diff --git a/app/(auth)/login/login-client.tsx b/app/(auth)/login/login-client.tsx index adf70b64..0659d73f 100644 --- a/app/(auth)/login/login-client.tsx +++ b/app/(auth)/login/login-client.tsx @@ -377,7 +377,7 @@ export function LoginClient({ initialMethod }: { initialMethod: LoginMethod | nu
-

{tAuth('email_sent_title')}

+

{tAuth('email_sent_title')}

{showResetPassword ? tAuth.rich('email_sent_body_reset', { @@ -436,7 +436,7 @@ export function LoginClient({ initialMethod }: { initialMethod: LoginMethod | nu

-

{tAuth('reset_title')}

+

{tAuth('reset_title')}

{tAuth('reset_subtitle')}

diff --git a/app/(auth)/mfa/enroll/page.tsx b/app/(auth)/mfa/enroll/page.tsx index 8f2a6c16..f454aadf 100644 --- a/app/(auth)/mfa/enroll/page.tsx +++ b/app/(auth)/mfa/enroll/page.tsx @@ -183,7 +183,7 @@ function MfaEnrollContent() { -

Aktivera tvåfaktorsautentisering

+

Aktivera tvåfaktorsautentisering

Skydda ditt konto med en autentiseringsapp som Google Authenticator eller Authy

@@ -237,7 +237,7 @@ function MfaEnrollContent() { -

Skanna QR-koden

+

Skanna QR-koden

Öppna din autentiseringsapp och skanna koden nedan

diff --git a/app/(auth)/mfa/verify/page.tsx b/app/(auth)/mfa/verify/page.tsx index 25690ea3..cc17cac3 100644 --- a/app/(auth)/mfa/verify/page.tsx +++ b/app/(auth)/mfa/verify/page.tsx @@ -178,7 +178,7 @@ function MfaVerifyContent() { -

{t('verify_title')}

+

{t('verify_title')}

{t('verify_subtitle_full')}

diff --git a/app/(auth)/register/page.tsx b/app/(auth)/register/page.tsx index 10b31ee5..b7bd5437 100644 --- a/app/(auth)/register/page.tsx +++ b/app/(auth)/register/page.tsx @@ -393,7 +393,7 @@ function RegisterPageContent() {
-

{t('duplicate_title')}

+

{t('duplicate_title')}

{t('duplicate_body_prefix')}{' '} {duplicateEmail}. @@ -446,7 +446,7 @@ function RegisterPageContent() {

-

{t('confirm_email_title')}

+

{t('confirm_email_title')}

{t.rich('confirm_email_body', { email, diff --git a/app/(auth)/reset-password/page.tsx b/app/(auth)/reset-password/page.tsx index ce8bf9a5..df9f32d8 100644 --- a/app/(auth)/reset-password/page.tsx +++ b/app/(auth)/reset-password/page.tsx @@ -216,7 +216,7 @@ function ResetPasswordInner() {

-

{t('title')}

+

{t('title')}

{subtitle}

diff --git a/app/(dashboard)/error.tsx b/app/(dashboard)/error.tsx index 38a962c4..d33d4dfd 100644 --- a/app/(dashboard)/error.tsx +++ b/app/(dashboard)/error.tsx @@ -17,7 +17,7 @@ export default function DashboardError({ return (
-

Något gick fel

+

Något gick fel

Ett oväntat fel uppstod. Försök igen eller{' '} kontakta support{' '} diff --git a/app/(dashboard)/extensions/[sector]/[extension]/page.tsx b/app/(dashboard)/extensions/[sector]/[extension]/page.tsx index aea82337..f7f6de3f 100644 --- a/app/(dashboard)/extensions/[sector]/[extension]/page.tsx +++ b/app/(dashboard)/extensions/[sector]/[extension]/page.tsx @@ -95,14 +95,14 @@ export default async function ExtensionDetailPage({ {/* Details */}

-

{t('description_heading')}

+

{t('description_heading')}

{extensionLongDescription}

-

{t('data_source_heading')}

+

{t('data_source_heading')}

{dataPatternLabels[definition.dataPattern]}

diff --git a/app/(dashboard)/extensions/page.tsx b/app/(dashboard)/extensions/page.tsx index 2e04c81d..5fc6da5c 100644 --- a/app/(dashboard)/extensions/page.tsx +++ b/app/(dashboard)/extensions/page.tsx @@ -25,7 +25,7 @@ export default async function ExtensionsPage() { {/* General extensions */} {generalSector && (
-

+

{generalSectorName}

@@ -39,7 +39,7 @@ export default async function ExtensionsPage() { {/* Industry sectors (hidden while no industry sector ships extensions) */} {industrySectors.length > 0 && (
-

+

{t('industry_tools')}

diff --git a/app/(dashboard)/help/page.tsx b/app/(dashboard)/help/page.tsx index 607eef69..70c88f5e 100644 --- a/app/(dashboard)/help/page.tsx +++ b/app/(dashboard)/help/page.tsx @@ -237,7 +237,7 @@ function TermCard({ term, isExpanded, onToggle }: { term: GlossaryTerm; isExpand
-

{term.term}

+

{term.term}

{term.simpleTerm && ( {term.simpleTerm} diff --git a/app/(dashboard)/reports/kassaflodesanalys/KassaflodesanalysClient.tsx b/app/(dashboard)/reports/kassaflodesanalys/KassaflodesanalysClient.tsx index 83668a1c..b1e0e7b1 100644 --- a/app/(dashboard)/reports/kassaflodesanalys/KassaflodesanalysClient.tsx +++ b/app/(dashboard)/reports/kassaflodesanalys/KassaflodesanalysClient.tsx @@ -241,7 +241,7 @@ export function KassaflodesanalysClient() { {/* Section 1: Löpande verksamhet */} -

+

Den löpande verksamheten

@@ -281,7 +281,7 @@ export function KassaflodesanalysClient() { {/* Section 2: Investeringsverksamhet */} -

+

Investeringsverksamheten

@@ -307,7 +307,7 @@ export function KassaflodesanalysClient() { {/* Section 3: Finansieringsverksamhet */} -

+

Finansieringsverksamheten

diff --git a/app/(public)/invoice-action/[token]/page.tsx b/app/(public)/invoice-action/[token]/page.tsx index 298fe1c6..ffb32aba 100644 --- a/app/(public)/invoice-action/[token]/page.tsx +++ b/app/(public)/invoice-action/[token]/page.tsx @@ -117,7 +117,7 @@ export default function InvoiceActionPage({ params }: { params: Promise<{ token: -

Ogiltig länk

+

Ogiltig länk

{error}

@@ -136,7 +136,7 @@ export default function InvoiceActionPage({ params }: { params: Promise<{ token: -

Tack för ditt svar!

+

Tack för ditt svar!

{successMessage || ( invoice.previousResponse === 'marked_paid' @@ -170,7 +170,7 @@ export default function InvoiceActionPage({ params }: { params: Promise<{ token:

{/* Header */}
-

+

Betalningspåminnelse

diff --git a/app/(public)/privacy/page.tsx b/app/(public)/privacy/page.tsx index 189756a4..a79bd9d7 100644 --- a/app/(public)/privacy/page.tsx +++ b/app/(public)/privacy/page.tsx @@ -15,7 +15,7 @@ export default function PrivacyPolicyPage() {

-

+

Integritetspolicy

diff --git a/app/global-error.tsx b/app/global-error.tsx index e8ea0d73..e1638e3c 100644 --- a/app/global-error.tsx +++ b/app/global-error.tsx @@ -65,7 +65,7 @@ export default function GlobalError({ {phase === "fallback" ? (

-

Något gick fel

+

Något gick fel

Ett oväntat fel inträffade. Försök igen eller{" "}

-

+

Du är redan inloggad

@@ -111,7 +111,7 @@ export default function SandboxPage() {

-

+

Testa {branding.appName.toLowerCase()} utan att registrera dig

diff --git a/components/bookkeeping/CorrectionChain.tsx b/components/bookkeeping/CorrectionChain.tsx index e731948e..2fb9e7d1 100644 --- a/components/bookkeeping/CorrectionChain.tsx +++ b/components/bookkeeping/CorrectionChain.tsx @@ -45,7 +45,7 @@ export default function CorrectionChain({ currentEntryId, chain }: Props) { return (

-

{t('title')}

+

{t('title')}

diff --git a/components/customers/CustomerForm.tsx b/components/customers/CustomerForm.tsx index 9b8d48d0..bfc79beb 100644 --- a/components/customers/CustomerForm.tsx +++ b/components/customers/CustomerForm.tsx @@ -318,7 +318,7 @@ export default function CustomerForm({ {/* Customer-specific invoice recipients */}
-

{t('invoice_email_section')}

+

{t('invoice_email_section')}

@@ -350,7 +350,7 @@ export default function CustomerForm({ {/* Address */}
-

{t('address_section')}

+

{t('address_section')}

-

{t('individual_section')}

+

{t('individual_section')}

@@ -408,7 +408,7 @@ export default function CustomerForm({
) : (
-

{t('business_section')}

+

{t('business_section')}

diff --git a/components/deadlines/DeadlineList.tsx b/components/deadlines/DeadlineList.tsx index 57a84dcd..5a0b80dc 100644 --- a/components/deadlines/DeadlineList.tsx +++ b/components/deadlines/DeadlineList.tsx @@ -173,7 +173,7 @@ export function DeadlineList({ {sections.map(({ key, label, items }) => (
-

+

{label}

diff --git a/components/docs/DocsLayout.tsx b/components/docs/DocsLayout.tsx index 52f83be5..d49cac37 100644 --- a/components/docs/DocsLayout.tsx +++ b/components/docs/DocsLayout.tsx @@ -61,7 +61,7 @@ export function DocsLayout({ currentPath, children }: DocsLayoutProps) {
{DOCS_NAV.map((section) => (
-

+

{section.label}

    diff --git a/components/extensions/SectorCard.tsx b/components/extensions/SectorCard.tsx index 602ca5ac..b7f01086 100644 --- a/components/extensions/SectorCard.tsx +++ b/components/extensions/SectorCard.tsx @@ -24,7 +24,7 @@ export default async function SectorCard({ sector }: { sector: Sector }) {
-

+

{name}

{description}

diff --git a/components/extensions/general/ArcimMigrationWorkspace.tsx b/components/extensions/general/ArcimMigrationWorkspace.tsx index a10bb4a3..c9308e29 100644 --- a/components/extensions/general/ArcimMigrationWorkspace.tsx +++ b/components/extensions/general/ArcimMigrationWorkspace.tsx @@ -1968,7 +1968,7 @@ function ResultStep({ {/* ── Per-fiscal-year SIE breakdown ── */} {sieResults.length > 0 && (
-

+

Bokföringsdata (SIE)

@@ -1993,7 +1993,7 @@ function ResultStep({ return (
-

+

Övriga data

diff --git a/components/extensions/general/CloudBackupWorkspace.tsx b/components/extensions/general/CloudBackupWorkspace.tsx index 244fe731..0f8311c3 100644 --- a/components/extensions/general/CloudBackupWorkspace.tsx +++ b/components/extensions/general/CloudBackupWorkspace.tsx @@ -9,7 +9,7 @@ export default function CloudBackupWorkspace(_props: WorkspaceComponentProps) { return (
-

Molnsynkronisering

+

Molnsynkronisering

Koppla ditt Google Drive- eller Dropbox-konto under Importera/Exportera för att synka arkiv till din egen molnlagring. diff --git a/components/extensions/general/EnableBankingWorkspace.tsx b/components/extensions/general/EnableBankingWorkspace.tsx index ef6921c1..e92ccc69 100644 --- a/components/extensions/general/EnableBankingWorkspace.tsx +++ b/components/extensions/general/EnableBankingWorkspace.tsx @@ -9,7 +9,7 @@ export default function EnableBankingWorkspace({ userId }: WorkspaceComponentPro return (

-

Bankintegration (PSD2)

+

Bankintegration (PSD2)

Koppla ditt bankkonto under Inställningar för att synka transaktioner automatiskt.

diff --git a/components/extensions/general/InvoiceInboxWorkspace.tsx b/components/extensions/general/InvoiceInboxWorkspace.tsx index 9feed7d8..0fd6713b 100644 --- a/components/extensions/general/InvoiceInboxWorkspace.tsx +++ b/components/extensions/general/InvoiceInboxWorkspace.tsx @@ -1146,7 +1146,7 @@ export default function InvoiceInboxWorkspace(_props: WorkspaceComponentProps) {
-

Dokumentinkorg

+

Dokumentinkorg

{/* Where the page's contents come from, behind one chip. The detail (which mailbox, when it was last read) is a thing people look up when something seems wrong, not something they read every visit. @@ -2506,7 +2506,7 @@ function PurchaseRail({ purchase }: { purchase: PurchaseWithoutUnderlag }) { return (
-

+

{purchase.merchant_name || purchase.description || t('purchase_unknown')}

{t('purchase_kind')}

@@ -2676,7 +2676,7 @@ function ProposedBooking({ return (
-

{t('proposal_title')}

+

{t('proposal_title')}

{data.entry_date && ( Bokförs {formatDate(data.entry_date)} @@ -2890,7 +2890,7 @@ function FieldsRail({ {/* WhatsApp chat context (see waCtx derivation above). */} {showWaBlock && (
-

+

{t('wa_block_title')}

{waCaption && ( @@ -2991,7 +2991,7 @@ function FieldsRail({ the code can be copied out. */} {item.source === 'email' && !item.document_id && (
-

+

{t('email_body_label')}

{item.email_body_text?.trim() ? ( diff --git a/components/extensions/general/TicWorkspace.tsx b/components/extensions/general/TicWorkspace.tsx index 69993f4a..77ef69f2 100644 --- a/components/extensions/general/TicWorkspace.tsx +++ b/components/extensions/general/TicWorkspace.tsx @@ -272,7 +272,7 @@ export default function TicWorkspace({ userId }: WorkspaceComponentProps) { return (
-

+

{t('no_org_number_title')}

@@ -293,7 +293,7 @@ export default function TicWorkspace({ userId }: WorkspaceComponentProps) { return (

-

+

{t('fetch_failed_title')}

diff --git a/components/extensions/shared/EmptyExtensionState.tsx b/components/extensions/shared/EmptyExtensionState.tsx index 65bf757d..3773521b 100644 --- a/components/extensions/shared/EmptyExtensionState.tsx +++ b/components/extensions/shared/EmptyExtensionState.tsx @@ -14,7 +14,7 @@ export default function EmptyExtensionState({ return (

{icon ?? } -

{title}

+

{title}

{description}

) diff --git a/components/extensions/shared/SetupPrompt.tsx b/components/extensions/shared/SetupPrompt.tsx index 596b03c2..f4cb7a6d 100644 --- a/components/extensions/shared/SetupPrompt.tsx +++ b/components/extensions/shared/SetupPrompt.tsx @@ -45,7 +45,7 @@ export default function SetupPrompt({ title, description, fields, onSave }: Setu
-

{title}

+

{title}

{description}

diff --git a/components/import/BankFileColumnMappingStep.tsx b/components/import/BankFileColumnMappingStep.tsx index 43be8337..01f758bd 100644 --- a/components/import/BankFileColumnMappingStep.tsx +++ b/components/import/BankFileColumnMappingStep.tsx @@ -243,7 +243,7 @@ export default function BankFileColumnMappingStep({ {/* Required column mappings */}
-

Obligatoriska kolumner

+

Obligatoriska kolumner

@@ -306,7 +306,7 @@ export default function BankFileColumnMappingStep({ {/* Optional column mappings */}
-

Valfria kolumner

+

Valfria kolumner

diff --git a/components/invoices/RotRutPayoutDialog.tsx b/components/invoices/RotRutPayoutDialog.tsx index f969e880..e1565fd0 100644 --- a/components/invoices/RotRutPayoutDialog.tsx +++ b/components/invoices/RotRutPayoutDialog.tsx @@ -374,7 +374,7 @@ export default function RotRutPayoutDialog({
-

+

{t('rot_rut_eligible_title')}

@@ -487,7 +487,7 @@ export default function RotRutPayoutDialog({

-

+

{t('rot_rut_history_title')}

{t('rot_rut_upload_help')}

diff --git a/components/kpi/KPIStory.tsx b/components/kpi/KPIStory.tsx index 77182863..4af2420a 100644 --- a/components/kpi/KPIStory.tsx +++ b/components/kpi/KPIStory.tsx @@ -347,7 +347,7 @@ export function KPIBreakdown({ report }: { report: KPIReport }) { return (
-

+

{t('costs_title')}

diff --git a/components/onboarding/NewUserChecklist.tsx b/components/onboarding/NewUserChecklist.tsx index e8efad56..aa4e37bb 100644 --- a/components/onboarding/NewUserChecklist.tsx +++ b/components/onboarding/NewUserChecklist.tsx @@ -224,7 +224,7 @@ export default function NewUserChecklist({ return (
-

{t('title', { count: stepCount })}

+

{t('title', { count: stepCount })}