/* ─── Button v2 ──────────────────────────────────────────────────────
   Vier Varianten (Figma 26:10, Beschluss 03.07.2026):
   Primary  = Anthrazit-Pill, Hover → Dark-4
   Secondary = Outline,       Hover → Fläche Light-2
   OnColor  = Weiß (auf Farbflächen), Hover → Light-1
   Ghost    = Textlink ohne Underline, Hover → 70 % Opacity
   Höhe 50px · 17px SemiBold · normale Schreibweise (kein Tracking).
   Optional: Icon-Pill 32px rechts (Chevron). */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-4);
    min-height: 50px;
    padding: 14px 28px;
    border-radius: var(--radius-pill);
    font-size: var(--text-button);
    font-weight: 600;
    letter-spacing: var(--tracking-button);
    line-height: 1.1;
    text-decoration: none;
    cursor: pointer;
    border: 0;
    transition:
        background-color var(--dur-base) var(--ease-out),
        color var(--dur-base) var(--ease-out),
        opacity var(--dur-base) var(--ease-out),
        transform var(--dur-base) var(--ease-out);
}

.btn:active { transform: translateY(1px); transition-duration: var(--dur-fast); }

/* Mit Icon-Pill: rechts weniger Padding, damit die Pill bündig sitzt */
.btn:has(.btn__icon-pill) { padding-right: 12px; }

.btn--primary {
    background-color: var(--color-anthrazit);
    color: var(--color-text-inverse);
}
.btn--primary:hover { background-color: var(--color-dark-4); }

/* Secondary — kein Stroke (Design-Beschluss 06.07.2026): ruht als
   Text, beim Hover erscheint die Light-1-Pill. Schriftfarbe bleibt. */
.btn--secondary {
    background-color: transparent;
    color: var(--color-anthrazit);
}
.btn--secondary:hover { background-color: var(--color-bg-elevated); }

/* OnColor — weißer Button auf farbigen Flächen (Hero dark-blue, Demo pink).
   Bewusst white statt bg-elevated: bleibt weiß, egal wie Aliase gemappt sind. */
.btn--oncolor {
    background-color: var(--color-white);
    color: var(--color-anthrazit);
}
.btn--oncolor:hover { background-color: var(--color-light-1); }

/* Ghost — Textlink im Button-Format; Hover = Light-1-Pill statt
   Opacity (Schrift wird nicht aufgehellt). */
.btn--ghost {
    background-color: transparent;
    color: var(--color-anthrazit);
    padding-inline: 12px;
}
.btn--ghost:hover { background-color: var(--color-bg-elevated); }

/* Ghost auf dunklen/farbigen Flächen: heller Tint statt Light-1 */
.btn--ghost-inverse:hover { background-color: rgba(255, 255, 255, 0.14); }

/* Legacy-Alias (bestehende Templates): primary-on-brand ≙ OnColor,
   tertiary ≙ Ghost mit Underline-Optik für Fließtext-Links */
.btn--primary-on-brand {
    background-color: var(--color-white);
    color: var(--color-anthrazit);
}
.btn--primary-on-brand:hover { background-color: var(--color-light-1); }

.btn--tertiary {
    background-color: transparent;
    min-height: 0;
    padding: 8px 4px;
    color: var(--color-anthrazit);
    text-decoration: underline;
    text-underline-offset: 4px;
    text-decoration-thickness: 1.5px;
    border-radius: 4px;
}
.btn--tertiary:hover { background-color: var(--color-bg-elevated); }

/* Icon-Pill rechts angedockt (Chevron im Kreis) */
.btn__icon-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    background-color: var(--color-white);
    color: var(--color-anthrazit);
    border-radius: var(--radius-pill);
    flex-shrink: 0;
}

.btn--oncolor .btn__icon-pill,
.btn--primary-on-brand .btn__icon-pill {
    background-color: var(--color-anthrazit);
    color: var(--color-white);
}

.btn__icon-pill svg { width: 16px; height: 16px; }

/* ─── Status-Label (Pill) ───────────────────────────────────────────
   Verwendet in Editionen-Tiles. */

.status {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border-radius: var(--radius-pill);
    font-size: var(--text-label);
    font-weight: 600;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-anthrazit);
    white-space: nowrap;   /* eine Pill ist einzeilig — sonst bricht sie in engen Containern */
}

.status::before {
    content: '';
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: currentColor;
    opacity: 0.9;
}

.status--published { background-color: var(--color-status-published); }
.status--pending   { background-color: var(--color-status-pending); }
.status--future    { background-color: var(--color-status-future); }

/* ─── Mask-Container (Pill-Form für Bilder) ────────────────────────
   Halbpill-„C-Form": rechts/unten/oben gerundet wie ein liegender Bogen.
   Stilbasis: Figma-Mask-Container, Vector 12 (Web-App Slide-View). */

.mask-pill {
    overflow: hidden;
    border-radius: var(--radius-pill);
    aspect-ratio: 1 / 1;
    background-color: var(--color-light-2);
}

