diff --git a/src/app/(frontend)/globals.css b/src/app/(frontend)/globals.css index 74651b0..2222009 100644 --- a/src/app/(frontend)/globals.css +++ b/src/app/(frontend)/globals.css @@ -24,6 +24,17 @@ --color-input: var(--input); --color-ring: var(--ring); + --font-size-eyebrow: var(--type-eyebrow); + --font-size-caption: var(--type-caption); + --font-size-small: var(--type-small); + --font-size-body: var(--type-step-0); + --font-size-lead: var(--type-step-1); + --font-size-card-title: var(--type-step-2); + --font-size-subtitle: var(--type-step-3); + --font-size-section-title: var(--type-step-4); + --font-size-page-title: var(--type-step-6); + --font-size-display: var(--type-step-7); + --radius-lg: 0.5rem; --radius-md: calc(0.5rem - 2px); --radius-sm: calc(0.5rem - 4px); @@ -43,11 +54,45 @@ --muted: #f1f5f9; --muted-foreground: #64748b; --accent: #EFBF04; - --accent-foreground: #ffffff; + --accent-foreground: #101828; --destructive: #ef4444; --border: #e2e8f0; --input: #e2e8f0; --ring: #03093A; + + /* Fluid type scale: 320px -> 1440px, 16px -> 18px body. */ + --type-eyebrow: clamp(0.6875rem, 0.6696rem + 0.0893vw, 0.75rem); + --type-caption: clamp(0.75rem, 0.7143rem + 0.1786vw, 0.875rem); + --type-small: clamp(0.875rem, 0.8393rem + 0.1786vw, 1rem); + --type-step-0: clamp(1rem, 0.9643rem + 0.1786vw, 1.125rem); + --type-step-1: clamp(1.125rem, 1.0446rem + 0.4018vw, 1.4063rem); + --type-step-2: clamp(1.2656rem, 1.125rem + 0.7031vw, 1.7578rem); + --type-step-3: clamp(1.4238rem, 1.2028rem + 1.1049vw, 2.1973rem); + --type-step-4: clamp(1.6018rem, 1.2747rem + 1.6354vw, 2.7466rem); + --type-step-5: clamp(1.802rem, 1.336rem + 2.3303vw, 3.4332rem); + --type-step-6: clamp(2.0273rem, 1.3804rem + 3.2346vw, 4.2915rem); + --type-step-7: clamp(2.2807rem, 1.3996rem + 4.4053vw, 5.3644rem); + + --leading-display: 0.98; + --leading-heading: 1.05; + --leading-body: 1.7; + --leading-small: 1.55; + + /* Semantic text roles. Gold stays bright on dark surfaces and decorative uses. */ + --text-heading: #101828; + --text-body: #344054; + --text-secondary: #475467; + --text-muted: #596579; + --text-link: #111D55; + --text-link-hover: #051A87; + --text-eyebrow-light: #285F8C; + --text-brand-on-light: #765600; + --text-brand-on-dark: #EFBF04; + --text-on-accent: #101828; + --text-inverse: #ffffff; + --text-inverse-secondary: rgba(255, 255, 255, 0.72); + --text-inverse-muted: rgba(255, 255, 255, 0.65); + --text-danger: #B91C1C; } .dark { @@ -64,7 +109,7 @@ --muted: #1e293b; --muted-foreground: #94a3b8; --accent: #EFBF04; - --accent-foreground: #ffffff; + --accent-foreground: #101828; --destructive: #7f1d1d; --border: rgba(255, 255, 255, 0.1); --input: rgba(255, 255, 255, 0.15); @@ -77,6 +122,9 @@ } body { @apply bg-background text-foreground font-body; + color: var(--text-body); + font-size: var(--type-step-0); + line-height: var(--leading-body); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; margin: 0; @@ -88,6 +136,7 @@ } h1, h2, h3, h4, h5, h6 { @apply font-display font-bold; + color: var(--text-heading); } blockquote, q, @@ -106,6 +155,99 @@ } } +@layer components { + .type-display, + .type-page-title, + .type-section-title, + .type-subtitle, + .type-card-title, + .type-eyebrow { + font-family: var(--font-display); + font-weight: 700; + hyphens: auto; + overflow-wrap: anywhere; + } + + .type-display { + font-size: var(--type-step-7); + line-height: var(--leading-display); + letter-spacing: -0.03em; + } + + .type-page-title { + font-size: var(--type-step-6); + line-height: var(--leading-display); + letter-spacing: -0.03em; + } + + .type-section-title { + font-size: var(--type-step-4); + line-height: var(--leading-heading); + letter-spacing: -0.025em; + } + + .type-subtitle { + font-size: var(--type-step-3); + line-height: var(--leading-heading); + letter-spacing: -0.02em; + } + + .type-card-title { + font-size: var(--type-step-2); + line-height: 1.1; + letter-spacing: -0.02em; + } + + .type-lead, + .type-body, + .type-small, + .type-caption { + font-family: var(--font-body); + font-weight: 400; + overflow-wrap: anywhere; + } + + .type-lead { + font-size: var(--type-step-1); + line-height: var(--leading-body); + } + + .type-body { + font-size: var(--type-step-0); + line-height: var(--leading-body); + } + + .type-small { + font-size: var(--type-small); + line-height: var(--leading-small); + } + + .type-caption { + font-size: var(--type-caption); + line-height: var(--leading-small); + } + + .type-eyebrow { + font-size: var(--type-eyebrow); + line-height: 1.3; + letter-spacing: 0.18em; + text-transform: uppercase; + } + + .text-role-heading { color: var(--text-heading); } + .text-role-body { color: var(--text-body); } + .text-role-secondary { color: var(--text-secondary); } + .text-role-muted { color: var(--text-muted); } + .text-role-link { color: var(--text-link); } + .text-role-eyebrow { color: var(--text-eyebrow-light); } + .text-role-brand-light { color: var(--text-brand-on-light); } + .text-role-brand-dark { color: var(--text-brand-on-dark); } + .text-role-inverse { color: var(--text-inverse); } + .text-role-inverse-secondary { color: var(--text-inverse-secondary); } + .text-role-inverse-muted { color: var(--text-inverse-muted); } + .text-role-danger { color: var(--text-danger); } +} + @keyframes fade-in { from { opacity: 0; diff --git a/src/spa/components/AwardsGridSection.tsx b/src/spa/components/AwardsGridSection.tsx index 7b5f159..386dd22 100644 --- a/src/spa/components/AwardsGridSection.tsx +++ b/src/spa/components/AwardsGridSection.tsx @@ -110,14 +110,14 @@ function FeaturedAwardCard({ card }: { card: ResolvedAwardCard }) {
- + {fallbackText(card.label, 'Auszeichnung 01')} -

