* 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>
55 lines
2.0 KiB
TypeScript
55 lines
2.0 KiB
TypeScript
import { getTranslations } from 'next-intl/server'
|
|
import { SECTORS } from '@/lib/extensions/sectors'
|
|
import { sectorNameKey } from '@/lib/extensions/i18n'
|
|
import { PageHeader } from '@/components/ui/page-header'
|
|
import ExtensionCard from '@/components/extensions/ExtensionCard'
|
|
import SectorCard from '@/components/extensions/SectorCard'
|
|
|
|
export default async function ExtensionsPage() {
|
|
const t = await getTranslations('extensions')
|
|
const generalSector = SECTORS.find(s => s.slug === 'general')
|
|
// Only sectors that actually ship extensions: a shell with zero extensions
|
|
// would render a dead card and an empty grid.
|
|
const industrySectors = SECTORS.filter(s => s.slug !== 'general' && s.extensions.length > 0)
|
|
|
|
const generalSectorName = (() => {
|
|
if (!generalSector) return ''
|
|
const key = sectorNameKey(generalSector.slug)
|
|
return key ? t(key) : generalSector.name
|
|
})()
|
|
|
|
return (
|
|
<div className="space-y-8">
|
|
<PageHeader title={t('page_title')} />
|
|
|
|
{/* General extensions */}
|
|
{generalSector && (
|
|
<section>
|
|
<h2 className="text-sm uppercase tracking-wider text-muted-foreground mb-4">
|
|
{generalSectorName}
|
|
</h2>
|
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 stagger-enter">
|
|
{generalSector.extensions.map(ext => (
|
|
<ExtensionCard key={ext.slug} extension={ext} />
|
|
))}
|
|
</div>
|
|
</section>
|
|
)}
|
|
|
|
{/* Industry sectors (hidden while no industry sector ships extensions) */}
|
|
{industrySectors.length > 0 && (
|
|
<section>
|
|
<h2 className="text-sm uppercase tracking-wider text-muted-foreground mb-4">
|
|
{t('industry_tools')}
|
|
</h2>
|
|
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 stagger-enter">
|
|
{industrySectors.map(sector => (
|
|
<SectorCard key={sector.slug} sector={sector} />
|
|
))}
|
|
</div>
|
|
</section>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|