.mask-pill img,
.mask-pill picture,
.mask-pill picture > img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Half-Pill-Variants (entlang der Achse abgeflacht — eine Seite gerade) */
.mask-cap-top    { border-radius: var(--radius-pill) var(--radius-pill) 0 0; }
.mask-cap-bottom { border-radius: 0 0 var(--radius-pill) var(--radius-pill); }
.mask-cap-left   { border-radius: var(--radius-pill) 0 0 var(--radius-pill); }
.mask-cap-right  { border-radius: 0 var(--radius-pill) var(--radius-pill) 0; }

/* Vertikale Pill (höher als breit) */
.mask-pill-tall {
    aspect-ratio: 7 / 12;
    border-radius: var(--radius-pill);
    overflow: hidden;
}
.mask-pill-tall img { width: 100%; height: 100%; object-fit: cover; }

/* ─── Pill-Tile (Hintergrund, gefärbt, ohne Bild) ──────────────────
   Für Hero-Bento-Komposition. */

.pill-tile {
    border-radius: var(--radius-pill);
    background-color: var(--color-light-2);
}

/* ─── Card-Flip (AnalogeKarte) ─────────────────────────────────────
   70:120-Verhältnis. CSS rotateY. Klick + Tastatur. */

.card-flip {
    aspect-ratio: 70 / 120;
    perspective: 1400px;
    cursor: pointer;
    width: 100%;
    max-width: 380px;
    margin-inline: auto;
}

.card-flip__inner {
    display: block;              /* Markup nutzt <span> (Button-Inhalt) */
    position: relative;
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
    transition: transform var(--dur-slow) var(--ease-out);
    border-radius: var(--radius-card);
}

.card-flip[aria-pressed="true"] .card-flip__inner {
    transform: rotateY(180deg);
}

/* Faces zeigen NUR das Karten-Bild — kein Hintergrund, kein Schatten,
   kein Extra-Rand. Radius entspricht dem Eckradius echter Spielkarten
   (~5,7 % der Breite ≈ 18px bei 320px), damit CSS-Kante und Karten-
   Kante im Scan deckungsgleich sind. */
.card-flip__inner { border-radius: 18px; }

.card-flip__face {
    display: block;
    position: absolute;
    inset: 0;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    border-radius: 18px;
    overflow: hidden;
}

.card-flip__face--back { transform: rotateY(180deg); }

.card-flip__face img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.card-flip__placeholder {
    display: grid;
    place-items: center;
    width: 100%;
    height: 100%;
    background-color: var(--color-bg-elevated);
    color: var(--color-text-muted);
    font-size: var(--text-caption);
}

/* Karte + Dreh-Button untereinander zentriert */
.card-flip-wrap {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-4);
}

/* Dreh-Hinweis (wie Play/Pause beim Step-Showcase): subtiler Kreis-
   Button, permanent sichtbar — kommuniziert die Flip-Funktion und
   flippt beim Klick ebenfalls. */
.card-flip__hint {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border: 0;
    border-radius: 50%;
    background-color: var(--color-bg-elevated);
    color: var(--color-anthrazit);
    cursor: pointer;
    transition: background-color var(--dur-base) var(--ease-out);
}

.card-flip__hint:hover { background-color: var(--color-bg-subtle); }
.card-flip__hint svg { width: 20px; height: 20px; }

@media (prefers-reduced-motion: reduce) {
    .card-flip { aspect-ratio: auto; perspective: none; }
    .card-flip__inner { transform-style: flat; transition: none; display: grid; gap: var(--space-4); }
    .card-flip[aria-pressed="true"] .card-flip__inner { transform: none; }
    .card-flip__face { position: relative; aspect-ratio: 70 / 120; backface-visibility: visible; }
    .card-flip__face--back { transform: none; aspect-ratio: auto; }
}

/* ─── Spec-Tabelle (AnalogeKarte) ─────────────────────────────────── */

.spec-table {
    width: 100%;
    border-radius: var(--radius-soft);
    background-color: var(--color-bg-elevated);
    overflow: hidden;
}

.spec-table tr { border-bottom: 1px solid var(--color-border); }
.spec-table tr:last-child { border-bottom: 0; }

.spec-table th,
.spec-table td {
    text-align: left;
    padding: var(--space-4) var(--space-5);
    vertical-align: top;
    font-weight: 400;
}

.spec-table th {
    width: 32%;
    font-size: var(--text-label);
    font-weight: 600;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-text-muted);
}

.spec-table td {
    color: var(--color-text);
}

@media (max-width: 540px) {
    .spec-table th, .spec-table td { padding: var(--space-3) var(--space-4); display: block; width: 100%; }
    .spec-table th { padding-bottom: 0; }
    .spec-table td { padding-top: var(--space-1); }
}

/* ─── Tabs (ARIA-Pattern + sliding pill-indicator) ───────────────
   Pricing-Toggle-Pattern: Container ist die Pill, ein animierter
   Indicator slidet zur aktiven Position. Die `--tab-color` Variable
   wird pro Tab gesetzt und färbt den Indicator. */

