/* ============================================================
   Schreinerei Bock — Subpage Stylesheet
   Referenzen, Impressum, Datenschutz.
   Lädt ZUSÄTZLICH zur style.css.
   ============================================================ */


/* ─── Subpage-Atmo (Beams als Background-Layer auf allen Subpages) ─
   Fixed-Layer hinter Content, drei drift-animierte Beams (honig +
   accent + honig-soft) für atmosphärische Tiefe gegen den cream-bg.
   Mix-blend-mode multiply. Pointer-events none — interagiert nicht. */

.subpage-atmo-bg {
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 0;
    overflow: hidden;
}

/* Stack: Subpage-Content über Atmo-Layer.
   Spezifisch nur Section-Container — fixed/floating Elements
   (lb-backdrop, area-back-floating, subpage-atmo-bg) bleiben fixed. */
body[data-page="subpage"] > main,
body[data-page="subpage"] > footer,
body[data-page="subpage"] > section {
    position: relative;
    z-index: 1;
}

/* Nav braucht höheren Stacking-Context als die Section/Hero-Layer darunter,
   sonst überdeckt der Hero das Mega-Dropdown (Panel sitzt im Nav-Stacking
   bei z 99 — aber der Nav-Stacking selbst muss über Section z 1 liegen).
   WICHTIG: position bleibt fixed (Global-Rule) — nicht relative überschreiben,
   sonst scrollt die Nav mit weg. z-index allein reicht weil .nav schon
   position: fixed hat → z-index ist anwendbar. */
body[data-page="subpage"] > nav {
    z-index: 100;
}

/* nav-mobile bleibt fixed (Fullscreen-Overlay) — wird oben mit
   position:fixed deklariert und darf nicht in den Flow gezogen werden,
   sonst nimmt das hidden-Drawer 700+ Pixel Höhe ein und drückt
   den Hero nach unten. z-index bewusst gesetzt damit das Overlay
   über Atmo-Layern liegt. */
body[data-page="subpage"] > .nav-mobile {
    z-index: 99;
}

/* Subpage-Atmo-BG ist obsolet (Klecks-Beams entfernt). Container bleibt
   im DOM für Backwards-Compat (HTML-Struktur), wird aber visuell still
   gelegt — Edge-Light + Page-Grain laufen jetzt global via .page-bg
   und .page-grain auf <body> direkt. */
.subpage-atmo-bg { display: none !important; }


/* ─── Subpage-Hero (Full-Bleed Cinematic) ─────────────────────────

   Bild als BG der ganzen Hero-Section, Text-Content als Vorder-Layer.
   Pattern matcht Index-Hero — eine konsistente Eingangs-Sprache über
   die ganze Site.

   Stack:
     .subpage-hero-bg (z-index 0)  →  position absolute, BG-Image, full
     .subpage-hero-overlay (z-index 1) → linear-gradient für Text-Lesbarkeit
     .subpage-hero-content (z-index 2) → Container mit Label + Headline */

.subpage-hero {
    position: relative;
    min-height: 92vh;
    padding-top: calc(var(--nav-height) + 4rem);
    padding-bottom: clamp(3.5rem, 7vw, 6rem);
    overflow: hidden;
    isolation: isolate;
    display: flex;
    align-items: flex-end;
}

.subpage-hero-bg {
    position: absolute;
    /* -10% Buffer rundum: bei Parallax-translate würde sonst die
       Edge des Bildes sichtbar werden und cream-BG durchscheinen. */
    inset: -10%;
    z-index: 0;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    will-change: transform;
}

/* Scroll-driven Parallax (Kratzer-Pattern):
   BG-Image translatet langsam nach unten während User scrolled →
   Content scrolled schneller weg, BG bleibt länger sichtbar.
   Native scroll-timeline (GPU-beschleunigt, iOS-safe).
   Bei Browsern ohne Support: BG bleibt statisch (kein Bug). */
@supports (animation-timeline: scroll()) {
    @keyframes subpage-parallax {
        from { transform: translateY(0); }
        to   { transform: translateY(15vh); }
    }
    .subpage-hero-bg {
        animation: subpage-parallax linear both;
        animation-timeline: scroll(root block);
        animation-range: 0vh 80vh;
    }
}

