trihub-ernaehrung-advinters/css/terminbuchung.css

934 lines
20 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.

/* Online-Terminbuchung – zwei Bereiche:
1. .tb-overlay & Co.: Kalender-Pop-up auf der Startseite (index.html).
2. .terminbuchung-seite: Buchungsformular-Seite (html/terminbuchung.html),
Tokens und Formular-Styles entsprechen css/kontakt.css. */
/* =========================================================
1. Terminbuchungs-Pop-up (Kalender) auf der Startseite
========================================================= */
.tb-overlay {
--background-panel: #152027;
--text-primary: #ffffff;
--text-muted: #9ba7aa;
--accent: #4597A3;
--border: rgba(234, 8, 8, 0.1);
--font-display: "Sora", sans-serif;
--font-body: "DM Sans", Arial, Helvetica, sans-serif;
--radius: 1.1rem;
position: fixed;
inset: 0;
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
background: rgb(7 20 25 / 72%);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
}
.tb-overlay[hidden] {
display: none;
}
.tb-dialog {
position: relative;
width: min(560px, 100%);
max-height: calc(100vh - 48px);
overflow-y: auto;
background-color: var(--background-panel);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: calc(var(--radius) + 0.4rem);
box-shadow: 0 30px 90px rgb(0 0 0 / 45%);
padding: 28px;
color: var(--text-primary);
font-family: var(--font-body);
line-height: 1.6;
}
.tb-close {
position: absolute;
top: 14px;
right: 14px;
display: grid;
place-items: center;
width: 36px;
height: 36px;
border: 1px solid var(--border);
border-radius: 10px;
background: rgb(255 255 255 / 4%);
color: var(--text-primary);
font-size: 1.1rem;
line-height: 1;
cursor: pointer;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.tb-close:hover,
.tb-close:focus-visible {
border-color: var(--accent);
background: rgb(69 151 163 / 14%);
}
.tb-kicker {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--accent);
margin-bottom: 10px;
}
.tb-kicker::before {
content: "";
width: 24px;
height: 2px;
border-radius: 2px;
background: var(--accent);
}
.tb-title {
margin: 0 0 6px;
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 600;
letter-spacing: -0.02em;
}
.tb-subtitle {
margin: 0 0 20px;
font-size: 0.9rem;
color: var(--text-muted);
}
/* ---------- Trainer-Auswahl ---------- */
.tb-trainer-label {
display: block;
font-size: 0.85rem;
font-weight: 600;
margin-bottom: 10px;
}
.tb-trainer {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 22px;
}
.tb-trainer-btn {
padding: 9px 16px;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.14);
background: rgb(255 255 255 / 4%);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 0.9rem;
font-weight: 600;
cursor: pointer;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.tb-trainer-btn:hover {
border-color: var(--accent);
}
.tb-trainer-btn.is-active {
border-color: var(--accent);
background: rgb(69 151 163 / 18%);
}
/* ---------- Kalender ---------- */
.tb-cal-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 12px;
}
.tb-cal-month {
font-family: var(--font-display);
font-size: 1rem;
font-weight: 600;
}
.tb-cal-nav {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: 9px;
border: 1px solid rgba(255, 255, 255, 0.14);
background: rgb(255 255 255 / 4%);
color: var(--text-primary);
font-size: 1.05rem;
cursor: pointer;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.tb-cal-nav:hover:not(:disabled) {
border-color: var(--accent);
background: rgb(69 151 163 / 14%);
}
.tb-cal-nav:disabled {
opacity: 0.35;
cursor: not-allowed;
}
.tb-cal-weekdays,
.tb-cal-grid {
display: grid;
grid-template-columns: repeat(7, minmax(0, 1fr));
gap: 6px;
}
.tb-cal-weekdays span {
text-align: center;
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-muted);
padding-bottom: 4px;
}
.tb-day {
position: relative;
display: grid;
place-items: center;
min-height: 44px;
border-radius: 10px;
border: 1px solid transparent;
background: transparent;
font-family: var(--font-body);
font-size: 0.88rem;
color: var(--text-primary);
cursor: pointer;
transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
/* Leere Zellen vor dem ersten bzw. nach dem letzten Tag des Monats */
.tb-day--leer {
visibility: hidden;
pointer-events: none;
}
/* Verfügbarkeitskategorien */
.tb-day--verfuegbar {
background: rgb(34 197 94 / 12%);
border-color: rgb(34 197 94 / 40%);
}
.tb-day--verfuegbar:hover,
.tb-day--verfuegbar:focus-visible {
background: rgb(34 197 94 / 22%);
border-color: rgb(34 197 94 / 70%);
}
.tb-day--nicht {
color: rgb(255 255 255 / 26%);
background: rgb(255 255 255 / 3%);
cursor: default;
}
/* Heute: dezent markiert, ohne die Kategorie zu verdecken */
.tb-day--heute {
font-weight: 700;
box-shadow: inset 0 -2px 0 0 var(--accent);
}
/* Ausgewählter Tag */
.tb-day--ausgewaehlt {
background: var(--accent);
border-color: var(--accent);
color: #03242b;
font-weight: 700;
}
/* ---------- Legende ---------- */
.tb-legend {
display: flex;
flex-wrap: wrap;
gap: 18px;
list-style: none;
margin: 14px 0 0;
padding: 0;
font-size: 0.82rem;
color: var(--text-muted);
}
.tb-legend li {
display: inline-flex;
align-items: center;
gap: 7px;
}
.tb-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.tb-dot--verfuegbar {
background: #22c55e;
}
.tb-dot--nicht {
background: rgb(255 255 255 / 22%);
}
/* ---------- Uhrzeiten des gewählten Tages ---------- */
.tb-times {
margin-top: 20px;
padding-top: 18px;
border-top: 1px solid var(--border);
}
.tb-times-label {
margin: 0 0 12px;
font-size: 0.9rem;
color: var(--text-muted);
}
.tb-times-label strong {
color: var(--text-primary);
}
.tb-time-chips {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.tb-time-chip {
padding: 8px 16px;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.16);
background: rgb(255 255 255 / 4%);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 0.9rem;
font-weight: 600;
cursor: pointer;
transition: border-color 0.15s ease, background-color 0.15s ease, color 0.15s ease;
}
.tb-time-chip:hover {
border-color: var(--accent);
}
.tb-time-chip.is-active {
background: var(--accent);
border-color: var(--accent);
color: #03242b;
}
/* ---------- Buchen-Button ---------- */
.tb-book {
display: block;
width: 100%;
margin-top: 22px;
padding: 0.85rem 1.5rem;
border-radius: 999px;
border: none;
background: var(--accent);
color: #03242b;
font-family: var(--font-body);
font-size: 0.98rem;
font-weight: 600;
cursor: pointer;
transition: transform 0.18s ease, box-shadow 0.18s ease, opacity 0.18s ease;
}
.tb-book:hover:not(:disabled) {
transform: translateY(-1px);
box-shadow: 0 10px 28px rgb(0 179 194 / 28%);
}
.tb-book:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.tb-hinweis {
margin: 12px 0 0;
font-size: 0.78rem;
color: var(--text-muted);
}
/* =========================================================
2. Buchungsformular-Seite (html/terminbuchung.html)
========================================================= */
.terminbuchung-seite {
/* Farben – Tokens von tri-hub.de (wie css/kontakt.css) */
--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 ---------- */
.terminbuchung-seite,
.terminbuchung-seite *,
.terminbuchung-seite::before,
.terminbuchung-seite *::before,
.terminbuchung-seite::after,
.terminbuchung-seite *::after {
box-sizing: border-box;
}
.terminbuchung-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 */
.terminbuchung-seite::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background:
radial-gradient(900px 520px at 78% -10%, rgb(0 179 194 / 13%), transparent 65%),
radial-gradient(700px 480px at -10% 30%, rgb(35 137 148 / 10%), transparent 60%),
radial-gradient(600px 420px at 90% 95%, rgb(247 194 48 / 5%), transparent 60%);
pointer-events: none;
}
.terminbuchung-seite h1,
.terminbuchung-seite h2,
.terminbuchung-seite h3 {
margin-top: 0;
font-family: var(--font-display);
color: var(--text-primary);
line-height: 1.2;
letter-spacing: -0.01em;
}
.terminbuchung-seite p {
margin: 0 0 1em;
}
.terminbuchung-seite .container {
width: min(100% - 48px, var(--container));
margin-inline: auto;
}
/* ---------- Typo-Helfer ---------- */
.terminbuchung-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;
}
.terminbuchung-seite .kicker::before {
content: "";
width: 28px;
height: 2px;
border-radius: 2px;
background: var(--accent);
}
.terminbuchung-seite .lead {
font-size: 1.15rem;
color: var(--text-muted);
max-width: 660px;
}
/* Die Navigationsleiste oben wird von css/navigation.css gestylt (.site-navigation). */
/* ---------- Kopfzeile / Hero ---------- */
.terminbuchung-seite .hero {
padding: 72px 0 56px;
}
.terminbuchung-seite .hero h1 {
font-size: clamp(2.2rem, 5vw, 3.2rem);
font-weight: 500;
letter-spacing: -0.04em;
margin-bottom: 16px;
}
.terminbuchung-seite .hero__text {
font-size: 1.1rem;
color: var(--text-muted);
max-width: 640px;
}
/* ---------- Sektionen ---------- */
.terminbuchung-seite .section {
padding: 56px 0 88px;
}
.terminbuchung-seite .section + .section {
border-top: 1px solid var(--border);
}
.terminbuchung-seite .section h2 {
font-size: clamp(1.7rem, 3.5vw, 2.4rem);
margin-bottom: 16px;
}
/* ---------- Termin-Zusammenfassung ---------- */
.tb-summary {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 20px;
margin-top: 32px;
}
.tb-summary__item {
background-color: var(--background-panel);
border: 1px solid var(--border);
border-radius: calc(var(--radius) + 0.4rem);
padding: 22px;
}
.tb-summary__label {
display: block;
font-size: 0.7rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--text-muted);
margin-bottom: 8px;
}
.tb-summary__value {
font-family: var(--font-display);
font-size: 1.05rem;
font-weight: 600;
color: var(--text-primary);
margin: 0;
}
/* Hinweis, wenn die Seite ohne Termin-Parameter geöffnet wurde */
.tb-summary--fehlend {
grid-template-columns: minmax(0, 1fr);
}
.tb-summary--fehlend .tb-summary__item {
border-color: rgb(247 194 48 / 45%);
background: rgb(247 194 48 / 6%);
}
.tb-summary--fehlend a {
color: var(--accent);
}
/* ---------- Formular ---------- */
.terminbuchung-seite form {
margin-top: 32px;
display: grid;
gap: 20px;
}
.terminbuchung-seite .field label {
display: block;
font-size: 0.9rem;
font-weight: 500;
color: var(--text-primary);
margin-bottom: 8px;
}
.terminbuchung-seite .field input,
.terminbuchung-seite .field select,
.terminbuchung-seite .field textarea {
width: 100%;
padding: 12px 16px;
border-radius: 10px;
border: 1px solid var(--border);
background: rgb(255 255 255 / 4%);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 0.95rem;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.terminbuchung-seite .field input::placeholder,
.terminbuchung-seite .field textarea::placeholder {
color: rgb(255 255 255 / 40%);
}
.terminbuchung-seite .field input:focus,
.terminbuchung-seite .field select:focus,
.terminbuchung-seite .field textarea:focus {
outline: none;
border-color: var(--accent);
background: rgb(255 255 255 / 6%);
}
.terminbuchung-seite .field select option {
background: #0b1a20;
color: var(--text-primary);
}
.terminbuchung-seite .field textarea {
min-height: 110px;
resize: vertical;
}
/* terminbuchung-form.js setzt die Zustandsklassen für ungültige Felder und Rückmeldungen. */
.terminbuchung-seite .field input.invalid,
.terminbuchung-seite .field select.invalid,
.terminbuchung-seite .field textarea.invalid {
border-color: #ef4444;
}
.terminbuchung-seite .field input.valid,
.terminbuchung-seite .field textarea.valid {
border-color: #22c55e;
}
.terminbuchung-seite .field__error {
display: none;
margin-top: 6px;
font-size: 0.8rem;
color: #f87171;
}
.terminbuchung-seite .field__hint {
margin-top: 6px;
font-size: 0.8rem;
color: var(--text-muted);
}
.terminbuchung-seite .field.has-error .field__error {
display: block;
}
/* ---------- Anamnese-Tags (Allergien & Unverträglichkeiten) ---------- */
.tb-tag-row {
display: flex;
gap: 10px;
}
.tb-tag-row input {
flex: 1;
}
.tb-tag-add {
flex-shrink: 0;
padding: 0 18px;
border-radius: 10px;
border: 1px solid var(--accent);
background: rgb(69 151 163 / 14%);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 0.9rem;
font-weight: 600;
cursor: pointer;
transition: background-color 0.15s ease, border-color 0.15s ease;
}
.tb-tag-add:hover {
background: rgb(69 151 163 / 28%);
}
.tb-tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
list-style: none;
margin: 10px 0 0;
padding: 0;
}
.tb-tags:empty {
display: none;
}
.tb-tag {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 5px 12px;
border-radius: 999px;
background: rgb(69 151 163 / 16%);
border: 1px solid rgb(69 151 163 / 45%);
font-size: 0.85rem;
color: var(--text-primary);
}
.tb-tag button {
display: grid;
place-items: center;
width: 18px;
height: 18px;
border: none;
border-radius: 50%;
background: rgb(255 255 255 / 12%);
color: var(--text-primary);
font-size: 0.7rem;
line-height: 1;
cursor: pointer;
transition: background-color 0.15s ease;
}
.tb-tag button:hover {
background: rgb(239 68 68 / 60%);
}
/* ---------- Button ---------- */
.terminbuchung-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;
}
.terminbuchung-seite .btn-accent {
background: var(--accent);
color: #03242b;
}
.terminbuchung-seite .btn-accent:hover:not(:disabled) {
transform: translateY(-1px);
box-shadow: 0 10px 28px rgb(0 179 194 / 28%);
}
.terminbuchung-seite .btn-block {
width: 100%;
}
.terminbuchung-seite .btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.terminbuchung-seite .form-status {
display: none;
font-size: 0.9rem;
}
.terminbuchung-seite .form-status.is-visible {
display: block;
}
.terminbuchung-seite .form-status--ok {
color: #4ade80;
}
.terminbuchung-seite .form-status--error {
color: #f87171;
}
/* ---------- Footer ---------- */
.terminbuchung-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;
}
.terminbuchung-seite .logo span {
color: var(--accent);
}
.terminbuchung-seite .site-footer {
margin-top: 0;
padding: 64px 0 40px;
border-top: 1px solid var(--border);
background: rgb(255 255 255 / 1.5%);
}
.terminbuchung-seite .footer-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
gap: 48px;
}
.terminbuchung-seite .footer-brand p {
color: var(--text-muted);
font-size: 0.95rem;
max-width: 340px;
margin-top: 14px;
}
.terminbuchung-seite .footer-col h3 {
font-size: 0.85rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--text-muted);
margin-bottom: 16px;
}
.terminbuchung-seite .footer-col ul {
list-style: none;
margin: 0;
padding: 0;
}
.terminbuchung-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;
}
.terminbuchung-seite .footer-col a:hover {
color: var(--text-primary);
}
.terminbuchung-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;
}
.terminbuchung-seite .footer-legal a {
color: inherit;
text-decoration: none;
}
.terminbuchung-seite .footer-legal a:hover {
color: var(--text-primary);
}
/* ---------- Scroll-Reveal ---------- */
.terminbuchung-seite .reveal {
opacity: 0;
transform: translateY(18px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.terminbuchung-seite .reveal.visible {
opacity: 1;
transform: none;
}
/* ---------- Responsiv ---------- */
@media (max-width: 980px) {
.terminbuchung-seite .tb-summary {
grid-template-columns: minmax(0, 1fr);
}
.terminbuchung-seite .footer-grid {
grid-template-columns: 1fr 1fr;
}
}
@media (max-width: 760px) {
.terminbuchung-seite .section {
padding: 48px 0 64px;
}
.terminbuchung-seite .hero {
padding: 56px 0 48px;
}
.terminbuchung-seite .footer-grid {
grid-template-columns: 1fr;
gap: 32px;
}
}
/* Pop-up auf schmalen Bildschirmen */
@media (max-width: 560px) {
.tb-overlay {
padding: 12px;
align-items: stretch;
}
.tb-dialog {
max-height: calc(100vh - 24px);
padding: 22px 18px;
}
.tb-day {
min-height: 38px;
font-size: 0.8rem;
}
}
/* ---------- Reduzierte Bewegung ---------- */
@media (prefers-reduced-motion: reduce) {
.terminbuchung-seite {
scroll-behavior: auto;
}
.terminbuchung-seite .reveal {
opacity: 1;
transform: none;
transition: none;
}
.terminbuchung-seite,
.terminbuchung-seite *,
.tb-overlay,
.tb-overlay * {
transition-duration: 0.01ms !important;
}
}