trihub-ernaehrung-advinters/css/kontakt.css

645 lines
14 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/* Dennis: Kontaktseite – Regeln sind auf .kontakt-seite begrenzt.
Tokens entsprechen css/beratung.css (tri-hub.de-Farbwelt). */
.kontakt-seite {
/* Farben – Tokens von tri-hub.de */
--background: #0714198a;
--background-rgb: 7 20 25;
--background-panel: #152027;
--text-primary: #ffffff;
--text-muted: #9ba7aa;
--accent: #4597A3;
--accent-warm: #f7c230;
--border: rgba(234, 8, 8, 0.1);
/* Typografie */
--font-display: "Sora", sans-serif;
--font-body: "DM Sans", Arial, Helvetica, sans-serif;
/* Layout */
--container: 1120px;
--radius: 1.1rem;
}
/* ---------- Basic ---------- */
.kontakt-seite,
.kontakt-seite *,
.kontakt-seite::before,
.kontakt-seite *::before,
.kontakt-seite::after,
.kontakt-seite *::after {
box-sizing: border-box;
}
.kontakt-seite {
min-height: 100vh;
margin: 0;
background-color: var(--background);
color: var(--text-primary);
font-family: var(--font-body);
line-height: 1.625;
-webkit-font-smoothing: antialiased;
position: relative;
isolation: isolate;
scroll-behavior: smooth;
}
/* Licht */
.kontakt-seite::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background:
radial-gradient(900px 520px at 78% -10%, rgba(0, 179, 194, 0.13), transparent 65%),
radial-gradient(700px 480px at -10% 30%, rgba(35, 137, 148, 0.1), transparent 60%),
radial-gradient(600px 420px at 90% 95%, rgba(247, 194, 48, 0.05), transparent 60%);
pointer-events: none;
}
.kontakt-seite h1,
.kontakt-seite h2,
.kontakt-seite h3 {
margin-top: 0;
font-family: var(--font-display);
color: var(--text-primary);
line-height: 1.2;
letter-spacing: -0.01em;
}
.kontakt-seite p {
margin: 0 0 1em;
}
.kontakt-seite .container {
width: min(100% - 48px, var(--container));
margin-inline: auto;
}
/* ---------- Typo-Helfer ---------- */
.kontakt-seite .kicker {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 0.78rem;
font-weight: 600;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--accent);
margin-bottom: 18px;
}
.kontakt-seite .kicker::before {
content: "";
width: 28px;
height: 2px;
border-radius: 2px;
background: var(--accent);
}
.kontakt-seite .lead {
font-size: 1.15rem;
color: var(--text-muted);
max-width: 660px;
}
/* Die Navigationsleiste oben wird von css/navigation.css gestylt (.site-navigation). */
/* ---------- Hero ---------- */
.kontakt-seite .hero {
padding: 72px 0 88px;
}
.kontakt-seite .hero__grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
align-items: center;
}
.kontakt-seite .hero h1 {
font-size: clamp(2.6rem, 6vw, 4rem);
font-weight: 500;
letter-spacing: -0.04em;
margin-bottom: 20px;
}
.kontakt-seite .hero__text {
font-size: 1.15rem;
color: var(--text-muted);
max-width: 560px;
}
.kontakt-seite .hero__image {
display: block;
width: 100%;
height: auto;
border-radius: calc(var(--radius) + 1rem);
border: 1px solid var(--border);
box-shadow: 0 30px 90px rgba(0, 0, 0, 0.35);
}
.hero--ribbon {
position: relative;
background-image: url("../images/trihub-ribbon-abstract.webp");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
background-color: var(--background); /* Fallback / Grundton */
isolation: isolate; /* hält z-index sauber */
}
.hero--ribbon::before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(0deg, rgb(var(--background-rgb) / 96%), transparent 42%),
linear-gradient(90deg, rgb(var(--background-rgb) / 94%) 0%, rgb(var(--background-rgb) / 79%) 35%, rgb(var(--background-rgb) / 38%) 72%, rgb(var(--background-rgb) / 25%) 100%);
content: ""; /* dunkler Schleier */
z-index: 0;
pointer-events: none;
}
.hero--ribbon .hero__grid {
position: relative;
z-index: 1;
}
/* ---------- Sektionen ---------- */
.kontakt-seite .section {
padding: 88px 0;
}
.kontakt-seite .section + .section {
border-top: 1px solid var(--border);
}
.kontakt-seite .section-head {
max-width: 720px;
margin-bottom: 48px;
}
.kontakt-seite .section-head h2 {
font-size: clamp(1.9rem, 4vw, 2.7rem);
margin-bottom: 16px;
}
/* ---------- Karten (Nachricht) ---------- */
.kontakt-seite .cards-3 {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 24px;
}
.kontakt-seite .card {
background-color: var(--background-panel);
border: 1px solid var(--border);
border-radius: calc(var(--radius) + 0.4rem);
padding: 28px;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
}
.kontakt-seite .card__icon {
display: grid;
place-items: center;
width: 48px;
height: 48px;
margin-bottom: 16px;
border-radius: 12px;
font-size: 1.5rem;
background: rgba(69, 151, 163, 0.2);
}
.kontakt-seite .card--warm .card__icon {
background: rgba(247, 194, 48, 0.16);
}
.kontakt-seite .card--neutral .card__icon {
background: rgba(255, 255, 255, 0.1);
}
.kontakt-seite .card h3 {
font-size: 1.08rem;
margin-bottom: 8px;
}
.kontakt-seite .card p {
margin: 0;
color: var(--text-muted);
font-size: 0.95rem;
}
/* ---------- Formular + Kontaktinfos ---------- */
.kontakt-seite .kontakt-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
align-items: start;
}
.kontakt-seite form {
margin-top: 32px;
display: grid;
gap: 20px;
}
.kontakt-seite .field label {
display: block;
font-size: 0.9rem;
font-weight: 500;
color: var(--text-primary);
margin-bottom: 8px;
}
.kontakt-seite .field input,
.kontakt-seite .field select,
.kontakt-seite .field textarea {
width: 100%;
padding: 12px 16px;
border-radius: 10px;
border: 1px solid var(--border);
background: rgba(255, 255, 255, 0.04);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 0.95rem;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.kontakt-seite .field input::placeholder,
.kontakt-seite .field textarea::placeholder {
color: rgba(255, 255, 255, 0.4);
}
.kontakt-seite .field input:focus,
.kontakt-seite .field select:focus,
.kontakt-seite .field textarea:focus {
outline: none;
border-color: var(--accent);
background: rgba(255, 255, 255, 0.06);
}
.kontakt-seite .field select option {
background: #0b1a20;
color: var(--text-primary);
}
.kontakt-seite .field textarea {
min-height: 140px;
resize: vertical;
}
/* kontakt.js setzt die Zustandsklassen für ungültige Felder und Rückmeldungen. */
.kontakt-seite .field input.invalid,
.kontakt-seite .field select.invalid,
.kontakt-seite .field textarea.invalid {
border-color: #ef4444;
}
.kontakt-seite .field input.valid,
.kontakt-seite .field textarea.valid {
border-color: #22c55e;
}
.kontakt-seite .field__error {
display: none;
margin-top: 6px;
font-size: 0.8rem;
color: #f87171;
}
.kontakt-seite .field__hint {
display: none;
margin-top: 6px;
font-size: 0.8rem;
color: #4ade80;
}
.kontakt-seite .field.has-error .field__error {
display: block;
}
.kontakt-seite .field.is-ok .field__hint {
display: block;
}
/* ---------- Button ---------- */
.kontakt-seite .btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.8rem 1.5rem;
border-radius: 999px;
font-family: var(--font-body);
font-weight: 600;
font-size: 0.95rem;
line-height: 1.2;
text-decoration: none;
border: 1px solid transparent;
cursor: pointer;
transition: transform 0.18s ease, box-shadow 0.18s ease,
background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}
.kontakt-seite .btn-accent {
background: var(--accent);
color: #03242b;
}
.kontakt-seite .btn-accent:hover:not(:disabled) {
transform: translateY(-1px);
box-shadow: 0 10px 28px rgba(0, 179, 194, 0.28);
}
.kontakt-seite .btn-block {
width: 100%;
}
.kontakt-seite .btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.kontakt-seite .form-status {
display: none;
font-size: 0.9rem;
}
.kontakt-seite .form-status.is-visible {
display: block;
}
.kontakt-seite .form-status--ok {
color: #4ade80;
}
.kontakt-seite .form-status--error {
color: #f87171;
}
/* ---------- Kontaktinformations-Karten ---------- */
.kontakt-seite .info-stack {
display: grid;
gap: 20px;
}
.kontakt-seite .info-card {
display: flex;
align-items: flex-start;
gap: 16px;
background-color: var(--background-panel);
border: 1px solid var(--border);
border-radius: calc(var(--radius) + 0.4rem);
padding: 22px;
transition: border-color 0.15s ease;
}
.kontakt-seite .info-card:hover {
border-color: rgba(69, 151, 163, 0.5);
}
.kontakt-seite .info-card__icon {
display: grid;
place-items: center;
flex-shrink: 0;
width: 40px;
height: 40px;
margin-top: 2px;
border-radius: 10px;
background: rgba(69, 151, 163, 0.2);
color: var(--accent);
}
.kontakt-seite .info-card__label {
font-size: 0.7rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--text-muted);
margin-bottom: 4px;
}
.kontakt-seite .info-card a,
.kontakt-seite .info-card p {
color: var(--text-primary);
font-weight: 500;
text-decoration: none;
margin: 0;
}
.kontakt-seite .info-card a:hover {
color: var(--accent);
}
.kontakt-seite .info-card p small,
.kontakt-seite .info-card p.info-sub {
display: block;
font-size: 0.85rem;
font-weight: 400;
color: var(--text-muted);
}
/* ---------- Socials ---------- */
.kontakt-seite .socials {
display: flex;
gap: 12px;
}
.kontakt-seite .socials a {
display: grid;
place-items: center;
width: 44px;
height: 44px;
border-radius: 10px;
border: 1px solid var(--border);
background: rgba(255, 255, 255, 0.04);
color: var(--text-primary);
text-decoration: none;
font-weight: 600;
font-size: 0.8rem;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.kontakt-seite .socials a:hover {
border-color: var(--accent);
background: rgba(69, 151, 163, 0.12);
}
/* ---------- Standort / Karte ---------- */
.kontakt-seite .map-frame {
border-radius: calc(var(--radius) + 0.9rem);
border: 1px solid var(--border);
overflow: hidden;
height: 500px;
background: var(--background-panel);
}
.kontakt-seite .map-frame iframe {
display: block;
width: 100%;
height: 100%;
border: 0;
}
/* ---------- Footer ---------- */
.kontakt-seite .logo {
font-family: var(--font-display);
font-size: 1.35rem;
letter-spacing: -0.02em;
color: var(--text-muted);
text-decoration: none;
white-space: nowrap;
}
.kontakt-seite .logo span {
color: var(--accent);
}
.kontakt-seite .site-footer {
margin-top: 96px;
padding: 64px 0 40px;
border-top: 1px solid var(--border);
background: rgba(255, 255, 255, 0.015);
}
.kontakt-seite .footer-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
gap: 48px;
}
.kontakt-seite .footer-brand p {
color: var(--text-muted);
font-size: 0.95rem;
max-width: 340px;
margin-top: 14px;
}
.kontakt-seite .footer-col h3 {
font-size: 0.85rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--text-muted);
margin-bottom: 16px;
}
.kontakt-seite .footer-col ul {
list-style: none;
margin: 0;
padding: 0;
}
.kontakt-seite .footer-col a {
display: block;
padding: 5px 0;
color: var(--text-muted);
text-decoration: none;
font-size: 0.92rem;
transition: color 0.15s ease;
}
.kontakt-seite .footer-col a:hover {
color: var(--text-primary);
}
.kontakt-seite .footer-legal {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 12px;
margin-top: 48px;
padding-top: 24px;
border-top: 1px solid var(--border);
color: var(--text-muted);
font-size: 0.85rem;
}
.kontakt-seite .footer-legal a {
color: inherit;
text-decoration: none;
}
.kontakt-seite .footer-legal a:hover {
color: var(--text-primary);
}
/* ---------- Scroll-Reveal ---------- */
.kontakt-seite .reveal {
opacity: 0;
transform: translateY(18px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.kontakt-seite .reveal.visible {
opacity: 1;
transform: none;
}
/* ---------- Responsiv ---------- */
@media (max-width: 980px) {
.kontakt-seite .hero__grid,
.kontakt-seite .kontakt-grid {
grid-template-columns: minmax(0, 1fr);
}
.kontakt-seite .cards-3 {
grid-template-columns: minmax(0, 1fr);
}
.kontakt-seite .footer-grid {
grid-template-columns: 1fr 1fr;
}
}
@media (max-width: 760px) {
.kontakt-seite .section {
padding: 64px 0;
}
.kontakt-seite .hero {
padding: 56px 0 64px;
}
.kontakt-seite .footer-grid {
grid-template-columns: 1fr;
gap: 32px;
}
.kontakt-seite .map-frame {
height: 380px;
}
}
/* ---------- Reduzierte Bewegung ---------- */
@media (prefers-reduced-motion: reduce) {
.kontakt-seite {
scroll-behavior: auto;
}
.kontakt-seite .reveal {
opacity: 1;
transform: none;
transition: none;
}
.kontakt-seite,
.kontakt-seite * {
transition-duration: 0.01ms !important;
}
}