@media (prefers-reduced-motion: reduce) {
    .subpage-hero-bg {
        animation: none !important;
        transform: none !important;
    }
}

.subpage-hero-bg img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.subpage-hero-overlay {
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    /* Multi-stop linear: dunkles unten-links für Text-Anchor,
       leichter Honig-Schimmer oben-rechts, gesamt cinematic.
       Erweiterte Bottom-Coverage da der Hero jetzt Specs trägt — der
       Text-Block ist hoch, braucht Lesbarkeit bis Mitte runter. */
    background:
        linear-gradient(to top,
            color-mix(in oklch, oklch(12% 0.02 60) 86%, transparent) 0%,
            color-mix(in oklch, oklch(13% 0.02 60) 70%, transparent) 22%,
            color-mix(in oklch, oklch(14% 0.02 60) 42%, transparent) 48%,
            color-mix(in oklch, oklch(15% 0.02 60) 18%, transparent) 75%,
            transparent 100%),
        linear-gradient(to top right,
            transparent 55%,
            color-mix(in oklch, var(--accent) 8%, transparent) 100%);
}

.subpage-hero-content {
    position: relative;
    z-index: 2;
    width: 100%;
    max-width: var(--container-max, 1280px);
    margin-inline: auto;
    padding-inline: clamp(1.25rem, 4vw, 2.5rem);
}

.subpage-hero-text {
    max-width: 760px;
    color: white;
}

/* Eyebrow im Subpage-Hero matcht den Index-Hero-Stil 1:1:
   - Color: weiß 80% opacity (kein orange — Akzent gehört dem h1 em)
   - Margin: 1.25rem (20px) wie Index
   - Text-shadow: 0 2px 16px wie Index
   Konsistent mit "Schreinerei in Peißenberg" Label auf der Hauptseite. */
.subpage-hero-text .label,
.subpage-hero-text .label-accent {
    color: color-mix(in oklch, white 80%, transparent);
    margin-bottom: 1.25rem;
    text-shadow: 0 2px 16px color-mix(in oklch, oklch(20% 0.04 60) 60%, transparent);
}

.subpage-hero-text h1 {
    color: white;
    margin-bottom: 1.25rem;
    text-shadow: 0 2px 24px color-mix(in oklch, oklch(15% 0.02 60) 50%, transparent);
}

.subpage-hero-text h1 em {
    color: var(--accent);
    text-shadow:
        0 1px 3px color-mix(in oklch, oklch(15% 0.04 60) 60%, transparent),
        0 0 30px color-mix(in oklch, var(--accent) 30%, transparent);
}

.subpage-hero-text > p {
    color: color-mix(in oklch, white 88%, transparent);
    font-size: clamp(1rem, 1.4vw, 1.15rem);
    margin-bottom: 0;
    text-shadow: 0 1px 8px color-mix(in oklch, oklch(15% 0.02 60) 50%, transparent);
}

/* Mobile: Hero kompakter, Specs brechen unter Lead, Text-Block bleibt lesbar */
@media (max-width: 768px) {
    .subpage-hero {
        min-height: auto;
        padding-bottom: clamp(2.5rem, 8vw, 4rem);
    }
}

/* Reveal-Override für full-bleed Hero — Bild fade-in beim ersten
   Render, kein scroll-tied emerge. Bei Subpage-Einstieg ist der Hero
   IMMER im Viewport, also würde scroll-timeline nichts triggern. */
.subpage-hero-bg.reveal-emerge-fog,
.subpage-hero-bg.reveal-fog {
    animation: none !important;
    opacity: 1 !important;
    filter: none !important;
    transform: none !important;
}



/* ─── Subpage-Hero-Specs (Inline im Hero, statt eigener Section) ───
   Die Spezifikationen leben jetzt direkt unterhalb der Sub-Copy im
   Hero. Schmale orange Trennlinie als Abgrenzung zur Tagline, dann
   Inline-Editorial mit Dot-Separator und italic-serif Highlight.
   Auf dem dunklen Overlay sitzen die Specs in einem weiß-getönten
   Body-Look — passt zur Hero-Hierarchie ohne Bruch im Look-and-Feel. */