.tabs {
    --tab-color: var(--color-anthrazit);
}

.tablist {
    position: relative;
    display: inline-flex;
    padding: 4px;
    background-color: var(--color-bg-elevated);
    border-radius: var(--radius-pill);
    box-shadow: var(--shadow-soft);
}

.tab {
    position: relative;
    z-index: 2;
    padding: 10px 22px;
    border: 0;
    border-radius: var(--radius-pill);
    background: transparent;
    font-size: var(--text-button);
    font-weight: 600;
    color: var(--color-text-muted);
    cursor: pointer;
    white-space: nowrap;
    transition: color var(--dur-base) var(--ease-out);
}

.tab:hover { color: var(--color-anthrazit); }

.tab[aria-selected="true"] {
    color: var(--color-white);
}

/* Slidender Indicator — Position + Width werden via JS gesetzt. */
.tab-indicator {
    position: absolute;
    top: 4px;
    bottom: 4px;
    left: 0;
    width: 0;
    border-radius: var(--radius-pill);
    background-color: var(--tab-color);
    z-index: 1;
    pointer-events: none;
    transition:
        transform 320ms var(--ease-out),
        width 320ms var(--ease-out),
        background-color 280ms var(--ease-out);
}

/* Bevor JS positioniert hat: Indicator unsichtbar (kein Flash) */
.tab-indicator:not([style]) { opacity: 0; }

.tabpanel {
    display: none;
    animation: tab-fade var(--dur-base) var(--ease-out);
}

.tabpanel.is-active { display: block; }

