/* Alpasana-Designsystem (.alp-*) fuer Coaching-Planet. Basis: Alpasana-Webstandard. */

:root {
    --alp-blue: #269CD9;
    --alp-blue-bright: #2EA3F2;
    --alp-blue-dark: #1C7CB0;
    --alp-dark: #232434;
    --alp-dark-2: #2C2D40;
    --alp-heading: #232434;
    --alp-text: #6E7077;
    --alp-muted: #9AA0A6;
    --alp-bg: #FFFFFF;
    --alp-bg-soft: #F5F7FA;
    --alp-border: #E6E9EF;

    --alp-font-head: 'Rajdhani', 'Segoe UI', sans-serif;
    --alp-font-body: 'Rubik', 'Segoe UI', Arial, sans-serif;
    --alp-font-display: 'Squada One', 'Rajdhani', sans-serif;

    --alp-radius: 6px;
    --alp-radius-lg: 14px;
    --alp-shadow: 0 10px 30px rgba(35, 36, 52, .10);
    --alp-shadow-sm: 0 4px 14px rgba(35, 36, 52, .07);
    --alp-container: 1200px;
    --alp-container-kopf: 1320px;
    --alp-font-kopf: 'Rajdhani', 'Alp-Kopf-Ersatz', 'Segoe UI', sans-serif;
    --alp-transition: .2s ease;

    /* Coaching-Planet-eigener Akzent: warmes "Stern"-Gold als Gegenpol zum kuehlen Blau.
       Bewusst sparsam einsetzen - Icons, Zahlen, Hover-Momente, nie fuer Flaechen. */
    --alp-accent: #E9A23B;
    --alp-accent-dark: #B87A1E;
    --alp-accent-soft: rgba(233, 162, 59, .14);
}

* { box-sizing: border-box; }

/* Jede Seite endet mit dem dunklen .alp-footer - ohne eigene Hintergrundfarbe auf <html>
   zeigt der Bounce-/Overscroll-Effekt (Touchpad, Touch, manche Mausraeder) hinter dem
   Dokumentende kurz Weiss statt einer Fortsetzung des Footers. Betrifft nur Seiten mit
   diesem Stylesheet (admin/konto bleiben unberuehrt, binden es nicht ein). */
html { background: var(--alp-dark); }

.alp body, body.alp {
    margin: 0;
    font-family: var(--alp-font-body);
    color: var(--alp-text);
    line-height: 1.7;
    background: var(--alp-bg);
    -webkit-font-smoothing: antialiased;
}

.alp h1, .alp h2, .alp h3, .alp h4, .alp-h1, .alp-h2 {
    font-family: var(--alp-font-head);
    color: var(--alp-heading);
    font-weight: 700;
    line-height: 1.2;
    margin: 0 0 .5em;
}

.alp-uppercase { text-transform: uppercase; letter-spacing: .04em; }
.alp a { color: var(--alp-blue-dark); text-decoration: none; transition: color var(--alp-transition); }
.alp a:hover { color: var(--alp-blue); }

.alp-container { max-width: var(--alp-container); margin: 0 auto; padding: 0 20px; }
/* Kopfbereich (Kontaktleiste + Kopfzeile) laeuft bewusst breiter als der Inhalt darunter:
   Logo, sieben Navigationspunkte und zwei Schaltflaechen passen sonst nicht nebeneinander,
   sobald die Webschrift Rajdhani fehlt und der breitere Systemfont einspringt. Beide Baender
   teilen sich die Breite, damit sie untereinander buendig bleiben. */
.alp-topbar .alp-container, .alp-header .alp-container { max-width: var(--alp-container-kopf); }

