Commit Graph

57 Commits

Author SHA1 Message Date
Dorian
8bc18edaf6 home: swap Bundles + cream banner order
Bundles now sits directly under the Pulver hero (surface band), with
the cream "ein Pulver, hundert Anwendungen" banner below it. Wave
dividers re-routed brand → surface → cream → brand to keep the
colour rhythm continuous across the new ordering.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 09:47:51 +01:00
Dorian
b01c16b4d8 home: bundle imagery + side-fade timing polish
· Wire bundle cards to /bundles/transparent/* artwork; rename the
  ä/ü/&-bearing source files to ASCII-safe names so dev server and
  CDN paths don't choke on URL-encoding edge cases.
· BundleCard gains an `imageFit` prop (`contain` default vs `cover`)
  so per-bundle artwork can opt into edge-to-edge framing without
  forcing the whole grid to the same fit.
· BrandHero side-fade fade-out now syncs with the tagline fade-in
  (700ms ease 1150ms) — one smooth landing instead of two staggered
  beats.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 09:46:00 +01:00
Dorian
ab888d99b0 home: brand hero with in-flow splash animation, 3-product teaser, bundle imagery
Home page now opens with a BrandHero that plays the figure entrance
animation in flow (replacing the full-screen SplashIntro overlay),
followed by a 3-product Cook/Clean/Care teaser feeding the shop. Splash
paths extracted to a shared module so BrandHero can render the same
illustration without duplicating ~500KB of SVG path strings.

ProductCard gains `cream` and `brand` tones (cream/green media wash
with white card body); homepage teaser uses `brand`, shop catalogue
switches to the green wash too. Bundle cards point at the new
/bundles/background/* artwork.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 09:40:47 +01:00
Dorian
d6a40592ff design system: add Footer and CheckoutStepper sections
The two newly-shipped components (Footer with cream/brand/paper
tones, CheckoutStepper with active/completed/upcoming states) are
now documented in the design system at /design/footer and
/design/checkout-stepper. Sidebar entries added under "Sections"
and "Components" respectively, with DE + EN copy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 19:14:09 +01:00
Dorian
efbc93d3b8 wire CartDrawer + cart events into LoginPage and RegisterPage
Both pages were rendering the Navbar with cart-count but not
listening for the @cart event or rendering the drawer, so tapping
the cart icon did nothing. Hooked up cartOpen ref, search-add,
qty/remove handlers, goCheckout, and the CartDrawer template — same
pattern as HomePage / ShopPage / CategoryPage / LegalPage.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 19:12:36 +01:00
Dorian
4ed021280a custom chevron on selects with 16px right inset
Native <select> chevrons render at varying offsets across browsers.
Replaced them with `appearance-none` + an absolute-positioned
chevron-down Icon at right-4 (16px) so the gap between the chevron
and the right border is consistent. Applied to RegisterPage's
salutation select and ShippingStep's shipping/billing country selects.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:56:24 +01:00
Dorian
0bf8a32d97 account icon: brand-green container with accent-yellow user glyph
Switched both the desktop and mobile account IconButton from `ghost`
to `float` (bg-brand-float + text-accent) with shadow disabled — same
md size (w-11 h-11) as the cart button beside it, so the pair reads
as a balanced complementary set: yellow cart, green account.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:26:13 +01:00
Dorian
6446bfff89 account icon in navbar + register polish
- IconButton (icon: user) in the desktop right cluster, left of cart,
  and a mobile-only top-right account icon. Both navigate to /login.
- RegisterPage now matches the live kaiser-natron.at flow: salutation
  dropdown (Frau/Herr/Divers), required terms & privacy checkbox
  linking to /datenschutz, marketing opt-in.
- auth.js stub carries salutation + acceptsTerms through to the
  session payload so the eventual backend swap is a no-op.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 18:25:00 +01:00
Dorian
7cad9d27c8 explicit smooth-scroll handlers on Navbar links
Vue Router's scrollBehavior doesn't fire when RouterLink resolves to
the current URL (logo while on /, /#bundles while already at #bundles),
so the smooth scroll never happened. Added onNavClick + onLogoClick
handlers that intercept the click when the destination is the same
route and call scrollIntoView / window.scrollTo with behavior:'smooth'
directly. Cross-route nav still goes through Vue Router's scrollBehavior
unchanged (savedPosition restore + same-route smooth + cross-route
instant).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 16:17:47 +01:00
Dorian
eefaa06995 scroll: smooth only for same-route hash, restore savedPosition
Three rules:
- Browser back/forward → restore exact scroll y (preserves shop ⇄
  product round-trips, fixes regression).
- Same-route hash nav (clicking Bundles while on home) → smooth.
- Cross-route hash nav (/shop → /#bundles) → instant.

Removed the global `html { scroll-behavior: smooth }` so plain
forward navigations and back/forward jumps stay instant.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 16:16:32 +01:00
Dorian
4f6c697bc6 restore savedPosition + force smooth scroll on hash via HomePage watcher
Two fixes:
- Bring back savedPosition handling in scrollBehavior so /shop ⇄
  /shop/<slug> back-nav restores the previous scroll y.
- Add a route.hash watcher in HomePage that calls scrollIntoView with
  smooth behaviour. Vue Router's scrollBehavior alone wasn't reliably
  firing for same-route hash navigations, so this catches them
  explicitly. Also handles direct /#bundles deep-links via immediate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 16:15:58 +01:00
Dorian
7a5a94739c nav links use RouterLink so smooth hash scroll fires
The Navbar's primary, secondary, mobile and logo links were plain
<a href> tags, which triggered full-page reloads instead of SPA
navigation — Vue Router's scrollBehavior never ran. Switching them
to RouterLink keeps the user inside the SPA so the smooth-scroll
behaviour for /#bundles, /#revitalize, /#about kicks in.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 16:13:23 +01:00
Dorian
b48b34f424 smooth-scroll on hash nav
Anchor links like /#bundles, /#revitalize, /#about now smooth-scroll
to their target instead of jumping. Reverts the earlier instant-jump
choice — for the homepage nav, the animation is the desired feedback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 16:10:09 +01:00
Dorian
f0470fc113 drop savedPosition from scrollBehavior
Anchor links (e.g. /#bundles) still scroll to their target section.
Back/forward navigation now lands at the top of the destination
instead of restoring the previous scroll y, for predictable arrivals.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 16:07:50 +01:00
Dorian
c600fadadb stepped checkout, auth pages, sticky stepper bar, action footer
- 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>
2026-05-03 16:06:26 +01:00
Dorian
e5bd1f65fc product detail pages, footer, category and legal routes
- /shop/:slug product detail pages with green hero, per-product locale files (de.js + en.js), and viewport-fit hero sizing
- footer component integrated across home/shop/checkout/success
- /pflege, /haushalt, /impressum, /datenschutz routes via CategoryPage / LegalPage
- scrollBehavior honours savedPosition (back-button restores y); smooth scrolling removed everywhere for accessibility
- ProductCard + Hero CTAs use RouterLink for internal paths so SPA history survives clicks
- homepage hero image cap reduced ~20% on width and height
- dist/ rebuild

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 14:33:22 +01:00
Dorian
16910c49d4 product pages navigation tweaks and layout improvements 2026-05-03 14:17:07 +01:00
Dorian
3b3f5069ca active nab links checkout pages 2026-04-28 18:42:40 +01:00
Dorian
0883571a31 shop work and regression to original menu as well as checkout 2026-04-28 18:08:48 +01:00
Dorian
b14ebdcacf mobile hero category wiring 2026-04-24 15:54:36 +01:00
Dorian
55d2bd3dee mobile hero category wiring 2026-04-24 15:54:14 +01:00
Dorian
cbc1a4e739 shop changes and nav ux refinements 2026-04-24 15:51:32 +01:00
Dorian
06de567842 hero fix 2026-04-24 13:07:33 +01:00
Dorian
2707036b61 changes since conversation categories and layout fixes andshop 2026-04-24 13:05:03 +01:00
Dorian
7a6f84cb25 chore: rebuild dist with new hero images
Previous commit (9177c79) updated public/ source images and HomePage
but forgot to rebuild dist/. Portainer deploys from committed dist/,
so the new hero images never reached the stack.
2026-04-23 17:59:17 +01:00
Dorian
cf446a0537 hero image name fix 2026-04-23 16:41:14 +01:00
Dorian
c19401b43d minor changes 2026-04-23 15:47:28 +01:00
Dorian
d57fee8fc7 updates to new sections and design system page 2026-04-23 15:12:43 +01:00
Dorian
f001d65c7f updates to new sections and design system page 2026-04-23 15:02:54 +01:00
Dorian
b183c1c480 splash intro timing fix 2026-04-23 13:47:18 +01:00
Dorian
32d6807def added bundle revit and about 2026-04-23 13:24:29 +01:00
Dorian
9a111c8dde added second product example 2026-04-22 12:13:53 +01:00
Dorian
aae8818fdd fix for line again 2026-04-22 11:47:48 +01:00
Dorian
74f013aed2 fix to transition between hero and banner 2026-04-22 11:23:38 +01:00
Dorian
e63157923c mobile fold stitch fix 2026-04-22 10:51:21 +01:00
Dorian
6b92eb5474 addded banner placeholder 2026-04-22 10:45:44 +01:00
Dorian
f27624478c tweaks 2026-04-22 10:28:08 +01:00
Dorian
0942840482 build: rebuild dist after brand retune + favicon swap
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 09:45:31 +01:00
Dorian
b0d0267934 added cart 2026-04-22 08:50:25 +01:00
Dorian
e60e24ab23 refactor(design-system): consolidate cart + sheet-close into IconButton
IconButton adds:
- xs size (36px) for compact chrome
- ghost variant (transparent → brand-wash on hover)
- shadow prop so callers opt into elevation per-instance

Callsites collapsed:
- Navbar desktop + mobile cart buttons now share one IconButton
  (accent variant; mobile uses shadow='md'). CART_CLASS constant
  deleted — the variant owns that coloring now.
- DesignLayout mobile sheet close uses IconButton ghost xs.

Tone-coupled pills left inline by design:
- Navbar desktop search trigger — visual tone bound to navbar variants
- Search overlay input-row close — tone bound to Search's internal tones
- Hero secondary CTA — tone bound to Hero's internal tones
- Navbar overlay menu cart row — compound pill + inline count chip,
  one-off pattern
2026-04-21 14:56:09 +01:00
Dorian
12c41a22b3 refactor(design-system): extract IconButton + polymorphic Badge
Replace inline circular-button markup and duplicated Badge classes with
first-class design-system components so every affordance is globally
controllable:

- IconButton (float / accent / cream-wash / brand-wash × sm / md / lg)
  with optional count overlay; raised variants get the hover-lift
  animation, flat variants keep transition-colors. No visual change.
- Badge gains an `as` prop so the search 'Clear' affordance renders as
  a button with the exact same typography/pill.
- Navbar mobile search/menu + overlay close, and the search overlay's
  mobile floating close, now use IconButton.

Cart icon buttons left inline for now — they combine size-specific
shadow with the count overlay and deserve a follow-up consolidation
once we add a shadow prop to IconButton.
2026-04-21 14:42:47 +01:00
Dorian
a5b4951720 feat(tokens): add brand-float (#274838) for mobile floating buttons
Applies to navbar mobile search + menu and the search overlay close —
one step lighter than brand so shadow-lg actually reads. Clear pill
label trimmed to just 'Clear' / 'Löschen'.
2026-04-21 14:18:47 +01:00
Dorian
cfcae89809 fix(search): restore accent-fill clear pill, shorten label to 'Clear'
Visible label comes from a new search.clearShort key (DE 'Löschen',
EN 'Clear'). aria-label keeps the descriptive 'Clear search' for
screen readers.
2026-04-21 14:13:11 +01:00
Dorian
f3d8e6f34a style(search): clear pill uses yellow text, not yellow fill
Keeps the small-badge typography (px/py/radius/weight/tracking) but
renders "CLEAR" in accent text so it reads as an inline affordance
rather than a filled chip.
2026-04-21 14:07:58 +01:00
Dorian
c0888530c5 style(search, navbar): brand+shadow-lg for floaters, accent clear badge
Revert mobile search/menu/close floaters to bg-brand text-accent with
shadow-lg — the cream-wash fill blended into the brand surface. Replace
the browser's native search cancel with a yellow accent-style badge
reading "clear", matching the small-badge typography.
2026-04-21 14:03:28 +01:00
Dorian
1cc044bf3b feat(search): mobile floating close button at search-open position
Mirrors the navbar's bottom-left search trigger so users return their
thumb to the same spot to dismiss. Top-right close stays for users
drawn to it.
2026-04-21 13:57:40 +01:00
Dorian
e2c7d83dfa style(navbar): mobile search + menu use cream-wash pill with accent icon
Match the overlay menu's close button: subtle translucent fill on brand
green with a yellow icon. Drops the flat brand-on-brand buttons whose
shadows didn't read on a green page.
2026-04-21 13:49:21 +01:00
Dorian
7b44260fbc feat(search): product search component + navbar triggers
Adds a client-side fuzzy product search to the design system:

- `src/api/products.js`: fixture catalogue (22 products across the Kaiser
  Natron, Holste, Gazelle, Grüne Tante and Linda ranges) plus a scored,
  diacritic-folded search (ß→ss, ä→ae, NFKD) with weighted fields
  (title 5, brand/keywords 3, size/category 2, id 1) and prefix bonus.
- `Search.vue`: tone-driven (brand/paper/cream) full-screen overlay on
  mobile, centered modal on md+. Auto-focus, arrow-key nav, Enter/Esc,
  suggested-products empty state, keyboard-hint footer on desktop, safe-
  area aware, scroll-locks the document while open.
- Navbar now hosts two triggers: a pill-shaped "Search products"
  lookalike (desktop, in the same LanguageSwitcher-style container) and
  a green/accent shadow-sm floating button bottom-left on mobile. Both
  open the same overlay.
- HomePage feeds the products list into Navbar.
- Design-system showcase (`/design/search`) with live demo + canned
  result preview + usage snippet. Sidebar + mobile bottom-nav entries
  and DE/EN i18n added.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:40:21 +01:00
Dorian
af4e03a155 feat(search): tone-aware product search with mobile + desktop triggers
Introduces:
- src/api/fixtures/products.js + src/api/index.js — placeholder catalog
  (24 products across Kaiser-Natron / Holste / Gazelle / Grüne Tante /
  Linda) so search has real data. Same shape the backend will return.
- Search.vue — Teleported dialog. Token-scored, diacritics-folded, ß→ss
  normalized so German terms still match when users type ASCII. Keyboard
  navigation (↑/↓/Enter/Esc), autofocus on open, scroll-lock. Full-screen
  on mobile, centered command-palette modal on md+. Tone prop defaults
  to 'brand' so the overlay reads as the site's primary affordance
  (green), with 'paper' and 'cream' variants available.
- SearchSection.vue + ds-search route + sidebar entry.
- DE + EN strings for the overlay and the showcase.

Navbar wires the triggers: desktop search button sits left of the
LanguageSwitcher in the right cluster; mobile gets a matching bottom-
left floating button (cream surface, safe-area padded) that mirrors the
existing bottom-right cart/menu cluster. The Search overlay is mounted
inside Navbar with the default catalog, so every page that renders a
Navbar gets search for free. Selected products bubble up as a
@select event for navigation handling.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:33:18 +01:00
Dorian
45402733f7 fix(hero): scale product image down 15%
Trim the split/centered mediaSize widths and the responsive max-h caps
on the image itself by ~15% so the product cutout doesn't dominate the
first fold.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:05:02 +01:00