From 875e16ec8e908ba98251425de755bc49a027ca47 Mon Sep 17 00:00:00 2001 From: Dorian Date: Wed, 24 Jun 2026 07:54:52 +0100 Subject: [PATCH] feat: shop hero category buttons; remove Revitalization, Austria claim; recat Sport-Profi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brand-owner review follow-ups: - Shop hero (§27): add four skewed, category-coloured jump-buttons under the hero text that smooth-scroll to each section; remove the white gap below the hero so the green flows straight into the first colour banner. - Revitalization (§24): remove the off-brand "Revitalization Center" section from the homepage and strip the dead /#revitalize nav links from all pages. Component + i18n + DS docs kept in reserve. - Sport-Profi (§25): reclassify from care → wash (it's a laundry product). - Origin (§26, G1): remove the "Das Original aus Österreich" / "The original from Austria" sentence from the footer tagline (DE + EN). Docs: STYLE-CHANGES.md §24-27, simple guide, and a new on-brand HTML render STYLE-CHANGES.html (mirrors the review-status page design). dist/ rebuilt. Co-Authored-By: Claude Opus 4.8 (1M context) --- STYLE-CHANGES-simple.md | 25 +- STYLE-CHANGES.html | 861 ++++++++++++++++++ STYLE-CHANGES.md | 80 ++ .../{About-DFXxc7oN.js => About-BuFG0RVN.js} | 0 ...w-_Xm6A04n.js => AboutPreview-Cim4mzz9.js} | 2 +- ...n-BZJn1ZzU.js => AboutSection-lsNL9IW_.js} | 2 +- ...ep-DWPJzEc3.js => AccountStep-BzVGnxgc.js} | 2 +- ...-DJUkCG23.js => BadgesSection-BZ2h1ci8.js} | 2 +- ...ard-Biq7m7Mj.js => BundleCard-BfWZdpfz.js} | 2 +- ...lFQZN.js => BundleCardSection-BWKGpkCb.js} | 2 +- dist/assets/BundlePage-CkFFIGQt.js | 1 - dist/assets/BundlePage-DLIase5g.js | 1 + ...undles-BAyqklFs.js => Bundles-_5YmPDGF.js} | 2 +- ...3Yrmy3Qd.js => BundlesPreview-BuVgmTOg.js} | 2 +- ...B4eP-IyQ.js => BundlesSection-Dk9YIi6p.js} | 2 +- ...Dm3m9I45.js => ButtonsSection-CfdEmsw4.js} | 2 +- .../{Card-CPlQ-6EI.js => Card-kLsGAUqK.js} | 0 ...n-B2ITuruO.js => CardsSection-CSeKRy2S.js} | 2 +- ...wer-BaYH0KvP.js => CartDrawer-Cngidn8v.js} | 2 +- ...dEEzo.js => CartDrawerSection-DXX2DaZC.js} | 2 +- ...tStep-C7O0LbIi.js => CartStep-BEqiUqPh.js} | 2 +- dist/assets/CategoryPage-BDJ31U3Q.js | 1 + dist/assets/CategoryPage-BzFh1vHj.js | 1 - ...e-C-e5Ygz9.js => CheckoutPage-D4JMvPdL.js} | 2 +- ....js => CheckoutStepperSection-B2xZ5FwE.js} | 2 +- ...iL8.js => CheckoutSuccessPage-BMXVqLAp.js} | 2 +- ...-BjLXLYpr.js => ColorsSection-Gg7O__OY.js} | 2 +- ...t-BaKaoH6F.js => DesignLayout-CkqsP6-f.js} | 2 +- ...-CxF-mErd.js => DevicePreview-DSIM4p3o.js} | 0 ...K-.js => ExpressCheckoutMount-DAB1mQHS.js} | 2 +- ...{Footer-D-2MkC07.js => Footer-Bf8Z3dZX.js} | 2 +- ...-ajmXEAcP.js => FooterSection-lYJ6dUnd.js} | 2 +- ...ew-BeD2vGff.js => HeroPreview-CX8cn1Oc.js} | 2 +- ...on-CEWAXWtL.js => HeroSection-CPeUhZ5s.js} | 2 +- dist/assets/HomePage-BrqNzYoT.js | 1 - dist/assets/HomePage-sNl8CtGR.js | 1 + ...n-DtbcJmnJ.js => IconsSection-Bh5-NifE.js} | 2 +- .../{Input-RN3gn2df.js => Input-5nUxUCjS.js} | 0 ...-CdAtkPj_.js => InputsSection-BHnY06A_.js} | 2 +- ...ks-vVxHMG66.js => Kaiserhacks-Dam27FZq.js} | 0 dist/assets/KaiserhacksPage-BpEZ2Cy9.js | 1 - dist/assets/KaiserhacksPage-DbCZWR7x.js | 1 + ...d38v.js => KaiserhacksPreview-UPay9US7.js} | 2 +- ...WtAF.js => KaiserhacksSection-BXo8zNPo.js} | 2 +- ...tmtJbD.js => LanguageSwitcher-C7pqR69B.js} | 2 +- ...js => LanguageSwitcherSection-DTLUFHut.js} | 2 +- dist/assets/LegalPage-C-2UBO8F.js | 1 + dist/assets/LegalPage-ikqn-VQq.js | 1 - dist/assets/LoginPage-C3zxu8Uf.js | 1 - dist/assets/LoginPage-Dh3tGEr3.js | 1 + ...on-DcgZMyPK.js => LogoSection-CDbm3SH4.js} | 2 +- ...-D5scdMVf.js => MotionSection-D5H5nm16.js} | 2 +- ...{Navbar-DiOwyXlV.js => Navbar-DwNrj8mb.js} | 2 +- ...-DfdQYPvW.js => NavbarPreview-Chs-JeVI.js} | 2 +- ...-DCHDy78X.js => NavbarSection-BDpyz51C.js} | 2 +- ...ep-CAeHc6Cq.js => PaymentStep-yEj-Tkja.js} | 2 +- ...rd-BjGgbp3S.js => ProductCard-CPhsIF19.js} | 2 +- ...ge-BukqktWG.js => ProductPage-CH5S7i4W.js} | 2 +- ...a1BZHeP.js => ProductsSection-Ckraq9ne.js} | 2 +- ....js => QuantityStepperSection-DExIiJ6e.js} | 2 +- ...n-rmA1eNVh.js => RadiiSection-B2Aj3Vtg.js} | 2 +- dist/assets/RegisterPage-D7JHmFrZ.js | 1 - dist/assets/RegisterPage-LuvlCIlU.js | 1 + dist/assets/Revitalization-B4uAvZpk.js | 1 - ...css => RevitalizationPreview-B7IsH7WB.css} | 0 dist/assets/RevitalizationPreview-BKzi95sj.js | 1 + dist/assets/RevitalizationPreview-BRtnC8ZF.js | 1 - ...x.js => RevitalizationSection-BzTVNU-2.js} | 2 +- ...{Search-92tcX-Ay.js => Search-DaRk0-US.js} | 2 +- ...-DFlS0qtn.js => SearchSection-oSbIkNyj.js} | 2 +- ...l-XUVs_07L.js => SectionShell-BFBDPrsk.js} | 0 ...DGfBcsEU.js => ShadowsSection-BJ7Wddnf.js} | 2 +- ...p-2BcSMk82.js => ShippingStep-B9XctsHP.js} | 2 +- dist/assets/ShopPage-Bm-iPip3.js | 1 - dist/assets/ShopPage-DVXBfZ9T.js | 1 + ...r4vRf.js => TypographySection-BjedrTN_.js} | 2 +- .../{api-DeBxQCQq.js => api-Co5DNHfG.js} | 2 +- .../{i18n-BkCuZ9ke.js => i18n-Uw3aZfCH.js} | 4 +- dist/assets/index-CBIIwLXM.css | 2 + dist/assets/index-CITsJ6Xp.js | 2 + dist/assets/index-r_9VKCyr.js | 2 - dist/assets/index-ruA6A7hc.css | 2 - ...ducts-CfIXFr2X.js => products-0gaA2Xo6.js} | 2 +- dist/index.html | 4 +- src/api/products.js | 8 +- src/i18n/messages.js | 4 +- src/pages/BundlePage.vue | 1 - src/pages/CategoryPage.vue | 1 - src/pages/HomePage.vue | 50 - src/pages/KaiserhacksPage.vue | 1 - src/pages/LegalPage.vue | 1 - src/pages/LoginPage.vue | 1 - src/pages/ProductPage.vue | 1 - src/pages/RegisterPage.vue | 1 - src/pages/ShopPage.vue | 58 +- 95 files changed, 1074 insertions(+), 152 deletions(-) create mode 100644 STYLE-CHANGES.html rename dist/assets/{About-DFXxc7oN.js => About-BuFG0RVN.js} (100%) rename dist/assets/{AboutPreview-_Xm6A04n.js => AboutPreview-Cim4mzz9.js} (78%) rename dist/assets/{AboutSection-BZJn1ZzU.js => AboutSection-lsNL9IW_.js} (92%) rename dist/assets/{AccountStep-DWPJzEc3.js => AccountStep-BzVGnxgc.js} (96%) rename dist/assets/{BadgesSection-DJUkCG23.js => BadgesSection-BZ2h1ci8.js} (88%) rename dist/assets/{BundleCard-Biq7m7Mj.js => BundleCard-BfWZdpfz.js} (98%) rename dist/assets/{BundleCardSection-CLKlFQZN.js => BundleCardSection-BWKGpkCb.js} (94%) delete mode 100644 dist/assets/BundlePage-CkFFIGQt.js create mode 100644 dist/assets/BundlePage-DLIase5g.js rename dist/assets/{Bundles-BAyqklFs.js => Bundles-_5YmPDGF.js} (98%) rename dist/assets/{BundlesPreview-3Yrmy3Qd.js => BundlesPreview-BuVgmTOg.js} (91%) rename dist/assets/{BundlesSection-B4eP-IyQ.js => BundlesSection-Dk9YIi6p.js} (94%) rename dist/assets/{ButtonsSection-Dm3m9I45.js => ButtonsSection-CfdEmsw4.js} (97%) rename dist/assets/{Card-CPlQ-6EI.js => Card-kLsGAUqK.js} (100%) rename dist/assets/{CardsSection-B2ITuruO.js => CardsSection-CSeKRy2S.js} (93%) rename dist/assets/{CartDrawer-BaYH0KvP.js => CartDrawer-Cngidn8v.js} (96%) rename dist/assets/{CartDrawerSection-C_xdEEzo.js => CartDrawerSection-DXX2DaZC.js} (88%) rename dist/assets/{CartStep-C7O0LbIi.js => CartStep-BEqiUqPh.js} (97%) create mode 100644 dist/assets/CategoryPage-BDJ31U3Q.js delete mode 100644 dist/assets/CategoryPage-BzFh1vHj.js rename dist/assets/{CheckoutPage-C-e5Ygz9.js => CheckoutPage-D4JMvPdL.js} (97%) rename dist/assets/{CheckoutStepperSection-Cjy7CD2L.js => CheckoutStepperSection-B2xZ5FwE.js} (94%) rename dist/assets/{CheckoutSuccessPage-rl9KFiL8.js => CheckoutSuccessPage-BMXVqLAp.js} (95%) rename dist/assets/{ColorsSection-BjLXLYpr.js => ColorsSection-Gg7O__OY.js} (91%) rename dist/assets/{DesignLayout-BaKaoH6F.js => DesignLayout-CkqsP6-f.js} (97%) rename dist/assets/{DevicePreview-CxF-mErd.js => DevicePreview-DSIM4p3o.js} (100%) rename dist/assets/{ExpressCheckoutMount-DP_zQgK-.js => ExpressCheckoutMount-DAB1mQHS.js} (98%) rename dist/assets/{Footer-D-2MkC07.js => Footer-Bf8Z3dZX.js} (97%) rename dist/assets/{FooterSection-ajmXEAcP.js => FooterSection-lYJ6dUnd.js} (90%) rename dist/assets/{HeroPreview-BeD2vGff.js => HeroPreview-CX8cn1Oc.js} (96%) rename dist/assets/{HeroSection-CEWAXWtL.js => HeroSection-CPeUhZ5s.js} (93%) delete mode 100644 dist/assets/HomePage-BrqNzYoT.js create mode 100644 dist/assets/HomePage-sNl8CtGR.js rename dist/assets/{IconsSection-DtbcJmnJ.js => IconsSection-Bh5-NifE.js} (97%) rename dist/assets/{Input-RN3gn2df.js => Input-5nUxUCjS.js} (100%) rename dist/assets/{InputsSection-CdAtkPj_.js => InputsSection-BHnY06A_.js} (88%) rename dist/assets/{Kaiserhacks-vVxHMG66.js => Kaiserhacks-Dam27FZq.js} (100%) delete mode 100644 dist/assets/KaiserhacksPage-BpEZ2Cy9.js create mode 100644 dist/assets/KaiserhacksPage-DbCZWR7x.js rename dist/assets/{KaiserhacksPreview-BpXRd38v.js => KaiserhacksPreview-UPay9US7.js} (85%) rename dist/assets/{KaiserhacksSection-DzxyWtAF.js => KaiserhacksSection-BXo8zNPo.js} (89%) rename dist/assets/{LanguageSwitcher-B0tmtJbD.js => LanguageSwitcher-C7pqR69B.js} (95%) rename dist/assets/{LanguageSwitcherSection-kvQawMdF.js => LanguageSwitcherSection-DTLUFHut.js} (90%) create mode 100644 dist/assets/LegalPage-C-2UBO8F.js delete mode 100644 dist/assets/LegalPage-ikqn-VQq.js delete mode 100644 dist/assets/LoginPage-C3zxu8Uf.js create mode 100644 dist/assets/LoginPage-Dh3tGEr3.js rename dist/assets/{LogoSection-DcgZMyPK.js => LogoSection-CDbm3SH4.js} (94%) rename dist/assets/{MotionSection-D5scdMVf.js => MotionSection-D5H5nm16.js} (97%) rename dist/assets/{Navbar-DiOwyXlV.js => Navbar-DwNrj8mb.js} (96%) rename dist/assets/{NavbarPreview-DfdQYPvW.js => NavbarPreview-Chs-JeVI.js} (91%) rename dist/assets/{NavbarSection-DCHDy78X.js => NavbarSection-BDpyz51C.js} (92%) rename dist/assets/{PaymentStep-CAeHc6Cq.js => PaymentStep-yEj-Tkja.js} (96%) rename dist/assets/{ProductCard-BjGgbp3S.js => ProductCard-CPhsIF19.js} (96%) rename dist/assets/{ProductPage-BukqktWG.js => ProductPage-CH5S7i4W.js} (74%) rename dist/assets/{ProductsSection-Ia1BZHeP.js => ProductsSection-Ckraq9ne.js} (94%) rename dist/assets/{QuantityStepperSection-UDpttUh4.js => QuantityStepperSection-DExIiJ6e.js} (95%) rename dist/assets/{RadiiSection-rmA1eNVh.js => RadiiSection-B2Aj3Vtg.js} (87%) delete mode 100644 dist/assets/RegisterPage-D7JHmFrZ.js create mode 100644 dist/assets/RegisterPage-LuvlCIlU.js delete mode 100644 dist/assets/Revitalization-B4uAvZpk.js rename dist/assets/{Revitalization-B7IsH7WB.css => RevitalizationPreview-B7IsH7WB.css} (100%) create mode 100644 dist/assets/RevitalizationPreview-BKzi95sj.js delete mode 100644 dist/assets/RevitalizationPreview-BRtnC8ZF.js rename dist/assets/{RevitalizationSection-BEZb5QGx.js => RevitalizationSection-BzTVNU-2.js} (89%) rename dist/assets/{Search-92tcX-Ay.js => Search-DaRk0-US.js} (98%) rename dist/assets/{SearchSection-DFlS0qtn.js => SearchSection-oSbIkNyj.js} (90%) rename dist/assets/{SectionShell-XUVs_07L.js => SectionShell-BFBDPrsk.js} (100%) rename dist/assets/{ShadowsSection-DGfBcsEU.js => ShadowsSection-BJ7Wddnf.js} (87%) rename dist/assets/{ShippingStep-2BcSMk82.js => ShippingStep-B9XctsHP.js} (96%) delete mode 100644 dist/assets/ShopPage-Bm-iPip3.js create mode 100644 dist/assets/ShopPage-DVXBfZ9T.js rename dist/assets/{TypographySection-DAWr4vRf.js => TypographySection-BjedrTN_.js} (93%) rename dist/assets/{api-DeBxQCQq.js => api-Co5DNHfG.js} (98%) rename dist/assets/{i18n-BkCuZ9ke.js => i18n-Uw3aZfCH.js} (98%) create mode 100644 dist/assets/index-CBIIwLXM.css create mode 100644 dist/assets/index-CITsJ6Xp.js delete mode 100644 dist/assets/index-r_9VKCyr.js delete mode 100644 dist/assets/index-ruA6A7hc.css rename dist/assets/{products-CfIXFr2X.js => products-0gaA2Xo6.js} (99%) diff --git a/STYLE-CHANGES-simple.md b/STYLE-CHANGES-simple.md index 1772bdc..a93efec 100644 --- a/STYLE-CHANGES-simple.md +++ b/STYLE-CHANGES-simple.md @@ -43,9 +43,12 @@ - **"AI Edited" note on bundle images.** The bundle photos that were AI-assisted now carry a small, honest "AI Edited" caption. (These can be switched off the moment real photographs replace them.) -- **Revitalization section simplified.** The off-brand animated icon row and the - "get early access" prompt were removed; it now shows just the heading and - intro text. +- **Revitalization section removed.** The off-brand "Revitalization Center" + section (icons + name the owner flagged) is taken off the site for now. It's + kept in reserve and can return with a corrected name later. +- **"The Original from Austria" removed.** That claim is gone from the footer + tagline (German + English), which now just describes pure natron for the + kitchen, home and care. - **Membership fully removed.** There's no membership programme, so every trace of one is gone: the "become a member" button, the lower "member price", and the member-perks wording. **Bundles now show a single price** everyone pays, @@ -59,9 +62,15 @@ - **Küche / Kitchen** — lime green (baking, cooking, digestion) - **Reinigung / Clean** — grapefruit red (household cleaning) - **Wäsche / Wash** — plum (laundry & textile care) - - **Pflege / Care** — orange (bath, body, sport) + - **Pflege / Care** — orange (bath, body) - **Banners.** Each section opens with a full-width colour banner showing its star product, with an "add to cart" and a "learn more" button. +- **Quick category buttons.** Under the shop's main heading there's now a row of + angled buttons — one per category, each in its own colour — that smoothly + scroll you down to that section. The green header now flows straight into the + first coloured section (the little white gap is gone). +- **Sport Profi moved to Laundry.** It's a laundry product, so it now sits under + Wäsche / Wash instead of Care. ## Category pages @@ -77,9 +86,11 @@ ## Still waiting on a decision (content owner) -- **Origin wording** — the real brand is German (Bielefeld); the site currently - frames it as Austrian. Needs your correct origin claim. -- **Membership pricing/wording** — keep it and reword, or remove entirely? +- **Remaining origin wording** — the "Original from Austria" line is gone, but a + couple of "bottled in Austria" mentions and the Vienna imprint address remain. + Let us know if the correction should extend to those. - **Holste & Linda product descriptions** — these aren't on the brand site, so the copy needs to come from you. - **Wäsche / Wash landing page** — provide copy if you want a dedicated page. +- **Legal pages** — Terms (AGB), withdrawal/cancellation, shipping, delivery + costs, and the manufacturer-vs-reseller transparency note. diff --git a/STYLE-CHANGES.html b/STYLE-CHANGES.html new file mode 100644 index 0000000..896e4ec --- /dev/null +++ b/STYLE-CHANGES.html @@ -0,0 +1,861 @@ + + + + + +Kaiser-Natron® — Restyle Change Log (Developer Handoff) + + + + +
+
+

Developer Handoff · Restyle Change Log

+

Kaiser-Natron® restyle —
every change, documented

+

A plain-language summary of every visual change in this restyle pass — the exact file, what changed, and the CSS / Tailwind classes involved. Organised by theme so you can review one concern at a time.

+

Updated 24 June 2026 · Branch feat/shop-category-sections · 27 changes

+
+
+ +
+ +
+

The design system is token-driven: colours, fonts, and sizes live as CSS custom properties in src/design-system/tokens.css (consumed by Tailwind v4 via @theme). Most colour changes happen there once and cascade everywhere.

+

This log records only the latest final state of each item — the file, what it is now, and the token/class — not the iterations it took to get there.

+
+ + + + + +
+
§1

New brand colours (design tokens)

+
src/design-system/tokens.css
+
+

Two new colours were introduced and two existing ones repurposed.

+ + + + + + + + + +
TokenValueMeaning
--color-accent-fill#cc0230Crimson — the new fill for all solid CTA buttons, pills and chips
--color-accent-fill-hoveroklch(accent-fill − 12% black)Darker crimson for hover
--color-accent-fill-ink#ffffffWhite — the text/icon colour that sits on crimson
--color-highlight#6eceb2Mint — hover/active state for nav tabs and footer links
--color-accent#e9c84b (unchanged)Old warm yellow — now only used as the token behind a few non-button accents
+
/* tokens.css — added */
+--color-accent-fill: #cc0230;
+--color-accent-fill-hover: color-mix(in oklch, var(--color-accent-fill), black 12%);
+--color-accent-fill-ink: #ffffff;
+
+--color-highlight: #6eceb2;
+

Because these are registered in @theme, Tailwind auto-generates the utility classes bg-accent-fill, text-accent-fill-ink, border-accent-fill, hover:bg-accent-fill-hover, and text-highlight / hover:text-highlight.

+
+
+ + +
+
§2

Pages are pure white

+
src/design-system/tokens.cssindex.html
+
+

The two off-white page surfaces were set to pure white. Everything that paints a page background (bg-cream, bg-surface) and the cream-coloured logo (text-cream) followed automatically.

+
/* before → after */
+--color-cream:   #f4efe4;  →  #ffffff;
+--color-surface: #faf7f1;  →  #ffffff;
+

index.html — the browser theme colour was matched to white:

+
<meta name="theme-color" content="#ffffff" />   <!-- was #faf7f1 -->
+
+
+ + +
+
§3

Typeface → Zeitung (self-hosted)

+
src/design-system/tokens.csssrc/assets/styles.csssrc/assets/fonts/index.html
+
+

All text now uses Zeitung, self-hosted (no external font CDN). The licensed .woff2 files were mirrored from the production site into src/assets/fonts/ (Regular 400 + Bold 700 — the only two weights that exist; the browser synthesises intermediate weights and there are no italics).

+
/* tokens.css */
+--font-serif: 'Zeitung', ui-sans-serif, system-ui, -apple-system, Arial, sans-serif;
+--font-sans:  'Zeitung', ui-sans-serif, system-ui, -apple-system, Arial, sans-serif;
+
/* styles.css — added @font-face */
+@font-face { font-family:'Zeitung'; font-weight:400; font-display:swap;
+  src:url('./fonts/Zeitung-Regular.woff2') format('woff2'); }
+@font-face { font-family:'Zeitung'; font-weight:700; font-display:swap;
+  src:url('./fonts/Zeitung-Bold.woff2') format('woff2'); }
+

index.html — the Google Fonts <link> (Fraunces + DM Sans) and its preconnect hints were removed.

+
+
+ + +
+
§4

Buttons

+
src/design-system/components/Button.vue
+
+

Button.vue is the single source of truth for buttons. Variants are picked with <Button variant="…">.

+

4a. Text style — uppercase, 14px

+
// base string — added `uppercase`
+'... font-sans font-semibold uppercase ...'
+
+// sizes — text set to 14px across the board
+sm: 'text-[14px] px-[18px] py-[9px] tracking-label',
+md: 'text-[14px] px-[26px] py-[13px] tracking-label',
+lg: 'text-[14px] px-[34px] py-[17px] tracking-label',
+

4b. Variant colours

+ + + + + + + + +
VariantBeforeAfter
primary (green button)green fill, yellow textgreen fill, white text — bg-brand text-white border-brand
accent (main CTA)yellow fill, green textcrimson fill, white text — bg-accent-fill text-accent-fill-ink border-accent-fill
secondaryoutlinecrimson fill, white text (same as accent)
ghost / dangerunchangedunchanged
+
ℹ️

Note: secondary and accent are currently identical (both crimson). The Hero's "Learn more" secondary CTA (rendered inline, see §5) was matched to the same crimson fill.

+
+
+ + +
+
§5

Hero call-to-action buttons

+
src/design-system/components/Hero.vue
+
+

The Hero renders its secondary CTA inline (not via <Button>), so it has to be styled directly. On brand-green heroes it is now crimson fill + white text, uppercase, 14px:

+
class="… rounded-pill border border-accent-fill bg-accent-fill px-[34px] py-[17px]
+       text-[14px] font-semibold uppercase tracking-label text-accent-fill-ink
+       transition-colors duration-base hover:bg-accent-fill-hover"
+

The Hero's primary CTA already uses the accent variant on green surfaces, so it's crimson too.

+
+
+ + +
+
§6

"Add to cart" buttons are crimson

+
src/design-system/components/ProductCard.vuesrc/design-system/components/BundleCard.vuesrc/pages/ShopPage.vuesrc/pages/ProductPage.vuesrc/pages/BundlePage.vue
+
+

Every add-to-cart button is now the crimson accent variant.

+ + + + + + + + + +
FileChange
ProductCard.vuectaVariant prop default 'primary''accent'
BundleCard.vueadd-to-cart <Button> variant="primary""accent"
ShopPage.vueproduct grid :cta-variant="… 'accent' : 'primary'"cta-variant="accent" (no more alternating)
ProductPage.vuemain add-to-cart already accent (unchanged)
BundlePage.vueadd-to-cart already accent (unchanged)
+
+
+ + +
+
§7

Cart checkout button is crimson

+
src/design-system/components/CartDrawer.vue
+
+
<!-- checkout button -->
+<Button variant="accent" …>   <!-- was variant="primary" -->
+
+
+ + +
+
§8

Other solid pills/chips → crimson + white

+
IconButton.vueLanguageSwitcher.vueNavbar.vueKaiserhacks.vueBadge.vueAbout.vue
+
+

All previously-yellow solid fills now use the crimson token pair bg-accent-fill + text-accent-fill-ink.

+ + + + + + + + + + +
FileElement
IconButton.vueaccent variant (cart icon button)
LanguageSwitcher.vueactive language pill (all 3 tones)
Navbar.vuemobile cart CTA pill
Kaiserhacks.vuevideo play chip
Badge.vueaccent badge variant
About.vue"HISTORY & SCIENCE" eyebrow (Badge variant="brand""accent") and the "TODAY" timeline pill (.pill-accent CSS now crimson + white)
+
/* About.vue — .pill-accent (the "TODAY" pill) */
+.pill-accent {
+  background: var(--color-accent-fill);
+  color: var(--color-accent-fill-ink);
+  border-color: var(--color-accent-fill);
+}
+
+
+ + +
+
§9

Mint highlight on nav tabs & footer links

+
src/design-system/components/Navbar.vuesrc/design-system/components/Footer.vue
+
+

The hover/active highlight on the brand-green navbar (and the brand footer links) changed from yellow to mint via the new --color-highlight token:

+
text-accent       →  text-highlight        (active nav tab)
+hover:text-accent →  hover:text-highlight   (nav tab + footer link hover)
+
ℹ️

Not changed: the mobile cart-count number badge (Navbar.vue, a green circle with a count) is still yellow — it's a count indicator, not a tab highlight. Easy to switch if wanted.

+
+
+ + +
+
§10

Yellow "highlight" removed from hero text & titles

+
src/pages/HomePage.vueCategoryPage.vueProductPage.vueShopPage.vueBrandHero.vueRevitalization.vueKaiserhacks.vue
+
+

The italic emphasis words inside hero/section headlines, and the small eyebrow labels above them, were yellow. They now match the surrounding white hero text.

+ + + + + + + +
FileChange
HomePage.vue, CategoryPage.vue, ProductPage.vue, ShopPage.vueheadline <em> emphasis: text-accent-softtext-cream
BrandHero.vue, Revitalization.vuesame emphasis swap
CategoryPage.vue, ShopPage.vue, Kaiserhacks.vuehero eyebrows: text-accenttext-cream/75
+

