Merge pull request 'US04-02: Trainerprofil (Platzhalter) und Kontakt mit Weiterleitung zu tri-hub.de/kontakt#kontaktinfos' (#9) from feature_US04-02 into dev_experimental

Reviewed-on: https://gitty.informatik.th-mannheim.de/3015351/PM_Project/pulls/9
dev_experimental
Kevin Alexander Kopp 2026-09-29 23:04:51 +02:00
commit 5baf27068c
2 changed files with 192 additions and 1 deletions

View File

@ -0,0 +1,140 @@
/* 8. Trainer und Kontakt (US04-02)
Trainerprofil ist ein PLATZHALTER – Foto und Inhalte folgen vom Kunden.
Kontakt leitet auf https://tri-hub.de/kontakt weiter. */
.contact { border-top: 1px solid var(--line); }
.contact-grid {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr);
gap: 24px;
align-items: stretch;
}
/* ---------- Trainerprofil (Platzhalter) ---------- */
.trainer-card {
display: grid;
grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr);
gap: 28px;
padding: 16px;
border: 1px solid var(--line);
border-radius: 2rem;
background: linear-gradient(#ffffff0f, #ffffff05), linear-gradient(#08151ee6, #091822fa);
box-shadow: 0 18px 48px rgb(0 0 0 / 16%);
}
.trainer-photo {
display: flex;
align-items: center;
justify-content: center;
min-height: 320px;
border: 1px dashed rgb(255 255 255 / 22%);
border-radius: 1.35rem;
background:
radial-gradient(circle at 50% 38%, rgb(255 255 255 / 10%) 0 18%, transparent 19%),
radial-gradient(ellipse at 50% 100%, rgb(255 255 255 / 8%) 0 42%, transparent 43%),
rgb(255 255 255 / 3%);
color: var(--quiet);
font-size: .8125rem;
letter-spacing: .18em;
text-transform: uppercase;
}
.trainer-photo span { margin-top: 62%; }
.trainer-body { padding: 12px 12px 12px 0; }
.placeholder-tag {
display: inline-block;
margin-bottom: 14px;
padding: 4px 12px;
border: 1px dashed rgb(255 255 255 / 28%);
border-radius: 999px;
color: var(--quiet);
font-size: .75rem;
font-weight: 600;
letter-spacing: .16em;
text-transform: uppercase;
}
.trainer-body h3 { font-size: 1.5rem; }
.trainer-role { margin-top: 6px; color: var(--muted); font-size: 1rem; }
.trainer-facts {
margin: 22px 0 0;
padding: 0;
list-style: none;
border-top: 1px solid var(--line);
}
.trainer-facts li {
display: grid;
grid-template-columns: 130px 1fr;
gap: 12px;
padding: 11px 0;
border-bottom: 1px solid var(--line);
font-size: 1rem;
color: rgb(255 255 255 / 86%);
}
.trainer-facts span { color: var(--quiet); font-size: .875rem; }
.trainer-quote {
margin-top: 20px;
color: var(--muted);
font-style: italic;
font-size: 1rem;
}
/* ---------- Kontaktbox ---------- */
.contact-card {
display: flex;
flex-direction: column;
padding: 36px;
border: 1px solid color-mix(in srgb, var(--accent-muted) 35%, transparent);
border-radius: 2rem;
background:
radial-gradient(circle at 100% 0, rgb(46 182 194 / 14%), transparent 45%),
var(--panel);
}
.contact-card h3 { margin-top: 14px; font-size: clamp(1.5rem, 2.2vw, 1.9rem); }
.contact-card > p:not(.eyebrow) { margin-top: 14px; color: var(--muted); font-size: 1rem; }
.contact-points {
flex: 1;
margin: 22px 0 28px;
padding: 0;
list-style: none;
}
.contact-points li {
position: relative;
padding: 6px 0 6px 26px;
font-size: 1rem;
}
.contact-points li::before {
content: "✓";
position: absolute;
left: 0;
color: var(--accent-strong);
}
.contact-button { align-self: flex-start; }
/* ---------- Responsiv ---------- */
@media (max-width: 1100px) {
.contact-grid { grid-template-columns: 1fr; }
}
@media (max-width: 760px) {
.trainer-card { grid-template-columns: 1fr; gap: 18px; }
.trainer-photo { min-height: 260px; }
.trainer-body { padding: 4px 8px 12px; }
.trainer-facts li { grid-template-columns: 1fr; gap: 2px; }
.contact-card { padding: 26px 22px; }
.contact-button { align-self: stretch; }
}