.subpage-hero-specs {
    list-style: none;
    padding: 0;
    margin: 1.75rem 0 0 0;
    /* Trennlinie in warmem Bronze — nicht in Bock-Orange. Orange ist
       reserviert für Brand-Akzente (h1 em, Highlight-Spec, Dot-Sep).
       Die Trennlinie soll Material-Sprache sein, nicht Marken-Sprache:
       ein ruhiges Bronze sitzt organisch in der Honig-/Walnuss-Welt
       des Hero-Bildes, statt einen zusätzlichen Orange-Punkt zu setzen. */
    padding-top: 1.6rem;
    border-top: 1px solid oklch(58% 0.085 62 / 0.6);

    font-family: var(--font-sans);
    font-size: clamp(0.88rem, 1vw, 0.95rem);
    line-height: 1.95;
    letter-spacing: 0.005em;
    color: color-mix(in oklch, white 82%, transparent);
    text-shadow: 0 1px 8px color-mix(in oklch, oklch(15% 0.02 60) 60%, transparent);

    /* Inline-Spec-Look — kein UI-Element, sondern Print-Setzung. */
    display: block;
    max-width: 640px;
}

.subpage-hero-specs li {
    display: inline;
}

/* Dot-Separator in Bock-Orange — fein, akzentuiert, scannable. */
.subpage-hero-specs li:not(:last-child)::after {
    content: ' · ';
    color: color-mix(in oklch, var(--accent) 75%, transparent);
    font-weight: 400;
    margin-inline: 0.15em;
    text-shadow: 0 0 8px color-mix(in oklch, var(--accent) 35%, transparent);
}

/* Highlight in italic Serif Bock-Orange — typografischer Akzent
   auf der Spec die der Brand-Wert ist (Kenngott, Energetische
   Sanierung, Holz-Alu, Maßanfertigung, Schriftzüge, Bodenausgleich). */
.subpage-hero-specs li.spec-highlight {
    font-family: var(--font-serif);
    font-style: italic;
    color: var(--accent);
    font-weight: 480;
    font-variation-settings: 'opsz' 36, 'wght' 480, 'SOFT' 70;
    text-shadow:
        0 1px 6px color-mix(in oklch, oklch(15% 0.04 60) 65%, transparent),
        0 0 20px color-mix(in oklch, var(--accent) 30%, transparent);
}

/* Mobile: Specs etwas enger, Trennlinie näher an der Sub-Copy. */
@media (max-width: 768px) {
    .subpage-hero-specs {
        margin-top: 1.4rem;
        padding-top: 1.3rem;
        font-size: 0.9rem;
        line-height: 1.85;
    }
}


/* ─── Back-Buttons (Glass-Pill, in-flow + floating) ──────────── */

.area-back {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.55rem 1.1rem;
    margin-bottom: 1.5rem;
    font-family: var(--font-sans);
    font-size: 0.78rem;
    font-weight: 500;
    letter-spacing: 0.04em;
    color: var(--text-body);
    background: linear-gradient(to bottom,
        color-mix(in oklch, white 50%, transparent),
        color-mix(in oklch, white 20%, transparent));
    border: 1px solid var(--border);
    border-radius: var(--radius-pill);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    box-shadow: inset 0 1px 0 color-mix(in oklch, white 40%, transparent),
                var(--depth-soft);
    transition: all var(--dur-fast) var(--ease);
    text-decoration: none;
    cursor: pointer;
}

.area-back:hover {
    background: linear-gradient(to bottom,
        color-mix(in oklch, var(--accent) 12%, white),
        color-mix(in oklch, var(--accent) 6%, white));
    border-color: var(--accent-40);
    color: var(--accent-deep);
}

.area-back svg {
    transition: transform var(--dur-fast) var(--ease);
}

.area-back:hover svg {
    transform: translateX(-3px);
}

