VK Friseur Demo-Website (Astro) – initial
This commit is contained in:
Vendored
+1
@@ -0,0 +1 @@
|
||||
/// <reference path="../.astro/types.d.ts" />
|
||||
@@ -0,0 +1,407 @@
|
||||
---
|
||||
import "../styles/global.css";
|
||||
|
||||
const services = [
|
||||
{ ico: "✂️", h: "Damenhaarschnitt", p: "Beratung, Waschen, Schnitt & Styling – abgestimmt auf Haar und Typ.", tag: "Schnitt & Styling" },
|
||||
{ ico: "🧔", h: "Herren & Barbershop", p: "Klassischer Schnitt, Bartpflege, Konturen und heiße Rasur.", tag: "Barbershop" },
|
||||
{ ico: "🧒", h: "Kinder", p: "Geduldig, schnell und mit einem Lächeln – der erste Salonbesuch wird schön.", tag: "Familienfreundlich" },
|
||||
{ ico: "🎨", h: "Balayage & Farbe", p: "Sanfte Übergänge, Foliensträhnen, Glossing – mit Redken & Paul Mitchell.", tag: "Coloration" },
|
||||
{ ico: "💍", h: "Braut & Event", p: "Probetermin, Hochsteckfrisuren und Styling für euren großen Tag.", tag: "Hochzeitsservice" },
|
||||
];
|
||||
|
||||
const team = [
|
||||
{ n: "Veronika Sprangel", r: "Inhaberin & Friseurmeisterin", i: "VS" },
|
||||
{ n: "Iris Winterstein", r: "Stylistin", i: "IW" },
|
||||
{ n: "Christin Gottschlich", r: "Stylistin", i: "CG" },
|
||||
{ n: "Marco Gollnast-Heise", r: "Barber & Stylist", i: "MG" },
|
||||
{ n: "Tina Sahling", r: "Stylistin", i: "TS" },
|
||||
{ n: "Ella Schizipin", r: "Stylistin", i: "ES" },
|
||||
{ n: "Fabian Gidom", r: "Auszubildender", i: "FG" },
|
||||
{ n: "Dennis Sprangel", r: "Organisation", i: "DS" },
|
||||
];
|
||||
|
||||
const hours = [
|
||||
{ d: "Montag", t: "Geschlossen", closed: true },
|
||||
{ d: "Dienstag", t: "09:00 – 18:00" },
|
||||
{ d: "Mittwoch", t: "09:00 – 20:00" },
|
||||
{ d: "Donnerstag", t: "09:00 – 18:00" },
|
||||
{ d: "Freitag", t: "09:00 – 20:00" },
|
||||
{ d: "Samstag", t: "09:00 – 14:00" },
|
||||
];
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Friseur-Team VK · Veronika Sprangel · Friseur in Tostedt</title>
|
||||
<meta name="description" content="Friseur-Team VK in Tostedt – euer Salon für Schnitt, Farbe, Balayage, Barbershop, Braut & Haarverlängerung. Online Termin buchen, rund um die Uhr." />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,500&family=Public+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="nav" id="nav">
|
||||
<div class="wrap nav-inner">
|
||||
<a href="#top" class="logo">Friseur-Team <b>VK</b></a>
|
||||
<nav class="nav-links">
|
||||
<a href="#leistungen">Leistungen</a>
|
||||
<a href="#team">Team</a>
|
||||
<a href="#galerie">Galerie</a>
|
||||
<a href="#preise">Preise</a>
|
||||
<a href="#kontakt">Kontakt</a>
|
||||
</nav>
|
||||
<div class="nav-cta">
|
||||
<a href="#buchen" class="btn btn-primary">Termin buchen</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- HERO -->
|
||||
<section class="hero" id="top">
|
||||
<div class="hero-bg"><img src="/img/hero.webp" alt="Friseur-Team VK Salon in Tostedt" fetchpriority="high" /></div>
|
||||
<div class="wrap hero-inner">
|
||||
<span class="eyebrow">Friseur in Tostedt · seit 2017</span>
|
||||
<h1>Mehr als ein Haarschnitt. <em>Euer Salon</em> in Tostedt.</h1>
|
||||
<p class="lead">Großes Meisterteam, Premium-Produkte und ein helles Wohlfühl-Ambiente in der Kastanienallee. Von Balayage bis Braut – wir kümmern uns um euren Look.</p>
|
||||
<div class="hero-actions">
|
||||
<a href="#buchen" class="btn btn-accent">Termin buchen →</a>
|
||||
<a href="#leistungen" class="btn btn-ghost" style="color:#fff;border-color:rgba(255,255,255,.4)">Leistungen ansehen</a>
|
||||
</div>
|
||||
<div class="hero-trust">
|
||||
<span>● 8-köpfiges Meisterteam</span>
|
||||
<span>● Redken & Paul Mitchell</span>
|
||||
<span>● Damen · Herren · Kinder</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TRUST STRIP -->
|
||||
<div class="strip">
|
||||
<div class="wrap strip-inner">
|
||||
<div><span class="num">2017</span><span class="lbl">seit</span></div>
|
||||
<div><span class="num">8</span><span class="lbl">Profis im Team</span></div>
|
||||
<div><span class="num">2</span><span class="lbl">Premium-Marken</span></div>
|
||||
<div><span class="num">24/7</span><span class="lbl">online buchbar</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- LEISTUNGEN -->
|
||||
<section id="leistungen">
|
||||
<div class="wrap">
|
||||
<div class="sec-head reveal">
|
||||
<span class="eyebrow">Leistungen</span>
|
||||
<h2>Alles rund um euer Haar – aus einer Hand.</h2>
|
||||
<p>Vom schnellen Schnitt bis zum großen Auftritt. Unser Team berät euch ehrlich und findet den Look, der zu euch passt.</p>
|
||||
</div>
|
||||
<div class="bento">
|
||||
<div class="card-svc feature reveal">
|
||||
<div>
|
||||
<div class="ico">💆♀️</div>
|
||||
<h3>Haarverlängerung & Haarverdichtung</h3>
|
||||
<p>Unser Premium-Segment: mehr Länge, mehr Fülle, natürlich schön. Mit ausführlicher Beratung und hochwertigen Echthaar-Tressen.</p>
|
||||
</div>
|
||||
<span class="tag">Spezialität des Hauses →</span>
|
||||
</div>
|
||||
{services.map((s) => (
|
||||
<div class="card-svc reveal">
|
||||
<div class="ico">{s.ico}</div>
|
||||
<h3>{s.h}</h3>
|
||||
<p>{s.p}</p>
|
||||
<span class="tag">{s.tag}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- GALERIE -->
|
||||
<section id="galerie" style="background:var(--cream-2)">
|
||||
<div class="wrap">
|
||||
<div class="sec-head center reveal">
|
||||
<span class="eyebrow">Galerie</span>
|
||||
<h2>Ergebnisse, die für sich sprechen.</h2>
|
||||
<p>Ein Einblick in Salon und Handwerk. Bald hier: euer eigenes Foto-Shooting.</p>
|
||||
</div>
|
||||
<div class="gallery reveal">
|
||||
<figure class="big"><img src="/img/salon.webp" alt="Salon-Ambiente" loading="lazy" /></figure>
|
||||
<figure><img src="/img/g1.webp" alt="Coloration" loading="lazy" /></figure>
|
||||
<figure class="tall"><img src="/img/g2.webp" alt="Styling" loading="lazy" /></figure>
|
||||
<figure><img src="/img/g3.webp" alt="Schnitt" loading="lazy" /></figure>
|
||||
<figure><img src="/img/g4.webp" alt="Im Salon" loading="lazy" /></figure>
|
||||
<figure><img src="/img/g5.webp" alt="Detail" loading="lazy" /></figure>
|
||||
</div>
|
||||
<div class="insta-cta reveal">
|
||||
<a href="https://www.instagram.com/friseur.team_vk/" target="_blank" rel="noopener" class="btn btn-ghost">📸 Folgt uns @friseur.team_vk</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TEAM -->
|
||||
<section id="team">
|
||||
<div class="wrap">
|
||||
<div class="sec-head reveal">
|
||||
<span class="eyebrow">Das Team</span>
|
||||
<h2>8 Profis. Eine Leidenschaft.</h2>
|
||||
<p>Das größte Friseurteam in Tostedt – von der Meisterin bis zum Azubi. <span class="demo-flag">Demo · echte Mitarbeiterfotos folgen</span></p>
|
||||
</div>
|
||||
<div class="team-grid">
|
||||
{team.map((m) => (
|
||||
<div class="member reveal">
|
||||
<div class="avatar"><span class="ini">{m.i}</span><span class="ph">Foto folgt</span></div>
|
||||
<div class="mname">{m.n}</div>
|
||||
<div class="mrole">{m.r}</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- WALLET / STEMPELKARTE -->
|
||||
<section class="wallet-sec" id="treue">
|
||||
<div class="wrap wallet-layout">
|
||||
<div class="reveal">
|
||||
<span class="eyebrow">Treuekarte – digital</span>
|
||||
<h2 style="font-size:clamp(2rem,4vw,3rem);margin:.8rem 0 1rem">Die Stempelkarte, die man nie vergisst.</h2>
|
||||
<p style="color:var(--soft);margin-bottom:1rem">Eure Papier-Stempelkarte – jetzt direkt auf dem Handy. Ein Klick, und die Karte liegt in Apple Wallet oder Google Wallet. Kein Verlieren, kein Suchen. Beim Bezahlen einfach zeigen, wir stempeln digital.</p>
|
||||
<p style="color:var(--soft)">Optional mit Push-Nachricht, sobald die Karte voll ist – ein sanfter Grund, wiederzukommen.</p>
|
||||
<div class="wallet-btns">
|
||||
<button class="wallet-btn" data-wallet> Zu Apple Wallet</button>
|
||||
<button class="wallet-btn g" data-wallet>Zu Google Wallet</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="reveal">
|
||||
<div class="pass">
|
||||
<div class="pass-top">
|
||||
<span class="pass-brand">Friseur-Team <b>VK</b></span>
|
||||
<span class="pass-chip">Treuekarte</span>
|
||||
</div>
|
||||
<span class="pass-label">Deine Stempel</span>
|
||||
<div class="pass-reward">Jeder 10. Schnitt – Pflege gratis 🎁</div>
|
||||
<div class="stamps">
|
||||
<div class="stamp on">✂️</div><div class="stamp on">✂️</div><div class="stamp on">✂️</div><div class="stamp on">✂️</div><div class="stamp on">✂️</div>
|
||||
<div class="stamp on">✂️</div><div class="stamp on">✂️</div><div class="stamp">✂️</div><div class="stamp">✂️</div><div class="stamp">🎁</div>
|
||||
</div>
|
||||
<div class="pass-foot"><span>7 / 10 Stempel</span><span>Kastanienallee 1, Tostedt</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- BUCHEN -->
|
||||
<section class="book-sec" id="buchen">
|
||||
<div class="wrap">
|
||||
<div class="sec-head center reveal">
|
||||
<span class="eyebrow" style="color:var(--terracotta)">Online buchen</span>
|
||||
<h2>Termin buchen – rund um die Uhr.</h2>
|
||||
<p>In drei Schritten zum Wunschtermin. Eure Anfrage landet direkt bei euch im Salon – ihr bestätigt wie gewohnt, die Erinnerung läuft automatisch.</p>
|
||||
</div>
|
||||
<div class="booker reveal">
|
||||
<div class="steps-nav">
|
||||
<div class="step-dot active" data-dot="0"></div>
|
||||
<div class="step-dot" data-dot="1"></div>
|
||||
<div class="step-dot" data-dot="2"></div>
|
||||
</div>
|
||||
|
||||
<div class="step active" data-step="0">
|
||||
<h3>1 · Leistung wählen</h3>
|
||||
<div class="opt-grid">
|
||||
<div class="opt" data-pick="svc" data-val="Damenschnitt"><span class="o-name">Damenschnitt</span><span class="o-meta">ca. 60 Min</span></div>
|
||||
<div class="opt" data-pick="svc" data-val="Herren / Barber"><span class="o-name">Herren / Barber</span><span class="o-meta">ca. 40 Min</span></div>
|
||||
<div class="opt" data-pick="svc" data-val="Balayage & Farbe"><span class="o-name">Balayage & Farbe</span><span class="o-meta">ca. 150 Min</span></div>
|
||||
<div class="opt" data-pick="svc" data-val="Beratung Verlängerung"><span class="o-name">Beratung Verlängerung</span><span class="o-meta">ca. 30 Min</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="1">
|
||||
<h3>2 · Termin wählen</h3>
|
||||
<p style="color:rgba(255,255,255,.6);font-size:.85rem;margin-bottom:1rem">Freie Zeiten · Mittwoch</p>
|
||||
<div class="slots">
|
||||
<div class="slot" data-pick="time" data-val="09:30">09:30</div>
|
||||
<div class="slot" data-pick="time" data-val="11:00">11:00</div>
|
||||
<div class="slot" data-pick="time" data-val="13:30">13:30</div>
|
||||
<div class="slot" data-pick="time" data-val="15:00">15:00</div>
|
||||
<div class="slot" data-pick="time" data-val="16:30">16:30</div>
|
||||
<div class="slot" data-pick="time" data-val="17:15">17:15</div>
|
||||
<div class="slot" data-pick="time" data-val="18:00">18:00</div>
|
||||
<div class="slot" data-pick="time" data-val="19:00">19:00</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="step" data-step="2">
|
||||
<div class="confirm-box">
|
||||
<div class="ok">✓</div>
|
||||
<h3 style="text-align:center">Fast geschafft!</h3>
|
||||
<p style="color:rgba(255,255,255,.7)">Eure Anfrage <b style="color:var(--terracotta)" id="sumLine">…</b> geht an den Salon. Ihr bekommt die Bestätigung per WhatsApp – und 24 h vorher eine Erinnerung zum Bestätigen oder Absagen.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="book-foot">
|
||||
<div class="book-summary">Auswahl: <b id="sumSvc">–</b> · <b id="sumTime">–</b></div>
|
||||
<div>
|
||||
<button class="btn btn-ghost" id="backBtn" style="color:#fff;border-color:rgba(255,255,255,.3);display:none">Zurück</button>
|
||||
<button class="btn btn-accent" id="nextBtn">Weiter</button>
|
||||
</div>
|
||||
</div>
|
||||
<p class="note-line">Demo-Ablauf · echte Buchung später self-hosted (Cal.com) + WhatsApp-Bestätigung</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- REVIEWS -->
|
||||
<section id="bewertungen">
|
||||
<div class="wrap">
|
||||
<div class="sec-head center reveal">
|
||||
<span class="eyebrow">Bewertungen</span>
|
||||
<h2>Was unsere Gäste sagen.</h2>
|
||||
<p><span class="demo-flag">Demo-Texte · später echte Google-Bewertungen</span></p>
|
||||
</div>
|
||||
<div class="reviews">
|
||||
<div class="review reveal"><div class="stars">★★★★★</div><p>„Endlich ein Salon, in dem man sich wohlfühlt. Veronika und ihr Team beraten ehrlich – meine Balayage ist ein Traum."</p><div class="who">— Sandra K.</div></div>
|
||||
<div class="review reveal"><div class="stars">★★★★★</div><p>„Mein Sohn war zum ersten Mal entspannt beim Friseur. Schnell, freundlich, total geduldig mit Kindern."</p><div class="who">— Markus T.</div></div>
|
||||
<div class="review reveal"><div class="stars">★★★★★</div><p>„Brautstyling war perfekt. Probetermin, alles abgestimmt, am großen Tag hat alles gesessen. Danke!"</p><div class="who">— Lena & Tim</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PREISE -->
|
||||
<section id="preise" style="background:var(--cream-2)">
|
||||
<div class="wrap">
|
||||
<div class="sec-head center reveal">
|
||||
<span class="eyebrow">Preise</span>
|
||||
<h2>Transparente Richtwerte.</h2>
|
||||
<p>Damit ihr wisst, woran ihr seid. Der Endpreis hängt von Haarlänge und Aufwand ab – wir beraten euch vorab.</p>
|
||||
</div>
|
||||
<div class="price-grid reveal">
|
||||
<div class="price-col">
|
||||
<h3>✂️ Schnitt & Styling</h3>
|
||||
<div class="price-row"><span class="name">Damen – Waschen, Schnitt, Föhnen</span><span class="val">ab 42 €</span></div>
|
||||
<div class="price-row"><span class="name">Herren – Schnitt</span><span class="val">ab 24 €</span></div>
|
||||
<div class="price-row"><span class="name">Bart / Konturen</span><span class="val">ab 14 €</span></div>
|
||||
<div class="price-row"><span class="name">Kinder (bis 12 J.)</span><span class="val">ab 18 €</span></div>
|
||||
<div class="price-row"><span class="name">Waschen & Föhnen</span><span class="val">ab 20 €</span></div>
|
||||
</div>
|
||||
<div class="price-col">
|
||||
<h3>🎨 Farbe & Spezial</h3>
|
||||
<div class="price-row"><span class="name">Ansatzfarbe</span><span class="val">ab 48 €</span></div>
|
||||
<div class="price-row"><span class="name">Foliensträhnen</span><span class="val">ab 75 €</span></div>
|
||||
<div class="price-row"><span class="name">Balayage</span><span class="val">ab 120 €</span></div>
|
||||
<div class="price-row"><span class="name">Brautstyling <small>inkl. Probetermin</small></span><span class="val">ab 95 €</span></div>
|
||||
<div class="price-row"><span class="name">Haarverlängerung <small>nach Beratung</small></span><span class="val">auf Anfrage</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="price-note"><span class="demo-flag">Demo-Richtwerte</span> Echte Preise tragen wir gemeinsam ein.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FAQ -->
|
||||
<section id="faq">
|
||||
<div class="wrap">
|
||||
<div class="sec-head center reveal">
|
||||
<span class="eyebrow">FAQ</span>
|
||||
<h2>Häufige Fragen.</h2>
|
||||
</div>
|
||||
<div class="faq reveal">
|
||||
<details><summary>Muss ich vorher anrufen?</summary><div class="ans">Nein. Ihr könnt rund um die Uhr online anfragen – auch abends und am Wochenende. Telefonisch erreicht ihr uns natürlich weiterhin zu den Öffnungszeiten.</div></details>
|
||||
<details><summary>Welche Produkte verwendet ihr?</summary><div class="ans">Wir arbeiten mit Redken und Paul Mitchell – hochwertige Marken für Schnitt, Pflege und Coloration.</div></details>
|
||||
<details><summary>Macht ihr auch Haarverlängerungen?</summary><div class="ans">Ja, das ist eine unserer Spezialitäten. Wir bieten Haarverlängerung und Haarverdichtung mit ausführlicher Beratung an.</div></details>
|
||||
<details><summary>Bekomme ich eine Erinnerung an meinen Termin?</summary><div class="ans">Ja. Vor dem Termin erhaltet ihr eine Erinnerung – künftig per WhatsApp mit der Möglichkeit, direkt zu bestätigen oder abzusagen.</div></details>
|
||||
<details><summary>Seid ihr auch für Kinder geeignet?</summary><div class="ans">Absolut. Unser Team ist geduldig und familienfreundlich – der erste Friseurbesuch soll Spaß machen.</div></details>
|
||||
<details><summary>Wo finde ich euch?</summary><div class="ans">Kastanienallee 1, 21255 Tostedt. Parkmöglichkeiten sind in der Nähe vorhanden.</div></details>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FOOTER / KONTAKT -->
|
||||
<footer id="kontakt">
|
||||
<div class="wrap">
|
||||
<div class="foot-grid">
|
||||
<div class="foot-col">
|
||||
<div class="logo">Friseur-Team <span class="u">VK</span></div>
|
||||
<p>Veronika Sprangel<br/>Kastanienallee 1<br/>21255 Tostedt</p>
|
||||
<a href="tel:+4941822889535">+49 4182 2889535</a>
|
||||
<a href="mailto:info@friseur-team-vk.de">info@friseur-team-vk.de</a>
|
||||
<a class="wa-btn" href="https://wa.me/4941822889535" target="_blank" rel="noopener">💬 WhatsApp</a>
|
||||
</div>
|
||||
<div class="foot-col">
|
||||
<h4>Öffnungszeiten</h4>
|
||||
{hours.map((h) => (
|
||||
<div class={"hours-row" + (h.closed ? " closed" : "")}><span>{h.d}</span><span>{h.t}</span></div>
|
||||
))}
|
||||
</div>
|
||||
<div class="foot-col">
|
||||
<h4>Folgt uns</h4>
|
||||
<a href="https://www.instagram.com/friseur.team_vk/" target="_blank" rel="noopener">Instagram</a>
|
||||
<a href="https://www.facebook.com/FriseurTeamVK" target="_blank" rel="noopener">Facebook</a>
|
||||
<a href="https://search.google.com/local/writereview?placeid=ChIJoaTlnmahsUcRFbgiyxAG0Fs" target="_blank" rel="noopener">Google bewerten</a>
|
||||
<a href="#buchen" class="btn btn-accent" style="margin-top:1rem">Termin buchen →</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="foot-bottom">
|
||||
<span>© 2026 Friseur-Team VK · Veronika Sprangel · Tostedt</span>
|
||||
<span><a href="#">Impressum</a> · <a href="#">Datenschutz</a> · Demo-Entwurf von Heidrich Digital</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<div class="toast" id="toast">In Apple/Google Wallet hinzufügen – im Live-System aktiv ✨</div>
|
||||
|
||||
<script is:inline>
|
||||
// nav scroll
|
||||
const nav = document.getElementById('nav');
|
||||
const onScroll = () => nav.classList.toggle('scrolled', window.scrollY > 40);
|
||||
onScroll(); window.addEventListener('scroll', onScroll, { passive: true });
|
||||
|
||||
// reveal
|
||||
const io = new IntersectionObserver((es) => {
|
||||
es.forEach((e) => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } });
|
||||
}, { threshold: 0.12 });
|
||||
document.querySelectorAll('.reveal').forEach((el) => io.observe(el));
|
||||
|
||||
// wallet toast
|
||||
const toast = document.getElementById('toast');
|
||||
document.querySelectorAll('[data-wallet]').forEach((b) => b.addEventListener('click', () => {
|
||||
toast.classList.add('show'); setTimeout(() => toast.classList.remove('show'), 2600);
|
||||
}));
|
||||
|
||||
// booking
|
||||
let step = 0; const picks = { svc: null, time: null };
|
||||
const steps = document.querySelectorAll('.step');
|
||||
const dots = document.querySelectorAll('.step-dot');
|
||||
const nextBtn = document.getElementById('nextBtn');
|
||||
const backBtn = document.getElementById('backBtn');
|
||||
const sumSvc = document.getElementById('sumSvc');
|
||||
const sumTime = document.getElementById('sumTime');
|
||||
|
||||
function render() {
|
||||
steps.forEach((s, i) => s.classList.toggle('active', i === step));
|
||||
dots.forEach((d, i) => d.classList.toggle('active', i <= step));
|
||||
backBtn.style.display = step === 0 ? 'none' : 'inline-flex';
|
||||
nextBtn.textContent = step === 2 ? 'Anfrage senden' : 'Weiter';
|
||||
if (step === 2) {
|
||||
const line = `${picks.svc || 'Termin'} · Mi ${picks.time || ''}`;
|
||||
document.getElementById('sumLine').textContent = line;
|
||||
}
|
||||
}
|
||||
document.querySelectorAll('[data-pick]').forEach((el) => el.addEventListener('click', () => {
|
||||
const type = el.dataset.pick;
|
||||
el.parentElement.querySelectorAll('[data-pick]').forEach((x) => x.classList.remove('sel'));
|
||||
el.classList.add('sel');
|
||||
picks[type] = el.dataset.val;
|
||||
if (type === 'svc') sumSvc.textContent = picks.svc;
|
||||
if (type === 'time') sumTime.textContent = picks.time;
|
||||
}));
|
||||
nextBtn.addEventListener('click', () => {
|
||||
if (step === 0 && !picks.svc) { sumSvc.textContent = 'bitte wählen'; return; }
|
||||
if (step === 1 && !picks.time) { sumTime.textContent = 'bitte wählen'; return; }
|
||||
if (step === 2) { toast.textContent = 'Anfrage gesendet – Demo ✨'; toast.classList.add('show'); setTimeout(() => toast.classList.remove('show'), 2600); return; }
|
||||
step++; render();
|
||||
});
|
||||
backBtn.addEventListener('click', () => { if (step > 0) { step--; render(); } });
|
||||
render();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,256 @@
|
||||
:root {
|
||||
--cream: #faf7f4;
|
||||
--cream-2: #f3ece5;
|
||||
--nude: #f0e8e0;
|
||||
--terracotta: #c4896a;
|
||||
--terracotta-deep: #a96b4d;
|
||||
--ink: #1a1a1a;
|
||||
--dark: #2c2420;
|
||||
--soft: #5a5045;
|
||||
--border: #e5ddd6;
|
||||
--white: #ffffff;
|
||||
--shadow-sm: 0 1px 3px rgba(44, 36, 32, 0.06);
|
||||
--shadow-md: 0 12px 32px -12px rgba(44, 36, 32, 0.22);
|
||||
--shadow-lg: 0 30px 60px -24px rgba(44, 36, 32, 0.35);
|
||||
--radius: 18px;
|
||||
--radius-lg: 28px;
|
||||
--maxw: 1180px;
|
||||
--serif: "Fraunces", Georgia, serif;
|
||||
--sans: "Public Sans", system-ui, -apple-system, sans-serif;
|
||||
}
|
||||
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
|
||||
html { scroll-behavior: smooth; scroll-padding-top: 92px; }
|
||||
|
||||
body {
|
||||
font-family: var(--sans);
|
||||
background: var(--cream);
|
||||
color: var(--ink);
|
||||
line-height: 1.65;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
h1, h2, h3 { font-family: var(--serif); font-weight: 500; line-height: 1.08; letter-spacing: -0.015em; }
|
||||
|
||||
img { display: block; max-width: 100%; }
|
||||
a { color: inherit; text-decoration: none; }
|
||||
|
||||
.wrap { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }
|
||||
|
||||
.eyebrow {
|
||||
font-size: 0.72rem; font-weight: 700; letter-spacing: 0.22em; text-transform: uppercase;
|
||||
color: var(--terracotta-deep);
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex; align-items: center; gap: 0.55rem;
|
||||
font-weight: 600; font-size: 0.95rem; letter-spacing: 0.01em;
|
||||
padding: 0.95rem 1.6rem; border-radius: 100px; cursor: pointer; border: 1px solid transparent;
|
||||
transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
|
||||
}
|
||||
.btn-primary { background: var(--ink); color: var(--cream); }
|
||||
.btn-primary:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); background: var(--dark); }
|
||||
.btn-ghost { background: transparent; color: var(--ink); border-color: var(--border); }
|
||||
.btn-ghost:hover { border-color: var(--ink); transform: translateY(-2px); }
|
||||
.btn-accent { background: var(--terracotta); color: #fff; }
|
||||
.btn-accent:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); background: var(--terracotta-deep); }
|
||||
|
||||
/* NAV */
|
||||
header.nav {
|
||||
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
|
||||
transition: background 0.3s ease, box-shadow 0.3s ease, padding 0.3s ease;
|
||||
padding: 18px 0;
|
||||
}
|
||||
header.nav.scrolled { background: rgba(250, 247, 244, 0.88); backdrop-filter: blur(14px); box-shadow: var(--shadow-sm); padding: 10px 0; }
|
||||
.nav-inner { display: flex; align-items: center; justify-content: space-between; }
|
||||
.logo { font-family: var(--serif); font-size: 1.35rem; font-weight: 600; letter-spacing: -0.02em; }
|
||||
.logo b { color: var(--terracotta); }
|
||||
.logo .u { color: var(--terracotta); }
|
||||
.nav-links { display: flex; gap: 2rem; align-items: center; }
|
||||
.nav-links a { font-size: 0.9rem; font-weight: 500; color: var(--soft); transition: color 0.2s; }
|
||||
.nav-links a:hover { color: var(--ink); }
|
||||
.nav-cta { display: flex; align-items: center; gap: 1rem; }
|
||||
.burger { display: none; }
|
||||
|
||||
/* HERO */
|
||||
.hero { position: relative; min-height: 100svh; display: flex; align-items: flex-end; padding-bottom: 64px; }
|
||||
.hero-bg { position: absolute; inset: 0; z-index: -2; }
|
||||
.hero-bg img { width: 100%; height: 100%; object-fit: cover; }
|
||||
.hero-bg::after {
|
||||
content: ""; position: absolute; inset: 0;
|
||||
background: linear-gradient(180deg, rgba(26,26,26,0.35) 0%, rgba(26,26,26,0.15) 40%, rgba(26,26,26,0.78) 100%);
|
||||
}
|
||||
.hero-inner { color: var(--cream); max-width: 760px; }
|
||||
.hero .eyebrow { color: #f0d9cc; }
|
||||
.hero h1 { font-size: clamp(2.8rem, 7vw, 5.4rem); color: #fff; margin: 1rem 0 1.2rem; }
|
||||
.hero h1 em { font-style: italic; color: var(--terracotta); }
|
||||
.hero p.lead { font-size: clamp(1.05rem, 2vw, 1.3rem); color: rgba(255,255,255,0.9); max-width: 560px; margin-bottom: 2rem; }
|
||||
.hero-actions { display: flex; gap: 1rem; flex-wrap: wrap; }
|
||||
.hero-trust { margin-top: 2.4rem; display: flex; flex-wrap: wrap; gap: 1.4rem; font-size: 0.85rem; color: rgba(255,255,255,0.82); }
|
||||
.hero-trust span { display: inline-flex; align-items: center; gap: 0.45rem; }
|
||||
|
||||
/* SECTION */
|
||||
section { padding: clamp(72px, 10vw, 130px) 0; }
|
||||
.sec-head { max-width: 680px; margin-bottom: 3.2rem; }
|
||||
.sec-head.center { margin-left: auto; margin-right: auto; text-align: center; }
|
||||
.sec-head h2 { font-size: clamp(2rem, 4.5vw, 3.2rem); margin: 0.8rem 0 1rem; }
|
||||
.sec-head p { color: var(--soft); font-size: 1.05rem; }
|
||||
|
||||
/* TRUST STRIP */
|
||||
.strip { background: var(--dark); color: var(--cream); padding: 28px 0; }
|
||||
.strip-inner { display: flex; flex-wrap: wrap; justify-content: space-around; gap: 1.5rem; text-align: center; }
|
||||
.strip .num { font-family: var(--serif); font-size: 2rem; color: var(--terracotta); display: block; }
|
||||
.strip .lbl { font-size: 0.8rem; letter-spacing: 0.08em; text-transform: uppercase; color: rgba(255,255,255,0.7); }
|
||||
|
||||
/* LEISTUNGEN BENTO */
|
||||
.bento { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
|
||||
.card-svc {
|
||||
background: var(--white); border: 1px solid var(--border); border-radius: var(--radius);
|
||||
padding: 2rem 1.8rem; transition: transform 0.3s ease, box-shadow 0.3s ease; position: relative; overflow: hidden;
|
||||
}
|
||||
.card-svc:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); }
|
||||
.card-svc.feature { grid-row: span 2; background: var(--dark); color: var(--cream); display: flex; flex-direction: column; justify-content: space-between; }
|
||||
.card-svc.feature .ico { background: rgba(196,137,106,0.18); }
|
||||
.card-svc .ico { width: 48px; height: 48px; border-radius: 12px; background: var(--nude); display: grid; place-items: center; font-size: 1.4rem; margin-bottom: 1.2rem; }
|
||||
.card-svc h3 { font-size: 1.35rem; margin-bottom: 0.5rem; }
|
||||
.card-svc.feature h3 { font-size: 1.8rem; }
|
||||
.card-svc p { color: var(--soft); font-size: 0.92rem; }
|
||||
.card-svc.feature p { color: rgba(255,255,255,0.75); }
|
||||
.card-svc .tag { font-size: 0.78rem; color: var(--terracotta-deep); font-weight: 600; margin-top: 1rem; display: inline-block; }
|
||||
.card-svc.feature .tag { color: var(--terracotta); }
|
||||
|
||||
/* PREISE */
|
||||
.price-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
|
||||
.price-col { background: var(--white); border: 1px solid var(--border); border-radius: var(--radius); padding: 2rem; }
|
||||
.price-col h3 { font-size: 1.5rem; margin-bottom: 1.2rem; display: flex; align-items: center; gap: 0.6rem; }
|
||||
.price-row { display: flex; justify-content: space-between; align-items: baseline; padding: 0.7rem 0; border-bottom: 1px dashed var(--border); }
|
||||
.price-row:last-child { border: none; }
|
||||
.price-row .name { font-weight: 500; }
|
||||
.price-row .name small { display: block; color: var(--soft); font-size: 0.78rem; font-weight: 400; }
|
||||
.price-row .val { font-weight: 700; white-space: nowrap; color: var(--dark); }
|
||||
.price-row .val span { color: var(--soft); font-weight: 400; font-size: 0.8rem; }
|
||||
.price-note { text-align: center; color: var(--soft); font-size: 0.85rem; margin-top: 1.6rem; }
|
||||
|
||||
/* TEAM */
|
||||
.team-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
|
||||
.member { text-align: center; }
|
||||
.avatar {
|
||||
width: 100%; aspect-ratio: 3/4; border-radius: var(--radius); background: var(--nude);
|
||||
display: grid; place-items: center; margin-bottom: 0.9rem; position: relative; overflow: hidden;
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
.avatar .ini { font-family: var(--serif); font-size: 2.4rem; color: var(--terracotta-deep); }
|
||||
.avatar .ph { position: absolute; bottom: 8px; left: 8px; right: 8px; font-size: 0.62rem; color: var(--soft); background: rgba(255,255,255,0.78); border-radius: 8px; padding: 3px 6px; }
|
||||
.member .mname { font-weight: 600; font-size: 1.02rem; }
|
||||
.member .mrole { font-size: 0.82rem; color: var(--soft); }
|
||||
|
||||
/* GALERIE */
|
||||
.gallery { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 200px; gap: 14px; }
|
||||
.gallery figure { overflow: hidden; border-radius: var(--radius); position: relative; }
|
||||
.gallery img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; }
|
||||
.gallery figure:hover img { transform: scale(1.06); }
|
||||
.gallery .big { grid-column: span 2; grid-row: span 2; }
|
||||
.gallery .tall { grid-row: span 2; }
|
||||
.insta-cta { text-align: center; margin-top: 2rem; }
|
||||
|
||||
/* WALLET / STEMPELKARTE */
|
||||
.wallet-sec { background: linear-gradient(160deg, var(--nude), var(--cream-2)); }
|
||||
.wallet-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 3.5rem; align-items: center; }
|
||||
.pass {
|
||||
background: linear-gradient(155deg, #2c2420, #443a32); color: #fff; border-radius: 24px;
|
||||
padding: 1.8rem; box-shadow: var(--shadow-lg); max-width: 360px; margin: 0 auto; position: relative;
|
||||
}
|
||||
.pass-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.4rem; }
|
||||
.pass-brand { font-family: var(--serif); font-size: 1.15rem; }
|
||||
.pass-brand b { color: var(--terracotta); }
|
||||
.pass-chip { font-size: 0.62rem; letter-spacing: 0.12em; text-transform: uppercase; background: rgba(255,255,255,0.12); padding: 4px 10px; border-radius: 20px; }
|
||||
.pass-label { font-size: 0.72rem; color: rgba(255,255,255,0.55); letter-spacing: 0.05em; text-transform: uppercase; }
|
||||
.pass-reward { font-family: var(--serif); font-size: 1.45rem; margin: 0.2rem 0 1.4rem; }
|
||||
.stamps { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin-bottom: 1.2rem; }
|
||||
.stamp { aspect-ratio: 1; border-radius: 50%; display: grid; place-items: center; font-size: 1.1rem; border: 1.5px dashed rgba(255,255,255,0.25); color: rgba(255,255,255,0.3); }
|
||||
.stamp.on { background: var(--terracotta); border-style: solid; border-color: var(--terracotta); color: #fff; }
|
||||
.pass-foot { display: flex; justify-content: space-between; font-size: 0.72rem; color: rgba(255,255,255,0.5); border-top: 1px solid rgba(255,255,255,0.1); padding-top: 1rem; }
|
||||
.wallet-btns { display: flex; gap: 0.8rem; margin-top: 1.6rem; flex-wrap: wrap; }
|
||||
.wallet-btn { display: inline-flex; align-items: center; gap: 0.5rem; background: #000; color: #fff; padding: 0.7rem 1.1rem; border-radius: 12px; font-size: 0.85rem; font-weight: 600; cursor: pointer; border: none; transition: transform 0.2s; }
|
||||
.wallet-btn:hover { transform: translateY(-2px); }
|
||||
.wallet-btn.g { background: #fff; color: #1a1a1a; border: 1px solid var(--border); }
|
||||
|
||||
/* BOOKING */
|
||||
.book-sec { background: var(--dark); color: var(--cream); }
|
||||
.book-sec .sec-head h2 { color: #fff; }
|
||||
.book-sec .sec-head p { color: rgba(255,255,255,0.7); }
|
||||
.booker { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-lg); padding: 2.4rem; max-width: 720px; margin: 0 auto; }
|
||||
.steps-nav { display: flex; gap: 0.5rem; margin-bottom: 2rem; }
|
||||
.step-dot { flex: 1; height: 4px; border-radius: 4px; background: rgba(255,255,255,0.12); transition: background 0.3s; }
|
||||
.step-dot.active { background: var(--terracotta); }
|
||||
.step { display: none; }
|
||||
.step.active { display: block; animation: fade 0.4s ease; }
|
||||
@keyframes fade { from { opacity: 0; transform: translateY(8px);} to {opacity:1; transform:none;} }
|
||||
.step h3 { color: #fff; font-size: 1.4rem; margin-bottom: 1.2rem; }
|
||||
.opt-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.8rem; }
|
||||
.opt { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.12); border-radius: 12px; padding: 1rem 1.2rem; cursor: pointer; transition: all 0.2s; display: flex; justify-content: space-between; align-items: center; }
|
||||
.opt:hover, .opt.sel { border-color: var(--terracotta); background: rgba(196,137,106,0.15); }
|
||||
.opt .o-name { font-weight: 600; color: #fff; }
|
||||
.opt .o-meta { font-size: 0.8rem; color: rgba(255,255,255,0.6); }
|
||||
.slots { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.6rem; }
|
||||
.slot { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.12); border-radius: 10px; padding: 0.7rem; text-align: center; cursor: pointer; font-size: 0.9rem; color: #fff; transition: all 0.2s; }
|
||||
.slot:hover, .slot.sel { border-color: var(--terracotta); background: rgba(196,137,106,0.15); }
|
||||
.book-foot { display: flex; justify-content: space-between; margin-top: 2rem; align-items: center; flex-wrap: wrap; gap: 1rem; }
|
||||
.book-summary { font-size: 0.88rem; color: rgba(255,255,255,0.7); }
|
||||
.book-summary b { color: var(--terracotta); }
|
||||
.confirm-box { text-align: center; padding: 1rem 0; }
|
||||
.confirm-box .ok { width: 64px; height: 64px; border-radius: 50%; background: var(--terracotta); display: grid; place-items: center; margin: 0 auto 1.2rem; font-size: 1.8rem; }
|
||||
.note-line { font-size: 0.8rem; color: rgba(255,255,255,0.55); margin-top: 1.2rem; text-align: center; }
|
||||
|
||||
/* REVIEWS */
|
||||
.reviews { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
|
||||
.review { background: var(--white); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.8rem; }
|
||||
.review .stars { color: var(--terracotta); letter-spacing: 2px; margin-bottom: 0.8rem; }
|
||||
.review p { font-size: 0.95rem; color: var(--soft); font-style: italic; }
|
||||
.review .who { margin-top: 1.2rem; font-weight: 600; font-size: 0.9rem; }
|
||||
|
||||
/* FAQ */
|
||||
.faq { max-width: 800px; margin: 0 auto; }
|
||||
.faq details { background: var(--white); border: 1px solid var(--border); border-radius: 14px; margin-bottom: 0.8rem; padding: 0 1.4rem; transition: box-shadow 0.2s; }
|
||||
.faq details[open] { box-shadow: var(--shadow-sm); }
|
||||
.faq summary { cursor: pointer; padding: 1.2rem 0; font-weight: 600; list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 1rem; }
|
||||
.faq summary::-webkit-details-marker { display: none; }
|
||||
.faq summary::after { content: "+"; font-size: 1.4rem; color: var(--terracotta); transition: transform 0.2s; }
|
||||
.faq details[open] summary::after { transform: rotate(45deg); }
|
||||
.faq .ans { padding: 0 0 1.3rem; color: var(--soft); font-size: 0.95rem; }
|
||||
|
||||
/* CONTACT / FOOTER */
|
||||
footer { background: var(--ink); color: var(--cream); padding: 80px 0 32px; }
|
||||
.foot-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 3rem; margin-bottom: 3rem; }
|
||||
.foot-grid h4 { font-family: var(--serif); font-size: 1.3rem; margin-bottom: 1rem; }
|
||||
.foot-grid .logo { font-size: 1.6rem; margin-bottom: 1rem; }
|
||||
.foot-col p, .foot-col a { color: rgba(255,255,255,0.7); font-size: 0.92rem; display: block; margin-bottom: 0.5rem; transition: color 0.2s; }
|
||||
.foot-col a:hover { color: var(--terracotta); }
|
||||
.hours-row { display: flex; justify-content: space-between; font-size: 0.9rem; color: rgba(255,255,255,0.7); padding: 0.3rem 0; border-bottom: 1px solid rgba(255,255,255,0.08); }
|
||||
.hours-row.closed { color: rgba(255,255,255,0.4); }
|
||||
.wa-btn { display: inline-flex; align-items: center; gap: 0.5rem; background: #25d366; color: #fff !important; padding: 0.7rem 1.2rem; border-radius: 100px; font-weight: 600; font-size: 0.9rem; margin-top: 0.6rem; }
|
||||
.foot-bottom { border-top: 1px solid rgba(255,255,255,0.1); padding-top: 1.5rem; display: flex; justify-content: space-between; flex-wrap: wrap; gap: 1rem; font-size: 0.8rem; color: rgba(255,255,255,0.5); }
|
||||
.foot-bottom a { color: rgba(255,255,255,0.5); }
|
||||
|
||||
/* REVEAL */
|
||||
.reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.7s ease, transform 0.7s ease; }
|
||||
.reveal.in { opacity: 1; transform: none; }
|
||||
|
||||
/* TOAST */
|
||||
.toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%) translateY(120%); background: var(--ink); color: var(--cream); padding: 0.9rem 1.4rem; border-radius: 100px; box-shadow: var(--shadow-lg); z-index: 200; transition: transform 0.4s ease; font-size: 0.9rem; }
|
||||
.toast.show { transform: translateX(-50%) translateY(0); }
|
||||
|
||||
.demo-flag { display: inline-block; font-size: 0.66rem; letter-spacing: 0.1em; text-transform: uppercase; background: var(--nude); color: var(--terracotta-deep); padding: 3px 10px; border-radius: 20px; font-weight: 700; }
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.nav-links { display: none; }
|
||||
.bento, .price-grid, .team-grid, .gallery, .reviews, .wallet-layout, .foot-grid { grid-template-columns: 1fr; }
|
||||
.gallery { grid-auto-rows: 220px; }
|
||||
.gallery .big, .gallery .tall { grid-column: auto; grid-row: auto; }
|
||||
.card-svc.feature { grid-row: auto; }
|
||||
.team-grid { grid-template-columns: 1fr 1fr; }
|
||||
.opt-grid, .slots { grid-template-columns: 1fr 1fr; }
|
||||
}
|
||||
Reference in New Issue
Block a user