@keyframes tab-fade {
    from { opacity: 0; transform: translateY(4px); }
    to   { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
    .tabpanel { animation: none; }
    .tab-indicator { transition: none; }
}

/* ─── Showcase (horizontaler Karussell mit Scroll-Snap) ──────────────
   Touch-Swipe ist nativ via overflow + scroll-snap. Arrows scrollen
   um eine Item-Breite, Dots springen direkt zu Item N. Aktiver Dot
   wird per Scroll-Detection im JS aktualisiert. */

.showcase {
    position: relative;
}

.showcase__viewport {
    /* Wrapper für den Track, damit Pfeile außerhalb sitzen können
       ohne dass der Track gecroppt wird.
       mask-image fadet die Edges nur dort weich aus, wo Inhalt
       teilweise verdeckt ist — Anfang & Ende bleiben hart, damit
       erste/letzte Kachel komplett sichtbar ist (siehe data-state). */
    overflow: hidden;
    /* Keine negative Margin mehr: der Showcase liegt heute AUSSERHALB
       des Containers (full-width) — die v1-Ausgleichs-Margin erzeugte
       nur horizontalen Overflow und verfaelschte den Track-Bleed. */
}

/* Konditionale Mask je nach Scroll-Zustand. JS setzt data-state.
   - start:  am Anfang → nur rechts faden (linke Kachel ungefadet)
   - end:    am Ende    → nur links faden (rechte Kachel ungefadet)
   - middle: dazwischen → beide Seiten faden
   - full:   alles passt → keine Maske
   Mobile (≤720) hat Center-Snap, dort keine Maske nötig. */
@media (min-width: 721px) {
    .showcase[data-state="start"] .showcase__viewport {
        -webkit-mask-image: linear-gradient(to right,
            #000 0,
            #000 92%,
            transparent 100%);
        mask-image: linear-gradient(to right,
            #000 0,
            #000 92%,
            transparent 100%);
    }
    .showcase[data-state="end"] .showcase__viewport {
        -webkit-mask-image: linear-gradient(to right,
            transparent 0,
            #000 8%,
            #000 100%);
        mask-image: linear-gradient(to right,
            transparent 0,
            #000 8%,
            #000 100%);
    }
    .showcase[data-state="middle"] .showcase__viewport {
        -webkit-mask-image: linear-gradient(to right,
            transparent 0,
            #000 8%,
            #000 92%,
            transparent 100%);
        mask-image: linear-gradient(to right,
            transparent 0,
            #000 8%,
            #000 92%,
            transparent 100%);
    }
}

.showcase__track {
    display: flex;
    gap: var(--space-5);
    overflow-x: auto;
    /* v2-Fix Scroll-Trap: `proximity` statt `mandatory` — mandatory-Snap
       fing bei Trackpad-Gesten mit diagonalem Anteil das vertikale
       Scrollen über dem Track ein (gemeldeter Bug der Live-Site).
       Kein overscroll-behavior mehr: horizontales Chaining ist harmlos,
       das Contain verstärkte das Trap-Gefühl am Karussell-Ende. */
    scroll-snap-type: x proximity;
    scroll-behavior: smooth;
    scrollbar-width: none;
    /* Erste Kachel startet an der CONTAINER-Kante (nicht am Viewport-
       Rand): Bleed = Container-Offset, auf schmalen Screens = Pad. */
    --track-bleed: max(var(--container-pad), calc((100vw - var(--container-max)) / 2 + var(--container-pad)));
    padding-inline: var(--track-bleed);
    /* scroll-padding muss = padding sein, damit Snap-Punkte sauber
       aligned sind (Item 0 snapt zu scrollLeft=0). */
    scroll-padding-inline: var(--track-bleed);
    padding-block: var(--space-3);
    -webkit-overflow-scrolling: touch;
}

.showcase__track::-webkit-scrollbar { display: none; }

@media (prefers-reduced-motion: reduce) {
    .showcase__track { scroll-behavior: auto; }
}

.showcase__track > * {
    flex: 0 0 auto;
    scroll-snap-align: start;
    width: calc((100% - var(--space-5) * 2) / 3);  /* 3 Items sichtbar */
    min-width: 280px;
}

@media (max-width: 1199px) {
    .showcase__track > * {
        width: calc((100% - var(--space-5)) / 2);  /* 2 Items */
    }
}

/* Mobile: Center-Snap mit beidseitigem Peek — aktive Kachel sitzt
   in der Viewport-Mitte, links und rechts peekt jeweils der Nachbar. */
@media (max-width: 720px) {
    .showcase__track {
        gap: var(--space-4);
        padding-inline: 8vw;                      /* 8 % Peek auf jeder Seite */
        scroll-padding-inline: 8vw;
    }
    .showcase__track > * {
        width: 84vw;                              /* 84 % der Viewport-Breite */
        scroll-snap-align: center;                /* Mittig snappen */
    }
}

/* Arrow-Controls — sitzen AUSSERHALB der Showcase auf desktop, damit
   sie nicht über Tile-Inhalten liegen. iOS-Style: Touch-Geräte ohne
   Hover (Mobile, Tablet) zeigen keine Pfeile, nur Swipe + Dots. */
.showcase__nav {
    position: absolute;
    top: calc(50% - 36px);                          /* etwas über Mitte, weil Dots unten */
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background-color: var(--color-bg-elevated);
    box-shadow: var(--shadow-soft);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-anthrazit);
    cursor: pointer;
    z-index: 3;
    transition: transform var(--dur-base) var(--ease-out),
                box-shadow var(--dur-base) var(--ease-out),
                opacity var(--dur-base) var(--ease-out);
}

.showcase__nav:hover {
    transform: scale(1.05);
    box-shadow: var(--shadow-floating);
}

/* Disabled = komplett unsichtbar (kein Layout-Shift dank visibility) */
.showcase__nav:disabled,
.showcase__nav[aria-disabled="true"] {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

/* Default-Position: nahe am Showcase-Rand */
.showcase__nav--prev { left: -16px; }
.showcase__nav--next { right: -16px; }

/* Wide screens: Pfeile deutlich außerhalb des Showcase-Bereichs */
@media (min-width: 1280px) {
    .showcase__nav--prev { left: -64px; }
    .showcase__nav--next { right: -64px; }
}

/* Touch-Geräte (kein Hover): keine Pfeile, nur Swipe */
@media (hover: none), (max-width: 720px) {
    .showcase__nav { display: none; }
}

/* Pagination-Dots */
.showcase__dots {
    display: flex;
    justify-content: center;
    gap: 8px;
    margin-top: var(--space-5);
}

.showcase__dot {
    /* Sichtbarer Dot 8px, Touch-Target 24px (WCAG target-size):
       Padding zählt zum Klickbereich, background-clip hält den Dot klein */
    width: 8px;
    height: 8px;
    box-sizing: content-box;
    padding: 8px;
    background-clip: content-box;
    border-radius: var(--radius-pill);
    background-color: var(--color-light-3);
    border: 0;
    cursor: pointer;
    transition: background-color var(--dur-base) var(--ease-out),
                width var(--dur-base) var(--ease-out);
}

.showcase__dot:hover { background-color: var(--color-dark-1); }

.showcase__dot.is-active {
    background-color: var(--color-anthrazit);
    width: 24px;
    border-radius: var(--radius-pill);
}

/* ─── Edition-Tile ─────────────────────────────────────────────────── */

.edition-tile {
    position: relative;
    aspect-ratio: 4 / 5;                              /* Hochformat, Image-Cover-Style */
    border-radius: var(--radius-card);
    overflow: hidden;
    background-color: var(--color-light-2);
    isolation: isolate;
    height: 100%;
    transition: transform var(--dur-base) var(--ease-out),
                box-shadow var(--dur-base) var(--ease-out);
}

.edition-tile:hover {
    transform: translateY(-4px);
    box-shadow: var(--shadow-floating);
}

/* Cover-BG Bild — füllt das Tile komplett */
.edition-tile__bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
    transition: transform 600ms var(--ease-out);
}

.edition-tile:hover .edition-tile__bg {
    transform: scale(1.04);
}

/* Fallback-Gradient pro Status, wenn kein Bild gepflegt */
.edition-tile:not(:has(.edition-tile__bg))::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 0;
}
.edition-tile[data-status="published"]:not(:has(.edition-tile__bg))::before {
    background: linear-gradient(160deg, var(--color-green) 0%, var(--color-anthrazit) 100%);
}
.edition-tile[data-status="pending"]:not(:has(.edition-tile__bg))::before {
    background: linear-gradient(160deg, var(--color-brand) 0%, var(--color-anthrazit) 100%);
}
.edition-tile[data-status="future"]:not(:has(.edition-tile__bg))::before {
    background: linear-gradient(160deg, var(--color-dark-blue) 0%, var(--color-anthrazit) 100%);
}

/* Dunkler Gradient von unten — sorgt für Text-Lesbarkeit über Image */
.edition-tile::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg,
        rgba(0, 0, 0, 0) 40%,
        rgba(0, 0, 0, 0.65) 100%);
    z-index: 1;
    pointer-events: none;
}