/* Floating-Variante: links sticky, fadet ein wenn Hero rausgescrollt */
.area-back-floating {
    position: fixed;
    left: clamp(1rem, 2vw, 2.5rem);
    top: 50%;
    z-index: 50;
    margin-bottom: 0;
    opacity: 0;
    transform: translate(-15px, -50%);
    pointer-events: none;
    transition: opacity var(--dur-medium) var(--ease),
                transform var(--dur-medium) var(--ease),
                background var(--dur-fast) var(--ease),
                border-color var(--dur-fast) var(--ease),
                color var(--dur-fast) var(--ease);
}

.area-back-floating.visible {
    opacity: 1;
    transform: translate(0, -50%);
    pointer-events: auto;
}

@media (max-width: 767px) {
    .area-back-floating {
        display: none !important;
    }
}

/* (Statische Back-Button-Section entfernt — nur Floating bleibt.) */


/* ─── Filter-Quicknav (sticky horizontal) ────────────────────── */

.filter-nav {
    position: sticky;
    top: var(--nav-height, 76px);
    z-index: 40;
    background: color-mix(in oklch, var(--bg) 92%, transparent);
    backdrop-filter: blur(20px) saturate(1.4);
    -webkit-backdrop-filter: blur(20px) saturate(1.4);
    border-bottom: 1px solid var(--border-soft);
    padding: 0.75rem 0;
    margin-bottom: -3rem; /* überdeckt eigene Flow-Position */
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--dur-medium) var(--ease);
    will-change: transform;
}

.filter-nav.visible {
    opacity: 1;
    pointer-events: auto;
}

.filter-nav-inner {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    overflow-x: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
    justify-content: center;
}

.filter-nav-inner::-webkit-scrollbar {
    display: none;
}

@media (max-width: 767px) {
    .filter-nav-inner {
        justify-content: flex-start;
    }
}

.filter-chip {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.5rem 1rem;
    font-family: var(--font-sans);
    font-size: 0.78rem;
    font-weight: 500;
    letter-spacing: 0.04em;
    color: var(--text-body);
    background: linear-gradient(to bottom,
        color-mix(in oklch, white 50%, transparent),
        color-mix(in oklch, white 20%, transparent));
    border: 1px solid var(--border);
    border-radius: var(--radius-pill);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    box-shadow: inset 0 1px 0 color-mix(in oklch, white 40%, transparent),
                var(--depth-soft);
    transition: all var(--dur-fast) var(--ease);
    cursor: pointer;
    white-space: nowrap;
}

.filter-chip:hover {
    color: var(--accent-deep);
    border-color: var(--accent-40);
}

.filter-chip.active {
    background: linear-gradient(to bottom,
        var(--accent-2-light),
        var(--accent-2-deep));
    color: white;
    border-color: var(--accent-2-40);
}


/* ─── Leistungen-Hub (leistungen.html: 6 Cards-Übersicht) ────── */

.subpage-hero-centered {
    text-align: center;
    padding-block: clamp(2.5rem, 5vw, 5rem) clamp(2rem, 4vw, 3rem);
}

.subpage-hero-centered .area-back {
    margin-bottom: 2rem;
}

.subpage-hero-centered .label {
    margin-bottom: 1rem;
}

.subpage-hero-centered h1 {
    margin-bottom: 1.25rem;
    max-width: 720px;
    margin-inline: auto;
}

.subpage-hero-centered > .container > p {
    color: var(--text-body);
    font-size: 1.05rem;
    max-width: 640px;
    margin-inline: auto;
    text-wrap: balance;
}

.leistung-hub-section {
    padding-block: clamp(2.5rem, 4vw, 4rem) clamp(4rem, 7vw, 6rem);
    position: relative;
    overflow: hidden;
    isolation: isolate;
}

