- Kopfleiste voll deckend, nichts scheint beim Scrollen durch - Leistungen: Überschrift bleibt links stehen, während die Liste vorbeizieht - langer Handy-Screenshot unten beschnitten (kein schwarzer Streifen am Ende) - Titel, Beschreibung, og/twitter nach Spezifikation 6.5; canonical je Route - Über uns ohne alte Versprechen, nur belegte Aussagen - Schrittzeile neutral benannt, Tippflächen 44 px, Navigation als eigenes Modul Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
333 lines
7.8 KiB
CSS
333 lines
7.8 KiB
CSS
/*
|
|
* Abschnitt Kundenportal (Spezifikation 7.2).
|
|
* Bewegung: nur transform und opacity, alles hinter prefers-reduced-motion: no-preference,
|
|
* der Grundzustand ist statisch und vollständig sichtbar. Hover nur mit Maus.
|
|
* Vorfahren der sticky-Bühne nutzen kein overflow: hidden (8.4).
|
|
*/
|
|
|
|
.kp {
|
|
/* Länge eines Funktionsschritts auf der Bühne; fünf davon plus der letzte Schritt ergeben die Scrollstrecke */
|
|
--kp-s: 45svh;
|
|
--kp-ende: 120svh;
|
|
--kp-oben: calc(var(--header-h) + 24px);
|
|
--kp-buehne-h: calc(100svh - var(--header-h) - 48px);
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.kp {
|
|
/* nichts bewegt sich im letzten Schritt, also braucht er keine lange Strecke */
|
|
--kp-ende: 50svh;
|
|
}
|
|
}
|
|
|
|
.kp__kopf {
|
|
margin-bottom: clamp(40px, 5vw, 72px);
|
|
}
|
|
.kp__kopf .wk-h2 {
|
|
max-width: none;
|
|
}
|
|
.kp-satz {
|
|
display: block;
|
|
}
|
|
|
|
/* ── Desktop-Bühne (ab 900 px) ────────────────────────────────────────── */
|
|
|
|
.kp-huelle {
|
|
position: relative;
|
|
height: calc(var(--kp-buehne-h) + 5 * var(--kp-s) + var(--kp-ende));
|
|
}
|
|
|
|
/* unsichtbare Spur aus Markern: der IntersectionObserver beobachtet sie, die Bühne klebt darüber */
|
|
.kp-spur {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
pointer-events: none;
|
|
}
|
|
.kp-marker {
|
|
flex: 0 0 var(--kp-s);
|
|
}
|
|
/* Die erste Marke reicht bis zur Mitte des Bildschirms, wenn die Bühne anklebt: Schritt 1 ist beim Ankommen aktiv */
|
|
.kp-marker:first-child {
|
|
flex-basis: calc(50svh - var(--kp-oben) + var(--kp-s));
|
|
}
|
|
.kp-marker:last-child {
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.kp-buehne {
|
|
position: sticky;
|
|
top: var(--kp-oben);
|
|
height: var(--kp-buehne-h);
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.kp-buehne__innen {
|
|
display: grid;
|
|
grid-template-columns: minmax(250px, 300px) minmax(0, 1fr);
|
|
gap: clamp(32px, 5vw, 64px);
|
|
align-items: center;
|
|
}
|
|
|
|
/* Liste der Funktionen */
|
|
.kp-liste {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
.kp-eintrag {
|
|
position: relative;
|
|
display: block;
|
|
width: 100%;
|
|
min-height: 44px;
|
|
padding: 10px 0;
|
|
text-align: left;
|
|
color: var(--fg-muted);
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
.kp-eintrag__titel {
|
|
display: block;
|
|
font-size: 1.375rem;
|
|
font-weight: 600;
|
|
line-height: 1.2;
|
|
letter-spacing: -0.01em;
|
|
transition: color var(--dur-state) var(--ease);
|
|
}
|
|
.kp-eintrag__text {
|
|
display: block;
|
|
margin-top: 4px;
|
|
font-size: 0.9375rem;
|
|
line-height: 1.4;
|
|
text-wrap: pretty;
|
|
}
|
|
.kp-eintrag[aria-current="step"] .kp-eintrag__titel {
|
|
color: var(--fg);
|
|
}
|
|
/* kleiner roter Punkt als Marker der aktiven Funktion (hängt im Rand links vom Text) */
|
|
.kp-eintrag__punkt {
|
|
position: absolute;
|
|
left: -20px;
|
|
top: 19px;
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
background: var(--accent);
|
|
opacity: 0;
|
|
transform: scale(0.4);
|
|
}
|
|
.kp-eintrag[aria-current="step"] .kp-eintrag__punkt {
|
|
opacity: 1;
|
|
transform: none;
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.kp-eintrag__punkt {
|
|
transition:
|
|
opacity var(--dur-state) var(--ease),
|
|
transform var(--dur-state) var(--ease);
|
|
}
|
|
}
|
|
@media (hover: hover) and (pointer: fine) {
|
|
.kp-eintrag:hover .kp-eintrag__titel {
|
|
color: var(--fg);
|
|
}
|
|
}
|
|
/* niedrige Fenster: die Liste wird enger, damit sie in die Bühne passt (Text bleibt mindestens 14 px) */
|
|
@media (max-height: 800px) {
|
|
.kp-liste {
|
|
gap: 2px;
|
|
}
|
|
.kp-eintrag {
|
|
padding: 6px 0;
|
|
}
|
|
.kp-eintrag__titel {
|
|
font-size: 1.25rem;
|
|
}
|
|
.kp-eintrag__text {
|
|
margin-top: 2px;
|
|
font-size: var(--fs-small);
|
|
}
|
|
.kp-eintrag__punkt {
|
|
top: 15px;
|
|
}
|
|
}
|
|
/* sehr niedrige Fenster: nur die aktive Funktion zeigt ihre Unterschrift */
|
|
@media (max-height: 620px) {
|
|
.kp-eintrag:not([aria-current="step"]) .kp-eintrag__text {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* Geräte: Desktop-Fenster mit überlappendem Handy-Rahmen unten rechts */
|
|
.kp-geraete {
|
|
/* Breite so, dass die Geräte nie höher werden als die Bühne (Seitenverhältnis 100 : 95) */
|
|
width: min(100%, calc((var(--kp-buehne-h) - 8px) / 0.95));
|
|
aspect-ratio: 100 / 95;
|
|
justify-self: end;
|
|
position: relative;
|
|
/* Bezugsgröße (cqw) für die Verschiebung des Handys im letzten Schritt */
|
|
container-type: inline-size;
|
|
}
|
|
.kp-fenster {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 94%;
|
|
}
|
|
.kp-handy {
|
|
position: absolute;
|
|
right: 0;
|
|
bottom: 0;
|
|
width: 30%;
|
|
}
|
|
|
|
/* Ebenen, die per Überblendung wechseln (nur die aktive ist sichtbar) */
|
|
.kp-ebenen {
|
|
position: absolute;
|
|
inset: 0;
|
|
}
|
|
.kp-lage {
|
|
position: absolute;
|
|
inset: 0;
|
|
opacity: 0;
|
|
}
|
|
.kp-lage.is-aktiv {
|
|
opacity: 1;
|
|
}
|
|
.kp-lage img {
|
|
display: block;
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
/* Schritt 6 "Als App": Fenster blendet aus, das Handy rückt in die Mitte und wird größer.
|
|
Ohne reduzierte Bewegung geschieht das weich, sonst wird einfach getauscht. */
|
|
.kp-buehne[data-app="ja"] .kp-fenster {
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
.kp-buehne[data-app="ja"] .kp-handy {
|
|
transform: translate(-35cqw, -16.75cqw) scale(1.5);
|
|
}
|
|
|
|
/* Der lange Screenshot: gleiche Breite wie der Schirm, 67,66 % seiner Höhe wandern aus dem Bild
|
|
((5219 - 1688) / 5219). Die Verschiebung hängt am Scrollfortschritt (--kp-q), kein eigener Scrollbereich. */
|
|
.kp-lang {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
}
|
|
.kp-lang img {
|
|
display: block;
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.kp-lage,
|
|
.kp-fenster {
|
|
transition: opacity var(--dur-enter) var(--ease);
|
|
}
|
|
.kp-handy {
|
|
transition: transform var(--dur-enter) var(--ease);
|
|
}
|
|
.kp-buehne .kp-lang {
|
|
transform: translateY(calc(var(--kp-q, 0) * -67.66%));
|
|
}
|
|
/* die große Ebene nur im letzten Schritt auf die Grafikkarte legen */
|
|
.kp-buehne[data-app="ja"] .kp-lang {
|
|
will-change: transform;
|
|
}
|
|
}
|
|
|
|
/* ── Handy: Wisch-Reihe (unter 900 px) ─────────────────────────────────── */
|
|
|
|
.kp-karte {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
text-align: center;
|
|
}
|
|
.kp-karte__handy {
|
|
width: min(100%, 250px);
|
|
margin-bottom: 1.5rem;
|
|
}
|
|
.kp-karte__titel {
|
|
margin-bottom: 0.35rem;
|
|
}
|
|
.kp-karte__text {
|
|
max-width: 26ch;
|
|
}
|
|
|
|
/* "Als App": der lange Screenshot schiebt sich langsam nach oben, solange die Karte zu sehen ist */
|
|
/* (.kp-lang liegt absolut im Schirm; was unten herausragt, schneidet der Rahmen ab) */
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.kp-karte .kp-lang {
|
|
animation: kp-hoch 18s linear both paused;
|
|
}
|
|
.kp-karte[data-sichtbar="ja"] .kp-lang {
|
|
animation-play-state: running;
|
|
}
|
|
}
|
|
@keyframes kp-hoch {
|
|
0%,
|
|
6% {
|
|
transform: translateY(0);
|
|
}
|
|
100% {
|
|
transform: translateY(-67.66%);
|
|
}
|
|
}
|
|
|
|
/* ── Schrittzeile ──────────────────────────────────────────────────────── */
|
|
|
|
.kp-schritte {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 0 clamp(24px, 3vw, 40px);
|
|
margin-top: clamp(24px, 3vw, 40px);
|
|
}
|
|
.kp-schritt {
|
|
padding-top: 1.1rem;
|
|
border-top: 1px solid var(--line-strong);
|
|
}
|
|
.kp-schritt__nr {
|
|
display: block;
|
|
margin-bottom: 0.4rem;
|
|
font-size: var(--fs-small);
|
|
font-weight: 600;
|
|
line-height: 1.2;
|
|
color: var(--fg-muted);
|
|
}
|
|
.kp-schritt__text {
|
|
display: block;
|
|
font-size: 1.1875rem;
|
|
line-height: 1.3;
|
|
color: var(--fg);
|
|
text-wrap: balance;
|
|
}
|
|
|
|
/* Handy: vier kleine Karten in einer Wisch-Reihe */
|
|
.kp-schritte-handy {
|
|
margin-top: clamp(40px, 10vw, 64px);
|
|
}
|
|
.kp-schritte-reihe .wk-wisch__karte {
|
|
flex-basis: 62vw;
|
|
max-width: 250px;
|
|
}
|
|
.kp-schritt-karte {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
gap: 1.5rem;
|
|
height: 100%;
|
|
min-height: 132px;
|
|
padding: 1.25rem;
|
|
border-radius: 18px;
|
|
background: var(--bg);
|
|
}
|
|
.kp-schritt-karte .kp-schritt__nr {
|
|
margin-bottom: 0;
|
|
}
|