diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..27c29a2 --- /dev/null +++ b/css/style.css @@ -0,0 +1,194 @@ +/* ========================================================== + tri-hub.de – Design-DNA (Block 4, Projekt-Kickoff) + Hintergrund: #0d0d1a / #1a1a2e + Akzent: #10B981 (Teal / Emerald Green) + Primärtext: #ffffff / #F8FAFC / #94A3B8 + Typografie: Playfair Display (Display) + Inter (Body) + Ton: Du-Ansprache, Premium, direkt + ========================================================== */ + +:root { + --bg-dark: #0d0d1a; + --bg-panel: #1a1a2e; + --accent: #10B981; + --accent-soft: rgba(16, 185, 129, 0.12); + --text-primary: #ffffff; + --text-secondary: #F8FAFC; + --text-muted: #94A3B8; + + --font-display: "Inter", system-ui, sans-serif; + --font-body: "Inter", system-ui, sans-serif; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + background: var(--bg-dark); + color: var(--text-secondary); + font-family: var(--font-body); +} + +/* ---------- Leistungsübersicht ---------- */ + +.pakete { + padding: 5rem 1.5rem; + max-width: 1120px; + margin: 0 auto; +} + +.pakete__intro { + text-align: center; + max-width: 42rem; + margin: 0 auto 3rem; +} + +.pakete__titel { + font-family: var(--font-display); + font-weight: 700; + font-size: clamp(1.8rem, 3vw, 2.4rem); + color: var(--text-primary); + margin: 0 0 0.75rem; +} + +.pakete__text { + color: var(--text-muted); + line-height: 1.6; + margin: 0; +} + +/* Kästchen nebeneinander, jede Karte für sich */ +.pakete__grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; + align-items: stretch; +} + +.paket-karte { + display: flex; + flex-direction: column; + background: var(--bg-panel); + border: 1px solid rgba(248, 250, 252, 0.08); + border-radius: 14px; + padding: 2rem 1.75rem; + position: relative; +} + +.paket-karte--empfohlen { + border-color: var(--accent); + box-shadow: 0 0 0 1px var(--accent-soft); +} + +.paket-karte--ausgewaehlt { + border-color: var(--accent); + box-shadow: 0 0 0 2px var(--accent); +} + +.paket-karte__badge { + position: absolute; + top: -0.7rem; + left: 1.75rem; + background: var(--accent); + color: var(--bg-dark); + font-size: 0.75rem; + font-weight: 600; + padding: 0.25rem 0.75rem; + border-radius: 999px; + margin: 0; +} + +.paket-karte__name { + font-family: var(--font-display); + font-weight: 600; + font-size: 1.4rem; + color: var(--text-primary); + margin: 0 0 0.5rem; +} + +.paket-karte__preis { + margin: 0 0 0.75rem; + display: flex; + align-items: baseline; + gap: 0.35rem; +} + +.paket-karte__betrag { + font-family: var(--font-display); + font-size: 2rem; + font-weight: 700; + color: var(--text-primary); +} + +.paket-karte__zeitraum { + color: var(--text-muted); + font-size: 0.9rem; +} + +.paket-karte__beschreibung { + color: var(--text-muted); + line-height: 1.55; + margin: 0 0 1.5rem; + min-height: 3.3em; +} + +.paket-karte__leistungen { + list-style: none; + margin: 0 0 2rem; + padding: 0; + flex-grow: 1; +} + +.paket-karte__leistungen li { + position: relative; + padding-left: 1.4rem; + margin-bottom: 0.7rem; + line-height: 1.4; + color: var(--text-secondary); +} + +.paket-karte__leistungen li::before { + content: ""; + position: absolute; + left: 0; + top: 0.5em; + width: 8px; + height: 8px; + border-radius: 2px; + background: var(--accent); +} + +.paket-karte__cta { + font-family: var(--font-body); + font-weight: 600; + font-size: 0.95rem; + color: var(--bg-dark); + background: var(--accent); + border: none; + border-radius: 8px; + padding: 0.85rem 1rem; + cursor: pointer; + transition: filter 0.15s ease; +} + +.paket-karte__cta:hover, +.paket-karte__cta:focus-visible { + filter: brightness(1.1); +} + +.paket-karte__cta:focus-visible { + outline: 2px solid var(--text-primary); + outline-offset: 2px; +} + +@media (max-width: 860px) { + .pakete__grid { + grid-template-columns: 1fr; + } + + .paket-karte--empfohlen { + order: -1; + } +} diff --git a/index.html b/index.html index 0cbe3a9..fb2ee74 100644 --- a/index.html +++ b/index.html @@ -5,10 +5,81 @@ Ernährungsberater + + + + + +
+
+

Deine Pakete

+

+ Drei Wege zu einer Ernährung, die zu deinem Training, deinem Alltag und + deinem Alter passt – entwickelt für Triathletinnen und Triathleten ab 50. +

+
+ +
+ +
+

Starter

+

+ 79 € + / Monat +

+

Für den Einstieg in eine bewusste Ernährung neben dem Training.

+
    +
  • Erstgespräch & Bedarfsanalyse
  • +
  • Individueller Ernährungsplan
  • +
  • Monatliches Check-in per E-Mail
  • +
  • Zugang zu Beispielplänen
  • +
+ +
+ +
+

Beliebteste Wahl

+

STANDART

+

+ 149 € + / Monat +

+

Laufende Begleitung für alle, die regelmäßig für Wettkämpfe trainieren.

+
    +
  • Alles aus Starter
  • +
  • Plan-Anpassung je Trainingsphase
  • +
  • Zwei Beratungsgespräche pro Monat
  • +
  • Wettkampf-Ernährungsstrategie
  • +
  • Direkter Chat mit deiner Beraterin
  • +
+ +
+ +
+

Rundum Sorglos Paket

+

+ 249 € + / Monat +

+

Volle Betreuung für ambitionierte Athletinnen und Athleten.

+
    +
  • Alles aus Ausdauer
  • +
  • Wöchentliche Beratungsgespräche
  • +
  • Individuelle Supplement-Empfehlung
  • +
  • Betreuung am Wettkampftag
  • +
  • Priorisierter Support
  • +
+ +
+ +
+
+ + - \ No newline at end of file + diff --git a/js/script.js b/js/script.js new file mode 100644 index 0000000..90d8232 --- /dev/null +++ b/js/script.js @@ -0,0 +1,27 @@ +// US-01-02 Leistungsübersicht +// Markiert das gewählte Paket visuell und stellt die Auswahl bereit, +// damit US-01-03 (Pakete online buchen) später darauf aufbauen kann. + +document.addEventListener("DOMContentLoaded", () => { + const karten = document.querySelectorAll(".paket-karte"); + + karten.forEach((karte) => { + const button = karte.querySelector(".paket-karte__cta"); + if (!button) return; + + button.addEventListener("click", () => { + karten.forEach((k) => k.classList.remove("paket-karte--ausgewaehlt")); + karte.classList.add("paket-karte--ausgewaehlt"); + + const paketName = button.dataset.paket; + + // Andere Skripte (z. B. die Buchungsstrecke aus US-01-03) + // können auf dieses Event hören, statt den DOM abzufragen. + document.dispatchEvent( + new CustomEvent("paket:ausgewaehlt", { detail: { paket: paketName } }) + ); + + console.log(`Paket "${paketName}" ausgewählt.`); + }); + }); +}); diff --git a/script.js b/script.js deleted file mode 100644 index e69de29..0000000 diff --git a/style.css b/style.css deleted file mode 100644 index e69de29..0000000