/* Logo-Watermark als Hub-Anker (analog USP-Section auf Hauptseite) */
.leistung-hub-section::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: clamp(380px, 75vw, 1100px);
    aspect-ratio: 1779 / 1466;
    transform: translate(-50%, -50%);
    background-image: url('images/logo-watermark.png');
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
    opacity: 0.07;
    mix-blend-mode: multiply;
    filter: blur(1px);
    border-radius: clamp(20px, 4vw, 40px);
    mask-image: radial-gradient(
        ellipse 65% 70% at center,
        black 0%,
        black 55%,
        transparent 100%
    );
    -webkit-mask-image: radial-gradient(
        ellipse 65% 70% at center,
        black 0%,
        black 55%,
        transparent 100%
    );
    z-index: 0;
    pointer-events: none;
}

.leistung-hub-section > .container {
    position: relative;
    z-index: 1;
}

.leistung-hub-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 1.5rem;
    max-width: 1400px;
    margin: 0 auto;
}

@media (min-width: 700px) {
    .leistung-hub-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 1024px) {
    .leistung-hub-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

.leistung-hub-card {
    position: relative;
    aspect-ratio: 4/3;
    border-radius: var(--radius-lg);
    overflow: hidden;
    isolation: isolate;
    box-shadow: var(--depth-rest);
    background: var(--bg);
    text-decoration: none;
    color: inherit;
    transition: transform var(--dur-medium) var(--ease),
                box-shadow var(--dur-medium) var(--ease);
}

.leistung-hub-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--depth-hover), var(--depth-glow);
}

.leistung-hub-img {
    position: absolute;
    inset: 0;
    background-size: cover;
    background-position: center;
    transform: scale(1.04);
    transition: transform 1.2s var(--ease);
}

.leistung-hub-card:hover .leistung-hub-img {
    transform: scale(1.09);
}

.leistung-hub-overlay {
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(to top,
                    color-mix(in oklch, oklch(15% 0.04 60) 88%, transparent) 0%,
                    color-mix(in oklch, oklch(15% 0.04 60) 50%, transparent) 50%,
                    transparent 85%);
}

.leistung-hub-meta {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 1.5rem 1.5rem 1.65rem;
    color: white;
}

.leistung-hub-cat {
    display: inline-block;
    font-family: var(--font-sans);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--accent-light);
    margin-bottom: 0.5rem;
    text-shadow: 0 1px 4px color-mix(in oklch, oklch(15% 0.04 60) 60%, transparent);
}

.leistung-hub-meta h2 {
    font-family: var(--font-serif);
    font-size: clamp(1.25rem, 2vw, 1.6rem);
    font-weight: 400;
    color: white;
    margin-bottom: 0.4rem;
    line-height: 1.2;
    letter-spacing: -0.005em;
    text-shadow: 0 1px 8px color-mix(in oklch, oklch(15% 0.04 60) 70%, transparent);
}

.leistung-hub-meta h2 em {
    color: var(--accent-light);
    font-variation-settings: 'opsz' 80, 'wght' 380, 'SOFT' 100;
}

.leistung-hub-count {
    font-family: var(--font-sans);
    font-size: 0.78rem;
    font-weight: 500;
    color: color-mix(in oklch, white 80%, transparent);
    letter-spacing: 0.04em;
    text-shadow: 0 1px 4px color-mix(in oklch, oklch(15% 0.04 60) 60%, transparent);
}


/* ─── Referenzen-Toolbar (Kratzer-Pattern) ───────────────────── */

.ref-toolbar {
    background: transparent;
    border-bottom: 1px solid var(--border-soft);
    padding-block: 1rem;
}

.ref-toolbar-inner {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
}

.ref-toolbar-inner > .area-back {
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    margin-bottom: 0;
}

.ref-filter-chips {
    display: flex;
    gap: 0.5rem;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;
    -ms-overflow-style: none;
    padding-block: 0.25rem;
    justify-content: center;
}

.ref-filter-chips::-webkit-scrollbar { display: none; }

@media (max-width: 767px) {
    .ref-toolbar-inner {
        flex-direction: column;
        gap: 1rem;
    }
    .ref-toolbar-inner > .area-back {
        position: static;
        transform: none;
        align-self: flex-start;
    }
    .ref-filter-chips {
        justify-content: flex-start;
        align-self: stretch;
    }
}