/* Status-Badge oben links */
.edition-tile__status {
    position: absolute;
    top: var(--space-4);
    left: var(--space-4);
    z-index: 2;
}

/* Content-Overlay unten — Partner + Titel auf weißer Schrift */
.edition-tile__content {
    position: absolute;
    inset: auto 0 0 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    padding: var(--space-5) var(--space-5) var(--space-6);
    color: var(--color-white);
    text-decoration: none;
}

.edition-tile__partner {
    font-size: var(--text-label);
    text-transform: uppercase;
    letter-spacing: var(--tracking-label);
    color: rgba(255, 255, 255, 0.85);
    line-height: var(--leading-snug);
}

.edition-tile__title {
    font-size: var(--text-h3);
    font-weight: 700;
    line-height: var(--leading-tight);
    letter-spacing: var(--tracking-tight);
    color: var(--color-white);
    text-wrap: balance;
}

/* ─── Trust-Tile ──────────────────────────────────────────────────── */

.trust-tile {
    padding: var(--space-5);
    background-color: var(--color-bg-elevated);
    border-radius: var(--radius-soft);
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
}

.trust-tile__icon {
    width: 32px;
    height: 32px;
    color: var(--color-anthrazit);
}

.trust-tile__title {
    font-size: var(--text-h3);
    font-weight: 600;
    margin-top: var(--space-2);
}

.trust-tile__body {
    font-size: var(--text-body);
    color: var(--color-text-muted);
}

/* ─── Step-Block (DreiSchritte) ───────────────────────────────────── */

.step {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
}

.step__num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    border-radius: var(--radius-pill);
    background-color: var(--color-anthrazit);
    color: var(--color-white);
    font-size: var(--text-h3);
    font-weight: 700;
    margin-bottom: var(--space-2);
}

.step__title {
    font-size: var(--text-h2);
    font-weight: 700;
    line-height: var(--leading-tight);
    letter-spacing: var(--tracking-tight);
}

.step__body {
    font-size: var(--text-body);
    color: var(--color-text-muted);
    max-width: 36ch;
}

/* ─── Floating Pill Nav (Finom-Pattern) ─────────────────────────────
   Desktop: drei Zonen — Brand (links, alleinstehend, ohne Pill) |
            Pill-Island mit Items + CTA (zentriert) |
            Webapp-Link (rechts).
            Beim Scroll: Brand-Wortmarke ↔ Circle-Mark Animation,
            Island-Padding schrumpft, Backdrop verstärkt.
   Mobile:  Wortmarke top (scrollt mit), Bottom = drei separate Floats
            (Logo-Circle | CTA-Pill | Hamburger-Circle).
            Open: Fullscreen-Cream-Overlay mit gestaffelten Items. */

/* Mobile-only Wortmarke am Page-Top (default versteckt, wird im Mobile-MQ aktiv) */
.brand-wordmark {
    display: none;
}

/* ─── Container — füllt die Top-Zone, ohne eigene Pill-Optik ─── */
.nav {
    position: fixed;
    top: var(--space-4);
    left: 0;
    right: 0;
    z-index: var(--z-nav);
}

.nav__inner {
    /* Grid mit 1fr|auto|1fr — Island bleibt IMMER zentriert,
       auch wenn Brand- oder Webapp-Breite variiert. */
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: var(--space-4);
    padding: 0 clamp(24px, 2.5vw, 56px);
}

.nav__brand   { justify-self: start; }
.nav__island  { justify-self: center; }
.nav__actions { justify-self: end; }

/* ─── Brand: links, alleinstehend.
   3 States (analog Finom):
   – Default: nur Wortmarke, kein Background.
   – Hover:   Wortmarke + Pill-Background (subtil).
   – Scrolled: Circle-Mark statt Wortmarke. */
.nav__brand {
    display: inline-flex;
    align-items: center;
    gap: 0;
    font-weight: 700;
    font-size: 1.0625rem;
    letter-spacing: var(--tracking-tight);
    color: var(--color-anthrazit);
    text-decoration: none;
    flex-shrink: 0;
    padding: 8px 14px;
    height: 52px;
    border-radius: var(--radius-pill);
    transition: background-color var(--dur-base) var(--ease-out),
                padding var(--dur-base) var(--ease-out);
}

