Redesign im Stil von crispmtl.com: minimalistisch, Foto-Hero, weniger CTAs

- Hell mit feinen Rasterlinien, breite Versal-Headlines (Archivo Expanded),
  kleine Serifen-Labels, eckige Buttons mit Füll-/Text-Roll-Hover
- Hero: Foto aus dem Salon statt animiertem Hintergrund, eine Headline,
  ein Button; "Termin buchen" oben rechts nur noch als Textlink
- Chrom-Wortmarke, Seidenhintergrund, Laufband, Kreis-Badge, großer
  Schluss-CTA und mobile Buchungsleiste entfernt; deutlich weniger Text
- Neue interaktive Elemente: Menü-Overlay mit Bildwechsel pro Link,
  Team als Namensliste mit Porträt-Wisch-Übergang, Preise als Akkordeon
  mit Team-Thumbnails, Footer mit Fotoraster zwischen den Wörtern
- Bilder aus den echten Salon-Fotos (Logo-Wand), neues Favicon/OG-Bild

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KBHsCnWNXAB2Le3gAEsivF
This commit is contained in:
Claude committed 2026-09-29 12:41:03 +00:00
1 parent f21d79c08d
commit c25a3f9381
49 files changed
+815 -1494

No files matched your search

+18 -18
View File
@@ -1,44 +1,44 @@
import Lenis from 'lenis'
import { MotionConfig } from 'motion/react'
import { useEffect } from 'react'
import { FinalCta } from './components/FinalCta'
import { Footer } from './components/Footer'
import { GridLines } from './components/GridLines'
import { Hero } from './components/Hero'
import { Marquee } from './components/Marquee'
import { MobileBookBar } from './components/MobileBookBar'
import { Intro } from './components/Intro'
import { Nav } from './components/Nav'
import { Services } from './components/Services'
import { Team } from './components/Team'
import { Visit } from './components/Visit'
import { Prices } from './components/Prices'
import { TeamList } from './components/TeamList'
import { setLenis } from './lib/scroll'
export default function App() {
// Weiches Scrollen (Lenis) — nur, wenn keine reduzierte Bewegung gewünscht ist
useEffect(() => {
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return
const lenis = new Lenis({ autoRaf: true, anchors: true })
return () => lenis.destroy()
setLenis(lenis)
return () => {
setLenis(null)
lenis.destroy()
}
}, [])
return (
<MotionConfig reducedMotion="user">
<a
href="#leistungen"
className="sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:rounded-full focus:bg-bone focus:px-4 focus:py-2 focus:text-ink"
href="#preise"
className="sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-1/2 focus:z-[100] focus:-translate-x-1/2 focus:bg-ink focus:px-4 focus:py-2 focus:text-paper"
>
Zum Inhalt springen
Zu den Preisen springen
</a>
<Nav />
<main>
<main className="relative isolate">
<GridLines />
<Hero />
<Marquee />
<Services />
<Team />
<Visit />
<FinalCta />
<Intro />
<TeamList />
<Prices />
</main>
<Footer />
<MobileBookBar />
<div aria-hidden="true" className="grain pointer-events-none fixed inset-0 z-[70]" />
</MotionConfig>
)
}