/* Topbar */
.alp-topbar { background: var(--alp-dark); color: #C7CAD6; font-size: .85rem; padding: 8px 0; }
.alp-topbar .alp-container { display: flex; justify-content: flex-end; gap: 28px; }
.alp-topbar a { color: #C7CAD6; }
.alp-topbar a:hover { color: #fff; }
.alp-topbar .alp-ico { opacity: .8; }

/* Ersatzschrift, nur fuer die Kopfzeile.
   Rajdhani ist schmal laufend; die Systemschriften, die einspringen solange Rajdhani noch
   laedt oder blockiert ist, sind es nicht: Segoe UI braucht rund 18% mehr Breite, DejaVu Sans
   auf Linux rund 33%. Das reicht, um die volle Kopfzeile ueberlaufen zu lassen. size-adjust
   normiert die Ersatzschrift auf Rajdhanis Laufweite, dadurch bleibt die Breite stabil und der
   Wechsel auf die geladene Schrift springt kaum. Bewusst NUR fuer die Kopfzeile - die
   Ueberschriften der Seite sollen ihre normale Groesse behalten. */
@font-face {
    font-family: 'Alp-Kopf-Ersatz';
    src: local('Segoe UI'), local('Helvetica Neue'), local('Arial'), local('Liberation Sans'), local('DejaVu Sans');
    size-adjust: 85%;
}

/* Header */
.alp-header { background: #fff; border-bottom: 1px solid var(--alp-border); position: sticky; top: 0; z-index: 40; }
.alp-header .alp-container { display: flex; align-items: center; justify-content: space-between; min-height: 84px; gap: 14px; }
a.alp-logo { display: inline-flex; align-items: center; gap: 10px; min-width: 0; flex-shrink: 0; transition: transform var(--alp-transition); }
a.alp-logo:hover { transform: scale(1.03); }
.alp-logo img { height: 40px; display: block; }
.alp-logo-text {
    display: flex;
    flex-direction: column;
    gap: 3px;
    white-space: nowrap;
}
.alp-logo-title {
    font-family: var(--alp-font-kopf);
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1.1;
    color: var(--alp-heading);
    text-transform: uppercase;
    letter-spacing: .02em;
    transition: color var(--alp-transition);
}
.alp-logo:hover .alp-logo-title { color: var(--alp-blue); }
.alp-logo-title em { font-style: normal; color: var(--alp-blue); transition: color var(--alp-transition); }
.alp-logo:hover .alp-logo-title em { color: var(--alp-heading); }
.alp-logo-sub {
    display: block;
    font-family: var(--alp-font-kopf);
    font-size: .68rem;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--alp-blue-dark);
}

.ict-header-right { display: flex; align-items: center; gap: 18px; }
/* Abstaende bewusst knapp: Logo, sieben Navigationspunkte und zwei Schaltflaechen muessen
   im Kopfcontainer nebeneinander Platz finden. Ohne nowrap schrumpft Flexbox die Links
   und bricht die Beschriftungen mitten im Wort um ("Coach / finden"). Ausgeloggt kommt eine
   zweite Schaltflaeche ("Als Coach registrieren") dazu, darum sind Schriftgroesse/Abstaende
   hier knapper als sonst im Design. */
.alp-nav { display: flex; gap: 16px; }
.alp-nav a { font-family: var(--alp-font-kopf); font-weight: 600; color: var(--alp-heading); font-size: .88rem; position: relative; padding-bottom: 4px; white-space: nowrap; }
.alp-nav a:hover, .alp-nav a.active { color: var(--alp-blue-dark); }
.alp-nav a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 2px; background: var(--alp-blue-dark); transition: width .25s ease; }
.alp-nav a:hover::after, .alp-nav a.active::after { width: 100%; }
.ict-header-actions { display: flex; align-items: center; gap: 8px; }
.ict-header-actions .alp-btn { padding: 10px 16px; white-space: nowrap; font-family: var(--alp-font-kopf); font-size: .82rem; }

/* Vergleichen-Link im Header, Zaehler-Badge wird von assets/js/favorites.js befuellt. */
.alp-compare-link { display: inline-flex; align-items: center; gap: 6px; color: var(--alp-heading); }
.alp-compare-link .alp-icon { width: 20px; height: 20px; }
.alp-compare-link:hover { color: var(--alp-blue-dark); }
.alp-compare-link .alp-compare-count { font-family: var(--alp-font-kopf); font-weight: 600; color: var(--alp-accent-dark); }
.alp-compare-link.is-empty .alp-compare-count { display: none; }

.alp-nav-toggle { display: none; flex-direction: column; justify-content: center; gap: 5px; width: 40px; height: 40px; background: none; border: none; cursor: pointer; padding: 0; }
.alp-nav-toggle span { display: block; width: 24px; height: 2px; background: var(--alp-heading); border-radius: 2px; }
.alp-nav-close { display: none; }
.alp-nav-backdrop { display: none; }

/* Hero */
.alp-hero { position: relative; padding: 95px 0; background: var(--alp-dark) linear-gradient(135deg, var(--alp-dark), var(--alp-dark-2)); overflow: hidden; }
.alp-hero::before { content: ''; position: absolute; inset: 0; z-index: 1; background: linear-gradient(90deg, rgba(35,36,52,.92) 0%, rgba(35,36,52,.55) 65%, rgba(35,36,52,.25) 100%); }
.alp-hero::after {
    content: '';
    position: absolute; inset: -15%; z-index: 0;
    background-image:
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 800 600'%3E%3Cg fill='none' stroke='rgba(46,163,242,0.28)' stroke-width='1'%3E%3Cline x1='80' y1='120' x2='220' y2='60'/%3E%3Cline x1='220' y1='60' x2='340' y2='180'/%3E%3Cline x1='340' y1='180' x2='480' y2='90'/%3E%3Cline x1='480' y1='90' x2='620' y2='140'/%3E%3Cline x1='620' y1='140' x2='720' y2='60'/%3E%3Cline x1='140' y1='320' x2='300' y2='380'/%3E%3Cline x1='300' y1='380' x2='460' y2='340'/%3E%3Cline x1='460' y1='340' x2='600' y2='300'/%3E%3Cline x1='600' y1='300' x2='700' y2='380'/%3E%3Cline x1='180' y1='520' x2='380' y2='500'/%3E%3Cline x1='380' y1='500' x2='560' y2='520'/%3E%3Cline x1='340' y1='180' x2='300' y2='380'/%3E%3Cline x1='480' y1='90' x2='460' y2='340'/%3E%3Cline x1='620' y1='140' x2='600' y2='300'/%3E%3C/g%3E%3Cg fill='rgba(46,163,242,0.55)'%3E%3Ccircle cx='80' cy='120' r='3'/%3E%3Ccircle cx='220' cy='60' r='2.5'/%3E%3Ccircle cx='340' cy='180' r='3.5'/%3E%3Ccircle cx='480' cy='90' r='2.5'/%3E%3Ccircle cx='620' cy='140' r='3'/%3E%3Ccircle cx='720' cy='60' r='2.5'/%3E%3Ccircle cx='140' cy='320' r='2.5'/%3E%3Ccircle cx='300' cy='380' r='3'/%3E%3Ccircle cx='460' cy='340' r='2.5'/%3E%3Ccircle cx='600' cy='300' r='3.5'/%3E%3Ccircle cx='700' cy='380' r='2.5'/%3E%3Ccircle cx='180' cy='520' r='3'/%3E%3Ccircle cx='380' cy='500' r='2.5'/%3E%3Ccircle cx='560' cy='520' r='3'/%3E%3C/g%3E%3C/svg%3E"),
        radial-gradient(closest-side, rgba(38,156,217,.30) 0%, rgba(38,156,217,.12) 55%, transparent 100%),
        radial-gradient(closest-side, rgba(46,163,242,.20) 0%, rgba(46,163,242,.08) 55%, transparent 100%);
    background-repeat: no-repeat;
    background-size: cover, 45% 45%, 35% 35%;
    background-position: center, 12% 25%, 82% 70%;
    opacity: .85;
}
@media (prefers-reduced-motion: no-preference) {
    .alp-hero::after { animation: alp-hero-drift 24s ease-in-out infinite alternate, alp-hero-twinkle 5s ease-in-out infinite; }
    @keyframes alp-hero-drift {
        0% { transform: translate(0, 0) scale(1); }
        100% { transform: translate(2%, -2%) scale(1.04); }
    }
    @keyframes alp-hero-twinkle {
        0%, 100% { opacity: .8; }
        50% { opacity: 1; }
    }
}
.alp-hero .alp-container { position: relative; z-index: 2; }
.alp-hero-label { color: var(--alp-blue-bright); font-family: var(--alp-font-head); font-weight: 600; text-transform: uppercase; letter-spacing: .12em; font-size: .85rem; }
.alp-hero-label::before { content: '// '; }
.alp-hero h1 { color: #fff; font-size: clamp(2.4rem, 6vw, 4.5rem); text-transform: uppercase; margin: .3em 0 .4em; }
.alp-hero p { color: #C7CAD6; max-width: 560px; font-size: 1.15rem; }

/* Hero-Komposition: Text links, redaktionelle Bild-/Brand-Komposition rechts
   (55/60 - 40/45 auf Desktop). Auf Mobile faellt die Komposition weg, damit
   nichts abgeschnitten wirkt und die Textspalte volle Breite bekommt. */
.alp-hero-text { max-width: 620px; }
.alp-hero-visual { position: relative; display: none; height: 380px; }
@media (min-width: 900px) {
    .alp-hero-grid { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 40px; align-items: center; }
    .alp-hero-visual { display: block; }
}

.alp-hero-portrait {
    /* Kein overflow:hidden hier - das wuerde die Geprueft-Badge mit abschneiden, die bewusst
       ueber den Rand hinausragt (top/right: -6px, siehe .alp-hero-chip--check). Das Foto
       clippt sich stattdessen selbst rund (border-radius: inherit auf dem <img>). */
    position: absolute; display: block; margin: 0; border-radius: 50%;
    border: 3px solid rgba(255, 255, 255, .16);
    box-shadow: 0 20px 45px rgba(10, 11, 20, .4);
    transition: transform var(--alp-transition), border-color var(--alp-transition);
}
.alp-hero-portrait img { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: inherit; transition: transform .35s ease; }
a.alp-hero-portrait:hover, a.alp-hero-portrait:focus-visible {
    transform: translateY(-3px); border-color: var(--alp-accent);
}
a.alp-hero-portrait:hover img, a.alp-hero-portrait:focus-visible img { transform: scale(1.06); }
a.alp-hero-portrait:focus-visible { outline: 2px solid var(--alp-accent); outline-offset: 3px; }
.alp-hero-portrait--1 { width: 172px; height: 172px; top: 2%; left: 8%; z-index: 3; }
.alp-hero-portrait--2 { width: 130px; height: 130px; top: 48%; right: 2%; border-radius: 28px; z-index: 2; }
.alp-hero-portrait--3 { width: 100px; height: 100px; bottom: 0; left: 32%; z-index: 1; }

.alp-hero-chip {
    position: absolute; display: inline-flex; align-items: center; justify-content: center; gap: 4px;
    font-family: var(--alp-font-head); font-weight: 600; font-size: .7rem; letter-spacing: .03em;
    padding: 4px 10px; border-radius: 999px; white-space: nowrap;
    background: rgba(35, 36, 52, .88); color: #fff; border: 1px solid rgba(255, 255, 255, .15);
}
.alp-hero-chip--check { top: -6px; right: -6px; width: 24px; height: 24px; padding: 0; background: var(--alp-accent); color: var(--alp-dark); }
.alp-hero-chip--tag { bottom: -6px; left: 50%; transform: translateX(-50%); }

/* Verbindungslinien zwischen den Portraits - Element B der Grafiksprache (Route/Orbit). */
.alp-hero-visual::before {
    content: ''; position: absolute; inset: 10% 18%; z-index: 0; pointer-events: none;
    border: 1px solid rgba(255, 255, 255, .12); border-radius: 50%;
}

/* Abstrakte Variante, falls keine zwei echten Coach-Fotos verfuegbar sind (Hero-Fallback)
   oder wenn eine Seite bewusst keine Personen zeigen soll (coach-werden.php). Eigene
   Konstellation statt blossem Ring: grosser Ring, gestrichelter innerer Ring, drei Nodes
   mit Verbindungslinien in der Akzentfarbe - Elemente A/B/C der Grafiksprache in einem Bild. */
.alp-hero-visual--abstract::after {
    content: ''; position: absolute; inset: 4%; z-index: 0; pointer-events: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 400'%3E%3Ccircle cx='200' cy='200' r='150' fill='none' stroke='rgba(255,255,255,0.14)'/%3E%3Ccircle cx='200' cy='200' r='96' fill='none' stroke='rgba(233,162,59,0.4)' stroke-dasharray='3 6'/%3E%3Cg stroke='rgba(233,162,59,0.5)' stroke-width='1'%3E%3Cline x1='200' y1='50' x2='330' y2='260'/%3E%3Cline x1='330' y1='260' x2='90' y2='300'/%3E%3Cline x1='90' y1='300' x2='200' y2='50'/%3E%3C/g%3E%3Cg fill='%23E9A23B'%3E%3Ccircle cx='200' cy='50' r='5'/%3E%3Ccircle cx='330' cy='260' r='5'/%3E%3Ccircle cx='90' cy='300' r='5'/%3E%3C/g%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: center; background-size: 88% 88%;
}

/* Zusaetzliche einzelne Nodes, wo eine Seite eigene Akzentpunkte in der Grafik braucht
   (siehe coach-werden.php). Position wird per Inline-Style je Node gesetzt. */
.alp-hero-node {
    position: absolute; z-index: 1; width: 8px; height: 8px; border-radius: 50%;
    background: var(--alp-accent); box-shadow: 0 0 0 5px rgba(233, 162, 59, .16);
}

/* --- Vertrauens-Siegel: kreisfoermiges Emblem statt Fotokomposition (vertrauen.php) --- */
.alp-hero-visual--emblem { align-items: center; justify-content: center; }
@media (min-width: 900px) { .alp-hero-visual--emblem { display: flex; } }
.alp-emblem { position: relative; width: 230px; height: 230px; }
.alp-emblem::before {
    content: ''; position: absolute; inset: 0; border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, .16);
}
.alp-emblem::after {
    content: ''; position: absolute; inset: 20px; border-radius: 50%;
    border: 1px dashed rgba(233, 162, 59, .5);
}
.alp-emblem-icon { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.alp-emblem-icon .alp-icon { width: 62px; height: 62px; color: var(--alp-accent); stroke-width: 1.4; }

@media (prefers-reduced-motion: no-preference) {
    .alp-hero-portrait { opacity: 0; animation: alp-hero-portrait-in .7s ease both; }
    .alp-hero-portrait--1 { animation-delay: .05s; }
    .alp-hero-portrait--2 { animation-delay: .18s; }
    .alp-hero-portrait--3 { animation-delay: .3s; }
    @keyframes alp-hero-portrait-in {
        from { opacity: 0; transform: translateY(16px); }
        to { opacity: 1; transform: none; }
    }
}

/* Sections */
.alp-section { padding: 64px 0; }
.alp-section--tight-top { padding-top: 32px; }
.alp-section--soft { background: var(--alp-bg-soft); }
.alp-section--dark { background: var(--alp-dark); }
.alp-section--dark h2, .alp-section--dark h3, .alp-section--dark p { color: #fff; }
.alp-section--dark .alp-text, .alp-section--dark .alp-card p { color: #C7CAD6; }
/* inline-flex statt block, damit ein optionales Icon sauber neben dem Text sitzt;
   steht immer vor einem Block-Element und belegt darum weiterhin eine eigene Zeile. */
.alp-section-label { color: var(--alp-blue-dark); font-family: var(--alp-font-head); font-weight: 600; text-transform: uppercase; letter-spacing: .1em; font-size: .85rem; display: inline-flex; align-items: center; gap: 8px; margin-bottom: .5em; }
.alp-section-label .alp-icon { width: 18px; height: 18px; }
.alp-section--dark .alp-section-label { color: var(--alp-blue-bright); }
.alp-section-title { font-size: clamp(1.8rem, 4vw, 2.8rem); text-transform: uppercase; }

/* Buttons */
.alp-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-family: var(--alp-font-head); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; padding: 14px 32px; border-radius: var(--alp-radius); border: 2px solid transparent; cursor: pointer; font-size: .95rem; transition: all var(--alp-transition); position: relative; overflow: hidden; }
.alp-btn::after { content: ''; position: absolute; top: 0; left: -60%; width: 40%; height: 100%; background: linear-gradient(120deg, transparent, rgba(255,255,255,.4), transparent); transform: skewX(-20deg); transition: left .5s ease; pointer-events: none; }
.alp-btn:hover::after { left: 130%; }
/* BUGFIX (2026-08-06): "display: inline-flex" oben ueberschreibt sonst das native [hidden]-
   Verhalten (Autor-CSS schlaegt die eingebaute UA-Regel "[hidden]{display:none}") - betraf
   den "Weiter"-Button im Matching-Wizard auf Schritt 3, der trotz hidden-Attribut sichtbar
   blieb. Gilt fuer jedes .alp-btn, das per JS/HTML hidden gesetzt bekommt. */
.alp-btn[hidden] { display: none !important; }
.alp .alp-btn-primary { background: var(--alp-blue); color: #fff; border-color: var(--alp-blue); }
.alp .alp-btn-primary:hover { background: var(--alp-blue-dark); border-color: var(--alp-blue-dark); color: #fff; }
.alp .alp-btn-outline { background: transparent; color: var(--alp-blue-dark); border-color: var(--alp-blue-dark); }
.alp .alp-btn-outline:hover { background: var(--alp-blue-dark); color: #fff; }
.alp .alp-btn-light { background: #fff; color: var(--alp-dark); border-color: #fff; }
.alp .alp-btn-light:hover { background: transparent; color: #fff; }
.alp-btn:disabled { opacity: .5; cursor: not-allowed; }
.alp-btn:hover:not(:disabled) { transform: translateY(-2px); box-shadow: var(--alp-shadow); }

/* Cards / grid */
.alp-card { background: #fff; border: 1px solid var(--alp-border); border-radius: var(--alp-radius-lg); box-shadow: var(--alp-shadow-sm); padding: 30px; transition: transform var(--alp-transition), box-shadow var(--alp-transition); }
a.alp-card:hover, .alp-card--interactive:hover { transform: translateY(-4px); box-shadow: var(--alp-shadow); }
.alp-form-card { background: #fff; border: 1px solid var(--alp-border); border-radius: var(--alp-radius-lg); box-shadow: var(--alp-shadow-sm); padding: 34px; }
.alp-card h3 { text-transform: uppercase; font-size: 1.15rem; }
.alp-card p, .alp-card span:not(.alp-badge) { color: var(--alp-text); }

/* Versteckt fuer Sehende, bleibt fuer Screenreader lesbar - Standardmuster. */
.sr-only {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/* Coach-Karte: Akzentkante beim Hover (dasselbe Motiv wie .alp-topic::before), damit die
   Karten nicht mehr wie anonyme weisse Kisten wirken. */
.coach-card { position: relative; padding-top: 20px; overflow: hidden; }
.coach-card::before {
    content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
    background: linear-gradient(180deg, var(--alp-blue), var(--alp-accent));
    transform: scaleY(0); transform-origin: top; transition: transform .35s ease;
}
.coach-card:hover::before { transform: scaleY(1); }

.coach-card-photo-wrap { position: relative; display: inline-block; margin-bottom: 14px; }
.coach-card-photo {
    display: block; width: 84px; height: 84px; border-radius: 50%;
    background-color: var(--alp-bg-soft);
    border: 2px solid var(--alp-border);
    transition: transform .35s ease, border-color .35s ease;
    /* Das Foto ist ein <img>: object-fit uebernimmt hier die Rolle, die frueher
       background-size/-position hatten (mittiger Ausschnitt, Kopf nicht abgeschnitten). */
    object-fit: cover; object-position: center top;
}
.coach-card-photo--initials {
    display: flex; align-items: center; justify-content: center;
    font-family: var(--alp-font-head); font-weight: 700; font-size: 1.4rem;
    /* --alp-dark statt --alp-blue-dark: deutlich dunkler, damit die weissen Initialen auch
       bei kleiner Groesse sicher lesbar sind (Kontrast war zu niedrig). */
    color: #fff; background-color: var(--alp-dark);
}
.coach-card:hover .coach-card-photo { transform: scale(1.08); border-color: var(--alp-accent-soft); }

/* Geprueft-Siegel als kleiner Kreis auf dem Foto statt eigener Textzeile darueber -
   ruhigere Kopfzeile der Karte, gleiches Vorbild wie die Hero-Portrait-Chips. */
.coach-card-check {
    position: absolute; right: -2px; bottom: -2px; z-index: 1;
    width: 24px; height: 24px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: var(--alp-accent); color: var(--alp-dark);
    font-size: .75rem; font-weight: 700; line-height: 1;
    border: 2px solid #fff;
}

/* Farbiger Punkt vor "online" statt reinem Text - etwas Farbe in der sonst grauen Meta-Zeile. */
.coach-card-online {
    display: inline-flex; align-items: center; gap: 5px;
}
.coach-card-online::before {
    content: ''; width: 7px; height: 7px; border-radius: 50%;
    background: #3FAE6A; flex: none;
}

/* Sprachen + grobe Verfuegbarkeit unter der Headline (nur wenn ueber attachCardMeta() geladen). */
.coach-card-meta {
    display: flex; flex-wrap: wrap; gap: 3px 12px;
    margin: .5em 0 0; font-size: .8rem; color: var(--alp-muted); line-height: 1.45;
}
.coach-card-meta span { display: inline-flex; align-items: center; gap: 5px; }
.coach-card-meta .alp-icon { width: 13px; height: 13px; flex: none; color: var(--alp-blue-dark); }

/* Merken-Button (Merkliste ohne Login, siehe assets/js/favorites.js). Herz-Icon fuellt sich
   und wird golden, sobald der Coach gemerkt ist - .alp-icon nutzt currentColor/fill:none per
   Vorgabe, daher hier der fill:currentColor-Override nur fuer den aktiven Zustand. */
.coach-card-fav {
    position: absolute; top: 10px; right: 10px; z-index: 2;
    width: 34px; height: 34px; padding: 0; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: rgba(255, 255, 255, .92); border: 1px solid var(--alp-border);
    color: var(--alp-muted); cursor: pointer;
    transition: color var(--alp-transition), border-color var(--alp-transition), transform .2s ease;
}
.coach-card-fav .alp-icon { width: 17px; height: 17px; }
.coach-card-fav:hover { border-color: var(--alp-accent); color: var(--alp-accent); }
.coach-card-fav.is-fav { color: var(--alp-accent); border-color: var(--alp-accent); }
.coach-card-fav.is-fav .alp-icon { fill: currentColor; }
.coach-card-fav.pulse { animation: alp-fav-pulse .3s ease; }
@keyframes alp-fav-pulse { 50% { transform: scale(1.2); } }

.alp-counter { font-variant-numeric: tabular-nums; }

/* Scroll-Reveal: dezentes Einblenden beim Scrollen (per JS getriggert, siehe assets/interactions.js) */
@media (prefers-reduced-motion: no-preference) {
    .alp-reveal { opacity: 0; transform: translateY(24px); transition: opacity .6s ease, transform .6s ease; }
    .alp-reveal.is-visible { opacity: 1; transform: translateY(0); }
}

.alp-grid { display: grid; gap: 26px; }
.alp-grid-2 { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.alp-grid-3 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
.alp-grid-4 { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.alp-grid-5 { grid-template-columns: repeat(auto-fit, minmax(185px, 1fr)); }

/* Blog: Uebersichtskarten */
.alp-blog-card {
    display: flex; flex-direction: column; overflow: hidden;
    background: #fff; border: 1px solid var(--alp-border); border-radius: var(--alp-radius-lg);
    box-shadow: var(--alp-shadow-sm); color: inherit;
    transition: transform var(--alp-transition), box-shadow var(--alp-transition);
}
.alp-blog-card:hover { transform: translateY(-3px); box-shadow: var(--alp-shadow); color: inherit; }
.alp-blog-card-bild { display: block; aspect-ratio: 16 / 9; background: var(--alp-bg-soft); overflow: hidden; }
.alp-blog-card-bild img { width: 100%; height: 100%; object-fit: cover; display: block; }
.alp-blog-card-text { display: flex; flex-direction: column; gap: 8px; padding: 22px; }
.alp-blog-card h2 { font-size: 1.25rem; margin: 0; }
.alp-blog-meta { color: var(--alp-muted); font-size: .85rem; }
.alp-blog-anriss { color: var(--alp-text); font-size: .96rem; }
/* Schiebt den Link nach unten, damit er bei unterschiedlich langen Anrissen auf einer Linie steht. */
.alp-blog-mehr { margin-top: auto; padding-top: 6px; color: var(--alp-blue-dark); font-weight: 600; font-size: .92rem; }
.alp-blog-card:hover .alp-blog-mehr { color: var(--alp-blue); }

/* Blog: hervorgehobener neuster Artikel oberhalb des Rasters - Bild und Text nebeneinander
   statt einer gleich grossen Karte in der Reihe, damit die Liste nicht komplett gleichfoermig wirkt. */
.alp-blog-featured {
    display: grid; grid-template-columns: 1fr; overflow: hidden; color: inherit;
    background: #fff; border: 1px solid var(--alp-border); border-radius: var(--alp-radius-lg);
    box-shadow: var(--alp-shadow-sm); margin-bottom: 2.6em;
    transition: transform var(--alp-transition), box-shadow var(--alp-transition);
}
.alp-blog-featured:hover, .alp-blog-featured:focus-visible { transform: translateY(-3px); box-shadow: var(--alp-shadow); color: inherit; }
.alp-blog-featured:focus-visible { outline: 2px solid var(--alp-accent); outline-offset: 3px; }
@media (min-width: 800px) { .alp-blog-featured { grid-template-columns: 1.1fr 1fr; } }
.alp-blog-featured-bild { display: block; aspect-ratio: 16 / 9; background: var(--alp-bg-soft); overflow: hidden; }
.alp-blog-featured-bild img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (min-width: 800px) { .alp-blog-featured-bild { aspect-ratio: auto; } }
.alp-blog-featured-text { display: flex; flex-direction: column; gap: 12px; padding: 32px 34px; justify-content: center; }
.alp-blog-featured-text h2 { font-size: clamp(1.4rem, 2.6vw, 2rem); margin: 0; }
.alp-blog-featured-text .alp-blog-anriss { font-size: 1.02rem; }

/* Blog: Artikelseite. Schmale Spalte - lange Zeilen ermueden beim Lesen. */
.alp-artikel { max-width: 760px; }
.alp-artikel h1 { font-size: clamp(1.9rem, 4vw, 2.8rem); margin-bottom: .3em; }
.alp-brotkrumen { color: var(--alp-muted); font-size: .85rem; margin-bottom: 1.4em; }
.alp-artikel-titelbild { width: 100%; height: auto; border-radius: var(--alp-radius-lg); margin: 1.8em 0; display: block; }
.alp-artikel-text { font-size: 1.08rem; }
.alp-artikel-text h2 { font-size: 1.6rem; margin: 1.8em 0 .5em; }
.alp-artikel-text h3 { font-size: 1.25rem; margin: 1.5em 0 .4em; }
.alp-artikel-text p { margin: 0 0 1.2em; }
.alp-artikel-text ul, .alp-artikel-text ol { margin: 0 0 1.2em; padding-left: 1.4em; }
.alp-artikel-text li { margin-bottom: .4em; }
.alp-artikel-text blockquote {
    margin: 1.6em 0; padding: .2em 0 .2em 1.2em;
    border-left: 3px solid var(--alp-accent); color: var(--alp-heading); font-style: italic;
}
.alp-artikel-text figure { margin: 1.8em 0; }
.alp-artikel-text img { max-width: 100%; height: auto; border-radius: var(--alp-radius); display: block; }
/* Im Editor per Ziehgriff auf eine feste Breite gestelltes Bild: <figure> auf Bildbreite
   schrumpfen, damit die Bildunterschrift nicht ueber die ganze Spalte laeuft. */
.alp-artikel-text figure:has(img[width]) { width: fit-content; max-width: 100%; }
.alp-artikel-text figcaption { color: var(--alp-muted); font-size: .87rem; margin-top: .6em; }

/* Anliegen-Detailseite (Phase 8b): FAQ-Akkordeon + "Diese Seite hilft auch bei"-Phrasen.
   Eigenes, schlichtes <details>-Muster - der cb-faq-Block des Builders haengt an Builder-CSS. */
.alp-anliegen-faq { max-width: 760px; margin: .6em 0 0; border-top: 1px solid var(--alp-border); }
.alp-anliegen-faq-item { border-bottom: 1px solid var(--alp-border); }
.alp-anliegen-faq-item > summary {
    list-style: none; cursor: pointer; position: relative;
    padding: 1em 2em 1em 0; font-weight: 600; font-size: 1.05rem;
}
.alp-anliegen-faq-item > summary::-webkit-details-marker { display: none; }
.alp-anliegen-faq-item > summary::after {
    content: "+"; position: absolute; right: .15em; top: 50%; transform: translateY(-50%);
    font-weight: 400; font-size: 1.4rem; line-height: 1; color: var(--alp-muted);
}
.alp-anliegen-faq-item[open] > summary::after { content: "\2013"; }
.alp-anliegen-faq-a { padding: 0 0 1.2em; font-size: 1.05rem; }
.alp-anliegen-faq-a p { margin: 0 0 .8em; }
.alp-anliegen-faq-a p:last-child { margin-bottom: 0; }
.alp-anliegen-suchanfragen {
    display: flex; flex-wrap: wrap; gap: 8px; margin: 1em 0 0; padding: 0; list-style: none;
}
.alp-anliegen-suchanfragen li {
    padding: 6px 14px; border-radius: 999px; font-size: .88rem;
    background: var(--alp-bg-soft); color: var(--alp-muted);
}

/* Rechtsseiten (Impressum/AGB/Datenschutz): ruhige Lesespalte in einer Karte statt
   unformatierter Paragraphen-Wueste. Bewusst zurueckhaltend - nur Lesbarkeit verbessern. */
.alp-legal.alp-card { max-width: 760px; margin: 0 auto; padding: 48px 56px; }
.alp-legal h1 { font-size: clamp(1.6rem, 3.2vw, 2.1rem); margin-bottom: 1em; padding-bottom: .6em; border-bottom: 2px solid var(--alp-border); }
.alp-legal h2 { font-size: 1.15rem; margin: 2em 0 .5em; padding-top: 1.6em; border-top: 1px solid var(--alp-border); }
.alp-legal h2:first-of-type { margin-top: 0; padding-top: 0; border-top: none; }
.alp-legal p { font-size: 1rem; margin: 0 0 1.2em; }
.alp-legal a { text-decoration: underline; text-decoration-color: var(--alp-border); text-underline-offset: 3px; }
.alp-legal a:hover { text-decoration-color: currentColor; }
@media (max-width: 640px) {
    .alp-legal.alp-card { padding: 32px 22px; }
}

/* Blog: Themen-Schlagworte. Doppelt genutzt - als Filterleiste ueber der Uebersicht und
   als Verschlagwortung unter dem Artikel. */
.alp-chip {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 14px; border-radius: 999px; font-size: .88rem; line-height: 1.3;
    border: 1px solid var(--sp-c, var(--alp-border)); background: #fff; color: var(--sp-c, var(--alp-text));
    transition: border-color var(--alp-transition), background var(--alp-transition), color var(--alp-transition);
}
/* Die Chip-Farben muessen `.alp a { color: var(--alp-blue-dark) }` schlagen. Jenes hat
   Spezifitaet (0,1,1), ein blosses `.alp-chip` nur (0,1,0) - der aktive Chip stand dadurch
   blau auf blau und war unlesbar. Darum die Link-Varianten mit `.alp` davor (0,2,1).
   --sp-c/--sp-soft kommen als Inline-Style vom jeweiligen Thema (alp_spec_akzent()) -
   Chips ohne Themenbezug (z. B. "Alle Beitraege") lassen die Variablen unbesetzt und
   fallen auf die bisherigen neutralen/blauen Farben zurueck. */
.alp a.alp-chip { color: var(--sp-c, var(--alp-text)); }
.alp a.alp-chip:hover { border-color: var(--sp-c, var(--alp-blue)); color: var(--sp-c, var(--alp-blue-dark)); background: var(--sp-soft, rgba(38, 156, 217, .06)); }
.alp-chip--aktiv { background: var(--alp-blue-dark); border-color: var(--alp-blue-dark); color: #fff; }
.alp a.alp-chip--aktiv, .alp a.alp-chip--aktiv:hover {
    background: var(--alp-blue-dark); border-color: var(--alp-blue-dark); color: #fff;
}
.alp-chip--klein { padding: 3px 10px; font-size: .78rem; background: var(--sp-soft, var(--alp-bg-soft)); border-color: transparent; }
.alp-chip-zahl { color: var(--alp-muted); font-size: .8em; }
.alp-chip--aktiv .alp-chip-zahl { color: rgba(255, 255, 255, .75); }
.alp-themenfilter { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 1.6em; }
.alp-artikel-themen { margin-top: 2.6em; padding-top: 1.6em; border-top: 1px solid var(--alp-border); }
/* Karten-Schlagworte stehen zwischen Anriss und "Weiterlesen" - der Abstand kommt vom Raster. */
.alp-blog-themen { display: flex; flex-wrap: wrap; gap: 6px; }

/* Blog: Blaetterleiste. Die leeren <span> halten die Mitte mittig, wenn eine Seite fehlt. */
.alp-blaettern {
    display: flex; align-items: center; justify-content: space-between; gap: 14px;
    flex-wrap: wrap; margin-top: 3em;
}
.alp-blaettern-stand { color: var(--alp-muted); font-size: .9rem; }

/* Form fields */
.alp-input, .alp-textarea, .alp-select { width: 100%; padding: 12px 14px; border: 1px solid var(--alp-border); border-radius: var(--alp-radius); font-family: var(--alp-font-body); font-size: 1rem; color: var(--alp-heading); background: #fff; }
.alp-input:focus, .alp-textarea:focus, .alp-select:focus { outline: none; border-color: var(--alp-blue); box-shadow: 0 0 0 3px rgba(38, 156, 217, .16); }
.alp-textarea { min-height: 120px; resize: vertical; }
.alp-field { margin-bottom: 20px; }
.alp-field:last-child { margin-bottom: 0; }
.alp-grid > .alp-field { margin-bottom: 0; }
.alp-form-label { display: flex; align-items: center; gap: 6px; font-family: var(--alp-font-head); font-weight: 600; font-size: .92rem; color: var(--alp-heading); margin-bottom: 6px; }
.alp-form-label .alp-icon { width: 15px; height: 15px; color: var(--alp-blue-dark); flex: none; }
.alp-form-label .opt { color: var(--alp-muted); font-weight: 400; text-transform: none; }

/* Akzentkante fuer die Filter-Karte auf coaches.php - hebt sie von einer gewoehnlichen
   Formular-Karte ab, ohne die Funktion zu veraendern. */
.alp-filter-card { position: relative; }
.alp-filter-card::before {
    content: ''; position: absolute; left: 0; right: 0; top: 0; height: 3px;
    border-radius: var(--alp-radius-lg) var(--alp-radius-lg) 0 0;
    background: linear-gradient(90deg, var(--alp-blue), var(--alp-accent));
}
.alp-hint { color: var(--alp-muted); font-size: .85rem; margin-top: 4px; }
.alp-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

/* Alle Filter-Steuerelemente exakt gleich hoch. <input>, <select> und das
   details/summary-Dropdown (.alp-msel) rendern sonst je unterschiedlich hoch - das
   summary erbt die Body-line-height (1.7) statt der Formular-Vorgabe, der native
   <select> liegt noch einmal dazwischen. Feste Hoehe + line-height vereinheitlicht sie. */
.alp-filter-card .alp-input,
.alp-filter-card .alp-select,
.alp-filter-card .alp-msel summary {
    height: 46px;
    line-height: 1.2;
}

/* Getoentes Panel um die Ergebnisliste (coaches.php) - die weissen Coach-Karten bekommen
   dadurch Kontrast, statt direkt auf reinem Weiss zu schweben. */
.alp-results-panel {
    background: var(--alp-bg-soft); border: 1px solid var(--alp-border);
    border-radius: var(--alp-radius-lg); padding: 36px;
}
@media (max-width: 640px) { .alp-results-panel { padding: 22px 18px; } }

/* --- KI-Werkstatt-Demo als kleines Produktfenster statt loser Karte --- */
.alp-demo-window {
    background: #fff; border: 1px solid var(--alp-border); border-radius: var(--alp-radius-lg);
    box-shadow: var(--alp-shadow); overflow: hidden;
}
.alp-demo-window-bar { display: flex; align-items: center; gap: 6px; padding: 12px 16px; background: var(--alp-bg-soft); border-bottom: 1px solid var(--alp-border); }
.alp-demo-window-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--alp-border); }
.alp-demo-window-dot:nth-child(1) { background: #E4867A; }
.alp-demo-window-dot:nth-child(2) { background: #E9C46A; }
.alp-demo-window-dot:nth-child(3) { background: #7FB37E; }
.alp-demo-window-body { padding: 28px; }
.alp-demo-field { margin-bottom: 20px; }
.alp-demo-field:last-child { margin-bottom: 0; }
.alp-demo-label { display: block; font-family: var(--alp-font-head); font-size: .75rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--alp-muted); margin-bottom: .6em; }
.alp-demo-label--ai { color: var(--alp-blue-dark); }
.alp-demo-input { margin: 0; padding: 10px 14px; font-style: italic; color: var(--alp-text); background: var(--alp-bg-soft); border: 1px solid var(--alp-border); border-radius: var(--alp-radius); }
.alp-demo-output { padding: 16px 18px; background: var(--alp-accent-soft); border: 1px solid rgba(233, 162, 59, .25); border-radius: var(--alp-radius); }
.alp-demo-output p { margin: 0; }
.alp-demo-output p:first-child { font-weight: 600; color: var(--alp-heading); margin-bottom: .4em; }

/* --- Coach-Karten auf der Startseite: ruhig im Grundzustand, Gewicht erst bei Hover --- */
.alp-coach-grid .alp-card { box-shadow: none; }
.alp-coach-grid .alp-card:hover { box-shadow: var(--alp-shadow); }

/* Mehrfachauswahl-Dropdown (details/summary, wie .alp-faq) - Kanton+Online und Sprache in coaches.php */
.alp-msel { position: relative; }
.alp-msel summary { width: 100%; padding: 12px 14px; border: 1px solid var(--alp-border); border-radius: var(--alp-radius); font-family: var(--alp-font-body); font-size: 1rem; color: var(--alp-heading); background: #fff; cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.alp-msel summary::-webkit-details-marker { display: none; }
.alp-msel summary::after { content: '▾'; color: var(--alp-muted); flex-shrink: 0; }
.alp-msel[open] summary::after { content: '▴'; }
.alp-msel summary:focus { outline: none; border-color: var(--alp-blue); box-shadow: 0 0 0 3px rgba(38, 156, 217, .16); }
.alp-msel-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alp-msel-panel { position: absolute; z-index: 30; top: calc(100% + 6px); left: 0; right: 0; min-width: 220px; background: #fff; border: 1px solid var(--alp-border); border-radius: var(--alp-radius); box-shadow: var(--alp-shadow); padding: 8px; max-height: 260px; overflow-y: auto; }
.alp-msel-option { display: flex; align-items: center; gap: 8px; padding: 7px 6px; font-size: .92rem; border-radius: 6px; cursor: pointer; }
.alp-msel-option:hover { background: var(--alp-bg-soft); }
.alp-msel-option input { width: auto; margin: 0; }

/* FAQ */
.alp-faq { border-bottom: 1px solid var(--alp-border); padding: 18px 0; }
.alp-faq summary { cursor: pointer; font-family: var(--alp-font-head); font-weight: 600; color: var(--alp-heading); list-style: none; display: flex; justify-content: space-between; align-items: center; }
.alp-faq summary::-webkit-details-marker { display: none; }
.alp-faq summary::after { content: '+'; font-size: 1.4rem; color: var(--alp-blue); }
.alp-faq[open] summary::after { content: '–'; }
.alp-faq p { margin-top: 12px; }

/* Footer */
.alp-footer { background: var(--alp-dark); color: #A7AAB8; padding: 60px 0 28px; }
.alp-footer a { color: #C7CAD6; }
.alp-footer a:hover { color: #fff; }
.alp-footer h4, .alp-foot-title { color: #fff; text-transform: uppercase; font-family: var(--alp-font-head); font-weight: 600; font-size: .95rem; margin: 0 0 .8em; }
.ict-foot-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 30px; padding-bottom: 40px; }
.alp-footer-bottom { border-top: 1px solid rgba(255,255,255,.1); padding-top: 24px; font-size: .82rem; color: #7C7F8E; }
.alp-footer-bottom p { margin: 0 0 6px; }

/* Badges (Plan/Verifizierung) */
.alp-badge { display: inline-flex; align-items: center; gap: 5px; font-family: var(--alp-font-head); font-weight: 600; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; padding: 4px 10px; border-radius: 999px; background: var(--alp-bg-soft); color: var(--alp-text); }
.alp-badge--verified { background: rgba(38,156,217,.12); color: var(--alp-blue-dark); }
.alp-badge--premium { background: rgba(35,36,52,.08); color: var(--alp-dark); }

/* ==========================================================================
   Coaching-Planet - eigene Handschrift
   --------------------------------------------------------------------------
   Bildsprache "Navigation & Sterne", abgeleitet aus der eigenen Textwelt der
   Seite ("Die ersten Sterne", "Der Kompass", "Waehle deine Richtung",
   Coaching-*Planet*). Zweck: die Seite von der reinen Webstandard-Optik
   abheben und den monotonen Rhythmus brechen - vorher war jede Sektion
   Label > Titel > Text > Grid aus identischen weissen Karten.
   ========================================================================== */

/* --- Sektions-Rhythmus: nicht mehr ueberall 90px --- */
.alp-section--tight { padding: 40px 0; }
.alp-section--airy { padding: 96px 0; }

/* Markensektion: kraeftige Farbflaeche als Kontrastmoment zwischen den
   hellen Sektionen (vorher gab es nur weiss / hellgrau / dunkel). */
.alp-section--brand { background: linear-gradient(135deg, var(--alp-blue-dark) 0%, #17608A 60%, #145273 100%); }
.alp-section--brand h1, .alp-section--brand h2, .alp-section--brand h3, .alp-section--brand strong { color: #fff; }
.alp-section--brand p, .alp-section--brand li { color: #D6E9F5; }
.alp-section--brand .alp-section-label { color: var(--alp-accent); }

/* Dezenter Sternenschleier, nur fuer dunkle/farbige Sektionen. */
.alp-section--stars { position: relative; overflow: hidden; }
.alp-section--stars > * { position: relative; z-index: 1; }
.alp-section--stars::before {
    content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 400'%3E%3Cg fill='%23ffffff'%3E%3Ccircle cx='60' cy='70' r='1.6'/%3E%3Ccircle cx='170' cy='40' r='1.1'/%3E%3Ccircle cx='250' cy='120' r='1.8'/%3E%3Ccircle cx='380' cy='60' r='1.2'/%3E%3Ccircle cx='470' cy='140' r='1.6'/%3E%3Ccircle cx='545' cy='55' r='1.1'/%3E%3Ccircle cx='90' cy='210' r='1.3'/%3E%3Ccircle cx='210' cy='280' r='1.7'/%3E%3Ccircle cx='330' cy='230' r='1.1'/%3E%3Ccircle cx='430' cy='320' r='1.5'/%3E%3Ccircle cx='520' cy='250' r='1.2'/%3E%3Ccircle cx='140' cy='350' r='1.4'/%3E%3Ccircle cx='300' cy='370' r='1.1'/%3E%3C/g%3E%3C/svg%3E");
    background-size: cover; opacity: .35;
}

/* --- Typografie mit echtem Kontrast --- */
/* Redaktioneller Titel: gemischte Schreibweise statt durchgehend GROSS -
   erzeugt Hierarchie, weil nicht mehr alles gleich laut ist. */
.alp-section-title--editorial {
    text-transform: none;
    font-size: clamp(2.1rem, 5vw, 3.5rem);
    letter-spacing: -.015em;
    line-height: 1.1;
}
/* Squada One war bisher geladen, aber nirgends verwendet - hier kommt sie
   endlich zum Einsatz, fuer grosse Zahlen/Ziffern. */
.alp-display {
    font-family: var(--alp-font-display);
    font-size: clamp(2.6rem, 7vw, 4.6rem);
    line-height: .95;
    color: var(--alp-blue);
    letter-spacing: .01em;
}
.alp-lead { font-size: 1.15rem; max-width: 62ch; }

/* --- Icons (Inline-SVG, siehe includes/icons.php) --- */
.alp-icon {
    width: 1.5em; height: 1.5em; flex: none; display: block;
    fill: none; stroke: currentColor; stroke-width: 1.7;
    stroke-linecap: round; stroke-linejoin: round;
}

/* --- Themen-Karte: Icon + Akzentkante statt anonymer weisser Kiste --- */
.alp-topic {
    position: relative; display: block; overflow: hidden;
    background: #fff; border: 1px solid var(--alp-border);
    border-radius: var(--alp-radius-lg); padding: 28px 26px;
    transition: transform var(--alp-transition), box-shadow var(--alp-transition);
}
.alp-topic::before {
    content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
    background: linear-gradient(180deg, var(--alp-blue), var(--alp-accent));
    transform: scaleY(0); transform-origin: top; transition: transform .35s ease;
}
.alp-topic:hover { transform: translateY(-5px); box-shadow: var(--alp-shadow); }
.alp-topic:hover::before { transform: scaleY(1); }
.alp-topic-icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 52px; height: 52px; border-radius: 14px; margin-bottom: 16px;
    background: var(--topic-soft, rgba(38, 156, 217, .10)); color: var(--topic-c, var(--alp-blue-dark));
    transition: background var(--alp-transition), color var(--alp-transition), transform .35s ease;
}
.alp-topic-icon .alp-icon { width: 26px; height: 26px; }
/* Bewusst kein Farbwechsel beim Hover mehr (fruehere Version faerbte alle Kacheln
   einheitlich gold) - jede Themen-Kachel behaelt ihre eigene, per --topic-c/--topic-soft
   gesetzte Akzentfarbe, der Hover hebt sie nur per Skalierung hervor. */
.alp-topic:hover .alp-topic-icon { transform: scale(1.04); }
.alp-topic h3 { text-transform: uppercase; font-size: 1.1rem; margin: 0 0 .35em; }
.alp-topic p { margin: 0; color: var(--alp-text); }

/* Coach-Anzahl je Thema (Startseite) - echte Zahl statt reiner Deko, damit die Kacheln
   nicht wie austauschbare Marketing-Labels wirken. */
.alp-topic-count {
    position: absolute; top: 18px; right: 18px;
    font-family: var(--alp-font-head); font-weight: 600; font-size: .74rem;
    color: var(--alp-muted); background: var(--alp-bg-soft);
    padding: 3px 10px; border-radius: 999px; border: 1px solid var(--alp-border);
    transition: color var(--alp-transition), border-color var(--alp-transition);
}
.alp-topic:hover .alp-topic-count { color: var(--alp-blue-dark); border-color: var(--alp-blue); }

/* --- Merkmal ohne Kasten: bricht das "alles ist eine Karte"-Muster --- */
.alp-feature { display: flex; gap: 16px; align-items: flex-start; }
.alp-feature-icon {
    flex: none; display: inline-flex; align-items: center; justify-content: center;
    width: 46px; height: 46px; border-radius: 13px;
    background: var(--alp-accent-soft); color: var(--alp-accent-dark);
}
.alp-feature-icon .alp-icon { width: 23px; height: 23px; }
.alp-feature h3 { text-transform: uppercase; font-size: 1rem; margin: .15em 0 .3em; }
.alp-feature p { margin: 0; }
.alp-section--brand .alp-feature-icon,
.alp-section--dark .alp-feature-icon { background: rgba(255, 255, 255, .12); color: var(--alp-accent); }

/* --- "Vertrauen statt Show": 2x2-Raster reduzierter Merkmale neben der Headline --- */
.alp-trust-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px 40px; }
@media (max-width: 640px) { .alp-trust-grid { grid-template-columns: 1fr; } }

/* --- Netzwerk-Grafik fuer dunkle/farbige Sektionen mit "Netzwerk"-Thematik (Nodes +
   Verbindungslinien statt blossem Sternenschleier). Kombinierbar mit .alp-section--stars,
   da jenes ::before nutzt und dieses ::after. --- */
.alp-section--network { position: relative; overflow: hidden; }
.alp-section--network::after {
    content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 800 400'%3E%3Cg fill='none' stroke='rgba(255,255,255,0.22)' stroke-width='1'%3E%3Cline x1='110' y1='300' x2='250' y2='150'/%3E%3Cline x1='250' y1='150' x2='410' y2='260'/%3E%3Cline x1='410' y1='260' x2='570' y2='120'/%3E%3Cline x1='570' y1='120' x2='700' y2='270'/%3E%3Cline x1='250' y1='150' x2='420' y2='60'/%3E%3Cline x1='410' y1='260' x2='560' y2='320'/%3E%3C/g%3E%3Cg fill='%23E9A23B'%3E%3Ccircle cx='110' cy='300' r='4'/%3E%3Ccircle cx='250' cy='150' r='4'/%3E%3Ccircle cx='410' cy='260' r='4'/%3E%3Ccircle cx='570' cy='120' r='4'/%3E%3Ccircle cx='700' cy='270' r='4'/%3E%3Ccircle cx='420' cy='60' r='4'/%3E%3Ccircle cx='560' cy='320' r='4'/%3E%3C/g%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: center; background-size: cover;
    opacity: .6;
}
.alp-section--network > .alp-container { position: relative; z-index: 1; }

/* --- Schritt-fuer-Schritt als verbundener Weg statt drei gleicher Kisten --- */
.alp-steps { display: block; }
.alp-step { position: relative; padding: 0 0 30px 64px; }
.alp-step:last-child { padding-bottom: 0; }
.alp-step::before {
    content: ''; position: absolute; left: 22px; top: 46px; bottom: 0; width: 2px;
    background: linear-gradient(180deg, var(--alp-blue), rgba(38, 156, 217, .12));
}
.alp-step:last-child::before { display: none; }
.alp-step-num {
    position: absolute; left: 0; top: 0;
    display: inline-flex; align-items: center; justify-content: center;
    width: 46px; height: 46px; border-radius: 50%;
    background: #fff; border: 2px solid var(--alp-blue); color: var(--alp-blue-dark);
    font-family: var(--alp-font-display); font-size: 1.45rem; line-height: 1;
    transition: background var(--alp-transition), color var(--alp-transition);
}
.alp-step:hover .alp-step-num { background: var(--alp-blue); color: #fff; }
/* Themen-Icon statt blosser Ziffer im Kreis (Der Kompass, index.php) - die Zahl bleibt als
   kleines Eckbadge fuer die Reihenfolge, gleiches Motiv wie das Geprueft-Haekchen auf den
   Coach-Karten. Additiv: Schritte ohne dieses Markup (z.B. coach-werden.php) zeigen weiterhin
   nur die Ziffer, unveraendert. */
.alp-step-num .alp-icon { width: 20px; height: 20px; }
.alp-step-num-badge {
    position: absolute; right: -3px; bottom: -3px; z-index: 1;
    width: 20px; height: 20px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: var(--alp-blue); color: #fff; border: 2px solid #fff;
    font-family: var(--alp-font-display); font-size: .72rem; line-height: 1;
}
.alp-section--brand .alp-step-num-badge,
.alp-section--dark .alp-step-num-badge { background: var(--alp-accent); color: var(--alp-dark); }
.alp-step h3 { text-transform: uppercase; font-size: 1.05rem; margin: .55em 0 .25em; }
.alp-step p { margin: 0; }

/* Kompass als visueller Hoehepunkt: grosser, sehr dezenter Orbit-Ring hinter der
   Schritt-Kette. Element A der Grafiksprache (Kreis/Orbit), eigene Klasse statt
   generell an .alp-section--stars, damit andere Seiten (coach-werden.php,
   vertrauen.php) mit derselben Klasse unveraendert bleiben. */
.alp-kompass { position: relative; }
.alp-kompass::after {
    content: ''; position: absolute; z-index: 0; pointer-events: none;
    right: -10%; top: 50%; transform: translateY(-50%);
    width: 560px; height: 560px; max-width: 70vw; max-height: 70vw;
    border-radius: 50%; border: 1px solid rgba(255, 255, 255, .07);
}

/* Waagrechte Variante fuer breite Schritt-Ketten (Ablauf-Sektionen). */
@media (min-width: 780px) {
    .alp-steps--row { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 30px; }
    .alp-steps--row .alp-step { padding: 62px 0 0; }
    .alp-steps--row .alp-step::before {
        left: 58px; right: -30px; top: 22px; bottom: auto; width: auto; height: 2px;
        background: linear-gradient(90deg, var(--alp-blue), rgba(38, 156, 217, .12));
    }
    .alp-steps--row .alp-step h3 { margin: 0 0 .25em; }
}
.alp-section--brand .alp-step-num,
.alp-section--dark .alp-step-num { background: transparent; border-color: var(--alp-accent); color: var(--alp-accent); }
.alp-section--brand .alp-step:hover .alp-step-num,
.alp-section--dark .alp-step:hover .alp-step-num { background: var(--alp-accent); color: var(--alp-dark); }

/* Outline-Buttons sind sonst dunkelblau auf blauem Grund - unlesbar. */
.alp-section--brand .alp-btn-outline,
.alp-section--dark .alp-btn-outline { color: #fff; border-color: rgba(255, 255, 255, .7); }
.alp-section--brand .alp-btn-outline:hover,
.alp-section--dark .alp-btn-outline:hover { background: #fff; color: var(--alp-blue-dark); border-color: #fff; }

/* --- Umschalter Monatlich/Jaehrlich (preise.php) --- */
.alp-switch {
    position: relative;
    display: inline-flex; align-items: center; gap: 4px;
    background: var(--alp-bg-soft); border: 1px solid var(--alp-border);
    border-radius: 999px; padding: 5px;
}
/* Gleitende Markierung. Wird per JavaScript erzeugt und vermessen, damit sie zu jeder
   Beschriftungslaenge passt. Ohne JavaScript faerbt stattdessen der aktive Knopf selbst
   (Regel weiter unten), die Markierung ist also nie unsichtbar. */
.alp-switch-pille {
    position: absolute; top: 0; left: 0; z-index: 0;
    background: var(--alp-blue); border-radius: 999px;
}
.alp-switch.hat-pille button { position: relative; z-index: 1; }
.alp-switch.hat-pille button[aria-pressed="true"] { background: transparent; }
@media (prefers-reduced-motion: no-preference) {
    .alp-switch-pille.bereit { transition: transform .32s ease-out, width .32s ease-out; }
}
.alp-switch button {
    font-family: var(--alp-font-head); font-weight: 600; font-size: .92rem;
    text-transform: uppercase; letter-spacing: .03em;
    padding: 10px 22px; border-radius: 999px; border: none; cursor: pointer;
    background: transparent; color: var(--alp-text);
    transition: background .3s ease-out, color .3s ease-out;
}
.alp-switch button[aria-pressed="true"] { background: var(--alp-blue); color: #fff; }
.alp-switch button:hover:not([aria-pressed="true"]) { color: var(--alp-blue-dark); }
.alp-switch-hint {
    display: inline-flex; align-items: center; gap: 6px; margin-left: 14px;
    font-family: var(--alp-font-head); font-weight: 600; font-size: .85rem;
    color: var(--alp-accent-dark); background: var(--alp-accent-soft);
    padding: 6px 14px; border-radius: 999px;
}

/* Preisanzeige: beide Varianten liegen im HTML, umgeschaltet wird per Klasse am Grid.
   So bleibt der Preis auch ohne JavaScript lesbar (dann gilt der Monatspreis). */
.alp-preis-jahr { display: none; }
.is-jaehrlich .alp-preis-monat { display: none; }
.is-jaehrlich .alp-preis-jahr { display: block; }
/* Gleiche Mindesthoehe fuer beide Varianten: die Jahresansicht hat eine Zeile mehr
   ("Du sparst ..."), ohne das wuerden die Karten beim Umschalten springen. */
.alp-preis-monat, .alp-preis-jahr { min-height: 4.9em; }

@media (prefers-reduced-motion: no-preference) {
    /* display laesst sich nicht weich animieren - stattdessen blendet die neu
       eingeblendete Variante auf. Erst ab dem ersten Klick aktiv (Klasse kommt per JS),
       damit beim Seitenaufbau nichts unnoetig hereinfaedet. */
    .hat-gewechselt .alp-preis-monat,
    .hat-gewechselt .alp-preis-jahr {
        animation: alp-preis-wechsel .32s ease-out both;
    }
    @keyframes alp-preis-wechsel {
        from { opacity: 0; transform: translateY(-8px); }
        to { opacity: 1; transform: none; }
    }
}

/* --- Kennzahl mit Display-Schrift --- */
.alp-stat { display: block; }
.alp-stat-value { font-family: var(--alp-font-display); font-size: 3rem; line-height: 1; color: var(--alp-blue); display: block; }
.alp-stat-label { font-family: var(--alp-font-head); font-weight: 600; text-transform: uppercase; letter-spacing: .06em; font-size: .82rem; color: var(--alp-muted); }
.alp-section--brand .alp-stat-value, .alp-section--dark .alp-stat-value { color: var(--alp-accent); }
.alp-section--brand .alp-stat-label, .alp-section--dark .alp-stat-label { color: #B9CFE0; }

/* Mobile Navigation (Slide-in) - Klasse "nav-open" auf <body>, konsistent mit includes/layout.php-JS */
/* 1360px = --alp-container-kopf (1320) + 40px Innenabstand. Unterhalb davon reicht die
   Kopfzeile nicht mehr fuer die volle Navigation, sobald der breitere Systemfont einspringt. */
@media (max-width: 1360px) {
    .alp-nav-toggle { display: flex; }
    .alp-logo-title { font-size: 1.2rem; }
    .ict-header-right {
        position: fixed; top: 0; right: 0; height: 100vh; width: min(320px, 86vw);
        background: #fff; flex-direction: column; align-items: flex-start; justify-content: flex-start;
        padding: 90px 28px 28px; gap: 24px; transform: translateX(100%); transition: transform .25s ease;
        z-index: 60; box-shadow: -10px 0 30px rgba(0,0,0,.12); overflow-y: auto;
    }
    body.nav-open .ict-header-right { transform: translateX(0); }
    body.nav-open .alp-nav-backdrop { display: block; position: fixed; inset: 0; background: rgba(35,36,52,.5); z-index: 55; }
    .alp-nav { flex-direction: column; gap: 18px; width: 100%; }
    .ict-header-actions { flex-direction: column; align-items: stretch; width: 100%; }
    .ict-header-actions .alp-btn { width: 100%; }
    .alp-nav-close { display: block; position: absolute; top: 24px; right: 24px; width: 36px; height: 36px; border: none; background: var(--alp-bg-soft); border-radius: 50%; font-size: 1.4rem; line-height: 1; cursor: pointer; color: var(--alp-heading); }
}

@media (max-width: 900px) {
    .alp-hero { padding: 56px 0; }
    .alp-section { padding: 44px 0; }
    .alp-section--tight-top { padding-top: 22px; }
    .alp-field-row { grid-template-columns: 1fr; }
    /* Der Orbit-Ring hinter dem Kompass ist auf schmalen Bildschirmen (vertikale
       Schritt-Kette, linksbuendig) nur noch stoerender Leerraum. */
    .alp-kompass::after { display: none; }
}