View File

@ -19,6 +19,7 @@
<link rel="stylesheet" href="css/sections/angebote.css" /> <link rel="stylesheet" href="css/sections/angebote.css" />
<link rel="stylesheet" href="css/sections/ablauf.css" /> <link rel="stylesheet" href="css/sections/ablauf.css" />
<link rel="stylesheet" href="css/responsive.css" /> <link rel="stylesheet" href="css/responsive.css" />
<link rel="stylesheet" href="css/sections/kontakt.css" />
<script src="js/angebote.js" defer></script> <script src="js/angebote.js" defer></script>
<script src="js/main.js" defer></script> <script src="js/main.js" defer></script>
</head> </head>
@ -45,7 +46,7 @@
> >
<nav aria-label="Hauptnavigation"> <nav aria-label="Hauptnavigation">
<a href="https://tri-hub.de/coaching-1zu1">Coaching 1zu1</a><a href="#angebote">Angebote entdecken</a><a href="#ablauf">So <a href="https://tri-hub.de/coaching-1zu1">Coaching 1zu1</a><a href="#angebote">Angebote entdecken</a><a href="#ablauf">So
läuft’s ab</a><a href="#">Kontakt</a> läuft’s ab</a><a href="#kontakt">Kontakt</a>
</nav> </nav>
<button <button
class="menu-toggle" class="menu-toggle"
@ -311,6 +312,56 @@
<a class="text-link" href="#angebote">Dein Angebot entdecken</a> <a class="text-link" href="#angebote">Dein Angebot entdecken</a>
</div> </div>
</section> </section>
<!-- US04-02: Trainer + Kontakt (Weiterleitung zu tri-hub.de/kontakt) -->
<section id="kontakt" class="shell section contact" aria-labelledby="kontakt-title">
<div class="section-heading">
<div>
<p class="eyebrow">DEIN ANSPRECHPARTNER</p>
<h2 id="kontakt-title">Vereinbare ein<br />persönliches Gespräch.</h2>
</div>
<p>
Lerne deinen Trainer kennen und kläre in einem ersten Gespräch,
welche Begleitung zu dir passt.
</p>
</div>
<div class="contact-grid">
<!-- PLATZHALTER: Trainerprofil – Inhalte folgen vom Kunden -->
<article class="trainer-card" aria-label="Trainerprofil (Platzhalter)">
<div class="trainer-photo" role="img" aria-label="Platzhalter für das Foto des Trainers">
<span aria-hidden="true">Foto folgt</span>
</div>
<div class="trainer-body">
<p class="placeholder-tag">Platzhalter</p>
<h3>[Name des Trainers]</h3>
<p class="trainer-role">[Rolle, z. B. Triathlon-Coach &amp; Ernährungsberater]</p>
<ul class="trainer-facts">
<li><span>Qualifikation</span>[Ausbildung / Studium]</li>
<li><span>Zertifikate</span>[z. B. Lizenz, Fortbildungen]</li>
<li><span>Erfahrung</span>[Jahre im Triathlon / in der Beratung]</li>
<li><span>Schwerpunkte</span>[z. B. Ernährung ab 50, Wettkampfvorbereitung]</li>
</ul>
<p class="trainer-quote">„[Kurzes persönliches Statement des Trainers]“</p>
</div>
</article>
<div class="contact-card">
<p class="eyebrow">KOSTENLOS &amp; UNVERBINDLICH</p>
<h3>Vereinbare ein persönliches Gespräch</h3>
<p>
Schreib deinem Trainer über das Kontaktformular von TriHub.
Erzähl kurz von deinen Zielen – du bekommst eine persönliche Antwort.
</p>
<ul class="contact-points">
<li>Ziele und Alltag besprechen</li>
<li>Passendes Angebot finden</li>
<li>Offene Fragen klären</li>
</ul>
<a class="button contact-button" href="https://tri-hub.de/kontakt#kontaktinfos">Zum Kontaktformular</a>
</div>
</div>
</section>
</main> </main>
<footer> <footer>
<div class="shell footer-main"> <div class="shell footer-main">