.nav__brand:hover {
    background-color: rgba(58, 53, 50, 0.07);
}

/* Auf Seiten mit dunkelblauem Hero: Wortmarke + Webapp-Link hell,
   solange die Nav noch über dem Hero liegt (AA-Kontrast). Beim Scroll
   übernimmt der is-scrolled-State (Circle-Mark, heller Seitengrund). */
body:has(.hero-v2--bg-dark-blue) .nav:not(.is-scrolled) .nav__brand,
body:has(.hero-v2--bg-dark-blue) .nav:not(.is-scrolled) .nav__webapp {
    color: var(--color-white);
}
body:has(.hero-v2--bg-dark-blue) .nav:not(.is-scrolled) .nav__brand:hover {
    background-color: rgba(255, 255, 255, 0.14);
}

/* Beim Scroll: weniger Horizontal-Padding, weil Inhalt schon ein Circle ist */
.nav.is-scrolled .nav__brand {
    padding: 8px 8px;
}

/* ─── Logo-Bilder (CMS, Site → Marke) — Größen je Kontext ───
   Ohne Upload rendert logo.php SVG/Text-Fallbacks (currentColor). */
.logo__img { display: block; width: auto; }
/* Wortmarken-Schrift im Logo-Bild ≈ Nav-/Button-Textgröße (15px):
   logo-text.svg ist 181×31, Schrift ≈ 60 % der Höhe → 24px Bildhöhe */
.nav__brand-text .logo__img { height: 24px; }
.nav__brand-mark .logo__img { height: 24px; }  /* CC bleibt so gross wie in der Wortmarke */
.brand-wordmark .logo__img { height: 24px; margin-inline: auto; }

/* on=auto (Nav): dunkle Variante nur über dunklem Hero, solange
   ungescrollt — gleiche Mechanik wie die Textfarben-Regel. */
.logo__img--dark { display: none; }
body:has(.hero-v2--bg-dark-blue) .nav:not(.is-scrolled) .logo__img--light { display: none; }
body:has(.hero-v2--bg-dark-blue) .nav:not(.is-scrolled) .logo__img--dark { display: block; }

/* Wortmarke — Default: sichtbar */
.nav__brand-text {
    display: inline-block;
    overflow: hidden;
    max-width: 200px;
    opacity: 1;
    white-space: nowrap;
    transition: max-width var(--dur-base) var(--ease-out),
                opacity var(--dur-fast) var(--ease-out);
}

/* Circle-Mark — Default: kollabiert (max-width 0), erscheint beim Scroll */
.nav__brand-mark {
    overflow: hidden;
    max-width: 0;
    opacity: 0;
    width: 50px;              /* = Hoehe der Nav-CTA-Pille */
    height: 50px;
    border-radius: 50%;
    background-color: var(--color-anthrazit);
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: max-width var(--dur-base) var(--ease-out),
                opacity var(--dur-fast) var(--ease-out) 80ms;
}

.nav__brand-mark svg { width: 24px; height: 24px; }

/* Beim Scroll: Wortmarke kollabiert, Mark expandiert */
.nav.is-scrolled .nav__brand-text {
    max-width: 0;
    opacity: 0;
    transition: max-width var(--dur-base) var(--ease-out),
                opacity var(--dur-fast) var(--ease-out);
}

.nav.is-scrolled .nav__brand-mark {
    max-width: 50px;
    opacity: 1;
    transition: max-width var(--dur-base) var(--ease-out) 80ms,
                opacity var(--dur-fast) var(--ease-out) 160ms;
}

/* ─── Pill-Island (zentriert) — enthält Items + CTA ─── */
.nav__island {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 6px 6px 6px 14px;
    /* Solides Light-1 statt rgba-Transparenz — der Interaktions-Grauton
       ist überall exakt #f9f5f1 (halbtransparent wirkte er heller). */
    background-color: var(--color-bg-elevated);
    border-radius: var(--radius-pill);
    box-shadow: var(--shadow-soft);
    transition: padding var(--dur-base) var(--ease-out),
                box-shadow var(--dur-base) var(--ease-out);
}

.nav.is-scrolled .nav__island {
    padding: 5px 5px 5px 12px;
    box-shadow: var(--shadow-floating);
}