(--color-cream is now #ffffff, so these read as white on the green heroes.)

+
+
+ + +
+
§11

Section dividers: wave → diagonal

+
src/design-system/components/WaveDivider.vuesrc/pages/HomePage.vuesrc/design-system/components/Kaiserhacks.vue
+
+

The soft S-curve between coloured sections became a straight diagonal that sits low on the left, high on the right, and the divider band was doubled in height so the slope is roughly twice as steep.

+
height:   h-12 md:h-16   →  h-24 md:h-32   (48/64px → 96/128px)
+viewBox:  0 0 1440 64    →  0 0 1440 128
+path:     (cubic-bézier wave)  →  M0,0 L0,116 L1440,12 L1440,0 Z
+

The seam-free construction is unchanged: a full-height <rect> paints the lower section colour and the <path> paints the upper section colour.

+

The same diagonal divider also sits between the Kaiserhacks green header and the white body below it: Kaiserhacks.vue imports WaveDivider and renders <WaveDivider from="brand" to="surface" /> between the bg-brand header and the content <div> (which gains -mt-px to sit flush).

+
+
+ + +
+
§12

Search dropdown prices → white (on green)

+
src/design-system/components/Search.vue
+
+

In the search overlay, the price labels on the brand-green tone were yellow. They are now white to match the rest of the green-surface text:

+
// brand tone
+price: 'text-accent'  →  'text-cream'   // (#ffffff on green)
+

The paper and cream tones keep text-brand (unchanged).

+
+
+ + +
+
§13

Brand-hero intro artwork → official brand assets

+
src/design-system/components/BrandHero.vuesrc/components/heroFigures.jssrc/assets/brand/{hebe,waterfall}.svg
+
+

The home-page intro animation (the in-flow figure entrance — the full-screen SplashIntro overlay was already retired) previously used hand-traced approximations of the woman + waterfall. It now uses the official Kaiser-Natron brand vectors: the Ikone ("Hebe") and the Waterfall (2021 Druckdaten-Final), converted from EPS to SVG.

+
    +
  • Source SVGs live in src/assets/brand/ for provenance; the extracted path data lives in src/components/heroFigures.js (ladyMint, ladyWhite, waterfall).
  • +
  • Dark outline removed — the brand icon's #006648 outline tone is dropped; the figures render as flat mint silhouettes, matching the established splash aesthetic. Mint tones: lady #72c1ad, waterfall #6eceb2; natron handful #ffffff.
  • +
  • Composition — shared 0 0 2760 3624 viewBox: the lady at the origin (native 1828×3624), the waterfall half-scale (scale(0.5)) to her right and vertically centred against her (translate(1793,1310)).
  • +
  • Animation unchanged — same choreography/timing: lady slides in from the left (left-m), waterfall from the right (right-m), the white natron fades in once she's landed (mound-m), tagline + SINCE 1881 last; same edge-feather mask and reduced-motion handling.
  • +
+
ℹ️

Side effect: the home-page chunk shrank ~214 KB → ~70 KB because the new heroFigures.js (~57 KB) replaces the much larger traced splashPaths.js import. splashPaths.js / SplashIntro.vue remain only as unused legacy.

+
+
+ + +
+
§14

Product image — 250 g Großpackung box recoloured

+
public/products/kaiser-natron-pulver-250-g-grosspackung.webpdist/products/…
+
+

The 250 g box product shot had a muted, grey/pine green that didn't match the brighter brand green of the other Kaiser-Natron powder packs (e.g. the 50 g sachet public/products/kaiser-natron-pulver-50-g-beutel.webp). It was replaced with an updated box render carrying the correct vivid brand green (the dark-green 3-D side panels and the red bottom band are intact).

+
    +
  • Where product images live: public/products/*.webp (served as static assets; the build mirrors them to dist/products/*.webp). Convention: transparent RGBA, ~1200 px tall.
  • +
  • The replacement was supplied as a 939×1200 transparent PNG and saved straight to WebP (quality 92, no scaling needed — already matching the original dimensions), so edges/text stay crisp.
  • +
+
+
+ + +
+
§15

Design-system docs page

+
src/pages/design/ColorsSection.vue
+
+

The new accent-fill, accent-fill-hover, accent-fill-ink tokens were added to the colour-swatch reference so the in-app design-system page stays accurate.

+
+
+ + +
+
§16

Brand name — ® trademark + hyphenation pass

+
src/i18n/messages.jssrc/api/products.jssrc/design-system/components/Logo.vuesrc/design-system/components/Navbar.vue
+
+

The brand name is now written Kaiser-Natron® consistently — hyphenated, with the ® mark — on every visible mention. Two problems were fixed:

+
    +
  • Missing ® — display headlines, CTAs, the bundle line-item lists and the product brand field carried no trademark mark. (The long Kaiserhacks recipe copy and the product title fields already had Kaiser-Natron® and were left as-is.)
  • +
  • Spelling drift — the English locale (and one German headline) used the un-hyphenated Kaiser Natron. All standardised to the hyphenated form.
  • +
+ + + + + + + + +
FileWhat changed
src/i18n/messages.jsshop.headline, ds.hero.headline.a, home.banner.sub, home.brand.headline.a, home.teaser.cta, and the bundle.*.items.* lists — de and en — now read Kaiser-Natron®
src/api/products.jsbrand: 'Kaiser-Natron''Kaiser-Natron®' (all 11 products; shown in search results via Search.vue)
src/design-system/components/Logo.vuedefault accessible title prop 'Kaiser Natron''Kaiser-Natron®'
src/design-system/components/Navbar.vuelogo link aria-label 'Kaiser Natron home''Kaiser-Natron home'
+
ℹ️

Not touched: generic ingredient references ("Natron", "Natronwasser", "Natron-basierte …") — those mean the substance, not the brand, so they take no ®. Image alt text keeps the plain hyphenated name (not on-screen).

+
+
+ + +
+
§17

Hero headline copy — versatility, not "shine"

+
src/i18n/messages.js
+
+

The product-hero headline (ds.hero.headline.*, de + en) was reworded from a generic cleaning-shine line to the brand's own versatility voice (drawn from kaiser-natron.de — "Die Verwendungsmöglichkeiten … sind beinah grenzenlos"). The three-part split (a / emphasised em / b) is unchanged; only the words changed.

+
DE  "Kaiser-Natron®  für alles  was glänzen soll."
+ →  "Kaiser-Natron®  für fast  alles im Alltag."
+
+EN  "Kaiser-Natron®  for everything  that should shine."
+ →  "Kaiser-Natron®  for almost  anything at home."
+
+
+ + +
+
§18

Bundle artwork — "AI Edited" disclosure (L5 + L6)

+
src/api/bundles.jsBundleCard.vueBundles.vuesrc/pages/HomePage.vuesrc/pages/BundlePage.vue
+
+

The bundle images are AI-composed. Rather than replace them, each is now marked with a small, faint "AI Edited" caption in the bottom-right of the image, so the AI origin is disclosed. It's data-driven, so it disappears automatically once real photography replaces a given image.

+
    +
  • bundles.js — each bundle record gains aiEdited: true.
  • +
  • BundleCard.vue — new aiEdited Boolean prop; when true, renders the overlay span inside the media area (both the card-link and plain-media branches).
  • +
  • Bundles.vue — passes :ai-edited="bundle.aiEdited" to all four BundleCard instances (mobile + grid + sidebar + carousel).
  • +
  • HomePage.vue / BundlePage.vue — carry aiEdited through to the rendered records; BundlePage renders the same overlay on its large hero image (desktop + mobile).
  • +
+
<span class="pointer-events-none absolute bottom-0 right-0 z-[1] px-2 py-0.5
+  text-[10px] font-medium uppercase tracking-label text-white/55
+  drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]">AI Edited</span>
+
ℹ️

Set a bundle's aiEdited: false (or drop it) in bundles.js to remove the badge once its image is a real photo.

+
+
+ + +
+
§19

Revitalization section — animation row + CTA removed (L10)

+
src/pages/HomePage.vue
+
+

The Revitalization section was stripped back. Removed entirely:

+
    +
  • the three-pillar feature row with the spinning orbit animations (the emoji icons ⚗️💊🌿 were off-brand; the brand owner wanted the whole row gone), and
  • +
  • the "early access" CTA button (revit.notifyCta — "Get early access" / "Early Access sichern").
  • +
+

This is done at the usage site, not the component: revitCopy no longer passes features or notifyCta, and the :features / :notify-cta / @notify bindings (and the orphaned onRevitNotify handler) were removed. The section now renders eyebrow + headline + sub only.

+

Revitalization.vue is unchanged and still reusable — its v-if="features.length" and v-if="notifyCta" guards simply render nothing when those props are absent. The unused revit.feature.* / revit.notifyCta i18n keys are left in place (harmless) in case the section is restored.

+
+
+ + +
+
§20

Shop page category banners + colours + Küche page (L8/U4)

+
src/design-system/tokens.cssHero.vuesrc/pages/ShopPage.vuesrc/router/index.jssrc/pages/CategoryPage.vuesrc/i18n/messages.js
+
+

On the shop page, the catalogue is split into four use-group sections, each fronted by a full-width colour banner in the brand's own use-group colour (sourced from kaiser-natron.de), with diagonal dividers carrying the colour in and back out to the neutral product grid below. (The home page was left unchanged — it keeps its 3-card ProductTeaser.)

+

Four sections + colours (design tokens)

+

tokens.css — the old "Haushalt" lump was split into Clean (cleaning) and Wash (laundry):

+
+
Kitchen · lime#c6d47d
+
Clean · grapefruit#eb5a61
+
Wash · plum#c15a7e
+
Care · orange#f1864c
+
+ + + + + + + + +
TokenHexSectionProducts
--color-cat-kitchen#c6d47d (lime)Küche / cookPulver, Tabletten
--color-cat-clean#eb5a61 (grapefruit)Reinigung / cleancleaners, sprays, descalers
--color-cat-wash#c15a7e (plum)Wäsche / washwash-soda, starch, stain removers
--color-cat-care#f1864c (orange)Pflege / carebath, foot-bath, sport
+

Tailwind v4 auto-emits bg-cat-kitchen / bg-cat-clean / bg-cat-wash / bg-cat-care.

+

Product grouping

+

src/api/products.jsUSE_CASES is now ['cook','clean','wash','care']; Wäsche maps to the new wash group (was clean). productsByUseCase returns all four buckets.

+

Hero tones

+

Hero.vue has kitchen / clean / wash / care tones. Lime keeps dark ink text; the other three take cream (white) text. Each sets an eyebrowColor applied inline (overrides the global .eyebrow { color: muted }). WaveDivider.vue gained matching kitchen / clean / wash / care tones.

+

Shop page

+

ShopPage.vue loops the four use-cases; each renders WaveDivider → <Hero :tone="section.cat"> (hero product + mixed-font heading + CTAs) → WaveDivider → a section title + product grid. CAT_TONE maps cook→kitchen, clean→clean, wash→wash, care→care; CAT_HERO_ID picks the headline product (Pulver / Allzweck-Spray / Daunenwasch / Bad). A per-section title (shop.section.<id>.products.title) now sits above each grid.

+

Banner CTAs

+

Each banner carries two buttons (via the Hero #actions slot): "add to cart" in the brand crimson (Button variant="accent", adds the section's hero product) and "learn more" as a white-outline ghost (border-white/90 text-white, links to the product page).

+
⚠️

The white-outline "learn more" reads well on the saturated grapefruit / plum / orange banners but is low-contrast on the light lime (Kitchen) banner — may want a dark-outline variant there.

+

Shop first fold — halved

+

The green title fold was min-h:calc(100svh − nav) but only holds a compact title band, leaving too much empty green. Reduced to calc(50svh − var(--nav-h)). A diagonal then drops into a thin white band (h-6 md:h-10) before the first colour banner, so the green hero and the lime Kitchen banner don't butt directly together.

+

Küche category page (new, separate from the shop sections)

+

Added for parity with /haushalt + /pflege:

+
    +
  • router/index.js — new /kueche route → CategoryPage { slug: 'kueche', useCase: 'cook' }.
  • +
  • CategoryPage.vueslug validator allows kueche; useCase allows cook.
  • +
  • messages.js — full category.kueche.* copy (de + en), mirroring pflege/haushalt.
  • +
+
ℹ️

Resolved (see §21). The three content-complete category pages (/kueche, /haushalt, /pflege) are now wired into the footer. /waesche (wash) is intentionally deferred pending brand copy — the shop's in-page wash section covers laundry in the meantime.

+
+
+ + +
+
§21

Category pages wired up + naming aligned to shop sections

+
src/design-system/components/Footer.vuesrc/i18n/messages.js
+
+

Decision. Of the four use-groups, the three with complete copy (cook/clean/care/kueche, /haushalt, /pflege) are kept as standalone landing pages alongside the shop's in-page sections, and linked from the footer. The wash group has no standalone page (/waesche) yet — deferred until brand copy is supplied; the shop's wash section covers laundry meanwhile.

+

Footer links. Footer.vue exploreLinks now lists Shop → Küche → Haushalt → Pflege → Bundles → About (the /kueche link was previously missing — page was reachable only by direct URL). Order follows the shop's use-group order.

+

Naming aligned to the shop. The footer link labels and the category-page eyebrows now use the shop's plain section names (shop.feature.*) instead of the older descriptive variants, so a section and its landing page read identically:

+ + + + + + + +
Page (route)use-caseeyebrow + footer label — DE / ENwas
/kuechecookKüche / Kitchen"Küche & Backen" / "Kitchen & baking"
/haushaltcleanReinigung / Clean"Haushalt & Reinigung" / "Home & cleaning"
/pflegecarePflege / Care"Pflege & Wohlbefinden" / "Personal care & wellbeing"
+

Route slugs are unchanged (/haushalt still serves the clean group); only the visible labels/eyebrows moved to the new names.

+
+
+ + +
+
§22

Membership removed — bundles are single-price (U2)

+
src/api/bundles.jsBundleCard.vueBundles.vueBundlePage.vueHomePage.vuesrc/i18n/messages.jsBundleCardSection.vueBundlesSection.vuepreviews/BundlesPreview.vue
+
+

There is no membership programme, so every trace of one was removed (the join button went earlier in §U2; this completes it). Decision: single retail price — bundles now show only their regular price (e.g. €24,90); the old lower memberPrice was dropped entirely (no discount remains).

+
    +
  • Data. bundles.jsmemberPrice deleted from all three bundles.
  • +
  • BundleCard.vue — removed the memberPrice prop, the memberLabel computed, and the "Mitglieder: €X" line under the price.
  • +
  • Bundles.vue — removed all four :member-price bindings, the joinCta prop, the join emit, both "become a member" buttons (stacked + sidebar), and the now-unused Button import. Stale "why join" / "member pitch" comments reworded to "why bundle".
  • +
  • BundlePage.vue — removed the memberPriceLabel computed and the member price line in both desktop and mobile hero blocks.
  • +
  • HomePage.vue — dropped memberPrice from the localized-bundle mapping.
  • +
  • Copy (messages.js). Deleted orphaned keys bundle.memberPrice, bundles.joinCta, bundles.card.memberPrefix. bundles.card.priceLabel → "Preis" / "Price" (was "Verkaufspreis" / "Retail price"). The section subtitle + three benefits were rewritten from membership perks to bundle value (no savings claim, since the price is now flat): +
      +
    • sub: "Kuratierte Sets … in einem Paket." / "Curated sets … in a single pack."
    • +
    • benefits: Aufeinander abgestimmt · Alles für einen Bereich · In einer Lieferung (EN: Chosen to work together · Everything for one area · In a single delivery).
    • +
    • ds.bundleCard.description / ds.bundles.description updated to drop the member-price / member-CTA mentions.
    • +
    +
  • +
+

The headline.em stays "Vorteile / Benefits" — it now reads as the bundles' advantages rather than membership perks.

+
+
+ + +
+
§23

Second-fold banner image — powder, not bath (L7)

+
src/pages/HomePage.vue
+
+

The cream second-fold banner reads "Ein Pulver, hundert Anwendungen im Haushalt" / "One powder, a hundred uses around the home" but showed the Bad 500 g (bath) product — and its add-to-cart + "learn more" link pointed there too, contradicting the powder message. Repointed the whole banner to powder:

+
    +
  • imgBanner/products/kaiser-natron-pulver-3.490-g-eimer.webp (the bulk bucket — visually reinforces "a hundred uses"; deliberately not the 250 g Großpackung, which is already the first-fold hero).
  • +
  • bannerProductIdkaiser-natron-pulver-3490-g-eimer, so the CTA adds the powder and "learn more" links to /shop/kaiser-natron-pulver-3490-g-eimer.
  • +
  • image-alt → "Kaiser-Natron® Pulver 3.490 g Eimer".
  • +
+

No new asset needed — the bucket image already shipped in public/products/.

+
+
+ + +
+
§24

Revitalization section removed from the homepage

+
src/pages/HomePage.vueShopPage.vueCategoryPage.vueBundlePage.vueProductPage.vueKaiserhacksPage.vueLoginPage.vueRegisterPage.vueLegalPage.vue
+
+

The brand owner flagged the "Revitalization Center" name + icons as off-brand. Removed the section from the public site for now:

+
    +
  • HomePage.vue — removed the <Revitalization> block and the two diagonal SVG dividers that bracketed it (the cream banner now flows straight into the cream About section), plus the Revitalization import and the revitCopy computed.
  • +
  • Stripped the now-dead { key: 'nav.revitalization', href: '/#revitalize' } entry from every page's nav array (9 files) so nothing links to the missing anchor.
  • +
+

Kept in reserve (not deleted): Revitalization.vue, its design-system docs page, the revit.* i18n keys, and the /design/preview/revitalization route — so the section can be reinstated (with a corrected name) by re-adding the import, revitCopy, the render block, and the nav entries.

+
+
+ + +
+
§25

Sport-Profi recategorised to Laundry (Wäsche)

+
src/api/products.js
+
+

Brand-owner review: Sport Profi is a laundry product and belongs under Household, not Bathing & Care. In the four-group taxonomy laundry = wash, so USE_CASE_BY_CATEGORY.Sport changed 'care''wash'. The kaiser-natron-sport-profi-250-ml product now appears in the Wäsche / wash (plum) section instead of Pflege / care. Doc comment updated to match.

+
+
+ + +
+
§26

"Das Original aus Österreich" removed (G1)

+
src/i18n/messages.js
+
+

Brand-owner review: the "Original from Austria" claim is inaccurate. Removed the leading sentence from footer.tagline (DE + EN); the tagline now opens at "Reines Natron für Küche, Haushalt und Pflege …" / "Pure sodium bicarbonate for the kitchen, the home, and personal care …".

+
ℹ️

Other Austria-flavoured strings remain and are separate decisions, not part of this change: footer.madeIn / product.prop.made-in-austria ("In Österreich abgefüllt" / "Bottled in Austria") and the Impressum/Datenschutz Vienna address. Flag to the user if the origin correction should extend to these.

+
+
+ + +
+
§27

Shop hero — skewed category jump-buttons + white gap removed

+
src/pages/ShopPage.vue
+
+

Jump-buttons. Under the shop hero's title + sub, a row of four skewed parallelogram buttons (one per use-group, each filled with its own category colour) smooth-scrolls to the matching section:

+
+
Küche / Kitchendark ink label
+
Reinigung / Cleanwhite label
+
Wäsche / Washwhite label
+
Pflege / Carewhite label
+
+
    +
  • Rendered by looping sections; label is section.feature.
  • +
  • Shape: -skew-x-12 on the button with a counter-skew skew-x-12 on the inner <span> so the text stays upright — echoes the angled (Soulmates) CI.
  • +
  • Colour map CAT_BTN: bg-cat-kitchen text-brand (lime is light → dark ink), the other three bg-cat-* text-white.
  • +
  • scrollToSection(id) calls el.scrollIntoView({ behavior: 'smooth' }); each section's existing scroll-mt keeps the landing just below the sticky nav.
  • +
+

White gap removed. The thin white band (-mt-px h-6 md:h-10 bg-cream) and its preceding WaveDivider from="brand" to="cream" — added in §20 — are gone. The green hero now flows straight into the first colour banner via a single diagonal: the section loop is (section, i) and the first divider is :from="i === 0 ? 'brand' : 'cream'".

+
+
+ + +
+

Quick reference — the two new colours

+
+
+
Crimson#cc0230
+
Mint#6eceb2
+
White#ffffff
+
+
Crimson  #cc0230   — all buttons / CTAs / solid pills (with #ffffff text)
+Mint     #6eceb2   — nav tab + footer link hover/active highlight
+White    #ffffff   — page backgrounds (cream + surface) and button text on green
+
+
+ +
+ Kaiser-Natron® — developer change log + 27 documented changes · feat/shop-category-sections +
+ +
+ + diff --git a/STYLE-CHANGES.md b/STYLE-CHANGES.md index 73f0108..8ba9b4f 100644 --- a/STYLE-CHANGES.md +++ b/STYLE-CHANGES.md @@ -589,6 +589,86 @@ No new asset needed — the bucket image already shipped in `public/products/`. --- +## 24. Revitalization section removed from the homepage + +**Files:** `src/pages/HomePage.vue`, plus nav arrays in `ShopPage.vue`, +`CategoryPage.vue`, `BundlePage.vue`, `ProductPage.vue`, `KaiserhacksPage.vue`, +`LoginPage.vue`, `RegisterPage.vue`, `LegalPage.vue`. + +The brand owner flagged the "Revitalization Center" name + icons as off-brand. +Removed the section from the public site **for now**: + +- `HomePage.vue` — removed the `` block and the two diagonal + SVG dividers that bracketed it (the cream banner now flows straight into the + cream About section), plus the `Revitalization` import and the `revitCopy` + computed. +- Stripped the now-dead `{ key: 'nav.revitalization', href: '/#revitalize' }` + entry from every page's nav array (9 files) so nothing links to the missing + anchor. + +Kept in reserve (not deleted): `Revitalization.vue`, its design-system docs +page, the `revit.*` i18n keys, and the `/design/preview/revitalization` route — +so the section can be reinstated (with a corrected name) by re-adding the import, +`revitCopy`, the render block, and the nav entries. + +--- + +## 25. Sport-Profi recategorised to Laundry (Wäsche) + +**File:** `src/api/products.js` + +Brand-owner review: *Sport Profi is a laundry product and belongs under +Household, not Bathing & Care.* In the four-group taxonomy laundry = `wash`, so +`USE_CASE_BY_CATEGORY.Sport` changed `'care'` → `'wash'`. The +`kaiser-natron-sport-profi-250-ml` product now appears in the **Wäsche / wash** +(plum) section instead of Pflege / care. Doc comment updated to match. + +--- + +## 26. "Das Original aus Österreich" removed (G1) + +**File:** `src/i18n/messages.js` + +Brand-owner review: the "Original from Austria" claim is inaccurate. Removed the +leading sentence from `footer.tagline` (DE + EN); the tagline now opens at +*"Reines Natron für Küche, Haushalt und Pflege …"* / *"Pure sodium bicarbonate +for the kitchen, the home, and personal care …"*. + +> ℹ️ Other Austria-flavoured strings remain and are separate decisions, not part +> of this change: `footer.madeIn` / `product.prop.made-in-austria` ("In +> Österreich abgefüllt" / "Bottled in Austria") and the Impressum/Datenschutz +> Vienna address. Flag to the user if the origin correction should extend to +> these. + +--- + +## 27. Shop hero — skewed category jump-buttons + white gap removed + +**File:** `src/pages/ShopPage.vue` + +**Jump-buttons.** Under the shop hero's title + sub, a row of four **skewed +parallelogram buttons** (one per use-group, each filled with its own category +colour) now smooth-scrolls to the matching section: + +- Rendered by looping `sections`; label is `section.feature` + (Küche/Reinigung/Wäsche/Pflege · Kitchen/Clean/Wash/Care). +- Shape: `-skew-x-12` on the button with a counter-skew `skew-x-12` on the inner + `` so the text stays upright — echoes the angled (Soulmates) CI. +- Colour map `CAT_BTN`: `bg-cat-kitchen text-brand` (lime is light → dark ink), + the other three `bg-cat-* text-white`. +- `scrollToSection(id)` calls `el.scrollIntoView({ behavior: 'smooth' })`; each + section's existing `scroll-mt-[calc(var(--nav-h)+1rem)]` keeps the landing + just below the sticky nav. + +**White gap removed.** The thin white band (`-mt-px h-6 md:h-10 bg-cream`) and +its preceding `WaveDivider from="brand" to="cream"` — added in §20 — are gone. +The green hero now flows **straight into the first colour banner** via a single +diagonal: the section loop is `(section, i)` and the first divider is +`:from="i === 0 ? 'brand' : 'cream'"` (green→lime for the first section, +cream→colour for the rest). + +--- + ## Quick reference — the two new colours ``` diff --git a/dist/assets/About-DFXxc7oN.js b/dist/assets/About-BuFG0RVN.js similarity index 100% rename from dist/assets/About-DFXxc7oN.js rename to dist/assets/About-BuFG0RVN.js diff --git a/dist/assets/AboutPreview-_Xm6A04n.js b/dist/assets/AboutPreview-Cim4mzz9.js similarity index 78% rename from dist/assets/AboutPreview-_Xm6A04n.js rename to dist/assets/AboutPreview-Cim4mzz9.js index c2ba7f9..2ea9c05 100644 --- a/dist/assets/AboutPreview-_Xm6A04n.js +++ b/dist/assets/AboutPreview-Cim4mzz9.js @@ -1 +1 @@ -import{C as e,G as t,m as n,o as r,u as i}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as a}from"./i18n-BkCuZ9ke.js";import{t as o}from"./About-DFXxc7oN.js";var s={class:`min-h-screen bg-cream`},c={__name:`AboutPreview`,setup(c){let{t:l}=a(),u=r(()=>[1,2,3].map(e=>({year:l(`about.milestone.${e}.year`),title:l(`about.milestone.${e}.title`),text:l(`about.milestone.${e}.text`)})));return(r,a)=>(e(),i(`div`,s,[n(o,{eyebrow:t(l)(`about.eyebrow`),headline:t(l)(`about.headline`),sub:t(l)(`about.sub`),milestones:u.value},null,8,[`eyebrow`,`headline`,`sub`,`milestones`])]))}};export{c as default}; \ No newline at end of file +import{C as e,G as t,m as n,o as r,u as i}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as a}from"./i18n-Uw3aZfCH.js";import{t as o}from"./About-BuFG0RVN.js";var s={class:`min-h-screen bg-cream`},c={__name:`AboutPreview`,setup(c){let{t:l}=a(),u=r(()=>[1,2,3].map(e=>({year:l(`about.milestone.${e}.year`),title:l(`about.milestone.${e}.title`),text:l(`about.milestone.${e}.text`)})));return(r,a)=>(e(),i(`div`,s,[n(o,{eyebrow:t(l)(`about.eyebrow`),headline:t(l)(`about.headline`),sub:t(l)(`about.sub`),milestones:u.value},null,8,[`eyebrow`,`headline`,`sub`,`milestones`])]))}};export{c as default}; \ No newline at end of file diff --git a/dist/assets/AboutSection-BZJn1ZzU.js b/dist/assets/AboutSection-lsNL9IW_.js similarity index 92% rename from dist/assets/AboutSection-BZJn1ZzU.js rename to dist/assets/AboutSection-lsNL9IW_.js index e4a1dff..b7391e5 100644 --- a/dist/assets/AboutSection-BZJn1ZzU.js +++ b/dist/assets/AboutSection-lsNL9IW_.js @@ -1,4 +1,4 @@ -import{C as e,G as t,c as n,ft as r,j as i,m as a,p as o,s}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as c}from"./i18n-BkCuZ9ke.js";import{t as l}from"./SectionShell-XUVs_07L.js";import{t as u}from"./DevicePreview-CxF-mErd.js";var d={class:`eyebrow mb-5`},f=`/design/preview/about`,p={__name:`AboutSection`,setup(p){let{t:m}=c();return(c,p)=>(e(),n(l,{eyebrow:t(m)(`ds.eyebrow.components`),title:t(m)(`ds.about.title`),description:t(m)(`ds.about.description`),wide:``},{default:i(()=>[s(`section`,null,[a(u,{src:f,initial:`desktop`,height:820})]),s(`section`,null,[s(`h2`,d,r(t(m)(`ds.heading.usage`)),1),p[0]||=s(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[s(`pre`,{class:`whitespace-pre-wrap`},`(e(),n(l,{eyebrow:t(m)(`ds.eyebrow.components`),title:t(m)(`ds.about.title`),description:t(m)(`ds.about.description`),wide:``},{default:i(()=>[s(`section`,null,[a(u,{src:f,initial:`desktop`,height:820})]),s(`section`,null,[s(`h2`,d,r(t(m)(`ds.heading.usage`)),1),p[0]||=s(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[s(`pre`,{class:`whitespace-pre-wrap`},`V.accountMode===`guest`),J=d(()=>V.accountMode===`signin`),Y=d(()=>V.accountMode===`register`),X=d(()=>!Y.value||V.password===V.passwordConfirm),Z=d(()=>V.email?q.value?!1:!!(!V.password||V.password.length<8||Y.value&&!X.value):!0);async function Q(){W.value=``,U.value=!0;try{J.value?await b({email:V.email,password:V.password}):Y.value&&await x({email:V.email,password:V.password,firstName:V.firstName,lastName:V.lastName,acceptsMarketing:V.acceptsMarketing}),V.persist(),H.push(`/checkout/shipping`)}catch(e){W.value=e?.message||B(`checkout.error.generic`)}finally{U.value=!1}}return i(async()=>{let e=await S();e?.user?.email&&!V.email&&V.update({email:e.user.email})}),(e,i)=>{let d=n(`RouterLink`);return t(),h(p,null,[m(`section`,E,[m(`div`,{role:`tablist`,"aria-label":r(B)(`checkout.account.tabsLabel`),class:`flex w-full rounded-pill border border-line bg-paper p-1`},[(t(),h(p,null,a(G,e=>m(`button`,{key:e.key,role:`tab`,type:`button`,"aria-selected":r(V).accountMode===e.key,class:g([`flex-1 px-4 py-2 rounded-pill text-[13px] font-semibold tracking-label transition-colors duration-base text-center`,r(V).accountMode===e.key?`bg-brand text-cream`:`text-brand hover:bg-cream`]),onClick:t=>K(e.key)},s(r(B)(e.label)),11,O)),64))],8,D),m(`form`,{class:`flex flex-col gap-5 md:min-h-[28rem]`,novalidate:``,onSubmit:_(Q,[`prevent`])},[u(T,{"model-value":r(V).email,label:r(B)(`checkout.field.email`),type:`email`,required:``,placeholder:r(B)(`checkout.placeholder.email`),hint:q.value?r(B)(`checkout.hint.email`):``,"onUpdate:modelValue":i[0]||=e=>r(V).update({email:e})},null,8,[`model-value`,`label`,`placeholder`,`hint`]),Y.value?(t(),h(`div`,k,[u(T,{"model-value":r(V).firstName,label:r(B)(`checkout.field.firstName`),"onUpdate:modelValue":i[1]||=e=>r(V).update({firstName:e})},null,8,[`model-value`,`label`]),u(T,{"model-value":r(V).lastName,label:r(B)(`checkout.field.lastName`),"onUpdate:modelValue":i[2]||=e=>r(V).update({lastName:e})},null,8,[`model-value`,`label`])])):l(``,!0),J.value||Y.value?(t(),o(T,{key:1,"model-value":r(V).password,label:r(B)(`checkout.field.password`),type:`password`,required:``,hint:Y.value?r(B)(`checkout.hint.password`):``,"onUpdate:modelValue":i[3]||=e=>r(V).update({password:e})},null,8,[`model-value`,`label`,`hint`])):l(``,!0),Y.value?(t(),o(T,{key:2,"model-value":r(V).passwordConfirm,label:r(B)(`checkout.field.passwordConfirm`),type:`password`,required:``,error:X.value?``:r(B)(`checkout.error.passwordMismatch`),"onUpdate:modelValue":i[4]||=e=>r(V).update({passwordConfirm:e})},null,8,[`model-value`,`label`,`error`])):l(``,!0),q.value||Y.value?(t(),h(`label`,A,[m(`input`,{checked:r(V).acceptsMarketing,type:`checkbox`,class:`w-5 h-5 rounded-xs border border-line accent-brand`,onChange:i[5]||=e=>r(V).update({acceptsMarketing:e.target.checked})},null,40,j),m(`span`,M,s(r(B)(`checkout.field.marketing`)),1)])):l(``,!0),W.value?(t(),h(`p`,N,s(W.value),1)):l(``,!0),J.value?(t(),h(`p`,P,[m(`a`,F,s(r(B)(`checkout.account.forgot`)),1)])):l(``,!0)],32)]),m(`footer`,I,[m(`div`,L,[u(d,{to:`/checkout/cart`,class:`flex-1 sm:flex-initial`},{default:c(()=>[u(C,{variant:`primary`,size:`lg`,block:``,type:`button`},{default:c(()=>[f(s(r(B)(`checkout.back`)),1)]),_:1})]),_:1}),m(`div`,R,[u(C,{variant:`accent`,size:`lg`,block:``,loading:U.value,disabled:Z.value,onClick:Q},{default:c(()=>[f(s(r(B)(`checkout.account.cta.continue`)),1)]),_:1},8,[`loading`,`disabled`])])])])],64)}}};export{z as default}; \ No newline at end of file +import{B as e,C as t,D as n,G as r,S as i,T as a,c as o,ft as s,j as c,l,m as u,o as d,p as f,r as p,s as m,u as h,ut as g}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{c as _}from"./runtime-dom.esm-bundler-Bg1uJ-W7.js";import{o as v}from"./vue-router-Cyqru1db.js";import{t as y}from"./i18n-Uw3aZfCH.js";import{i as b,n as x,t as S}from"./api-Co5DNHfG.js";import{t as C}from"./Button-DG-tA4DQ.js";import{t as w}from"./checkout-DTEUVxo-.js";import{t as T}from"./Input-5nUxUCjS.js";var E={class:`flex flex-col gap-6`},D=[`aria-label`],O=[`aria-selected`,`onClick`],k={key:0,class:`grid gap-5 md:grid-cols-2`},A={key:3,class:`inline-flex items-center gap-3 cursor-pointer select-none`},j=[`checked`],M={class:`text-sm text-ink`},N={key:4,class:`text-sm text-danger`,role:`alert`,"aria-live":`polite`},P={key:5,class:`text-[13px] text-muted`},F={href:`/account/reset-password`,class:`text-brand hover:underline`},I={class:`fixed inset-x-0 bottom-0 z-30 bg-cream border-t border-line`,role:`contentinfo`},L={class:`mx-auto w-full max-w-7xl px-6 sm:px-8 md:px-12 lg:px-16 py-3 flex gap-3 sm:justify-between`,style:{paddingBottom:`max(0.75rem, env(safe-area-inset-bottom))`}},R={class:`flex-1 sm:flex-initial`},z={__name:`AccountStep`,setup(z){let{t:B}=y(),V=w(),H=v(),U=e(!1),W=e(``),G=[{key:`guest`,label:`checkout.account.tab.guest`},{key:`signin`,label:`checkout.account.tab.signin`},{key:`register`,label:`checkout.account.tab.register`}];function K(e){W.value=``,V.setAccountMode(e)}let q=d(()=>V.accountMode===`guest`),J=d(()=>V.accountMode===`signin`),Y=d(()=>V.accountMode===`register`),X=d(()=>!Y.value||V.password===V.passwordConfirm),Z=d(()=>V.email?q.value?!1:!!(!V.password||V.password.length<8||Y.value&&!X.value):!0);async function Q(){W.value=``,U.value=!0;try{J.value?await b({email:V.email,password:V.password}):Y.value&&await x({email:V.email,password:V.password,firstName:V.firstName,lastName:V.lastName,acceptsMarketing:V.acceptsMarketing}),V.persist(),H.push(`/checkout/shipping`)}catch(e){W.value=e?.message||B(`checkout.error.generic`)}finally{U.value=!1}}return i(async()=>{let e=await S();e?.user?.email&&!V.email&&V.update({email:e.user.email})}),(e,i)=>{let d=n(`RouterLink`);return t(),h(p,null,[m(`section`,E,[m(`div`,{role:`tablist`,"aria-label":r(B)(`checkout.account.tabsLabel`),class:`flex w-full rounded-pill border border-line bg-paper p-1`},[(t(),h(p,null,a(G,e=>m(`button`,{key:e.key,role:`tab`,type:`button`,"aria-selected":r(V).accountMode===e.key,class:g([`flex-1 px-4 py-2 rounded-pill text-[13px] font-semibold tracking-label transition-colors duration-base text-center`,r(V).accountMode===e.key?`bg-brand text-cream`:`text-brand hover:bg-cream`]),onClick:t=>K(e.key)},s(r(B)(e.label)),11,O)),64))],8,D),m(`form`,{class:`flex flex-col gap-5 md:min-h-[28rem]`,novalidate:``,onSubmit:_(Q,[`prevent`])},[u(T,{"model-value":r(V).email,label:r(B)(`checkout.field.email`),type:`email`,required:``,placeholder:r(B)(`checkout.placeholder.email`),hint:q.value?r(B)(`checkout.hint.email`):``,"onUpdate:modelValue":i[0]||=e=>r(V).update({email:e})},null,8,[`model-value`,`label`,`placeholder`,`hint`]),Y.value?(t(),h(`div`,k,[u(T,{"model-value":r(V).firstName,label:r(B)(`checkout.field.firstName`),"onUpdate:modelValue":i[1]||=e=>r(V).update({firstName:e})},null,8,[`model-value`,`label`]),u(T,{"model-value":r(V).lastName,label:r(B)(`checkout.field.lastName`),"onUpdate:modelValue":i[2]||=e=>r(V).update({lastName:e})},null,8,[`model-value`,`label`])])):l(``,!0),J.value||Y.value?(t(),o(T,{key:1,"model-value":r(V).password,label:r(B)(`checkout.field.password`),type:`password`,required:``,hint:Y.value?r(B)(`checkout.hint.password`):``,"onUpdate:modelValue":i[3]||=e=>r(V).update({password:e})},null,8,[`model-value`,`label`,`hint`])):l(``,!0),Y.value?(t(),o(T,{key:2,"model-value":r(V).passwordConfirm,label:r(B)(`checkout.field.passwordConfirm`),type:`password`,required:``,error:X.value?``:r(B)(`checkout.error.passwordMismatch`),"onUpdate:modelValue":i[4]||=e=>r(V).update({passwordConfirm:e})},null,8,[`model-value`,`label`,`error`])):l(``,!0),q.value||Y.value?(t(),h(`label`,A,[m(`input`,{checked:r(V).acceptsMarketing,type:`checkbox`,class:`w-5 h-5 rounded-xs border border-line accent-brand`,onChange:i[5]||=e=>r(V).update({acceptsMarketing:e.target.checked})},null,40,j),m(`span`,M,s(r(B)(`checkout.field.marketing`)),1)])):l(``,!0),W.value?(t(),h(`p`,N,s(W.value),1)):l(``,!0),J.value?(t(),h(`p`,P,[m(`a`,F,s(r(B)(`checkout.account.forgot`)),1)])):l(``,!0)],32)]),m(`footer`,I,[m(`div`,L,[u(d,{to:`/checkout/cart`,class:`flex-1 sm:flex-initial`},{default:c(()=>[u(C,{variant:`primary`,size:`lg`,block:``,type:`button`},{default:c(()=>[f(s(r(B)(`checkout.back`)),1)]),_:1})]),_:1}),m(`div`,R,[u(C,{variant:`accent`,size:`lg`,block:``,loading:U.value,disabled:Z.value,onClick:Q},{default:c(()=>[f(s(r(B)(`checkout.account.cta.continue`)),1)]),_:1},8,[`loading`,`disabled`])])])])],64)}}};export{z as default}; \ No newline at end of file diff --git a/dist/assets/BadgesSection-DJUkCG23.js b/dist/assets/BadgesSection-BZ2h1ci8.js similarity index 88% rename from dist/assets/BadgesSection-DJUkCG23.js rename to dist/assets/BadgesSection-BZ2h1ci8.js index ccbe38e..e94e774 100644 --- a/dist/assets/BadgesSection-DJUkCG23.js +++ b/dist/assets/BadgesSection-BZ2h1ci8.js @@ -1 +1 @@ -import{C as e,G as t,c as n,ft as r,j as i,m as a,p as o,s}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as c}from"./i18n-BkCuZ9ke.js";import{t as l}from"./Badge-CudT491x.js";import{t as u}from"./SectionShell-XUVs_07L.js";import{t as d}from"./Card-CPlQ-6EI.js";var f={class:`eyebrow mb-5`},p={class:`flex flex-wrap gap-3`},m={class:`eyebrow mb-5`},h={class:`flex flex-wrap gap-3`},g={__name:`BadgesSection`,setup(g){let{t:_}=c();return(c,g)=>(e(),n(u,{eyebrow:t(_)(`ds.eyebrow.components`),title:t(_)(`ds.badges.title`),description:t(_)(`ds.badges.description`)},{default:i(()=>[s(`section`,null,[s(`h2`,f,r(t(_)(`ds.heading.variants`)),1),a(d,{tone:`paper`},{default:i(()=>[s(`div`,p,[a(l,{variant:`neutral`},{default:i(()=>[o(r(t(_)(`ds.badges.neutral`)),1)]),_:1}),a(l,{variant:`brand`},{default:i(()=>[o(r(t(_)(`ds.badges.brand`)),1)]),_:1}),a(l,{variant:`accent`},{default:i(()=>[o(r(t(_)(`ds.badges.accent`)),1)]),_:1}),a(l,{variant:`subtle`},{default:i(()=>[o(r(t(_)(`ds.badges.subtle`)),1)]),_:1}),a(l,{variant:`success`},{default:i(()=>[o(r(t(_)(`ds.badges.success`)),1)]),_:1}),a(l,{variant:`warning`},{default:i(()=>[o(r(t(_)(`ds.badges.warning`)),1)]),_:1}),a(l,{variant:`danger`},{default:i(()=>[o(r(t(_)(`ds.badges.danger`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,m,r(t(_)(`ds.heading.nonUppercase`)),1),a(d,{tone:`paper`},{default:i(()=>[s(`div`,h,[a(l,{variant:`brand`,uppercase:!1},{default:i(()=>[o(r(t(_)(`ds.badges.newRelease`)),1)]),_:1}),a(l,{variant:`accent`,uppercase:!1},{default:i(()=>[o(r(t(_)(`ds.badges.featured`)),1)]),_:1}),a(l,{variant:`subtle`,uppercase:!1},{default:i(()=>[...g[0]||=[o(`v2.1.0`,-1)]]),_:1})])]),_:1})])]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{g as default}; \ No newline at end of file +import{C as e,G as t,c as n,ft as r,j as i,m as a,p as o,s}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as c}from"./i18n-Uw3aZfCH.js";import{t as l}from"./Badge-CudT491x.js";import{t as u}from"./SectionShell-BFBDPrsk.js";import{t as d}from"./Card-kLsGAUqK.js";var f={class:`eyebrow mb-5`},p={class:`flex flex-wrap gap-3`},m={class:`eyebrow mb-5`},h={class:`flex flex-wrap gap-3`},g={__name:`BadgesSection`,setup(g){let{t:_}=c();return(c,g)=>(e(),n(u,{eyebrow:t(_)(`ds.eyebrow.components`),title:t(_)(`ds.badges.title`),description:t(_)(`ds.badges.description`)},{default:i(()=>[s(`section`,null,[s(`h2`,f,r(t(_)(`ds.heading.variants`)),1),a(d,{tone:`paper`},{default:i(()=>[s(`div`,p,[a(l,{variant:`neutral`},{default:i(()=>[o(r(t(_)(`ds.badges.neutral`)),1)]),_:1}),a(l,{variant:`brand`},{default:i(()=>[o(r(t(_)(`ds.badges.brand`)),1)]),_:1}),a(l,{variant:`accent`},{default:i(()=>[o(r(t(_)(`ds.badges.accent`)),1)]),_:1}),a(l,{variant:`subtle`},{default:i(()=>[o(r(t(_)(`ds.badges.subtle`)),1)]),_:1}),a(l,{variant:`success`},{default:i(()=>[o(r(t(_)(`ds.badges.success`)),1)]),_:1}),a(l,{variant:`warning`},{default:i(()=>[o(r(t(_)(`ds.badges.warning`)),1)]),_:1}),a(l,{variant:`danger`},{default:i(()=>[o(r(t(_)(`ds.badges.danger`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,m,r(t(_)(`ds.heading.nonUppercase`)),1),a(d,{tone:`paper`},{default:i(()=>[s(`div`,h,[a(l,{variant:`brand`,uppercase:!1},{default:i(()=>[o(r(t(_)(`ds.badges.newRelease`)),1)]),_:1}),a(l,{variant:`accent`,uppercase:!1},{default:i(()=>[o(r(t(_)(`ds.badges.featured`)),1)]),_:1}),a(l,{variant:`subtle`,uppercase:!1},{default:i(()=>[...g[0]||=[o(`v2.1.0`,-1)]]),_:1})])]),_:1})])]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{g as default}; \ No newline at end of file diff --git a/dist/assets/BundleCard-Biq7m7Mj.js b/dist/assets/BundleCard-BfWZdpfz.js similarity index 98% rename from dist/assets/BundleCard-Biq7m7Mj.js rename to dist/assets/BundleCard-BfWZdpfz.js index 7e7b410..7c424ca 100644 --- a/dist/assets/BundleCard-Biq7m7Mj.js +++ b/dist/assets/BundleCard-BfWZdpfz.js @@ -1 +1 @@ -import{C as e,G as t,O as n,T as r,c as i,ft as a,j as o,l as s,m as c,o as l,p as u,r as d,s as f,u as p,ut as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as h}from"./vue-router-Cyqru1db.js";import{t as g}from"./Icon-CtR1FGIT.js";import{t as _}from"./i18n-BkCuZ9ke.js";import{t as v}from"./Badge-CudT491x.js";import{t as y}from"./Button-DG-tA4DQ.js";var b=[`src`,`alt`],x={key:1,class:`pointer-events-none absolute bottom-0 right-0 z-[1] px-2 py-0.5 text-[10px] font-medium uppercase tracking-label text-white/55 drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]`},S=[`src`,`alt`],C={key:1,class:`pointer-events-none absolute bottom-0 right-0 z-[1] px-2 py-0.5 text-[10px] font-medium uppercase tracking-label text-white/55 drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]`},w={class:`flex flex-col gap-1.5`},T={key:0,class:`text-xs font-semibold tracking-label text-muted uppercase`},E={class:`flex flex-col gap-1.5`},D={key:0,class:`text-sm text-muted tracking-label`},O={class:`flex flex-col gap-0.5`},k={class:`text-xs tracking-label text-muted uppercase`},A={class:`font-display text-2xl font-normal text-brand leading-none`},j={key:0,class:`text-xs font-semibold tracking-label uppercase text-danger mt-1`},M=3,N={__name:`BundleCard`,props:{name:{type:String,required:!0},items:{type:Array,required:!0},price:{type:Number,required:!0},usage:{type:String,default:``},image:{type:String,required:!0},imageAlt:{type:String,default:``},badge:{type:String,default:``},badgeVariant:{type:String,default:`accent`,validator:e=>[`neutral`,`brand`,`accent`,`subtle`,`success`,`warning`,`danger`].includes(e)},tone:{type:String,default:`paper`,validator:e=>[`paper`,`cream`].includes(e)},layout:{type:String,default:`vertical`,validator:e=>[`vertical`,`horizontal`].includes(e)},inStock:{type:Boolean,default:!0},currency:{type:String,default:`€`},href:{type:String,default:``},imageFit:{type:String,default:`cover`,validator:e=>[`contain`,`cover`].includes(e)},aiEdited:{type:Boolean,default:!1}},emits:[`add`],setup(N){function P(e){return typeof e==`string`&&e.startsWith(`/`)&&!e.startsWith(`//`)}let F=N,{t:I}=_(),L={paper:{surface:`bg-paper`,media:`bg-cream`,border:`border-line`},cream:{surface:`bg-cream`,media:`bg-paper`,border:`border-line`}},R=l(()=>L[F.tone]);function z(e){return`${F.currency} ${e.toFixed(2).replace(`.`,`,`)}`}let B=l(()=>z(F.price)),V=l(()=>F.items.slice(0,M)),H=l(()=>Math.max(0,F.items.length-M));return(l,_)=>(e(),p(`article`,{class:m([`group flex overflow-hidden rounded-md border transition-all duration-base ease-out`,N.layout===`horizontal`?`flex-col md:flex-row`:`flex-col`,R.value.surface,R.value.border,`hover:-translate-y-1 hover:shadow-md hover:border-brand-soft`])},[N.href&&P(N.href)?(e(),i(t(h),{key:0,to:N.href,class:m([`relative block overflow-hidden`,N.layout===`horizontal`?`aspect-[4/3] md:aspect-auto md:w-[38%] md:shrink-0 md:min-h-[300px]`:`aspect-[4/3]`,R.value.media])},{default:o(()=>[N.badge?(e(),i(v,{key:0,variant:N.badgeVariant,class:`absolute top-4 left-4 z-[1]`},{default:o(()=>[u(a(N.badge),1)]),_:1},8,[`variant`])):s(``,!0),f(`img`,{src:N.image,alt:N.imageAlt||N.name,loading:`lazy`,decoding:`async`,class:m([`absolute inset-0 w-full h-full transition-transform duration-slow ease-out group-hover:scale-105`,N.imageFit===`cover`?`object-cover`:`object-contain `+(N.layout===`horizontal`?`p-6 md:p-5`:`p-8`)])},null,10,b),N.aiEdited?(e(),p(`span`,x,`AI Edited`)):s(``,!0)]),_:1},8,[`to`,`class`])):(e(),i(n(N.href?`a`:`div`),{key:1,href:N.href||null,class:m([`relative block overflow-hidden`,N.layout===`horizontal`?`aspect-[4/3] md:aspect-auto md:w-[38%] md:shrink-0 md:min-h-[300px]`:`aspect-[4/3]`,R.value.media])},{default:o(()=>[N.badge?(e(),i(v,{key:0,variant:N.badgeVariant,class:`absolute top-4 left-4 z-[1]`},{default:o(()=>[u(a(N.badge),1)]),_:1},8,[`variant`])):s(``,!0),f(`img`,{src:N.image,alt:N.imageAlt||N.name,loading:`lazy`,decoding:`async`,class:m([`absolute inset-0 w-full h-full transition-transform duration-slow ease-out group-hover:scale-105`,N.imageFit===`cover`?`object-cover`:`object-contain `+(N.layout===`horizontal`?`p-6 md:p-5`:`p-8`)])},null,10,S),N.aiEdited?(e(),p(`span`,C,`AI Edited`)):s(``,!0)]),_:1},8,[`href`,`class`])),f(`div`,{class:m([`flex flex-col gap-4 p-6`,N.layout===`horizontal`?`md:p-6 md:flex-1`:``])},[f(`div`,w,[N.usage?(e(),p(`span`,T,a(N.usage),1)):s(``,!0),N.href&&P(N.href)?(e(),i(t(h),{key:1,to:N.href,class:`font-display text-xl font-normal leading-tight text-ink hover:text-brand transition-colors duration-base`},{default:o(()=>[u(a(N.name),1)]),_:1},8,[`to`])):(e(),i(n(N.href?`a`:`h3`),{key:2,href:N.href||null,class:m([`font-display text-xl font-normal leading-tight text-ink`,N.href?`hover:text-brand transition-colors duration-base`:``])},{default:o(()=>[u(a(N.name),1)]),_:1},8,[`href`,`class`]))]),f(`ul`,E,[(e(!0),p(d,null,r(V.value,t=>(e(),p(`li`,{key:t,class:`text-sm text-ink/80 leading-relaxed`},a(t),1))),128)),H.value>0?(e(),p(`li`,D,`+ `+a(H.value)+` `+a(t(I)(`bundles.card.moreItems`)),1)):s(``,!0)]),f(`div`,{class:m([`mt-auto pt-4 border-t border-line flex gap-3`,N.layout===`horizontal`?`flex-col sm:flex-row sm:items-end sm:justify-between`:`flex-col`])},[f(`div`,O,[f(`span`,k,a(t(I)(`bundles.card.priceLabel`)),1),f(`span`,A,a(B.value),1),N.inStock?s(``,!0):(e(),p(`span`,j,a(t(I)(`ds.product.outOfStock`)),1))]),c(y,{variant:`accent`,size:`md`,block:N.layout===`vertical`,disabled:!N.inStock,onClick:_[0]||=e=>l.$emit(`add`)},{before:o(()=>[c(g,{name:`plus`,size:16})]),default:o(()=>[u(` `+a(t(I)(`ds.buttons.addToCart`)),1)]),_:1},8,[`block`,`disabled`])],2)],2)],2))}};export{N as t}; \ No newline at end of file +import{C as e,G as t,O as n,T as r,c as i,ft as a,j as o,l as s,m as c,o as l,p as u,r as d,s as f,u as p,ut as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as h}from"./vue-router-Cyqru1db.js";import{t as g}from"./Icon-CtR1FGIT.js";import{t as _}from"./i18n-Uw3aZfCH.js";import{t as v}from"./Badge-CudT491x.js";import{t as y}from"./Button-DG-tA4DQ.js";var b=[`src`,`alt`],x={key:1,class:`pointer-events-none absolute bottom-0 right-0 z-[1] px-2 py-0.5 text-[10px] font-medium uppercase tracking-label text-white/55 drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]`},S=[`src`,`alt`],C={key:1,class:`pointer-events-none absolute bottom-0 right-0 z-[1] px-2 py-0.5 text-[10px] font-medium uppercase tracking-label text-white/55 drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]`},w={class:`flex flex-col gap-1.5`},T={key:0,class:`text-xs font-semibold tracking-label text-muted uppercase`},E={class:`flex flex-col gap-1.5`},D={key:0,class:`text-sm text-muted tracking-label`},O={class:`flex flex-col gap-0.5`},k={class:`text-xs tracking-label text-muted uppercase`},A={class:`font-display text-2xl font-normal text-brand leading-none`},j={key:0,class:`text-xs font-semibold tracking-label uppercase text-danger mt-1`},M=3,N={__name:`BundleCard`,props:{name:{type:String,required:!0},items:{type:Array,required:!0},price:{type:Number,required:!0},usage:{type:String,default:``},image:{type:String,required:!0},imageAlt:{type:String,default:``},badge:{type:String,default:``},badgeVariant:{type:String,default:`accent`,validator:e=>[`neutral`,`brand`,`accent`,`subtle`,`success`,`warning`,`danger`].includes(e)},tone:{type:String,default:`paper`,validator:e=>[`paper`,`cream`].includes(e)},layout:{type:String,default:`vertical`,validator:e=>[`vertical`,`horizontal`].includes(e)},inStock:{type:Boolean,default:!0},currency:{type:String,default:`€`},href:{type:String,default:``},imageFit:{type:String,default:`cover`,validator:e=>[`contain`,`cover`].includes(e)},aiEdited:{type:Boolean,default:!1}},emits:[`add`],setup(N){function P(e){return typeof e==`string`&&e.startsWith(`/`)&&!e.startsWith(`//`)}let F=N,{t:I}=_(),L={paper:{surface:`bg-paper`,media:`bg-cream`,border:`border-line`},cream:{surface:`bg-cream`,media:`bg-paper`,border:`border-line`}},R=l(()=>L[F.tone]);function z(e){return`${F.currency} ${e.toFixed(2).replace(`.`,`,`)}`}let B=l(()=>z(F.price)),V=l(()=>F.items.slice(0,M)),H=l(()=>Math.max(0,F.items.length-M));return(l,_)=>(e(),p(`article`,{class:m([`group flex overflow-hidden rounded-md border transition-all duration-base ease-out`,N.layout===`horizontal`?`flex-col md:flex-row`:`flex-col`,R.value.surface,R.value.border,`hover:-translate-y-1 hover:shadow-md hover:border-brand-soft`])},[N.href&&P(N.href)?(e(),i(t(h),{key:0,to:N.href,class:m([`relative block overflow-hidden`,N.layout===`horizontal`?`aspect-[4/3] md:aspect-auto md:w-[38%] md:shrink-0 md:min-h-[300px]`:`aspect-[4/3]`,R.value.media])},{default:o(()=>[N.badge?(e(),i(v,{key:0,variant:N.badgeVariant,class:`absolute top-4 left-4 z-[1]`},{default:o(()=>[u(a(N.badge),1)]),_:1},8,[`variant`])):s(``,!0),f(`img`,{src:N.image,alt:N.imageAlt||N.name,loading:`lazy`,decoding:`async`,class:m([`absolute inset-0 w-full h-full transition-transform duration-slow ease-out group-hover:scale-105`,N.imageFit===`cover`?`object-cover`:`object-contain `+(N.layout===`horizontal`?`p-6 md:p-5`:`p-8`)])},null,10,b),N.aiEdited?(e(),p(`span`,x,`AI Edited`)):s(``,!0)]),_:1},8,[`to`,`class`])):(e(),i(n(N.href?`a`:`div`),{key:1,href:N.href||null,class:m([`relative block overflow-hidden`,N.layout===`horizontal`?`aspect-[4/3] md:aspect-auto md:w-[38%] md:shrink-0 md:min-h-[300px]`:`aspect-[4/3]`,R.value.media])},{default:o(()=>[N.badge?(e(),i(v,{key:0,variant:N.badgeVariant,class:`absolute top-4 left-4 z-[1]`},{default:o(()=>[u(a(N.badge),1)]),_:1},8,[`variant`])):s(``,!0),f(`img`,{src:N.image,alt:N.imageAlt||N.name,loading:`lazy`,decoding:`async`,class:m([`absolute inset-0 w-full h-full transition-transform duration-slow ease-out group-hover:scale-105`,N.imageFit===`cover`?`object-cover`:`object-contain `+(N.layout===`horizontal`?`p-6 md:p-5`:`p-8`)])},null,10,S),N.aiEdited?(e(),p(`span`,C,`AI Edited`)):s(``,!0)]),_:1},8,[`href`,`class`])),f(`div`,{class:m([`flex flex-col gap-4 p-6`,N.layout===`horizontal`?`md:p-6 md:flex-1`:``])},[f(`div`,w,[N.usage?(e(),p(`span`,T,a(N.usage),1)):s(``,!0),N.href&&P(N.href)?(e(),i(t(h),{key:1,to:N.href,class:`font-display text-xl font-normal leading-tight text-ink hover:text-brand transition-colors duration-base`},{default:o(()=>[u(a(N.name),1)]),_:1},8,[`to`])):(e(),i(n(N.href?`a`:`h3`),{key:2,href:N.href||null,class:m([`font-display text-xl font-normal leading-tight text-ink`,N.href?`hover:text-brand transition-colors duration-base`:``])},{default:o(()=>[u(a(N.name),1)]),_:1},8,[`href`,`class`]))]),f(`ul`,E,[(e(!0),p(d,null,r(V.value,t=>(e(),p(`li`,{key:t,class:`text-sm text-ink/80 leading-relaxed`},a(t),1))),128)),H.value>0?(e(),p(`li`,D,`+ `+a(H.value)+` `+a(t(I)(`bundles.card.moreItems`)),1)):s(``,!0)]),f(`div`,{class:m([`mt-auto pt-4 border-t border-line flex gap-3`,N.layout===`horizontal`?`flex-col sm:flex-row sm:items-end sm:justify-between`:`flex-col`])},[f(`div`,O,[f(`span`,k,a(t(I)(`bundles.card.priceLabel`)),1),f(`span`,A,a(B.value),1),N.inStock?s(``,!0):(e(),p(`span`,j,a(t(I)(`ds.product.outOfStock`)),1))]),c(y,{variant:`accent`,size:`md`,block:N.layout===`vertical`,disabled:!N.inStock,onClick:_[0]||=e=>l.$emit(`add`)},{before:o(()=>[c(g,{name:`plus`,size:16})]),default:o(()=>[u(` `+a(t(I)(`ds.buttons.addToCart`)),1)]),_:1},8,[`block`,`disabled`])],2)],2)],2))}};export{N as t}; \ No newline at end of file diff --git a/dist/assets/BundleCardSection-CLKlFQZN.js b/dist/assets/BundleCardSection-BWKGpkCb.js similarity index 94% rename from dist/assets/BundleCardSection-CLKlFQZN.js rename to dist/assets/BundleCardSection-BWKGpkCb.js index f273cba..5441fd0 100644 --- a/dist/assets/BundleCardSection-CLKlFQZN.js +++ b/dist/assets/BundleCardSection-BWKGpkCb.js @@ -1,4 +1,4 @@ -import{B as e,C as t,G as n,c as r,ft as i,j as a,l as o,m as s,p as c,s as l,u,y as d}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as f}from"./i18n-BkCuZ9ke.js";import{t as p}from"./BundleCard-Biq7m7Mj.js";import{t as m}from"./SectionShell-XUVs_07L.js";var h={class:`eyebrow mb-5`},g={class:`grid sm:grid-cols-2 lg:grid-cols-3 gap-6`},_={key:0,class:`mt-5 text-sm text-muted`},v={class:`font-mono text-[12px]`},y={class:`grid gap-6`},b={class:`eyebrow mb-5`},x={class:`grid sm:grid-cols-2 gap-6`},S={class:`eyebrow mb-5`},C=`/products/kaiser-natron-pulver-250-g-grosspackung.webp`,w={__name:`BundleCardSection`,setup(w){let{t:T}=f(),E=e(``);function D(e){E.value=e,setTimeout(()=>{E.value===e&&(E.value=``)},2e3)}let O={name:`Haushalts-Bundle`,usage:`2–3× pro Quartal empfohlen`,items:[`1× Kaiser-Natron Pulver 250 g`,`1× Allzweck-Spray 500 ml`,`1× Spülmittel 500 ml`],price:24.9,image:C,imageAlt:`Haushalts-Bundle`},k={...O,items:[...O.items,`1× Holste Wasch-Soda 500 g`,`1× Allzweckreiniger 750 ml`]};return(e,f)=>(t(),r(m,{eyebrow:n(T)(`ds.eyebrow.components`),title:n(T)(`ds.bundleCard.title`),description:n(T)(`ds.bundleCard.description`)},{default:a(()=>[l(`section`,null,[l(`h2`,h,i(n(T)(`ds.heading.default`)),1),l(`div`,g,[s(p,d(O,{onAdd:f[0]||=e=>D(`default`)}),null,16),s(p,d(O,{badge:`Bestseller`,"badge-variant":`accent`,onAdd:f[1]||=e=>D(`bestseller`)}),null,16),s(p,d(O,{tone:`cream`,onAdd:f[2]||=e=>D(`cream`)}),null,16)]),E.value?(t(),u(`p`,_,[c(i(n(T)(`ds.product.added`))+`: `,1),l(`code`,v,i(E.value),1)])):o(``,!0)]),l(`section`,null,[f[5]||=l(`h2`,{class:`eyebrow mb-5`},`Horizontal layout`,-1),f[6]||=l(`p`,{class:`text-sm text-muted mb-5 max-w-2xl`},[c(` Passed as `),l(`code`,{class:`font-mono text-[12px]`},`layout="horizontal"`),c(`. From `),l(`code`,{class:`font-mono text-[12px]`},`md`),c(` up the media takes ~38% of the row and the body fills the rest, with the CTA inlined next to the price block. Below `),l(`code`,{class:`font-mono text-[12px]`},`md`),c(` it collapses back to vertical. `)],-1),l(`div`,y,[s(p,d(O,{layout:`horizontal`,badge:`Bestseller`,"badge-variant":`accent`,onAdd:f[3]||=e=>D(`horizontal`)}),null,16)])]),l(`section`,null,[l(`h2`,b,i(n(T)(`ds.heading.states`)),1),f[7]||=l(`p`,{class:`text-sm text-muted mb-5 max-w-2xl`},` Same bundle across both cards — only the state being demonstrated changes. `,-1),l(`div`,x,[s(p,d(O,{"in-stock":!1}),null,16),s(p,d(k,{onAdd:f[4]||=e=>D(`overflow`)}),null,16)]),f[8]||=l(`p`,{class:`mt-3 text-sm text-muted max-w-2xl`},[c(` More than three items collapse the tail into a `),l(`code`,{class:`font-mono text-[12px]`},`+ N weitere`),c(` line so the card stays scannable. `)],-1)]),l(`section`,null,[l(`h2`,S,i(n(T)(`ds.heading.usage`)),1),f[9]||=l(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[l(`pre`,{class:`whitespace-pre-wrap`},`{E.value===e&&(E.value=``)},2e3)}let O={name:`Haushalts-Bundle`,usage:`2–3× pro Quartal empfohlen`,items:[`1× Kaiser-Natron Pulver 250 g`,`1× Allzweck-Spray 500 ml`,`1× Spülmittel 500 ml`],price:24.9,image:C,imageAlt:`Haushalts-Bundle`},k={...O,items:[...O.items,`1× Holste Wasch-Soda 500 g`,`1× Allzweckreiniger 750 ml`]};return(e,f)=>(t(),r(m,{eyebrow:n(T)(`ds.eyebrow.components`),title:n(T)(`ds.bundleCard.title`),description:n(T)(`ds.bundleCard.description`)},{default:a(()=>[l(`section`,null,[l(`h2`,h,i(n(T)(`ds.heading.default`)),1),l(`div`,g,[s(p,d(O,{onAdd:f[0]||=e=>D(`default`)}),null,16),s(p,d(O,{badge:`Bestseller`,"badge-variant":`accent`,onAdd:f[1]||=e=>D(`bestseller`)}),null,16),s(p,d(O,{tone:`cream`,onAdd:f[2]||=e=>D(`cream`)}),null,16)]),E.value?(t(),u(`p`,_,[c(i(n(T)(`ds.product.added`))+`: `,1),l(`code`,v,i(E.value),1)])):o(``,!0)]),l(`section`,null,[f[5]||=l(`h2`,{class:`eyebrow mb-5`},`Horizontal layout`,-1),f[6]||=l(`p`,{class:`text-sm text-muted mb-5 max-w-2xl`},[c(` Passed as `),l(`code`,{class:`font-mono text-[12px]`},`layout="horizontal"`),c(`. From `),l(`code`,{class:`font-mono text-[12px]`},`md`),c(` up the media takes ~38% of the row and the body fills the rest, with the CTA inlined next to the price block. Below `),l(`code`,{class:`font-mono text-[12px]`},`md`),c(` it collapses back to vertical. `)],-1),l(`div`,y,[s(p,d(O,{layout:`horizontal`,badge:`Bestseller`,"badge-variant":`accent`,onAdd:f[3]||=e=>D(`horizontal`)}),null,16)])]),l(`section`,null,[l(`h2`,b,i(n(T)(`ds.heading.states`)),1),f[7]||=l(`p`,{class:`text-sm text-muted mb-5 max-w-2xl`},` Same bundle across both cards — only the state being demonstrated changes. `,-1),l(`div`,x,[s(p,d(O,{"in-stock":!1}),null,16),s(p,d(k,{onAdd:f[4]||=e=>D(`overflow`)}),null,16)]),f[8]||=l(`p`,{class:`mt-3 text-sm text-muted max-w-2xl`},[c(` More than three items collapse the tail into a `),l(`code`,{class:`font-mono text-[12px]`},`+ N weitere`),c(` line so the card stays scannable. `)],-1)]),l(`section`,null,[l(`h2`,S,i(n(T)(`ds.heading.usage`)),1),f[9]||=l(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[l(`pre`,{class:`whitespace-pre-wrap`},`String(Fe.params.slug||``)),G=d(()=>de(Ie.value)),K=e(null);i(()=>{se();let e=typeof window<`u`?window.history.state?.back:null;K.value=typeof e==`string`?e:null});let Le=d(()=>{let e=K.value;return!e||e===`/`||e.startsWith(`/#`)?`product.backHome`:`product.backGeneric`});function Re(){K.value?H.back():H.push(`/`)}let ze=[{key:`nav.shop`,href:`/shop`},{key:`nav.bundles`,href:`/#bundles`},{key:`nav.revitalization`,href:`/#revitalize`},{key:`nav.about`,href:`/#about`},{key:`nav.kaiserhacks`,href:`/kaiserhacks`}],Be=[],q=d(()=>{let e=G.value;return e?`€ ${e.price.toFixed(2).replace(`.`,`,`)}`:``}),J=d(()=>{let e=G.value;return e?{name:B(e.nameKey),usage:e.usageKey?B(e.usageKey):``,description:e.descriptionKey?B(e.descriptionKey):``,imageAlt:e.imageAltKey?B(e.imageAltKey):``,badge:e.badgeKey?B(e.badgeKey):``}:null}),Y=d(()=>{let e=G.value;return e?e.itemKeys.map(e=>{let t=B(e);return{label:t,product:v.find(e=>t.toLowerCase().includes(e.title.toLowerCase().replace(/®/g,``).trim()))}}):[]});async function X(){let e=G.value;e?.anchorProductId&&(await y(e.anchorProductId,W.value),U.value=!0)}async function Ve({productId:e,quantity:t}){await ae(e,t)}async function He(e){await ie(e)}function Ue(){U.value=!1,H.push(`/checkout`)}async function We(e){await y(e.id,1),U.value=!0}let Z=e(null),Q=null;function $(){let e=Z.value,t=e&&(e.$el||e);if(!t||typeof window>`u`)return;let n=Math.round(t.getBoundingClientRect().height);document.documentElement.style.setProperty(`--nav-h`,`${n}px`)}return i(()=>{if($(),typeof ResizeObserver<`u`&&Z.value){let e=Z.value.$el||Z.value;Q=new ResizeObserver($),Q.observe(e)}typeof window<`u`&&window.addEventListener(`resize`,$)}),ee(()=>{Q&&Q.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,$)}),(e,i)=>{let d=n(`RouterLink`);return t(),h(p,null,[u(ce,{ref_key:`navRef`,ref:Z,variant:`brand`,layout:`standard`,items:ze,"secondary-items":Be,"cart-count":r(V).count,products:r(v),onCart:i[0]||=e=>U.value=!0,onSearch:We},null,8,[`cart-count`,`products`]),G.value?(t(),h(`main`,S,[m(`div`,C,[m(`button`,{type:`button`,class:`inline-flex items-center gap-2 text-sm tracking-label uppercase text-cream/75 hover:text-cream transition-colors`,onClick:Re},[u(g,{name:`arrow-left`,size:16}),f(` `+s(r(B)(Le.value)),1)])]),m(`section`,w,[m(`div`,T,[m(`div`,E,[J.value.badge?(t(),o(_,{key:0,variant:G.value.badgeVariant||`accent`,class:`absolute top-4 left-4 z-[1] shadow-sm`},{default:c(()=>[f(s(J.value.badge),1)]),_:1},8,[`variant`])):l(``,!0),m(`div`,D,[m(`img`,{src:G.value.image,alt:J.value.imageAlt||J.value.name,loading:`eager`,decoding:`async`,class:`absolute inset-0 w-full h-full object-cover`},null,8,O),G.value.aiEdited?(t(),h(`span`,k,`AI Edited`)):l(``,!0)])]),m(`div`,A,[J.value.usage?(t(),h(`p`,j,s(J.value.usage),1)):l(``,!0),m(`h1`,M,s(J.value.name),1),J.value.description?(t(),h(`p`,N,s(J.value.description),1)):l(``,!0),m(`div`,P,[m(`p`,F,s(r(B)(`bundle.items`)),1),m(`ul`,I,[(t(!0),h(p,null,a(Y.value,(e,n)=>(t(),h(`li`,{key:n,class:`flex items-start gap-2 text-base text-cream/95 leading-relaxed`},[u(g,{name:`check`,size:18,class:`mt-0.5 shrink-0 text-accent`}),e.product?(t(),o(d,{key:0,to:e.product.href,class:`hover:text-accent transition-colors`},{default:c(()=>[f(s(e.label),1)]),_:2},1032,[`to`])):(t(),h(`span`,L,s(e.label),1))]))),128))])]),m(`div`,R,[m(`span`,ge,s(q.value),1)]),m(`div`,_e,[u(x,{modelValue:W.value,"onUpdate:modelValue":i[1]||=e=>W.value=e,min:1,max:10},null,8,[`modelValue`]),u(b,{variant:`accent`,size:`lg`,onClick:X},{before:c(()=>[u(g,{name:`plus`,size:16})]),default:c(()=>[f(` `+s(r(B)(`ds.buttons.addToCart`)),1)]),_:1})])])])]),m(`div`,ve,[m(`section`,ye,[m(`div`,be,[J.value.badge?(t(),o(_,{key:0,variant:G.value.badgeVariant||`accent`,class:`absolute top-4 left-4 z-[1] shadow-sm`},{default:c(()=>[f(s(J.value.badge),1)]),_:1},8,[`variant`])):l(``,!0),m(`img`,{src:G.value.image,alt:J.value.imageAlt||J.value.name,loading:`eager`,decoding:`async`,class:`block w-full h-auto`},null,8,xe),G.value.aiEdited?(t(),h(`span`,Se,`AI Edited`)):l(``,!0)])]),m(`section`,Ce,[m(`div`,we,[J.value.usage?(t(),h(`p`,Te,s(J.value.usage),1)):l(``,!0),m(`h1`,z,s(J.value.name),1),J.value.description?(t(),h(`p`,Ee,s(J.value.description),1)):l(``,!0),m(`div`,De,[m(`p`,Oe,s(r(B)(`bundle.items`)),1),m(`ul`,ke,[(t(!0),h(p,null,a(Y.value,(e,n)=>(t(),h(`li`,{key:n,class:`flex items-start gap-2 text-base text-cream/95 leading-relaxed`},[u(g,{name:`check`,size:18,class:`mt-0.5 shrink-0 text-accent`}),e.product?(t(),o(d,{key:0,to:e.product.href,class:`hover:text-accent transition-colors`},{default:c(()=>[f(s(e.label),1)]),_:2},1032,[`to`])):(t(),h(`span`,Ae,s(e.label),1))]))),128))])]),m(`div`,je,[m(`span`,Me,s(q.value),1)]),m(`div`,Ne,[u(x,{modelValue:W.value,"onUpdate:modelValue":i[2]||=e=>W.value=e,min:1,max:10},null,8,[`modelValue`]),u(b,{variant:`accent`,size:`lg`,onClick:X},{before:c(()=>[u(g,{name:`plus`,size:16})]),default:c(()=>[f(` `+s(r(B)(`ds.buttons.addToCart`)),1)]),_:1})])])])])])):(t(),h(`main`,fe,[m(`div`,pe,[m(`h1`,me,s(r(B)(`product.notFound.title`)),1),m(`p`,he,s(r(B)(`product.notFound.body`)),1),u(d,{to:`/`,class:`inline-flex`},{default:c(()=>[u(b,{variant:`primary`,size:`lg`},{default:c(()=>[f(s(r(B)(`product.backHome`)),1)]),_:1})]),_:1})])])),i[4]||=m(`div`,{"aria-hidden":`true`,class:`min-[1100px]:hidden bg-brand`,style:{height:`calc(100px + env(safe-area-inset-bottom))`}},null,-1),u(ue),u(le,{modelValue:U.value,"onUpdate:modelValue":i[3]||=e=>U.value=e,items:r(V).items,subtotal:r(V).subtotal,count:r(V).count,onUpdateQuantity:Ve,onRemove:He,onCheckout:Ue},null,8,[`modelValue`,`items`,`subtotal`,`count`])],64)}}};export{Pe as default}; \ No newline at end of file diff --git a/dist/assets/BundlePage-DLIase5g.js b/dist/assets/BundlePage-DLIase5g.js new file mode 100644 index 0000000..670300e --- /dev/null +++ b/dist/assets/BundlePage-DLIase5g.js @@ -0,0 +1 @@ +import{B as e,C as t,D as n,G as r,S as i,T as a,c as o,ft as s,j as c,l,m as u,o as d,p as f,r as p,s as m,u as h,x as ee}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a as te,o as ne}from"./vue-router-Cyqru1db.js";import{t as g}from"./Icon-CtR1FGIT.js";import{t as re}from"./i18n-Uw3aZfCH.js";import{t as _}from"./Badge-CudT491x.js";import{r as v}from"./products-0gaA2Xo6.js";import{c as y,d as ie,f as ae,p as oe,u as se}from"./api-Co5DNHfG.js";import{t as ce}from"./Navbar-DwNrj8mb.js";import{t as b}from"./Button-DG-tA4DQ.js";import{t as x}from"./QuantityStepper-BB38-Td1.js";import{t as le}from"./CartDrawer-Cngidn8v.js";import{t as ue}from"./Footer-Bf8Z3dZX.js";import{n as de}from"./bundles-Bf8Zy1Kk.js";var fe={key:0,class:`bg-cream min-h-[60svh] flex items-center justify-center px-6`},pe={class:`text-center max-w-md`},me={class:`font-display text-3xl text-ink mb-4`},he={class:`text-muted mb-6`},S={key:1,class:`bg-brand text-cream`},C={class:`mx-auto w-full max-w-7xl px-6 md:px-10 lg:px-16 pt-6`},w={class:`hidden lg:block mx-auto w-full max-w-7xl px-6 md:px-10 lg:px-16 pt-4 pb-14`},T={class:`grid grid-cols-[1.4fr_1fr] gap-12 xl:gap-16 items-center`},E={class:`relative overflow-hidden rounded-lg bg-cream/10`},D={class:`relative aspect-[16/10]`},O=[`src`,`alt`],k={key:0,class:`pointer-events-none absolute bottom-0 right-0 z-[1] px-2.5 py-1 text-[11px] font-medium uppercase tracking-label text-white/55 drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]`},A={class:`flex flex-col gap-6 min-w-0 text-cream`},j={key:0,class:`text-xs tracking-label uppercase text-cream/75`},M={class:`font-display font-normal leading-[1.05] tracking-tight text-cream text-[2.25rem] xl:text-[2.75rem] 2xl:text-[3.25rem]`},N={key:1,class:`text-base xl:text-lg leading-relaxed text-cream/85`},P={class:`flex flex-col gap-2`},F={class:`text-xs tracking-label uppercase text-cream/75`},I={class:`flex flex-col gap-1.5`},L={key:1},R={class:`flex flex-col gap-1`},ge={class:`font-display text-3xl xl:text-4xl text-cream`},_e={class:`flex flex-wrap items-center gap-4 mt-2`},ve={class:`lg:hidden`},ye={class:`mx-auto w-full max-w-7xl px-6 md:px-10 pt-6 md:pt-8`},be={class:`relative overflow-hidden rounded-lg bg-cream/10`},xe=[`src`,`alt`],Se={key:1,class:`pointer-events-none absolute bottom-0 right-0 z-[1] px-2.5 py-1 text-[11px] font-medium uppercase tracking-label text-white/55 drop-shadow-[0_1px_2px_rgba(0,0,0,0.45)]`},Ce={class:`mx-auto w-full max-w-7xl px-6 md:px-10 py-10 md:py-14`},we={class:`flex flex-col gap-6`},Te={key:0,class:`text-xs tracking-label uppercase text-cream/70`},z={class:`font-display font-normal leading-[1.06] tracking-tight text-cream text-[2rem] md:text-[2.5rem]`},Ee={key:1,class:`text-base md:text-lg leading-relaxed text-cream/85`},De={class:`flex flex-col gap-2`},Oe={class:`text-xs tracking-label uppercase text-cream/70`},ke={class:`flex flex-col gap-1.5`},Ae={key:1},je={class:`flex flex-col gap-1`},Me={class:`font-display text-3xl md:text-4xl text-cream`},Ne={class:`flex flex-wrap items-center gap-4 mt-2`},Pe={__name:`BundlePage`,setup(Pe){let{t:B}=re(),V=oe(),Fe=te(),H=ne(),U=e(!1),W=e(1),Ie=d(()=>String(Fe.params.slug||``)),G=d(()=>de(Ie.value)),K=e(null);i(()=>{se();let e=typeof window<`u`?window.history.state?.back:null;K.value=typeof e==`string`?e:null});let Le=d(()=>{let e=K.value;return!e||e===`/`||e.startsWith(`/#`)?`product.backHome`:`product.backGeneric`});function Re(){K.value?H.back():H.push(`/`)}let ze=[{key:`nav.shop`,href:`/shop`},{key:`nav.bundles`,href:`/#bundles`},{key:`nav.about`,href:`/#about`},{key:`nav.kaiserhacks`,href:`/kaiserhacks`}],Be=[],q=d(()=>{let e=G.value;return e?`€ ${e.price.toFixed(2).replace(`.`,`,`)}`:``}),J=d(()=>{let e=G.value;return e?{name:B(e.nameKey),usage:e.usageKey?B(e.usageKey):``,description:e.descriptionKey?B(e.descriptionKey):``,imageAlt:e.imageAltKey?B(e.imageAltKey):``,badge:e.badgeKey?B(e.badgeKey):``}:null}),Y=d(()=>{let e=G.value;return e?e.itemKeys.map(e=>{let t=B(e);return{label:t,product:v.find(e=>t.toLowerCase().includes(e.title.toLowerCase().replace(/®/g,``).trim()))}}):[]});async function X(){let e=G.value;e?.anchorProductId&&(await y(e.anchorProductId,W.value),U.value=!0)}async function Ve({productId:e,quantity:t}){await ae(e,t)}async function He(e){await ie(e)}function Ue(){U.value=!1,H.push(`/checkout`)}async function We(e){await y(e.id,1),U.value=!0}let Z=e(null),Q=null;function $(){let e=Z.value,t=e&&(e.$el||e);if(!t||typeof window>`u`)return;let n=Math.round(t.getBoundingClientRect().height);document.documentElement.style.setProperty(`--nav-h`,`${n}px`)}return i(()=>{if($(),typeof ResizeObserver<`u`&&Z.value){let e=Z.value.$el||Z.value;Q=new ResizeObserver($),Q.observe(e)}typeof window<`u`&&window.addEventListener(`resize`,$)}),ee(()=>{Q&&Q.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,$)}),(e,i)=>{let d=n(`RouterLink`);return t(),h(p,null,[u(ce,{ref_key:`navRef`,ref:Z,variant:`brand`,layout:`standard`,items:ze,"secondary-items":Be,"cart-count":r(V).count,products:r(v),onCart:i[0]||=e=>U.value=!0,onSearch:We},null,8,[`cart-count`,`products`]),G.value?(t(),h(`main`,S,[m(`div`,C,[m(`button`,{type:`button`,class:`inline-flex items-center gap-2 text-sm tracking-label uppercase text-cream/75 hover:text-cream transition-colors`,onClick:Re},[u(g,{name:`arrow-left`,size:16}),f(` `+s(r(B)(Le.value)),1)])]),m(`section`,w,[m(`div`,T,[m(`div`,E,[J.value.badge?(t(),o(_,{key:0,variant:G.value.badgeVariant||`accent`,class:`absolute top-4 left-4 z-[1] shadow-sm`},{default:c(()=>[f(s(J.value.badge),1)]),_:1},8,[`variant`])):l(``,!0),m(`div`,D,[m(`img`,{src:G.value.image,alt:J.value.imageAlt||J.value.name,loading:`eager`,decoding:`async`,class:`absolute inset-0 w-full h-full object-cover`},null,8,O),G.value.aiEdited?(t(),h(`span`,k,`AI Edited`)):l(``,!0)])]),m(`div`,A,[J.value.usage?(t(),h(`p`,j,s(J.value.usage),1)):l(``,!0),m(`h1`,M,s(J.value.name),1),J.value.description?(t(),h(`p`,N,s(J.value.description),1)):l(``,!0),m(`div`,P,[m(`p`,F,s(r(B)(`bundle.items`)),1),m(`ul`,I,[(t(!0),h(p,null,a(Y.value,(e,n)=>(t(),h(`li`,{key:n,class:`flex items-start gap-2 text-base text-cream/95 leading-relaxed`},[u(g,{name:`check`,size:18,class:`mt-0.5 shrink-0 text-accent`}),e.product?(t(),o(d,{key:0,to:e.product.href,class:`hover:text-accent transition-colors`},{default:c(()=>[f(s(e.label),1)]),_:2},1032,[`to`])):(t(),h(`span`,L,s(e.label),1))]))),128))])]),m(`div`,R,[m(`span`,ge,s(q.value),1)]),m(`div`,_e,[u(x,{modelValue:W.value,"onUpdate:modelValue":i[1]||=e=>W.value=e,min:1,max:10},null,8,[`modelValue`]),u(b,{variant:`accent`,size:`lg`,onClick:X},{before:c(()=>[u(g,{name:`plus`,size:16})]),default:c(()=>[f(` `+s(r(B)(`ds.buttons.addToCart`)),1)]),_:1})])])])]),m(`div`,ve,[m(`section`,ye,[m(`div`,be,[J.value.badge?(t(),o(_,{key:0,variant:G.value.badgeVariant||`accent`,class:`absolute top-4 left-4 z-[1] shadow-sm`},{default:c(()=>[f(s(J.value.badge),1)]),_:1},8,[`variant`])):l(``,!0),m(`img`,{src:G.value.image,alt:J.value.imageAlt||J.value.name,loading:`eager`,decoding:`async`,class:`block w-full h-auto`},null,8,xe),G.value.aiEdited?(t(),h(`span`,Se,`AI Edited`)):l(``,!0)])]),m(`section`,Ce,[m(`div`,we,[J.value.usage?(t(),h(`p`,Te,s(J.value.usage),1)):l(``,!0),m(`h1`,z,s(J.value.name),1),J.value.description?(t(),h(`p`,Ee,s(J.value.description),1)):l(``,!0),m(`div`,De,[m(`p`,Oe,s(r(B)(`bundle.items`)),1),m(`ul`,ke,[(t(!0),h(p,null,a(Y.value,(e,n)=>(t(),h(`li`,{key:n,class:`flex items-start gap-2 text-base text-cream/95 leading-relaxed`},[u(g,{name:`check`,size:18,class:`mt-0.5 shrink-0 text-accent`}),e.product?(t(),o(d,{key:0,to:e.product.href,class:`hover:text-accent transition-colors`},{default:c(()=>[f(s(e.label),1)]),_:2},1032,[`to`])):(t(),h(`span`,Ae,s(e.label),1))]))),128))])]),m(`div`,je,[m(`span`,Me,s(q.value),1)]),m(`div`,Ne,[u(x,{modelValue:W.value,"onUpdate:modelValue":i[2]||=e=>W.value=e,min:1,max:10},null,8,[`modelValue`]),u(b,{variant:`accent`,size:`lg`,onClick:X},{before:c(()=>[u(g,{name:`plus`,size:16})]),default:c(()=>[f(` `+s(r(B)(`ds.buttons.addToCart`)),1)]),_:1})])])])])])):(t(),h(`main`,fe,[m(`div`,pe,[m(`h1`,me,s(r(B)(`product.notFound.title`)),1),m(`p`,he,s(r(B)(`product.notFound.body`)),1),u(d,{to:`/`,class:`inline-flex`},{default:c(()=>[u(b,{variant:`primary`,size:`lg`},{default:c(()=>[f(s(r(B)(`product.backHome`)),1)]),_:1})]),_:1})])])),i[4]||=m(`div`,{"aria-hidden":`true`,class:`min-[1100px]:hidden bg-brand`,style:{height:`calc(100px + env(safe-area-inset-bottom))`}},null,-1),u(ue),u(le,{modelValue:U.value,"onUpdate:modelValue":i[3]||=e=>U.value=e,items:r(V).items,subtotal:r(V).subtotal,count:r(V).count,onUpdateQuantity:Ve,onRemove:He,onCheckout:Ue},null,8,[`modelValue`,`items`,`subtotal`,`count`])],64)}}};export{Pe as default}; \ No newline at end of file diff --git a/dist/assets/Bundles-BAyqklFs.js b/dist/assets/Bundles-_5YmPDGF.js similarity index 98% rename from dist/assets/Bundles-BAyqklFs.js rename to dist/assets/Bundles-_5YmPDGF.js index fe1c6ef..e13174c 100644 --- a/dist/assets/Bundles-BAyqklFs.js +++ b/dist/assets/Bundles-_5YmPDGF.js @@ -1 +1 @@ -import{B as e,C as t,S as n,T as r,c as i,ft as a,l as o,m as s,p as c,r as l,s as u,u as d,ut as f,x as p}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as m}from"./Icon-CtR1FGIT.js";import{t as h}from"./IconButton-UABNp_yn.js";import{t as g}from"./i18n-BkCuZ9ke.js";import{t as _}from"./_plugin-vue_export-helper-0vLWKQyu.js";import{t as v}from"./BundleCard-Biq7m7Mj.js";var y={key:0,class:`flex flex-col gap-4`},b={key:0,class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},x={key:0,class:`italic font-light text-brand`},S={__name:`BundlesHeader`,props:{headline:{type:String,default:``},headlineEm:{type:String,default:``},sub:{type:String,default:``},subMaxWidth:{type:String,default:`max-w-md`}},setup(e){return(n,r)=>e.headline||e.headlineEm||e.sub?(t(),d(`div`,y,[e.headline||e.headlineEm?(t(),d(`h2`,b,[c(a(e.headline)+` `,1),e.headlineEm?(t(),d(`em`,x,a(e.headlineEm),1)):o(``,!0)])):o(``,!0),e.sub?(t(),d(`p`,{key:1,class:f([`text-base leading-relaxed text-muted`,e.subMaxWidth])},a(e.sub),3)):o(``,!0)])):o(``,!0)}},C={"aria-hidden":`true`,class:`mt-0.5 inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-brand-wash text-brand`},w={class:`font-sans text-sm font-semibold text-ink leading-snug`},T={__name:`BundlesBenefits`,props:{benefits:{type:Array,required:!0,validator:e=>e.every(e=>typeof e==`string`)},listClass:{type:String,default:``}},setup(e){return(n,i)=>e.benefits.length?(t(),d(`ul`,{key:0,class:f([`flex flex-col gap-4`,e.listClass])},[(t(!0),d(l,null,r(e.benefits.slice(0,3),e=>(t(),d(`li`,{key:e,class:`flex items-start gap-3`},[u(`span`,C,[s(m,{name:`check`,size:14,"stroke-width":2.2})]),u(`span`,w,a(e),1)]))),128))],2)):o(``,!0)}},E={id:`bundles`,class:`bg-surface text-ink`},ee={class:`mx-auto w-full max-w-6xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16 lg:py-28`},te={key:0,class:`flex flex-col gap-10 md:gap-12 lg:gap-14`},D={key:0,class:`rounded-md border border-cream-dark bg-cream px-5 py-4 sm:px-6 sm:py-5`},O={class:`flex flex-col gap-4 sm:flex-row sm:flex-wrap sm:items-center sm:justify-between sm:gap-x-8 sm:gap-y-3`},k={"aria-hidden":`true`,class:`inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-brand-wash text-brand`},A={class:`font-sans text-sm font-semibold text-ink leading-snug`},j={class:`min-w-0`},M={class:`md:hidden grid gap-5`},N={class:`hidden md:grid md:gap-6 md:grid-cols-3`},P={key:1,class:`grid gap-10 md:gap-12 lg:gap-16 lg:grid-cols-[340px_1fr] lg:items-center`},F={class:`flex flex-col gap-8`},I={class:`min-w-0`},L={class:`md:hidden grid gap-5`},R={class:`hidden md:flex md:flex-col md:gap-6 relative`},z=[`aria-label`],B=[`aria-label`],V={class:`flex items-center justify-between gap-4`},H={class:`flex items-center gap-2`},U=[`aria-label`,`aria-current`,`onClick`],W={class:`flex items-center gap-2`},G=_({__name:`Bundles`,props:{layout:{type:String,default:`sidebar`,validator:e=>[`sidebar`,`stacked`].includes(e)},headline:{type:String,default:``},headlineEm:{type:String,default:``},sub:{type:String,default:``},benefits:{type:Array,default:()=>[],validator:e=>e.every(e=>typeof e==`string`)},bundles:{type:Array,required:!0},carouselLabel:{type:String,default:``},carouselPrevLabel:{type:String,default:``},carouselNextLabel:{type:String,default:``},carouselGoToPrefix:{type:String,default:``}},emits:[`add`],setup(c){let _=c,{t:y}=g(),b=()=>_.carouselLabel||y(`ds.bundles.carousel.label`),x=()=>_.carouselPrevLabel||y(`ds.bundles.carousel.prev`),C=()=>_.carouselNextLabel||y(`ds.bundles.carousel.next`),w=()=>_.carouselGoToPrefix||y(`ds.bundles.carousel.goToSlide`),G=e(null),K=e(0);function q(){return G.value?G.value.children.length:0}function J(e,t=`smooth`){let n=G.value;if(!n)return;let r=n.children.length-1,i=Math.max(0,Math.min(e,r));n.scrollTo({left:i*n.clientWidth,behavior:t})}function Y(){let e=q()-1;e<0||J(K.value===0?e:K.value-1)}function X(){let e=q()-1;e<0||J(K.value===e?0:K.value+1)}function Z(){let e=G.value;if(!e)return;let t=Math.round(e.scrollLeft/e.clientWidth);t!==K.value&&(K.value=t)}let Q=0;function $(){Q&&cancelAnimationFrame(Q),Q=requestAnimationFrame(()=>{let e=G.value;e&&(e.scrollLeft=K.value*e.clientWidth,Q=0)})}return n(()=>{window.addEventListener(`resize`,$,{passive:!0})}),p(()=>{window.removeEventListener(`resize`,$),Q&&cancelAnimationFrame(Q)}),(e,n)=>(t(),d(`section`,E,[u(`div`,ee,[c.layout===`stacked`?(t(),d(`div`,te,[s(S,{headline:c.headline,"headline-em":c.headlineEm,sub:c.sub,"sub-max-width":`max-w-2xl`},null,8,[`headline`,`headline-em`,`sub`]),c.benefits.length?(t(),d(`div`,D,[u(`ul`,O,[(t(!0),d(l,null,r(c.benefits.slice(0,3),e=>(t(),d(`li`,{key:e,class:`flex items-center gap-3`},[u(`span`,k,[s(m,{name:`check`,size:14,"stroke-width":2.2})]),u(`span`,A,a(e),1)]))),128))])])):o(``,!0),u(`div`,j,[u(`div`,M,[(t(!0),d(l,null,r(c.bundles,n=>(t(),i(v,{key:n.id,layout:`vertical`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`]))),128))]),u(`div`,N,[(t(!0),d(l,null,r(c.bundles.slice(0,3),n=>(t(),i(v,{key:n.id,layout:`vertical`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`]))),128))])])])):(t(),d(`div`,P,[u(`aside`,F,[s(S,{headline:c.headline,"headline-em":c.headlineEm,sub:c.sub,"sub-max-width":`max-w-md`},null,8,[`headline`,`headline-em`,`sub`]),s(T,{benefits:c.benefits},null,8,[`benefits`])]),u(`div`,I,[u(`div`,L,[(t(!0),d(l,null,r(c.bundles,n=>(t(),i(v,{key:n.id,layout:`vertical`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`]))),128))]),u(`div`,R,[u(`div`,{ref_key:`track`,ref:G,class:`flex snap-x snap-mandatory overflow-x-auto scroll-smooth no-scrollbar pt-2 pb-16 -mt-2 -mb-16`,role:`region`,"aria-roledescription":`carousel`,"aria-label":b(),onScroll:Z},[(t(!0),d(l,null,r(c.bundles,(n,r)=>(t(),d(`div`,{key:n.id,class:`snap-start shrink-0 w-full`,role:`group`,"aria-roledescription":`slide`,"aria-label":`${r+1} / ${c.bundles.length}`},[s(v,{layout:`horizontal`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`])],8,B))),128))],40,z),u(`div`,V,[u(`div`,H,[(t(!0),d(l,null,r(c.bundles,(e,n)=>(t(),d(`button`,{key:n,type:`button`,class:f([`h-2 rounded-full transition-all duration-base`,K.value===n?`w-8 bg-brand`:`w-2 bg-brand/30 hover:bg-brand/50`]),"aria-label":`${w()} ${n+1}`,"aria-current":K.value===n?`true`:void 0,onClick:e=>J(n)},null,10,U))),128))]),u(`div`,W,[s(h,{icon:`chevron-left`,variant:`brand-wash`,size:`md`,"aria-label":x(),onClick:Y},null,8,[`aria-label`]),s(h,{icon:`chevron-right`,variant:`brand-wash`,size:`md`,"aria-label":C(),onClick:X},null,8,[`aria-label`])])])])])]))])]))}},[[`__scopeId`,`data-v-e2af4e3b`]]);export{G as t}; \ No newline at end of file +import{B as e,C as t,S as n,T as r,c as i,ft as a,l as o,m as s,p as c,r as l,s as u,u as d,ut as f,x as p}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as m}from"./Icon-CtR1FGIT.js";import{t as h}from"./IconButton-UABNp_yn.js";import{t as g}from"./i18n-Uw3aZfCH.js";import{t as _}from"./_plugin-vue_export-helper-0vLWKQyu.js";import{t as v}from"./BundleCard-BfWZdpfz.js";var y={key:0,class:`flex flex-col gap-4`},b={key:0,class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},x={key:0,class:`italic font-light text-brand`},S={__name:`BundlesHeader`,props:{headline:{type:String,default:``},headlineEm:{type:String,default:``},sub:{type:String,default:``},subMaxWidth:{type:String,default:`max-w-md`}},setup(e){return(n,r)=>e.headline||e.headlineEm||e.sub?(t(),d(`div`,y,[e.headline||e.headlineEm?(t(),d(`h2`,b,[c(a(e.headline)+` `,1),e.headlineEm?(t(),d(`em`,x,a(e.headlineEm),1)):o(``,!0)])):o(``,!0),e.sub?(t(),d(`p`,{key:1,class:f([`text-base leading-relaxed text-muted`,e.subMaxWidth])},a(e.sub),3)):o(``,!0)])):o(``,!0)}},C={"aria-hidden":`true`,class:`mt-0.5 inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-brand-wash text-brand`},w={class:`font-sans text-sm font-semibold text-ink leading-snug`},T={__name:`BundlesBenefits`,props:{benefits:{type:Array,required:!0,validator:e=>e.every(e=>typeof e==`string`)},listClass:{type:String,default:``}},setup(e){return(n,i)=>e.benefits.length?(t(),d(`ul`,{key:0,class:f([`flex flex-col gap-4`,e.listClass])},[(t(!0),d(l,null,r(e.benefits.slice(0,3),e=>(t(),d(`li`,{key:e,class:`flex items-start gap-3`},[u(`span`,C,[s(m,{name:`check`,size:14,"stroke-width":2.2})]),u(`span`,w,a(e),1)]))),128))],2)):o(``,!0)}},E={id:`bundles`,class:`bg-surface text-ink`},ee={class:`mx-auto w-full max-w-6xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16 lg:py-28`},te={key:0,class:`flex flex-col gap-10 md:gap-12 lg:gap-14`},D={key:0,class:`rounded-md border border-cream-dark bg-cream px-5 py-4 sm:px-6 sm:py-5`},O={class:`flex flex-col gap-4 sm:flex-row sm:flex-wrap sm:items-center sm:justify-between sm:gap-x-8 sm:gap-y-3`},k={"aria-hidden":`true`,class:`inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-brand-wash text-brand`},A={class:`font-sans text-sm font-semibold text-ink leading-snug`},j={class:`min-w-0`},M={class:`md:hidden grid gap-5`},N={class:`hidden md:grid md:gap-6 md:grid-cols-3`},P={key:1,class:`grid gap-10 md:gap-12 lg:gap-16 lg:grid-cols-[340px_1fr] lg:items-center`},F={class:`flex flex-col gap-8`},I={class:`min-w-0`},L={class:`md:hidden grid gap-5`},R={class:`hidden md:flex md:flex-col md:gap-6 relative`},z=[`aria-label`],B=[`aria-label`],V={class:`flex items-center justify-between gap-4`},H={class:`flex items-center gap-2`},U=[`aria-label`,`aria-current`,`onClick`],W={class:`flex items-center gap-2`},G=_({__name:`Bundles`,props:{layout:{type:String,default:`sidebar`,validator:e=>[`sidebar`,`stacked`].includes(e)},headline:{type:String,default:``},headlineEm:{type:String,default:``},sub:{type:String,default:``},benefits:{type:Array,default:()=>[],validator:e=>e.every(e=>typeof e==`string`)},bundles:{type:Array,required:!0},carouselLabel:{type:String,default:``},carouselPrevLabel:{type:String,default:``},carouselNextLabel:{type:String,default:``},carouselGoToPrefix:{type:String,default:``}},emits:[`add`],setup(c){let _=c,{t:y}=g(),b=()=>_.carouselLabel||y(`ds.bundles.carousel.label`),x=()=>_.carouselPrevLabel||y(`ds.bundles.carousel.prev`),C=()=>_.carouselNextLabel||y(`ds.bundles.carousel.next`),w=()=>_.carouselGoToPrefix||y(`ds.bundles.carousel.goToSlide`),G=e(null),K=e(0);function q(){return G.value?G.value.children.length:0}function J(e,t=`smooth`){let n=G.value;if(!n)return;let r=n.children.length-1,i=Math.max(0,Math.min(e,r));n.scrollTo({left:i*n.clientWidth,behavior:t})}function Y(){let e=q()-1;e<0||J(K.value===0?e:K.value-1)}function X(){let e=q()-1;e<0||J(K.value===e?0:K.value+1)}function Z(){let e=G.value;if(!e)return;let t=Math.round(e.scrollLeft/e.clientWidth);t!==K.value&&(K.value=t)}let Q=0;function $(){Q&&cancelAnimationFrame(Q),Q=requestAnimationFrame(()=>{let e=G.value;e&&(e.scrollLeft=K.value*e.clientWidth,Q=0)})}return n(()=>{window.addEventListener(`resize`,$,{passive:!0})}),p(()=>{window.removeEventListener(`resize`,$),Q&&cancelAnimationFrame(Q)}),(e,n)=>(t(),d(`section`,E,[u(`div`,ee,[c.layout===`stacked`?(t(),d(`div`,te,[s(S,{headline:c.headline,"headline-em":c.headlineEm,sub:c.sub,"sub-max-width":`max-w-2xl`},null,8,[`headline`,`headline-em`,`sub`]),c.benefits.length?(t(),d(`div`,D,[u(`ul`,O,[(t(!0),d(l,null,r(c.benefits.slice(0,3),e=>(t(),d(`li`,{key:e,class:`flex items-center gap-3`},[u(`span`,k,[s(m,{name:`check`,size:14,"stroke-width":2.2})]),u(`span`,A,a(e),1)]))),128))])])):o(``,!0),u(`div`,j,[u(`div`,M,[(t(!0),d(l,null,r(c.bundles,n=>(t(),i(v,{key:n.id,layout:`vertical`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`]))),128))]),u(`div`,N,[(t(!0),d(l,null,r(c.bundles.slice(0,3),n=>(t(),i(v,{key:n.id,layout:`vertical`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`]))),128))])])])):(t(),d(`div`,P,[u(`aside`,F,[s(S,{headline:c.headline,"headline-em":c.headlineEm,sub:c.sub,"sub-max-width":`max-w-md`},null,8,[`headline`,`headline-em`,`sub`]),s(T,{benefits:c.benefits},null,8,[`benefits`])]),u(`div`,I,[u(`div`,L,[(t(!0),d(l,null,r(c.bundles,n=>(t(),i(v,{key:n.id,layout:`vertical`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`]))),128))]),u(`div`,R,[u(`div`,{ref_key:`track`,ref:G,class:`flex snap-x snap-mandatory overflow-x-auto scroll-smooth no-scrollbar pt-2 pb-16 -mt-2 -mb-16`,role:`region`,"aria-roledescription":`carousel`,"aria-label":b(),onScroll:Z},[(t(!0),d(l,null,r(c.bundles,(n,r)=>(t(),d(`div`,{key:n.id,class:`snap-start shrink-0 w-full`,role:`group`,"aria-roledescription":`slide`,"aria-label":`${r+1} / ${c.bundles.length}`},[s(v,{layout:`horizontal`,name:n.name,items:n.items,price:n.price,usage:n.usage,image:n.image,"image-alt":n.imageAlt,"ai-edited":n.aiEdited,badge:n.badge,"badge-variant":n.badgeVariant||`accent`,href:n.href||``,tone:`paper`,onAdd:t=>e.$emit(`add`,n.id)},null,8,[`name`,`items`,`price`,`usage`,`image`,`image-alt`,`ai-edited`,`badge`,`badge-variant`,`href`,`onAdd`])],8,B))),128))],40,z),u(`div`,V,[u(`div`,H,[(t(!0),d(l,null,r(c.bundles,(e,n)=>(t(),d(`button`,{key:n,type:`button`,class:f([`h-2 rounded-full transition-all duration-base`,K.value===n?`w-8 bg-brand`:`w-2 bg-brand/30 hover:bg-brand/50`]),"aria-label":`${w()} ${n+1}`,"aria-current":K.value===n?`true`:void 0,onClick:e=>J(n)},null,10,U))),128))]),u(`div`,W,[s(h,{icon:`chevron-left`,variant:`brand-wash`,size:`md`,"aria-label":x(),onClick:Y},null,8,[`aria-label`]),s(h,{icon:`chevron-right`,variant:`brand-wash`,size:`md`,"aria-label":C(),onClick:X},null,8,[`aria-label`])])])])])]))])]))}},[[`__scopeId`,`data-v-e2af4e3b`]]);export{G as t}; \ No newline at end of file diff --git a/dist/assets/BundlesPreview-3Yrmy3Qd.js b/dist/assets/BundlesPreview-BuVgmTOg.js similarity index 91% rename from dist/assets/BundlesPreview-3Yrmy3Qd.js rename to dist/assets/BundlesPreview-BuVgmTOg.js index 368ee5a..0bda39b 100644 --- a/dist/assets/BundlesPreview-3Yrmy3Qd.js +++ b/dist/assets/BundlesPreview-BuVgmTOg.js @@ -1 +1 @@ -import{C as e,G as t,m as n,o as r,u as i}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a}from"./vue-router-Cyqru1db.js";import{t as o}from"./i18n-BkCuZ9ke.js";import{t as s}from"./Bundles-BAyqklFs.js";var c={class:`min-h-screen bg-surface`},l={__name:`BundlesPreview`,setup(l){let{t:u}=o(),d=a(),f=r(()=>d.query.layout===`stacked`?`stacked`:`sidebar`),p=[{id:`haushalt`,name:`Haushalts-Bundle`,usage:`2–3× pro Quartal empfohlen`,items:[`1× Kaiser-Natron Pulver 250 g`,`1× Allzweck-Spray 500 ml`,`1× Spülmittel 500 ml`],price:24.9,image:`/products/kaiser-natron-pulver-250-g-grosspackung.webp`,imageAlt:`Haushalts-Bundle mit Kaiser-Natron`,badge:`Bestseller`,badgeVariant:`accent`},{id:`waesche`,name:`Wäsche & Pflege`,usage:`1–2× pro Quartal`,items:[`1× Holste Wasch-Soda 500 g`,`1× Gazelle Wäschestärke 1 l`,`1× Linda Fleckenweg 200 ml`],price:22.9,image:`/products/holste-wasch-soda-500-g-beutel.webp`,imageAlt:`Wäsche & Pflege Bundle`},{id:`wohlfuehl`,name:`Wohlfühl-Bundle`,usage:`1× pro Quartal`,items:[`1× Kaiser-Natron Tabletten 100 g`,`1× Kaiser-Natron Bad 500 g`,`1× Kaiser-Natron Fußbad 500 g`],price:29.9,image:`/products/kaiser-natron-bad-500-g.webp`,imageAlt:`Wohlfühl-Bundle`}],m=r(()=>[u(`bundles.benefit.1.title`),u(`bundles.benefit.2.title`),u(`bundles.benefit.3.title`)]);return(r,a)=>(e(),i(`div`,c,[n(s,{layout:f.value,bundles:p,headline:t(u)(`bundles.headline.a`),"headline-em":t(u)(`bundles.headline.em`),sub:t(u)(`bundles.sub`),benefits:m.value},null,8,[`layout`,`headline`,`headline-em`,`sub`,`benefits`])]))}};export{l as default}; \ No newline at end of file +import{C as e,G as t,m as n,o as r,u as i}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a}from"./vue-router-Cyqru1db.js";import{t as o}from"./i18n-Uw3aZfCH.js";import{t as s}from"./Bundles-_5YmPDGF.js";var c={class:`min-h-screen bg-surface`},l={__name:`BundlesPreview`,setup(l){let{t:u}=o(),d=a(),f=r(()=>d.query.layout===`stacked`?`stacked`:`sidebar`),p=[{id:`haushalt`,name:`Haushalts-Bundle`,usage:`2–3× pro Quartal empfohlen`,items:[`1× Kaiser-Natron Pulver 250 g`,`1× Allzweck-Spray 500 ml`,`1× Spülmittel 500 ml`],price:24.9,image:`/products/kaiser-natron-pulver-250-g-grosspackung.webp`,imageAlt:`Haushalts-Bundle mit Kaiser-Natron`,badge:`Bestseller`,badgeVariant:`accent`},{id:`waesche`,name:`Wäsche & Pflege`,usage:`1–2× pro Quartal`,items:[`1× Holste Wasch-Soda 500 g`,`1× Gazelle Wäschestärke 1 l`,`1× Linda Fleckenweg 200 ml`],price:22.9,image:`/products/holste-wasch-soda-500-g-beutel.webp`,imageAlt:`Wäsche & Pflege Bundle`},{id:`wohlfuehl`,name:`Wohlfühl-Bundle`,usage:`1× pro Quartal`,items:[`1× Kaiser-Natron Tabletten 100 g`,`1× Kaiser-Natron Bad 500 g`,`1× Kaiser-Natron Fußbad 500 g`],price:29.9,image:`/products/kaiser-natron-bad-500-g.webp`,imageAlt:`Wohlfühl-Bundle`}],m=r(()=>[u(`bundles.benefit.1.title`),u(`bundles.benefit.2.title`),u(`bundles.benefit.3.title`)]);return(r,a)=>(e(),i(`div`,c,[n(s,{layout:f.value,bundles:p,headline:t(u)(`bundles.headline.a`),"headline-em":t(u)(`bundles.headline.em`),sub:t(u)(`bundles.sub`),benefits:m.value},null,8,[`layout`,`headline`,`headline-em`,`sub`,`benefits`])]))}};export{l as default}; \ No newline at end of file diff --git a/dist/assets/BundlesSection-B4eP-IyQ.js b/dist/assets/BundlesSection-Dk9YIi6p.js similarity index 94% rename from dist/assets/BundlesSection-B4eP-IyQ.js rename to dist/assets/BundlesSection-Dk9YIi6p.js index dca2651..0fe0cb3 100644 --- a/dist/assets/BundlesSection-B4eP-IyQ.js +++ b/dist/assets/BundlesSection-Dk9YIi6p.js @@ -1,4 +1,4 @@ -import{B as e,C as t,G as n,T as r,c as i,ft as a,j as o,m as s,o as c,p as l,r as u,s as d,u as f,ut as p}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as m}from"./i18n-BkCuZ9ke.js";import{t as h}from"./SectionShell-XUVs_07L.js";import{t as g}from"./DevicePreview-CxF-mErd.js";var _={role:`tablist`,"aria-label":`Layout variant`,class:`inline-flex items-center p-1 gap-0.5 rounded-pill border border-line bg-paper`},v=[`aria-selected`,`onClick`],y={class:`eyebrow mb-5`},b={__name:`BundlesSection`,setup(b){let{t:x}=m(),S=[{id:`sidebar`,label:`Option 1`},{id:`stacked`,label:`Option 2`}],C=e(`sidebar`),w=c(()=>`/design/preview/bundles?layout=${C.value}`);return(e,c)=>(t(),i(h,{eyebrow:n(x)(`ds.eyebrow.components`),title:n(x)(`ds.bundles.title`),description:n(x)(`ds.bundles.description`),wide:``},{default:o(()=>[d(`section`,null,[s(g,{src:w.value,initial:`desktop`,height:1080},{controls:o(()=>[d(`div`,_,[(t(),f(u,null,r(S,e=>d(`button`,{key:e.id,type:`button`,role:`tab`,"aria-selected":C.value===e.id,class:p([`inline-flex items-center gap-2 px-3 py-1.5 text-[12px] font-semibold tracking-label rounded-pill transition-colors duration-base`,C.value===e.id?`bg-brand text-accent`:`text-muted hover:text-brand`]),onClick:t=>C.value=e.id},a(e.label),11,v)),64))])]),_:1},8,[`src`])]),d(`section`,null,[d(`h2`,y,a(n(x)(`ds.heading.usage`)),1),c[0]||=d(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[d(`pre`,{class:`whitespace-pre-wrap`},``/design/preview/bundles?layout=${C.value}`);return(e,c)=>(t(),i(h,{eyebrow:n(x)(`ds.eyebrow.components`),title:n(x)(`ds.bundles.title`),description:n(x)(`ds.bundles.description`),wide:``},{default:o(()=>[d(`section`,null,[s(g,{src:w.value,initial:`desktop`,height:1080},{controls:o(()=>[d(`div`,_,[(t(),f(u,null,r(S,e=>d(`button`,{key:e.id,type:`button`,role:`tab`,"aria-selected":C.value===e.id,class:p([`inline-flex items-center gap-2 px-3 py-1.5 text-[12px] font-semibold tracking-label rounded-pill transition-colors duration-base`,C.value===e.id?`bg-brand text-accent`:`text-muted hover:text-brand`]),onClick:t=>C.value=e.id},a(e.label),11,v)),64))])]),_:1},8,[`src`])]),d(`section`,null,[d(`h2`,y,a(n(x)(`ds.heading.usage`)),1),c[0]||=d(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[d(`pre`,{class:`whitespace-pre-wrap`},`(e(),n(d,{eyebrow:t(F)(`ds.eyebrow.components`),title:t(F)(`ds.buttons.title`),description:t(F)(`ds.buttons.description`)},{default:i(()=>[s(`section`,null,[s(`h2`,p,r(t(F)(`ds.heading.variants`)),1),a(f,{tone:`paper`},{default:i(()=>[s(`div`,m,[a(u,{variant:`primary`},{default:i(()=>[o(r(t(F)(`ds.buttons.primary`)),1)]),_:1}),a(u,{variant:`accent`},{default:i(()=>[o(r(t(F)(`ds.buttons.accent`)),1)]),_:1}),a(u,{variant:`secondary`},{default:i(()=>[o(r(t(F)(`ds.buttons.secondary`)),1)]),_:1}),a(u,{variant:`ghost`},{default:i(()=>[o(r(t(F)(`ds.buttons.ghost`)),1)]),_:1}),a(u,{variant:`danger`},{default:i(()=>[o(r(t(F)(`ds.buttons.danger`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,h,r(t(F)(`ds.heading.onDifferentSurfaces`)),1),s(`div`,g,[a(f,{tone:`paper`},{default:i(()=>[s(`p`,_,r(t(F)(`ds.cards.paper`)),1),s(`div`,v,[a(u,{variant:`primary`},{before:i(()=>[a(c,{name:`cart`,size:18})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.addToCart`)),1)]),_:1}),a(u,{variant:`ghost`},{default:i(()=>[o(r(t(F)(`ds.buttons.learnMore`)),1)]),_:1})])]),_:1}),a(f,{tone:`cream`},{default:i(()=>[s(`p`,y,r(t(F)(`ds.cards.cream`)),1),s(`div`,b,[a(u,{variant:`primary`},{before:i(()=>[a(c,{name:`cart`,size:18})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.addToCart`)),1)]),_:1}),a(u,{variant:`ghost`},{default:i(()=>[o(r(t(F)(`ds.buttons.learnMore`)),1)]),_:1})])]),_:1}),a(f,{tone:`brand`},{default:i(()=>[s(`p`,x,r(t(F)(`ds.cards.brand`)),1),s(`div`,S,[a(u,{variant:`accent`},{before:i(()=>[a(c,{name:`cart`,size:18})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.addToCart`)),1)]),_:1}),a(u,{variant:`ghost`,class:`!text-cream hover:!bg-cream-wash`},{default:i(()=>[o(r(t(F)(`ds.buttons.learnMore`)),1)]),_:1})])]),_:1})])]),s(`section`,null,[s(`h2`,C,r(t(F)(`ds.heading.sizes`)),1),a(f,{tone:`paper`},{default:i(()=>[s(`div`,w,[a(u,{size:`sm`},{default:i(()=>[o(r(t(F)(`ds.buttons.small`)),1)]),_:1}),a(u,{size:`md`},{default:i(()=>[o(r(t(F)(`ds.buttons.medium`)),1)]),_:1}),a(u,{size:`lg`},{default:i(()=>[o(r(t(F)(`ds.buttons.large`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,T,r(t(F)(`ds.heading.withIcons`)),1),a(f,{tone:`paper`},{default:i(()=>[s(`div`,E,[a(u,{variant:`primary`},{before:i(()=>[a(c,{name:`cart`,size:18})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.addToCart`)),1)]),_:1}),a(u,{variant:`secondary`},{after:i(()=>[a(c,{name:`arrow-right`,size:18})]),default:i(()=>[o(r(t(F)(`ds.buttons.learnMore`))+` `,1)]),_:1}),a(u,{variant:`ghost`},{before:i(()=>[a(c,{name:`heart`,size:18})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.save`)),1)]),_:1}),a(u,{variant:`accent`,size:`sm`},{before:i(()=>[a(c,{name:`check`,size:16})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.confirm`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,D,r(t(F)(`ds.heading.states`)),1),a(f,{tone:`paper`},{default:i(()=>[s(`div`,O,[a(u,null,{default:i(()=>[o(r(t(F)(`ds.heading.default`)),1)]),_:1}),a(u,{disabled:``},{default:i(()=>[o(r(t(F)(`ds.buttons.disabled`)),1)]),_:1}),a(u,{loading:``},{default:i(()=>[o(r(t(F)(`ds.buttons.loading`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,k,r(t(F)(`ds.heading.block`)),1),a(f,{tone:`paper`},{default:i(()=>[s(`div`,A,[a(u,{block:``,variant:`primary`},{before:i(()=>[a(c,{name:`cart`,size:18})]),default:i(()=>[o(` `+r(t(F)(`ds.buttons.addToCart`)),1)]),_:1}),a(u,{block:``,variant:`secondary`},{default:i(()=>[o(r(t(F)(`ds.buttons.continueShopping`)),1)]),_:1})])]),_:1})]),s(`section`,null,[s(`h2`,j,r(t(F)(`ds.heading.usage`)),1),s(`div`,M,[s(`pre`,N,``,1)])])]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{P as default}; \ No newline at end of file diff --git a/dist/assets/Card-CPlQ-6EI.js b/dist/assets/Card-kLsGAUqK.js similarity index 100% rename from dist/assets/Card-CPlQ-6EI.js rename to dist/assets/Card-kLsGAUqK.js diff --git a/dist/assets/CardsSection-B2ITuruO.js b/dist/assets/CardsSection-CSeKRy2S.js similarity index 93% rename from dist/assets/CardsSection-B2ITuruO.js rename to dist/assets/CardsSection-CSeKRy2S.js index 4722816..df4c055 100644 --- a/dist/assets/CardsSection-B2ITuruO.js +++ b/dist/assets/CardsSection-CSeKRy2S.js @@ -1 +1 @@ -import{C as e,G as t,c as n,ft as r,j as i,m as a,p as o,s}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as c}from"./i18n-BkCuZ9ke.js";import{t as l}from"./Badge-CudT491x.js";import{t as u}from"./SectionShell-XUVs_07L.js";import{t as d}from"./Card-CPlQ-6EI.js";var f={class:`eyebrow mb-5`},p={class:`grid md:grid-cols-3 gap-6`},m={class:`font-display text-2xl font-normal mb-2`},h={class:`text-[14px] text-muted leading-relaxed`},g={class:`font-display text-2xl font-normal mb-2`},_={class:`text-[14px] text-muted leading-relaxed`},v={class:`font-display text-2xl font-normal mb-2`},y={class:`text-[14px] opacity-80 leading-relaxed`},b={class:`eyebrow mb-5`},x={class:`grid md:grid-cols-2 gap-6`},S={class:`font-display text-2xl font-normal mb-2`},C={class:`text-[14px] text-muted leading-relaxed`},w={class:`font-display text-2xl font-normal mb-2`},T={class:`text-[14px] text-muted leading-relaxed`},E={class:`eyebrow mb-5`},D={class:`p-7`},O={class:`font-display text-2xl font-normal mb-2`},k={class:`text-[14px] text-muted leading-relaxed`},A={__name:`CardsSection`,setup(A){let{t:j}=c();return(c,A)=>(e(),n(u,{eyebrow:t(j)(`ds.eyebrow.components`),title:t(j)(`ds.cards.title`),description:t(j)(`ds.cards.description`)},{default:i(()=>[s(`section`,null,[s(`h2`,f,r(t(j)(`ds.heading.tones`)),1),s(`div`,p,[a(d,{tone:`paper`},{default:i(()=>[a(l,{variant:`subtle`,class:`mb-4`},{default:i(()=>[o(r(t(j)(`ds.cards.paper`)),1)]),_:1}),s(`h3`,m,r(t(j)(`ds.cards.paperTitle`)),1),s(`p`,h,r(t(j)(`ds.cards.paperBody`)),1)]),_:1}),a(d,{tone:`cream`},{default:i(()=>[a(l,{variant:`subtle`,class:`mb-4`},{default:i(()=>[o(r(t(j)(`ds.cards.cream`)),1)]),_:1}),s(`h3`,g,r(t(j)(`ds.cards.creamTitle`)),1),s(`p`,_,r(t(j)(`ds.cards.creamBody`)),1)]),_:1}),a(d,{tone:`brand`},{default:i(()=>[a(l,{variant:`accent`,class:`mb-4`},{default:i(()=>[o(r(t(j)(`ds.cards.brand`)),1)]),_:1}),s(`h3`,v,r(t(j)(`ds.cards.brandTitle`)),1),s(`p`,y,r(t(j)(`ds.cards.brandBody`)),1)]),_:1})])]),s(`section`,null,[s(`h2`,b,r(t(j)(`ds.heading.interactive`)),1),s(`div`,x,[a(d,{tone:`paper`,interactive:``},{default:i(()=>[s(`h3`,S,r(t(j)(`ds.cards.hoverMe`)),1),s(`p`,C,r(t(j)(`ds.cards.hoverBody`)),1)]),_:1}),a(d,{tone:`cream`,interactive:``},{default:i(()=>[s(`h3`,w,r(t(j)(`ds.cards.hoverMeToo`)),1),s(`p`,T,r(t(j)(`ds.cards.hoverBodyAlt`)),1)]),_:1})])]),s(`section`,null,[s(`h2`,E,r(t(j)(`ds.heading.withoutPadding`)),1),a(d,{tone:`paper`,padded:!1},{default:i(()=>[A[2]||=s(`div`,{class:`h-40 bg-cream rounded-t-md`},null,-1),s(`div`,D,[s(`h3`,O,r(t(j)(`ds.cards.mediaTitle`)),1),s(`p`,k,[o(r(t(j)(`ds.cards.mediaBody`))+` `,1),A[0]||=s(`code`,{class:`font-mono text-[12px]`},`:padded="false"`,-1),A[1]||=o(`. `,-1)])])]),_:1})])]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{A as default}; \ No newline at end of file +import{C as e,G as t,c as n,ft as r,j as i,m as a,p as o,s}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as c}from"./i18n-Uw3aZfCH.js";import{t as l}from"./Badge-CudT491x.js";import{t as u}from"./SectionShell-BFBDPrsk.js";import{t as d}from"./Card-kLsGAUqK.js";var f={class:`eyebrow mb-5`},p={class:`grid md:grid-cols-3 gap-6`},m={class:`font-display text-2xl font-normal mb-2`},h={class:`text-[14px] text-muted leading-relaxed`},g={class:`font-display text-2xl font-normal mb-2`},_={class:`text-[14px] text-muted leading-relaxed`},v={class:`font-display text-2xl font-normal mb-2`},y={class:`text-[14px] opacity-80 leading-relaxed`},b={class:`eyebrow mb-5`},x={class:`grid md:grid-cols-2 gap-6`},S={class:`font-display text-2xl font-normal mb-2`},C={class:`text-[14px] text-muted leading-relaxed`},w={class:`font-display text-2xl font-normal mb-2`},T={class:`text-[14px] text-muted leading-relaxed`},E={class:`eyebrow mb-5`},D={class:`p-7`},O={class:`font-display text-2xl font-normal mb-2`},k={class:`text-[14px] text-muted leading-relaxed`},A={__name:`CardsSection`,setup(A){let{t:j}=c();return(c,A)=>(e(),n(u,{eyebrow:t(j)(`ds.eyebrow.components`),title:t(j)(`ds.cards.title`),description:t(j)(`ds.cards.description`)},{default:i(()=>[s(`section`,null,[s(`h2`,f,r(t(j)(`ds.heading.tones`)),1),s(`div`,p,[a(d,{tone:`paper`},{default:i(()=>[a(l,{variant:`subtle`,class:`mb-4`},{default:i(()=>[o(r(t(j)(`ds.cards.paper`)),1)]),_:1}),s(`h3`,m,r(t(j)(`ds.cards.paperTitle`)),1),s(`p`,h,r(t(j)(`ds.cards.paperBody`)),1)]),_:1}),a(d,{tone:`cream`},{default:i(()=>[a(l,{variant:`subtle`,class:`mb-4`},{default:i(()=>[o(r(t(j)(`ds.cards.cream`)),1)]),_:1}),s(`h3`,g,r(t(j)(`ds.cards.creamTitle`)),1),s(`p`,_,r(t(j)(`ds.cards.creamBody`)),1)]),_:1}),a(d,{tone:`brand`},{default:i(()=>[a(l,{variant:`accent`,class:`mb-4`},{default:i(()=>[o(r(t(j)(`ds.cards.brand`)),1)]),_:1}),s(`h3`,v,r(t(j)(`ds.cards.brandTitle`)),1),s(`p`,y,r(t(j)(`ds.cards.brandBody`)),1)]),_:1})])]),s(`section`,null,[s(`h2`,b,r(t(j)(`ds.heading.interactive`)),1),s(`div`,x,[a(d,{tone:`paper`,interactive:``},{default:i(()=>[s(`h3`,S,r(t(j)(`ds.cards.hoverMe`)),1),s(`p`,C,r(t(j)(`ds.cards.hoverBody`)),1)]),_:1}),a(d,{tone:`cream`,interactive:``},{default:i(()=>[s(`h3`,w,r(t(j)(`ds.cards.hoverMeToo`)),1),s(`p`,T,r(t(j)(`ds.cards.hoverBodyAlt`)),1)]),_:1})])]),s(`section`,null,[s(`h2`,E,r(t(j)(`ds.heading.withoutPadding`)),1),a(d,{tone:`paper`,padded:!1},{default:i(()=>[A[2]||=s(`div`,{class:`h-40 bg-cream rounded-t-md`},null,-1),s(`div`,D,[s(`h3`,O,r(t(j)(`ds.cards.mediaTitle`)),1),s(`p`,k,[o(r(t(j)(`ds.cards.mediaBody`))+` `,1),A[0]||=s(`code`,{class:`font-mono text-[12px]`},`:padded="false"`,-1),A[1]||=o(`. `,-1)])])]),_:1})])]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{A as default}; \ No newline at end of file diff --git a/dist/assets/CartDrawer-BaYH0KvP.js b/dist/assets/CartDrawer-Cngidn8v.js similarity index 96% rename from dist/assets/CartDrawer-BaYH0KvP.js rename to dist/assets/CartDrawer-Cngidn8v.js index 0a359b7..a483bc7 100644 --- a/dist/assets/CartDrawer-BaYH0KvP.js +++ b/dist/assets/CartDrawer-Cngidn8v.js @@ -1 +1 @@ -import{A as e,B as t,C as n,G as r,T as i,b as ee,c as a,ft as o,i as te,j as s,l as c,m as l,o as u,p as d,r as ne,s as f,u as p,x as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as h}from"./runtime-dom.esm-bundler-Bg1uJ-W7.js";import{t as g}from"./Icon-CtR1FGIT.js";import{t as _}from"./IconButton-UABNp_yn.js";import{t as re}from"./i18n-BkCuZ9ke.js";import{t as ie}from"./Badge-CudT491x.js";import{n as v}from"./products-CfIXFr2X.js";import"./api-DeBxQCQq.js";import{t as y}from"./Button-DG-tA4DQ.js";import{t as b}from"./QuantityStepper-BB38-Td1.js";var x=[`aria-label`],S={class:`shrink-0 flex items-center justify-between px-6 py-5 border-b border-line`,style:{"padding-top":`calc(env(safe-area-inset-top) + 1.25rem)`}},C={class:`flex items-center gap-3 min-w-0`},w={class:`font-display text-2xl font-normal text-brand leading-none truncate`},T={class:`flex-1 overflow-y-auto`},E={key:0,class:`relative h-full flex flex-col items-center justify-center gap-4 px-8 py-16 text-center`},D={class:`w-16 h-16 rounded-full bg-brand-wash flex items-center justify-center text-brand`},O={class:`font-display text-xl text-brand`},k={class:`text-sm text-muted max-w-xs`},A={class:`md:hidden absolute bottom-5 right-5`,style:{"padding-bottom":`env(safe-area-inset-bottom)`}},j={key:1,class:`divide-y divide-line`},M=[`href`],N=[`src`,`alt`],P={class:`flex-1 min-w-0 flex flex-col gap-2`},F={class:`flex items-start justify-between gap-3`},ae={class:`min-w-0`},I={class:`text-[15px] font-semibold text-ink leading-tight truncate`},L={key:0,class:`text-[13px] text-muted mt-0.5 truncate`},R={class:`flex items-center justify-between gap-3`},z={class:`font-display text-lg text-brand tabular-nums`},B={key:0,class:`shrink-0 border-t border-line px-6 py-5 flex flex-col gap-4`,style:{"padding-bottom":`calc(env(safe-area-inset-bottom) + 1.25rem)`}},V={class:`flex items-baseline justify-between`},H={class:`eyebrow`},U={class:`font-display text-2xl text-brand tabular-nums`},W={class:`flex items-center gap-3`},G={class:`md:hidden shrink-0`},K={__name:`CartDrawer`,props:{modelValue:{type:Boolean,default:!1},items:{type:Array,default:()=>[]},subtotal:{type:Number,default:0},count:{type:Number,default:0}},emits:[`update:modelValue`,`update-quantity`,`remove`,`checkout`],setup(K,{emit:q}){let J=K,Y=q,{t:X}=re(),Z=t(null);function Q(){Y(`update:modelValue`,!1)}function oe(e){e.key===`Escape`&&(e.preventDefault(),Q())}e(()=>J.modelValue,e=>{typeof document>`u`||(document.documentElement.style.overflow=e?`hidden`:``,e&&ee(()=>Z.value?.focus()))}),m(()=>{typeof document<`u`&&(document.documentElement.style.overflow=``)});let $=u(()=>J.items.length>0);function se(e,t){Y(`update-quantity`,{productId:e.productId,quantity:t})}function ce(e){Y(`remove`,e.productId)}return(e,t)=>(n(),a(te,{to:`body`},[l(h,{"enter-active-class":`transition duration-base ease-out`,"enter-from-class":`opacity-0`,"enter-to-class":`opacity-100`,"leave-active-class":`transition duration-base ease-out`,"leave-from-class":`opacity-100`,"leave-to-class":`opacity-0`},{default:s(()=>[K.modelValue?(n(),p(`div`,{key:0,class:`fixed inset-0 z-[55] bg-ink/40`,"aria-hidden":`true`,onClick:Q})):c(``,!0)]),_:1}),l(h,{"enter-active-class":`transition-transform duration-slow ease-out`,"enter-from-class":`translate-x-full`,"enter-to-class":`translate-x-0`,"leave-active-class":`transition-transform duration-base ease-out`,"leave-from-class":`translate-x-0`,"leave-to-class":`translate-x-full`},{default:s(()=>[K.modelValue?(n(),p(`aside`,{key:0,ref_key:`panelRef`,ref:Z,tabindex:`-1`,role:`dialog`,"aria-modal":`true`,"aria-label":r(X)(`cart.label`),class:`fixed inset-y-0 right-0 z-[60] w-full md:max-w-[440px] bg-cream text-ink flex flex-col shadow-lg md:border-l md:border-line font-sans outline-none`,onKeydown:oe},[f(`header`,S,[f(`div`,C,[l(g,{name:`cart`,size:22,class:`text-brand shrink-0`}),f(`h2`,w,o(r(X)(`cart.label`)),1),K.count>0?(n(),a(ie,{key:0,variant:`subtle`,class:`shrink-0`},{default:s(()=>[d(o(K.count),1)]),_:1})):c(``,!0)]),l(_,{icon:`close`,variant:`ghost`,size:`sm`,"icon-size":20,"aria-label":r(X)(`menu.close`),class:`hidden md:inline-flex`,onClick:Q},null,8,[`aria-label`])]),f(`div`,T,[$.value?(n(),p(`ul`,j,[(n(!0),p(ne,null,i(K.items,e=>(n(),p(`li`,{key:e.productId,class:`flex gap-4 px-6 py-5`},[f(`a`,{href:e.product?.href||`#`,class:`shrink-0 w-20 h-20 rounded-sm overflow-hidden bg-paper flex items-center justify-center`},[e.product?.image?(n(),p(`img`,{key:0,src:e.product.image,alt:e.product.title,loading:`lazy`,decoding:`async`,class:`w-full h-full object-contain p-2`},null,8,N)):c(``,!0)],8,M),f(`div`,P,[f(`div`,F,[f(`div`,ae,[f(`p`,I,o(e.product?.title),1),e.product?.size?(n(),p(`p`,L,o(e.product.size),1)):c(``,!0)]),l(_,{icon:`trash`,variant:`ghost`,size:`xs`,"icon-size":18,"aria-label":r(X)(`cart.remove`),class:`shrink-0`,onClick:t=>ce(e)},null,8,[`aria-label`,`onClick`])]),f(`div`,R,[l(b,{"model-value":e.quantity,min:0,"decrease-label":r(X)(`cart.qty.decrease`),"increase-label":r(X)(`cart.qty.increase`),"onUpdate:modelValue":t=>se(e,t)},null,8,[`model-value`,`decrease-label`,`increase-label`,`onUpdate:modelValue`]),f(`span`,z,o(r(v)(e.lineTotal)),1)])])]))),128))])):(n(),p(`div`,E,[f(`div`,D,[l(g,{name:`cart`,size:28})]),f(`p`,O,o(r(X)(`cart.empty.title`)),1),f(`p`,k,o(r(X)(`cart.empty.subtitle`)),1),l(y,{variant:`secondary`,size:`md`,class:`mt-2`,onClick:Q},{default:s(()=>[d(o(r(X)(`ds.buttons.continueShopping`)),1)]),_:1}),f(`div`,A,[l(_,{icon:`close`,variant:`cream-dark`,size:`lg`,"icon-size":24,"icon-stroke-width":2,"aria-label":r(X)(`menu.close`),onClick:Q},null,8,[`aria-label`])])]))]),$.value?(n(),p(`footer`,B,[f(`div`,V,[f(`span`,H,o(r(X)(`cart.subtotal`)),1),f(`span`,U,o(r(v)(K.subtotal)),1)]),f(`div`,W,[l(y,{variant:`accent`,size:`lg`,block:``,class:`flex-1 min-w-0`,onClick:t[0]||=t=>e.$emit(`checkout`)},{after:s(()=>[l(g,{name:`arrow-right`,size:18})]),default:s(()=>[d(` `+o(r(X)(`cart.checkout`)),1)]),_:1}),f(`div`,G,[l(_,{icon:`close`,variant:`float`,size:`lg`,"icon-size":24,"icon-stroke-width":2,"aria-label":r(X)(`menu.close`),onClick:Q},null,8,[`aria-label`])])])])):c(``,!0)],40,x)):c(``,!0)]),_:1})]))}};export{K as t}; \ No newline at end of file +import{A as e,B as t,C as n,G as r,T as i,b as ee,c as a,ft as o,i as te,j as s,l as c,m as l,o as u,p as d,r as ne,s as f,u as p,x as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as h}from"./runtime-dom.esm-bundler-Bg1uJ-W7.js";import{t as g}from"./Icon-CtR1FGIT.js";import{t as _}from"./IconButton-UABNp_yn.js";import{t as re}from"./i18n-Uw3aZfCH.js";import{t as ie}from"./Badge-CudT491x.js";import{n as v}from"./products-0gaA2Xo6.js";import"./api-Co5DNHfG.js";import{t as y}from"./Button-DG-tA4DQ.js";import{t as b}from"./QuantityStepper-BB38-Td1.js";var x=[`aria-label`],S={class:`shrink-0 flex items-center justify-between px-6 py-5 border-b border-line`,style:{"padding-top":`calc(env(safe-area-inset-top) + 1.25rem)`}},C={class:`flex items-center gap-3 min-w-0`},w={class:`font-display text-2xl font-normal text-brand leading-none truncate`},T={class:`flex-1 overflow-y-auto`},E={key:0,class:`relative h-full flex flex-col items-center justify-center gap-4 px-8 py-16 text-center`},D={class:`w-16 h-16 rounded-full bg-brand-wash flex items-center justify-center text-brand`},O={class:`font-display text-xl text-brand`},k={class:`text-sm text-muted max-w-xs`},A={class:`md:hidden absolute bottom-5 right-5`,style:{"padding-bottom":`env(safe-area-inset-bottom)`}},j={key:1,class:`divide-y divide-line`},M=[`href`],N=[`src`,`alt`],P={class:`flex-1 min-w-0 flex flex-col gap-2`},F={class:`flex items-start justify-between gap-3`},ae={class:`min-w-0`},I={class:`text-[15px] font-semibold text-ink leading-tight truncate`},L={key:0,class:`text-[13px] text-muted mt-0.5 truncate`},R={class:`flex items-center justify-between gap-3`},z={class:`font-display text-lg text-brand tabular-nums`},B={key:0,class:`shrink-0 border-t border-line px-6 py-5 flex flex-col gap-4`,style:{"padding-bottom":`calc(env(safe-area-inset-bottom) + 1.25rem)`}},V={class:`flex items-baseline justify-between`},H={class:`eyebrow`},U={class:`font-display text-2xl text-brand tabular-nums`},W={class:`flex items-center gap-3`},G={class:`md:hidden shrink-0`},K={__name:`CartDrawer`,props:{modelValue:{type:Boolean,default:!1},items:{type:Array,default:()=>[]},subtotal:{type:Number,default:0},count:{type:Number,default:0}},emits:[`update:modelValue`,`update-quantity`,`remove`,`checkout`],setup(K,{emit:q}){let J=K,Y=q,{t:X}=re(),Z=t(null);function Q(){Y(`update:modelValue`,!1)}function oe(e){e.key===`Escape`&&(e.preventDefault(),Q())}e(()=>J.modelValue,e=>{typeof document>`u`||(document.documentElement.style.overflow=e?`hidden`:``,e&&ee(()=>Z.value?.focus()))}),m(()=>{typeof document<`u`&&(document.documentElement.style.overflow=``)});let $=u(()=>J.items.length>0);function se(e,t){Y(`update-quantity`,{productId:e.productId,quantity:t})}function ce(e){Y(`remove`,e.productId)}return(e,t)=>(n(),a(te,{to:`body`},[l(h,{"enter-active-class":`transition duration-base ease-out`,"enter-from-class":`opacity-0`,"enter-to-class":`opacity-100`,"leave-active-class":`transition duration-base ease-out`,"leave-from-class":`opacity-100`,"leave-to-class":`opacity-0`},{default:s(()=>[K.modelValue?(n(),p(`div`,{key:0,class:`fixed inset-0 z-[55] bg-ink/40`,"aria-hidden":`true`,onClick:Q})):c(``,!0)]),_:1}),l(h,{"enter-active-class":`transition-transform duration-slow ease-out`,"enter-from-class":`translate-x-full`,"enter-to-class":`translate-x-0`,"leave-active-class":`transition-transform duration-base ease-out`,"leave-from-class":`translate-x-0`,"leave-to-class":`translate-x-full`},{default:s(()=>[K.modelValue?(n(),p(`aside`,{key:0,ref_key:`panelRef`,ref:Z,tabindex:`-1`,role:`dialog`,"aria-modal":`true`,"aria-label":r(X)(`cart.label`),class:`fixed inset-y-0 right-0 z-[60] w-full md:max-w-[440px] bg-cream text-ink flex flex-col shadow-lg md:border-l md:border-line font-sans outline-none`,onKeydown:oe},[f(`header`,S,[f(`div`,C,[l(g,{name:`cart`,size:22,class:`text-brand shrink-0`}),f(`h2`,w,o(r(X)(`cart.label`)),1),K.count>0?(n(),a(ie,{key:0,variant:`subtle`,class:`shrink-0`},{default:s(()=>[d(o(K.count),1)]),_:1})):c(``,!0)]),l(_,{icon:`close`,variant:`ghost`,size:`sm`,"icon-size":20,"aria-label":r(X)(`menu.close`),class:`hidden md:inline-flex`,onClick:Q},null,8,[`aria-label`])]),f(`div`,T,[$.value?(n(),p(`ul`,j,[(n(!0),p(ne,null,i(K.items,e=>(n(),p(`li`,{key:e.productId,class:`flex gap-4 px-6 py-5`},[f(`a`,{href:e.product?.href||`#`,class:`shrink-0 w-20 h-20 rounded-sm overflow-hidden bg-paper flex items-center justify-center`},[e.product?.image?(n(),p(`img`,{key:0,src:e.product.image,alt:e.product.title,loading:`lazy`,decoding:`async`,class:`w-full h-full object-contain p-2`},null,8,N)):c(``,!0)],8,M),f(`div`,P,[f(`div`,F,[f(`div`,ae,[f(`p`,I,o(e.product?.title),1),e.product?.size?(n(),p(`p`,L,o(e.product.size),1)):c(``,!0)]),l(_,{icon:`trash`,variant:`ghost`,size:`xs`,"icon-size":18,"aria-label":r(X)(`cart.remove`),class:`shrink-0`,onClick:t=>ce(e)},null,8,[`aria-label`,`onClick`])]),f(`div`,R,[l(b,{"model-value":e.quantity,min:0,"decrease-label":r(X)(`cart.qty.decrease`),"increase-label":r(X)(`cart.qty.increase`),"onUpdate:modelValue":t=>se(e,t)},null,8,[`model-value`,`decrease-label`,`increase-label`,`onUpdate:modelValue`]),f(`span`,z,o(r(v)(e.lineTotal)),1)])])]))),128))])):(n(),p(`div`,E,[f(`div`,D,[l(g,{name:`cart`,size:28})]),f(`p`,O,o(r(X)(`cart.empty.title`)),1),f(`p`,k,o(r(X)(`cart.empty.subtitle`)),1),l(y,{variant:`secondary`,size:`md`,class:`mt-2`,onClick:Q},{default:s(()=>[d(o(r(X)(`ds.buttons.continueShopping`)),1)]),_:1}),f(`div`,A,[l(_,{icon:`close`,variant:`cream-dark`,size:`lg`,"icon-size":24,"icon-stroke-width":2,"aria-label":r(X)(`menu.close`),onClick:Q},null,8,[`aria-label`])])]))]),$.value?(n(),p(`footer`,B,[f(`div`,V,[f(`span`,H,o(r(X)(`cart.subtotal`)),1),f(`span`,U,o(r(v)(K.subtotal)),1)]),f(`div`,W,[l(y,{variant:`accent`,size:`lg`,block:``,class:`flex-1 min-w-0`,onClick:t[0]||=t=>e.$emit(`checkout`)},{after:s(()=>[l(g,{name:`arrow-right`,size:18})]),default:s(()=>[d(` `+o(r(X)(`cart.checkout`)),1)]),_:1}),f(`div`,G,[l(_,{icon:`close`,variant:`float`,size:`lg`,"icon-size":24,"icon-stroke-width":2,"aria-label":r(X)(`menu.close`),onClick:Q},null,8,[`aria-label`])])])])):c(``,!0)],40,x)):c(``,!0)]),_:1})]))}};export{K as t}; \ No newline at end of file diff --git a/dist/assets/CartDrawerSection-C_xdEEzo.js b/dist/assets/CartDrawerSection-DXX2DaZC.js similarity index 88% rename from dist/assets/CartDrawerSection-C_xdEEzo.js rename to dist/assets/CartDrawerSection-DXX2DaZC.js index c10ef40..17eb29a 100644 --- a/dist/assets/CartDrawerSection-C_xdEEzo.js +++ b/dist/assets/CartDrawerSection-DXX2DaZC.js @@ -1,4 +1,4 @@ -import{B as e,C as t,G as n,S as r,c as i,ft as a,j as o,m as s,p as c,s as l}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as u}from"./Icon-CtR1FGIT.js";import{t as d}from"./i18n-BkCuZ9ke.js";import{c as f,d as p,f as m,l as h,p as g,u as _}from"./api-DeBxQCQq.js";import{t as v}from"./Button-DG-tA4DQ.js";import{t as y}from"./CartDrawer-BaYH0KvP.js";import{t as b}from"./SectionShell-XUVs_07L.js";var x={class:`eyebrow mb-5`},S={class:`rounded-md border border-line bg-paper p-6 flex flex-col sm:flex-row sm:items-center gap-4`},C={class:`text-[13px] text-muted`},w={class:`eyebrow mb-5`},T={class:`text-[15px] text-muted leading-relaxed mb-4 max-w-2xl`},E={class:`eyebrow mb-5`},D={__name:`CartDrawerSection`,setup(D){let{t:O}=d(),k=g(),A=e(!1);async function j(){await h(),await f(`kaiser-natron-pulver-250-g-grosspackung`,2),await f(`kaiser-natron-bad-500-g`,1),A.value=!0}async function M({productId:e,quantity:t}){await m(e,t)}async function N(e){await p(e)}return r(()=>{_()}),(e,r)=>(t(),i(b,{eyebrow:n(O)(`ds.eyebrow.components`),title:n(O)(`ds.cartDrawer.title`),description:n(O)(`ds.cartDrawer.description`)},{default:o(()=>[l(`section`,null,[l(`h2`,x,a(n(O)(`ds.heading.default`)),1),l(`div`,S,[s(v,{variant:`primary`,onClick:j},{before:o(()=>[s(u,{name:`cart`,size:18})]),default:o(()=>[c(` `+a(n(O)(`ds.cartDrawer.demoLabel`)),1)]),_:1}),l(`p`,C,a(n(O)(`ds.cartDrawer.demoHint`)),1)])]),l(`section`,null,[l(`h2`,w,a(n(O)(`ds.cartDrawer.integrationTitle`)),1),l(`p`,T,a(n(O)(`ds.cartDrawer.integrationBody`)),1),r[2]||=l(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[l(`pre`,{class:`whitespace-pre-wrap`},`import { +import{B as e,C as t,G as n,S as r,c as i,ft as a,j as o,m as s,p as c,s as l}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as u}from"./Icon-CtR1FGIT.js";import{t as d}from"./i18n-Uw3aZfCH.js";import{c as f,d as p,f as m,l as h,p as g,u as _}from"./api-Co5DNHfG.js";import{t as v}from"./Button-DG-tA4DQ.js";import{t as y}from"./CartDrawer-Cngidn8v.js";import{t as b}from"./SectionShell-BFBDPrsk.js";var x={class:`eyebrow mb-5`},S={class:`rounded-md border border-line bg-paper p-6 flex flex-col sm:flex-row sm:items-center gap-4`},C={class:`text-[13px] text-muted`},w={class:`eyebrow mb-5`},T={class:`text-[15px] text-muted leading-relaxed mb-4 max-w-2xl`},E={class:`eyebrow mb-5`},D={__name:`CartDrawerSection`,setup(D){let{t:O}=d(),k=g(),A=e(!1);async function j(){await h(),await f(`kaiser-natron-pulver-250-g-grosspackung`,2),await f(`kaiser-natron-bad-500-g`,1),A.value=!0}async function M({productId:e,quantity:t}){await m(e,t)}async function N(e){await p(e)}return r(()=>{_()}),(e,r)=>(t(),i(b,{eyebrow:n(O)(`ds.eyebrow.components`),title:n(O)(`ds.cartDrawer.title`),description:n(O)(`ds.cartDrawer.description`)},{default:o(()=>[l(`section`,null,[l(`h2`,x,a(n(O)(`ds.heading.default`)),1),l(`div`,S,[s(v,{variant:`primary`,onClick:j},{before:o(()=>[s(u,{name:`cart`,size:18})]),default:o(()=>[c(` `+a(n(O)(`ds.cartDrawer.demoLabel`)),1)]),_:1}),l(`p`,C,a(n(O)(`ds.cartDrawer.demoHint`)),1)])]),l(`section`,null,[l(`h2`,w,a(n(O)(`ds.cartDrawer.integrationTitle`)),1),l(`p`,T,a(n(O)(`ds.cartDrawer.integrationBody`)),1),r[2]||=l(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[l(`pre`,{class:`whitespace-pre-wrap`},`import { fetchCart, addToCart, updateCartItem, diff --git a/dist/assets/CartStep-C7O0LbIi.js b/dist/assets/CartStep-BEqiUqPh.js similarity index 97% rename from dist/assets/CartStep-C7O0LbIi.js rename to dist/assets/CartStep-BEqiUqPh.js index 598b372..dd5dec1 100644 --- a/dist/assets/CartStep-C7O0LbIi.js +++ b/dist/assets/CartStep-BEqiUqPh.js @@ -1 +1 @@ -import{C as e,G as t,T as n,ft as r,j as i,l as a,m as o,o as s,p as c,r as l,s as u,u as d}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{o as ee,t as te}from"./vue-router-Cyqru1db.js";import{t as f}from"./Icon-CtR1FGIT.js";import{t as p}from"./i18n-BkCuZ9ke.js";import{n as m}from"./products-CfIXFr2X.js";import{d as ne,f as re,p as ie}from"./api-DeBxQCQq.js";import{t as h}from"./Button-DG-tA4DQ.js";import{t as ae}from"./QuantityStepper-BB38-Td1.js";var g={key:0,class:`min-h-[55svh] flex items-center justify-center`},_={class:`flex flex-col gap-4 items-center text-center rounded-md border border-line bg-paper p-10 max-w-md w-full`},v={class:`inline-flex items-center justify-center w-14 h-14 rounded-full bg-cream text-brand`},y={class:`font-display text-xl text-brand`},b={class:`text-[14px] text-muted max-w-sm`},x={key:1,class:`flex flex-col gap-6`},S={class:`flex flex-col rounded-md border border-line bg-paper divide-y divide-line`},C={class:`shrink-0 w-20 h-20 rounded-sm bg-cream overflow-hidden flex items-center justify-center`},w=[`src`,`alt`],T={class:`flex-1 min-w-0`},E={class:`font-display text-base text-ink leading-tight`},D={key:0,class:`text-[12px] text-muted`},O={class:`mt-2 text-[13px] text-muted`},k={class:`flex items-center gap-4`},A={class:`text-[14px] font-semibold text-ink tabular-nums w-20 text-right`},j=[`aria-label`,`onClick`],M={class:`rounded-md border border-line bg-paper px-6 py-5 flex flex-col gap-2`},N={class:`flex items-baseline justify-between text-[14px]`},P={class:`text-muted`},F={class:`text-ink tabular-nums`},oe={class:`flex items-baseline justify-between text-[14px]`},I={class:`text-muted`},L={class:`text-ink tabular-nums`},R={class:`mt-1 pt-3 border-t border-line flex items-baseline justify-between`},z={class:`eyebrow`},B={class:`font-display text-2xl text-brand tabular-nums`},V={key:2,class:`fixed inset-x-0 bottom-0 z-30 bg-cream border-t border-line`,role:`contentinfo`},H={class:`mx-auto w-full max-w-7xl px-6 sm:px-8 md:px-12 lg:px-16 py-3 flex gap-3 sm:justify-between`,style:{paddingBottom:`max(0.75rem, env(safe-area-inset-bottom))`}},U={class:`flex-1 sm:flex-initial`},W={class:`flex-1 sm:flex-initial`},G=4.9,K={__name:`CartStep`,setup(K){let{t:q}=p(),J=ie(),Y=ee(),X=s(()=>J.isEmpty),Z=s(()=>J.subtotal),Q=s(()=>J.items.length?G:0),se=s(()=>+(Z.value+Q.value).toFixed(2));async function ce(e,t){await re(e,t)}async function le(e){await ne(e)}function $(){Y.push(`/checkout/account`)}function ue(){Y.push(`/`)}return(s,ee)=>(e(),d(l,null,[X.value?(e(),d(`div`,g,[u(`div`,_,[u(`span`,v,[o(f,{name:`cart`,size:24,"stroke-width":2})]),u(`p`,y,r(t(q)(`cart.empty.title`)),1),u(`p`,b,r(t(q)(`cart.empty.subtitle`)),1),o(t(te),{to:`/shop`,class:`inline-flex`},{default:i(()=>[o(h,{variant:`primary`,size:`md`},{default:i(()=>[c(r(t(q)(`checkout.cart.cta.shop`)),1)]),_:1})]),_:1})])])):(e(),d(`section`,x,[u(`ul`,S,[(e(!0),d(l,null,n(t(J).items,n=>(e(),d(`li`,{key:n.productId,class:`flex flex-col sm:flex-row sm:items-center gap-4 sm:gap-5 px-5 py-5 sm:px-6`},[u(`div`,C,[n.product?.image?(e(),d(`img`,{key:0,src:n.product.image,alt:n.product?.title||``,loading:`lazy`,decoding:`async`,class:`w-full h-full object-contain p-2`},null,8,w)):a(``,!0)]),u(`div`,T,[u(`p`,E,r(n.product?.title),1),n.product?.size?(e(),d(`p`,D,r(n.product.size),1)):a(``,!0),u(`p`,O,r(t(m)(n.unitPrice))+` `+r(t(q)(`checkout.cart.perItem`)),1)]),u(`div`,k,[o(ae,{"model-value":n.quantity,min:1,"onUpdate:modelValue":e=>ce(n.productId,e)},null,8,[`model-value`,`onUpdate:modelValue`]),u(`span`,A,r(t(m)(n.lineTotal)),1),u(`button`,{type:`button`,class:`text-muted hover:text-danger transition-colors duration-base`,"aria-label":t(q)(`cart.remove`),onClick:e=>le(n.productId)},[o(f,{name:`trash`,size:18,"stroke-width":2})],8,j)])]))),128))]),u(`dl`,M,[u(`div`,N,[u(`dt`,P,r(t(q)(`cart.subtotal`)),1),u(`dd`,F,r(t(m)(Z.value)),1)]),u(`div`,oe,[u(`dt`,I,r(t(q)(`checkout.cart.shipping`)),1),u(`dd`,L,r(t(m)(Q.value)),1)]),u(`div`,R,[u(`dt`,z,r(t(q)(`checkout.cart.total`)),1),u(`dd`,B,r(t(m)(se.value)),1)])])])),X.value?a(``,!0):(e(),d(`footer`,V,[u(`div`,H,[u(`div`,U,[o(h,{variant:`primary`,size:`lg`,block:``,type:`button`,onClick:ue},{default:i(()=>[c(r(t(q)(`checkout.exit`)),1)]),_:1})]),u(`div`,W,[o(h,{variant:`accent`,size:`lg`,block:``,onClick:$},{default:i(()=>[c(r(t(q)(`checkout.cart.cta.continue`)),1)]),_:1})])])]))],64))}};export{K as default}; \ No newline at end of file +import{C as e,G as t,T as n,ft as r,j as i,l as a,m as o,o as s,p as c,r as l,s as u,u as d}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{o as ee,t as te}from"./vue-router-Cyqru1db.js";import{t as f}from"./Icon-CtR1FGIT.js";import{t as p}from"./i18n-Uw3aZfCH.js";import{n as m}from"./products-0gaA2Xo6.js";import{d as ne,f as re,p as ie}from"./api-Co5DNHfG.js";import{t as h}from"./Button-DG-tA4DQ.js";import{t as ae}from"./QuantityStepper-BB38-Td1.js";var g={key:0,class:`min-h-[55svh] flex items-center justify-center`},_={class:`flex flex-col gap-4 items-center text-center rounded-md border border-line bg-paper p-10 max-w-md w-full`},v={class:`inline-flex items-center justify-center w-14 h-14 rounded-full bg-cream text-brand`},y={class:`font-display text-xl text-brand`},b={class:`text-[14px] text-muted max-w-sm`},x={key:1,class:`flex flex-col gap-6`},S={class:`flex flex-col rounded-md border border-line bg-paper divide-y divide-line`},C={class:`shrink-0 w-20 h-20 rounded-sm bg-cream overflow-hidden flex items-center justify-center`},w=[`src`,`alt`],T={class:`flex-1 min-w-0`},E={class:`font-display text-base text-ink leading-tight`},D={key:0,class:`text-[12px] text-muted`},O={class:`mt-2 text-[13px] text-muted`},k={class:`flex items-center gap-4`},A={class:`text-[14px] font-semibold text-ink tabular-nums w-20 text-right`},j=[`aria-label`,`onClick`],M={class:`rounded-md border border-line bg-paper px-6 py-5 flex flex-col gap-2`},N={class:`flex items-baseline justify-between text-[14px]`},P={class:`text-muted`},F={class:`text-ink tabular-nums`},oe={class:`flex items-baseline justify-between text-[14px]`},I={class:`text-muted`},L={class:`text-ink tabular-nums`},R={class:`mt-1 pt-3 border-t border-line flex items-baseline justify-between`},z={class:`eyebrow`},B={class:`font-display text-2xl text-brand tabular-nums`},V={key:2,class:`fixed inset-x-0 bottom-0 z-30 bg-cream border-t border-line`,role:`contentinfo`},H={class:`mx-auto w-full max-w-7xl px-6 sm:px-8 md:px-12 lg:px-16 py-3 flex gap-3 sm:justify-between`,style:{paddingBottom:`max(0.75rem, env(safe-area-inset-bottom))`}},U={class:`flex-1 sm:flex-initial`},W={class:`flex-1 sm:flex-initial`},G=4.9,K={__name:`CartStep`,setup(K){let{t:q}=p(),J=ie(),Y=ee(),X=s(()=>J.isEmpty),Z=s(()=>J.subtotal),Q=s(()=>J.items.length?G:0),se=s(()=>+(Z.value+Q.value).toFixed(2));async function ce(e,t){await re(e,t)}async function le(e){await ne(e)}function $(){Y.push(`/checkout/account`)}function ue(){Y.push(`/`)}return(s,ee)=>(e(),d(l,null,[X.value?(e(),d(`div`,g,[u(`div`,_,[u(`span`,v,[o(f,{name:`cart`,size:24,"stroke-width":2})]),u(`p`,y,r(t(q)(`cart.empty.title`)),1),u(`p`,b,r(t(q)(`cart.empty.subtitle`)),1),o(t(te),{to:`/shop`,class:`inline-flex`},{default:i(()=>[o(h,{variant:`primary`,size:`md`},{default:i(()=>[c(r(t(q)(`checkout.cart.cta.shop`)),1)]),_:1})]),_:1})])])):(e(),d(`section`,x,[u(`ul`,S,[(e(!0),d(l,null,n(t(J).items,n=>(e(),d(`li`,{key:n.productId,class:`flex flex-col sm:flex-row sm:items-center gap-4 sm:gap-5 px-5 py-5 sm:px-6`},[u(`div`,C,[n.product?.image?(e(),d(`img`,{key:0,src:n.product.image,alt:n.product?.title||``,loading:`lazy`,decoding:`async`,class:`w-full h-full object-contain p-2`},null,8,w)):a(``,!0)]),u(`div`,T,[u(`p`,E,r(n.product?.title),1),n.product?.size?(e(),d(`p`,D,r(n.product.size),1)):a(``,!0),u(`p`,O,r(t(m)(n.unitPrice))+` `+r(t(q)(`checkout.cart.perItem`)),1)]),u(`div`,k,[o(ae,{"model-value":n.quantity,min:1,"onUpdate:modelValue":e=>ce(n.productId,e)},null,8,[`model-value`,`onUpdate:modelValue`]),u(`span`,A,r(t(m)(n.lineTotal)),1),u(`button`,{type:`button`,class:`text-muted hover:text-danger transition-colors duration-base`,"aria-label":t(q)(`cart.remove`),onClick:e=>le(n.productId)},[o(f,{name:`trash`,size:18,"stroke-width":2})],8,j)])]))),128))]),u(`dl`,M,[u(`div`,N,[u(`dt`,P,r(t(q)(`cart.subtotal`)),1),u(`dd`,F,r(t(m)(Z.value)),1)]),u(`div`,oe,[u(`dt`,I,r(t(q)(`checkout.cart.shipping`)),1),u(`dd`,L,r(t(m)(Q.value)),1)]),u(`div`,R,[u(`dt`,z,r(t(q)(`checkout.cart.total`)),1),u(`dd`,B,r(t(m)(se.value)),1)])])])),X.value?a(``,!0):(e(),d(`footer`,V,[u(`div`,H,[u(`div`,U,[o(h,{variant:`primary`,size:`lg`,block:``,type:`button`,onClick:ue},{default:i(()=>[c(r(t(q)(`checkout.exit`)),1)]),_:1})]),u(`div`,W,[o(h,{variant:`accent`,size:`lg`,block:``,onClick:$},{default:i(()=>[c(r(t(q)(`checkout.cart.cta.continue`)),1)]),_:1})])])]))],64))}};export{K as default}; \ No newline at end of file diff --git a/dist/assets/CategoryPage-BDJ31U3Q.js b/dist/assets/CategoryPage-BDJ31U3Q.js new file mode 100644 index 0000000..b165429 --- /dev/null +++ b/dist/assets/CategoryPage-BDJ31U3Q.js @@ -0,0 +1 @@ +import{B as e,C as t,D as n,G as r,S as i,T as a,c as ee,ft as o,j as s,l as te,m as c,o as l,p as u,r as d,s as f,u as p,x as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{o as ne}from"./vue-router-Cyqru1db.js";import{t as re}from"./i18n-Uw3aZfCH.js";import{i as ie,r as h}from"./products-0gaA2Xo6.js";import{c as g,d as ae,f as oe,p as se,u as ce}from"./api-Co5DNHfG.js";import{t as le}from"./Navbar-DwNrj8mb.js";import{t as _}from"./Button-DG-tA4DQ.js";import{t as v}from"./CartDrawer-Cngidn8v.js";import{t as y}from"./Footer-Bf8Z3dZX.js";import{t as b}from"./ProductCard-CPhsIF19.js";import{t as x}from"./WaveDivider-Bj5UZ0Z6.js";var S={class:`bg-brand text-cream md:min-h-[calc(70svh-var(--nav-h))] md:flex md:items-center`},C={class:`mx-auto w-full max-w-4xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16 text-center flex flex-col gap-5`},w={class:`eyebrow text-cream/75`},T={class:`font-display font-normal leading-[1.05] tracking-tight text-cream text-headline-lg`},E={class:`italic font-light text-cream`},D={class:`text-base md:text-lg leading-relaxed text-cream/80 max-w-2xl mx-auto`},O={class:`-mt-px bg-cream text-ink`},k={class:`mx-auto w-full max-w-6xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16`},A={class:`flex flex-col gap-4 max-w-3xl`},j={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},M={class:`italic font-light text-brand`},N={class:`text-lg leading-relaxed text-muted max-w-2xl`},P={key:0,class:`mt-12 md:mt-14 grid gap-5 md:gap-7 grid-cols-1 sm:grid-cols-2 md:grid-cols-3`},F={class:`-mt-px bg-surface text-ink`},I={class:`mx-auto w-full max-w-6xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16`},L={class:`flex flex-col gap-4 max-w-3xl`},R={class:`eyebrow`},z={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},B={class:`italic font-light text-brand`},ue={class:`mt-12 md:mt-14 grid gap-6 md:gap-8 grid-cols-1 sm:grid-cols-3`},V={class:`inline-flex items-center justify-center w-10 h-10 rounded-full bg-brand text-accent font-display text-base`},H={class:`font-display text-xl font-normal text-brand leading-tight`},U={class:`text-[15px] leading-relaxed text-ink`},de={class:`-mt-px bg-brand text-cream`},fe={class:`mx-auto w-full max-w-3xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16 text-center flex flex-col items-center gap-5`},pe={class:`font-display font-normal leading-[1.05] tracking-tight text-cream text-headline-md`},me={class:`italic font-light text-cream`},he={class:`text-base md:text-lg leading-relaxed text-cream/80 max-w-xl`},W={__name:`CategoryPage`,props:{slug:{type:String,required:!0,validator:e=>[`pflege`,`haushalt`,`kueche`].includes(e)},useCase:{type:String,required:!0,validator:e=>[`cook`,`clean`,`care`].includes(e)}},setup(W){let G=W,{t:K}=re(),q=se(),ge=ne(),J=e(!1);function _e(){J.value=!1,ge.push(`/checkout`)}let ve=[{key:`nav.shop`,href:`/shop`},{key:`nav.bundles`,href:`/#bundles`},{key:`nav.about`,href:`/#about`},{key:`nav.kaiserhacks`,href:`/kaiserhacks`}],ye=[],Y=l(()=>ie(h)[G.useCase]||[]),X=l(()=>[1,2,3].map(e=>({title:K(`category.${G.slug}.benefit.${e}.title`),text:K(`category.${G.slug}.benefit.${e}.text`)})));async function be(e){await g(e.id,1),J.value=!0}async function xe(e){await g(e.id,1),J.value=!0}async function Se({productId:e,quantity:t}){await oe(e,t)}async function Ce(e){await ae(e)}let Z=e(null),Q=null;function $(){let e=Z.value,t=e&&(e.$el||e);if(!t||typeof window>`u`)return;let n=Math.round(t.getBoundingClientRect().height);document.documentElement.style.setProperty(`--nav-h`,`${n}px`)}return i(()=>{if(ce(),$(),typeof ResizeObserver<`u`&&Z.value){let e=Z.value.$el||Z.value;Q=new ResizeObserver($),Q.observe(e)}window.addEventListener(`resize`,$)}),m(()=>{Q&&Q.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,$)}),(e,i)=>{let l=n(`RouterLink`);return t(),p(d,null,[c(le,{ref_key:`navRef`,ref:Z,variant:`brand`,layout:`standard`,items:ve,"secondary-items":ye,"cart-count":r(q).count,products:r(h),onCart:i[0]||=e=>J.value=!0,onSearch:xe},null,8,[`cart-count`,`products`]),f(`section`,S,[f(`div`,C,[f(`p`,w,o(r(K)(`category.${W.slug}.eyebrow`)),1),f(`h1`,T,[u(o(r(K)(`category.${W.slug}.title.a`))+` `,1),f(`em`,E,o(r(K)(`category.${W.slug}.title.em`)),1)]),f(`p`,D,o(r(K)(`category.${W.slug}.sub`)),1)])]),c(x,{from:`brand`,to:`cream`}),f(`section`,O,[f(`div`,k,[f(`div`,A,[f(`h2`,j,[u(o(r(K)(`category.${W.slug}.products.headline`))+` `,1),f(`em`,M,o(r(K)(`category.${W.slug}.products.headline.em`)),1)]),f(`p`,N,o(r(K)(`category.${W.slug}.products.sub`)),1)]),Y.value.length?(t(),p(`div`,P,[(t(!0),p(d,null,a(Y.value,e=>(t(),ee(b,{key:e.id,title:e.title,size:e.size,price:e.price,image:e.image,"image-alt":e.title,href:e.href,tone:`cream`,"in-stock":e.inStock,onAdd:t=>be(e)},null,8,[`title`,`size`,`price`,`image`,`image-alt`,`href`,`in-stock`,`onAdd`]))),128))])):te(``,!0)])]),c(x,{from:`cream`,to:`surface`}),f(`section`,F,[f(`div`,I,[f(`div`,L,[f(`p`,R,o(r(K)(`category.${W.slug}.benefits.eyebrow`)),1),f(`h2`,z,[u(o(r(K)(`category.${W.slug}.benefits.headline`))+` `,1),f(`em`,B,o(r(K)(`category.${W.slug}.benefits.headline.em`)),1)])]),f(`ul`,ue,[(t(!0),p(d,null,a(X.value,(e,n)=>(t(),p(`li`,{key:n,class:`flex flex-col gap-3 rounded-md border border-line bg-paper p-6 md:p-8`},[f(`span`,V,o(n+1),1),f(`h3`,H,o(e.title),1),f(`p`,U,o(e.text),1)]))),128))])])]),c(x,{from:`surface`,to:`brand`}),f(`section`,de,[f(`div`,fe,[f(`h2`,pe,[u(o(r(K)(`category.${W.slug}.cta.headline`))+` `,1),f(`em`,me,o(r(K)(`category.${W.slug}.cta.headline.em`)),1)]),f(`p`,he,o(r(K)(`category.${W.slug}.cta.sub`)),1),c(l,{to:`/shop`,class:`inline-flex`},{default:s(()=>[c(_,{variant:`accent`,size:`lg`},{default:s(()=>[u(o(r(K)(`category.${W.slug}.cta.button`)),1)]),_:1})]),_:1})])]),c(y,{variant:`cream`}),i[2]||=f(`div`,{"aria-hidden":`true`,class:`md:hidden`,style:{height:`calc(100px + env(safe-area-inset-bottom))`}},null,-1),c(v,{modelValue:J.value,"onUpdate:modelValue":i[1]||=e=>J.value=e,items:r(q).items,subtotal:r(q).subtotal,count:r(q).count,onUpdateQuantity:Se,onRemove:Ce,onCheckout:_e},null,8,[`modelValue`,`items`,`subtotal`,`count`])],64)}}};export{W as default}; \ No newline at end of file diff --git a/dist/assets/CategoryPage-BzFh1vHj.js b/dist/assets/CategoryPage-BzFh1vHj.js deleted file mode 100644 index c50ea35..0000000 --- a/dist/assets/CategoryPage-BzFh1vHj.js +++ /dev/null @@ -1 +0,0 @@ -import{B as e,C as t,D as n,G as r,S as i,T as a,c as ee,ft as o,j as s,l as te,m as c,o as l,p as u,r as d,s as f,u as p,x as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{o as ne}from"./vue-router-Cyqru1db.js";import{t as re}from"./i18n-BkCuZ9ke.js";import{i as ie,r as h}from"./products-CfIXFr2X.js";import{c as g,d as ae,f as oe,p as se,u as ce}from"./api-DeBxQCQq.js";import{t as le}from"./Navbar-DiOwyXlV.js";import{t as _}from"./Button-DG-tA4DQ.js";import{t as v}from"./CartDrawer-BaYH0KvP.js";import{t as y}from"./Footer-D-2MkC07.js";import{t as b}from"./ProductCard-BjGgbp3S.js";import{t as x}from"./WaveDivider-Bj5UZ0Z6.js";var S={class:`bg-brand text-cream md:min-h-[calc(70svh-var(--nav-h))] md:flex md:items-center`},C={class:`mx-auto w-full max-w-4xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16 text-center flex flex-col gap-5`},w={class:`eyebrow text-cream/75`},T={class:`font-display font-normal leading-[1.05] tracking-tight text-cream text-headline-lg`},E={class:`italic font-light text-cream`},D={class:`text-base md:text-lg leading-relaxed text-cream/80 max-w-2xl mx-auto`},O={class:`-mt-px bg-cream text-ink`},k={class:`mx-auto w-full max-w-6xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16`},A={class:`flex flex-col gap-4 max-w-3xl`},j={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},M={class:`italic font-light text-brand`},N={class:`text-lg leading-relaxed text-muted max-w-2xl`},P={key:0,class:`mt-12 md:mt-14 grid gap-5 md:gap-7 grid-cols-1 sm:grid-cols-2 md:grid-cols-3`},F={class:`-mt-px bg-surface text-ink`},I={class:`mx-auto w-full max-w-6xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16`},L={class:`flex flex-col gap-4 max-w-3xl`},R={class:`eyebrow`},z={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},B={class:`italic font-light text-brand`},ue={class:`mt-12 md:mt-14 grid gap-6 md:gap-8 grid-cols-1 sm:grid-cols-3`},V={class:`inline-flex items-center justify-center w-10 h-10 rounded-full bg-brand text-accent font-display text-base`},H={class:`font-display text-xl font-normal text-brand leading-tight`},U={class:`text-[15px] leading-relaxed text-ink`},de={class:`-mt-px bg-brand text-cream`},fe={class:`mx-auto w-full max-w-3xl px-6 py-16 sm:px-8 sm:py-20 md:px-12 md:py-24 lg:px-16 text-center flex flex-col items-center gap-5`},pe={class:`font-display font-normal leading-[1.05] tracking-tight text-cream text-headline-md`},me={class:`italic font-light text-cream`},he={class:`text-base md:text-lg leading-relaxed text-cream/80 max-w-xl`},W={__name:`CategoryPage`,props:{slug:{type:String,required:!0,validator:e=>[`pflege`,`haushalt`,`kueche`].includes(e)},useCase:{type:String,required:!0,validator:e=>[`cook`,`clean`,`care`].includes(e)}},setup(W){let G=W,{t:K}=re(),q=se(),ge=ne(),J=e(!1);function _e(){J.value=!1,ge.push(`/checkout`)}let ve=[{key:`nav.shop`,href:`/shop`},{key:`nav.bundles`,href:`/#bundles`},{key:`nav.revitalization`,href:`/#revitalize`},{key:`nav.about`,href:`/#about`},{key:`nav.kaiserhacks`,href:`/kaiserhacks`}],ye=[],Y=l(()=>ie(h)[G.useCase]||[]),X=l(()=>[1,2,3].map(e=>({title:K(`category.${G.slug}.benefit.${e}.title`),text:K(`category.${G.slug}.benefit.${e}.text`)})));async function be(e){await g(e.id,1),J.value=!0}async function xe(e){await g(e.id,1),J.value=!0}async function Se({productId:e,quantity:t}){await oe(e,t)}async function Ce(e){await ae(e)}let Z=e(null),Q=null;function $(){let e=Z.value,t=e&&(e.$el||e);if(!t||typeof window>`u`)return;let n=Math.round(t.getBoundingClientRect().height);document.documentElement.style.setProperty(`--nav-h`,`${n}px`)}return i(()=>{if(ce(),$(),typeof ResizeObserver<`u`&&Z.value){let e=Z.value.$el||Z.value;Q=new ResizeObserver($),Q.observe(e)}window.addEventListener(`resize`,$)}),m(()=>{Q&&Q.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,$)}),(e,i)=>{let l=n(`RouterLink`);return t(),p(d,null,[c(le,{ref_key:`navRef`,ref:Z,variant:`brand`,layout:`standard`,items:ve,"secondary-items":ye,"cart-count":r(q).count,products:r(h),onCart:i[0]||=e=>J.value=!0,onSearch:xe},null,8,[`cart-count`,`products`]),f(`section`,S,[f(`div`,C,[f(`p`,w,o(r(K)(`category.${W.slug}.eyebrow`)),1),f(`h1`,T,[u(o(r(K)(`category.${W.slug}.title.a`))+` `,1),f(`em`,E,o(r(K)(`category.${W.slug}.title.em`)),1)]),f(`p`,D,o(r(K)(`category.${W.slug}.sub`)),1)])]),c(x,{from:`brand`,to:`cream`}),f(`section`,O,[f(`div`,k,[f(`div`,A,[f(`h2`,j,[u(o(r(K)(`category.${W.slug}.products.headline`))+` `,1),f(`em`,M,o(r(K)(`category.${W.slug}.products.headline.em`)),1)]),f(`p`,N,o(r(K)(`category.${W.slug}.products.sub`)),1)]),Y.value.length?(t(),p(`div`,P,[(t(!0),p(d,null,a(Y.value,e=>(t(),ee(b,{key:e.id,title:e.title,size:e.size,price:e.price,image:e.image,"image-alt":e.title,href:e.href,tone:`cream`,"in-stock":e.inStock,onAdd:t=>be(e)},null,8,[`title`,`size`,`price`,`image`,`image-alt`,`href`,`in-stock`,`onAdd`]))),128))])):te(``,!0)])]),c(x,{from:`cream`,to:`surface`}),f(`section`,F,[f(`div`,I,[f(`div`,L,[f(`p`,R,o(r(K)(`category.${W.slug}.benefits.eyebrow`)),1),f(`h2`,z,[u(o(r(K)(`category.${W.slug}.benefits.headline`))+` `,1),f(`em`,B,o(r(K)(`category.${W.slug}.benefits.headline.em`)),1)])]),f(`ul`,ue,[(t(!0),p(d,null,a(X.value,(e,n)=>(t(),p(`li`,{key:n,class:`flex flex-col gap-3 rounded-md border border-line bg-paper p-6 md:p-8`},[f(`span`,V,o(n+1),1),f(`h3`,H,o(e.title),1),f(`p`,U,o(e.text),1)]))),128))])])]),c(x,{from:`surface`,to:`brand`}),f(`section`,de,[f(`div`,fe,[f(`h2`,pe,[u(o(r(K)(`category.${W.slug}.cta.headline`))+` `,1),f(`em`,me,o(r(K)(`category.${W.slug}.cta.headline.em`)),1)]),f(`p`,he,o(r(K)(`category.${W.slug}.cta.sub`)),1),c(l,{to:`/shop`,class:`inline-flex`},{default:s(()=>[c(_,{variant:`accent`,size:`lg`},{default:s(()=>[u(o(r(K)(`category.${W.slug}.cta.button`)),1)]),_:1})]),_:1})])]),c(y,{variant:`cream`}),i[2]||=f(`div`,{"aria-hidden":`true`,class:`md:hidden`,style:{height:`calc(100px + env(safe-area-inset-bottom))`}},null,-1),c(v,{modelValue:J.value,"onUpdate:modelValue":i[1]||=e=>J.value=e,items:r(q).items,subtotal:r(q).subtotal,count:r(q).count,onUpdateQuantity:Se,onRemove:Ce,onCheckout:_e},null,8,[`modelValue`,`items`,`subtotal`,`count`])],64)}}};export{W as default}; \ No newline at end of file diff --git a/dist/assets/CheckoutPage-C-e5Ygz9.js b/dist/assets/CheckoutPage-D4JMvPdL.js similarity index 97% rename from dist/assets/CheckoutPage-C-e5Ygz9.js rename to dist/assets/CheckoutPage-D4JMvPdL.js index 4c96f7d..210fdbc 100644 --- a/dist/assets/CheckoutPage-C-e5Ygz9.js +++ b/dist/assets/CheckoutPage-D4JMvPdL.js @@ -1 +1 @@ -import{B as e,C as t,D as n,G as r,S as i,T as a,b as ee,c as o,ft as s,j as c,l,m as u,o as d,p as f,r as p,s as m,u as h,ut as g}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a as _,o as v,t as y}from"./vue-router-Cyqru1db.js";import{t as b}from"./Logo-FD-JLoLl.js";import{t as x}from"./i18n-BkCuZ9ke.js";import{l as S,p as C,s as w,u as T}from"./api-DeBxQCQq.js";import{t as E}from"./Button-DG-tA4DQ.js";import{t as D}from"./CheckoutStepper-EkS1Qntj.js";import{t as O}from"./ExpressCheckoutMount-DP_zQgK-.js";import{t as k}from"./checkout-DTEUVxo-.js";var A={class:`rounded-md border border-line bg-paper text-ink flex flex-col`,"aria-label":`Order summary`},j={key:0,class:`px-6 pt-6 pb-3 border-b border-line`},M={class:`font-display text-xl font-normal text-brand leading-none`},N={key:1,class:`flex flex-col divide-y divide-line`},P={class:`relative shrink-0 w-14 h-14 rounded-sm bg-cream overflow-hidden flex items-center justify-center`},F=[`src`,`alt`],I={key:1,class:`absolute -top-1 -right-1 min-w-[20px] h-[20px] px-1 rounded-full bg-brand text-accent text-[11px] font-bold flex items-center justify-center`,"aria-hidden":`true`},L={class:`flex-1 min-w-0`},R={class:`font-display text-[15px] leading-tight truncate text-ink`},z={key:0,class:`text-[12px] text-muted truncate`},B={class:`shrink-0 text-[14px] font-semibold text-ink tabular-nums`},V={class:`px-6 py-5 flex flex-col gap-2 border-t border-line`},H={class:`flex items-baseline justify-between text-[14px]`},U={class:`text-ink tabular-nums`},W={class:`flex items-baseline justify-between text-[14px]`},G={class:`text-ink tabular-nums`},K={key:0,class:`flex items-baseline justify-between text-[14px]`},q={class:`text-ink tabular-nums`},J={class:`mt-2 pt-3 border-t border-line flex items-baseline justify-between`},Y={class:`font-display text-2xl text-brand tabular-nums`},X={key:2,class:`px-6 pb-6`},Z={__name:`CheckoutSummary`,props:{items:{type:Array,required:!0,validator:e=>e.every(e=>e&&typeof e.productId==`string`&&Number.isInteger(e.quantity))},subtotal:{type:Number,required:!0},shipping:{type:Number,default:0},tax:{type:Number,default:0},total:{type:Number,required:!0},currency:{type:String,default:`€`},ctaLabel:{type:String,default:``},ctaLoading:{type:Boolean,default:!1},ctaDisabled:{type:Boolean,default:!1},heading:{type:String,default:``}},emits:[`submit`],setup(e){function n(e,t){return typeof e!=`number`||!Number.isFinite(e)?``:`${t} ${e.toFixed(2).replace(`.`,`,`)}`}return(r,i)=>(t(),h(`aside`,A,[e.heading?(t(),h(`header`,j,[m(`h2`,M,s(e.heading),1)])):l(``,!0),e.items.length?(t(),h(`ul`,N,[(t(!0),h(p,null,a(e.items,r=>(t(),h(`li`,{key:r.productId,class:`flex items-center gap-4 px-6 py-4`},[m(`div`,P,[r.product?.image?(t(),h(`img`,{key:0,src:r.product.image,alt:r.product?.title||``,loading:`lazy`,decoding:`async`,class:`w-full h-full object-contain p-2`},null,8,F)):l(``,!0),r.quantity>1?(t(),h(`span`,I,s(r.quantity),1)):l(``,!0)]),m(`div`,L,[m(`p`,R,s(r.product?.title),1),r.product?.size?(t(),h(`p`,z,s(r.product.size),1)):l(``,!0)]),m(`span`,B,s(n(r.lineTotal??r.unitPrice*r.quantity,e.currency)),1)]))),128))])):l(``,!0),m(`dl`,V,[m(`div`,H,[i[1]||=m(`dt`,{class:`text-muted`},`Subtotal`,-1),m(`dd`,U,s(n(e.subtotal,e.currency)),1)]),m(`div`,W,[i[2]||=m(`dt`,{class:`text-muted`},`Versand`,-1),m(`dd`,G,s(n(e.shipping,e.currency)),1)]),e.tax>0?(t(),h(`div`,K,[i[3]||=m(`dt`,{class:`text-muted`},`MwSt. (19 %, inkl.)`,-1),m(`dd`,q,s(n(e.tax,e.currency)),1)])):l(``,!0),m(`div`,J,[i[4]||=m(`dt`,{class:`eyebrow`},`Gesamt`,-1),m(`dd`,Y,s(n(e.total,e.currency)),1)])]),e.ctaLabel?(t(),h(`div`,X,[u(E,{variant:`primary`,size:`lg`,block:``,loading:e.ctaLoading,disabled:e.ctaDisabled,onClick:i[0]||=e=>r.$emit(`submit`)},{default:c(()=>[f(s(e.ctaLabel),1)]),_:1},8,[`loading`,`disabled`])])):l(``,!0)]))}},te={class:`min-h-svh flex flex-col bg-cream`},Q={class:`sticky top-0 z-30 bg-cream border-b border-line shrink-0`},ne={class:`mx-auto w-full max-w-7xl px-4 sm:px-8 md:px-12 lg:px-16 py-3 grid grid-cols-[1fr_auto_1fr] items-center gap-3 sm:gap-6`},re={class:`justify-self-center min-w-0`},ie={class:`text-ink flex-1 lg:flex lg:flex-col lg:justify-center`},ae={class:`mx-auto w-full max-w-7xl px-6 sm:px-8 md:px-12 lg:px-16 pt-5 pb-28 sm:pt-7 sm:pb-32 md:pt-8 md:pb-32 lg:pt-10 lg:pb-32`},oe={key:0,class:`flex flex-col gap-2 mb-8 md:mb-10`},se={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},ce={class:`italic font-light text-brand`},le={key:1,class:`flex flex-col gap-2 mb-8 md:mb-10`},ue={class:`font-display text-2xl font-normal text-ink leading-none`},de={key:0,class:`text-[14px] text-muted max-w-2xl`},fe={key:2,class:`flex justify-center`},pe={class:`w-full max-w-2xl`},me=[`aria-label`],he={class:`flex flex-col gap-4 rounded-md border border-line bg-paper p-6 md:p-8`},ge={class:`font-display text-xl font-normal text-brand leading-none`},_e={key:0,class:`text-sm text-danger`,role:`alert`,"aria-live":`polite`},ve={class:`min-w-0`},ye=4.9,$=.19,be={__name:`CheckoutPage`,setup(a){let{t:p}=x(),E=C(),A=k(),j=_(),M=v(),N=e(null),P=e(!1),F=e(``),I=e(null),L=d(()=>typeof window>`u`?`/checkout/processing`:`${window.location.origin}/checkout/processing?order=${N.value?.orderId||``}`);async function R({wallet:e}){if(!E.items.length){F.value=p(`checkout.error.empty`);return}F.value=``,P.value=!0;try{let t=await w({wallet:e});N.value=t,await ee();let n=await I.value?.confirm();if(n?.error){F.value=n.error.message||p(`checkout.error.payment`);return}if(n?.paymentIntent?.status===`succeeded`){let e=t.orderId;await S(),A.reset(),M.push({path:`/checkout/success`,query:{order:e}})}}catch(e){F.value=e?.message||p(`checkout.error.generic`)}finally{P.value=!1}}function z(e){F.value=e?.message||p(`checkout.error.payment`),P.value=!1}let B=d(()=>E.subtotal),V=d(()=>E.items.length?ye:0),H=d(()=>+(B.value+V.value).toFixed(2)),U=d(()=>E.items.length?+((B.value+V.value)*$/(1+$)).toFixed(2):0),W=d(()=>[{key:`cart`,label:p(`checkout.step.cart`),to:`/checkout/cart`,completed:E.items.length>0},{key:`account`,label:p(`checkout.step.account`),to:`/checkout/account`,completed:A.accountComplete},{key:`shipping`,label:p(`checkout.step.shipping`),to:`/checkout/shipping`,completed:A.shippingComplete},{key:`payment`,label:p(`checkout.step.payment`),to:`/checkout/payment`,completed:!1}]),G=d(()=>{let e=j.path.split(`/`)[2]||`cart`;return[`cart`,`account`,`shipping`,`payment`].includes(e)?e:`cart`}),K=d(()=>G.value===`cart`&&!E.isEmpty),q=d(()=>{switch(G.value){case`cart`:return{title:p(`checkout.cart.title`),sub:``};case`account`:return{title:p(`checkout.account.heading`),sub:p(`checkout.account.sub`)};case`shipping`:return{title:p(`checkout.section.shipping`),sub:p(`checkout.shipping.sub`)};case`payment`:return{title:p(`checkout.section.payment`),sub:p(`checkout.payment.sub`)};default:return{title:``,sub:``}}});return i(()=>{T()}),(e,i)=>{let a=n(`router-view`);return t(),h(`div`,te,[m(`header`,Q,[m(`div`,ne,[u(r(y),{to:`/`,class:`shrink-0 justify-self-start`,"aria-label":r(p)(`checkout.home`)},{default:c(()=>[u(b,{class:`w-9 md:w-12 h-auto text-brand`})]),_:1},8,[`aria-label`]),m(`div`,re,[u(D,{steps:W.value,"active-key":G.value,"aria-label":r(p)(`checkout.stepper.label`)},null,8,[`steps`,`active-key`,`aria-label`])]),u(r(y),{to:`/shop`,class:`shrink-0 justify-self-end hidden sm:inline-flex items-center text-[13px] font-semibold text-brand hover:underline whitespace-nowrap`},{default:c(()=>[f(s(r(p)(`checkout.backToShopping`)),1)]),_:1})])]),m(`main`,ie,[m(`div`,ae,[G.value===`cart`?(t(),h(`header`,oe,[m(`h1`,se,[f(s(r(p)(`checkout.headline`))+` `,1),m(`em`,ce,s(r(p)(`checkout.headline.em`)),1)])])):q.value.title?(t(),h(`header`,le,[m(`h2`,ue,s(q.value.title),1),q.value.sub?(t(),h(`p`,de,s(q.value.sub),1)):l(``,!0)])):l(``,!0),G.value===`cart`&&r(E).isEmpty?(t(),h(`div`,fe,[m(`div`,pe,[u(a)])])):(t(),h(`div`,{key:3,class:g([`grid gap-8 md:gap-10 lg:gap-12 lg:items-start`,K.value?`lg:grid-cols-[0.9fr_1.1fr]`:`lg:grid-cols-[1.1fr_0.9fr]`])},[K.value?(t(),h(`aside`,{key:0,class:`flex flex-col gap-4 lg:sticky lg:top-[calc(var(--checkout-bar-h,72px)+1rem)]`,"aria-label":r(p)(`checkout.section.express`)},[m(`div`,he,[m(`h2`,ge,s(r(p)(`checkout.section.express`)),1),u(O,{ref_key:`expressMountRef`,ref:I,intent:N.value,"return-url":L.value,busy:P.value,onPay:R,onError:z},null,8,[`intent`,`return-url`,`busy`])]),F.value?(t(),h(`p`,_e,s(F.value),1)):l(``,!0)],8,me)):l(``,!0),m(`div`,ve,[u(a)]),G.value===`cart`?l(``,!0):(t(),o(Z,{key:1,items:r(E).items,subtotal:B.value,shipping:V.value,tax:U.value,total:H.value,heading:r(p)(`checkout.summary.heading`),class:`lg:sticky lg:top-[calc(var(--checkout-bar-h,72px)+1rem)]`},null,8,[`items`,`subtotal`,`shipping`,`tax`,`total`,`heading`]))],2))])])])}}};export{be as default}; \ No newline at end of file +import{B as e,C as t,D as n,G as r,S as i,T as a,b as ee,c as o,ft as s,j as c,l,m as u,o as d,p as f,r as p,s as m,u as h,ut as g}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a as _,o as v,t as y}from"./vue-router-Cyqru1db.js";import{t as b}from"./Logo-FD-JLoLl.js";import{t as x}from"./i18n-Uw3aZfCH.js";import{l as S,p as C,s as w,u as T}from"./api-Co5DNHfG.js";import{t as E}from"./Button-DG-tA4DQ.js";import{t as D}from"./CheckoutStepper-EkS1Qntj.js";import{t as O}from"./ExpressCheckoutMount-DAB1mQHS.js";import{t as k}from"./checkout-DTEUVxo-.js";var A={class:`rounded-md border border-line bg-paper text-ink flex flex-col`,"aria-label":`Order summary`},j={key:0,class:`px-6 pt-6 pb-3 border-b border-line`},M={class:`font-display text-xl font-normal text-brand leading-none`},N={key:1,class:`flex flex-col divide-y divide-line`},P={class:`relative shrink-0 w-14 h-14 rounded-sm bg-cream overflow-hidden flex items-center justify-center`},F=[`src`,`alt`],I={key:1,class:`absolute -top-1 -right-1 min-w-[20px] h-[20px] px-1 rounded-full bg-brand text-accent text-[11px] font-bold flex items-center justify-center`,"aria-hidden":`true`},L={class:`flex-1 min-w-0`},R={class:`font-display text-[15px] leading-tight truncate text-ink`},z={key:0,class:`text-[12px] text-muted truncate`},B={class:`shrink-0 text-[14px] font-semibold text-ink tabular-nums`},V={class:`px-6 py-5 flex flex-col gap-2 border-t border-line`},H={class:`flex items-baseline justify-between text-[14px]`},U={class:`text-ink tabular-nums`},W={class:`flex items-baseline justify-between text-[14px]`},G={class:`text-ink tabular-nums`},K={key:0,class:`flex items-baseline justify-between text-[14px]`},q={class:`text-ink tabular-nums`},J={class:`mt-2 pt-3 border-t border-line flex items-baseline justify-between`},Y={class:`font-display text-2xl text-brand tabular-nums`},X={key:2,class:`px-6 pb-6`},Z={__name:`CheckoutSummary`,props:{items:{type:Array,required:!0,validator:e=>e.every(e=>e&&typeof e.productId==`string`&&Number.isInteger(e.quantity))},subtotal:{type:Number,required:!0},shipping:{type:Number,default:0},tax:{type:Number,default:0},total:{type:Number,required:!0},currency:{type:String,default:`€`},ctaLabel:{type:String,default:``},ctaLoading:{type:Boolean,default:!1},ctaDisabled:{type:Boolean,default:!1},heading:{type:String,default:``}},emits:[`submit`],setup(e){function n(e,t){return typeof e!=`number`||!Number.isFinite(e)?``:`${t} ${e.toFixed(2).replace(`.`,`,`)}`}return(r,i)=>(t(),h(`aside`,A,[e.heading?(t(),h(`header`,j,[m(`h2`,M,s(e.heading),1)])):l(``,!0),e.items.length?(t(),h(`ul`,N,[(t(!0),h(p,null,a(e.items,r=>(t(),h(`li`,{key:r.productId,class:`flex items-center gap-4 px-6 py-4`},[m(`div`,P,[r.product?.image?(t(),h(`img`,{key:0,src:r.product.image,alt:r.product?.title||``,loading:`lazy`,decoding:`async`,class:`w-full h-full object-contain p-2`},null,8,F)):l(``,!0),r.quantity>1?(t(),h(`span`,I,s(r.quantity),1)):l(``,!0)]),m(`div`,L,[m(`p`,R,s(r.product?.title),1),r.product?.size?(t(),h(`p`,z,s(r.product.size),1)):l(``,!0)]),m(`span`,B,s(n(r.lineTotal??r.unitPrice*r.quantity,e.currency)),1)]))),128))])):l(``,!0),m(`dl`,V,[m(`div`,H,[i[1]||=m(`dt`,{class:`text-muted`},`Subtotal`,-1),m(`dd`,U,s(n(e.subtotal,e.currency)),1)]),m(`div`,W,[i[2]||=m(`dt`,{class:`text-muted`},`Versand`,-1),m(`dd`,G,s(n(e.shipping,e.currency)),1)]),e.tax>0?(t(),h(`div`,K,[i[3]||=m(`dt`,{class:`text-muted`},`MwSt. (19 %, inkl.)`,-1),m(`dd`,q,s(n(e.tax,e.currency)),1)])):l(``,!0),m(`div`,J,[i[4]||=m(`dt`,{class:`eyebrow`},`Gesamt`,-1),m(`dd`,Y,s(n(e.total,e.currency)),1)])]),e.ctaLabel?(t(),h(`div`,X,[u(E,{variant:`primary`,size:`lg`,block:``,loading:e.ctaLoading,disabled:e.ctaDisabled,onClick:i[0]||=e=>r.$emit(`submit`)},{default:c(()=>[f(s(e.ctaLabel),1)]),_:1},8,[`loading`,`disabled`])])):l(``,!0)]))}},te={class:`min-h-svh flex flex-col bg-cream`},Q={class:`sticky top-0 z-30 bg-cream border-b border-line shrink-0`},ne={class:`mx-auto w-full max-w-7xl px-4 sm:px-8 md:px-12 lg:px-16 py-3 grid grid-cols-[1fr_auto_1fr] items-center gap-3 sm:gap-6`},re={class:`justify-self-center min-w-0`},ie={class:`text-ink flex-1 lg:flex lg:flex-col lg:justify-center`},ae={class:`mx-auto w-full max-w-7xl px-6 sm:px-8 md:px-12 lg:px-16 pt-5 pb-28 sm:pt-7 sm:pb-32 md:pt-8 md:pb-32 lg:pt-10 lg:pb-32`},oe={key:0,class:`flex flex-col gap-2 mb-8 md:mb-10`},se={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},ce={class:`italic font-light text-brand`},le={key:1,class:`flex flex-col gap-2 mb-8 md:mb-10`},ue={class:`font-display text-2xl font-normal text-ink leading-none`},de={key:0,class:`text-[14px] text-muted max-w-2xl`},fe={key:2,class:`flex justify-center`},pe={class:`w-full max-w-2xl`},me=[`aria-label`],he={class:`flex flex-col gap-4 rounded-md border border-line bg-paper p-6 md:p-8`},ge={class:`font-display text-xl font-normal text-brand leading-none`},_e={key:0,class:`text-sm text-danger`,role:`alert`,"aria-live":`polite`},ve={class:`min-w-0`},ye=4.9,$=.19,be={__name:`CheckoutPage`,setup(a){let{t:p}=x(),E=C(),A=k(),j=_(),M=v(),N=e(null),P=e(!1),F=e(``),I=e(null),L=d(()=>typeof window>`u`?`/checkout/processing`:`${window.location.origin}/checkout/processing?order=${N.value?.orderId||``}`);async function R({wallet:e}){if(!E.items.length){F.value=p(`checkout.error.empty`);return}F.value=``,P.value=!0;try{let t=await w({wallet:e});N.value=t,await ee();let n=await I.value?.confirm();if(n?.error){F.value=n.error.message||p(`checkout.error.payment`);return}if(n?.paymentIntent?.status===`succeeded`){let e=t.orderId;await S(),A.reset(),M.push({path:`/checkout/success`,query:{order:e}})}}catch(e){F.value=e?.message||p(`checkout.error.generic`)}finally{P.value=!1}}function z(e){F.value=e?.message||p(`checkout.error.payment`),P.value=!1}let B=d(()=>E.subtotal),V=d(()=>E.items.length?ye:0),H=d(()=>+(B.value+V.value).toFixed(2)),U=d(()=>E.items.length?+((B.value+V.value)*$/(1+$)).toFixed(2):0),W=d(()=>[{key:`cart`,label:p(`checkout.step.cart`),to:`/checkout/cart`,completed:E.items.length>0},{key:`account`,label:p(`checkout.step.account`),to:`/checkout/account`,completed:A.accountComplete},{key:`shipping`,label:p(`checkout.step.shipping`),to:`/checkout/shipping`,completed:A.shippingComplete},{key:`payment`,label:p(`checkout.step.payment`),to:`/checkout/payment`,completed:!1}]),G=d(()=>{let e=j.path.split(`/`)[2]||`cart`;return[`cart`,`account`,`shipping`,`payment`].includes(e)?e:`cart`}),K=d(()=>G.value===`cart`&&!E.isEmpty),q=d(()=>{switch(G.value){case`cart`:return{title:p(`checkout.cart.title`),sub:``};case`account`:return{title:p(`checkout.account.heading`),sub:p(`checkout.account.sub`)};case`shipping`:return{title:p(`checkout.section.shipping`),sub:p(`checkout.shipping.sub`)};case`payment`:return{title:p(`checkout.section.payment`),sub:p(`checkout.payment.sub`)};default:return{title:``,sub:``}}});return i(()=>{T()}),(e,i)=>{let a=n(`router-view`);return t(),h(`div`,te,[m(`header`,Q,[m(`div`,ne,[u(r(y),{to:`/`,class:`shrink-0 justify-self-start`,"aria-label":r(p)(`checkout.home`)},{default:c(()=>[u(b,{class:`w-9 md:w-12 h-auto text-brand`})]),_:1},8,[`aria-label`]),m(`div`,re,[u(D,{steps:W.value,"active-key":G.value,"aria-label":r(p)(`checkout.stepper.label`)},null,8,[`steps`,`active-key`,`aria-label`])]),u(r(y),{to:`/shop`,class:`shrink-0 justify-self-end hidden sm:inline-flex items-center text-[13px] font-semibold text-brand hover:underline whitespace-nowrap`},{default:c(()=>[f(s(r(p)(`checkout.backToShopping`)),1)]),_:1})])]),m(`main`,ie,[m(`div`,ae,[G.value===`cart`?(t(),h(`header`,oe,[m(`h1`,se,[f(s(r(p)(`checkout.headline`))+` `,1),m(`em`,ce,s(r(p)(`checkout.headline.em`)),1)])])):q.value.title?(t(),h(`header`,le,[m(`h2`,ue,s(q.value.title),1),q.value.sub?(t(),h(`p`,de,s(q.value.sub),1)):l(``,!0)])):l(``,!0),G.value===`cart`&&r(E).isEmpty?(t(),h(`div`,fe,[m(`div`,pe,[u(a)])])):(t(),h(`div`,{key:3,class:g([`grid gap-8 md:gap-10 lg:gap-12 lg:items-start`,K.value?`lg:grid-cols-[0.9fr_1.1fr]`:`lg:grid-cols-[1.1fr_0.9fr]`])},[K.value?(t(),h(`aside`,{key:0,class:`flex flex-col gap-4 lg:sticky lg:top-[calc(var(--checkout-bar-h,72px)+1rem)]`,"aria-label":r(p)(`checkout.section.express`)},[m(`div`,he,[m(`h2`,ge,s(r(p)(`checkout.section.express`)),1),u(O,{ref_key:`expressMountRef`,ref:I,intent:N.value,"return-url":L.value,busy:P.value,onPay:R,onError:z},null,8,[`intent`,`return-url`,`busy`])]),F.value?(t(),h(`p`,_e,s(F.value),1)):l(``,!0)],8,me)):l(``,!0),m(`div`,ve,[u(a)]),G.value===`cart`?l(``,!0):(t(),o(Z,{key:1,items:r(E).items,subtotal:B.value,shipping:V.value,tax:U.value,total:H.value,heading:r(p)(`checkout.summary.heading`),class:`lg:sticky lg:top-[calc(var(--checkout-bar-h,72px)+1rem)]`},null,8,[`items`,`subtotal`,`shipping`,`tax`,`total`,`heading`]))],2))])])])}}};export{be as default}; \ No newline at end of file diff --git a/dist/assets/CheckoutStepperSection-Cjy7CD2L.js b/dist/assets/CheckoutStepperSection-B2xZ5FwE.js similarity index 94% rename from dist/assets/CheckoutStepperSection-Cjy7CD2L.js rename to dist/assets/CheckoutStepperSection-B2xZ5FwE.js index c0f5bd6..aa95fd9 100644 --- a/dist/assets/CheckoutStepperSection-Cjy7CD2L.js +++ b/dist/assets/CheckoutStepperSection-B2xZ5FwE.js @@ -1,4 +1,4 @@ -import{B as e,C as t,G as n,T as r,c as i,ft as a,j as o,m as s,o as c,r as l,s as u,u as d,ut as f}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as p}from"./i18n-BkCuZ9ke.js";import{t as m}from"./CheckoutStepper-EkS1Qntj.js";import{t as h}from"./SectionShell-XUVs_07L.js";var g={class:`eyebrow mb-5`},_={class:`flex flex-col gap-6`},v={class:`eyebrow text-muted`},y={class:`eyebrow mb-5`},b={class:`rounded-md border border-line bg-paper p-6 flex flex-col gap-4`},x={class:`flex flex-wrap gap-2`},S=[`onClick`],C={class:`eyebrow mb-5`},w={__name:`CheckoutStepperSection`,setup(w){let{t:T}=p(),E=e(`shipping`),D=c(()=>[{key:`cart`,label:T(`checkout.step.cart`),to:`/checkout/cart`,completed:!0},{key:`account`,label:T(`checkout.step.account`),to:`/checkout/account`,completed:!0},{key:`shipping`,label:T(`checkout.step.shipping`),to:`/checkout/shipping`,completed:!1},{key:`payment`,label:T(`checkout.step.payment`),to:`/checkout/payment`,completed:!1}]),O=[`cart`,`account`,`shipping`,`payment`];return(e,c)=>(t(),i(h,{eyebrow:n(T)(`ds.eyebrow.components`),title:n(T)(`ds.checkoutStepper.title`),description:n(T)(`ds.checkoutStepper.description`)},{default:o(()=>[u(`section`,null,[u(`h2`,g,a(n(T)(`ds.heading.states`)),1),u(`div`,_,[(t(),d(l,null,r(O,e=>u(`div`,{key:e,class:`rounded-md border border-line bg-paper p-6 flex flex-col gap-3`},[u(`p`,v,a(n(T)(`checkout.step.${e}`))+` active`,1),s(m,{steps:D.value,"active-key":e},null,8,[`steps`,`active-key`])])),64))])]),u(`section`,null,[u(`h2`,y,a(n(T)(`ds.heading.interactive`)),1),u(`div`,b,[u(`div`,x,[(t(),d(l,null,r(O,e=>u(`button`,{key:e,type:`button`,class:f([`px-3 py-1.5 rounded-pill border text-[12px] font-semibold tracking-label`,E.value===e?`bg-brand text-cream border-brand`:`bg-paper text-brand border-line hover:border-brand`]),onClick:t=>E.value=e},a(n(T)(`checkout.step.${e}`)),11,S)),64))]),s(m,{steps:D.value,"active-key":E.value},null,8,[`steps`,`active-key`])])]),u(`section`,null,[u(`h2`,C,a(n(T)(`ds.heading.usage`)),1),c[0]||=u(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[u(`pre`,{class:`whitespace-pre-wrap`},`[{key:`cart`,label:T(`checkout.step.cart`),to:`/checkout/cart`,completed:!0},{key:`account`,label:T(`checkout.step.account`),to:`/checkout/account`,completed:!0},{key:`shipping`,label:T(`checkout.step.shipping`),to:`/checkout/shipping`,completed:!1},{key:`payment`,label:T(`checkout.step.payment`),to:`/checkout/payment`,completed:!1}]),O=[`cart`,`account`,`shipping`,`payment`];return(e,c)=>(t(),i(h,{eyebrow:n(T)(`ds.eyebrow.components`),title:n(T)(`ds.checkoutStepper.title`),description:n(T)(`ds.checkoutStepper.description`)},{default:o(()=>[u(`section`,null,[u(`h2`,g,a(n(T)(`ds.heading.states`)),1),u(`div`,_,[(t(),d(l,null,r(O,e=>u(`div`,{key:e,class:`rounded-md border border-line bg-paper p-6 flex flex-col gap-3`},[u(`p`,v,a(n(T)(`checkout.step.${e}`))+` active`,1),s(m,{steps:D.value,"active-key":e},null,8,[`steps`,`active-key`])])),64))])]),u(`section`,null,[u(`h2`,y,a(n(T)(`ds.heading.interactive`)),1),u(`div`,b,[u(`div`,x,[(t(),d(l,null,r(O,e=>u(`button`,{key:e,type:`button`,class:f([`px-3 py-1.5 rounded-pill border text-[12px] font-semibold tracking-label`,E.value===e?`bg-brand text-cream border-brand`:`bg-paper text-brand border-line hover:border-brand`]),onClick:t=>E.value=e},a(n(T)(`checkout.step.${e}`)),11,S)),64))]),s(m,{steps:D.value,"active-key":E.value},null,8,[`steps`,`active-key`])])]),u(`section`,null,[u(`h2`,C,a(n(T)(`ds.heading.usage`)),1),c[0]||=u(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[u(`pre`,{class:`whitespace-pre-wrap`},` diff --git a/dist/assets/CheckoutSuccessPage-rl9KFiL8.js b/dist/assets/CheckoutSuccessPage-BMXVqLAp.js similarity index 95% rename from dist/assets/CheckoutSuccessPage-rl9KFiL8.js rename to dist/assets/CheckoutSuccessPage-BMXVqLAp.js index 116ef8a..f917562 100644 --- a/dist/assets/CheckoutSuccessPage-rl9KFiL8.js +++ b/dist/assets/CheckoutSuccessPage-BMXVqLAp.js @@ -1 +1 @@ -import{B as e,C as t,G as n,S as r,ft as i,j as a,l as o,m as s,o as c,p as l,s as u,u as d}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a as f,t as p}from"./vue-router-Cyqru1db.js";import{t as m}from"./Icon-CtR1FGIT.js";import{t as h}from"./i18n-BkCuZ9ke.js";import{a as g}from"./api-DeBxQCQq.js";import{t as _}from"./Button-DG-tA4DQ.js";var v={class:`min-h-svh flex flex-col bg-cream`},y={class:`text-ink flex-1 flex flex-col justify-center`},b={class:`mx-auto w-full max-w-3xl px-6 sm:px-8 md:px-12 lg:px-16 py-10 sm:py-14 md:py-16 lg:py-20`},x={class:`rounded-md border border-line bg-paper p-8 md:p-10 flex flex-col gap-6 items-center text-center`},S={class:`relative w-20 h-20`},C={class:`absolute inset-0 rounded-full bg-brand text-accent flex items-center justify-center`},w={class:`eyebrow`},T={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},E={class:`italic font-light text-brand`},D={class:`text-base leading-relaxed text-muted max-w-md`},O={key:0,class:`mt-2 inline-flex items-center gap-2 rounded-pill border border-cream-dark bg-cream px-4 py-2 text-[13px] text-ink`},k={class:`eyebrow text-muted`},A={class:`font-mono text-[12px] text-brand`},j={key:1,class:`text-[13px] text-danger mt-2`,role:`alert`,"aria-live":`polite`},M={class:`mt-4 flex flex-col gap-3 w-full max-w-sm`},N={key:2,class:`text-[12px] text-muted mt-2`},P={__name:`CheckoutSuccessPage`,setup(P){let{t:F}=h(),I=f(),L=e(null),R=e(``),z=e(!0),B=c(()=>String(I.query.order||``));return r(async()=>{if(!B.value){R.value=F(`checkout.success.missing`),z.value=!1;return}try{L.value=await g({orderId:B.value})}catch(e){R.value=e?.message||F(`checkout.error.generic`)}finally{z.value=!1}}),(e,r)=>(t(),d(`div`,v,[u(`main`,y,[u(`div`,b,[u(`article`,x,[u(`div`,S,[r[0]||=u(`span`,{"aria-hidden":`true`,class:`absolute inset-0 rounded-full bg-brand-wash`,style:{animation:`var(--animate-pulse-soft)`}},null,-1),u(`span`,C,[s(m,{name:`check`,size:36,"stroke-width":2.4})])]),u(`p`,w,i(n(F)(`checkout.success.eyebrow`)),1),u(`h1`,T,[l(i(n(F)(`checkout.success.headline`))+` `,1),u(`em`,E,i(n(F)(`checkout.success.headline.em`)),1)]),u(`p`,D,i(n(F)(`checkout.success.sub`)),1),B.value?(t(),d(`div`,O,[u(`span`,k,i(n(F)(`checkout.success.orderId`)),1),u(`span`,A,i(B.value),1)])):o(``,!0),R.value?(t(),d(`p`,j,i(R.value),1)):o(``,!0),u(`div`,M,[s(n(p),{to:`/`,class:`block`},{default:a(()=>[s(_,{variant:`primary`,size:`lg`,class:`w-full`},{default:a(()=>[l(i(n(F)(`checkout.success.cta.home`)),1)]),_:1})]),_:1}),s(n(p),{to:`/shop`,class:`block`},{default:a(()=>[s(_,{variant:`secondary`,size:`lg`,class:`w-full`},{default:a(()=>[l(i(n(F)(`checkout.success.cta.shop`)),1)]),_:1})]),_:1})]),!z.value&&L.value?(t(),d(`p`,N,i(n(F)(`checkout.success.email`)),1)):o(``,!0)])])])]))}};export{P as default}; \ No newline at end of file +import{B as e,C as t,G as n,S as r,ft as i,j as a,l as o,m as s,o as c,p as l,s as u,u as d}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{a as f,t as p}from"./vue-router-Cyqru1db.js";import{t as m}from"./Icon-CtR1FGIT.js";import{t as h}from"./i18n-Uw3aZfCH.js";import{a as g}from"./api-Co5DNHfG.js";import{t as _}from"./Button-DG-tA4DQ.js";var v={class:`min-h-svh flex flex-col bg-cream`},y={class:`text-ink flex-1 flex flex-col justify-center`},b={class:`mx-auto w-full max-w-3xl px-6 sm:px-8 md:px-12 lg:px-16 py-10 sm:py-14 md:py-16 lg:py-20`},x={class:`rounded-md border border-line bg-paper p-8 md:p-10 flex flex-col gap-6 items-center text-center`},S={class:`relative w-20 h-20`},C={class:`absolute inset-0 rounded-full bg-brand text-accent flex items-center justify-center`},w={class:`eyebrow`},T={class:`font-display font-normal leading-[1.05] tracking-tight text-ink text-headline-md`},E={class:`italic font-light text-brand`},D={class:`text-base leading-relaxed text-muted max-w-md`},O={key:0,class:`mt-2 inline-flex items-center gap-2 rounded-pill border border-cream-dark bg-cream px-4 py-2 text-[13px] text-ink`},k={class:`eyebrow text-muted`},A={class:`font-mono text-[12px] text-brand`},j={key:1,class:`text-[13px] text-danger mt-2`,role:`alert`,"aria-live":`polite`},M={class:`mt-4 flex flex-col gap-3 w-full max-w-sm`},N={key:2,class:`text-[12px] text-muted mt-2`},P={__name:`CheckoutSuccessPage`,setup(P){let{t:F}=h(),I=f(),L=e(null),R=e(``),z=e(!0),B=c(()=>String(I.query.order||``));return r(async()=>{if(!B.value){R.value=F(`checkout.success.missing`),z.value=!1;return}try{L.value=await g({orderId:B.value})}catch(e){R.value=e?.message||F(`checkout.error.generic`)}finally{z.value=!1}}),(e,r)=>(t(),d(`div`,v,[u(`main`,y,[u(`div`,b,[u(`article`,x,[u(`div`,S,[r[0]||=u(`span`,{"aria-hidden":`true`,class:`absolute inset-0 rounded-full bg-brand-wash`,style:{animation:`var(--animate-pulse-soft)`}},null,-1),u(`span`,C,[s(m,{name:`check`,size:36,"stroke-width":2.4})])]),u(`p`,w,i(n(F)(`checkout.success.eyebrow`)),1),u(`h1`,T,[l(i(n(F)(`checkout.success.headline`))+` `,1),u(`em`,E,i(n(F)(`checkout.success.headline.em`)),1)]),u(`p`,D,i(n(F)(`checkout.success.sub`)),1),B.value?(t(),d(`div`,O,[u(`span`,k,i(n(F)(`checkout.success.orderId`)),1),u(`span`,A,i(B.value),1)])):o(``,!0),R.value?(t(),d(`p`,j,i(R.value),1)):o(``,!0),u(`div`,M,[s(n(p),{to:`/`,class:`block`},{default:a(()=>[s(_,{variant:`primary`,size:`lg`,class:`w-full`},{default:a(()=>[l(i(n(F)(`checkout.success.cta.home`)),1)]),_:1})]),_:1}),s(n(p),{to:`/shop`,class:`block`},{default:a(()=>[s(_,{variant:`secondary`,size:`lg`,class:`w-full`},{default:a(()=>[l(i(n(F)(`checkout.success.cta.shop`)),1)]),_:1})]),_:1})]),!z.value&&L.value?(t(),d(`p`,N,i(n(F)(`checkout.success.email`)),1)):o(``,!0)])])])]))}};export{P as default}; \ No newline at end of file diff --git a/dist/assets/ColorsSection-BjLXLYpr.js b/dist/assets/ColorsSection-Gg7O__OY.js similarity index 91% rename from dist/assets/ColorsSection-BjLXLYpr.js rename to dist/assets/ColorsSection-Gg7O__OY.js index 7ac2bc2..25bbcf4 100644 --- a/dist/assets/ColorsSection-BjLXLYpr.js +++ b/dist/assets/ColorsSection-Gg7O__OY.js @@ -1 +1 @@ -import{C as e,G as t,T as n,c as r,dt as i,ft as a,j as o,o as s,r as c,s as l,u}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as d}from"./i18n-BkCuZ9ke.js";import{t as f}from"./SectionShell-XUVs_07L.js";var p={class:`eyebrow mb-5`},m={class:`grid grid-cols-2 sm:grid-cols-3 gap-4`},h={class:`px-4 py-3`},g={class:`font-mono text-[12px] text-ink block`},_={__name:`ColorsSection`,setup(_){let{t:v}=d(),y=s(()=>[{title:v(`ds.colors.group.brand`),names:[`brand`,`brand-hover`,`brand-soft`]},{title:v(`ds.colors.group.accent`),names:[`accent`,`accent-soft`,`accent-ink`,`accent-fill`,`accent-fill-hover`,`accent-fill-ink`]},{title:v(`ds.colors.group.surface`),names:[`surface`,`paper`,`cream`]},{title:v(`ds.colors.group.ink`),names:[`ink`,`muted`]},{title:v(`ds.colors.group.line`),names:[`line`,`line-strong`]},{title:v(`ds.colors.group.semantic`),names:[`success`,`warning`,`danger`]}]);return(s,d)=>(e(),r(f,{eyebrow:t(v)(`ds.eyebrow.tokens`),title:t(v)(`ds.colors.title`),description:t(v)(`ds.colors.description`)},{default:o(()=>[(e(!0),u(c,null,n(y.value,t=>(e(),u(`section`,{key:t.title},[l(`h2`,p,a(t.title),1),l(`div`,m,[(e(!0),u(c,null,n(t.names,t=>(e(),u(`div`,{key:t,class:`rounded-md border border-line overflow-hidden bg-paper`},[l(`div`,{class:`h-28 border-b border-line`,style:i({background:`var(--color-${t})`})},null,4),l(`div`,h,[l(`code`,g,`--color-`+a(t),1)])]))),128))])]))),128))]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{_ as default}; \ No newline at end of file +import{C as e,G as t,T as n,c as r,dt as i,ft as a,j as o,o as s,r as c,s as l,u}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as d}from"./i18n-Uw3aZfCH.js";import{t as f}from"./SectionShell-BFBDPrsk.js";var p={class:`eyebrow mb-5`},m={class:`grid grid-cols-2 sm:grid-cols-3 gap-4`},h={class:`px-4 py-3`},g={class:`font-mono text-[12px] text-ink block`},_={__name:`ColorsSection`,setup(_){let{t:v}=d(),y=s(()=>[{title:v(`ds.colors.group.brand`),names:[`brand`,`brand-hover`,`brand-soft`]},{title:v(`ds.colors.group.accent`),names:[`accent`,`accent-soft`,`accent-ink`,`accent-fill`,`accent-fill-hover`,`accent-fill-ink`]},{title:v(`ds.colors.group.surface`),names:[`surface`,`paper`,`cream`]},{title:v(`ds.colors.group.ink`),names:[`ink`,`muted`]},{title:v(`ds.colors.group.line`),names:[`line`,`line-strong`]},{title:v(`ds.colors.group.semantic`),names:[`success`,`warning`,`danger`]}]);return(s,d)=>(e(),r(f,{eyebrow:t(v)(`ds.eyebrow.tokens`),title:t(v)(`ds.colors.title`),description:t(v)(`ds.colors.description`)},{default:o(()=>[(e(!0),u(c,null,n(y.value,t=>(e(),u(`section`,{key:t.title},[l(`h2`,p,a(t.title),1),l(`div`,m,[(e(!0),u(c,null,n(t.names,t=>(e(),u(`div`,{key:t,class:`rounded-md border border-line overflow-hidden bg-paper`},[l(`div`,{class:`h-28 border-b border-line`,style:i({background:`var(--color-${t})`})},null,4),l(`div`,h,[l(`code`,g,`--color-`+a(t),1)])]))),128))])]))),128))]),_:1},8,[`eyebrow`,`title`,`description`]))}};export{_ as default}; \ No newline at end of file diff --git a/dist/assets/DesignLayout-BaKaoH6F.js b/dist/assets/DesignLayout-CkqsP6-f.js similarity index 97% rename from dist/assets/DesignLayout-BaKaoH6F.js rename to dist/assets/DesignLayout-CkqsP6-f.js index 417eba3..07af7e8 100644 --- a/dist/assets/DesignLayout-BaKaoH6F.js +++ b/dist/assets/DesignLayout-CkqsP6-f.js @@ -1 +1 @@ -import{A as e,B as t,C as n,G as r,T as i,c as a,ft as o,j as s,l as c,m as l,o as u,p as d,r as f,s as p,u as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as h}from"./runtime-dom.esm-bundler-Bg1uJ-W7.js";import{a as g,n as _,t as v}from"./vue-router-Cyqru1db.js";import{t as y}from"./Logo-FD-JLoLl.js";import{t as b}from"./Icon-CtR1FGIT.js";import{t as x}from"./IconButton-UABNp_yn.js";import{t as ee}from"./i18n-BkCuZ9ke.js";import{t as S}from"./LanguageSwitcher-B0tmtJbD.js";import{t as C}from"./_plugin-vue_export-helper-0vLWKQyu.js";var w={class:`h-screen flex bg-surface text-ink overflow-hidden`},T={class:`hidden lg:flex w-[260px] shrink-0 border-r border-line bg-paper flex-col`},E={class:`px-6 py-6 border-b border-line`},D={class:`eyebrow mt-3`},O={class:`flex-1 overflow-y-auto px-3 py-5 space-y-6`},k={class:`eyebrow px-3 mb-2`},A={class:`flex flex-col gap-0.5`},j={class:`px-6 py-4 border-t border-line`},M={class:`flex-1 overflow-y-auto pb-20 lg:pb-0`},N=[`aria-expanded`],P={class:`flex flex-col min-w-0`},F={class:`eyebrow`},I={class:`truncate text-[15px] font-semibold text-ink`},te={class:`inline-flex items-center justify-center w-10 h-10 rounded-pill bg-brand-wash text-brand shrink-0`},L=[`aria-label`],R={class:`shrink-0 flex items-center justify-between px-5 pt-3 pb-3 border-b border-line`},z={class:`flex flex-col`},B={class:`eyebrow`},V={class:`text-[15px] font-semibold`},H={class:`flex-1 overflow-y-auto px-3 py-4 space-y-6`},U={class:`eyebrow px-3 mb-2`},W={class:`flex flex-col gap-0.5`},G={class:`px-3 pt-3 border-t border-line`},K=C({__name:`DesignLayout`,setup(C){let{t:K}=ee(),q=g(),J=u(()=>[{title:K(`ds.sidebar.brand`),items:[{name:`ds-logo`,label:K(`ds.nav.logo`)}]},{title:K(`ds.sidebar.tokens`),items:[{name:`ds-colors`,label:K(`ds.nav.colors`)},{name:`ds-typography`,label:K(`ds.nav.typography`)},{name:`ds-radii`,label:K(`ds.nav.radii`)},{name:`ds-shadows`,label:K(`ds.nav.shadows`)},{name:`ds-motion`,label:K(`ds.nav.motion`)}]},{title:K(`ds.sidebar.components`),items:[{name:`ds-icons`,label:K(`ds.nav.icons`)},{name:`ds-buttons`,label:K(`ds.nav.buttons`)},{name:`ds-badges`,label:K(`ds.nav.badges`)},{name:`ds-inputs`,label:K(`ds.nav.inputs`)},{name:`ds-cards`,label:K(`ds.nav.cards`)},{name:`ds-products`,label:K(`ds.nav.products`)},{name:`ds-bundle-card`,label:K(`ds.nav.bundleCard`)},{name:`ds-hero`,label:K(`ds.nav.hero`)},{name:`ds-navbar`,label:K(`ds.nav.navbar`)},{name:`ds-search`,label:K(`ds.nav.search`)},{name:`ds-quantity-stepper`,label:K(`ds.nav.qtyStepper`)},{name:`ds-cart-drawer`,label:K(`ds.nav.cartDrawer`)},{name:`ds-checkout-stepper`,label:K(`ds.nav.checkoutStepper`)},{name:`ds-language`,label:K(`ds.nav.language`)}]},{title:K(`ds.sidebar.sections`),items:[{name:`ds-bundles`,label:K(`ds.nav.bundles`)},{name:`ds-kaiserhacks`,label:K(`ds.nav.kaiserhacks`)},{name:`ds-revitalization`,label:K(`ds.nav.revitalization`)},{name:`ds-about`,label:K(`ds.nav.about`)},{name:`ds-footer`,label:K(`ds.nav.footer`)}]}]),Y=u(()=>J.value.flatMap(e=>e.items)),X=u(()=>{let e=Y.value.find(e=>e.name===q.name);return e?e.label:K(`ds.eyebrow.designSystem`)}),Z=t(!1);function Q(){Z.value=!0}function $(){Z.value=!1}return e(()=>q.name,$),(e,t)=>(n(),m(`div`,w,[p(`aside`,T,[p(`div`,E,[l(r(v),{to:`/`,class:`block text-brand`,"aria-label":`Kaiser Natron home`},{default:s(()=>[l(y,{class:`w-16 h-auto`})]),_:1}),p(`p`,D,o(r(K)(`ds.eyebrow.designSystem`)),1)]),p(`nav`,O,[(n(!0),m(f,null,i(J.value,e=>(n(),m(`div`,{key:e.title},[p(`p`,k,o(e.title),1),p(`div`,A,[(n(!0),m(f,null,i(e.items,e=>(n(),a(r(v),{key:e.name,to:{name:e.name},class:`px-3 py-2 rounded-sm text-[14px] font-medium text-muted hover:text-brand hover:bg-brand-wash transition-colors`,"active-class":`!text-brand !bg-brand-soft-wash`},{default:s(()=>[d(o(e.label),1)]),_:2},1032,[`to`]))),128))])]))),128))]),p(`div`,j,[l(r(v),{to:`/`,class:`text-[13px] text-muted hover:text-brand transition-colors`},{default:s(()=>[d(o(r(K)(`ds.sidebar.back`)),1)]),_:1})])]),p(`main`,M,[l(r(_))]),p(`button`,{type:`button`,class:`lg:hidden fixed bottom-0 inset-x-0 z-40 flex items-center justify-between gap-3 px-5 py-3 bg-paper border-t border-line text-left shadow-[0_-4px_16px_rgba(28,58,40,0.06)]`,"aria-expanded":Z.value,"aria-controls":`ds-mobile-sheet`,onClick:Q},[p(`span`,P,[p(`span`,F,o(r(K)(`ds.mobile.currentPage`)),1),p(`span`,I,o(X.value),1)]),p(`span`,te,[l(b,{name:`chevron-up`,size:20,label:r(K)(`ds.mobile.selectPage`)},null,8,[`label`])])],8,N),l(h,{name:`ds-backdrop`},{default:s(()=>[Z.value?(n(),m(`div`,{key:0,class:`lg:hidden fixed inset-0 z-50 bg-ink/40`,onClick:$})):c(``,!0)]),_:1}),l(h,{name:`ds-sheet`},{default:s(()=>[Z.value?(n(),m(`aside`,{key:0,id:`ds-mobile-sheet`,role:`dialog`,"aria-modal":`true`,"aria-label":r(K)(`ds.mobile.selectPage`),class:`lg:hidden fixed bottom-0 inset-x-0 z-50 h-[50svh] bg-paper border-t border-line rounded-t-xl flex flex-col shadow-[0_-12px_32px_rgba(28,58,40,0.18)]`},[p(`div`,R,[p(`span`,z,[p(`span`,B,o(r(K)(`ds.eyebrow.designSystem`)),1),p(`span`,V,o(r(K)(`ds.mobile.selectPage`)),1)]),l(x,{icon:`close`,variant:`ghost`,size:`xs`,"icon-size":22,"aria-label":r(K)(`menu.close`),onClick:$},null,8,[`aria-label`])]),p(`nav`,H,[(n(!0),m(f,null,i(J.value,e=>(n(),m(`div`,{key:e.title},[p(`p`,U,o(e.title),1),p(`div`,W,[(n(!0),m(f,null,i(e.items,e=>(n(),a(r(v),{key:e.name,to:{name:e.name},class:`px-3 py-2.5 rounded-sm text-[15px] font-medium text-muted hover:text-brand hover:bg-brand-wash transition-colors`,"active-class":`!text-brand !bg-brand-soft-wash`},{default:s(()=>[d(o(e.label),1)]),_:2},1032,[`to`]))),128))])]))),128)),p(`div`,G,[l(r(v),{to:`/`,class:`inline-block text-[14px] text-muted hover:text-brand transition-colors`},{default:s(()=>[d(o(r(K)(`ds.sidebar.back`)),1)]),_:1})])])],8,L)):c(``,!0)]),_:1}),l(S,{floating:``})]))}},[[`__scopeId`,`data-v-6e5968d4`]]);export{K as default}; \ No newline at end of file +import{A as e,B as t,C as n,G as r,T as i,c as a,ft as o,j as s,l as c,m as l,o as u,p as d,r as f,s as p,u as m}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as h}from"./runtime-dom.esm-bundler-Bg1uJ-W7.js";import{a as g,n as _,t as v}from"./vue-router-Cyqru1db.js";import{t as y}from"./Logo-FD-JLoLl.js";import{t as b}from"./Icon-CtR1FGIT.js";import{t as x}from"./IconButton-UABNp_yn.js";import{t as ee}from"./i18n-Uw3aZfCH.js";import{t as S}from"./LanguageSwitcher-C7pqR69B.js";import{t as C}from"./_plugin-vue_export-helper-0vLWKQyu.js";var w={class:`h-screen flex bg-surface text-ink overflow-hidden`},T={class:`hidden lg:flex w-[260px] shrink-0 border-r border-line bg-paper flex-col`},E={class:`px-6 py-6 border-b border-line`},D={class:`eyebrow mt-3`},O={class:`flex-1 overflow-y-auto px-3 py-5 space-y-6`},k={class:`eyebrow px-3 mb-2`},A={class:`flex flex-col gap-0.5`},j={class:`px-6 py-4 border-t border-line`},M={class:`flex-1 overflow-y-auto pb-20 lg:pb-0`},N=[`aria-expanded`],P={class:`flex flex-col min-w-0`},F={class:`eyebrow`},I={class:`truncate text-[15px] font-semibold text-ink`},te={class:`inline-flex items-center justify-center w-10 h-10 rounded-pill bg-brand-wash text-brand shrink-0`},L=[`aria-label`],R={class:`shrink-0 flex items-center justify-between px-5 pt-3 pb-3 border-b border-line`},z={class:`flex flex-col`},B={class:`eyebrow`},V={class:`text-[15px] font-semibold`},H={class:`flex-1 overflow-y-auto px-3 py-4 space-y-6`},U={class:`eyebrow px-3 mb-2`},W={class:`flex flex-col gap-0.5`},G={class:`px-3 pt-3 border-t border-line`},K=C({__name:`DesignLayout`,setup(C){let{t:K}=ee(),q=g(),J=u(()=>[{title:K(`ds.sidebar.brand`),items:[{name:`ds-logo`,label:K(`ds.nav.logo`)}]},{title:K(`ds.sidebar.tokens`),items:[{name:`ds-colors`,label:K(`ds.nav.colors`)},{name:`ds-typography`,label:K(`ds.nav.typography`)},{name:`ds-radii`,label:K(`ds.nav.radii`)},{name:`ds-shadows`,label:K(`ds.nav.shadows`)},{name:`ds-motion`,label:K(`ds.nav.motion`)}]},{title:K(`ds.sidebar.components`),items:[{name:`ds-icons`,label:K(`ds.nav.icons`)},{name:`ds-buttons`,label:K(`ds.nav.buttons`)},{name:`ds-badges`,label:K(`ds.nav.badges`)},{name:`ds-inputs`,label:K(`ds.nav.inputs`)},{name:`ds-cards`,label:K(`ds.nav.cards`)},{name:`ds-products`,label:K(`ds.nav.products`)},{name:`ds-bundle-card`,label:K(`ds.nav.bundleCard`)},{name:`ds-hero`,label:K(`ds.nav.hero`)},{name:`ds-navbar`,label:K(`ds.nav.navbar`)},{name:`ds-search`,label:K(`ds.nav.search`)},{name:`ds-quantity-stepper`,label:K(`ds.nav.qtyStepper`)},{name:`ds-cart-drawer`,label:K(`ds.nav.cartDrawer`)},{name:`ds-checkout-stepper`,label:K(`ds.nav.checkoutStepper`)},{name:`ds-language`,label:K(`ds.nav.language`)}]},{title:K(`ds.sidebar.sections`),items:[{name:`ds-bundles`,label:K(`ds.nav.bundles`)},{name:`ds-kaiserhacks`,label:K(`ds.nav.kaiserhacks`)},{name:`ds-revitalization`,label:K(`ds.nav.revitalization`)},{name:`ds-about`,label:K(`ds.nav.about`)},{name:`ds-footer`,label:K(`ds.nav.footer`)}]}]),Y=u(()=>J.value.flatMap(e=>e.items)),X=u(()=>{let e=Y.value.find(e=>e.name===q.name);return e?e.label:K(`ds.eyebrow.designSystem`)}),Z=t(!1);function Q(){Z.value=!0}function $(){Z.value=!1}return e(()=>q.name,$),(e,t)=>(n(),m(`div`,w,[p(`aside`,T,[p(`div`,E,[l(r(v),{to:`/`,class:`block text-brand`,"aria-label":`Kaiser Natron home`},{default:s(()=>[l(y,{class:`w-16 h-auto`})]),_:1}),p(`p`,D,o(r(K)(`ds.eyebrow.designSystem`)),1)]),p(`nav`,O,[(n(!0),m(f,null,i(J.value,e=>(n(),m(`div`,{key:e.title},[p(`p`,k,o(e.title),1),p(`div`,A,[(n(!0),m(f,null,i(e.items,e=>(n(),a(r(v),{key:e.name,to:{name:e.name},class:`px-3 py-2 rounded-sm text-[14px] font-medium text-muted hover:text-brand hover:bg-brand-wash transition-colors`,"active-class":`!text-brand !bg-brand-soft-wash`},{default:s(()=>[d(o(e.label),1)]),_:2},1032,[`to`]))),128))])]))),128))]),p(`div`,j,[l(r(v),{to:`/`,class:`text-[13px] text-muted hover:text-brand transition-colors`},{default:s(()=>[d(o(r(K)(`ds.sidebar.back`)),1)]),_:1})])]),p(`main`,M,[l(r(_))]),p(`button`,{type:`button`,class:`lg:hidden fixed bottom-0 inset-x-0 z-40 flex items-center justify-between gap-3 px-5 py-3 bg-paper border-t border-line text-left shadow-[0_-4px_16px_rgba(28,58,40,0.06)]`,"aria-expanded":Z.value,"aria-controls":`ds-mobile-sheet`,onClick:Q},[p(`span`,P,[p(`span`,F,o(r(K)(`ds.mobile.currentPage`)),1),p(`span`,I,o(X.value),1)]),p(`span`,te,[l(b,{name:`chevron-up`,size:20,label:r(K)(`ds.mobile.selectPage`)},null,8,[`label`])])],8,N),l(h,{name:`ds-backdrop`},{default:s(()=>[Z.value?(n(),m(`div`,{key:0,class:`lg:hidden fixed inset-0 z-50 bg-ink/40`,onClick:$})):c(``,!0)]),_:1}),l(h,{name:`ds-sheet`},{default:s(()=>[Z.value?(n(),m(`aside`,{key:0,id:`ds-mobile-sheet`,role:`dialog`,"aria-modal":`true`,"aria-label":r(K)(`ds.mobile.selectPage`),class:`lg:hidden fixed bottom-0 inset-x-0 z-50 h-[50svh] bg-paper border-t border-line rounded-t-xl flex flex-col shadow-[0_-12px_32px_rgba(28,58,40,0.18)]`},[p(`div`,R,[p(`span`,z,[p(`span`,B,o(r(K)(`ds.eyebrow.designSystem`)),1),p(`span`,V,o(r(K)(`ds.mobile.selectPage`)),1)]),l(x,{icon:`close`,variant:`ghost`,size:`xs`,"icon-size":22,"aria-label":r(K)(`menu.close`),onClick:$},null,8,[`aria-label`])]),p(`nav`,H,[(n(!0),m(f,null,i(J.value,e=>(n(),m(`div`,{key:e.title},[p(`p`,U,o(e.title),1),p(`div`,W,[(n(!0),m(f,null,i(e.items,e=>(n(),a(r(v),{key:e.name,to:{name:e.name},class:`px-3 py-2.5 rounded-sm text-[15px] font-medium text-muted hover:text-brand hover:bg-brand-wash transition-colors`,"active-class":`!text-brand !bg-brand-soft-wash`},{default:s(()=>[d(o(e.label),1)]),_:2},1032,[`to`]))),128))])]))),128)),p(`div`,G,[l(r(v),{to:`/`,class:`inline-block text-[14px] text-muted hover:text-brand transition-colors`},{default:s(()=>[d(o(r(K)(`ds.sidebar.back`)),1)]),_:1})])])],8,L)):c(``,!0)]),_:1}),l(S,{floating:``})]))}},[[`__scopeId`,`data-v-6e5968d4`]]);export{K as default}; \ No newline at end of file diff --git a/dist/assets/DevicePreview-CxF-mErd.js b/dist/assets/DevicePreview-DSIM4p3o.js similarity index 100% rename from dist/assets/DevicePreview-CxF-mErd.js rename to dist/assets/DevicePreview-DSIM4p3o.js diff --git a/dist/assets/ExpressCheckoutMount-DP_zQgK-.js b/dist/assets/ExpressCheckoutMount-DAB1mQHS.js similarity index 98% rename from dist/assets/ExpressCheckoutMount-DP_zQgK-.js rename to dist/assets/ExpressCheckoutMount-DAB1mQHS.js index d7c0f30..e12e81c 100644 --- a/dist/assets/ExpressCheckoutMount-DP_zQgK-.js +++ b/dist/assets/ExpressCheckoutMount-DAB1mQHS.js @@ -1 +1 @@ -import{A as e,B as t,C as n,G as r,S as i,f as a,ft as o,l as s,o as c,s as l,u,ut as d,x as f}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as p}from"./preload-helper-ca-nBW7U.js";import{t as m}from"./i18n-BkCuZ9ke.js";var h={class:`flex flex-col gap-3`},g={key:1,class:`grid gap-3 sm:grid-cols-2`},_=[`disabled`,`aria-label`],v=[`disabled`,`aria-label`],y={key:2,class:`text-[13px] text-danger`},b={__name:`ExpressCheckoutMount`,props:{intent:{type:Object,default:null},returnUrl:{type:String,required:!0},busy:{type:Boolean,default:!1}},emits:[`pay`,`error`],setup(b,{expose:x,emit:S}){let{t:C}=m(),w=b,T=S,E=t(null),D=t(null),O=t(!1),k=t(``),A=c(()=>/^pi_stub_express_/.test(w.intent?.clientSecret||``));function j(e){w.busy||w.intent||T(`pay`,{wallet:e})}async function M(){if(!(!w.intent||typeof window>`u`)){if(A.value){O.value=!0;return}try{let e=[`@stripe`,`stripe-js`].join(`/`),{loadStripe:t}=await p(()=>import(e),[]),n=await t(w.intent.publishableKey);if(!n)throw Error(`Stripe.js failed to initialise.`);E.value=n;let r=n.elements({clientSecret:w.intent.clientSecret,appearance:{theme:`flat`,variables:{colorPrimary:`#006548`,colorBackground:`#ffffff`,colorText:`#0f3825`,fontFamily:`"DM Sans", ui-sans-serif, system-ui, sans-serif`,borderRadius:`10px`,spacingUnit:`4px`}}});D.value=r;let i=r.create(`expressCheckout`,{buttonType:{applePay:`buy`,googlePay:`buy`},buttonTheme:{applePay:`black`,googlePay:`black`},buttonHeight:48});i.mount(`#express-checkout-element`),i.on(`ready`,()=>{O.value=!0}),i.on(`loaderror`,e=>{k.value=e?.error?.message||`Failed to load wallet buttons.`}),i.on(`confirm`,async()=>{let e=await n.confirmPayment({elements:r,clientSecret:w.intent.clientSecret,confirmParams:{return_url:w.returnUrl}});e?.error&&T(`error`,e.error)})}catch(e){k.value=e?.message||String(e)}}}async function N(){return w.intent?A.value?(await new Promise(e=>setTimeout(e,600)),{paymentIntent:{id:(w.intent.clientSecret||``).split(`_secret_`)[0]||`pi_stub`,status:`succeeded`}}):{error:{message:`Express confirm is driven by Stripe.`}}:{error:{message:`No intent.`}}}return x({confirm:N,ready:O}),i(()=>{w.intent&&M()}),e(()=>w.intent?.clientSecret,e=>{e&&M()}),f(()=>{E.value=null,D.value=null}),(e,t)=>(n(),u(`div`,h,[b.intent&&!A.value?(n(),u(`div`,{key:0,id:`express-checkout-element`,class:d([`min-h-[52px]`,{"opacity-60":!O.value}]),"aria-live":`polite`},null,2)):(n(),u(`div`,g,[l(`button`,{type:`button`,class:`inline-flex items-center justify-center gap-2 rounded-sm bg-ink h-12 px-5 text-paper transition-colors duration-base hover:bg-brand disabled:opacity-50 disabled:cursor-not-allowed`,disabled:b.busy,"aria-label":r(C)(`checkout.express.applePay.aria`),onClick:t[0]||=e=>j(`apple`)},[...t[2]||=[l(`svg`,{width:`18`,height:`22`,viewBox:`0 0 18 22`,fill:`currentColor`,"aria-hidden":`true`},[l(`path`,{d:`M14.94 11.36c-.02-2.5 2.04-3.7 2.13-3.76-1.16-1.7-2.97-1.94-3.61-1.96-1.54-.16-3 .9-3.78.9-.78 0-1.98-.88-3.26-.86-1.68.02-3.23.97-4.1 2.47-1.74 3.02-.45 7.5 1.25 9.95.83 1.2 1.82 2.55 3.12 2.5 1.25-.05 1.72-.81 3.23-.81 1.51 0 1.93.81 3.25.78 1.34-.02 2.2-1.22 3.02-2.43.95-1.4 1.34-2.75 1.36-2.82-.03-.01-2.61-1-2.61-3.96zM12.6 4.05c.7-.85 1.16-2.02 1.04-3.18-1 .04-2.21.66-2.93 1.5-.65.74-1.21 1.93-1.06 3.07 1.11.09 2.25-.56 2.95-1.39z`})],-1),l(`span`,{class:`text-[14px] font-medium tracking-tight`},`Pay`,-1)]],8,_),l(`button`,{type:`button`,class:`inline-flex items-center justify-center gap-2 rounded-sm bg-ink h-12 px-5 text-paper transition-colors duration-base hover:bg-brand disabled:opacity-50 disabled:cursor-not-allowed`,disabled:b.busy,"aria-label":r(C)(`checkout.express.googlePay.aria`),onClick:t[1]||=e=>j(`google`)},[...t[3]||=[a(`Pay`,2)]],8,v)])),k.value?(n(),u(`p`,y,o(k.value),1)):s(``,!0)]))}};export{b as t}; \ No newline at end of file +import{A as e,B as t,C as n,G as r,S as i,f as a,ft as o,l as s,o as c,s as l,u,ut as d,x as f}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as p}from"./preload-helper-ca-nBW7U.js";import{t as m}from"./i18n-Uw3aZfCH.js";var h={class:`flex flex-col gap-3`},g={key:1,class:`grid gap-3 sm:grid-cols-2`},_=[`disabled`,`aria-label`],v=[`disabled`,`aria-label`],y={key:2,class:`text-[13px] text-danger`},b={__name:`ExpressCheckoutMount`,props:{intent:{type:Object,default:null},returnUrl:{type:String,required:!0},busy:{type:Boolean,default:!1}},emits:[`pay`,`error`],setup(b,{expose:x,emit:S}){let{t:C}=m(),w=b,T=S,E=t(null),D=t(null),O=t(!1),k=t(``),A=c(()=>/^pi_stub_express_/.test(w.intent?.clientSecret||``));function j(e){w.busy||w.intent||T(`pay`,{wallet:e})}async function M(){if(!(!w.intent||typeof window>`u`)){if(A.value){O.value=!0;return}try{let e=[`@stripe`,`stripe-js`].join(`/`),{loadStripe:t}=await p(()=>import(e),[]),n=await t(w.intent.publishableKey);if(!n)throw Error(`Stripe.js failed to initialise.`);E.value=n;let r=n.elements({clientSecret:w.intent.clientSecret,appearance:{theme:`flat`,variables:{colorPrimary:`#006548`,colorBackground:`#ffffff`,colorText:`#0f3825`,fontFamily:`"DM Sans", ui-sans-serif, system-ui, sans-serif`,borderRadius:`10px`,spacingUnit:`4px`}}});D.value=r;let i=r.create(`expressCheckout`,{buttonType:{applePay:`buy`,googlePay:`buy`},buttonTheme:{applePay:`black`,googlePay:`black`},buttonHeight:48});i.mount(`#express-checkout-element`),i.on(`ready`,()=>{O.value=!0}),i.on(`loaderror`,e=>{k.value=e?.error?.message||`Failed to load wallet buttons.`}),i.on(`confirm`,async()=>{let e=await n.confirmPayment({elements:r,clientSecret:w.intent.clientSecret,confirmParams:{return_url:w.returnUrl}});e?.error&&T(`error`,e.error)})}catch(e){k.value=e?.message||String(e)}}}async function N(){return w.intent?A.value?(await new Promise(e=>setTimeout(e,600)),{paymentIntent:{id:(w.intent.clientSecret||``).split(`_secret_`)[0]||`pi_stub`,status:`succeeded`}}):{error:{message:`Express confirm is driven by Stripe.`}}:{error:{message:`No intent.`}}}return x({confirm:N,ready:O}),i(()=>{w.intent&&M()}),e(()=>w.intent?.clientSecret,e=>{e&&M()}),f(()=>{E.value=null,D.value=null}),(e,t)=>(n(),u(`div`,h,[b.intent&&!A.value?(n(),u(`div`,{key:0,id:`express-checkout-element`,class:d([`min-h-[52px]`,{"opacity-60":!O.value}]),"aria-live":`polite`},null,2)):(n(),u(`div`,g,[l(`button`,{type:`button`,class:`inline-flex items-center justify-center gap-2 rounded-sm bg-ink h-12 px-5 text-paper transition-colors duration-base hover:bg-brand disabled:opacity-50 disabled:cursor-not-allowed`,disabled:b.busy,"aria-label":r(C)(`checkout.express.applePay.aria`),onClick:t[0]||=e=>j(`apple`)},[...t[2]||=[l(`svg`,{width:`18`,height:`22`,viewBox:`0 0 18 22`,fill:`currentColor`,"aria-hidden":`true`},[l(`path`,{d:`M14.94 11.36c-.02-2.5 2.04-3.7 2.13-3.76-1.16-1.7-2.97-1.94-3.61-1.96-1.54-.16-3 .9-3.78.9-.78 0-1.98-.88-3.26-.86-1.68.02-3.23.97-4.1 2.47-1.74 3.02-.45 7.5 1.25 9.95.83 1.2 1.82 2.55 3.12 2.5 1.25-.05 1.72-.81 3.23-.81 1.51 0 1.93.81 3.25.78 1.34-.02 2.2-1.22 3.02-2.43.95-1.4 1.34-2.75 1.36-2.82-.03-.01-2.61-1-2.61-3.96zM12.6 4.05c.7-.85 1.16-2.02 1.04-3.18-1 .04-2.21.66-2.93 1.5-.65.74-1.21 1.93-1.06 3.07 1.11.09 2.25-.56 2.95-1.39z`})],-1),l(`span`,{class:`text-[14px] font-medium tracking-tight`},`Pay`,-1)]],8,_),l(`button`,{type:`button`,class:`inline-flex items-center justify-center gap-2 rounded-sm bg-ink h-12 px-5 text-paper transition-colors duration-base hover:bg-brand disabled:opacity-50 disabled:cursor-not-allowed`,disabled:b.busy,"aria-label":r(C)(`checkout.express.googlePay.aria`),onClick:t[1]||=e=>j(`google`)},[...t[3]||=[a(`Pay`,2)]],8,v)])),k.value?(n(),u(`p`,y,o(k.value),1)):s(``,!0)]))}};export{b as t}; \ No newline at end of file diff --git a/dist/assets/Footer-D-2MkC07.js b/dist/assets/Footer-Bf8Z3dZX.js similarity index 97% rename from dist/assets/Footer-D-2MkC07.js rename to dist/assets/Footer-Bf8Z3dZX.js index baea1be..1f09ed6 100644 --- a/dist/assets/Footer-D-2MkC07.js +++ b/dist/assets/Footer-Bf8Z3dZX.js @@ -1 +1 @@ -import{C as e,G as t,T as n,ft as r,m as i,o as a,r as o,s,u as c,ut as l}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as u}from"./Logo-FD-JLoLl.js";import{t as d}from"./i18n-BkCuZ9ke.js";var f={class:`mx-auto w-full max-w-6xl px-6 py-12 sm:px-8 sm:py-14 md:px-12 md:py-16 lg:px-16`},p={class:`grid gap-10 md:grid-cols-[1.4fr_1fr_1fr] md:gap-12`},m={class:`flex flex-col gap-4 max-w-sm`},h=[`aria-label`],g={class:`flex flex-col gap-2`},_=[`href`],v=[`aria-label`],y={class:`flex flex-col gap-2`},b=[`href`],x={__name:`Footer`,props:{variant:{type:String,default:`cream`,validator:e=>[`cream`,`brand`,`paper`].includes(e)}},setup(x){let S=x,{t:C}=d(),w=a(()=>S.variant===`brand`?{surface:`bg-brand text-cream`,topRule:`border-cream-line`,bottomRule:`border-cream-line/40`,muted:`text-cream/80`,logo:`text-cream`,link:`hover:text-highlight`}:S.variant===`paper`?{surface:`bg-paper text-brand`,topRule:`border-line`,bottomRule:`border-line/60`,muted:`text-muted`,logo:`text-brand`,link:`hover:text-brand-hover`}:{surface:`bg-cream text-brand`,topRule:`border-line`,bottomRule:`border-line/60`,muted:`text-muted`,logo:`text-brand`,link:`hover:text-brand-hover`}),T=[{key:`footer.legal.impressum`,href:`/impressum`},{key:`footer.legal.datenschutz`,href:`/datenschutz`}],E=[{key:`footer.explore.shop`,href:`/shop`},{key:`footer.explore.kueche`,href:`/kueche`},{key:`footer.explore.haushalt`,href:`/haushalt`},{key:`footer.explore.pflege`,href:`/pflege`},{key:`footer.explore.bundles`,href:`/#bundles`},{key:`footer.explore.about`,href:`/#about`}],D=new Date().getFullYear();return(a,d)=>(e(),c(`footer`,{class:l([`border-t`,w.value.surface,w.value.topRule])},[s(`div`,f,[s(`div`,p,[s(`div`,m,[i(u,{class:l([`w-20 md:w-24 h-auto`,w.value.logo])},null,8,[`class`]),s(`p`,{class:l([`text-sm leading-relaxed`,w.value.muted])},r(t(C)(`footer.tagline`)),3)]),s(`nav`,{"aria-label":t(C)(`footer.explore.heading`),class:`flex flex-col gap-3`},[s(`p`,{class:l([`eyebrow`,w.value.muted])},r(t(C)(`footer.explore.heading`)),3),s(`ul`,g,[(e(),c(o,null,n(E,e=>s(`li`,{key:e.href},[s(`a`,{href:e.href,class:l([`text-sm underline-offset-4 decoration-1 hover:underline`,w.value.link])},r(t(C)(e.key)),11,_)])),64))])],8,h),s(`nav`,{"aria-label":t(C)(`footer.legal.heading`),class:`flex flex-col gap-3`},[s(`p`,{class:l([`eyebrow`,w.value.muted])},r(t(C)(`footer.legal.heading`)),3),s(`ul`,y,[(e(),c(o,null,n(T,e=>s(`li`,{key:e.href},[s(`a`,{href:e.href,class:l([`text-sm underline-offset-4 decoration-1 hover:underline`,w.value.link])},r(t(C)(e.key)),11,b)])),64))])],8,v)]),s(`div`,{class:l([`mt-12 pt-6 border-t flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3`,w.value.bottomRule])},[s(`p`,{class:l([`text-xs`,w.value.muted])},` © `+r(t(D))+` `+r(t(C)(`footer.copyright`)),3),s(`p`,{class:l([`text-xs`,w.value.muted])},r(t(C)(`footer.madeIn`)),3)],2)])],2))}};export{x as t}; \ No newline at end of file +import{C as e,G as t,T as n,ft as r,m as i,o as a,r as o,s,u as c,ut as l}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as u}from"./Logo-FD-JLoLl.js";import{t as d}from"./i18n-Uw3aZfCH.js";var f={class:`mx-auto w-full max-w-6xl px-6 py-12 sm:px-8 sm:py-14 md:px-12 md:py-16 lg:px-16`},p={class:`grid gap-10 md:grid-cols-[1.4fr_1fr_1fr] md:gap-12`},m={class:`flex flex-col gap-4 max-w-sm`},h=[`aria-label`],g={class:`flex flex-col gap-2`},_=[`href`],v=[`aria-label`],y={class:`flex flex-col gap-2`},b=[`href`],x={__name:`Footer`,props:{variant:{type:String,default:`cream`,validator:e=>[`cream`,`brand`,`paper`].includes(e)}},setup(x){let S=x,{t:C}=d(),w=a(()=>S.variant===`brand`?{surface:`bg-brand text-cream`,topRule:`border-cream-line`,bottomRule:`border-cream-line/40`,muted:`text-cream/80`,logo:`text-cream`,link:`hover:text-highlight`}:S.variant===`paper`?{surface:`bg-paper text-brand`,topRule:`border-line`,bottomRule:`border-line/60`,muted:`text-muted`,logo:`text-brand`,link:`hover:text-brand-hover`}:{surface:`bg-cream text-brand`,topRule:`border-line`,bottomRule:`border-line/60`,muted:`text-muted`,logo:`text-brand`,link:`hover:text-brand-hover`}),T=[{key:`footer.legal.impressum`,href:`/impressum`},{key:`footer.legal.datenschutz`,href:`/datenschutz`}],E=[{key:`footer.explore.shop`,href:`/shop`},{key:`footer.explore.kueche`,href:`/kueche`},{key:`footer.explore.haushalt`,href:`/haushalt`},{key:`footer.explore.pflege`,href:`/pflege`},{key:`footer.explore.bundles`,href:`/#bundles`},{key:`footer.explore.about`,href:`/#about`}],D=new Date().getFullYear();return(a,d)=>(e(),c(`footer`,{class:l([`border-t`,w.value.surface,w.value.topRule])},[s(`div`,f,[s(`div`,p,[s(`div`,m,[i(u,{class:l([`w-20 md:w-24 h-auto`,w.value.logo])},null,8,[`class`]),s(`p`,{class:l([`text-sm leading-relaxed`,w.value.muted])},r(t(C)(`footer.tagline`)),3)]),s(`nav`,{"aria-label":t(C)(`footer.explore.heading`),class:`flex flex-col gap-3`},[s(`p`,{class:l([`eyebrow`,w.value.muted])},r(t(C)(`footer.explore.heading`)),3),s(`ul`,g,[(e(),c(o,null,n(E,e=>s(`li`,{key:e.href},[s(`a`,{href:e.href,class:l([`text-sm underline-offset-4 decoration-1 hover:underline`,w.value.link])},r(t(C)(e.key)),11,_)])),64))])],8,h),s(`nav`,{"aria-label":t(C)(`footer.legal.heading`),class:`flex flex-col gap-3`},[s(`p`,{class:l([`eyebrow`,w.value.muted])},r(t(C)(`footer.legal.heading`)),3),s(`ul`,y,[(e(),c(o,null,n(T,e=>s(`li`,{key:e.href},[s(`a`,{href:e.href,class:l([`text-sm underline-offset-4 decoration-1 hover:underline`,w.value.link])},r(t(C)(e.key)),11,b)])),64))])],8,v)]),s(`div`,{class:l([`mt-12 pt-6 border-t flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3`,w.value.bottomRule])},[s(`p`,{class:l([`text-xs`,w.value.muted])},` © `+r(t(D))+` `+r(t(C)(`footer.copyright`)),3),s(`p`,{class:l([`text-xs`,w.value.muted])},r(t(C)(`footer.madeIn`)),3)],2)])],2))}};export{x as t}; \ No newline at end of file diff --git a/dist/assets/FooterSection-ajmXEAcP.js b/dist/assets/FooterSection-lYJ6dUnd.js similarity index 90% rename from dist/assets/FooterSection-ajmXEAcP.js rename to dist/assets/FooterSection-lYJ6dUnd.js index 2ec24a0..7cb5007 100644 --- a/dist/assets/FooterSection-ajmXEAcP.js +++ b/dist/assets/FooterSection-lYJ6dUnd.js @@ -1,3 +1,3 @@ -import{C as e,G as t,c as n,ft as r,j as i,m as a,s as o}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{t as s}from"./i18n-BkCuZ9ke.js";import{t as c}from"./Footer-D-2MkC07.js";import{t as l}from"./SectionShell-XUVs_07L.js";var u={class:`eyebrow mb-5`},d={class:`rounded-md overflow-hidden border border-line`},f={class:`eyebrow mb-5`},p={class:`rounded-md overflow-hidden border border-line`},m={class:`eyebrow mb-5`},h={class:`rounded-md overflow-hidden border border-line`},g={class:`eyebrow mb-5`},_={__name:`FooterSection`,setup(_){let{t:v}=s();return(s,_)=>(e(),n(l,{eyebrow:t(v)(`ds.eyebrow.components`),title:t(v)(`ds.footer.title`),description:t(v)(`ds.footer.description`)},{default:i(()=>[o(`section`,null,[o(`h2`,u,r(t(v)(`ds.footer.tone.cream`)),1),o(`div`,d,[a(c,{variant:`cream`})])]),o(`section`,null,[o(`h2`,f,r(t(v)(`ds.footer.tone.brand`)),1),o(`div`,p,[a(c,{variant:`brand`})])]),o(`section`,null,[o(`h2`,m,r(t(v)(`ds.footer.tone.paper`)),1),o(`div`,h,[a(c,{variant:`paper`})])]),o(`section`,null,[o(`h2`,g,r(t(v)(`ds.heading.usage`)),1),_[0]||=o(`div`,{class:`rounded-md border border-line bg-paper p-6 font-mono text-[12px] text-ink`},[o(`pre`,{class:`whitespace-pre-wrap`},`