100 Commits
Author SHA1 Message Date
Dorian 999833d54f updated menu button to red 2026-06-26 11:24:50 +01:00
DorianandClaude Opus 4.8 92fdd88af6 feat: German doc versions at /dev-doc-de, /simple-doc-de, /review-doc-de
- Add full German translations of the three handoff docs (public/*-de.html),
  each with an "English ↗" toggle; added "Deutsch ↗" toggle to the EN docs.
- Register the -de slugs in vite.config.js so the clean URLs work in dev
  (nginx $uri.html already handles them in prod).
dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 12:25:51 +01:00
DorianandClaude Opus 4.8 c8b816784b docs: per-card "View on site" links on both handoff docs
Every section card now links to its related live page/section, opening in
a new tab (root-relative hrefs, target=_blank rel=noopener):
- dev-doc: one link per §1–§28 card + the quick-reference card (→ /design/*
  for token/component sections, the matching page/anchor for site features).
- simple-doc: switched from section-level to per-card links on each item
  (23 links), mapped to /, /shop, /shop#wash, /#bundles, /kueche, etc.;
  kept the inline category links and the Quick-reference → /design link.

dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:12:35 +01:00
DorianandClaude Opus 4.8 123dd321df feat: clean extensionless doc URLs + dev specs in simple-doc
- nginx: try_files adds $uri.html so /dev-doc, /simple-doc, /review-doc
  resolve to the flat .html files before the SPA fallback (prod).
- vite: dev-only middleware mirrors the same rewrite so the clean URLs
  work under `vite dev` too (no SPA-fallback / router warning).
- simple-doc: add hex values inline + a "Quick reference (for the
  developer)" swatch grid (full palette + category colours) and type/
  button/divider specs — kept layman. Cross-links now use /dev-doc.

dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 10:33:49 +01:00
DorianandClaude Opus 4.8 c24be1a015 docs: add served plain-language guide at /simple-doc.html
HTML render of STYLE-CHANGES-simple.md, styled to match dev-doc/review-doc
(brand hero, category swatches, crimson "waiting on you" section). Flat
file in public/ so it serves at /simple-doc.html in dev and prod. dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 10:20:08 +01:00
DorianandClaude Opus 4.8 d3ccc30715 fix: serve docs as flat /dev-doc.html + /review-doc.html
The directory form (public/dev-doc/index.html) only resolved at a clean
/dev-doc under nginx; in Vite dev the extensionless path hit the SPA
fallback (router "No match" warning). Flat files serve identically in
dev and prod at /dev-doc.html and /review-doc.html. dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 10:10:16 +01:00
DorianandClaude Opus 4.8 61a21f7101 docs(design): bring /design showcase up to date with the rebrand (§28)
Audited all 26 showcase sections and fixed every drift from the live
design system:
- Colors: add mint highlight, the four category colours, brand-float,
  cream-dark; rewrite description.
- Typography: cards now read Zeitung (was Fraunces/DM Sans); add the
  fluid headline scale (display/headline-lg/headline-md); rewrite copy.
- Hero: add the four category banner tones to the switcher + HeroPreview
  validator; description "three tones" → seven.
- Buttons: accent described as crimson (not warm-yellow); brand-green.
- Revitalization: noted in reserve / not on the live site.
- Sweep stale refs: tokens.css header, Stripe/Express checkout font
  (DM Sans → --font-sans stack), Fraunces/pine-green comments.

Docs: STYLE-CHANGES.md §28 + served HTML dev-doc. dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 08:39:55 +01:00
DorianandClaude Opus 4.8 bd4c68b240 chore: serve dev-doc + review-doc as static pages (/dev-doc, /review-doc)
Move the HTML dev-doc render to public/dev-doc/index.html and add the
brand-review status page at public/review-doc/index.html. nginx's
try_files $uri $uri/ serves them at /dev-doc and /review-doc ahead of the
SPA fallback; CSP already permits the inline styles. Unlisted (URL-only).
dist/ rebuilt so Portainer bakes them in.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 07:57:33 +01:00
DorianandClaude Opus 4.8 875e16ec8e feat: shop hero category buttons; remove Revitalization, Austria claim; recat Sport-Profi
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) <noreply@anthropic.com>
2026-06-24 07:54:52 +01:00
DorianandClaude Opus 4.8 2bb3de39e2 fix: powder banner shows powder, not bath (L7)
The cream second-fold banner reads "Ein Pulver, hundert Anwendungen" but
showed the Bad 500 g (bath) product and its CTA/link pointed there too.
Repoint the whole banner to powder — the 3.490 g bulk bucket (distinct
from the 250 g first-fold hero): image, add-to-cart product, learn-more
link, and alt text. No new asset needed.

Docs: STYLE-CHANGES.md §23 + simple guide. dist/ rebuilt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 15:06:21 +01:00
DorianandClaude Opus 4.8 689649dbe9 feat: wire up category-page footer links + remove membership entirely
Category pages (§21): link /kueche, /haushalt, /pflege from the footer
(/kueche was orphaned); align footer labels + page eyebrows to the shop's
section names (Küche/Reinigung/Pflege · Kitchen/Clean/Care). /waesche
deferred pending brand copy; route slugs unchanged.

Membership (§22, U2): no programme exists, so remove every trace. Drop
memberPrice from bundle data + BundleCard/Bundles/BundlePage/HomePage, the
joinCta prop/emit/buttons, and all member copy. Bundles are now single-price
(retail only); sub + benefits rewritten as bundle value. priceLabel → Preis/
Price. DS demos updated to match.

Docs: STYLE-CHANGES.md §21/§22; new plain-language STYLE-CHANGES-simple.md.
dist/ rebuilt for the Portainer/gitea deploy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 13:49:33 +01:00
DorianandClaude Opus 4.8 15c951c2a0 feat: shop 4-section category banners + brand-feedback pass
Shop page rebuilt into four brand colour-coded use-group sections (Küche/lime,
Reinigung/grapefruit, Wäsche/plum, Pflege/care/orange): colour banners with diagonal
dividers, per-section grid titles, crimson 'add to cart' + white-outline 'learn more'
CTAs, plain-name eyebrows, first-fold halved + thin white band. Split old Haushalt
group into clean+wash.

Also in this checkpoint (brand-owner feedback items):
- L11: Kaiser-Natron® on every visible mention, hyphenated (de+en, products, logo, nav)
- L4: product-hero headline reworded to the brand versatility voice
- L5/L6: faint 'AI Edited' badge on AI bundle images (data-driven aiEdited flag)
- L10: Revitalization animation row + early-access CTA removed
- U2: membership 'become a member' button removed
- New category tokens (cat-kitchen/clean/wash/care) + Hero/WaveDivider tones
- New /kueche category page (route + copy) — not yet linked (see STYLE-CHANGES caveat)
- Homepage reverted to original ProductTeaser (banners belong on /shop)

dist/ rebuilt and included for the Portainer/gitea deploy. Open decisions tracked
in STYLE-CHANGES.md §20 and memory.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 12:35:52 +01:00
DorianandClaude Opus 4.8 ad6aa7f7b0 assets: recolour 250 g Großpackung box to the brand green
Replace the 250 g powder box product shot with a render carrying the correct
vivid brand green (matching the 50 g sachet); red band and 3-D side panels
intact. 939×1200 transparent WebP, updated in public/ and dist/. Document the
change and product-image conventions in STYLE-CHANGES.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:55:58 +01:00
DorianandClaude Opus 4.8 130bf1e3af feat: rebuild brand-hero intro with official Hebe + waterfall artwork
Replace the hand-traced figures in the home-page intro animation with the
official Kaiser-Natron brand vectors (Ikone "Hebe" + Waterfall), rendered as
flat mint silhouettes (dark print outline dropped) on the brand-green hero.
Lady at the origin holding the white natron; waterfall half-scale, vertically
centred to her right. Same entrance choreography/timing as before. Source SVGs
in src/assets/brand/, path data in heroFigures.js.

Drops the ~570KB traced splashPaths.js import from the home page (HomePage
chunk ~214KB -> ~70KB).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:20:47 +01:00
DorianandClaude Opus 4.8 856bae8ca9 style: diagonal divider on Kaiserhacks green header, white search prices
Add WaveDivider (brand→surface) between the Kaiserhacks green header and body.
Make search-overlay price labels white on the brand-green tone. Rebuild dist
and update STYLE-CHANGES.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:50:15 +01:00
DorianandClaude Opus 4.8 5bf3f1ed4b style: crimson CTA accents, white surfaces, Zeitung font, diagonal dividers
Apply brand restyle across design-system components (buttons, hero, navbar,
about, cards, cart, footer) and shop page; update tokens. Rebuild dist and
add STYLE-CHANGES.md change log.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:27:55 +01:00
DorianandClaude Opus 4.8 ab0f7da50d feat: crimson CTA accents, white surfaces, Zeitung font, diagonal dividers
- Add --color-accent-fill (#cc0230) / -hover / -ink tokens; repoint all
  solid yellow "button" surfaces (Button accent, IconButton accent,
  language-selector active pill, Navbar cart CTA, Kaiserhacks chip,
  accent Badge) to crimson fill + white ink. Yellow --color-accent kept
  for functional text accents.
- Secondary button: transparent fill, white border, white text/icons,
  translucent-white hover (no longer mimics the primary default).
- Surfaces to pure white: --color-cream and --color-surface -> #ffffff
  (cream-toned logo follows via text-cream); theme-color -> #ffffff.
- Self-host Zeitung (Regular/Bold woff2, mirrored from production);
  point --font-sans/--font-serif at Zeitung; drop Google Fonts CDN.
- Remove yellow highlighting on hero/title emphasis and hero eyebrows
  (text-accent-soft -> text-cream, eyebrows -> text-cream/75).
- WaveDivider + homepage section dividers: straight diagonal (low-left,
  high-right) at double height for ~2x the right-to-left difference.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:47:06 +01:00
Dorian 47ebd1ce6c Polish Kaiserhacks modals 2026-05-26 13:34:48 -05:00
Dorian 21c62e5ba3 Add local Kaiserhacks media 2026-05-26 13:26:36 -05:00
Dorian 2677daf05d Fix Kaiserhacks links and card actions 2026-05-26 13:13:25 -05:00
Dorian c837dfdad7 Add Kaiserhacks page 2026-05-19 20:58:07 -05:00
DorianandClaude Opus 4.7 c431a0066f brand hero: mound-finger slides in with the woman silhouette
The hand-fragment layer was popping in immediately while the rest
of the figure animated, looking detached. Slides in from the left
on the same timing curve as left-m (translateX -14% → 0, 800ms /
150ms delay) so the finger reads as part of her grip arriving with
her arm. Reduced-motion users still get the final state instantly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:43:05 +01:00
DorianandClaude Opus 4.7 a369e5e532 brand hero: render the mound's hand fragment in mint, not white
The dPortMound trace shipped two subpaths — the main natron handful
and a small finger-shaped subpath sitting at its base. The previous
fix dropped the second subpath because it bled white past the
woman's grip. Restoring it as a separate `dPortMoundFinger` export
and rendering it as a `mound-finger` layer in the mint hand colour
(#b5d8b6) so it reads as part of her hand instead of a stray white
spur. Painted between the white mound and the woman silhouette so
it sits on top of the mound but under the rest of her features.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:33:23 +01:00
DorianandClaude Opus 4.7 4abcd0d5ed splash paths: drop the stray subpath at the bottom of the mound
dPortMound traced out as two subpaths — the main natron handful at
y≈1115-1240 and a smaller 24-point blob at y≈1234-1274 sitting just
below it. The second subpath rendered as a white "finger" extending
past the woman's grip on the BrandHero (and on the splash entrance
that this artwork shipped with). Stripping it leaves the main
handful intact and removes the bleed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:29:19 +01:00
DorianandClaude Opus 4.7 5eafaecaf4 brand hero: woman path uses nonzero fill so finger holes fill in
Reordering layers didn't fix the white finger because the bleeding
area is a HOLE in the woman silhouette (evenodd cuts it out), not
geometry the mound is overrunning. With nonzero, even-odd subpath
holes fill in (assuming consistent winding), so the finger reads
mint and the mound only shows where the woman path doesn't cover.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:28:04 +01:00
DorianandClaude Opus 4.7 b62f213a11 brand hero: paint woman silhouette ABOVE the white mound
The traced mound path extends slightly past the woman's grip
outline; with mound-m on top (the splash entrance order) one finger
bled white where the mound overlapped it. Reordering so the woman
silhouette renders LAST on both viewports — fingers read mint where
they wrap the natron handful, mound stays visible between them
(those gaps are inside the woman path's evenodd fill, so they pass
through to the layer below).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:24:30 +01:00
DorianandClaude Opus 4.7 87f53ccc9d home: teaser cards switch to cream tone + yellow CTAs; first bundle image v2
· Homepage 3-product teaser now uses tone="cream" (white image area
  + cream card body) instead of the brand-green media wash, and the
  add-to-cart buttons render as the yellow accent variant for visual
  emphasis on the brand-green section above.
· First bundle's hero image swapped to /bundles/background/haushalt-bundle-2.webp
  per fresh asset.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:46:23 +01:00
DorianandClaude Opus 4.7 030ae3ae1c bundles: rename haushalts-bundle.webp → haushalt-bundle.webp
Two prior commits tried to fix a case-sensitivity ghost on the
deployed nginx (Haushalts-Bundle.webp vs haushalts-bundle.webp) by
forcing git to record the rename, but the asset still 404'd after
the Portainer redeploy. Sidestepping the case-history entirely by
shipping a fresh filename — `haushalt-bundle.webp` (singular). New
file, no name collision in any tree, code reference updated to
match.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:30:38 +01:00
DorianandClaude Opus 4.7 589603c509 dist: lowercase the bundle asset filenames in git
Previous commit fixed public/ but the Dockerfile copies dist/ into
nginx, and git was still tracking dist/bundles/{background,transparent}/
Haushalts-Bundle.webp + Vorrats-Bundle.webp under their CamelCase
names. Portainer's redeploy was therefore serving the same
case-mismatched files. Same git mv-to-temp-then-back trick on dist/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:26:37 +01:00
DorianandClaude Opus 4.7 f92e4c69a3 bundles: rename CamelCase asset filenames to lowercase in git
git was tracking Haushalts-Bundle.webp / Vorrats-Bundle.webp in both
public/bundles/{background,transparent}/ even though the on-disk
files had been renamed to lowercase (haushalts-bundle.webp etc.).
macOS's case-insensitive APFS hid the discrepancy locally, but the
deployed case-sensitive Linux filesystem 404'd the lowercase URL,
leaving the Haushalts-Bundle card with a broken image icon.

Forced the rename through git via a two-step mv-to-temp-then-back
so the index records the case change. Vorrats-Bundle.webp came
along for the ride even though no SKU references it yet — keeps the
asset directory consistent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:22:28 +01:00
DorianandClaude Opus 4.7 5d17773982 product card: restore original cream tone (cream body, paper media)
The cream tone was flipped to paper body / cream media earlier so the
homepage 3-product teaser could share its cream section ground. That
broke the shop catalogue: cards on cream sections lost their image
contrast and blended into the alternating cream / surface bands.

Cream tone now back to its original mapping (cream body, paper media)
— catalogue cards pop on every section. The new `brand` tone (paper
body, brand-green media) stays exclusive to the homepage teaser, which
is the only surface that asked for green-washed media.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:16:42 +01:00
DorianandClaude Opus 4.7 12c671a1a0 shop: revert product card tone back to cream
The brand-green media wash was only meant for the homepage's
3-product teaser, not the full shop catalogue. Reverts ShopPage's
ProductCard tone from `brand` → `cream` so shop cards keep the
cream image area / paper body that the rest of the catalogue uses.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:13:12 +01:00
DorianandClaude Opus 4.7 0c9a0ccd95 bundles: locale-aware copy via i18n keys
Bundle data was carrying localized strings (name, usage, items,
description, imageAlt, badge) directly, so EN visitors saw German
copy on the bundle page and home grid. Strings are now keyed under
bundle.<id>.<field> in the i18n catalogue (DE + EN); src/api/bundles.js
keeps only structural data + i18n key references.

HomePage builds a localizedBundles computed that resolves the keys
through t() before passing to the Bundles design-system component,
so the existing component stays agnostic of i18n. BundlePage exposes
a `bundleCopy` computed for the same reason, and resolvedItems now
maps over `itemKeys` instead of static labels.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:02:46 +01:00
DorianandClaude Opus 4.7 6864b1d1b3 bundle page: actually use the split desktop layout
The previous "split" commit shipped the background-banner version
under a misleading message. Desktop now genuinely renders as a
1.4fr / 1fr grid: wide 16:9 image on the LEFT, copy + items + price
+ qty + add-to-cart on the RIGHT. Back button stays in its row
above the hero on every viewport — no overlay, no full-bleed
background, no gradient sidebar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:56:34 +01:00
DorianandClaude Opus 4.7 34dcec28fa bundle page: split desktop layout (wide image left, copy right)
Reverts the full-bleed background-banner desktop hero. Desktop uses
a 1.4fr / 1fr grid: image column gets the heavier ratio so the 16:9
landscape source has room for its full composition; copy + items +
purchase cluster sits in the right column. Back button stays in its
own row above the hero on every viewport — no overlay.

BundleCard now uses RouterLink for internal hrefs (was rendering a
plain <a>, which triggered a hard navigation and lost vue-router's
saved scroll position when the user hit back from a bundle page).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:52:49 +01:00
DorianandClaude Opus 4.7 6c0002ad93 bundle page: back button overlays hero on desktop, sharper gradient
Desktop: back button moves out of its dedicated row (which wasted a
strip of brand-green above the image) into an absolute overlay at
the top-left of the max-width column, so the hero artwork starts at
the very top of the fold. Mobile keeps the in-flow row since there's
no overlay surface there.

Gradient stops: from-25% / via-brand/90 via-65% / to-brand to-80%
— image stays clean for the first quarter, then ramps quickly to
opaque brand-green by the two-thirds mark, leaving the right edge
fully solid for the cream-on-green copy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:45:47 +01:00
DorianandClaude Opus 4.7 eb291b5d47 bundle page: desktop hero uses bundle image as full-bleed background
Desktop (lg+) now renders the bundle artwork as the hero background
with a brand-green left → right gradient over the right ~50% so the
cream copy stays legible. All purchase actions (name, description,
items, price, qty, add-to-cart) overlay on the right column,
vertically centred in the fold. The mobile / tablet treatment keeps
the natural-aspect banner + stacked content underneath since the
single-column scroll is the right pattern at thumb-zone widths.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:40:58 +01:00
DorianandClaude Opus 4.7 0a7879688f bundle page: full-width landscape banner + 2-col copy below
Source bundle art is ~16:9 (1200×670); the previous aspect-square
crop dropped roughly half the picture. Banner now spans the full
container at the image's natural aspect on mobile and caps at 55svh
on desktop so the landscape composition reads in full.

Below the banner: description on the left and the items / price /
qty / add-to-cart cluster on the right (lg+), or stacked on mobile.
Buy actions stay aligned to the same scan column on every viewport.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:38:07 +01:00
DorianandClaude Opus 4.7 fe28c47c7c bundles: dedicated /bundles/<slug> pages, full-bleed background art
Bundle data extracted to src/api/bundles.js (single source of truth
shared by HomePage's grid and the new BundlePage). Each card on the
home grid now links to the bundle's detail route.

BundleCard's `imageFit` default flipped to `cover` to match the new
/bundles/background/* artwork — full-bleed lifestyle scenes instead
of padded product line-ups. The `contain` mode stays available for
future bundles whose art needs breathing room.

BundlePage layout: split brand-green hero with the bundle artwork
on the left, name + items list (linking to component product pages
where matched) + pricing + qty + add-to-cart on the right. Mirrors
ProductPage chrome (Navbar, dynamic back button, CartDrawer) so the
detail-page experience reads as one piece across SKUs and bundles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:22:25 +01:00
DorianandClaude Opus 4.7 7c83394b0c navbar: collapse to mobile menu at 1100 px (was 768 px)
Bumps the desktop/mobile split from Tailwind's md (768 px) to a
custom min-[1100px] threshold so tablets and small laptops get the
mobile chrome (menu button + bottom-right floating cluster) instead
of an over-cramped desktop nav. Bottom-clearance spacers on Home and
Shop track the same threshold so they don't disappear before the
floating cluster does.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 09:55:49 +01:00
DorianandClaude Opus 4.7 97bda17c3d brand hero: render i18n calls reactively
Hero copy was reading translations via const = t('key') in setup,
which captures the string at first paint and never updates when the
user switches locale. Calls now happen inline in the template so
Vue's reactivity system tracks state.locale access during render and
re-runs the binding when DE/AT/EN flips.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 09:52:25 +01:00
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 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 9177c7948b image improvements 2026-04-23 17:55:19 +01:00
Dorian cf446a0537 hero image name fix 2026-04-23 16:41:14 +01:00
Dorian 4699c0850c hero image name fix 2026-04-23 16:39:36 +01:00
Dorian 37b3f2ac72 hero image name fix 2026-04-23 16:37:33 +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 436998656b shortern splash intro 2026-04-23 13:43:14 +01:00
Dorian 32d6807def added bundle revit and about 2026-04-23 13:24:29 +01:00
DorianandClaude Opus 4.7 ea7d9b04cc docs: correct backend stack to PHP/MySQL and document checkout/orders/customers
Swap lingering "Python/MySQL" wording for "PHP / MySQL" across the
README, `src/api/` seam, the Pinia cart store, and the cart contract
doc. Add endpoint specs for checkout (Stripe handoff + webhook),
orders, and customers so the full plug-in surface is documented in
the same style as cart.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-23 10:48:11 +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
DorianandClaude Opus 4.7 e777ec9076 revert: restore original hero product cutout
Reverts 9f7753f + 4619ec9 — keep the original 922 kB PNG.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 09:54:09 +01:00
Dorian f3e4be64c5 original product image 2026-04-22 09:51:40 +01:00
DorianandClaude Opus 4.7 4619ec95f9 build: sync dist with compressed hero cutout
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 09:47:19 +01:00
DorianandClaude Opus 4.7 9f7753f8ef chore(assets): compress hero product cutout (922k -> 99k)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 09:46:55 +01:00
DorianandClaude Opus 4.7 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
DorianandClaude Opus 4.7 3a9d0943e2 chore: use kaiser-natron.de favicon
Pulled from the live site
(typo3conf/ext/gmsite_kaiser/Resources/Public/Images/favicon.png).
Replaces the placeholder K-on-brand SVG.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 09:44:58 +01:00
DorianandClaude Opus 4.7 a0c37f17cc refactor(tokens): derive brand-green family from --color-brand via color-mix
Set --color-brand to #006548 and cascade every green-tinted token
(hover/soft/float, ink, muted, line, washes, accent-ink, success,
shadows) off it through color-mix(). Retuning the brand is now a
single-variable change.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 09:44:44 +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
DorianandClaude Opus 4.7 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