@media (min-width: 700px) {
    .ref-filter-chips {
        justify-content: center;
        flex-wrap: wrap;
        overflow: visible;
    }
}

.ref-filter-chip {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    padding: 0.55rem 1.1rem;
    font-family: var(--font-sans);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.04em;
    color: var(--text-body);
    background: linear-gradient(to bottom,
                    color-mix(in oklch, white 50%, transparent),
                    color-mix(in oklch, white 20%, transparent));
    border: 1px solid var(--border);
    border-radius: var(--radius-pill);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    cursor: pointer;
    transition: background var(--dur-normal) var(--ease),
                border-color var(--dur-normal) var(--ease),
                color var(--dur-normal) var(--ease);
}

.ref-filter-chip:hover {
    border-color: var(--accent-40);
    color: var(--accent-deep);
}

.ref-filter-chip.active {
    background: linear-gradient(to bottom, var(--accent-2-light), var(--accent-2-deep));
    border-color: var(--accent-2-40);
    color: white;
}


/* ─── Referenzen-Grid (Kratzer-Pattern) ──────────────────────── */

.ref-grid-section {
    /* Top + Bottom Fade zum Page-BG. Vorher: solid var(--bg) →
       harter Tint-Sprung zur transparent-startenden Footer-Zone
       (Page-BG scheint durch, Section-BG hatte 5%-Bauplan-Tint).
       Jetzt: BG fadet an beiden Edges zu transparent, Page-BG
       übernimmt nahtlos. Keine sichtbare Kante mehr. */
    background: linear-gradient(to bottom,
        transparent 0%,
        var(--bg) clamp(80px, 10vh, 160px),
        var(--bg) calc(100% - clamp(80px, 10vh, 160px)),
        transparent 100%);
    padding-block: clamp(3rem, 5vw, 5rem);
    position: relative;
    overflow: hidden;
    isolation: isolate;
}

/* Atmo-Underlay-Bild (Bauplan-Werkzeug) als sepia-Wash für thematische
   Tiefe — analog zur Reviews-Section auf Hauptseite. */
.ref-grid-section::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image: url('images/atmo/bauplan-arch-treppe.jpg');
    background-size: cover;
    background-position: center;
    filter: sepia(0.6) saturate(1.3) brightness(1.05) hue-rotate(-12deg);
    opacity: 0.05;
    mask-image: linear-gradient(
        to bottom,
        transparent 0%,
        black 120px,
        black calc(100% - 120px),
        transparent 100%
    );
    -webkit-mask-image: linear-gradient(
        to bottom,
        transparent 0%,
        black 120px,
        black calc(100% - 120px),
        transparent 100%
    );
    z-index: 0;
    pointer-events: none;
}

.ref-grid-section > .container {
    position: relative;
    z-index: 1;
}

.ref-grid {
    position: relative;
    display: grid;
    grid-template-columns: 1fr;
    gap: 1.25rem;
    max-width: 1400px;
    margin: 0 auto;
}

/* Hidden state — display:none damit View Transitions API das Item als
   "nicht präsent" behandeln kann. */
.ref-item.hidden {
    display: none;
}

/* View Transitions — ref-grid als eigenständige Transition-Gruppe damit
   die Höhenänderung smooth gemorpht wird. */
.ref-grid {
    view-transition-name: ref-grid;
}

::view-transition-group(*) {
    animation-duration: 350ms;
    animation-timing-function: ease-out;
}

/* Während Filter-Transitions die Cross-Document-Page-Slide-Animation
   für die root-Gruppe deaktivieren — sonst slidet die ganze Seite. */
html.filter-transition::view-transition-old(root),
html.filter-transition::view-transition-new(root) {
    animation: none;
}

