1 line
40 KiB
JavaScript
1 line
40 KiB
JavaScript
import{o as e,z as t}from"./runtime-core.esm-bundler-BD0e4RlP.js";var n={"nav.shop":`Shop`,"nav.cook":`Kochen`,"nav.clean":`Reinigen`,"nav.care":`Pflege`,"nav.applications":`Anwendungen`,"nav.bundles":`Bundles`,"nav.revitalization":`Revitalisierung`,"nav.about":`Über uns`,"nav.contact":`Kontakt`,"shop.eyebrow":`Unser Sortiment`,"shop.headline":`Kaiser-Natron`,"shop.headline.em":`für jeden Bereich`,"shop.sub":`Vom Kochen über das Reinigen bis zur Pflege: drei Sammlungen, ein Rohstoff.`,"shop.section.cook.headline":`Backen, kochen,`,"shop.section.cook.headline.em":`gesund verdauen.`,"shop.section.cook.sub":`Pulver und Tabletten — die Basis für Teig, Gerichte und guten Geschmack.`,"shop.section.clean.headline":`Schrubben, waschen,`,"shop.section.clean.headline.em":`alles sauber.`,"shop.section.clean.sub":`Natron-basierte Reiniger und Waschhelfer, die auch bei hartnäckigem Schmutz überzeugen.`,"shop.section.care.headline":`Baden, pflegen,`,"shop.section.care.headline.em":`durchatmen.`,"shop.section.care.sub":`Bade- und Pflegeprodukte, abgestimmt auf den Alltag und den Sport.`,"shop.feature.cook":`Für die Küche`,"shop.feature.clean":`Für den Haushalt`,"shop.feature.care":`Für Körper & Pflege`,"shop.feature.cta":`Zur Kategorie`,"cart.open":`Warenkorb öffnen`,"cart.label":`Warenkorb`,"cart.subtotal":`Zwischensumme`,"cart.checkout":`Zur Kasse`,"cart.remove":`Entfernen`,"cart.qty.increase":`Menge erhöhen`,"cart.qty.decrease":`Menge verringern`,"cart.empty.title":`Dein Warenkorb ist leer`,"cart.empty.subtitle":`Leg Produkte aus dem Shop hinzu – sie erscheinen direkt hier.`,"cart.added":`Zum Warenkorb hinzugefügt`,"menu.open":`Menü öffnen`,"menu.close":`Menü schließen`,"language.label":`Sprache`,"search.open":`Suche öffnen`,"search.label":`Produkte durchsuchen`,"search.placeholder":`Produkte suchen …`,"search.clear":`Löschen`,"search.results":`Suchergebnisse`,"search.noResults":`Keine Produkte gefunden`,"search.noResultsHint":`Probiere eine andere Schreibweise oder einen allgemeineren Begriff.`,"search.emptyHint":`Tippe, um Produkte zu finden – z. B. „Natron Pulver" oder „Entkalker".`,"search.suggested":`Vorschläge`,"search.hint.navigate":`Navigieren`,"search.hint.select":`Auswählen`,"search.hint.close":`Schließen`,"ds.sidebar.brand":`Marke`,"ds.sidebar.tokens":`Tokens`,"ds.sidebar.components":`Komponenten`,"ds.sidebar.sections":`Sektionen`,"ds.sidebar.back":`← Zurück zur Website`,"ds.mobile.currentPage":`Aktuelle Seite`,"ds.mobile.selectPage":`Seite auswählen`,"ds.nav.logo":`Logo`,"ds.nav.colors":`Farben`,"ds.nav.typography":`Typografie`,"ds.nav.radii":`Radien`,"ds.nav.shadows":`Schatten`,"ds.nav.motion":`Motion`,"ds.nav.icons":`Icons`,"ds.nav.buttons":`Buttons`,"ds.nav.badges":`Badges`,"ds.nav.inputs":`Eingabefelder`,"ds.nav.cards":`Karten`,"ds.nav.products":`Produktkarten`,"ds.nav.bundleCard":`Bundle-Karte`,"ds.nav.hero":`Hero`,"ds.nav.navbar":`Navigation`,"ds.nav.search":`Suche`,"ds.nav.qtyStepper":`Mengenwähler`,"ds.nav.cartDrawer":`Warenkorb`,"ds.nav.language":`Sprachwahl`,"ds.nav.bundles":`Bundles-Sektion`,"ds.nav.revitalization":`Revitalization`,"ds.nav.about":`Über uns`,"ds.search.title":`Suche`,"ds.search.description":`Volltextsuche über den Produktkatalog mit Bildvorschau. Mobil als Vollbild-Overlay, am Desktop als zentrierte Kommando-Palette. Tastaturbedienbar und standardmäßig in der primären Markenfarbe.`,"ds.search.label":`Produkte durchsuchen`,"ds.search.placeholder":`Produkte durchsuchen…`,"ds.search.noResults":`Keine Produkte gefunden.`,"ds.search.suggested":`Vorschläge`,"ds.search.results":`Ergebnisse`,"ds.search.open":`Suche öffnen`,"ds.search.picked":`Ausgewählt`,"ds.search.tryHint":`Tipp: probier „natron", „kalk", „wäsche" oder „bad".`,"ds.search.integrationHint":`Die Suche läuft über den im API-Layer (src/api/) exportierten Produktkatalog. Sobald das Backend steht, bleibt die Komponenten-Signatur unverändert.`,"ds.search.hint.navigate":`Navigieren`,"ds.search.hint.select":`Auswählen`,"ds.search.hint.close":`Schließen`,"ds.eyebrow.brand":`Marke`,"ds.eyebrow.tokens":`Tokens`,"ds.eyebrow.components":`Komponenten`,"ds.eyebrow.designSystem":`Design System`,"ds.heading.variants":`Varianten`,"ds.heading.sizes":`Größen`,"ds.heading.states":`Zustände`,"ds.heading.withIcons":`Mit Icons`,"ds.heading.onBrandSurface":`Auf Markenfläche`,"ds.heading.block":`Block`,"ds.heading.usage":`Verwendung`,"ds.heading.default":`Standard`,"ds.heading.tones":`Töne`,"ds.heading.interactive":`Interaktiv`,"ds.heading.withoutPadding":`Ohne Innenabstand`,"ds.heading.scale":`Skala`,"ds.heading.display":`Display`,"ds.heading.body":`Fließtext`,"ds.heading.nonUppercase":`Ohne Großbuchstaben`,"ds.heading.onDifferentSurfaces":`Auf verschiedenen Flächen`,"ds.heading.greenOnPaper":`Grün auf Papier`,"ds.heading.creamOnBrand":`Creme auf Markengrün`,"ds.logo.title":`Logo`,"ds.logo.description":"Ein einzelnes SVG, das die Farbe über CSS `color` erbt. Verwende das grüne Wortbild auf hellen Flächen und das cremefarbene auf dem Markengrün.","ds.logo.usageIntro":`Farbe über Utility-Klassen setzen:`,"ds.colors.title":`Farben`,"ds.colors.description":`Pinie-Grün auf Creme mit warmem Gelb als Akzent. Alle UI-Farben fließen aus diesen Tokens — niemals Werte in Komponenten hartkodieren.`,"ds.colors.group.brand":`Marke`,"ds.colors.group.accent":`Akzent`,"ds.colors.group.surface":`Fläche`,"ds.colors.group.ink":`Schrift`,"ds.colors.group.line":`Linie`,"ds.colors.group.semantic":`Semantisch`,"ds.typography.title":`Typografie`,"ds.typography.description":`Fraunces für Display — warm, organisch, mit optischen Größen. DM Sans für Fließtext und UI — klar und geometrisch.`,"ds.typography.serifDesc":`Serife mit optischer Skalierung. Für Hero-Bereiche, Section-Titel und Produktnamen.`,"ds.typography.sansDesc":`Klare geometrische Sans-Serif. Für Fließtext, UI, Navigation und Labels.`,"ds.typography.sample":`Der schnelle braune Fuchs`,"ds.radii.title":`Radien`,"ds.radii.description":`Von dezenten 6px an kleinen Elementen bis hin zu vollen Pillen auf Buttons. Passend zum weichen, organischen Gefühl der Referenzseite.`,"ds.shadows.title":`Schatten`,"ds.shadows.description":`Alle Schatten sind grünlich statt neutral schwarz getönt — sie wirken warm und sind Teil der Palette.`,"ds.shadows.sm.note":`Dezent — Nav beim Scrollen, ruhende Karten`,"ds.shadows.md.note":`Mittel — Hover des primären Buttons`,"ds.shadows.lg.note":`Groß — schwebende Karten, Overlays`,"ds.motion.title":`Motion`,"ds.motion.description":`Bewegung dient dem Verständnis, nicht der Dekoration. Drei UI-Dauern plus eine szenische Schleife, eine Standard-Kurve, und klare Regeln für Nutzer mit reduzierter Bewegung.`,"ds.motion.philosophy.title":`Philosophie`,"ds.motion.principle.purpose":`Nur animieren, wenn Hierarchie, Zustand oder Kontinuität erklärt werden. Dekorative Bewegung wird weggelassen.`,"ds.motion.principle.cadence":`Drei Dauern, eine Kurve: 120ms für Zustand, 200ms für UI-Übergänge, 320ms für größere Reveals. --ease-out als Standard — Ankünfte wirken gesetzt, nicht schnippisch.`,"ds.motion.principle.scenic":`Szenische Schleifen (Orbit, weiche Pulse) laufen linear über 10–20 s. Lang genug, um als Atmosphäre zu lesen, nie als tickende Uhr.`,"ds.motion.principle.reduced":`prefers-reduced-motion wird immer respektiert. Schleifen einfrieren, Übergänge zusammenfallen lassen — wer Bewegung ablehnt, wird dafür nicht bestraft.`,"ds.motion.durations.title":`Dauern`,"ds.motion.duration.fast.note":`Zustand — Hover, Focus, Press.`,"ds.motion.duration.base.note":`Standard-UI — Farbwechsel, Öffnen/Schließen.`,"ds.motion.duration.slow.note":`Größere Reveals — Drawer, Overlays, Karten.`,"ds.motion.duration.scene.note":`Szenische Wechsel — ganze Sektion, Route-Wechsel.`,"ds.motion.duration.orbit.note":`Umgebungsschleifen — Orbit-Ringe, weiche Pulse.`,"ds.motion.easings.title":`Kurven`,"ds.motion.ease.out.note":`Standard. Ankünfte landen weich.`,"ds.motion.ease.inOut.note":`Nur wenn ein Element kommen und wieder gehen muss.`,"ds.motion.ease.linear.note":`Für mechanische Schleifen — Orbit, Spinner.`,"ds.motion.animations.title":`Benannte Animationen`,"ds.motion.animate.orbit.note":`Ring rotiert um ein zentriertes Icon. Verwendet im Revitalization-Abschnitt.`,"ds.motion.animate.fadeInUp.note":`Einblenden mit 8 px Versatz — für Eintrittsmomente.`,"ds.motion.animate.pulseSoft.note":`Ruhiger Opazitäts-Puls — für Live-Indikatoren.`,"ds.motion.reduced.title":`Reduzierte Bewegung`,"ds.motion.reduced.body":`Globale Regel in motion.css: bei prefers-reduced-motion: reduce kollabieren alle Animations- und Transition-Dauern auf ~0 ms. Komponenten brauchen keine eigenen Weichen dafür.`,"ds.motion.replay":`Neu abspielen`,"ds.motion.fadePreview":`Einblenden`,"ds.icons.title":`Icons`,"ds.icons.description":`Ein kuratiertes strich-basiertes Icon-Set im 24x24-Raster. Wird über die Icon-Komponente gerendert — erbt die Farbe von currentColor.`,"ds.icons.search":`Icons suchen…`,"ds.icons.copyHint":`Klick auf eine Kachel kopiert das Snippet.`,"ds.icons.copied":`Kopiert!`,"ds.icons.noMatch":`Keine Icons stimmen mit`,"ds.icons.sizeDefault":`20 (Standard)`,"ds.icons.addHint":`Neue Icons in %s hinzufügen. Nutze eine 24×24-viewBox, strichbasierte Pfade ohne Füllungen — die Komponente übernimmt die Farbe per %s. Gib %s für Screenreader an; weglassen bei dekorativen Icons.`,"ds.icons.group.commerce":`Commerce`,"ds.icons.group.navigation":`Navigation`,"ds.icons.group.actions":`Aktionen`,"ds.icons.group.contact":`Kontakt`,"ds.icons.group.feedback":`Feedback`,"ds.icons.group.devices":`Geräte`,"ds.buttons.title":`Buttons`,"ds.buttons.description":`Pillenförmig. Pinie-grüner Primary mit warmgelbem Label für die wichtigste Aktion, warmgelber Accent auf Markenflächen, plus Secondary-, Ghost- und Danger-Varianten.`,"ds.buttons.primary":`Primary`,"ds.buttons.accent":`Accent`,"ds.buttons.secondary":`Secondary`,"ds.buttons.ghost":`Ghost`,"ds.buttons.danger":`Danger`,"ds.buttons.small":`Klein`,"ds.buttons.medium":`Mittel`,"ds.buttons.large":`Groß`,"ds.buttons.disabled":`Deaktiviert`,"ds.buttons.loading":`Lädt`,"ds.buttons.addToCart":`In den Warenkorb`,"ds.buttons.learnMore":`Mehr erfahren`,"ds.buttons.save":`Merken`,"ds.buttons.confirm":`Bestätigen`,"ds.buttons.continueShopping":`Weiter einkaufen`,"ds.badges.title":`Badges`,"ds.badges.description":`Kleine Großbuchstaben-Labels für Metadaten, Status und Eyebrows über Überschriften.`,"ds.badges.neutral":`Neutral`,"ds.badges.brand":`Marke`,"ds.badges.accent":`Akzent`,"ds.badges.subtle":`Dezent`,"ds.badges.success":`Erfolg`,"ds.badges.warning":`Warnung`,"ds.badges.danger":`Fehler`,"ds.badges.newRelease":`Neu veröffentlicht`,"ds.badges.featured":`Empfohlen`,"ds.inputs.title":`Eingabefelder`,"ds.inputs.description":`Papier-Fläche mit dünnem grün getöntem Rahmen. Großbuchstaben-Labels. Der Fokus vertieft den Rahmen zu Markengrün.`,"ds.inputs.email":`E-Mail`,"ds.inputs.emailHint":`Wir teilen dies nie.`,"ds.inputs.password":`Passwort`,"ds.inputs.required":`Pflichtfeld`,"ds.inputs.requiredError":`Dieses Feld ist erforderlich`,"ds.inputs.disabled":`Deaktiviert`,"ds.inputs.disabledPlaceholder":`Hier geht nichts`,"ds.cards.title":`Karten`,"ds.cards.description":`Flächen zum Gruppieren von Inhalten. Drei Töne — Papier, Creme, Marke — und ein optionales interaktives Anheben beim Hover.`,"ds.cards.paper":`Papier`,"ds.cards.cream":`Creme`,"ds.cards.brand":`Marke`,"ds.cards.paperTitle":`Standardfläche`,"ds.cards.paperBody":`Die erste Wahl für die meisten Inhalte. Hoher Kontrast auf dem cremefarbenen Seitenhintergrund.`,"ds.cards.creamTitle":`Warme Fläche`,"ds.cards.creamBody":`Eine weichere Alternative für sekundäre Bereiche oder Callouts.`,"ds.cards.brandTitle":`Dunkle Fläche`,"ds.cards.brandBody":`Für Feature-Panels, CTAs und Momente, die auffallen wollen.`,"ds.cards.hoverMe":`Hover mich`,"ds.cards.hoverMeToo":`Mich auch`,"ds.cards.hoverBody":`Hebt sich beim Hover mit weichem grün getönten Schatten. Für klickbare Items im Raster.`,"ds.cards.hoverBodyAlt":`Gleiches Verhalten auf der warmen Fläche.`,"ds.cards.mediaTitle":`Media-Karte`,"ds.cards.mediaBody":`Wenn die Karte ein randloses Bild oder einen Header braucht, übergib`,"ds.product.title":`Produktkarte`,"ds.product.description":`Zusammengesetzt aus Karte, Badge, Button und Icon. Cutout-Bild auf einer Creme-Medienfläche, Titel mit Größe, Preis in der Markenfarbe und ein blockweiter „In den Warenkorb"-Primary.`,"ds.product.outOfStock":`Nicht verfügbar`,"ds.product.added":`Hinzugefügt`,"ds.hero.title":`Hero`,"ds.hero.description":`Ganzflächiger Bühnenbereich für die Startseite und Kategorie-Auftakte. Eyebrow, Display-Headline mit optionaler Kursiv-Hervorhebung, Unterzeile, Produkt-Cutout auf dekorativer Scheibe und ein Primary/Secondary-CTA-Paar. Responsiv von 390 bis 1280 px, drei Flächentöne, zwei Layouts.`,"ds.hero.variant.label":`Layout`,"ds.hero.variant.split":`Split`,"ds.hero.variant.centered":`Zentriert`,"ds.hero.eyebrow":`Neu im Shop`,"ds.hero.headline.a":`Kaiser-Natron`,"ds.hero.headline.em":`für alles`,"ds.hero.headline.b":`was glänzen soll.`,"ds.hero.sub":`Reinigt, backt und neutralisiert Gerüche. Die 250-g-Großpackung für den Haushalt, der sich auf das Original verlässt.`,"home.banner.eyebrow":`Vielseitig einsetzbar`,"home.banner.headline.a":`Ein Pulver,`,"home.banner.headline.em":`hundert Anwendungen`,"home.banner.headline.b":`im Haushalt.`,"home.banner.sub":`Vom Kuchen über das Bad bis zur Wäsche – Kaiser-Natron leistet überall still und zuverlässig seine Arbeit.`,"home.categories.clean":`Putzen`,"home.categories.cook":`Kochen`,"home.categories.care":`Pflege`,"bundles.headline.a":`Bundles &`,"bundles.headline.em":`Vorteile`,"bundles.sub":`Als Mitglied sparst du durch Staffelrabatte, exklusive Bundle-Deals und Frühzugang auf neue Produkte.`,"bundles.benefit.1.title":`Staffelrabatt bis −25 %`,"bundles.benefit.2.title":`Exklusive Bundle-Deals`,"bundles.benefit.3.title":`Frühzugang & Neuheiten`,"bundles.joinCta":`Mitglied werden`,"bundles.card.priceLabel":`Verkaufspreis`,"bundles.card.memberPrefix":`Mitglieder:`,"bundles.card.moreItems":`weitere`,"ds.bundles.carousel.label":`Bundle-Karussell`,"ds.bundles.carousel.prev":`Vorheriges Bundle`,"ds.bundles.carousel.next":`Nächstes Bundle`,"ds.bundles.carousel.goToSlide":`Zu Bundle`,"ds.bundleCard.title":`Bundle-Karte`,"ds.bundleCard.description":`Zusammengesetzte Karte für kuratierte Produktpakete. Medien mit optionalem Badge, Nutzungs-Label, Titel, bis zu drei Artikeln, Preisblock (inkl. Mitgliederpreis) und Primär-CTA. Zwei Layouts — vertikal für Raster, horizontal für Karussell-Slides von md aufwärts.`,"ds.bundles.title":`Bundles-Sektion`,"ds.bundles.description":`Kompound-Sektion mit fixer Sidebar (Headline + drei Vorteile + Mitglieder-CTA) und einem Scroll-Snap-Karussell mit horizontalen Bundle-Karten von md aufwärts. Tastatur und Touch-Swipe funktionieren out of the box; die Pfeile loopen am Ende zurück zum Anfang.`,"ds.revitalization.title":`Revitalization Center`,"ds.revitalization.description":`Zentrierte Feature-Teaser-Sektion auf Markengrün. Eyebrow-Badge, Display-Headline mit italic-Highlight, Unterzeile, bis zu drei Pillar-Punkte mit Akzent-Dots und ein einzelner CTA. Gedacht für „Demnächst"-Ankündigungen.`,"ds.about.title":`About / Geschichte`,"ds.about.description":`Zentrierte Intro-Zone plus drei Meilenstein-Karten in den drei Flächentönen (Papier / Creme / Marke) von links nach rechts. Fortlaufende Tonabfolge gibt der Zeitachse visuelle Progression.`,"revit.eyebrow":`Demnächst`,"revit.headline.a":`Revitalization`,"revit.headline.em":`Center`,"revit.sub":`Ein eigenes Wissens-Universum für NaHCO₃ – Wissenschaft, Therapiekonzepte und professionelle Anwendungsguides. Mehr als ein Shop.`,"revit.feature.1.title":`Wissenschaft`,"revit.feature.2.title":`Therapie`,"revit.feature.3.title":`Natürlich heilen`,"revit.notifyCta":`Early Access sichern`,"about.eyebrow":`Geschichte & Wissenschaft`,"about.headline":`Über Kaiser-Natron®`,"about.sub":`Mehr als 140 Jahre Tradition, Reinheit und die Wissenschaft hinter dem Unterschied.`,"about.milestone.1.year":`1881`,"about.milestone.1.title":`Die Gründung`,"about.milestone.1.text":`Arnold Holste gründet in Bielefeld das Unternehmen, das Kaiser-Natron® zur Welt bringt – reines Natriumhydrogencarbonat in Lebensmittelqualität, zu einer Zeit, als Chemie noch Handwerk war.`,"about.milestone.2.year":`Früh 1900er`,"about.milestone.2.title":`Die Ikone entsteht`,"about.milestone.2.text":`Kaiser-Natron® wird zum Haushalts-Klassiker im deutschsprachigen Raum. Großmütter schwören auf seine universelle Kraft – vom Backen bis zum Reinigen.`,"about.milestone.3.year":`Heute`,"about.milestone.3.title":`Premium-Standard E500(ii)`,"about.milestone.3.text":`Kaiser-Natron® trägt die Lebensmittelzulassung E500(ii) – extra gereinigt, standardisiert und chargenweise geprüft. Das Original bleibt unverändert gut.`,"ds.search.title":`Produktsuche`,"ds.search.description":`Suchknopf rechts in der Navbar (links der Sprachwahl) und links unten als Floating-Button auf dem Telefon. Klick öffnet ein Full-Screen-Overlay auf Mobilgeräten bzw. ein zentriertes Panel auf dem Desktop. Eingabefeld ist autofokussiert, Ergebnisliste aktualisiert sich beim Tippen, Pfeiltasten / Enter / Esc werden unterstützt.`,"ds.search.demo.label":`Demo öffnen`,"ds.search.demo.hint":`Probiere „Natron", „Pulver", „Entkalker" oder „Spray".`,"ds.navbar.title":`Navigation`,"ds.navbar.description":`Logo + Nav + Warenkorb, in drei Flächentönen. Auf Mobilgeräten behält die obere Leiste das Logo, Menü + Warenkorb wechseln in ein ergonomisches bodennahes rechtes Floating-Cluster. Das Menü öffnet ein vollflächiges markengrünes Overlay.`,"ds.navbar.tone":`Navigation-Ton`,"ds.navbar.tone.paper":`Papier`,"ds.navbar.tone.cream":`Creme`,"ds.navbar.tone.brand":`Marke`,"ds.navbar.layout":`Layout`,"ds.navbar.layout.standard":`Standard`,"ds.navbar.layout.floating":`Schwebend`,"ds.language.title":`Sprachwahl`,"ds.language.description":`Kompakte Pille zum Umschalten zwischen DE, AT und EN. Zwei Töne — Papier für helle Flächen, Marke für das Markengrün — plus ein schwebender Modus, der sich oben rechts an die Ecke heftet.`,"ds.language.paperNote":`Standardton für helle UI-Flächen wie Karten oder Toolbars.`,"ds.language.creamNote":`Stärkerer Rahmen, damit die Pille auf warmen Cremflächen Definition behält.`,"ds.language.brandNote":`Für Einsätze auf dem Markengrün — z. B. im mobilen Menü-Overlay.`,"ds.language.floating":`Schwebend`,"ds.language.floatingNote":"Mit dem Prop `floating` dockt die Pille rechts oben im Viewport an (24px Abstand). Genau so wird sie im Design-System oben rechts eingesetzt.","ds.qtyStepper.title":`Mengenwähler`,"ds.qtyStepper.description":"Kompaktes Plus/Minus-Steuerelement zur Auswahl einer Menge. Pillenförmig, passend zu Buttons und Input-Rahmen, erbt Ton und Radius aus den Tokens. Unterstützt `min`/`max`-Grenzen und einen deaktivierten Zustand.","ds.qtyStepper.minBoundary":`Untergrenze`,"ds.qtyStepper.maxBoundary":`Obergrenze`,"ds.cartDrawer.title":`Warenkorb-Panel`,"ds.cartDrawer.description":`Seitlich einfahrendes Panel auf Creme-Fläche. Zeigt die Positionen mit Bild, Größe, Mengen-Stepper und Zeilensumme; darunter Zwischensumme und ein breiter Zur-Kasse-Button. Auf Mobilgeräten nimmt das Panel die volle Breite ein, ab 440 px fixiert es rechts an. Scroll-Lock, ESC zum Schließen, Klick auf den Hintergrund schließt ebenfalls.`,"ds.cartDrawer.demoLabel":`Warenkorb befüllen & öffnen`,"ds.cartDrawer.demoHint":`Legt zwei Beispielartikel an und öffnet das Panel.`,"ds.cartDrawer.integrationTitle":`Backend-Integration`,"ds.cartDrawer.integrationBody":"Die Komponente kennt kein Backend direkt – sie emittiert `update-quantity`, `remove` und `checkout`. Ihr Zustand kommt aus dem API-Layer in `src/api/cart.js`, der heute lokal arbeitet und später 1:1 auf die dokumentierten Endpunkte (siehe `docs/api/cart.md`) umgestellt wird, ohne dass oben etwas anzupassen ist."},r={"cart.open":`Einkaufstasche öffnen`,"cart.label":`Einkaufstasche`,"cart.empty.title":`Deine Einkaufstasche ist leer`,"cart.empty.subtitle":`Leg Produkte aus dem Shop dazu – sie erscheinen gleich hier.`,"cart.added":`Zur Einkaufstasche dazugelegt`,"ds.buttons.addToCart":`In die Einkaufstasche`,"ds.buttons.continueShopping":`Weiter einkaufen gehen`,"ds.buttons.save":`Vormerken`,"ds.cartDrawer.title":`Einkaufstasche-Panel`,"ds.sidebar.back":`← Retour zur Seite`},i={"nav.shop":`Shop`,"nav.cook":`Cook`,"nav.clean":`Clean`,"nav.care":`Care`,"nav.applications":`Uses`,"nav.bundles":`Bundles`,"nav.revitalization":`Revitalisation`,"nav.about":`About`,"nav.contact":`Contact`,"shop.eyebrow":`Our range`,"shop.headline":`Kaiser Natron`,"shop.headline.em":`for every corner`,"shop.sub":`From cooking to cleaning to care — three collections, one ingredient.`,"shop.section.cook.headline":`Bake, cook,`,"shop.section.cook.headline.em":`digest well.`,"shop.section.cook.sub":`Powders and tablets — the quiet foundation under bread, cakes and good digestion.`,"shop.section.clean.headline":`Scrub, wash,`,"shop.section.clean.headline.em":`all clean.`,"shop.section.clean.sub":`Natron-based cleaners and laundry helpers that hold up against stubborn grime.`,"shop.section.care.headline":`Bathe, soften,`,"shop.section.care.headline.em":`breathe easy.`,"shop.section.care.sub":`Bath and care products tuned for daily life and sport.`,"shop.feature.cook":`For the kitchen`,"shop.feature.clean":`For the home`,"shop.feature.care":`For body & care`,"shop.feature.cta":`Shop category`,"cart.open":`Open cart`,"cart.label":`Cart`,"cart.subtotal":`Subtotal`,"cart.checkout":`Checkout`,"cart.remove":`Remove`,"cart.qty.increase":`Increase quantity`,"cart.qty.decrease":`Decrease quantity`,"cart.empty.title":`Your cart is empty`,"cart.empty.subtitle":`Add products from the shop — they will appear right here.`,"cart.added":`Added to cart`,"menu.open":`Open menu`,"menu.close":`Close menu`,"language.label":`Language`,"search.open":`Open search`,"search.label":`Search products`,"search.placeholder":`Search products…`,"search.clear":`Clear`,"search.results":`Search results`,"search.noResults":`No products found`,"search.noResultsHint":`Try a different spelling or a broader term.`,"search.emptyHint":`Type to find products — e.g. "Natron powder" or "descaler".`,"search.suggested":`Suggested`,"search.hint.navigate":`Navigate`,"search.hint.select":`Select`,"search.hint.close":`Close`,"ds.sidebar.brand":`Brand`,"ds.sidebar.tokens":`Tokens`,"ds.sidebar.components":`Components`,"ds.sidebar.sections":`Sections`,"ds.sidebar.back":`← Back to site`,"ds.mobile.currentPage":`Current page`,"ds.mobile.selectPage":`Select a page`,"ds.nav.logo":`Logo`,"ds.nav.colors":`Colors`,"ds.nav.typography":`Typography`,"ds.nav.radii":`Radii`,"ds.nav.shadows":`Shadows`,"ds.nav.motion":`Motion`,"ds.nav.icons":`Icons`,"ds.nav.buttons":`Buttons`,"ds.nav.badges":`Badges`,"ds.nav.inputs":`Inputs`,"ds.nav.cards":`Cards`,"ds.nav.products":`Product cards`,"ds.nav.bundleCard":`Bundle card`,"ds.nav.hero":`Hero`,"ds.nav.navbar":`Navbar`,"ds.nav.search":`Search`,"ds.nav.qtyStepper":`Quantity stepper`,"ds.nav.cartDrawer":`Cart`,"ds.nav.language":`Language`,"ds.nav.bundles":`Bundles section`,"ds.nav.revitalization":`Revitalization`,"ds.nav.about":`About`,"ds.search.title":`Search`,"ds.search.description":`Full-text search across the product catalog with image previews. Full-screen overlay on mobile, centered command palette on desktop. Keyboard-navigable and brand-green by default.`,"ds.search.label":`Search products`,"ds.search.placeholder":`Search products…`,"ds.search.noResults":`No products found.`,"ds.search.suggested":`Suggestions`,"ds.search.results":`Results`,"ds.search.open":`Open search`,"ds.search.picked":`Picked`,"ds.search.tryHint":`Try: "natron", "limescale", "laundry", or "bath".`,"ds.search.integrationHint":`Search queries the catalog exported from the project API layer (src/api/). When the real backend lands, the component signature stays the same.`,"ds.search.hint.navigate":`Navigate`,"ds.search.hint.select":`Select`,"ds.search.hint.close":`Close`,"ds.eyebrow.brand":`Brand`,"ds.eyebrow.tokens":`Tokens`,"ds.eyebrow.components":`Components`,"ds.eyebrow.designSystem":`Design system`,"ds.heading.variants":`Variants`,"ds.heading.sizes":`Sizes`,"ds.heading.states":`States`,"ds.heading.withIcons":`With icons`,"ds.heading.onBrandSurface":`On brand surface`,"ds.heading.block":`Block`,"ds.heading.usage":`Usage`,"ds.heading.default":`Default`,"ds.heading.tones":`Tones`,"ds.heading.interactive":`Interactive`,"ds.heading.withoutPadding":`Without padding`,"ds.heading.scale":`Scale`,"ds.heading.display":`Display`,"ds.heading.body":`Body`,"ds.heading.nonUppercase":`Non-uppercase`,"ds.heading.onDifferentSurfaces":`On different surfaces`,"ds.heading.greenOnPaper":`Green on paper`,"ds.heading.creamOnBrand":`Cream on brand green`,"ds.logo.title":`Logo`,"ds.logo.description":"A single SVG component that inherits its fill from CSS `color`. Use the green wordmark on light surfaces and the cream wordmark on the brand green.","ds.logo.usageIntro":`Use color utilities to set the fill:`,"ds.colors.title":`Colors`,"ds.colors.description":`Pine green on cream, with a warm yellow accent. All UI color flows from these tokens — never hand-pick values in components.`,"ds.colors.group.brand":`Brand`,"ds.colors.group.accent":`Accent`,"ds.colors.group.surface":`Surface`,"ds.colors.group.ink":`Ink`,"ds.colors.group.line":`Line`,"ds.colors.group.semantic":`Semantic`,"ds.typography.title":`Typography`,"ds.typography.description":`Fraunces for display — warm, organic, optical-sized. DM Sans for body and UI — clean and geometric.`,"ds.typography.serifDesc":`Serif with optical sizing. Use for hero, section titles, product names.`,"ds.typography.sansDesc":`Clean geometric sans. Use for body, UI, navigation, labels.`,"ds.typography.sample":`The quick brown fox`,"ds.radii.title":`Radii`,"ds.radii.description":`From subtle 6px rounding on small elements to full pills on buttons. Matches the reference site's soft, organic feel.`,"ds.shadows.title":`Shadows`,"ds.shadows.description":`All shadows are tinted green rather than neutral black — they feel warm and part of the palette.`,"ds.shadows.sm.note":`Subtle — nav on scroll, resting cards`,"ds.shadows.md.note":`Medium — primary button hover`,"ds.shadows.lg.note":`Large — floating cards, overlays`,"ds.motion.title":`Motion`,"ds.motion.description":`Motion serves comprehension, not decoration. Three UI durations plus one scenic loop, one default curve, and a clear rule for reduced-motion users.`,"ds.motion.philosophy.title":`Philosophy`,"ds.motion.principle.purpose":`Only animate when it teaches hierarchy, state, or continuity. Decorative motion gets cut.`,"ds.motion.principle.cadence":`Three durations, one curve: 120ms for state, 200ms for UI transitions, 320ms for larger reveals. --ease-out is the default — arrivals feel settled, not snappy.`,"ds.motion.principle.scenic":`Scenic loops (orbit, soft pulses) run linear over 10–20s. Long enough to read as atmosphere, never as a ticking clock.`,"ds.motion.principle.reduced":`prefers-reduced-motion is always honoured. Freeze loops, collapse transitions — never punish a user for opting out.`,"ds.motion.durations.title":`Durations`,"ds.motion.duration.fast.note":`State — hover, focus, press.`,"ds.motion.duration.base.note":`Standard UI — colour change, open/close.`,"ds.motion.duration.slow.note":`Larger reveals — drawer, overlays, cards.`,"ds.motion.duration.scene.note":`Scenic changes — full section, route transitions.`,"ds.motion.duration.orbit.note":`Ambient loops — orbit rings, soft pulses.`,"ds.motion.easings.title":`Easings`,"ds.motion.ease.out.note":`Default. Arrivals land softly.`,"ds.motion.ease.inOut.note":`Only when an element must come and go.`,"ds.motion.ease.linear.note":`For mechanical loops — orbit, spinners.`,"ds.motion.animations.title":`Named animations`,"ds.motion.animate.orbit.note":`Ring rotates around a centered icon. Used in the Revitalization section.`,"ds.motion.animate.fadeInUp.note":`Fade with an 8px rise — for entrance moments.`,"ds.motion.animate.pulseSoft.note":`Quiet opacity pulse — for live indicators.`,"ds.motion.reduced.title":`Reduced motion`,"ds.motion.reduced.body":`Global rule in motion.css: under prefers-reduced-motion: reduce, all animation and transition durations collapse to ~0ms. Components do not need their own switch.`,"ds.motion.replay":`Replay`,"ds.motion.fadePreview":`Fade in`,"ds.icons.title":`Icons`,"ds.icons.description":`A curated stroke-based icon set on a 24x24 grid. Rendered via the Icon component — inherits color from currentColor.`,"ds.icons.search":`Search icons…`,"ds.icons.copyHint":`Click a tile to copy its snippet.`,"ds.icons.copied":`Copied!`,"ds.icons.noMatch":`No icons match`,"ds.icons.sizeDefault":`20 (default)`,"ds.icons.addHint":`Add new icons in %s. Use a 24×24 viewBox, stroke-based paths, no fills — the component handles color via %s. Pass %s for screen readers; omit it for decorative icons.`,"ds.icons.group.commerce":`Commerce`,"ds.icons.group.navigation":`Navigation`,"ds.icons.group.actions":`Actions`,"ds.icons.group.contact":`Contact`,"ds.icons.group.feedback":`Feedback`,"ds.icons.group.devices":`Devices`,"ds.buttons.title":`Buttons`,"ds.buttons.description":`Pill-shaped. Pine-green primary with warm-yellow label for the main call to action, warm-yellow accent on brand surfaces, plus secondary, ghost, and danger variants.`,"ds.buttons.primary":`Primary`,"ds.buttons.accent":`Accent`,"ds.buttons.secondary":`Secondary`,"ds.buttons.ghost":`Ghost`,"ds.buttons.danger":`Danger`,"ds.buttons.small":`Small`,"ds.buttons.medium":`Medium`,"ds.buttons.large":`Large`,"ds.buttons.disabled":`Disabled`,"ds.buttons.loading":`Loading`,"ds.buttons.addToCart":`Add to cart`,"ds.buttons.learnMore":`Learn more`,"ds.buttons.save":`Save`,"ds.buttons.confirm":`Confirm`,"ds.buttons.continueShopping":`Continue shopping`,"ds.badges.title":`Badges`,"ds.badges.description":`Small uppercase labels for metadata, status, and eyebrows above headings.`,"ds.badges.neutral":`Neutral`,"ds.badges.brand":`Brand`,"ds.badges.accent":`Accent`,"ds.badges.subtle":`Subtle`,"ds.badges.success":`Success`,"ds.badges.warning":`Warning`,"ds.badges.danger":`Danger`,"ds.badges.newRelease":`New release`,"ds.badges.featured":`Featured`,"ds.inputs.title":`Inputs`,"ds.inputs.description":`Paper surface with a thin green-tinted border. Uppercase eyebrow labels. Focus deepens the border to brand green.`,"ds.inputs.email":`Email`,"ds.inputs.emailHint":`We never share this.`,"ds.inputs.password":`Password`,"ds.inputs.required":`Required field`,"ds.inputs.requiredError":`This field is required`,"ds.inputs.disabled":`Disabled`,"ds.inputs.disabledPlaceholder":`Can't type here`,"ds.cards.title":`Cards`,"ds.cards.description":`Surfaces for grouping content. Three tones — paper, cream, brand — and an optional interactive lift on hover.`,"ds.cards.paper":`Paper`,"ds.cards.cream":`Cream`,"ds.cards.brand":`Brand`,"ds.cards.paperTitle":`Default surface`,"ds.cards.paperBody":`The go-to card for most content. High contrast on the cream page background.`,"ds.cards.creamTitle":`Warm surface`,"ds.cards.creamBody":`A softer alternative for secondary sections or callouts.`,"ds.cards.brandTitle":`Dark surface`,"ds.cards.brandBody":`For feature panels, CTAs, and moments that want to stand out.`,"ds.cards.hoverMe":`Hover me`,"ds.cards.hoverMeToo":`Hover me too`,"ds.cards.hoverBody":`Lifts on hover with a soft green-tinted shadow. Use for clickable items in a grid.`,"ds.cards.hoverBodyAlt":`Same behavior on the warm surface.`,"ds.cards.mediaTitle":`Media card`,"ds.cards.mediaBody":`When the card needs a full-bleed image or header, pass`,"ds.product.title":`Product card`,"ds.product.description":`Composed from Card, Badge, Button, and Icon. Cutout image on a cream media surface, title + size, price in brand, and a full-width primary "Add to cart".`,"ds.product.outOfStock":`Out of stock`,"ds.product.added":`Added`,"ds.hero.title":`Hero`,"ds.hero.description":`Full-bleed stage for the home page and category tops. Eyebrow, display headline with optional italic emphasis, subheadline, product cutout on a decorative disc, and a primary/secondary CTA pair. Responsive from 390 to 1280px, three surface tones, two layouts.`,"ds.hero.variant.label":`Layout`,"ds.hero.variant.split":`Split`,"ds.hero.variant.centered":`Centered`,"ds.hero.eyebrow":`New in shop`,"ds.hero.headline.a":`Kaiser Natron`,"ds.hero.headline.em":`for everything`,"ds.hero.headline.b":`that should shine.`,"ds.hero.sub":`Cleans, bakes, and neutralises odours. The 250 g large pack for the household that trusts the original.`,"home.banner.eyebrow":`Truly versatile`,"home.banner.headline.a":`One powder,`,"home.banner.headline.em":`a hundred uses`,"home.banner.headline.b":`around the home.`,"home.banner.sub":`From baking to bathing to laundry — Kaiser Natron quietly does its work wherever you need it.`,"home.categories.clean":`Clean`,"home.categories.cook":`Cook`,"home.categories.care":`Care`,"bundles.headline.a":`Bundles &`,"bundles.headline.em":`Benefits`,"bundles.sub":`Members save with tiered discounts, exclusive bundle deals, and early access to new products.`,"bundles.benefit.1.title":`Tiered discount up to −25%`,"bundles.benefit.2.title":`Exclusive bundle deals`,"bundles.benefit.3.title":`Early access & new releases`,"bundles.joinCta":`Become a member`,"bundles.card.priceLabel":`Retail price`,"bundles.card.memberPrefix":`Members:`,"bundles.card.moreItems":`more`,"ds.bundles.carousel.label":`Bundle carousel`,"ds.bundles.carousel.prev":`Previous bundle`,"ds.bundles.carousel.next":`Next bundle`,"ds.bundles.carousel.goToSlide":`Go to bundle`,"ds.bundleCard.title":`Bundle card`,"ds.bundleCard.description":`Composed card for curated product bundles. Media with optional badge, usage label, title, up to three line items, a price block (retail + member price) and a primary CTA. Two layouts — vertical for grid use and horizontal for carousel slides from md up.`,"ds.bundles.title":`Bundles section`,"ds.bundles.description":`Compound section combining a sticky sidebar (headline + three benefits + member CTA) with a scroll-snap carousel of horizontal bundle cards from md up. Keyboard and touch swipe work natively; the arrow controls loop past the ends.`,"ds.revitalization.title":`Revitalization Center`,"ds.revitalization.description":`Centered feature-teaser section on brand green. Eyebrow badge, display headline with an italic highlight, subheadline, up to three pillar bullets with accent dots and a single CTA. Designed for "coming soon" announcements.`,"ds.about.title":`About / history`,"ds.about.description":`Centered intro plus three milestone cards running the Card primitive's tones left-to-right (paper / cream / brand). The continuous tonal step gives the timeline a clear sense of visual progression.`,"revit.eyebrow":`Coming soon`,"revit.headline.a":`Revitalization`,"revit.headline.em":`Center`,"revit.sub":`A dedicated knowledge universe for NaHCO₃ — science, therapy concepts, and professional application guides. More than a shop.`,"revit.feature.1.title":`Science`,"revit.feature.2.title":`Therapy`,"revit.feature.3.title":`Natural healing`,"revit.notifyCta":`Get early access`,"about.eyebrow":`History & science`,"about.headline":`About Kaiser-Natron®`,"about.sub":`More than 140 years of tradition, purity, and the science behind the difference.`,"about.milestone.1.year":`1881`,"about.milestone.1.title":`The founding`,"about.milestone.1.text":`Arnold Holste founds the company in Bielefeld that brings Kaiser-Natron® into the world — pure sodium bicarbonate at food grade, at a time when chemistry was still a craft.`,"about.milestone.2.year":`Early 1900s`,"about.milestone.2.title":`The icon emerges`,"about.milestone.2.text":`Kaiser-Natron® becomes a household staple across German-speaking countries. Grandmothers swear by its universal power — from baking to cleaning.`,"about.milestone.3.year":`Today`,"about.milestone.3.title":`Premium E500(ii) standard`,"about.milestone.3.text":`Kaiser-Natron® carries the E500(ii) food-grade approval — extra purified, standardised, and batch-tested. The original, as good as ever.`,"ds.search.title":`Product search`,"ds.search.description":`Search trigger on the right of the navbar (left of the language switcher) and bottom-left as a floating button on mobile. Tapping it opens a full-screen overlay on mobile and a centered panel on desktop. The input auto-focuses, the results list updates as you type, and arrow keys / Enter / Esc are supported.`,"ds.search.demo.label":`Open demo`,"ds.search.demo.hint":`Try "Natron", "pulver", "entkalker" or "spray".`,"ds.navbar.title":`Navbar`,"ds.navbar.description":`Logo + nav + cart, in three surface tones. On mobile, the top bar keeps the logo and the menu + cart move to an ergonomic bottom-right floating cluster. The menu opens a full-screen brand-green overlay.`,"ds.navbar.tone":`Navbar tone`,"ds.navbar.tone.paper":`Paper`,"ds.navbar.tone.cream":`Cream`,"ds.navbar.tone.brand":`Brand`,"ds.navbar.layout":`Layout`,"ds.navbar.layout.standard":`Standard`,"ds.navbar.layout.floating":`Floating`,"ds.language.title":`Language switcher`,"ds.language.description":`Compact pill for switching between DE, AT, and EN. Two tones — paper for light surfaces, brand for the brand-green — plus a floating mode that pins to the top-right corner.`,"ds.language.paperNote":`Default tone for light UI surfaces like cards or toolbars.`,"ds.language.creamNote":`Stronger border so the pill keeps definition on warm cream surfaces.`,"ds.language.brandNote":`For use on the brand green — e.g. inside the mobile menu overlay.`,"ds.language.floating":`Floating`,"ds.language.floatingNote":"The `floating` prop docks the pill to the top-right of the viewport (24px offset). This is the exact placement used by the design system chrome.","ds.qtyStepper.title":`Quantity stepper`,"ds.qtyStepper.description":"Compact plus/minus control for picking a quantity. Pill-shaped to sit next to Buttons and Input borders, inherits tone and radius from tokens. Supports `min`/`max` bounds and a disabled state.","ds.qtyStepper.minBoundary":`At min`,"ds.qtyStepper.maxBoundary":`At max`,"ds.cartDrawer.title":`Cart drawer`,"ds.cartDrawer.description":`A side-drawer that slides in from the right on a cream surface. Lists each line with image, size, quantity stepper, and line total; below that, a subtotal and a full-width checkout CTA. Edge-to-edge on mobile, pinned to the right at 440px from md up. Scroll-locks the page, closes on ESC, and dismisses when the backdrop is clicked.`,"ds.cartDrawer.demoLabel":`Populate & open cart`,"ds.cartDrawer.demoHint":`Adds two sample items and opens the drawer.`,"ds.cartDrawer.integrationTitle":`Backend integration`,"ds.cartDrawer.integrationBody":"The component owns no network code — it emits `update-quantity`, `remove`, and `checkout`. Its state comes from the API boundary in `src/api/cart.js`, which is a local implementation today and swaps to the documented endpoints (see `docs/api/cart.md`) without changes above this line."},a={de:n,at:{...n,...r},en:i},o=`kn-locale`,s=`de`,c=[{code:`de`,label:`DE`,name:`Deutsch`},{code:`at`,label:`AT`,name:`Österreich`},{code:`en`,label:`EN`,name:`English`}],l=c.map(e=>e.code),u=typeof localStorage<`u`?localStorage.getItem(o):null,d=t({locale:l.includes(u)?u:s});typeof document<`u`&&(document.documentElement.lang=d.locale);function f(e){!l.includes(e)||d.locale===e||(d.locale=e,typeof localStorage<`u`&&localStorage.setItem(o,e),typeof document<`u`&&(document.documentElement.lang=e))}typeof window<`u`&&window.addEventListener(`storage`,e=>{e.key!==o||!l.includes(e.newValue)||(d.locale=e.newValue,typeof document<`u`&&(document.documentElement.lang=e.newValue))});function p(){return{locale:e({get:()=>d.locale,set:f}),setLocale:f,t:e=>(a[d.locale]||a[s])[e]??a[s][e]??e,availableLocales:c}}export{p as t}; |