+

-

+

{fallbackText(card.description, '')}

@@ -228,14 +228,14 @@ function SupportingAwardCards({
- + {fallbackText(card.label, '')} -

+

-

+

{fallbackText(card.description, '')}

@@ -306,14 +306,14 @@ export default function AwardsGridSection({ content, featuredGoldeneBavaria = fa
{!featuredCard ? : null}
- + {fallbackText(section.eyebrow, participationContent.awardsGrid.eyebrow)}
-

+

-

+

{fallbackText(section.description, participationContent.awardsGrid.description)}

@@ -332,10 +332,10 @@ export default function AwardsGridSection({ content, featuredGoldeneBavaria = fa
-

+

-

+

{fallbackText(section.supportingDescription, participationContent.awardsGrid.supportingDescription)}

diff --git a/src/spa/components/HomeWinnersSection.tsx b/src/spa/components/HomeWinnersSection.tsx index 793d3f1..4c02c86 100644 --- a/src/spa/components/HomeWinnersSection.tsx +++ b/src/spa/components/HomeWinnersSection.tsx @@ -86,8 +86,8 @@ function HomeWinnerCard({ {winner?.year || staticWinner?.year} · {winner?.awardType || winner?.type || staticWinner?.type}
-

{title}

-

{winner?.category || staticWinner?.category}

+

{title}

+

{winner?.category || staticWinner?.category}

{hoverLabel}
@@ -121,7 +121,7 @@ export default function HomeWinnersSection({ content }: { content?: HomeWinnersC
{fallbackText(winnersSection.eyebrow, homeContent.winners.eyebrow)} -

+

diff --git a/src/spa/components/TestimonialsSection.tsx b/src/spa/components/TestimonialsSection.tsx index 7711152..bfacbeb 100644 --- a/src/spa/components/TestimonialsSection.tsx +++ b/src/spa/components/TestimonialsSection.tsx @@ -77,8 +77,8 @@ export default function TestimonialsSection({ data }: { data?: TestimonialsCms } {isMobile && (
{/* Section header */} - {eyebrow} -

+ {eyebrow} +

@@ -94,7 +94,7 @@ export default function TestimonialsSection({ data }: { data?: TestimonialsCms } {/* Body */}
-

{t.quote}

+

{t.quote}

{t.name}
{t.role} · {t.company}
@@ -134,13 +134,13 @@ export default function TestimonialsSection({ data }: { data?: TestimonialsCms } {/* Right – quote */}
- {eyebrow} + {eyebrow} -

+

-

+

{t.quote}

@@ -148,7 +148,7 @@ export default function TestimonialsSection({ data }: { data?: TestimonialsCms }
{t.name}
{t.role} · {t.company}
-
{yearPrefix} {t.year}
+
{yearPrefix} {t.year}
diff --git a/src/spa/components/WegZurAuszeichnungSection.tsx b/src/spa/components/WegZurAuszeichnungSection.tsx index f37296d..5808815 100644 --- a/src/spa/components/WegZurAuszeichnungSection.tsx +++ b/src/spa/components/WegZurAuszeichnungSection.tsx @@ -47,10 +47,10 @@ export default function WegZurAuszeichnungSection({ content }: { content?: Proce {/* Section header */}
{fallbackText(section.eyebrow, participationContent.process.eyebrow)} -

+

-

+

{fallbackText(section.description, participationContent.process.description)}

@@ -71,12 +71,12 @@ export default function WegZurAuszeichnungSection({ content }: { content?: Proce {fallbackText(item.date, '')}
-

+

{fallbackText(item.title, '')}

-

+

{fallbackText(item.desc, '')}

{/* Step progress indicator */} @@ -101,11 +101,11 @@ export default function WegZurAuszeichnungSection({ content }: { content?: Proce
{fallbackText(section.eyebrow, participationContent.process.eyebrow)} -

+

-

+

{fallbackText(section.description, participationContent.process.description)}

@@ -167,11 +167,11 @@ export default function WegZurAuszeichnungSection({ content }: { content?: Proce {fallbackText(item.date, '')}
-

+

{fallbackText(item.title, '')}

-

+

{fallbackText(item.desc, '')}

{/* Step progress indicator */} diff --git a/src/spa/components/forms/ApplicationFormSection.tsx b/src/spa/components/forms/ApplicationFormSection.tsx index 63cf790..4879aeb 100644 --- a/src/spa/components/forms/ApplicationFormSection.tsx +++ b/src/spa/components/forms/ApplicationFormSection.tsx @@ -50,11 +50,11 @@ export function ApplicationFormSection({ source }: { source: NewsletterSource })
{showApplicationForm ? fallbackText(section.eyebrow, homeContent.application.eyebrow) : newsletterCopy.eyebrow} -

+

-

+

{showApplicationForm ? fallbackText(section.body, homeContent.application.body) : newsletterCopy.body}

@@ -99,7 +99,7 @@ export function ApplicationFormSection({ source }: { source: NewsletterSource })
{showApplicationForm ? fallbackText(section.formEyebrow, homeContent.application.formEyebrow) : newsletterCopy.formEyebrow} -

{showApplicationForm ? fallbackText(section.formTitle, homeContent.application.formTitle) : newsletterCopy.formTitle}

+

{showApplicationForm ? fallbackText(section.formTitle, homeContent.application.formTitle) : newsletterCopy.formTitle}

{showApplicationForm ? : }
diff --git a/src/spa/components/forms/BewerbungsForm.tsx b/src/spa/components/forms/BewerbungsForm.tsx index 0d5b4f0..c757b95 100644 --- a/src/spa/components/forms/BewerbungsForm.tsx +++ b/src/spa/components/forms/BewerbungsForm.tsx @@ -345,10 +345,10 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd
-

+

{data.type === 'selbst' ? fallbackText(formContent.success.selfHeading, participationContent.form.success.selfHeading) : fallbackText(formContent.success.nominationHeading, participationContent.form.success.nominationHeading)}

-

+

{data.type === 'selbst' ? <>{fallbackText(formContent.success.selfPrefix, participationContent.form.success.selfPrefix)}{data.firmenname}{fallbackText(formContent.success.selfMiddle, participationContent.form.success.selfMiddle)}{data.email}{fallbackText(formContent.success.selfSuffix, participationContent.form.success.selfSuffix)} : <>{fallbackText(formContent.success.nominationPrefix, participationContent.form.success.nominationPrefix)}{data.nomName}{fallbackText(formContent.success.nominationMiddle, participationContent.form.success.nominationMiddle)}{data.nomFirma}{fallbackText(formContent.success.nominationSuffix, participationContent.form.success.nominationSuffix)} @@ -400,8 +400,8 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd {/* ── Step 0: Typ-Wahl ── */} {step === 0 && (

-

{fallbackText(formContent.typeStep.eyebrow, participationContent.form.typeStep.eyebrow)}

-

{fallbackText(formContent.typeStep.heading, participationContent.form.typeStep.heading)}

+

{fallbackText(formContent.typeStep.eyebrow, participationContent.form.typeStep.eyebrow)}

+

{fallbackText(formContent.typeStep.heading, participationContent.form.typeStep.heading)}

-

{fallbackText(formContent.eligibility.eyebrow, participationContent.form.eligibility.eyebrow)}

-

{fallbackText(formContent.eligibility.heading, participationContent.form.eligibility.heading)}

+

{fallbackText(formContent.eligibility.eyebrow, participationContent.form.eligibility.eyebrow)}

+

{fallbackText(formContent.eligibility.heading, participationContent.form.eligibility.heading)}

@@ -450,12 +450,12 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd
-

{fallbackText(formContent.eligibility.ineligibleHeading, participationContent.form.eligibility.ineligibleHeading)}

+

{fallbackText(formContent.eligibility.ineligibleHeading, participationContent.form.eligibility.ineligibleHeading)}

-

+

{fallbackText(formContent.eligibility.ineligibleBody, participationContent.form.eligibility.ineligibleBody)}

-

+

{fallbackText(formContent.eligibility.ineligibleContactPrefix, participationContent.form.eligibility.ineligibleContactPrefix)} {fallbackText(formContent.eligibility.ineligibleContactEmail, participationContent.form.eligibility.ineligibleContactEmail)}

@@ -463,8 +463,8 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd return (
-

{fallbackText(formContent.selfContact.eyebrow, participationContent.form.selfContact.eyebrow)}

-

{fallbackText(formContent.selfContact.heading, participationContent.form.selfContact.heading)}

+

{fallbackText(formContent.selfContact.eyebrow, participationContent.form.selfContact.eyebrow)}

+

{fallbackText(formContent.selfContact.heading, participationContent.form.selfContact.heading)}

@@ -480,7 +480,7 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd set('telefon', e.target.value)} placeholder={fallbackText(formContent.selfContact.phonePlaceholder, participationContent.form.selfContact.phonePlaceholder)} />
-

+

{fallbackText(formContent.selfContact.footnote, participationContent.form.selfContact.footnote)}

@@ -491,8 +491,8 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd {step === 3 && data.type === 'selbst' && (
-

{fallbackText(formContent.selfSummary.eyebrow, participationContent.form.selfSummary.eyebrow)}

-

{fallbackText(formContent.selfSummary.heading, participationContent.form.selfSummary.heading)}

+

{fallbackText(formContent.selfSummary.eyebrow, participationContent.form.selfSummary.eyebrow)}

+

{fallbackText(formContent.selfSummary.heading, participationContent.form.selfSummary.heading)}

{[ @@ -514,8 +514,8 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd {step === 1 && data.type === 'vorschlag' && (
-

{fallbackText(formContent.nominationCompany.eyebrow, participationContent.form.nominationCompany.eyebrow)}

-

{fallbackText(formContent.nominationCompany.heading, participationContent.form.nominationCompany.heading)}

+

{fallbackText(formContent.nominationCompany.eyebrow, participationContent.form.nominationCompany.eyebrow)}

+

{fallbackText(formContent.nominationCompany.heading, participationContent.form.nominationCompany.heading)}

@@ -535,8 +535,8 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd {step === 2 && data.type === 'vorschlag' && (
-

{fallbackText(formContent.nominationContact.eyebrow, participationContent.form.nominationContact.eyebrow)}

-

{fallbackText(formContent.nominationContact.heading, participationContent.form.nominationContact.heading)}

+

{fallbackText(formContent.nominationContact.eyebrow, participationContent.form.nominationContact.eyebrow)}

+

{fallbackText(formContent.nominationContact.heading, participationContent.form.nominationContact.heading)}

@@ -549,7 +549,7 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd set('nomBeziehung', e.target.value)} placeholder={fallbackText(formContent.nominationContact.relationshipPlaceholder, participationContent.form.nominationContact.relationshipPlaceholder)} />
-

+

{fallbackText(formContent.nominationContact.footnote, participationContent.form.nominationContact.footnote)}

@@ -559,8 +559,8 @@ export default function BewerbungsForm({ theme = 'dark', content }: { theme?: 'd {step === 3 && data.type === 'vorschlag' && (
-

{fallbackText(formContent.nominationSummary.eyebrow, participationContent.form.nominationSummary.eyebrow)}

-

{fallbackText(formContent.nominationSummary.heading, participationContent.form.nominationSummary.heading)}

+

{fallbackText(formContent.nominationSummary.eyebrow, participationContent.form.nominationSummary.eyebrow)}

+

{fallbackText(formContent.nominationSummary.heading, participationContent.form.nominationSummary.heading)}

{[ diff --git a/src/spa/components/forms/KontaktForm.tsx b/src/spa/components/forms/KontaktForm.tsx index bc72258..b85b83c 100644 --- a/src/spa/components/forms/KontaktForm.tsx +++ b/src/spa/components/forms/KontaktForm.tsx @@ -264,10 +264,10 @@ export default function KontaktForm({ theme = 'dark', content }: { theme?: 'dark
-

+

{fallbackText(copy.success.heading, contactFormContent.success.heading)}

-

+

{fallbackText(copy.success.prefix, contactFormContent.success.prefix)} {data.name}. {fallbackText(copy.success.suffixBeforeEmail, contactFormContent.success.suffixBeforeEmail)}{' '} {data.email}.

@@ -326,7 +326,7 @@ export default function KontaktForm({ theme = 'dark', content }: { theme?: 'dark {step === 0 && (
-

{fallbackText(copy.prompts.subject, contactFormContent.prompts.subject)}

+

{fallbackText(copy.prompts.subject, contactFormContent.prompts.subject)}

{copy.subjects.map(item => ( { set('betreff', item.value); setDir(1); setStep(1); }} /> @@ -336,7 +336,7 @@ export default function KontaktForm({ theme = 'dark', content }: { theme?: 'dark {step === 1 && (
-

{fallbackText(copy.prompts.contact, contactFormContent.prompts.contact)}

+

{fallbackText(copy.prompts.contact, contactFormContent.prompts.contact)}

{([ { label: copy.fields.nameLabel, key: 'name' as const, type: 'text', placeholder: copy.fields.namePlaceholder, error: errors.name }, { label: copy.fields.emailLabel, key: 'email' as const, type: 'email', placeholder: copy.fields.emailPlaceholder, error: errors.email }, @@ -352,7 +352,7 @@ export default function KontaktForm({ theme = 'dark', content }: { theme?: 'dark {step === 2 && (
-

{fallbackText(copy.prompts.message, contactFormContent.prompts.message)}

+

{fallbackText(copy.prompts.message, contactFormContent.prompts.message)}

set('nachricht', e.target.value)} rows={5} placeholder={fallbackText(copy.fields.messagePlaceholder, contactFormContent.fields.messagePlaceholder)} /> @@ -405,7 +405,7 @@ export default function KontaktForm({ theme = 'dark', content }: { theme?: 'dark )}
)} - {submissionError &&

{submissionError}

} + {submissionError &&

{submissionError}

}
); } diff --git a/src/spa/components/forms/NewsletterInterestForm.tsx b/src/spa/components/forms/NewsletterInterestForm.tsx index a8d0002..6858eba 100644 --- a/src/spa/components/forms/NewsletterInterestForm.tsx +++ b/src/spa/components/forms/NewsletterInterestForm.tsx @@ -72,10 +72,10 @@ export function NewsletterInterestForm({
-

+

{copy.successHeading}

-

+

{copy.successBody}

@@ -95,7 +95,7 @@ export function NewsletterInterestForm({ minHeight: 0, }} > -

+

{copy.formBody}

-

+

{copy.privacy}

diff --git a/src/spa/components/forms/SponsoringForm.tsx b/src/spa/components/forms/SponsoringForm.tsx index 822b238..c6c2d95 100644 --- a/src/spa/components/forms/SponsoringForm.tsx +++ b/src/spa/components/forms/SponsoringForm.tsx @@ -212,10 +212,10 @@ export default function SponsoringForm({ theme = 'dark', content }: { theme?: 'd
-

+

{fallbackText(copy.successHeading, netzwerkContent.sponsoringForm.successHeading)}

-

+

{fallbackText(copy.successMessagePrefix, netzwerkContent.sponsoringForm.successMessagePrefix)} {data.kontakt}. {fallbackText(copy.successMessageSuffix, netzwerkContent.sponsoringForm.successMessageSuffix)}

@@ -261,8 +261,8 @@ export default function SponsoringForm({ theme = 'dark', content }: { theme?: 'd {step === 0 && (
-

{numberedStepLabel(copy.step2Eyebrow, netzwerkContent.sponsoringForm.step2Eyebrow, 1)}

-

{fallbackText(copy.step2Heading, netzwerkContent.sponsoringForm.step2Heading)}

+

{numberedStepLabel(copy.step2Eyebrow, netzwerkContent.sponsoringForm.step2Eyebrow, 1)}

+

{fallbackText(copy.step2Heading, netzwerkContent.sponsoringForm.step2Heading)}

set('unternehmen', e.target.value)} placeholder={fallbackText(copy.companyPlaceholder, netzwerkContent.sponsoringForm.companyPlaceholder)} /> @@ -276,8 +276,8 @@ export default function SponsoringForm({ theme = 'dark', content }: { theme?: 'd {step === 1 && (
-

{numberedStepLabel(copy.step3Eyebrow, netzwerkContent.sponsoringForm.step3Eyebrow, 2)}

-

{fallbackText(copy.step3Heading, netzwerkContent.sponsoringForm.step3Heading)}

+

{numberedStepLabel(copy.step3Eyebrow, netzwerkContent.sponsoringForm.step3Eyebrow, 2)}

+

{fallbackText(copy.step3Heading, netzwerkContent.sponsoringForm.step3Heading)}

set('kontakt', e.target.value)} placeholder={fallbackText(copy.contactPlaceholder, netzwerkContent.sponsoringForm.contactPlaceholder)} /> @@ -335,9 +335,9 @@ export default function SponsoringForm({ theme = 'dark', content }: { theme?: 'd )}
- {submissionError &&

{submissionError}

} + {submissionError &&

{submissionError}

} -

+

{fallbackText(copy.footerText, netzwerkContent.sponsoringForm.footerText)}

diff --git a/src/spa/components/layout/Layout.tsx b/src/spa/components/layout/Layout.tsx index 71fd593..773dd89 100644 --- a/src/spa/components/layout/Layout.tsx +++ b/src/spa/components/layout/Layout.tsx @@ -587,15 +587,9 @@ const Layout: React.FC = ({ children, header = defaultHeaderData, f position: 'relative', padding: isMobile ? '28px 24px 16px' : '36px 64px 0', }}> -

{footer.headlinePrefix} {footer.headlineAccent} {footer.headlineSuffix} @@ -663,11 +657,7 @@ const Layout: React.FC = ({ children, header = defaultHeaderData, f style={{ width: 140, height: 'auto', marginBottom: 10, opacity: 0.9 }} /> -

@@ -778,13 +768,7 @@ const Layout: React.FC = ({ children, header = defaultHeaderData, f {footer.linkColumns.map((column, index) => (

-

{column.label}

    @@ -864,13 +848,9 @@ const Layout: React.FC = ({ children, header = defaultHeaderData, f justifyContent: 'space-between', gap: isMobile ? 16 : 0, }}> -

    {footer.copyright} diff --git a/src/spa/components/legal/LegalPage.tsx b/src/spa/components/legal/LegalPage.tsx index 87bd14e..1a7c49e 100644 --- a/src/spa/components/legal/LegalPage.tsx +++ b/src/spa/components/legal/LegalPage.tsx @@ -66,19 +66,20 @@ export default function LegalPage({ content, cmsKey }: { content: LegalPageConte

    {fallbackText(hero.eyebrow, content.hero.eyebrow)}
    -

    +

    {fallbackText(hero.heading, content.hero.heading)}

-
+
{!isMobile && ( )} -
+
{sections.map((section) => (
{fallbackArray(section.items, []).filter(isLegalItem).map((item, index) => ( @@ -122,10 +123,6 @@ export default function LegalPage({ content, cmsKey }: { content: LegalPageConte } const body: React.CSSProperties = { - fontFamily: '"Inter", sans-serif', - fontSize: 15, - color: 'rgba(58,58,58,0.82)', - lineHeight: 1.85, margin: '0 0 16px', overflowWrap: 'anywhere', } @@ -134,7 +131,7 @@ function Section({ id, title, children }: { id: string; title: string; children: return (
-

+

{title}

@@ -151,7 +148,7 @@ function ContentItem({ item }: { item: LegalContentItem }) { return case 'list': return ( -
    +
      {item.items.map((entry, index) => (
    • {entry}
    • ))} @@ -179,15 +176,15 @@ function Paragraph({ item }: { item: Extract + return

      } function SubSection({ num, title, children }: { num: string; title: string; children: React.ReactNode }) { return (

      - {num}. -

      {title}

      + {num}. +

      {title}

      {children}
      @@ -197,7 +194,7 @@ function SubSection({ num, title, children }: { num: string; title: string; chil function AddressBlock({ lines }: { lines: string[] }) { const isMobile = useIsMobile() return ( -
      +
      {lines.map((line, index) => ( {line} @@ -212,7 +209,8 @@ function Legal({ html }: { html: string }) { const isMobile = useIsMobile() return (

      ) diff --git a/src/spa/components/membership/MembershipWizard.tsx b/src/spa/components/membership/MembershipWizard.tsx index 2ae7492..be7dfb3 100644 --- a/src/spa/components/membership/MembershipWizard.tsx +++ b/src/spa/components/membership/MembershipWizard.tsx @@ -604,22 +604,14 @@ function StepHeading({ step, total, title, subtitle, template }: { step: number; {template.replace('{step}', String(step)).replace('{total}', String(total))}

-

{title}

{subtitle && ( -

{subtitle}

@@ -1069,22 +1061,13 @@ function SuccessScreen({ copy }: { copy: WizardCopy }) {
-

{success.heading}

-

{success.message}

diff --git a/src/spa/pages/About.tsx b/src/spa/pages/About.tsx index 32d89cb..7987d76 100644 --- a/src/spa/pages/About.tsx +++ b/src/spa/pages/About.tsx @@ -118,7 +118,7 @@ const About: React.FC = () => { {fallbackText(hero.eyebrow, aboutContent.hero.eyebrow)}
-

+

{fallbackText(hero.heading, aboutContent.hero.heading).split('\n').map((line, index) => ( {index > 0 &&
} @@ -126,7 +126,7 @@ const About: React.FC = () => {
))}

-

+

{fallbackText(hero.description, aboutContent.hero.description)}

@@ -165,15 +165,15 @@ const About: React.FC = () => {
{!isMobile && ( <> - {fallbackText(prize.eyebrow, aboutContent.prize.eyebrow)} -

+ {fallbackText(prize.eyebrow, aboutContent.prize.eyebrow)} +

)}
{paragraphs(prize.body, aboutContent.prize.body).map((text, index, arr) => ( -

+

{text}

))} @@ -181,7 +181,7 @@ const About: React.FC = () => { {fallbackArray(prize.facts, aboutContent.prize.facts).map((f, i, arr) => (
{fallbackText(f.value, '')}
-
{fallbackText(f.label, '')}
+
{fallbackText(f.label, '')}
))}
@@ -200,7 +200,7 @@ const About: React.FC = () => { {isMobile && (
{fallbackText(prize.eyebrow, aboutContent.prize.eyebrow)} -

+

@@ -235,7 +235,7 @@ const About: React.FC = () => { {isMobile && (
{fallbackText(mittelstand.eyebrow, aboutContent.mittelstand.eyebrow)} -

+

@@ -246,14 +246,14 @@ const About: React.FC = () => { {!isMobile && ( <> {fallbackText(mittelstand.eyebrow, aboutContent.mittelstand.eyebrow)} -

+

)}
{paragraphs(mittelstand.body, aboutContent.mittelstand.body).map((text, index, arr) => ( -

+

{text}

))} @@ -271,7 +271,7 @@ const About: React.FC = () => { {!isMobile &&
{fallbackText(history.watermark, aboutContent.history.watermark)}
} {fallbackText(history.eyebrow, aboutContent.history.eyebrow)} -

+

{fallbackText(history.heading, aboutContent.history.heading).split('\n').map((line, index) => ( {index > 0 &&
} @@ -295,15 +295,15 @@ const About: React.FC = () => {

- {fallbackText(goals.eyebrow, aboutContent.goals.eyebrow)} -

+ {fallbackText(goals.eyebrow, aboutContent.goals.eyebrow)} +

{fallbackArray(goals.items, aboutContent.goals.items).map((item, i, arr) => (
- {fallbackText(item.num, '')} + {fallbackText(item.num, '')}
{fallbackText(item.title, '')}
{fallbackText(item.desc, '')}
@@ -319,12 +319,12 @@ const About: React.FC = () => {
- {fallbackText(values.eyebrow, aboutContent.values.eyebrow)} -

+ {fallbackText(values.eyebrow, aboutContent.values.eyebrow)} +

-

+

{fallbackText(values.description, aboutContent.values.description)}

@@ -346,10 +346,10 @@ const About: React.FC = () => { {fallbackText(cta.eyebrow, aboutContent.cta.eyebrow)}
-

+

-

+

{fallbackText(cta.description, aboutContent.cta.description)}

{fallbackText(item.num, '')}
-

{fallbackText(item.title, '')}

+

{fallbackText(item.title, '')}

) diff --git a/src/spa/pages/BlogDetail.tsx b/src/spa/pages/BlogDetail.tsx index 6d829d9..f94979a 100644 --- a/src/spa/pages/BlogDetail.tsx +++ b/src/spa/pages/BlogDetail.tsx @@ -96,7 +96,7 @@ export default function BlogDetail() { if (!article) { return (
-

{fallbackText(notFound.title, blogDetailContent.notFound.title)}

+

{fallbackText(notFound.title, blogDetailContent.notFound.title)}

{fallbackText(notFound.backLabel, blogDetailContent.notFound.backLabel)} @@ -155,16 +155,11 @@ export default function BlogDetail() {
-
+
{/* LEFT – article text */} -
+
{/* Lead */} -

@@ -214,18 +207,15 @@ export default function BlogDetail() { style={{ marginBottom: 48 }} > {section.heading && ( -

{section.heading}

)} -

{section.body}

@@ -249,7 +239,7 @@ export default function BlogDetail() {
{/* RIGHT – sticky sidebar */} -