@media (min-width: 700px) {
    .ref-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 1024px) {
    .ref-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

.ref-item {
    position: relative;
    aspect-ratio: 4/3;
    border-radius: var(--radius-lg);
    overflow: hidden;
    isolation: isolate;
    box-shadow: var(--depth-rest);
    background: var(--bg);
    transition: all var(--dur-medium) var(--ease);
    cursor: pointer;
}

.ref-item:hover {
    transform: translateY(-3px);
    box-shadow: var(--depth-hover), var(--depth-glow);
}

.ref-item-img {
    position: absolute;
    inset: 0;
    background-size: cover;
    background-position: center;
    transform: scale(1.04);
    transition: filter var(--dur-medium) var(--ease),
                transform 1.2s var(--ease);
}

.ref-item:hover .ref-item-img {
    transform: scale(1.09);
}

.ref-item-overlay {
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(to top,
                    color-mix(in oklch, oklch(15% 0.04 60) 88%, transparent) 0%,
                    color-mix(in oklch, oklch(15% 0.04 60) 50%, transparent) 45%,
                    transparent 80%);
}

.ref-item-meta {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 1.25rem;
    color: white;
}

.ref-item-cat {
    display: inline-block;
    font-family: var(--font-sans);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--accent-light);
    margin-bottom: 0.5rem;
    text-shadow: 0 1px 4px color-mix(in oklch, oklch(15% 0.04 60) 60%, transparent);
}

.ref-item-meta h3 {
    font-family: var(--font-serif);
    font-size: clamp(1.1rem, 1.7vw, 1.35rem);
    font-weight: 400;
    color: white;
    margin-bottom: 0.3rem;
    line-height: 1.2;
    text-shadow: 0 1px 8px color-mix(in oklch, oklch(15% 0.04 60) 70%, transparent);
}


/* ─── Lightbox (Kratzer 3-Slide-Carousel) ────────────────────── */

.lb-backdrop {
    position: fixed;
    inset: 0;
    z-index: 10000;
    background: var(--bg);
    opacity: 0;
    visibility: hidden;
    /* 0.4s synced mit viewport-scale für gleichzeitiges Open/Close.
       --ease (expo-out) gibt der Open-Animation einen sauberen "Pop"
       beim Ankommen, beim Close das gleiche Reverse-Profil. */
    transition: opacity 0.4s var(--ease), visibility 0.4s;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    will-change: opacity;
}

/* Parent-Page-Animations pausieren während Lightbox aktiv. */
body.lightbox-open .footer-ghost {
    animation-play-state: paused !important;
}

.lb-backdrop.active {
    opacity: 1;
    visibility: visible;
}

.lb-viewport {
    position: relative;
    width: 90vw;
    height: 85vh;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    user-select: none;
    touch-action: pan-y;
    cursor: default;
    transform: scale(0.94);
    /* 0.4s synced mit Backdrop-Opacity, gleiches Easing → Bild kommt
       exakt zusammen mit Fade-In an. */
    transition: transform 0.4s var(--ease);
    will-change: transform;
}

.lb-backdrop.active .lb-viewport {
    transform: scale(1);
}

.lb-track {
    display: flex;
    width: 100%;
    height: 100%;
    transform: translateX(-100%);
    transition: transform 0.45s var(--ease-slide);
    will-change: transform;
}

.lb-track.lb-no-transition { transition: none; }

.lb-slide {
    flex: 0 0 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 0.5rem;
    overflow: hidden;
}

.lb-slide img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    border-radius: 4px;
    /* Default opacity 1 — kein Fade-In bei jedem Slide-Wechsel.
       Bilder sind im lbOpen() vorgeladen, müssen instant erscheinen.
       Bei Cache-Miss (sehr seltener Edge-Case bei Pre-Load) zeigt
       der Browser das Bild beim Laden — Standard-Web-Verhalten. */
    opacity: 1;
    transform-origin: center center;
    /* Nur transform animiert — für Zoom-Toggle. opacity ist statisch. */
    transition: transform 0.4s var(--ease-slide);
    -webkit-user-drag: none;
}

.lb-slide img.lb-zoomed {
    transform: scale(2);
    cursor: zoom-out;
}

.lb-close,
.lb-prev,
.lb-next {
    position: fixed;
    display: flex;
    align-items: center;
    justify-content: center;
    color: color-mix(in oklch, var(--text) 45%, transparent);
    background: transparent;
    border: none;
    padding: 0;
    cursor: pointer;
    transition: color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
    z-index: 10001;
    -webkit-tap-highlight-color: transparent;
}

