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 <noreply@anthropic.com> * fix(design): drop empty className left by the weight sweep Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
Jakob Wennberg
parent
e51a2c8102
commit
314efe8b22
@@ -24,7 +24,7 @@ export default async function SectorCard({ sector }: { sector: Sector }) {
|
||||
<Icon className="h-5 w-5 text-foreground" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-sm font-medium">
|
||||
<h3 className="text-sm">
|
||||
{name}
|
||||
</h3>
|
||||
<p className="text-xs text-muted-foreground mt-0.5 line-clamp-2">{description}</p>
|
||||
|
||||
@@ -1968,7 +1968,7 @@ function ResultStep({
|
||||
{/* ── Per-fiscal-year SIE breakdown ── */}
|
||||
{sieResults.length > 0 && (
|
||||
<div className="space-y-2">
|
||||
<h3 className="flex items-center gap-2 text-sm font-medium text-muted-foreground">
|
||||
<h3 className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||
<Database className="h-4 w-4" />
|
||||
Bokföringsdata (SIE)
|
||||
</h3>
|
||||
@@ -1993,7 +1993,7 @@ function ResultStep({
|
||||
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
<h3 className="flex items-center gap-2 text-sm font-medium text-muted-foreground">
|
||||
<h3 className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||
<FileText className="h-4 w-4" />
|
||||
Övriga data
|
||||
</h3>
|
||||
|
||||
@@ -9,7 +9,7 @@ export default function CloudBackupWorkspace(_props: WorkspaceComponentProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center py-16 text-center">
|
||||
<Cloud className="h-12 w-12 text-muted-foreground/40 mb-4" />
|
||||
<h3 className="text-lg font-medium text-foreground">Molnsynkronisering</h3>
|
||||
<h3 className="text-lg text-foreground">Molnsynkronisering</h3>
|
||||
<p className="text-sm text-muted-foreground mt-1 max-w-md">
|
||||
Koppla ditt Google Drive- eller Dropbox-konto under Importera/Exportera för att
|
||||
synka arkiv till din egen molnlagring.
|
||||
|
||||
@@ -9,7 +9,7 @@ export default function EnableBankingWorkspace({ userId }: WorkspaceComponentPro
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center py-16 text-center">
|
||||
<Landmark className="h-12 w-12 text-muted-foreground/40 mb-4" />
|
||||
<h3 className="text-lg font-medium text-foreground">Bankintegration (PSD2)</h3>
|
||||
<h3 className="text-lg text-foreground">Bankintegration (PSD2)</h3>
|
||||
<p className="text-sm text-muted-foreground mt-1 max-w-md">
|
||||
Koppla ditt bankkonto under Inställningar för att synka transaktioner automatiskt.
|
||||
</p>
|
||||
|
||||
@@ -1146,7 +1146,7 @@ export default function InvoiceInboxWorkspace(_props: WorkspaceComponentProps) {
|
||||
<header className="flex items-center justify-between gap-4 border-b px-4 py-2.5 flex-wrap">
|
||||
<div className="flex items-center gap-2 min-w-0">
|
||||
<Inbox className="h-4 w-4 text-muted-foreground shrink-0" />
|
||||
<h1 className="font-medium text-sm shrink-0">Dokumentinkorg</h1>
|
||||
<h1 className="text-sm shrink-0">Dokumentinkorg</h1>
|
||||
{/* 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 (
|
||||
<div className="p-4 space-y-4">
|
||||
<div>
|
||||
<h3 className="text-sm font-medium">
|
||||
<h3 className="text-sm">
|
||||
{purchase.merchant_name || purchase.description || t('purchase_unknown')}
|
||||
</h3>
|
||||
<p className="text-xs text-muted-foreground mt-0.5">{t('purchase_kind')}</p>
|
||||
@@ -2676,7 +2676,7 @@ function ProposedBooking({
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
<div className="flex items-baseline justify-between gap-3">
|
||||
<h3 className="text-xs font-medium">{t('proposal_title')}</h3>
|
||||
<h3 className="text-xs">{t('proposal_title')}</h3>
|
||||
{data.entry_date && (
|
||||
<span className="text-[11px] text-muted-foreground tabular-nums">
|
||||
Bokförs {formatDate(data.entry_date)}
|
||||
@@ -2890,7 +2890,7 @@ function FieldsRail({
|
||||
{/* WhatsApp chat context (see waCtx derivation above). */}
|
||||
{showWaBlock && (
|
||||
<div className="border-b px-4 py-3 text-xs space-y-1">
|
||||
<h3 className="text-xs uppercase tracking-wide text-muted-foreground font-medium mb-2">
|
||||
<h3 className="text-xs uppercase tracking-wide text-muted-foreground mb-2">
|
||||
{t('wa_block_title')}
|
||||
</h3>
|
||||
{waCaption && (
|
||||
@@ -2991,7 +2991,7 @@ function FieldsRail({
|
||||
the code can be copied out. */}
|
||||
{item.source === 'email' && !item.document_id && (
|
||||
<div className="border-b px-4 py-3">
|
||||
<h3 className="text-xs uppercase tracking-wide text-muted-foreground font-medium mb-2">
|
||||
<h3 className="text-xs uppercase tracking-wide text-muted-foreground mb-2">
|
||||
{t('email_body_label')}
|
||||
</h3>
|
||||
{item.email_body_text?.trim() ? (
|
||||
|
||||
@@ -272,7 +272,7 @@ export default function TicWorkspace({ userId }: WorkspaceComponentProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center py-16 text-center">
|
||||
<Settings className="h-12 w-12 text-muted-foreground/40 mb-4" />
|
||||
<h3 className="text-lg font-medium text-foreground">
|
||||
<h3 className="text-lg text-foreground">
|
||||
{t('no_org_number_title')}
|
||||
</h3>
|
||||
<p className="text-sm text-muted-foreground mt-1 max-w-md">
|
||||
@@ -293,7 +293,7 @@ export default function TicWorkspace({ userId }: WorkspaceComponentProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center py-16 text-center">
|
||||
<XCircle className="h-12 w-12 text-muted-foreground/40 mb-4" />
|
||||
<h3 className="text-lg font-medium text-foreground">
|
||||
<h3 className="text-lg text-foreground">
|
||||
{t('fetch_failed_title')}
|
||||
</h3>
|
||||
<p className="text-sm text-muted-foreground mt-1 max-w-md">
|
||||
|
||||
@@ -14,7 +14,7 @@ export default function EmptyExtensionState({
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center py-16 text-center">
|
||||
{icon ?? <Puzzle className="h-12 w-12 text-muted-foreground/40 mb-4" />}
|
||||
<h3 className="text-lg font-medium text-foreground">{title}</h3>
|
||||
<h3 className="text-lg text-foreground">{title}</h3>
|
||||
<p className="text-sm text-muted-foreground mt-1 max-w-md">{description}</p>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -45,7 +45,7 @@ export default function SetupPrompt({ title, description, fields, onSave }: Setu
|
||||
<div className="inline-flex items-center justify-center w-12 h-12 rounded-full bg-muted mb-3">
|
||||
<Settings className="h-6 w-6 text-muted-foreground" />
|
||||
</div>
|
||||
<h3 className="font-semibold">{title}</h3>
|
||||
<h3>{title}</h3>
|
||||
<p className="text-sm text-muted-foreground mt-1">{description}</p>
|
||||
</div>
|
||||
<form onSubmit={handleSubmit} className="space-y-4">
|
||||
|
||||
Reference in New Issue
Block a user