refactor(ui): Kicker-Zeilen ueber Ueberschriften entfernt
Jede zweite Ueberschrift trug eine kleine Versalien-Zeile mit Wabenpunkt
("• STIMMEN", "• AKTUELL VERFUEGBAR", "• KUNDENKONTO" ...). Auf 29 Seiten
und Abschnitten wiederholt las sich das wie eine Vorlage. SectionHeading
rendert sie nicht mehr, die Prop ist entfernt; die Ueberschrift traegt den
Abschnitt allein.
Die eyebrow-Texte, die weiterhin als Seitentitel, Bildbeschriftung oder
Breadcrumb dienen, bleiben; 18 danach ungenutzte Eintraege sind aus Typ und
beiden Woerterbuechern entfernt.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
a4581d3467
commit
1fa8ca246a
33 files changed
+22
-107
No files matched your search
@@ -49,7 +49,7 @@ export default async function TrackOrderPage(props: PageProps<"/bestellung-verfo
|
|||||||
return (
|
return (
|
||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-xl">
|
<Container className="max-w-xl">
|
||||||
<SectionHeading eyebrow={t.trackOrderPage.eyebrow} title={t.trackOrderPage.title} />
|
<SectionHeading title={t.trackOrderPage.title} />
|
||||||
<p className="mt-4 text-ink/70 leading-relaxed">{t.trackOrderPage.intro}</p>
|
<p className="mt-4 text-ink/70 leading-relaxed">{t.trackOrderPage.intro}</p>
|
||||||
|
|
||||||
<FormPanel className="mt-8">
|
<FormPanel className="mt-8">
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ export default async function CheckoutCancelPage(props: PageProps<"/checkout/can
|
|||||||
<div className="py-24">
|
<div className="py-24">
|
||||||
<Container className="max-w-xl text-center">
|
<Container className="max-w-xl text-center">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.checkoutCancelPage.eyebrow}
|
|
||||||
title={t.checkoutCancelPage.title}
|
title={t.checkoutCancelPage.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ export function CheckoutForm({
|
|||||||
return (
|
return (
|
||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container>
|
<Container>
|
||||||
<SectionHeading eyebrow={t.checkoutPage.eyebrow} title={t.checkoutPage.emptyCart} />
|
<SectionHeading title={t.checkoutPage.emptyCart} />
|
||||||
</Container>
|
</Container>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -328,7 +328,7 @@ export function CheckoutForm({
|
|||||||
{/* Stripe zeigt im Zahlungsschritt selbst Positionen und Summe —
|
{/* Stripe zeigt im Zahlungsschritt selbst Positionen und Summe —
|
||||||
Formular und eigene Zusammenfassung treten dann zurueck. */}
|
Formular und eigene Zusammenfassung treten dann zurueck. */}
|
||||||
<form onSubmit={handleSubmit} hidden={payment !== null} className="lg:col-span-2 space-y-8">
|
<form onSubmit={handleSubmit} hidden={payment !== null} className="lg:col-span-2 space-y-8">
|
||||||
<SectionHeading eyebrow={t.checkoutPage.eyebrow} title={t.checkoutPage.yourDetails} />
|
<SectionHeading title={t.checkoutPage.yourDetails} />
|
||||||
|
|
||||||
<div className="grid sm:grid-cols-2 gap-4">
|
<div className="grid sm:grid-cols-2 gap-4">
|
||||||
<Field
|
<Field
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export default async function CheckoutSuccessPage(props: PageProps<"/checkout/su
|
|||||||
return (
|
return (
|
||||||
<div className="py-16">
|
<div className="py-16">
|
||||||
<Container className="max-w-3xl">
|
<Container className="max-w-3xl">
|
||||||
<SectionHeading eyebrow={t.checkoutSuccessPage.openEyebrow} title={t.checkoutSuccessPage.openTitle} />
|
<SectionHeading title={t.checkoutSuccessPage.openTitle} />
|
||||||
<p role="status" className="mt-4 mb-10 text-ink/70">
|
<p role="status" className="mt-4 mb-10 text-ink/70">
|
||||||
{t.checkoutSuccessPage.openText}
|
{t.checkoutSuccessPage.openText}
|
||||||
</p>
|
</p>
|
||||||
@@ -64,7 +64,6 @@ export default async function CheckoutSuccessPage(props: PageProps<"/checkout/su
|
|||||||
<div className="py-24">
|
<div className="py-24">
|
||||||
<Container className="max-w-xl text-center">
|
<Container className="max-w-xl text-center">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.checkoutSuccessPage.notCompletedEyebrow}
|
|
||||||
title={t.checkoutSuccessPage.notCompletedTitle}
|
title={t.checkoutSuccessPage.notCompletedTitle}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
@@ -88,7 +87,6 @@ export default async function CheckoutSuccessPage(props: PageProps<"/checkout/su
|
|||||||
<ClearCartOnMount />
|
<ClearCartOnMount />
|
||||||
<Container className="max-w-xl text-center">
|
<Container className="max-w-xl text-center">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={isPaid ? t.checkoutSuccessPage.successEyebrow : t.checkoutSuccessPage.pendingEyebrow}
|
|
||||||
title={isPaid ? t.checkoutSuccessPage.successTitle : t.checkoutSuccessPage.pendingTitle}
|
title={isPaid ? t.checkoutSuccessPage.successTitle : t.checkoutSuccessPage.pendingTitle}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export default async function ErntenPage() {
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container>
|
<Container>
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading level="h1" eyebrow={t.erntenPage.eyebrow} title={t.erntenPage.title} />
|
<SectionHeading level="h1" title={t.erntenPage.title} />
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|
||||||
<div className="mt-16 space-y-24">
|
<div className="mt-16 space-y-24">
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ export default function Error({ error, reset }: { error: Error & { digest?: stri
|
|||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.siteErrorPage.eyebrow}
|
|
||||||
title={t.siteErrorPage.title}
|
title={t.siteErrorPage.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ export default async function HerkunftPage() {
|
|||||||
<div className="max-w-3xl bg-background px-8 pt-10 pb-2 md:px-12 md:pt-12 shadow-[0_-20px_40px_-30px_rgba(36,53,43,0.35)]">
|
<div className="max-w-3xl bg-background px-8 pt-10 pb-2 md:px-12 md:pt-12 shadow-[0_-20px_40px_-30px_rgba(36,53,43,0.35)]">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
level="h1"
|
level="h1"
|
||||||
eyebrow={t.herkunftPage.eyebrow}
|
|
||||||
title={t.herkunftPage.title}
|
title={t.herkunftPage.title}
|
||||||
subtitle={t.herkunftPage.subtitle}
|
subtitle={t.herkunftPage.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ export default async function ImkereiPage() {
|
|||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
level="h1"
|
level="h1"
|
||||||
eyebrow={t.imkereiPage.eyebrow}
|
|
||||||
title={t.imkereiPage.title}
|
title={t.imkereiPage.title}
|
||||||
/>
|
/>
|
||||||
<div className="mt-8 max-w-[62ch] space-y-5 text-ink/75 leading-relaxed">
|
<div className="mt-8 max-w-[62ch] space-y-5 text-ink/75 leading-relaxed">
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export default async function KontaktPage() {
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-5xl">
|
<Container className="max-w-5xl">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading level="h1" eyebrow={t.kontaktPage.eyebrow} title={t.kontaktPage.title} />
|
<SectionHeading level="h1" title={t.kontaktPage.title} />
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|
||||||
<div className="mt-12 grid gap-6 md:grid-cols-5">
|
<div className="mt-12 grid gap-6 md:grid-cols-5">
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export default async function KontoAdressenPage() {
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-3xl">
|
<Container className="max-w-3xl">
|
||||||
<BackLink href="/konto" label={t.ordersPage.backToAccount} />
|
<BackLink href="/konto" label={t.ordersPage.backToAccount} />
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.addressesPage.title} />
|
<SectionHeading title={t.addressesPage.title} />
|
||||||
|
|
||||||
|
|
||||||
<div className="mt-10 grid gap-4 sm:grid-cols-2">
|
<div className="mt-10 grid gap-4 sm:grid-cols-2">
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export default async function RetourePage(props: PageProps<"/konto/bestellungen/
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-lg">
|
<Container className="max-w-lg">
|
||||||
<BackLink href="/konto/bestellungen" label={t.retourePage.backLabel} />
|
<BackLink href="/konto/bestellungen" label={t.retourePage.backLabel} />
|
||||||
<SectionHeading eyebrow={t.retourePage.orderEyebrow(order.orderNumber)} title={t.retourePage.title} />
|
<SectionHeading title={t.retourePage.title} />
|
||||||
|
|
||||||
<FormPanel className="mt-8">
|
<FormPanel className="mt-8">
|
||||||
<ul className="divide-y divide-ink/10 border-y border-ink/10 text-sm text-ink/75">
|
<ul className="divide-y divide-ink/10 border-y border-ink/10 text-sm text-ink/75">
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export default async function KontoBestellungenPage() {
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-3xl">
|
<Container className="max-w-3xl">
|
||||||
<BackLink href="/konto" label={t.ordersPage.backToAccount} />
|
<BackLink href="/konto" label={t.ordersPage.backToAccount} />
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.ordersPage.title} />
|
<SectionHeading title={t.ordersPage.title} />
|
||||||
|
|
||||||
|
|
||||||
{orders.length === 0 ? (
|
{orders.length === 0 ? (
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default async function KontoPage() {
|
|||||||
return (
|
return (
|
||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-3xl">
|
<Container className="max-w-3xl">
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.account.loginRegisterTitle} />
|
<SectionHeading title={t.account.loginRegisterTitle} />
|
||||||
<div className="mt-10 grid md:grid-cols-2 md:divide-x md:divide-ink/10 gap-12 md:gap-0">
|
<div className="mt-10 grid md:grid-cols-2 md:divide-x md:divide-ink/10 gap-12 md:gap-0">
|
||||||
<form action={loginAction} className="space-y-4 md:pr-12">
|
<form action={loginAction} className="space-y-4 md:pr-12">
|
||||||
<h2 className="text-3xl text-forest">{t.account.login}</h2>
|
<h2 className="text-3xl text-forest">{t.account.login}</h2>
|
||||||
@@ -121,7 +121,7 @@ export default async function KontoPage() {
|
|||||||
return (
|
return (
|
||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-2xl">
|
<Container className="max-w-2xl">
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.account.greeting(customer.firstName)} />
|
<SectionHeading title={t.account.greeting(customer.firstName)} />
|
||||||
|
|
||||||
|
|
||||||
{!customer.emailVerifiedAt ? (
|
{!customer.emailVerifiedAt ? (
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default async function PasswortVergessenPage(props: PageProps<"/konto/pas
|
|||||||
<Container className="max-w-lg">
|
<Container className="max-w-lg">
|
||||||
<FormPanel>
|
<FormPanel>
|
||||||
<BackLink href="/konto" label={t.passwortVergessenPage.backLabel} />
|
<BackLink href="/konto" label={t.passwortVergessenPage.backLabel} />
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.passwortVergessenPage.title} />
|
<SectionHeading title={t.passwortVergessenPage.title} />
|
||||||
|
|
||||||
|
|
||||||
{sent ? (
|
{sent ? (
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export default async function PasswortZuruecksetzenPage(
|
|||||||
<Container className="max-w-lg">
|
<Container className="max-w-lg">
|
||||||
<FormPanel>
|
<FormPanel>
|
||||||
<BackLink href="/konto" label={t.passwortZuruecksetzenPage.backLabel} />
|
<BackLink href="/konto" label={t.passwortZuruecksetzenPage.backLabel} />
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.passwortZuruecksetzenPage.title} />
|
<SectionHeading title={t.passwortZuruecksetzenPage.title} />
|
||||||
|
|
||||||
|
|
||||||
{!token ? (
|
{!token ? (
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export default async function KontoWunschlistePage() {
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container>
|
<Container>
|
||||||
<BackLink href="/konto" label={t.ordersPage.backToAccount} />
|
<BackLink href="/konto" label={t.ordersPage.backToAccount} />
|
||||||
<SectionHeading eyebrow={t.account.eyebrow} title={t.wishlistPage.title} />
|
<SectionHeading title={t.wishlistPage.title} />
|
||||||
|
|
||||||
{products.length === 0 ? (
|
{products.length === 0 ? (
|
||||||
<AccountEmptyState
|
<AccountEmptyState
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ export default async function ZweiFaktorCodePage() {
|
|||||||
<FormPanel>
|
<FormPanel>
|
||||||
<BackLink href="/konto" label={t.twoFactorCodePage.cancelLabel} />
|
<BackLink href="/konto" label={t.twoFactorCodePage.cancelLabel} />
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.twoFactorCodePage.eyebrow}
|
|
||||||
title={t.twoFactorCodePage.title}
|
title={t.twoFactorCodePage.title}
|
||||||
subtitle={t.twoFactorCodePage.subtitle}
|
subtitle={t.twoFactorCodePage.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ export default async function ZweiFaktorBackupCodesPage() {
|
|||||||
<Container className="max-w-lg">
|
<Container className="max-w-lg">
|
||||||
<FormPanel>
|
<FormPanel>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.twoFactorBackupCodesPage.eyebrow}
|
|
||||||
title={t.twoFactorBackupCodesPage.title}
|
title={t.twoFactorBackupCodesPage.title}
|
||||||
subtitle={t.twoFactorBackupCodesPage.subtitle}
|
subtitle={t.twoFactorBackupCodesPage.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ export default async function ZweiFaktorEinrichtenPage() {
|
|||||||
<FormPanel>
|
<FormPanel>
|
||||||
<BackLink href="/konto/zwei-faktor" label={t.twoFactorSetupPage.backLabel} />
|
<BackLink href="/konto/zwei-faktor" label={t.twoFactorSetupPage.backLabel} />
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.twoFactorSetupPage.eyebrow}
|
|
||||||
title={t.twoFactorSetupPage.title}
|
title={t.twoFactorSetupPage.title}
|
||||||
subtitle={t.twoFactorSetupPage.subtitle}
|
subtitle={t.twoFactorSetupPage.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ export default async function ZweiFaktorPage() {
|
|||||||
<FormPanel>
|
<FormPanel>
|
||||||
<BackLink href="/konto" label={t.twoFactorPage.backLabel} />
|
<BackLink href="/konto" label={t.twoFactorPage.backLabel} />
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.twoFactorPage.eyebrow}
|
|
||||||
title={t.twoFactorPage.title}
|
title={t.twoFactorPage.title}
|
||||||
subtitle={t.twoFactorPage.subtitle}
|
subtitle={t.twoFactorPage.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ export default async function NewsletterBestaetigtPage(props: PageProps<"/newsle
|
|||||||
<div className="py-24">
|
<div className="py-24">
|
||||||
<Container className="max-w-xl text-center">
|
<Container className="max-w-xl text-center">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.newsletterBestaetigtPage.eyebrow}
|
|
||||||
title={title}
|
title={title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ export default async function NotFound() {
|
|||||||
})}
|
})}
|
||||||
</svg>
|
</svg>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.notFoundPage.eyebrow}
|
|
||||||
title={t.notFoundPage.title}
|
title={t.notFoundPage.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ export default async function ShopPage(props: PageProps<"/shop">) {
|
|||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
level="h1"
|
level="h1"
|
||||||
eyebrow={t.shop.eyebrow}
|
|
||||||
title={t.shop.title}
|
title={t.shop.title}
|
||||||
subtitle={t.shop.subtitle}
|
subtitle={t.shop.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ export default async function UnternehmenPage() {
|
|||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
level="h1"
|
level="h1"
|
||||||
eyebrow={t.unternehmenPage.eyebrow}
|
|
||||||
title={t.unternehmenPage.title}
|
title={t.unternehmenPage.title}
|
||||||
subtitle={t.unternehmenPage.subtitle}
|
subtitle={t.unternehmenPage.subtitle}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ export function WarenkorbContent({
|
|||||||
return (
|
return (
|
||||||
<div className="py-16">
|
<div className="py-16">
|
||||||
<Container>
|
<Container>
|
||||||
<SectionHeading eyebrow={t.cart.title} title={t.cartPage.title} />
|
<SectionHeading title={t.cartPage.title} />
|
||||||
|
|
||||||
{items.length === 0 ? (
|
{items.length === 0 ? (
|
||||||
<div className="mt-14">
|
<div className="mt-14">
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export default async function WissenPage() {
|
|||||||
<div className="py-20">
|
<div className="py-20">
|
||||||
<Container className="max-w-3xl">
|
<Container className="max-w-3xl">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading level="h1" eyebrow={t.wissenListPage.eyebrow} title={t.wissenListPage.title} />
|
<SectionHeading level="h1" title={t.wissenListPage.title} />
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
<div className="mt-14 divide-y divide-ink/10 border-y border-ink/10">
|
<div className="mt-14 divide-y divide-ink/10 border-y border-ink/10">
|
||||||
{wissenSlugs.map((slug, i) => {
|
{wissenSlugs.map((slug, i) => {
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ export async function CurrentHarvest({
|
|||||||
<Container>
|
<Container>
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.currentHarvest.eyebrow}
|
|
||||||
title={t.home.currentHarvest.title}
|
title={t.home.currentHarvest.title}
|
||||||
subtitle={t.home.currentHarvest.subtitle}
|
subtitle={t.home.currentHarvest.subtitle}
|
||||||
/>
|
/>
|
||||||
@@ -72,7 +71,6 @@ export async function OriginStory() {
|
|||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
<ScrollReveal delay={0.1}>
|
<ScrollReveal delay={0.1}>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.originStory.eyebrow}
|
|
||||||
title={t.home.originStory.title}
|
title={t.home.originStory.title}
|
||||||
/>
|
/>
|
||||||
<p className="mt-6 text-ink/75 leading-relaxed">{content["home.originStory.paragraph1"]}</p>
|
<p className="mt-6 text-ink/75 leading-relaxed">{content["home.originStory.paragraph1"]}</p>
|
||||||
@@ -104,7 +102,6 @@ export async function Philosophy() {
|
|||||||
<Container>
|
<Container>
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.philosophy.eyebrow}
|
|
||||||
title={t.home.philosophy.title}
|
title={t.home.philosophy.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ export async function ProcessTimeline() {
|
|||||||
<Container>
|
<Container>
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.processTimeline.eyebrow}
|
|
||||||
title={t.home.processTimeline.title}
|
title={t.home.processTimeline.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
@@ -47,7 +46,6 @@ export async function RegionalSection() {
|
|||||||
<Container className="grid md:grid-cols-2 gap-16 lg:gap-24 items-center">
|
<Container className="grid md:grid-cols-2 gap-16 lg:gap-24 items-center">
|
||||||
<ScrollReveal className="order-2 md:order-1">
|
<ScrollReveal className="order-2 md:order-1">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.regionalSection.eyebrow}
|
|
||||||
title={t.home.regionalSection.title}
|
title={t.home.regionalSection.title}
|
||||||
/>
|
/>
|
||||||
<p className="mt-6 text-ink/75 leading-relaxed">{content["home.regionalSection.paragraph1"]}</p>
|
<p className="mt-6 text-ink/75 leading-relaxed">{content["home.regionalSection.paragraph1"]}</p>
|
||||||
@@ -90,7 +88,7 @@ export async function Sustainability() {
|
|||||||
<Container className="grid gap-12 lg:grid-cols-12 lg:gap-16">
|
<Container className="grid gap-12 lg:grid-cols-12 lg:gap-16">
|
||||||
<ScrollReveal className="lg:col-span-5">
|
<ScrollReveal className="lg:col-span-5">
|
||||||
<div className="lg:sticky lg:top-32">
|
<div className="lg:sticky lg:top-32">
|
||||||
<SectionHeading eyebrow={t.home.sustainability.eyebrow} title={t.home.sustainability.title} />
|
<SectionHeading title={t.home.sustainability.title} />
|
||||||
</div>
|
</div>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
<ul className="divide-y divide-ink/10 border-y border-ink/10 lg:col-span-7">
|
<ul className="divide-y divide-ink/10 border-y border-ink/10 lg:col-span-7">
|
||||||
@@ -137,7 +135,6 @@ export async function BusinessTeaser() {
|
|||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
<ScrollReveal delay={0.1}>
|
<ScrollReveal delay={0.1}>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.businessTeaser.eyebrow}
|
|
||||||
title={t.home.businessTeaser.title}
|
title={t.home.businessTeaser.title}
|
||||||
/>
|
/>
|
||||||
<p className="mt-6 text-ink/75 leading-relaxed">{content["home.businessTeaser.paragraph"]}</p>
|
<p className="mt-6 text-ink/75 leading-relaxed">{content["home.businessTeaser.paragraph"]}</p>
|
||||||
@@ -174,7 +171,6 @@ export async function Reviews() {
|
|||||||
<Container className="relative">
|
<Container className="relative">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.reviews.eyebrow}
|
|
||||||
title={t.home.reviews.title}
|
title={t.home.reviews.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ export function NewsletterSignup({ turnstileSiteKey }: { turnstileSiteKey?: stri
|
|||||||
<HoneycombPattern className="text-honey/25" size={24} />
|
<HoneycombPattern className="text-honey/25" size={24} />
|
||||||
<div className="relative mx-auto max-w-2xl">
|
<div className="relative mx-auto max-w-2xl">
|
||||||
<SectionHeading
|
<SectionHeading
|
||||||
eyebrow={t.home.newsletter.eyebrow}
|
|
||||||
title={t.home.newsletter.title}
|
title={t.home.newsletter.title}
|
||||||
align="center"
|
align="center"
|
||||||
className="mx-auto"
|
className="mx-auto"
|
||||||
|
|||||||
+5
-14
@@ -1,6 +1,6 @@
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import type { ComponentPropsWithoutRef, ReactNode } from "react";
|
import type { ComponentPropsWithoutRef, ReactNode } from "react";
|
||||||
import { HexMark, HoneycombPattern } from "@/components/honeycomb";
|
import { HoneycombPattern } from "@/components/honeycomb";
|
||||||
|
|
||||||
export function Container({
|
export function Container({
|
||||||
id,
|
id,
|
||||||
@@ -82,7 +82,6 @@ export function Button({
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function SectionHeading({
|
export function SectionHeading({
|
||||||
eyebrow,
|
|
||||||
title,
|
title,
|
||||||
subtitle,
|
subtitle,
|
||||||
align = "left",
|
align = "left",
|
||||||
@@ -90,14 +89,13 @@ export function SectionHeading({
|
|||||||
level = "h2",
|
level = "h2",
|
||||||
tone = "default",
|
tone = "default",
|
||||||
}: {
|
}: {
|
||||||
eyebrow?: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle?: string;
|
subtitle?: string;
|
||||||
align?: "left" | "center";
|
align?: "left" | "center";
|
||||||
className?: string;
|
className?: string;
|
||||||
/** "h1" fuer Seiten, auf denen diese Komponente die einzige/primaere Ueberschrift ist (SEO-Heading-Hierarchie). Default h2, da die meisten Verwendungen einzelne Abschnitte innerhalb einer Seite mit eigenem h1 sind. */
|
/** "h1" fuer Seiten, auf denen diese Komponente die einzige/primaere Ueberschrift ist (SEO-Heading-Hierarchie). Default h2, da die meisten Verwendungen einzelne Abschnitte innerhalb einer Seite mit eigenem h1 sind. */
|
||||||
level?: "h1" | "h2";
|
level?: "h1" | "h2";
|
||||||
/** "inverted" fuer Abschnitte auf dunklem Grund (z.B. bg-forest) — steuert die Eyebrow-Farbe fuer ausreichenden Kontrast. */
|
/** "inverted" fuer Abschnitte auf dunklem Grund (z.B. bg-forest) — helle Ueberschrift und Untertitel. */
|
||||||
tone?: "default" | "inverted";
|
tone?: "default" | "inverted";
|
||||||
}) {
|
}) {
|
||||||
const Heading = level;
|
const Heading = level;
|
||||||
@@ -105,16 +103,9 @@ export function SectionHeading({
|
|||||||
<div
|
<div
|
||||||
className={`${align === "center" ? "text-center mx-auto" : "text-left"} max-w-2xl ${className}`}
|
className={`${align === "center" ? "text-center mx-auto" : "text-left"} max-w-2xl ${className}`}
|
||||||
>
|
>
|
||||||
{eyebrow ? (
|
{/* Bewusst ohne Kicker-Zeile ("• STIMMEN") ueber der Ueberschrift: auf
|
||||||
<p
|
jeder Ueberschrift wiederholt wirkte das wie eine Vorlage. Die
|
||||||
className={`flex items-center gap-2 tracking-wide-caps text-xs mb-4 ${
|
Ueberschrift traegt den Abschnitt allein. */}
|
||||||
align === "center" ? "justify-center" : ""
|
|
||||||
} ${tone === "inverted" ? "text-honey-light" : "text-honey-dark"}`}
|
|
||||||
>
|
|
||||||
<HexMark className="h-2.5 w-2.5 flex-shrink-0" />
|
|
||||||
{eyebrow}
|
|
||||||
</p>
|
|
||||||
) : null}
|
|
||||||
<Heading
|
<Heading
|
||||||
className={`text-4xl md:text-5xl leading-[1.05] tracking-[-0.01em] ${
|
className={`text-4xl md:text-5xl leading-[1.05] tracking-[-0.01em] ${
|
||||||
tone === "inverted" ? "text-cream" : "text-forest"
|
tone === "inverted" ? "text-cream" : "text-forest"
|
||||||
|
|||||||
@@ -156,14 +156,12 @@ export const de: Dictionary = {
|
|||||||
reviewNotice: "",
|
reviewNotice: "",
|
||||||
},
|
},
|
||||||
notFoundPage: {
|
notFoundPage: {
|
||||||
eyebrow: "404",
|
|
||||||
title: "Diese Seite gibt es nicht, zumindest nicht mehr.",
|
title: "Diese Seite gibt es nicht, zumindest nicht mehr.",
|
||||||
text: "Der Link ist vielleicht veraltet, oder die Seite wurde verschoben. Schau dich im Shop um oder geh zurück zur Startseite.",
|
text: "Der Link ist vielleicht veraltet, oder die Seite wurde verschoben. Schau dich im Shop um oder geh zurück zur Startseite.",
|
||||||
backToShop: "Zum Shop",
|
backToShop: "Zum Shop",
|
||||||
backToHome: "Zur Startseite",
|
backToHome: "Zur Startseite",
|
||||||
},
|
},
|
||||||
siteErrorPage: {
|
siteErrorPage: {
|
||||||
eyebrow: "Fehler",
|
|
||||||
title: "Da ist etwas schiefgelaufen.",
|
title: "Da ist etwas schiefgelaufen.",
|
||||||
text: "Das war ein technischer Fehler auf unserer Seite, nicht deine Schuld. Versuch es noch einmal, oder komm später wieder vorbei.",
|
text: "Das war ein technischer Fehler auf unserer Seite, nicht deine Schuld. Versuch es noch einmal, oder komm später wieder vorbei.",
|
||||||
retry: "Erneut versuchen",
|
retry: "Erneut versuchen",
|
||||||
@@ -585,7 +583,6 @@ export const de: Dictionary = {
|
|||||||
"Nach Absprache kannst du deine Bestellung direkt bei uns in Altenmünster abholen. Wähle dazu im Checkout einfach „Abholung“ aus. Wir melden uns anschließend mit einem Abholtermin.",
|
"Nach Absprache kannst du deine Bestellung direkt bei uns in Altenmünster abholen. Wähle dazu im Checkout einfach „Abholung“ aus. Wir melden uns anschließend mit einem Abholtermin.",
|
||||||
},
|
},
|
||||||
twoFactorPage: {
|
twoFactorPage: {
|
||||||
eyebrow: "Sicherheit",
|
|
||||||
title: "Zwei-Faktor-Authentifizierung",
|
title: "Zwei-Faktor-Authentifizierung",
|
||||||
subtitle: "Schützt dein Konto zusätzlich zum Passwort mit einem Code aus einer Authenticator-App.",
|
subtitle: "Schützt dein Konto zusätzlich zum Passwort mit einem Code aus einer Authenticator-App.",
|
||||||
backLabel: "Zurück zur Übersicht",
|
backLabel: "Zurück zur Übersicht",
|
||||||
@@ -601,7 +598,6 @@ export const de: Dictionary = {
|
|||||||
emptyDescription: "Auf jeder Produktseite kannst du sie über „Zur Wunschliste hinzufügen“ speichern.",
|
emptyDescription: "Auf jeder Produktseite kannst du sie über „Zur Wunschliste hinzufügen“ speichern.",
|
||||||
},
|
},
|
||||||
twoFactorCodePage: {
|
twoFactorCodePage: {
|
||||||
eyebrow: "Kundenkonto",
|
|
||||||
title: "Anmeldung bestätigen",
|
title: "Anmeldung bestätigen",
|
||||||
subtitle: "Gib den 6-stelligen Code aus deiner Authenticator-App ein, oder verwende einen deiner Backup-Codes.",
|
subtitle: "Gib den 6-stelligen Code aus deiner Authenticator-App ein, oder verwende einen deiner Backup-Codes.",
|
||||||
cancelLabel: "Anmeldung abbrechen",
|
cancelLabel: "Anmeldung abbrechen",
|
||||||
@@ -609,7 +605,6 @@ export const de: Dictionary = {
|
|||||||
confirm: "Bestätigen",
|
confirm: "Bestätigen",
|
||||||
},
|
},
|
||||||
twoFactorBackupCodesPage: {
|
twoFactorBackupCodesPage: {
|
||||||
eyebrow: "Sicherheit",
|
|
||||||
title: "Deine Backup-Codes",
|
title: "Deine Backup-Codes",
|
||||||
subtitle:
|
subtitle:
|
||||||
"Jeder Code funktioniert einmalig, falls du keinen Zugriff auf deine Authenticator-App hast. Speichere sie an einem sicheren Ort. Sie werden dir nur jetzt angezeigt.",
|
"Jeder Code funktioniert einmalig, falls du keinen Zugriff auf deine Authenticator-App hast. Speichere sie an einem sicheren Ort. Sie werden dir nur jetzt angezeigt.",
|
||||||
@@ -617,7 +612,6 @@ export const de: Dictionary = {
|
|||||||
done: "Fertig",
|
done: "Fertig",
|
||||||
},
|
},
|
||||||
twoFactorSetupPage: {
|
twoFactorSetupPage: {
|
||||||
eyebrow: "Sicherheit",
|
|
||||||
title: "Zwei-Faktor-Authentifizierung einrichten",
|
title: "Zwei-Faktor-Authentifizierung einrichten",
|
||||||
subtitle:
|
subtitle:
|
||||||
"Scanne den QR-Code mit einer Authenticator-App (z. B. Google Authenticator, Authy) und bestätige mit dem angezeigten Code.",
|
"Scanne den QR-Code mit einer Authenticator-App (z. B. Google Authenticator, Authy) und bestätige mit dem angezeigten Code.",
|
||||||
@@ -636,7 +630,6 @@ export const de: Dictionary = {
|
|||||||
submit: "Anfrage senden",
|
submit: "Anfrage senden",
|
||||||
},
|
},
|
||||||
erntenPage: {
|
erntenPage: {
|
||||||
eyebrow: "Ernten",
|
|
||||||
title: "Kein Jahr schmeckt gleich.",
|
title: "Kein Jahr schmeckt gleich.",
|
||||||
batchCount: (count) => `${count} Charge${count === 1 ? "" : "n"}`,
|
batchCount: (count) => `${count} Charge${count === 1 ? "" : "n"}`,
|
||||||
emptyText: "Noch keine Ernten hinterlegt.",
|
emptyText: "Noch keine Ernten hinterlegt.",
|
||||||
@@ -657,7 +650,6 @@ export const de: Dictionary = {
|
|||||||
fromThisBatch: "Aus dieser Charge",
|
fromThisBatch: "Aus dieser Charge",
|
||||||
},
|
},
|
||||||
newsletterBestaetigtPage: {
|
newsletterBestaetigtPage: {
|
||||||
eyebrow: "Erntepost",
|
|
||||||
confirmedTitle: "Anmeldung bestätigt.",
|
confirmedTitle: "Anmeldung bestätigt.",
|
||||||
invalidTitle: "Link nicht mehr gültig.",
|
invalidTitle: "Link nicht mehr gültig.",
|
||||||
unsubscribedTitle: "Abmeldung erfolgreich.",
|
unsubscribedTitle: "Abmeldung erfolgreich.",
|
||||||
@@ -902,7 +894,6 @@ export const de: Dictionary = {
|
|||||||
save: "Speichern",
|
save: "Speichern",
|
||||||
},
|
},
|
||||||
trackOrderPage: {
|
trackOrderPage: {
|
||||||
eyebrow: "Bestellung verfolgen",
|
|
||||||
title: "Wo ist meine Bestellung?",
|
title: "Wo ist meine Bestellung?",
|
||||||
intro: "Gib deine Bestellnummer und die bei der Bestellung verwendete E-Mail-Adresse ein, um den aktuellen Status zu sehen, auch ohne Kundenkonto.",
|
intro: "Gib deine Bestellnummer und die bei der Bestellung verwendete E-Mail-Adresse ein, um den aktuellen Status zu sehen, auch ohne Kundenkonto.",
|
||||||
orderNumberLabel: "Bestellnummer",
|
orderNumberLabel: "Bestellnummer",
|
||||||
@@ -1402,7 +1393,6 @@ export const de: Dictionary = {
|
|||||||
save: "Adresse speichern",
|
save: "Adresse speichern",
|
||||||
},
|
},
|
||||||
account: {
|
account: {
|
||||||
eyebrow: "Kundenkonto",
|
|
||||||
loginRegisterTitle: "Anmelden oder Konto erstellen",
|
loginRegisterTitle: "Anmelden oder Konto erstellen",
|
||||||
login: "Anmelden",
|
login: "Anmelden",
|
||||||
register: "Konto erstellen",
|
register: "Konto erstellen",
|
||||||
@@ -1491,7 +1481,6 @@ export const de: Dictionary = {
|
|||||||
backToCart: "Zurück zum Warenkorb",
|
backToCart: "Zurück zum Warenkorb",
|
||||||
},
|
},
|
||||||
checkoutCancelPage: {
|
checkoutCancelPage: {
|
||||||
eyebrow: "Abgebrochen",
|
|
||||||
title: "Deine Bestellung wurde nicht abgeschlossen.",
|
title: "Deine Bestellung wurde nicht abgeschlossen.",
|
||||||
text: "Kein Problem, dein Warenkorb ist noch gefüllt. Du kannst den Bestellvorgang jederzeit erneut starten.",
|
text: "Kein Problem, dein Warenkorb ist noch gefüllt. Du kannst den Bestellvorgang jederzeit erneut starten.",
|
||||||
released: "Die für dich zurückgelegte Ware steht wieder im Shop zur Verfügung.",
|
released: "Die für dich zurückgelegte Ware steht wieder im Shop zur Verfügung.",
|
||||||
@@ -1644,7 +1633,6 @@ export const de: Dictionary = {
|
|||||||
starLabel: (value) => `${value} ${value === 1 ? "Stern" : "Sterne"}`,
|
starLabel: (value) => `${value} ${value === 1 ? "Stern" : "Sterne"}`,
|
||||||
},
|
},
|
||||||
shop: {
|
shop: {
|
||||||
eyebrow: "Shop",
|
|
||||||
title: "Unser Sortiment",
|
title: "Unser Sortiment",
|
||||||
subtitle: "Honig, Bienenwachskerzen und Propolis aus eigener Imkerei, solange der jeweilige Bestand reicht.",
|
subtitle: "Honig, Bienenwachskerzen und Propolis aus eigener Imkerei, solange der jeweilige Bestand reicht.",
|
||||||
allCategories: "Alle",
|
allCategories: "Alle",
|
||||||
@@ -1670,7 +1658,6 @@ export const de: Dictionary = {
|
|||||||
footnote: "Geerntet · abgefüllt · versendet aus eigener Imkerei",
|
footnote: "Geerntet · abgefüllt · versendet aus eigener Imkerei",
|
||||||
},
|
},
|
||||||
currentHarvest: {
|
currentHarvest: {
|
||||||
eyebrow: "Aktuell verfügbar",
|
|
||||||
title: "Die aktuelle Ernte",
|
title: "Die aktuelle Ernte",
|
||||||
subtitle: "Kleine, dokumentierte Chargen, solange der Vorrat reicht.",
|
subtitle: "Kleine, dokumentierte Chargen, solange der Vorrat reicht.",
|
||||||
},
|
},
|
||||||
@@ -1685,7 +1672,6 @@ export const de: Dictionary = {
|
|||||||
cta: "Mehr über die Herkunft",
|
cta: "Mehr über die Herkunft",
|
||||||
},
|
},
|
||||||
philosophy: {
|
philosophy: {
|
||||||
eyebrow: "Philosophie",
|
|
||||||
title: "Die Wabenhain-Philosophie",
|
title: "Die Wabenhain-Philosophie",
|
||||||
items: [
|
items: [
|
||||||
{ title: "Eigene Ernte", text: "Unser Honig stammt aus unseren eigenen Bienenvölkern." },
|
{ title: "Eigene Ernte", text: "Unser Honig stammt aus unseren eigenen Bienenvölkern." },
|
||||||
@@ -1704,7 +1690,6 @@ export const de: Dictionary = {
|
|||||||
cta: "Ernte entdecken",
|
cta: "Ernte entdecken",
|
||||||
},
|
},
|
||||||
processTimeline: {
|
processTimeline: {
|
||||||
eyebrow: "Vom Bienenvolk zum Glas",
|
|
||||||
title: "Sechs Schritte bis zu deinem Honig",
|
title: "Sechs Schritte bis zu deinem Honig",
|
||||||
steps: [
|
steps: [
|
||||||
{ number: "01", title: "Blüte", text: "Die Bienen sammeln Nektar aus der Umgebung." },
|
{ number: "01", title: "Blüte", text: "Die Bienen sammeln Nektar aus der Umgebung." },
|
||||||
@@ -1725,7 +1710,6 @@ export const de: Dictionary = {
|
|||||||
ctaPickup: "Honig vor Ort abholen",
|
ctaPickup: "Honig vor Ort abholen",
|
||||||
},
|
},
|
||||||
sustainability: {
|
sustainability: {
|
||||||
eyebrow: "Verantwortung",
|
|
||||||
title: "Verantwortung beginnt im Kleinen.",
|
title: "Verantwortung beginnt im Kleinen.",
|
||||||
items: [
|
items: [
|
||||||
{ title: "Wiederverwendbare Gläser", text: "Saubere Wabenhain-Gläser können bei uns zurückgegeben werden." },
|
{ title: "Wiederverwendbare Gläser", text: "Saubere Wabenhain-Gläser können bei uns zurückgegeben werden." },
|
||||||
@@ -1741,7 +1725,6 @@ export const de: Dictionary = {
|
|||||||
cta: "Firmengeschenke anfragen",
|
cta: "Firmengeschenke anfragen",
|
||||||
},
|
},
|
||||||
reviews: {
|
reviews: {
|
||||||
eyebrow: "Stimmen",
|
|
||||||
title: "Was unsere Kund:innen sagen",
|
title: "Was unsere Kund:innen sagen",
|
||||||
googleReviewsCount: (rating, count) => `${rating} ★ · ${count} Google-Rezensionen`,
|
googleReviewsCount: (rating, count) => `${rating} ★ · ${count} Google-Rezensionen`,
|
||||||
seeAllOnGoogle: "Alle Bewertungen auf Google ansehen →",
|
seeAllOnGoogle: "Alle Bewertungen auf Google ansehen →",
|
||||||
@@ -1759,7 +1742,6 @@ export const de: Dictionary = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
newsletter: {
|
newsletter: {
|
||||||
eyebrow: "Erntepost",
|
|
||||||
title: "Erfahre als Erstes von der nächsten Ernte.",
|
title: "Erfahre als Erstes von der nächsten Ernte.",
|
||||||
description:
|
description:
|
||||||
"Neue Ernten gibt es nur einige Male im Jahr. Mit unserer Erntepost erfährst du, sobald neuer Honig verfügbar ist.",
|
"Neue Ernten gibt es nur einige Male im Jahr. Mit unserer Erntepost erfährst du, sobald neuer Honig verfügbar ist.",
|
||||||
|
|||||||
@@ -156,14 +156,12 @@ export const en: Dictionary = {
|
|||||||
reviewNotice: "",
|
reviewNotice: "",
|
||||||
},
|
},
|
||||||
notFoundPage: {
|
notFoundPage: {
|
||||||
eyebrow: "404",
|
|
||||||
title: "This page doesn't exist, at least not anymore.",
|
title: "This page doesn't exist, at least not anymore.",
|
||||||
text: "The link might be outdated, or the page has moved. Take a look around the shop, or head back to the homepage.",
|
text: "The link might be outdated, or the page has moved. Take a look around the shop, or head back to the homepage.",
|
||||||
backToShop: "Go to shop",
|
backToShop: "Go to shop",
|
||||||
backToHome: "Back to homepage",
|
backToHome: "Back to homepage",
|
||||||
},
|
},
|
||||||
siteErrorPage: {
|
siteErrorPage: {
|
||||||
eyebrow: "Error",
|
|
||||||
title: "Something went wrong.",
|
title: "Something went wrong.",
|
||||||
text: "That was a technical error on our end, not something you did. Try again, or come back a bit later.",
|
text: "That was a technical error on our end, not something you did. Try again, or come back a bit later.",
|
||||||
retry: "Try again",
|
retry: "Try again",
|
||||||
@@ -573,7 +571,6 @@ export const en: Dictionary = {
|
|||||||
"By arrangement, you can pick up your order directly from us in Altenmünster. Just select “Pickup” at checkout. We'll then get in touch with a pickup time.",
|
"By arrangement, you can pick up your order directly from us in Altenmünster. Just select “Pickup” at checkout. We'll then get in touch with a pickup time.",
|
||||||
},
|
},
|
||||||
twoFactorPage: {
|
twoFactorPage: {
|
||||||
eyebrow: "Security",
|
|
||||||
title: "Two-Factor Authentication",
|
title: "Two-Factor Authentication",
|
||||||
subtitle: "Protects your account beyond just a password, with a code from an authenticator app.",
|
subtitle: "Protects your account beyond just a password, with a code from an authenticator app.",
|
||||||
backLabel: "Back to overview",
|
backLabel: "Back to overview",
|
||||||
@@ -589,7 +586,6 @@ export const en: Dictionary = {
|
|||||||
emptyDescription: "You can save products from any product page via “Add to wishlist.”",
|
emptyDescription: "You can save products from any product page via “Add to wishlist.”",
|
||||||
},
|
},
|
||||||
twoFactorCodePage: {
|
twoFactorCodePage: {
|
||||||
eyebrow: "Customer account",
|
|
||||||
title: "Confirm sign-in",
|
title: "Confirm sign-in",
|
||||||
subtitle: "Enter the 6-digit code from your authenticator app, or use one of your backup codes.",
|
subtitle: "Enter the 6-digit code from your authenticator app, or use one of your backup codes.",
|
||||||
cancelLabel: "Cancel sign-in",
|
cancelLabel: "Cancel sign-in",
|
||||||
@@ -597,7 +593,6 @@ export const en: Dictionary = {
|
|||||||
confirm: "Confirm",
|
confirm: "Confirm",
|
||||||
},
|
},
|
||||||
twoFactorBackupCodesPage: {
|
twoFactorBackupCodesPage: {
|
||||||
eyebrow: "Security",
|
|
||||||
title: "Your backup codes",
|
title: "Your backup codes",
|
||||||
subtitle:
|
subtitle:
|
||||||
"Each code works once, in case you don't have access to your authenticator app. Store them somewhere safe. They're only shown now.",
|
"Each code works once, in case you don't have access to your authenticator app. Store them somewhere safe. They're only shown now.",
|
||||||
@@ -605,7 +600,6 @@ export const en: Dictionary = {
|
|||||||
done: "Done",
|
done: "Done",
|
||||||
},
|
},
|
||||||
twoFactorSetupPage: {
|
twoFactorSetupPage: {
|
||||||
eyebrow: "Security",
|
|
||||||
title: "Set up two-factor authentication",
|
title: "Set up two-factor authentication",
|
||||||
subtitle:
|
subtitle:
|
||||||
"Scan the QR code with an authenticator app (e.g. Google Authenticator, Authy) and confirm with the code shown.",
|
"Scan the QR code with an authenticator app (e.g. Google Authenticator, Authy) and confirm with the code shown.",
|
||||||
@@ -624,7 +618,6 @@ export const en: Dictionary = {
|
|||||||
submit: "Send request",
|
submit: "Send request",
|
||||||
},
|
},
|
||||||
erntenPage: {
|
erntenPage: {
|
||||||
eyebrow: "Harvests",
|
|
||||||
title: "No two years taste alike.",
|
title: "No two years taste alike.",
|
||||||
batchCount: (count) => `${count} batch${count === 1 ? "" : "es"}`,
|
batchCount: (count) => `${count} batch${count === 1 ? "" : "es"}`,
|
||||||
emptyText: "No harvests recorded yet.",
|
emptyText: "No harvests recorded yet.",
|
||||||
@@ -645,7 +638,6 @@ export const en: Dictionary = {
|
|||||||
fromThisBatch: "From this batch",
|
fromThisBatch: "From this batch",
|
||||||
},
|
},
|
||||||
newsletterBestaetigtPage: {
|
newsletterBestaetigtPage: {
|
||||||
eyebrow: "Harvest post",
|
|
||||||
confirmedTitle: "Subscription confirmed.",
|
confirmedTitle: "Subscription confirmed.",
|
||||||
invalidTitle: "Link no longer valid.",
|
invalidTitle: "Link no longer valid.",
|
||||||
unsubscribedTitle: "Unsubscribed successfully.",
|
unsubscribedTitle: "Unsubscribed successfully.",
|
||||||
@@ -890,7 +882,6 @@ export const en: Dictionary = {
|
|||||||
save: "Save",
|
save: "Save",
|
||||||
},
|
},
|
||||||
trackOrderPage: {
|
trackOrderPage: {
|
||||||
eyebrow: "Track order",
|
|
||||||
title: "Where's my order?",
|
title: "Where's my order?",
|
||||||
intro: "Enter your order number and the email address used at checkout to see the current status, no account needed.",
|
intro: "Enter your order number and the email address used at checkout to see the current status, no account needed.",
|
||||||
orderNumberLabel: "Order number",
|
orderNumberLabel: "Order number",
|
||||||
@@ -1388,7 +1379,6 @@ export const en: Dictionary = {
|
|||||||
save: "Save address",
|
save: "Save address",
|
||||||
},
|
},
|
||||||
account: {
|
account: {
|
||||||
eyebrow: "Account",
|
|
||||||
loginRegisterTitle: "Sign in or create an account",
|
loginRegisterTitle: "Sign in or create an account",
|
||||||
login: "Sign in",
|
login: "Sign in",
|
||||||
register: "Create account",
|
register: "Create account",
|
||||||
@@ -1477,7 +1467,6 @@ export const en: Dictionary = {
|
|||||||
backToCart: "Back to cart",
|
backToCart: "Back to cart",
|
||||||
},
|
},
|
||||||
checkoutCancelPage: {
|
checkoutCancelPage: {
|
||||||
eyebrow: "Cancelled",
|
|
||||||
title: "Your order was not completed.",
|
title: "Your order was not completed.",
|
||||||
text: "No problem, your cart is still full. You can restart the checkout process at any time.",
|
text: "No problem, your cart is still full. You can restart the checkout process at any time.",
|
||||||
released: "The items reserved for you are available in the shop again.",
|
released: "The items reserved for you are available in the shop again.",
|
||||||
@@ -1630,7 +1619,6 @@ export const en: Dictionary = {
|
|||||||
starLabel: (value) => `${value} star${value === 1 ? "" : "s"}`,
|
starLabel: (value) => `${value} star${value === 1 ? "" : "s"}`,
|
||||||
},
|
},
|
||||||
shop: {
|
shop: {
|
||||||
eyebrow: "Shop",
|
|
||||||
title: "Our Range",
|
title: "Our Range",
|
||||||
subtitle: "Honey, beeswax candles, and propolis from our own apiary, while stocks last.",
|
subtitle: "Honey, beeswax candles, and propolis from our own apiary, while stocks last.",
|
||||||
allCategories: "All",
|
allCategories: "All",
|
||||||
@@ -1656,7 +1644,6 @@ export const en: Dictionary = {
|
|||||||
footnote: "Harvested · bottled · shipped from our own apiary",
|
footnote: "Harvested · bottled · shipped from our own apiary",
|
||||||
},
|
},
|
||||||
currentHarvest: {
|
currentHarvest: {
|
||||||
eyebrow: "Currently available",
|
|
||||||
title: "The current harvest",
|
title: "The current harvest",
|
||||||
subtitle: "Small, documented batches, while stocks last.",
|
subtitle: "Small, documented batches, while stocks last.",
|
||||||
},
|
},
|
||||||
@@ -1670,7 +1657,6 @@ export const en: Dictionary = {
|
|||||||
cta: "More about our origin",
|
cta: "More about our origin",
|
||||||
},
|
},
|
||||||
philosophy: {
|
philosophy: {
|
||||||
eyebrow: "Philosophy",
|
|
||||||
title: "The Wabenhain Philosophy",
|
title: "The Wabenhain Philosophy",
|
||||||
items: [
|
items: [
|
||||||
{ title: "Our own harvest", text: "Our honey comes from our own bee colonies." },
|
{ title: "Our own harvest", text: "Our honey comes from our own bee colonies." },
|
||||||
@@ -1689,7 +1675,6 @@ export const en: Dictionary = {
|
|||||||
cta: "Discover this harvest",
|
cta: "Discover this harvest",
|
||||||
},
|
},
|
||||||
processTimeline: {
|
processTimeline: {
|
||||||
eyebrow: "From bee colony to jar",
|
|
||||||
title: "Six steps to your honey",
|
title: "Six steps to your honey",
|
||||||
steps: [
|
steps: [
|
||||||
{ number: "01", title: "Blossom", text: "The bees collect nectar from the surrounding area." },
|
{ number: "01", title: "Blossom", text: "The bees collect nectar from the surrounding area." },
|
||||||
@@ -1710,7 +1695,6 @@ export const en: Dictionary = {
|
|||||||
ctaPickup: "Pick up honey locally",
|
ctaPickup: "Pick up honey locally",
|
||||||
},
|
},
|
||||||
sustainability: {
|
sustainability: {
|
||||||
eyebrow: "Responsibility",
|
|
||||||
title: "Responsibility starts small.",
|
title: "Responsibility starts small.",
|
||||||
items: [
|
items: [
|
||||||
{ title: "Reusable jars", text: "Clean Wabenhain jars can be returned to us." },
|
{ title: "Reusable jars", text: "Clean Wabenhain jars can be returned to us." },
|
||||||
@@ -1726,7 +1710,6 @@ export const en: Dictionary = {
|
|||||||
cta: "Request corporate gifts",
|
cta: "Request corporate gifts",
|
||||||
},
|
},
|
||||||
reviews: {
|
reviews: {
|
||||||
eyebrow: "Voices",
|
|
||||||
title: "What our customers say",
|
title: "What our customers say",
|
||||||
googleReviewsCount: (rating, count) => `${rating} ★ · ${count} Google reviews`,
|
googleReviewsCount: (rating, count) => `${rating} ★ · ${count} Google reviews`,
|
||||||
seeAllOnGoogle: "See all reviews on Google →",
|
seeAllOnGoogle: "See all reviews on Google →",
|
||||||
@@ -1744,7 +1727,6 @@ export const en: Dictionary = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
newsletter: {
|
newsletter: {
|
||||||
eyebrow: "Harvest mail",
|
|
||||||
title: "Be the first to know about the next harvest.",
|
title: "Be the first to know about the next harvest.",
|
||||||
description:
|
description:
|
||||||
"New harvests only happen a few times a year. Our harvest mail lets you know as soon as new honey is available.",
|
"New harvests only happen a few times a year. Our harvest mail lets you know as soon as new honey is available.",
|
||||||
|
|||||||
@@ -178,14 +178,12 @@ export interface Dictionary {
|
|||||||
reviewNotice: string;
|
reviewNotice: string;
|
||||||
};
|
};
|
||||||
notFoundPage: {
|
notFoundPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
text: string;
|
text: string;
|
||||||
backToShop: string;
|
backToShop: string;
|
||||||
backToHome: string;
|
backToHome: string;
|
||||||
};
|
};
|
||||||
siteErrorPage: {
|
siteErrorPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
text: string;
|
text: string;
|
||||||
retry: string;
|
retry: string;
|
||||||
@@ -266,7 +264,6 @@ export interface Dictionary {
|
|||||||
pickupText: string;
|
pickupText: string;
|
||||||
};
|
};
|
||||||
twoFactorPage: {
|
twoFactorPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
backLabel: string;
|
backLabel: string;
|
||||||
@@ -282,7 +279,6 @@ export interface Dictionary {
|
|||||||
emptyDescription: string;
|
emptyDescription: string;
|
||||||
};
|
};
|
||||||
twoFactorCodePage: {
|
twoFactorCodePage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
cancelLabel: string;
|
cancelLabel: string;
|
||||||
@@ -290,14 +286,12 @@ export interface Dictionary {
|
|||||||
confirm: string;
|
confirm: string;
|
||||||
};
|
};
|
||||||
twoFactorBackupCodesPage: {
|
twoFactorBackupCodesPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
warning: string;
|
warning: string;
|
||||||
done: string;
|
done: string;
|
||||||
};
|
};
|
||||||
twoFactorSetupPage: {
|
twoFactorSetupPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
backLabel: string;
|
backLabel: string;
|
||||||
@@ -315,7 +309,6 @@ export interface Dictionary {
|
|||||||
submit: string;
|
submit: string;
|
||||||
};
|
};
|
||||||
erntenPage: {
|
erntenPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
batchCount: (count: number) => string;
|
batchCount: (count: number) => string;
|
||||||
emptyText: string;
|
emptyText: string;
|
||||||
@@ -336,7 +329,6 @@ export interface Dictionary {
|
|||||||
fromThisBatch: string;
|
fromThisBatch: string;
|
||||||
};
|
};
|
||||||
newsletterBestaetigtPage: {
|
newsletterBestaetigtPage: {
|
||||||
eyebrow: string;
|
|
||||||
confirmedTitle: string;
|
confirmedTitle: string;
|
||||||
invalidTitle: string;
|
invalidTitle: string;
|
||||||
unsubscribedTitle: string;
|
unsubscribedTitle: string;
|
||||||
@@ -579,7 +571,6 @@ export interface Dictionary {
|
|||||||
save: string;
|
save: string;
|
||||||
};
|
};
|
||||||
trackOrderPage: {
|
trackOrderPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
intro: string;
|
intro: string;
|
||||||
orderNumberLabel: string;
|
orderNumberLabel: string;
|
||||||
@@ -1056,7 +1047,6 @@ export interface Dictionary {
|
|||||||
save: string;
|
save: string;
|
||||||
};
|
};
|
||||||
account: {
|
account: {
|
||||||
eyebrow: string;
|
|
||||||
loginRegisterTitle: string;
|
loginRegisterTitle: string;
|
||||||
login: string;
|
login: string;
|
||||||
register: string;
|
register: string;
|
||||||
@@ -1139,7 +1129,6 @@ export interface Dictionary {
|
|||||||
backToCart: string;
|
backToCart: string;
|
||||||
};
|
};
|
||||||
checkoutCancelPage: {
|
checkoutCancelPage: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
text: string;
|
text: string;
|
||||||
released: string;
|
released: string;
|
||||||
@@ -1269,7 +1258,6 @@ export interface Dictionary {
|
|||||||
starLabel: (value: number) => string;
|
starLabel: (value: number) => string;
|
||||||
};
|
};
|
||||||
shop: {
|
shop: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
allCategories: string;
|
allCategories: string;
|
||||||
@@ -1295,7 +1283,6 @@ export interface Dictionary {
|
|||||||
footnote: string;
|
footnote: string;
|
||||||
};
|
};
|
||||||
currentHarvest: {
|
currentHarvest: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
};
|
};
|
||||||
@@ -1308,7 +1295,6 @@ export interface Dictionary {
|
|||||||
cta: string;
|
cta: string;
|
||||||
};
|
};
|
||||||
philosophy: {
|
philosophy: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
items: TitledText[];
|
items: TitledText[];
|
||||||
};
|
};
|
||||||
@@ -1322,7 +1308,6 @@ export interface Dictionary {
|
|||||||
cta: string;
|
cta: string;
|
||||||
};
|
};
|
||||||
processTimeline: {
|
processTimeline: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
steps: { number: string; title: string; text: string }[];
|
steps: { number: string; title: string; text: string }[];
|
||||||
};
|
};
|
||||||
@@ -1335,7 +1320,6 @@ export interface Dictionary {
|
|||||||
ctaPickup: string;
|
ctaPickup: string;
|
||||||
};
|
};
|
||||||
sustainability: {
|
sustainability: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
items: TitledText[];
|
items: TitledText[];
|
||||||
};
|
};
|
||||||
@@ -1346,7 +1330,6 @@ export interface Dictionary {
|
|||||||
cta: string;
|
cta: string;
|
||||||
};
|
};
|
||||||
reviews: {
|
reviews: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
googleReviewsCount: (rating: string, count: number) => string;
|
googleReviewsCount: (rating: string, count: number) => string;
|
||||||
seeAllOnGoogle: string;
|
seeAllOnGoogle: string;
|
||||||
@@ -1354,7 +1337,6 @@ export interface Dictionary {
|
|||||||
testimonials: { quote: string; author: string }[];
|
testimonials: { quote: string; author: string }[];
|
||||||
};
|
};
|
||||||
newsletter: {
|
newsletter: {
|
||||||
eyebrow: string;
|
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description: string;
|
||||||
successMessage: string;
|
successMessage: string;
|
||||||
|
|||||||
Reference in new issue
Block a user