- 4-step checkout (cart, account, shipping, payment) with Pinia store and route children - minimal cream sticky top bar (logo + stepper + back-to-shopping) replacing nav/footer in checkout - fixed cream action footer at viewport bottom for back/continue on every step - guest / sign-in / register tabs on account step + standalone /login and /register - src/api/auth.js stub matching expected backend contract - legal pages (/impressum, /datenschutz) and category landings (/pflege, /haushalt) - success page stacked CTAs (back-to-home primary, keep-shopping secondary) - footer logo size aligned with navbar; cream variant footer Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 line
7.5 KiB
JavaScript
1 line
7.5 KiB
JavaScript
import{B as e,C as t,G as n,S as r,ft as i,j as a,m as o,o as s,p as c,r as l,s as u,u as d,x as f}from"./runtime-core.esm-bundler-DTXUv7Wx.js";import{o as p}from"./vue-router-Cyqru1db.js";import{t as m}from"./i18n-DhVF3Pwg.js";import{r as h}from"./products-BqW5PUnm.js";import{c as g,d as _,f as v,p as y,u as b}from"./api-DlB23x7f.js";import{t as ee}from"./Navbar-dl8ShEaS.js";import{t as te}from"./Footer-DX-ml2dd.js";import{t as ne}from"./CartDrawer-f57jysS_.js";import{t as x}from"./Hero-Bag8c3o2.js";import{t as S}from"./Bundles-Dt57zqLD.js";import{t as C}from"./Revitalization-D0uruWe9.js";import{t as w}from"./About-DF_uf9aY.js";var T={class:`flex flex-col bg-brand md:min-h-[calc(100svh-var(--nav-h))] md:justify-center`},E={class:`italic font-light text-accent-soft`},D={class:`italic font-light text-brand-soft`},O=`/products/kaiser-natron-pulver-250-g-grosspackung.webp`,k=`kaiser-natron-pulver-250-g-grosspackung`,A=`/products/kaiser-natron-bad-500-g.webp`,j=`kaiser-natron-bad-500-g`,M={__name:`HomePage`,setup(M){let{t:N}=m(),P=y(),F=p(),I=e(!1);function re(){I.value=!1,F.push(`/checkout`)}let L=[{key:`nav.shop`,href:`/shop`},{key:`nav.bundles`,href:`/#bundles`},{key:`nav.revitalization`,href:`/#revitalize`},{key:`nav.about`,href:`/#about`}],R=[],z=s(()=>({headline:N(`bundles.headline.a`),headlineEm:N(`bundles.headline.em`),sub:N(`bundles.sub`),joinCta:N(`bundles.joinCta`),benefits:[N(`bundles.benefit.1.title`),N(`bundles.benefit.2.title`),N(`bundles.benefit.3.title`)]})),B=s(()=>({eyebrow:N(`revit.eyebrow`),headline:N(`revit.headline.a`),headlineEm:N(`revit.headline.em`),sub:N(`revit.sub`),notifyCta:N(`revit.notifyCta`),features:[{title:N(`revit.feature.1.title`),icon:`⚗️`},{title:N(`revit.feature.2.title`),icon:`💊`},{title:N(`revit.feature.3.title`),icon:`🌿`}]})),V=s(()=>({eyebrow:N(`about.eyebrow`),headline:N(`about.headline`),sub:N(`about.sub`),milestones:[1,2,3].map(e=>({year:N(`about.milestone.${e}.year`),title:N(`about.milestone.${e}.title`),text:N(`about.milestone.${e}.text`)}))})),H=[{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,memberPrice:21.17,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,memberPrice:19.47,image:`/products/kaiser-natron-pulver-250-g-grosspackung.webp`,imageAlt:`Wäsche & Pflege Bundle`,badge:``,badgeVariant:`accent`},{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,memberPrice:25.42,image:`/products/kaiser-natron-bad-500-g.webp`,imageAlt:`Wohlfühl-Bundle mit Kaiser-Natron Bad`,badge:``,badgeVariant:`accent`}];async function U(){await g(k,1),I.value=!0}async function W(){await g(j,1),I.value=!0}let G={haushalt:`kaiser-natron-pulver-250-g-grosspackung`,waesche:`holste-wasch-soda-500-g-beutel`,wohlfuehl:`kaiser-natron-bad-500-g`};async function K(e){let t=G[e];t&&(await g(t,1),I.value=!0)}function q(){let e=document.getElementById(`bundles`);e&&e.scrollIntoView({block:`start`})}function J(){}async function Y({productId:e,quantity:t}){await v(e,t)}async function X(e){await _(e)}async function ie(e){await g(e.id,1),I.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 r(()=>{if(b(),$(),typeof ResizeObserver<`u`&&Z.value){let e=Z.value.$el||Z.value;Q=new ResizeObserver($),Q.observe(e)}window.addEventListener(`resize`,$)}),f(()=>{Q&&Q.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,$)}),(e,r)=>(t(),d(l,null,[o(ee,{ref_key:`navRef`,ref:Z,variant:`brand`,layout:`standard`,items:L,"secondary-items":R,"cart-count":n(P).count,products:n(h),onCart:r[0]||=e=>I.value=!0,onSearch:ie},null,8,[`cart-count`,`products`]),u(`div`,T,[o(x,{class:`w-full`,variant:`split`,tone:`brand`,subheadline:n(N)(`ds.hero.sub`),image:O,"image-alt":`Kaiser-Natron Pulver 250 g Großpackung`,"cta-label":n(N)(`ds.buttons.addToCart`),"secondary-label":n(N)(`ds.buttons.learnMore`),"secondary-href":`/shop/${k}`,onCta:U},{headline:a(()=>[c(i(n(N)(`ds.hero.headline.a`))+` `,1),u(`em`,E,i(n(N)(`ds.hero.headline.em`)),1),c(` `+i(n(N)(`ds.hero.headline.b`)),1)]),_:1},8,[`subheadline`,`cta-label`,`secondary-label`,`secondary-href`])]),r[2]||=u(`svg`,{"aria-hidden":`true`,class:`block w-full h-12 md:h-16 shrink-0 -mb-px bg-brand`,viewBox:`0 0 1440 64`,preserveAspectRatio:`none`},[u(`rect`,{width:`1440`,height:`64`,fill:`var(--color-cream)`}),u(`path`,{d:`M0,0 L0,40 C320,4 520,60 720,32 C920,4 1120,60 1440,24 L1440,0 Z`,fill:`var(--color-brand)`})],-1),o(x,{class:`-mt-px`,variant:`split`,tone:`cream`,reverse:``,compact:``,eyebrow:n(N)(`home.banner.eyebrow`),subheadline:n(N)(`home.banner.sub`),image:A,"image-alt":`Kaiser-Natron Pulver 250 g Großpackung`,"cta-label":n(N)(`ds.buttons.addToCart`),"secondary-label":n(N)(`ds.buttons.learnMore`),"secondary-href":`/shop/${j}`,onCta:W},{headline:a(()=>[c(i(n(N)(`home.banner.headline.a`))+` `,1),u(`em`,D,i(n(N)(`home.banner.headline.em`)),1),c(` `+i(n(N)(`home.banner.headline.b`)),1)]),_:1},8,[`eyebrow`,`subheadline`,`cta-label`,`secondary-label`,`secondary-href`]),r[3]||=u(`svg`,{"aria-hidden":`true`,class:`block w-full h-12 md:h-16 shrink-0 -mb-px bg-cream`,viewBox:`0 0 1440 64`,preserveAspectRatio:`none`},[u(`rect`,{width:`1440`,height:`64`,fill:`var(--color-surface)`}),u(`path`,{d:`M0,0 L0,40 C320,4 520,60 720,32 C920,4 1120,60 1440,24 L1440,0 Z`,fill:`var(--color-cream)`})],-1),o(S,{class:`-mt-px`,layout:`stacked`,bundles:H,headline:z.value.headline,"headline-em":z.value.headlineEm,sub:z.value.sub,benefits:z.value.benefits,"join-cta":z.value.joinCta,onAdd:K,onJoin:q},null,8,[`headline`,`headline-em`,`sub`,`benefits`,`join-cta`]),r[4]||=u(`svg`,{"aria-hidden":`true`,class:`block w-full h-12 md:h-16 shrink-0 -mb-px bg-surface`,viewBox:`0 0 1440 64`,preserveAspectRatio:`none`},[u(`rect`,{width:`1440`,height:`64`,fill:`var(--color-brand)`}),u(`path`,{d:`M0,0 L0,40 C320,4 520,60 720,32 C920,4 1120,60 1440,24 L1440,0 Z`,fill:`var(--color-surface)`})],-1),o(C,{class:`-mt-px`,eyebrow:B.value.eyebrow,headline:B.value.headline,"headline-em":B.value.headlineEm,sub:B.value.sub,features:B.value.features,"notify-cta":B.value.notifyCta,onNotify:J},null,8,[`eyebrow`,`headline`,`headline-em`,`sub`,`features`,`notify-cta`]),r[5]||=u(`svg`,{"aria-hidden":`true`,class:`block w-full h-12 md:h-16 shrink-0 -mb-px bg-brand`,viewBox:`0 0 1440 64`,preserveAspectRatio:`none`},[u(`rect`,{width:`1440`,height:`64`,fill:`var(--color-cream)`}),u(`path`,{d:`M0,0 L0,40 C320,4 520,60 720,32 C920,4 1120,60 1440,24 L1440,0 Z`,fill:`var(--color-brand)`})],-1),o(w,{class:`-mt-px`,eyebrow:V.value.eyebrow,headline:V.value.headline,sub:V.value.sub,milestones:V.value.milestones},null,8,[`eyebrow`,`headline`,`sub`,`milestones`]),o(te),r[6]||=u(`div`,{"aria-hidden":`true`,class:`md:hidden`,style:{height:`calc(100px + env(safe-area-inset-bottom))`}},null,-1),o(ne,{modelValue:I.value,"onUpdate:modelValue":r[1]||=e=>I.value=e,items:n(P).items,subtotal:n(P).subtotal,count:n(P).count,onUpdateQuantity:Y,onRemove:X,onCheckout:re},null,8,[`modelValue`,`items`,`subtotal`,`count`])],64))}};export{M as default}; |