/* ─── Menü-Items ─── */
.nav__menu {
    display: flex;
    align-items: center;
    gap: 2px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.nav__link {
    display: inline-flex;
    align-items: center;
    padding: 10px 14px;
    border-radius: var(--radius-pill);
    font-size: 0.9375rem;
    font-weight: 500;
    color: var(--color-text);
    text-decoration: none;
    line-height: 1.2;
    transition: background-color var(--dur-base) var(--ease-out),
                color var(--dur-base) var(--ease-out),
                transform var(--dur-fast) var(--ease-out);
}

.nav__link:hover {
    background-color: rgba(58, 53, 50, 0.07);
    color: var(--color-anthrazit);
}

.nav__link:active {
    transform: scale(0.97);
}

/* Aktiver Link (kommt mit Unterseiten — `aria-current="page"` setzen) */
.nav__link[aria-current="page"],
.nav__link.is-active {
    background-color: rgba(58, 53, 50, 0.10);
    color: var(--color-anthrazit);
}

/* ─── CTA ─── Default versteckt (Hero hat eigenen CTA — Doppelung
   vermeiden). Erst sichtbar, wenn .is-past-hero gesetzt ist. */
.nav__cta {
    overflow: hidden;
    max-width: 0;
    padding: 0;
    margin: 0;
    opacity: 0;
    transform: scale(0.92);
    transform-origin: left center;
    pointer-events: none;
    font-size: 0.9375rem;
    flex-shrink: 0;
    white-space: nowrap;
    transition: max-width var(--dur-base) var(--ease-out),
                padding var(--dur-base) var(--ease-out),
                margin var(--dur-base) var(--ease-out),
                opacity var(--dur-fast) var(--ease-out),
                transform var(--dur-base) var(--ease-out);
}

.nav.is-past-hero .nav__cta {
    max-width: 320px;
    padding: 10px 18px;
    margin-left: 4px;
    opacity: 1;
    transform: scale(1);
    pointer-events: auto;
}

/* ─── Right-Actions (Webapp-Link, später Warenkorb) ─── */
.nav__actions {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}

.nav__webapp {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 10px 14px;
    border-radius: var(--radius-pill);
    color: var(--color-anthrazit);
    font-size: 0.9375rem;
    font-weight: 500;
    text-decoration: none;
    line-height: 1.2;
    transition: background-color var(--dur-base) var(--ease-out),
                color var(--dur-base) var(--ease-out);
}

.nav__webapp:hover {
    background-color: rgba(58, 53, 50, 0.07);
    color: var(--color-anthrazit);
}

.nav__webapp-arrow {
    display: inline-block;
    transition: transform var(--dur-base) var(--ease-out);
}

.nav__webapp:hover .nav__webapp-arrow {
    transform: translate(2px, -2px);
}

/* Bei sehr knappem Platz (Tablet-Querformat o. Ä.): Webapp-Link verstecken,
   Items + CTA bleiben in der Island. */
@media (max-width: 1023px) and (min-width: 881px) {
    .nav__actions { display: none; }
}

/* ─── Hamburger ─── */
.nav__toggle {
    display: none;
    width: 48px;
    height: 48px;
    border-radius: 50%;
    align-items: center;
    justify-content: center;
    color: var(--color-anthrazit);
    background: transparent;
    border: 0;
    padding: 0;
    cursor: pointer;
    flex-shrink: 0;
}

.nav__toggle-icon {
    position: relative;
    width: 22px;
    height: 16px;
    display: inline-block;
}

.nav__toggle-bar {
    position: absolute;
    left: 0;
    right: 0;
    height: 2px;
    background-color: currentColor;
    border-radius: 2px;
    transition: transform var(--dur-base) var(--ease-out),
                top var(--dur-base) var(--ease-out),
                bottom var(--dur-base) var(--ease-out);
}

.nav__toggle-bar:nth-child(1) { top: 4px; }
.nav__toggle-bar:nth-child(2) { bottom: 4px; }

.nav.is-open .nav__toggle-bar:nth-child(1) {
    top: 7px;
    transform: rotate(45deg);
}

.nav.is-open .nav__toggle-bar:nth-child(2) {
    bottom: 7px;
    transform: rotate(-45deg);
}

/* ─── MOBILE LAYOUT (≤880px) ────────────────────────────────────────
   Top: Wortmarke scrollt mit Content.
   Bottom: drei freistehende Floats (Logo-Circle | CTA-Pill | Hamburger-Circle).
   Open: Fullscreen-Overlay mit gestaffelten Items.            */

@media (max-width: 880px) {

    /* Body wird Containing Block für die absolut platzierte Wortmarke */
    body { position: relative; }

    /* Top-Wortmarke als Overlay über der Bento-Grafik (z-index 2).
       Hero startet bei page y=0, Bento füllt von oben, Wortmarke sitzt
       darüber. Scrollt mit Content (nicht sticky), weil sie an Body
       gebunden ist (Body skaliert mit Document-Höhe). */
    .brand-wordmark {
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        z-index: 2;
        text-align: center;
        font-weight: 700;
        font-size: 1.125rem;
        letter-spacing: var(--tracking-tight);
        color: var(--color-anthrazit);
        text-decoration: none;
        padding: 22px var(--container-pad) 4px;
    }

    /* Container wird Layout-Wrapper, ohne eigene Pill-Optik.
       WICHTIG: transform muss zurückgesetzt sein, sonst wird .nav zum
       Containing Block für `position: fixed` Kinder (Overlay). */
    .nav {
        top: auto;
        bottom: max(var(--space-4), env(safe-area-inset-bottom));
        left: 0;
        right: 0;
        width: 100%;
        max-width: none;
        padding: 0 var(--space-4);
        pointer-events: none;
        transform: none;
    }

    .nav__inner,
    .nav.is-scrolled .nav__inner {
        display: flex;                  /* Override Desktop-Grid */
        background: transparent;
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        border: 0;
        box-shadow: none;
        padding: 0;
        gap: 8px;
        max-width: 540px;
        margin: 0 auto;
    }

    /* Island löst sich auf — CTA wird Direktkind von .nav__inner und kann
       als 3. Float in der Bottom-Bar leben. Menü-Items werden über
       fixed-overlay ausgeklappt (siehe weiter unten). */
    .nav__island,
    .nav.is-scrolled .nav__island {
        display: contents;
        background: transparent;
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        border: 0;
        box-shadow: none;
        padding: 0;
    }

    /* Right-Actions (Webapp-Link) auf Mobile verstecken — Webapp-Link kann
       später ins Fullscreen-Menü als zusätzliches Item, falls gewollt. */
    .nav__actions { display: none; }

    /* Drei freistehende Floats — alle anthrazit, weiße Inhalte.
       z-index sorgt dafür, dass sie über dem Fullscreen-Overlay liegen
       (wichtig, damit Hamburger zum Schließen klickbar bleibt). */
    .nav__brand,
    .nav__cta,
    .nav__toggle {
        pointer-events: auto;
        position: relative;
        z-index: 50;
        background-color: var(--color-anthrazit);
        color: var(--color-white);
        box-shadow: 0 8px 24px -8px rgba(58, 53, 50, 0.32);
        height: 52px;
    }

    /* Logo als perfekter Kreis */
    .nav__brand {
        width: 52px;
        padding: 0;
        border-radius: 50%;
        justify-content: center;
        gap: 0;
        font-size: 0;
    }

    .nav__brand:hover {
        background-color: var(--color-anthrazit);  /* keine Hover-Pill auf Mobile */
    }

    /* Mark immer sichtbar auf Mobile (kein Scroll-State-Switch) */
    .nav__brand-mark {
        max-width: 26px;
        opacity: 1;
        width: 26px;
        height: 26px;
        background: transparent;
        border-radius: 0;
    }

    .nav__brand-text { display: none; }

    /* CTA als Pill in der Mitte — auf Mobile IMMER sichtbar
       (anders als Desktop). Hero zeigt nur Edition-Link, Erstgespräch
       sitzt fix in der Bottom-Pill. */
    .nav__cta,
    .nav.is-past-hero .nav__cta {
        flex: 1 1 auto;
        min-width: 0;
        max-width: 100%;
        padding: 0 16px;
        margin: 0;
        opacity: 1;
        transform: none;
        pointer-events: auto;
        border-radius: var(--radius-pill);
        font-size: 0.9375rem;
        text-align: center;
        justify-content: center;
        white-space: nowrap;
        height: 52px;
        overflow: hidden;
    }

    /* Hamburger als Kreis */
    .nav__toggle {
        display: inline-flex;
        width: 52px;
        border-radius: 50%;
    }

    /* Fullscreen-Menu-Overlay */
    .nav__menu {
        position: fixed;
        inset: 0;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        gap: var(--space-3);
        padding: var(--space-section) var(--container-pad)
                 calc(80px + env(safe-area-inset-bottom));
        background-color: rgba(249, 245, 241, 0.98);
        backdrop-filter: saturate(1.4) blur(16px);
        -webkit-backdrop-filter: saturate(1.4) blur(16px);
        opacity: 0;
        pointer-events: none;
        transition: opacity 320ms var(--ease-out);
        z-index: calc(var(--z-nav) - 1);
    }

    .nav.is-open .nav__menu {
        opacity: 1;
        pointer-events: auto;
    }

    /* Items: groß, gestaffelt eingeblendet */
    .nav__menu li {
        opacity: 0;
        transform: translateY(16px);
        transition: opacity 280ms var(--ease-out),
                    transform 320ms var(--ease-out);
    }

    .nav.is-open .nav__menu li {
        opacity: 1;
        transform: translateY(0);
    }

    .nav.is-open .nav__menu li:nth-child(1) { transition-delay:  60ms; }
    .nav.is-open .nav__menu li:nth-child(2) { transition-delay: 110ms; }
    .nav.is-open .nav__menu li:nth-child(3) { transition-delay: 160ms; }
    .nav.is-open .nav__menu li:nth-child(4) { transition-delay: 210ms; }
    .nav.is-open .nav__menu li:nth-child(5) { transition-delay: 260ms; }

    .nav__menu .nav__link {
        font-size: clamp(2rem, 7vw, 2.5rem);
        font-weight: 700;
        letter-spacing: -0.02em;
        padding: 6px 12px;
        background: transparent;
        color: var(--color-anthrazit);
    }

    .nav__menu .nav__link:hover {
        background: transparent;
        color: var(--color-brand);
    }
}

/* Scroll-Padding korrigieren wenn Mobile-Nav unten ist */
@media (max-width: 880px) {
    html { scroll-padding-bottom: 96px; scroll-padding-top: 24px; }
}
