Commit graph

8 commits

Author SHA1 Message Date
Maaxxs
eba15ef52b Make light wheel scrolls on the tile row commit to the next card
Client feedback: a light/small scroll snapped back to the current card
instead of advancing - native scroll-snap always settles on whichever
card is nearest, and a light nudge rarely crosses the halfway point.

Each wheel burst now tracks its starting card index and net deltaY.
On settle, if the nearest card by position is still the start card but
there was clear directional movement (>4px net), the row advances one
card in that direction instead of springing back - so even a light
wheel tick pages forward. Larger scrolls are unaffected: if the actual
scroll position already lands closer to a farther card, it jumps
straight there (no artificial one-card-per-burst cap), and a burst that
nets out near zero (e.g. wiggling back and forth) correctly stays put.
The settle target is computed the same way the old drag-to-scroll
feature centered cards, and re-enables scroll-snap only after the
settling scrollTo animation would have finished, so it doesn't fight
the smooth scroll.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 22:30:16 +02:00
Maaxxs
eb59e9c1c9 Add mouse-wheel scrolling to the package tile row
Client feedback: after removing mouse-drag on the coverflow (it fought
the 3D transform), the thin scrollbar underneath was the only desktop
way to browse tiles - too fiddly.

Hovering the tile row and scrolling the wheel now moves the row
horizontally, fluid/1:1 with the wheel delta rather than snapping one
card per tick, with scroll-snap briefly suspended during the burst and
re-enabled ~150ms after the last tick so cards settle into place
afterward - the same pattern already used for the old drag interaction.

At the first card, scrolling further "up" is left alone (no
preventDefault): the event falls through to native behavior, which is
already exactly how the page scrolls today when hovering the row, so
the page scrolls up instead. Same at the last card scrolling "down" -
the page takes over. Horizontal wheel/trackpad sideswipe (deltaX) is
untouched, since the container already handles that natively. Applies
uniformly to both strip and coverflow (same scrollerRef container); the
scrollbar stays as-is.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 21:24:28 +02:00
Maaxxs
79fc5f2f76 Match the contact section to the prototype: Barlow, map crop, card title
Side-by-side with the prototype revealed the section never set its font
family - everything except the Michroma headings fell back to the system
font, which was the biggest visual mismatch (labels, subtitle, feature
bar). The section root now sets Barlow like the handoff specifies; the
subtitle even wraps identically to the prototype again.

The maps iframe crop is rebalanced (290px shifted -60px inside the 210px
window) so the map runs flush to the "Route planen" bar with Google's
bottom attribution cut at the card edge like the prototype, instead of
showing the full attribution line with a gap. The contact card is titled
"HiFi Planet Amorbach" per the design (was "HifiPlanet Amorbach").

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 07:29:26 +02:00
Maaxxs
fa9e8fd1fc Use the handoff's baked background images for the contact section
Third iteration on this backdrop: composing the layers natively (photo,
scrim, masks, streak stack, topo lines, grunge/splatter/arc) kept
drifting from the intended look, so the handoff now ships each theme's
background as a single pre-composed 2560x1440 image. All hand-built
layers are deleted; the section carries exactly one background-image
via .kontakt-sektion (cover/center), swapped for dark mode through the
existing .dark class. Obsolete layer assets are removed, the unused
imports with them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 07:24:59 +02:00
Maaxxs
7fb4576dc1 Stop stretching the contact page's light-mode car photo
The 310x512 car-light.png was scaled to the full section height via
background-size: cover, which blew it up far past its natural
resolution. It is now a plain <img> (.kontakt-bg-foto in index.css):
natural aspect ratio, width capped at clamp(280px, 24vw, 460px),
anchored bottom-left, opacity .9, and a dual mask (fade right + fade
top, mask-composite: intersect) so it dissolves into the page gradient
with no hard edges. The old scrim overlay is gone - the masks do that
job now.

The green light-streak group on the right is widened to the README's
42% at full section height (was 26%), line opacity .85 and radial glow
blur 20px per spec. Topo lines were already in place.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 07:16:43 +02:00
Maaxxs
999f7c471b Close two gaps against the contact form handoff spec
The redesign itself shipped earlier (78d3d4a, 3079bd2); comparing the
implementation against the README again surfaced two missing details:

- The light-mode backdrop's subtle topo wave lines (five 1px curved
  paths in --kf-topo, top-left, ~360x280) were never implemented.
- The Google Maps embed showed Google's own info overlay in the top-left
  corner behind our "In Maps öffnen" chip. The iframe is now rendered
  taller inside a clipped 210px container with a negative top margin,
  cropping that overlay away while keeping the marker and the required
  bottom attribution visible.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 07:10:16 +02:00
Maaxxs
fa862d936a Rename the "Elite R" package tier to "Elite"
Client wants the tier called just "Elite". Only the admin checkbox list
(PACKAGE_TIERS) carries tier names; public card theming is price-rank
based, so nothing else changes. An already-created "Elite R" package
would show up under "Weitere Pakete (alte Namen)" in the editor and can
be deleted and recreated as Elite there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 07:03:27 +02:00
Maaxxs
96aa799d43 Consolidate the site onto a single branch: main now carries the build output
The client's hosting (All-Inkl) has no GitHub integration, so the
two-branch model - source on main, CI force-pushing the built hifi/
folder to a machine-generated deploy branch for Plesk to pull - doesn't
work there. main is now simultaneously the source of truth and the
deployable artifact:

- hifi/index.html, hifi/assets/, favicon, robots.txt and hifi/api/vendor
  are committed instead of git-ignored. Secrets (db.php, setup.php,
  ga-service-account.json) stay ignored as before.
- A prebuild script wipes hifi/assets + index.html before every vite
  build, so the tree always holds exactly the current build - this was
  the stale-hash-chunk problem that originally justified ignoring the
  output (emptyOutDir stays false to protect hifi/api). Builds are
  deterministic: rebuilding without source changes yields zero diffs.
- .github/workflows/build-deploy.yml is deleted; nothing writes to the
  deploy branch anymore. The convention is to run npm run build before
  committing (DEPLOY.md documents the workflow, the All-Inkl setup via
  SSH clone/pull with docroot on <checkout>/hifi, and the Plesk test
  server switch from deploy to main).

The remote deploy branch is left in place for now so the Plesk test
server keeps working until its Git source is switched to main; it can
be deleted afterwards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 06:59:33 +02:00