.lb-close:hover,
.lb-prev:hover,
.lb-next:hover {
    color: var(--text);
}

.lb-close {
    top: 1.5rem;
    right: 1.5rem;
    width: 44px;
    height: 44px;
}

.lb-prev,
.lb-next {
    top: 50%;
    transform: translateY(-50%);
    width: 56px;
    height: 56px;
}

.lb-prev { left: 1.5rem; }
.lb-next { right: 1.5rem; }

.lb-counter {
    position: fixed;
    bottom: 3.5rem;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-family: var(--font-serif);
    font-size: 14px;
    letter-spacing: 0.08em;
    color: color-mix(in oklch, var(--text) 60%, transparent);
    z-index: 10001;
    pointer-events: none;
    font-variant-numeric: tabular-nums;
}

.lb-counter-num { line-height: 1; }

.lb-counter-sep {
    display: inline-block;
    width: 22px;
    height: 1px;
    background: color-mix(in oklch, var(--text) 35%, transparent);
}

.lb-thumbs {
    position: fixed;
    bottom: 1.25rem;
    left: 0;
    right: 0;
    display: none;
    gap: 6px;
    padding: 0 1rem;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;
    -ms-overflow-style: none;
    z-index: 10001;
    justify-content: flex-start;
    scroll-behavior: smooth;
}

.lb-thumbs::-webkit-scrollbar { display: none; }

.lb-thumbs.active {
    display: flex;
    justify-content: center;
}

.lb-thumbs.active::before,
.lb-thumbs.active::after {
    content: '';
    flex: 0 0 auto;
}

.lb-thumb {
    flex: 0 0 54px;
    height: 54px;
    border: 1px solid transparent;
    border-radius: 4px;
    overflow: hidden;
    cursor: pointer;
    opacity: 0.38;
    background: transparent;
    padding: 0;
    transition: opacity var(--dur-fast) var(--ease),
                border-color var(--dur-fast) var(--ease),
                transform var(--dur-fast) var(--ease);
}

.lb-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    pointer-events: none;
}

.lb-thumb:hover { opacity: 0.75; }

.lb-thumb.active {
    opacity: 1;
    border-color: color-mix(in oklch, var(--text) 70%, transparent);
}

.lb-backdrop.has-thumbs .lb-counter {
    bottom: 5.25rem;
}

@media (max-width: 767px) {
    .lb-prev, .lb-next { display: none; }
    .lb-close { top: 0.75rem; right: 0.75rem; width: 40px; height: 40px; }
    .lb-viewport { width: 100vw; height: 78vh; }
    .lb-counter { bottom: 1.75rem; font-size: 12px; }
    .lb-backdrop.has-thumbs .lb-counter { bottom: 4.5rem; }
    .lb-thumbs { bottom: 0.75rem; }
    .lb-thumb { flex: 0 0 46px; height: 46px; }
}


/* ─── Legal-Pages (Impressum, Datenschutz) ───────────────────── */

.legal-page {
    padding-top: calc(var(--nav-height) + 4rem);
    padding-bottom: clamp(4rem, 7vw, 6rem);
}

.legal-content {
    max-width: var(--container-narrow);
}

.legal-content h1 {
    margin-bottom: 2rem;
}

.legal-content h2 {
    font-size: clamp(1.3rem, 2vw, 1.6rem);
    margin-block: 2rem 1rem;
}

.legal-content p {
    margin-bottom: 1rem;
    color: var(--text-body);
}

.legal-content a {
    color: var(--accent-deep);
    border-bottom: 1px solid var(--accent-25);
    transition: border-color var(--dur-fast) var(--ease);
}

.legal-content a:hover {
    border-bottom-color: var(--accent);
}

.legal-content ul {
    list-style: disc;
    padding-left: 1.5rem;
    margin-bottom: 1rem;
}

.legal-content li {
    color: var(--text-body);
    margin-bottom: 0.4rem;
}
