/* === base/variables.css === */
/* Design Tokens – from Kadence Theme Export */
:root {
    --global-palette1: #202732;
    --global-palette2: #aa8d70;
    --global-palette3: #ccab86;
    --global-palette4: #000000;
    --global-palette5: #cccccc;
    --global-palette6: #eeeeee;
    --global-palette7: #EDF2F7;
    --global-palette8: #F7FAFC;
    --global-palette9: #ffffff;

    --color-gold: var(--global-palette2);
    --color-gold-light: var(--global-palette3);
    --color-gold-hover: #96795e;
    --color-red: #630303;
    --color-text: var(--global-palette4);
    --color-heading: var(--global-palette1);
    --color-text-light: #666;
    --color-text-muted: var(--global-palette5);
    --color-bg: var(--global-palette9);
    --color-bg-light: #f2f2f2;
    --color-bg-dark: var(--global-palette1);
    --color-border: var(--global-palette6);
    --color-white: #fff;
    --color-black: #000;
    --color-whatsapp: #25d366;

    --font-heading: 'Roboto Condensed', 'Arial Narrow', sans-serif;
    --font-body: 'Roboto', 'Helvetica Neue', Arial, sans-serif;

    /*
     * Ueberschriftengroessen.
     *
     * Dieselben Werte standen vorher als Zahl in neun Bausteinen. Eine
     * Mobilregel haette deshalb neun Stellen gebraucht und beim naechsten neuen
     * Abschnitt wieder eine zehnte — und genau das ist passiert: auf dem Handy
     * standen Abschnittsueberschriften in voller Desktopgroesse.
     *
     * Jetzt steht die Groesse einmal hier und wird unten im Medienblock einmal
     * zurueckgenommen. Ein neuer Abschnitt, der die Variable nutzt, ist damit
     * von sich aus richtig.
     */
    --schrift-abschnitt: 50.4px;   /* h2 einer Sektion */
    --schrift-untertitel: 36px;    /* h2/h3 im Fliesstext */

    /*
     * Platz, den die Gardine des Immo-Finders am Rand einnimmt. Steht hier und
     * nicht im Baustein, weil die ganze Seite damit rechnen muss: der Koerper
     * bekommt ihn als Innenabstand, die festen Elemente ruecken um ihn nach
     * innen, und die beiden Stellen, die mit 100vw ueber die volle Breite
     * gehen, ziehen ihn ab. Das Skript setzt den Wert, ohne Gardine ist er 0.
     */
    --finder-raum: 0px;
    --finder-raum-unten: 0px;
    /*
     * Takt der Gardine. Sie fuhr mit 520ms und einer Kurve herein, die gleich
     * mit voller Geschwindigkeit losgeht — das wirkte ruckartig. Jetzt laeuft
     * sie etwas laenger an und bremst am Ende weich aus. Balken, Koerper und
     * Kopfzeile teilen beide Werte, damit nichts gegeneinander laeuft.
     */
    --finder-dauer: 760ms;
    --finder-kurve: cubic-bezier(.45, .05, .25, 1);

    --container-width: 1200px;
    --container-padding: 50px;
    --container-padding-mobile: 20px;
    --header-height: 100px;

    /* Hakensymbol als Maske. Siehe components/contact-form.css: als Zeichen
       geschrieben zieht iOS die Emoji-Schrift heran und ignoriert die Farbe. */
    --haken: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M9.3 18.2 2.6 11.5l2.5-2.5 4.2 4.2L18.9 4l2.5 2.5z'/%3E%3C/svg%3E");
    /* Heller Pfeil fuer den grauen Kreis in der mobilen Kategorieliste. */
    --pfeil-rechts-hell: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 20'%3E%3Cpath fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2 2l8 8-8 8'/%3E%3C/svg%3E");
    --pfeil-rechts: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 20'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2 2l8 8-8 8'/%3E%3C/svg%3E");
}

/*
 * Auf dem Handy sind 50 Pixel eine halbe Bildschirmbreite pro Wort. Die
 * Groessen werden hier einmal zurueckgenommen; jeder Baustein, der die
 * Variablen benutzt, folgt automatisch.
 */
@media (max-width: 768px) {
    :root {
        --schrift-abschnitt: 28.8px;
        --schrift-untertitel: 26px;
    }
}
@media (max-width: 480px) {
    :root {
        --schrift-abschnitt: 28.8px;
        --schrift-untertitel: 22px;
    }
}


/* === base/reset.css === */
/* Reset & Base Elements */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
/*
 * scroll-padding gilt auch fuer das Scrollen, das der Browser selbst macht:
 * beim Sprung auf einen Anker und beim Wechsel ins naechste Eingabefeld mit
 * den Pfeilen der Telefontastatur. Ohne diesen Abstand schiebt er das Feld
 * genau bis an die Kante — unter der fixierten Kopfzeile heisst das
 * angeschnitten.
 */
html {
    font-size: 18px;
    scroll-behavior: smooth;
    scroll-padding-top: calc(var(--header-height) + 16px);
    scroll-padding-bottom: 24px;
}

/*
 * Waagerechter Bildlauf: verhindern, nicht scrollen lassen.
 *
 * Abschnitte, die ueber den Satzspiegel hinaus die ganze Seitenbreite
 * einnehmen, arbeiten mit width: 100vw — siehe layouts/sell-property.css. Das
 * Mass schliesst die senkrechte Bildlaufleiste ein, die Seite wird dadurch um
 * deren Breite breiter als das Fenster und laesst sich seitwaerts schieben.
 * Derselbe Fehler steckte einmal in der Trennlinie ueber dem Kontaktbereich,
 * siehe den Hinweis in components/contact-form.css.
 *
 * clip statt hidden: hidden macht den Rumpf zum Bildlaufbehaelter und nimmt
 * position: sticky darin die Wirkung. clip schneidet nur ab. Fuer Browser ohne
 * clip steht hidden davor; die Kopfzeile ist fixiert, nicht sticky, also
 * schadet es dort nicht.
 */
body {
    overflow-x: hidden;
    overflow-x: clip;
}
body {
    font-family: var(--font-body);
    font-weight: 300;
    color: var(--color-text);
    background: var(--color-bg);
    line-height: 1.6;
    height: 100%;
    position: relative;
    -webkit-font-smoothing: antialiased;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--color-gold-light); text-decoration: none; transition: color 0.2s; }
a:hover { color: var(--color-gold); }
p { margin-bottom: 1em; }

.skip-link {
    position: absolute; top: -100%; left: 0;
    background: var(--color-gold); color: white; padding: 8px 16px; z-index: 1000;
}
.skip-link:focus { top: 0; }


/* === base/typography.css === */
/* Typography – Headings */
h1, h2, h3, h4, h5 {
    font-family: var(--font-heading);
    line-height: 1.2;
    font-weight: 300;
}
h1 { font-size: 3.6em; text-transform: uppercase; font-weight: 300; line-height: 1.1; color: var(--color-heading); }
h2 { font-size: 2.8em; font-weight: 300; line-height: 1.2; color: var(--color-heading); margin-bottom: 0.5em; }
h3 { font-size: 1.8em; font-weight: 300; line-height: 1.3; color: var(--color-heading); }
h4 { font-size: 1.2em; font-weight: 400; line-height: 1.4; color: var(--color-text); }
h5 { font-size: 1.1em; text-transform: uppercase; font-weight: 400; line-height: 1.6; color: var(--color-text); }
h6 { font-size: 18px; font-weight: 700; line-height: 1.5; color: var(--color-text-muted); }


/* === layouts/containers.css === */
/* Container */
.container {
    max-width: var(--container-width);
    margin: 0 auto;
    padding: 0 var(--container-padding);
}


/* === components/header.css === */
/* Site Header */
/*
 * Die Kopfzeile steht dauerhaft, sie wandert nicht.
 *
 * Vorher war sie oben "absolute" und wurde beim Scrollen auf "fixed"
 * umgeschaltet: sie scrollte also erst weg und klappte dann wieder herein.
 * Das sah nach Sprung aus und war zugleich die Quelle des Ruckelns — der
 * Wechsel der Positionierung zwingt den Browser mitten im Scrollen zu einer
 * neuen Layoutrechnung.
 *
 * Jetzt bleibt sie stehen, und es aendert sich nur eine Deckfarbe: der
 * Verlauf ist der Grund des Elements, die deckende Flaeche liegt als ::before
 * darueber und wird ein- und ausgeblendet. Eine Aenderung an opacity macht
 * der Browser im Kompositor — ohne Layout, ohne Neuzeichnen.
 */
.site-header {
    position: fixed; top: 0; left: 0; right: 0; z-index: 100;
    background: linear-gradient(rgb(0, 0, 0) 1%, rgba(32, 39, 50, 0) 100%);
    height: var(--header-height);
}
.site-header::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background: rgba(0, 0, 0, 0.7);
    opacity: 0;
    transition: opacity 0.3s;
    pointer-events: none;
}
.site-header.is-scrolled::before { opacity: 1; }

.site-header__container { padding: 0 var(--container-padding); height: 100%; }
.site-header__grid {
    display: grid; grid-template-columns: 1fr auto 1fr;
    align-items: center; height: 100%;
}
.site-header__left { display: flex; align-items: center; }
.site-header__center { display: flex; justify-content: center; }
.site-header__right { display: flex; justify-content: flex-end; align-items: center; }
/*
 * Hoehe nicht festnageln. Der Reset erlaubt jedem Bild "max-width: 100%", die
 * Breite darf also schrumpfen - eine feste Hoehe daneben zieht das Logo dann
 * in die Breite zusammen. Mobil bekommt die Logo-Spalte nur die halbe
 * Kopfzeile, und genau dort war es gequetscht.
 *
 * Mit "height: auto" schrumpft die Hoehe mit. Das Seitenverhaeltnis steht
 * ueber width und height am <img>, der Platz wird also trotzdem vorab
 * reserviert und nichts springt beim Laden.
 */
.site-logo img { width: 250px; max-width: 100%; height: auto; display: block; }
/*
 * Die Menuepunkte fuellen die Kopfzeile ueber die Hoehe, nicht ueber die
 * Zeilenhoehe. Mit "line-height: var(--header-height)" blieben sie 100 Pixel
 * hoch, auch wenn die Kopfzeile beim Scrollen auf 80 schrumpft — die Zeile
 * ragte dann unten heraus, und alles andere zentrierte sich auf der falschen
 * Hoehe. Sichtbar war das am Logo, das zu tief sass.
 */
.site-header__center, .nav-primary, .nav-primary__list { height: 100%; }
.nav-primary__list { list-style: none; display: flex; align-items: stretch; }
.nav-primary__item { display: flex; }
.nav-primary__item > a {
    color: var(--global-palette9); font-family: var(--font-body);
    font-weight: 500; font-size: 15.2px; text-transform: uppercase;
    padding: 0 19px; line-height: 1;
    display: flex; align-items: center;
    transition: color 0.2s; white-space: nowrap;
}
.nav-primary__item > a:hover { color: var(--color-gold-light); }


/* === components/mega-menu.css === */
/* Mega Menu */
.nav-primary__item--mega { position: static; }
.mega-menu {
    /* An der Unterkante der Kopfzeile, nicht an einer festen Zahl: beim
       Scrollen ist sie 80 statt 100 Pixel hoch. */
    display: none; position: absolute; top: 100%;
    left: 50%; transform: translateX(-50%); width: 1200px;
    background: var(--color-white); box-shadow: rgba(0,0,0,0.1) 0px 2px 13px 0px;
    /* Gleichmaessig 50px ringsum. Der Abstand zwischen den Spalten kommt
       aus gap, nicht aus Innenabstand der Spalten — sonst addierte sich
       deren linker und rechter Abstand auf den Rand der Box und das
       Ergebnis waere aussen breiter als oben und unten. */
    padding: 50px; z-index: 200; gap: 60px;
}
.nav-primary__item--mega:hover .mega-menu { display: flex; }
.mega-menu__col { flex: 1; display: flex; flex-direction: column; }
.mega-menu__heading {
    font-family: var(--font-body); font-size: 18px; font-weight: 400;
    color: var(--color-gold); border-bottom: 1px solid var(--color-gold);
    padding-bottom: 4px; margin-bottom: 10px;
}
/*
 * Die Punkte stehen kleiner als die Spaltenueberschrift und sind durch eine
 * feine Linie getrennt. Die Linie steht unter jedem Punkt ausser dem letzten:
 * sie trennt, statt die Liste unten abzuschliessen.
 */
.mega-menu__col > a {
    color: var(--color-text); font-family: var(--font-body);
    font-weight: 300; font-size: 14.4px; line-height: 1.5;
    padding: 8px 0; display: block; text-transform: none;
    border-bottom: 1px solid var(--color-border);
}
.mega-menu__col > a:last-of-type { border-bottom: 0; }
.mega-menu__col a:hover { color: var(--color-gold); }

/*
 * "All New Developments" schliesst die Spalte ab und traegt deshalb mehr
 * Gewicht als die Punkte darueber. align-items:center allein richtet den Pfeil
 * nicht mittig aus, solange der Text eine Zeilenhoehe mitbringt, die hoeher
 * ist als seine Schrift — beide bekommen deshalb dieselbe Zeilenhoehe, und
 * das SVG steht als Block, damit es keine Grundlinie mehr gibt, an der es
 * haengt.
 */
.mega-menu__all-link-wrap {
    display: flex; align-items: center; gap: 8px; padding-top: 39px;
}
/*
 * :not() haelt den Pfeil aus der Textregel heraus. Ohne das greift sie auch
 * auf ihn — zwei Klassen und ein Element sind spezifischer als die eine Klasse
 * des Pfeils — und faerbt ihn in die Textfarbe statt in Beige.
 */
.mega-menu__all-link-wrap a:not(.mega-menu__arrow-link) {
    font-size: 20px; font-weight: 400; line-height: 1;
    color: var(--color-text); padding: 0; border-bottom: 0;
}
.mega-menu__all-link-wrap a:not(.mega-menu__arrow-link):hover { color: var(--color-gold); }
.mega-menu__arrow-link {
    display: flex; align-items: center; line-height: 1;
    /* Dasselbe Beige wie die Spaltenueberschriften. */
    color: var(--color-gold);
}
.mega-menu__arrow-link svg { width: 22px; height: 22px; display: block; }
.nav-primary__item--mega > a::after {
    content: ''; display: inline-block; width: 6px; height: 6px;
    border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor;
    transform: rotate(45deg); margin-left: 6px; vertical-align: 2px;
}


/* === components/lang-switcher.css === */
/* Language Switcher + Mobile Menu Toggle */
.nav-lang { display: flex; align-items: center; }
.lang-switcher {
    appearance: none; -webkit-appearance: none;
    width: 173px; height: 32px;
    background: linear-gradient(#efefef 0%, #fff 70%);
    border: none; border-radius: 0; color: #666;
    font-family: Arial, sans-serif; font-size: 16px; font-weight: 300;
    padding: 3px 28px 3px 8px; cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23666' stroke-width='1.5' fill='none'/%3E%3C/svg%3E"), linear-gradient(#efefef 0%, #fff 70%);
    background-repeat: no-repeat, no-repeat;
    background-position: right 10px center, 0 0;
    background-size: 12px 7px, 100% 100%;
}
.lang-switcher option { color: var(--color-text); background: var(--color-bg); }
.mobile-menu-toggle {
    display: none; background: none; border: none; cursor: pointer;
    flex-direction: column; gap: 5px; padding: 8px;
}
.mobile-menu-toggle span {
    display: block; width: 24px; height: 2px;
    background: var(--color-text); transition: 0.3s;
}


/* === components/hero.css === */
/*
 * Hero: Titelbild mit Textband darueber.
 *
 * Startseite, Listenseiten und Projektseiten bauen denselben Bereich. Er stand
 * dreimal getrennt im Stylesheet — und die Werte sind auseinandergelaufen: die
 * Startseite war auf dem Handy ein Drittel groesser als der Rest, ohne dass das
 * je jemand so wollte. "Den Hero kleiner machen" war damit kein Eingriff,
 * sondern drei, und einer wurde vergessen.
 *
 * Jetzt steht der Aufbau einmal hier. Was sich je Seitentyp wirklich
 * unterscheidet, steht als Wert am Rahmen und sonst nirgends:
 *
 *   --hero-hoehe      Hoehe des Bildbereichs
 *   --hero-deckkraft  Deckkraft des weissen Bandes
 *   --hero-bildlage   welcher Bildausschnitt beim Beschneiden stehen bleibt
 *   --hero-abstand    Innenabstand des Bandes
 *   --hero-schatten   Schlagschatten ueber der Bandkante
 *   --hero-max        Groesse der Ueberschrift auf dem grossen Schirm
 *
 * Eine neue Seitenart braucht damit sechs Werte und keine eigene Kopie.
 */
.homepage-hero,
.listing-hero,
.project-hero {
    position: relative;
    width: 100%;
    height: var(--hero-hoehe);
    overflow: hidden;
}

.homepage-hero {
    --hero-hoehe: 800px;
    --hero-deckkraft: 0.85;
    --hero-bildlage: 50% 50%;
    --hero-abstand: 60px 16px;
    --hero-schatten: 0 -4px 8px -3px rgba(0, 0, 0, 0.25);
    --hero-max: 72px;
}
.listing-hero {
    --hero-hoehe: 800px;
    --hero-deckkraft: 0.85;
    /* Auf den Listenbildern steht das Motiv unten — oben wird beschnitten. */
    --hero-bildlage: 50% 100%;
    --hero-abstand: 60px 16px;
    --hero-schatten: 0 -4px 8px -3px rgba(0, 0, 0, 0.25);
    --hero-max: 64.8px;
}
.project-hero {
    --hero-hoehe: 100vh;
    --hero-deckkraft: 0.7;
    --hero-bildlage: 50% 50%;
    --hero-abstand: 50px 40px 40px;
    --hero-schatten: none;
    --hero-max: 64.8px;
}

/* Als CSS-Hintergrund koennte der Browser keine Groesse waehlen — deshalb liegt
   hier ein echtes <img> mit srcset und wird per object-fit beschnitten. */
.homepage-hero__image,
.listing-hero__image,
.project-hero__image {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    display: block;
    object-fit: cover;
    object-position: var(--hero-bildlage);
}

.homepage-hero__overlay,
.listing-hero__overlay,
.project-title-overlay {
    position: absolute;
    bottom: 0; left: 0; right: 0;
    z-index: 10;
    background: rgba(255, 255, 255, var(--hero-deckkraft));
    text-align: center;
    padding: var(--hero-abstand);
    box-shadow: var(--hero-schatten);
}

/*
 * Die Ueberschrift waechst mit dem Fenster statt in Stufen zu springen: 9
 * Prozent der Fensterbreite, nach unten bei 28 Pixeln begrenzt, nach oben bei
 * der Groesse des jeweiligen Seitentyps. Bei 375 Pixeln sind das 33,8 Pixel.
 *
 * Mitwachsend, weil die Ueberschrift je Sprache unterschiedlich lang ist und
 * weitere Sprachen folgen. Feste Stufen hatten zur Folge, dass "NEUBAUPROJEKTE"
 * breiter war als der Schirm und mitten im Wort umbrach.
 */
.homepage-hero__overlay h2,
.listing-hero__overlay h1,
.project-title-overlay h1 {
    font-family: var(--font-heading);
    font-size: clamp(28px, 9vw, var(--hero-max));
    font-weight: 300;
    text-transform: uppercase;
    color: #202732;
    line-height: 1.1;
    margin: 0;
}

/* Auf Projektseiten steht unter der Ueberschrift noch Ort und Eckdaten. */
.project-title-overlay h1 { margin-bottom: 8px; }

.homepage-hero__overlay p,
.listing-hero__overlay p {
    font-size: 21.6px;
    font-weight: 300;
    color: #000;
    line-height: 1.6;
    margin: 0;
}
.project-title-overlay__location {
    font-size: 21.6px; font-weight: 400; color: #000; margin: 0 0 4px;
}
.project-title-overlay__meta {
    font-size: 18px; font-weight: 300; color: #000; line-height: 1.4; margin: 0;
}


/* === components/brochure.css === */
/* Brochure Circle Button */
.project-brochure { padding: 0; }
.brochure-link {
    position: fixed; right: 52px; top: 147px; z-index: 1000;
    width: 200px; height: 200px;
    background-color: var(--color-red);
    border: 2px solid var(--color-white); border-radius: 50%;
    box-shadow: 0 0 10px rgba(0,0,0,0.69);
    display: flex; flex-direction: column;
    align-items: center; justify-content: center;
    text-align: center; padding: 28px;
    color: var(--color-white); transition: background-color 0.2s;
}
.brochure-link:hover { background-color: #333; color: var(--color-white); }
/*
 * Der Kreis ist 200px breit, innen bleiben 144px. "PROJECT BROCHURE" hat ein
 * Leerzeichen und bricht dort von selbst; das deutsche "PROJEKTBROSCHUERE" ist
 * ein zusammengesetztes Wort ohne Bruchstelle und lief aus dem Kreis heraus.
 *
 * Die Sprachdateien tragen deshalb ein weiches Trennzeichen an der Fuge, und
 * nur dort wird getrennt: "PROJEKT-BROSCHUERE".
 *
 * Kein hyphens: auto. Damit sucht der Browser seine eigene Stelle und trennt
 * nach Silben — "BRO-SCHUERE" — und macht die gesetzte Fuge wertlos.
 * overflow-wrap bleibt als letzte Reissleine fuer eine kuenftige Sprache, in
 * der jemand ein langes Wort ohne Trennzeichen einsetzt: dann lieber irgendwo
 * gebrochen als ausserhalb des Kreises.
 */
.brochure-link__label {
    font-family: 'Roboto', sans-serif; font-size: 25.2px;
    text-transform: uppercase; font-weight: 700;
    line-height: 28.8px; color: var(--color-white);
    overflow-wrap: break-word;
}
.brochure-link__cta {
    font-family: 'Roboto', sans-serif; font-size: 18px;
    font-weight: 300; margin-top: 5px; line-height: 23.4px;
    color: var(--color-white);
}

/* Brochure request modal — measured against the WordPress popup:
   white box 800px wide, padding 60px 60px 50px, heading 64.8px/300 uppercase,
   labels 16px/700 with a red asterisk, inputs 38px with a 1px #ccc border. */
.brochure-modal[hidden] { display: none; }
.brochure-modal {
    position: fixed; inset: 0; z-index: 2000;
    display: flex; align-items: center; justify-content: center;
    padding: 40px 20px; overflow-y: auto;
}
.brochure-modal__overlay {
    position: fixed; inset: 0;
    background: rgba(32, 39, 50, 0.6);
}
.brochure-modal__box {
    position: relative;
    background: var(--color-white);
    width: 100%; max-width: 800px;
    /* auto margins keep it centred and, unlike flex centring alone, do not
       clip the top once the form is taller than the window */
    margin: auto;
    padding: 60px 60px 50px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.3);
}
/* Am grossen Schirm ist die Kopfzeile nur eine Huelle: der Titel laeuft wie
   bisher, das Kreuz sitzt absolut in der Ecke. */
.brochure-modal__kopf { display: block; }
.brochure-modal__close {
    position: absolute; top: 18px; right: 22px;
    background: none; border: 0; cursor: pointer;
    font-size: 34px; line-height: 1; color: #999;
}
.brochure-modal__close:hover { color: #202732; }

.brochure-form__title {
    font-family: var(--font-heading);
    font-size: clamp(28px, 8.5vw, 64.8px); font-weight: 300; line-height: 1.1;
    text-transform: uppercase; color: #000;
    margin: 0;
}
.brochure-form__intro {
    font-family: var(--font-body);
    font-size: 18px; font-weight: 300; line-height: 1.6; color: #000;
    margin: 8px 0 32px;
}

.brochure-form__row { display: grid; gap: 20px; margin-bottom: 20px; }
.brochure-form__row--3 { grid-template-columns: repeat(3, 1fr); }
.brochure-form__row--2 { grid-template-columns: repeat(2, 1fr); }

.brochure-form__field label {
    display: block;
    font-family: var(--font-body);
    font-size: 16px; font-weight: 700; color: #000;
    margin-bottom: 4px;
}
.brochure-form__field .req { color: #f00; }

.brochure-form__field input,
.brochure-form__field select,
.brochure-form__field textarea {
    width: 100%;
    font-family: var(--font-body); font-size: 16px; color: #333;
    background: var(--color-white);
    border: 1px solid #ccc; border-radius: 2px;
    padding: 6px 10px;
}
.brochure-form__field input,
.brochure-form__field select { height: 38px; }
.brochure-form__field textarea { height: 120px; resize: vertical; }
.brochure-form__field input:focus,
.brochure-form__field select:focus,
.brochure-form__field textarea:focus {
    outline: none; border-color: var(--color-gold);
}

/* The phone field carries the same country dropdown as the contact form */
.brochure-form__field .iti { width: 100%; }
.brochure-form__field .iti input { padding-left: 52px; }

/* Der Absendeknopf ist der Formularknopf der Site — .btn--submit in
   components/contact-form.css, beige mit weisser Schrift. Hier stand ein
   eigener in Grau; es gibt keinen Grund, warum dieses Formular anders
   aussehen sollte als das Kontaktformular. */
/*
 * Waehrend des Sendens: nicht blass, sondern in Bewegung.
 *
 * Ein ausgegrauter Knopf sieht aus wie einer, der nicht geht — dabei
 * arbeitet er gerade. Der Vorgang dauert rund eine Sekunde; ohne sichtbares
 * Zeichen tippt jemand ein zweites Mal oder haelt es fuer kaputt. Deshalb
 * volle Farbe und ein laufender Ring davor.
 */
#brochureSubmit.ist-sendend {
    /* Gegen .btn--submit:disabled { opacity: .6 }: waehrend des Sendens ist
       der Knopf nicht ausser Betrieb, sondern beschaeftigt. Blass heisst fuer
       jeden Besucher "geht nicht". */
    opacity: 1;
    background: var(--color-gold);
    cursor: wait;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}
#brochureSubmit.ist-sendend::before {
    content: '';
    width: 14px;
    height: 14px;
    border: 2px solid rgba(255, 255, 255, 0.45);
    border-top-color: #fff;
    border-radius: 50%;
    animation: ne-dreht 0.7s linear infinite;
}
@keyframes ne-dreht { to { transform: rotate(360deg); } }

/* Wer Bewegung abgestellt hat, bekommt den Ring stehend — als Zeichen
   genuegt er auch so. */
@media (prefers-reduced-motion: reduce) {
    #brochureSubmit.ist-sendend::before { animation: none; }
}

.brochure-form .form-feedback { margin-bottom: 16px; }

@media (max-width: 1024px) {
    /* The badge would sit on top of the hero title on narrow screens */
    .brochure-link { width: 140px; height: 140px; right: 16px; top: 120px; padding: 18px; }
    .brochure-link__label { font-size: 18px; line-height: 21px; }
    .brochure-link__cta { font-size: 14px; line-height: 18px; }
}
@media (max-width: 768px) {
    /*
     * Auf dem Telefon derselbe Aufbau wie das Navi-Overlay, nur hell statt
     * dunkel: eine Flaeche ueber den ganzen Schirm, eigene Kopfzeile mit dem
     * Kreuz rechts, und der Bildlauf liegt in dieser Flaeche.
     *
     * Das loest drei Dinge auf einmal. Der dunkle Grund, der beim Antippen
     * schliesst, ist nicht mehr zu treffen — vorher war das Formular beim
     * Wischen am Rand weg. Das Blatt beginnt oben statt in der Mitte, weil
     * nicht mehr ein Kasten in einem hoeheren Fenster zentriert wird. Und das
     * Kreuz sitzt dort, wo es auch im Menue sitzt.
     */
    .brochure-modal {
        display: block;
        position: fixed;
        inset: 0;
        z-index: 2000;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        /* Am Ende des Blattes nicht auf die Seite darunter weiterscrollen. */
        overscroll-behavior: contain;
        /*
         * Abstand fuer das Scrollen, das der Browser selbst macht: mit den
         * Pfeilen der Tastatur springt der Fokus ins naechste Feld, und ohne
         * diesen Abstand steht es danach an der Kante und ist angeschnitten.
         * Unten grosszuegig, weil dort die Tastatur steht.
         */
        scroll-padding: 24px 0 160px;
        background: var(--color-white);
        /* Oben derselbe Abstand wie an den Seiten, damit der Titel nicht
           weiter am Rand klebt als der Text darunter. Unten mehr Luft, damit
           der Absendeknopf nicht an der Kante haengt, wenn die Tastatur die
           Flaeche kurz haelt. */
        padding: 20px 20px 60px;
    }
    /* Der dunkle Grund hat hier keine Aufgabe mehr und darf auch nicht mehr
       schliessen — geschlossen wird ueber das Kreuz. */
    .brochure-modal__overlay { display: none; }

    .brochure-modal__box {
        max-width: none;
        margin: 0;
        padding: 0;
        background: none;
        box-shadow: none;
    }

    /* Kopfzeile wie .menue-mobil__kopf: auf Hoehe der Seitenkopfzeile, Kreuz
       rechts, 44x44 Flaeche. */
    /*
     * Titel links, Kreuz rechts, beides in der ersten Zeile. Die Kopfzeile war
     * vorher so hoch wie die Seitenkopfzeile und leer — der Titel begann
     * dadurch erst 100 Pixel weiter unten, und oben stand nichts als das Kreuz.
     */
    .brochure-modal__kopf {
        display: flex;
        /* Auf dieselbe Mitte wie das Kreuz: dessen Flaeche ist 44px hoch, die
           Titelzeile knapp 31px. Oben buendig stand der Titel deshalb sichtbar
           hoeher als das Zeichen daneben. */
        align-items: center;
        justify-content: space-between;
        gap: 12px;
        /* Der Abstand nach oben kommt vom Blatt selbst — hier keiner, sonst
           stuende der Titel tiefer als der Rand links breit ist. */
        padding: 0;
    }
    .brochure-modal__close {
        position: static;
        flex: 0 0 auto;
        width: 44px;
        height: 44px;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 34px;
        line-height: 1;
        color: #202732;
    }

    /* Gedraengter, damit weniger gescrollt werden muss. Die Eingabefelder
       behalten ihre 38px Hoehe — darunter wird das Tippen unsicher. */
    .brochure-form__title { font-size: 28px; }
    .brochure-form__intro { font-size: 16px; margin: 6px 0 18px; }
    .brochure-form__row { gap: 12px; margin-bottom: 12px; }
    .brochure-form__field label { font-size: 15px; margin-bottom: 3px; }
    .brochure-form__field textarea { min-height: 80px; }
    .brochure-form__row--3,
    .brochure-form__row--2 { grid-template-columns: 1fr; }
}

/*
 * Feste Leiste am unteren Rand des Telefons — die "flyingNavi" der alten
 * Mobilvorlage (Klasse mobNavi: width 100%, position fixed, bottom 0).
 *
 * Sie loest auf dem Handy den runden Broschuerenaufkleber ab. Der klebt auf
 * dem grossen Schirm rechts oben; auf einem Telefon legt er sich ueber den
 * Text und ist mit dem Daumen schlecht zu erreichen.
 */
.mob-navi { display: none; }

@media (max-width: 768px) {
    .brochure-link { display: none; }

    .mob-navi {
        display: flex;
        position: fixed;
        bottom: 0; left: 0; right: 0;
        z-index: 900;
        box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.2);
    }
    .mob-navi__teil {
        flex: 1 1 50%;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 2px;
        padding: 8px 0 7px;
        text-decoration: none;
        text-align: center;
        /* Farben der alten Leiste, nachgemessen: Dunkelrot fuer die
           Broschuere, das WhatsApp-Gruen etwas dunkler als das Markengruen. */
        background: rgb(105, 0, 0);
        color: #fff;
    }
    .mob-navi__teil--whatsapp { background: rgb(2, 168, 88); }

    /*
     * Beim Antippen nichts aendern.
     *
     * Ein Fingertipp loest auf dem Telefon hover, active und focus aus. Aus
     * dem Reset kommt a:hover { color: gold } — Gold auf Dunkelrot ist beim
     * Druecken nicht mehr zu lesen. Die Kacheln behalten deshalb in jedem
     * Zustand ihre Farbe; die Rueckmeldung gibt das Fenster, das aufgeht.
     * tap-highlight-color nimmt zusaetzlich den grauen Schleier, den iOS und
     * Android von sich aus darueberlegen.
     */
    .mob-navi__teil,
    .mob-navi__teil:hover,
    .mob-navi__teil:focus,
    .mob-navi__teil:active {
        color: #fff;
        background: rgb(105, 0, 0);
        -webkit-tap-highlight-color: transparent;
    }
    .mob-navi__teil--whatsapp,
    .mob-navi__teil--whatsapp:hover,
    .mob-navi__teil--whatsapp:focus,
    .mob-navi__teil--whatsapp:active {
        background: rgb(2, 168, 88);
    }
    .mob-navi__titel {
        font-family: var(--font-heading);
        font-size: 21px; font-weight: 400; line-height: 1.2;
    }
    .mob-navi__zusatz { font-size: 14px; font-weight: 400; line-height: 1.2; }

    /*
     * Platz fuer die Leiste, damit sie nichts verdeckt, was ganz unten steht.
     * An die Klasse gebunden statt an body: die Leiste gibt es nur auf
     * Projektseiten, und auf allen anderen Seiten stand dadurch ein leerer
     * weisser Streifen unter der Fusszeile.
     */
    body.hat-mob-navi { padding-bottom: 62px; }
}

/*
 * Bestaetigung nach dem Absenden.
 *
 * Ein kleines Fenster in der Mitte statt einer Meldung am Ende des Formulars.
 * Es verschwindet von selbst; zu treffen ist trotzdem etwas — das Kreuz und
 * die ganze Flaeche daneben.
 */
.ne-hinweis {
    position: fixed;
    inset: 0;
    z-index: 3000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: rgba(32, 39, 50, 0.45);
    opacity: 0;
    transition: opacity 0.25s;
}
.ne-hinweis.ist-da { opacity: 1; }

/* Gruen und weisse Schrift: die Bestaetigung soll auf den ersten Blick als
   Erfolg gelesen werden, nicht erst nach dem Satz. Der Ton ist der der
   Erfolgsmeldung im Kontaktformular. */
.ne-hinweis__kasten {
    position: relative;
    max-width: 420px;
    width: 100%;
    background: #1a3a1a;
    color: #fff;
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.25);
    padding: 32px 28px 30px;
    text-align: center;
    /* Kommt mit dem Einblenden leicht herauf — genug, um wahrgenommen zu
       werden, zu wenig, um zu stoeren. */
    transform: translateY(8px);
    transition: transform 0.25s;
}
.ne-hinweis.ist-da .ne-hinweis__kasten { transform: translateY(0); }

.ne-hinweis__text {
    margin: 0;
    font-family: var(--font-body);
    font-size: 17px;
    line-height: 1.5;
    color: #fff;
}

/*
 * Haken ueber dem Satz — er sagt dasselbe noch einmal ohne Worte.
 *
 * Als Maske und nicht als Zeichen: das Hakenzeichen zieht auf iOS die
 * Emoji-Schrift heran und ignoriert die Farbe. Dieselbe Loesung wie bei den
 * Merkmalslisten, siehe --haken in base/variables.css.
 */
.ne-hinweis__haken {
    display: block;
    width: 34px;
    height: 34px;
    margin: 0 auto 14px;
    background: #55ff55;
    -webkit-mask: var(--haken) center / contain no-repeat;
    mask: var(--haken) center / contain no-repeat;
}

.ne-hinweis__zu {
    position: absolute;
    top: 4px;
    right: 6px;
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: 0;
    font-size: 28px;
    line-height: 1;
    color: rgba(255, 255, 255, 0.7);
    cursor: pointer;
}
.ne-hinweis__zu:hover { color: #fff; }


/* === components/gallery.css === */
/* Gallery Slider */
.project-gallery { padding: 0; width: 100%; position: relative; overflow: visible \!important; }
/*
 * Die Galerie rastet seitenweise ein.
 *
 * Vorher war sie ein freier Bildlauf: eine Wischgeste konnte an jeder
 * beliebigen Pixelposition stehenbleiben, und zwei halbe Bilder standen
 * nebeneinander. Jetzt sitzt ein Rastpunkt auf jedem zweiten Bild — eine
 * Geste bewegt genau eine Seite, also die zwei sichtbaren Bilder.
 * scroll-snap-stop verhindert, dass ein kraeftiger Wisch mehrere Seiten
 * ueberspringt.
 */
.gallery {
    display: flex; overflow-x: auto;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
    scroll-snap-type: x mandatory;
}
.gallery::-webkit-scrollbar { display: none; }
.gallery__slide { flex: 0 0 50%; overflow: hidden; }
.gallery__slide:nth-child(odd) { scroll-snap-align: start; scroll-snap-stop: always; }
/* Bei ungerader Bildzahl liegt hinter dem letzten Rastpunkt keine volle Seite
   mehr. Ohne diese Zeile bliebe das letzte Bild nur halb sichtbar. */
.gallery__slide:last-child { scroll-snap-align: end; }
.gallery__slide picture { display: block; width: 100%; }
.gallery__slide img { width: 100%; height: auto; display: block; aspect-ratio: 1024 / 640; object-fit: cover; }
.gallery-nav {
    position: absolute; top: 50%; transform: translateY(-50%);
    z-index: 50; background: rgba(17, 17, 17, 0.8); color: white;
    border: none; width: 42px; height: 42px;
    cursor: pointer; font-size: 25px; line-height: 42px;
    text-align: center; padding: 0;
    transition: background 0.2s; display: flex;
    align-items: center; justify-content: center;
}
.gallery-nav:hover { background: rgba(51, 51, 51, 0.8); }
.gallery-nav__prev { left: 20px; }
.gallery-nav__next { right: 20px; }

/* Gallery slide cursor */
.gallery__slide img { cursor: pointer; }
.gallery__slide img[src=""] { display: none; }

/* Auf dem Handy sitzen die Pfeile buendig am Rand, nicht eingerueckt —
   gemessen an der alten Mobilvorlage: x=0 und x=340 bei 390 Breite. */
@media (max-width: 768px) {
    .gallery-nav__prev { left: 0; }
    .gallery-nav__next { right: 0; }
}


/* === components/lightbox.css === */
/* Gallery Lightbox */
.lightbox {
    display: none; position: fixed; top: 0; left: 0;
    width: 100%; height: 100%; z-index: 9999;
    background: rgba(0,0,0,0.92);
    align-items: center; justify-content: center; cursor: pointer;
}
.lightbox.is-open { display: flex; }
.lightbox img { max-width: 92vw; max-height: 92vh; object-fit: contain; }
.lightbox__close {
    position: absolute; top: 20px; right: 30px;
    color: #fff; font-size: 36px; cursor: pointer;
    background: none; border: none; line-height: 1; z-index: 10000;
}
.lightbox__close:hover { color: var(--color-gold); }
.lightbox__nav {
    position: absolute; top: 50%; transform: translateY(-50%);
    background: none; border: none; cursor: pointer; z-index: 10000;
    color: #fff; font-size: 64px; line-height: 1; padding: 0 24px;
}
.lightbox__nav:hover { color: var(--color-gold); }
.lightbox__nav[hidden] { display: none; }
.lightbox__nav--prev { left: 10px; }
.lightbox__nav--next { right: 10px; }
@media (max-width: 600px) {
    .lightbox__nav { font-size: 44px; padding: 0 10px; }
}


/* === components/investment.css === */
/* Investment Reasons */
/* Die duenne Linie ueber dem Block trennt Einleitung und Investment —
   1px solid #ccc, gemessen an der alten Seite. */
.project-investment {
    padding: 100px var(--container-padding);
    text-align: center;
    border-top: 1px solid #ccc;
}
.project-investment h2 {
    font-size: var(--schrift-abschnitt); font-weight: 300; font-family: var(--font-heading);
    color: #202732; margin: 0 0 12px;
}
.investment-subtitle { font-size: 18px; font-weight: 300; color: #000; margin: 0 0 50px; }
.reasons-grid {
    display: grid; grid-template-columns: repeat(4, 270px);
    gap: 32px 40px; justify-content: center;
    max-width: 1200px; margin: 0 auto;
}
.reason { text-align: center; }
.reason__icon { width: 72px; height: 72px; margin: 0 auto 20px; }
.reason__icon img { width: 72px; height: 72px; display: block; object-fit: contain; }
.reason__title {
    font-family: var(--font-heading); font-size: 19.8px;
    font-weight: 400; text-transform: uppercase; margin: 0 0 12px; color: #000;
}
.reason__text { font-size: 16.2px; font-weight: 300; color: #000; line-height: 1.6; margin: 0; }

/*
 * Auf dem Handy stehen die Investitionsgruende nicht untereinander, sondern
 * als Schieber nebeneinander — so macht es die mobile Vorlage der alten Seite
 * (ein Slider mit vier Slides, Seitenverhaeltnis 1:1, ohne Pfeile, ohne
 * Autoplay). Untereinander waeren es vier volle Bildschirmhoehen zwischen
 * Galerie und Lage.
 *
 * Umgesetzt mit Scroll-Snap statt einer Bibliothek: das ist natives Wischen,
 * kostet kein Skript und rastet zuverlaessiger ein als eine Nachbildung.
 */
@media (max-width: 768px) {
    .reasons-grid {
        display: flex;
        grid-template-columns: none;
        gap: 0;
        /* Vom Desktop steht hier justify-content: center. Laeuft ein
           Flex-Container ueber, schiebt das den Anfang nach links aus dem
           Sichtbereich - und dorthin kann niemand mehr scrollen. */
        justify-content: flex-start;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        /* Kein negativer Rand: sonst rechnet scroll-snap gegen eine andere
           Breite als die sichtbare, und es bleiben zwei halbe Karten stehen. */
        margin: 0;
        padding: 0;
        max-width: none;
    }
    .reasons-grid::-webkit-scrollbar { display: none; }
    .reason {
        flex: 0 0 100%;
        scroll-snap-align: start;
        scroll-snap-stop: always;
    }
    /* Punkte statt Pfeile: die Vorlage steht auf arrowStyle "none". */
    .reasons-punkte {
        display: flex; justify-content: center; gap: 8px; margin: 24px 0 0;
    }
    .reasons-punkte span {
        width: 8px; height: 8px; border-radius: 50%;
        background: #d5d5d5; transition: background 0.2s;
    }
    .reasons-punkte span.aktiv { background: var(--color-gold); }
}
@media (min-width: 769px) {
    .reasons-punkte { display: none; }
}

/* ============================================================
   Kennzahlen-Kästen (website-facts.json, Abschnitt „Your Investment")
   Beige Kopfleiste (weißer Text) = Thema, darunter Stadtteil/Gemeinde,
   beide Werte gleich groß + medium-fett, Zweiteilung mit Trennlinie,
   Stand unter dem Kasten. Vorgabe ST 2026-09-20.
   ============================================================ */
/* Trennlinie zwischen den Pro-Kacheln (Icon+Text) und unseren Kennzahlen:
   1px #ccc, 40px Luft darüber und darunter. */
.marktzahlen { max-width: 1200px; margin: 80px auto 0; border-top: 1px solid #ccc; padding-top: 80px; }
.marktzahlen__grid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 26px; align-items: stretch;
    text-align: center;
}
.mz-zelle { display: flex; flex-direction: column; }
/* Alle Kästen gleich hoch: die Grid-Zelle streckt (align-items:stretch), der
   Kasten füllt sie (flex:1). Kopf und Werte bleiben oben ausgerichtet, damit
   die großen Zahlen über alle vier Kästen fluchten. */
.mz-kasten { background: #fff; border: 1px solid #e6ddd2; overflow: hidden; flex: 1 1 auto; display: flex; flex-direction: column; }
.mz-kasten__kopf {
    background: #aa8d70; color: #fff; font-family: var(--font-heading); font-weight: 400;
    text-transform: uppercase; letter-spacing: .05em; font-size: 16px;
    padding: 12px 14px; text-align: center; line-height: 1.2;
}
.mz-kasten--neutral .mz-kasten__kopf { background: #7f8794; }
/* Leicht abweichende Kopf-Töne je Themenpaar (alle in der Beige/Gold-Familie);
   Investor-Vermietung etwas tiefer/goldener, damit die Investor-Zahl auffällt. */
.mz-kasten--g-kauf .mz-kasten__kopf     { background: #a88c6a; }
.mz-kasten--g-miete .mz-kasten__kopf    { background: #b59d7b; }
.mz-kasten--g-wohnen .mz-kasten__kopf   { background: #9b8b73; }
.mz-kasten--g-investor .mz-kasten__kopf { background: #927a4c; }
/* Untertitel: konstant zwei Zeilen hoch reserviert und unten ausgerichtet,
   damit die großen Zahlen über alle vier Kästen auf derselben Linie starten —
   auch wenn ein Untertitel (z. B. „Ferienvermietung + Wertzuwachs") umbricht. */
.mz-kasten__ort { font-size: 18px; color: #5a5148; text-align: center; line-height: 1.3; padding: 14px 14px 0; min-height: 62px; display: flex; align-items: flex-end; justify-content: center; }
.mz-kasten__werte { display: flex; padding: 16px 12px 18px; }
.mz-wert { flex: 1; padding: 0 8px; }
.mz-wert + .mz-wert { border-left: 1px solid #e6ddd2; }
.mz-wert__zahl {
    /* Schmale Condensed-Optik wie die Seitentitel; Condensed hat kein 500 und
       läuft daher auf den 400er-Schnitt (leichter/schmaler als Roboto-500). */
    display: block; font-family: var(--font-heading); font-weight: 500;
    font-size: 38px; line-height: 1.05; color: #202732; white-space: nowrap;
}
.mz-kasten--zwei .mz-wert__zahl { font-size: 38px; }
.mz-wert__label { display: block; font-size: 17px; color: #666; margin-top: 8px; }
/* Kleine Zusatzzeile (Sommerpreis/-auslastung bei der Ferienvermietung,
   Aufteilung Vermietung + Wertzuwachs bei der Rendite). Innerhalb des Kastens. */
/* Trennlinie über der zweizeiligen Info: eingerückt (nicht bis zum Rand), und
   der Abstand über der Linie (Werte-Zeile), unter der Linie und vom Zweizeiler
   zum unteren Rand ist überall gleich (18px). */
.mz-kasten__sub { font-size: 16px; color: #5a5148; text-align: center; line-height: 1.4; margin: 0 20px; border-top: 1px solid #e6ddd2; padding: 18px 0 18px; }
.mz-kasten__sub strong { font-weight: 500; color: #202732; }
.mz-kasten__stand { font-size: 15px; color: #9a9a9a; text-align: center; margin-top: 11px; }
.marktzahlen__hinweis {
    font-size: 15px; color: #8a8a8a; line-height: 1.65;
    max-width: 900px; margin: 26px auto 0; text-align: center;
}
.marktzahlen__quelle { font-size: 15px; color: #8a8a8a; margin: 15px 0 0; text-align: center; }
.marktzahlen__mehr { color: #aa8d70; text-decoration: none; font-weight: 500; }
.marktzahlen__mehr:hover { text-decoration: underline; }
.marktzahlen__sep { margin: 0 9px; color: #ccc; }
/* „Aktiv vermietet"-Zeile: eigener, positiver Block, klar getrennt vom Durchschnitt. */
.marktzahlen__aktiv {
    font-size: 16px; color: #3f3a33; line-height: 1.55;
    max-width: 760px; margin: 24px auto 0; padding: 16px 22px;
    background: #f4efe7; border: 1px solid #e6ddd2; border-radius: 12px; text-align: center;
}
.marktzahlen__aktiv strong { font-weight: 600; color: #202732; }
.mz-aktiv__label {
    display: block; font-size: 13px; letter-spacing: .05em; text-transform: uppercase;
    color: #aa8d70; margin-bottom: 6px; font-weight: 600;
}
/* Prognose-Warnung direkt am Rendite-Kasten. */
.mz-kasten__prognose { display: block; font-size: 13px; color: #9a8f80; margin-top: 8px; }

@media (max-width: 900px) {
    .marktzahlen__grid { grid-template-columns: repeat(2, 1fr); gap: 20px; }
}
@media (max-width: 520px) {
    .marktzahlen__grid { grid-template-columns: 1fr; }
    .mz-wert__zahl, .mz-kasten--zwei .mz-wert__zahl { font-size: 40px; }
}


/* === components/investor.css === */
/* ============================================================
   Investorbereich — Daten-Dashboard (Hub + Ortsseiten)
   newEstepona-Stil: Navy #202732, Gold #aa8d70, Roboto Condensed.
   Schriftgrößen = Fließtext (Body 18px), Werte größer. Nie kleiner.
   ============================================================ */
.investor-page { background: #fff; }

/* Neubauprojekt-Suche unter den Investorseiten: per Linie abgetrennt. */
.investor-suche { padding-top: 72px; }

/* Kaufpreis-Liniendiagramm (Ortsseiten) */
.preis-linie { position: relative; margin: 6px 0 0; }
.preis-linie svg { display: block; width: 100%; height: auto; overflow: visible; touch-action: pan-y; }
.pl-cross { stroke: #202732; stroke-width: 1; stroke-dasharray: 4 4; opacity: .45; }
.pl-cdot { fill: #202732; stroke: #fff; stroke-width: 2; }
.pl-tip { position: absolute; transform: translate(-50%, -100%); background: #202732; color: #fff; padding: 6px 11px; border-radius: 6px; font-family: var(--font-body); font-size: 14px; line-height: 1.35; white-space: nowrap; pointer-events: none; z-index: 6; box-shadow: 0 6px 18px rgba(32,39,50,.22); }
.pl-tip__m { display: block; color: #cbb89f; font-size: 12px; }
.pl-tip__v { display: block; font-weight: 600; }

/* Ferien-Saisonbalken (Monatsumsatz) */
.saison { margin: 6px 0 0; }
.saison svg { display: block; width: 100%; height: auto; overflow: visible; }
.sb-bar { fill: #cdbba3; }
.sb-bar--peak { fill: #aa8d70; }
.sb-val { font-family: var(--font-body); font-size: 13px; fill: #8a7f72; text-anchor: middle; }
.sb-mon { font-family: var(--font-body); font-size: 14px; fill: #8a7f72; text-anchor: middle; }

/* Gesamtrendite-Stapelbalken */
.rb { margin: 10px 0 0; }
.rb__bar { display: flex; height: 46px; border-radius: 4px; overflow: hidden; background: #f5f1ea; }
.rb__seg { display: block; height: 100%; }
.rb__seg--wert { background: #202732; }
.rb__seg--miete { background: #aa8d70; }
.rb__seg--spanne { background: #cdbba3; }
.rb__legende { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 24px; margin-top: 16px; font-size: 18px; color: #333; }
.rb__leg { display: inline-flex; align-items: center; gap: 8px; }
.rb__dot { width: 13px; height: 13px; border-radius: 3px; display: inline-block; }
.rb__dot--wert { background: #202732; }
.rb__dot--miete { background: #aa8d70; }
.rb__leg strong { font-weight: 600; color: #202732; }
.rb__leg--summe { margin-left: auto; font-size: 20px; }
.rb__leg--summe strong { color: #aa8d70; }
.pl-grid { stroke: #ece7de; stroke-width: 1; }
.pl-ytxt { font-family: var(--font-body); font-size: 15px; fill: #8a7f72; text-anchor: end; }
.pl-xtxt { font-family: var(--font-body); font-size: 15px; fill: #8a7f72; text-anchor: middle; }
.pl-line { fill: none; stroke: #aa8d70; stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; }
.pl-dot { fill: #202732; }
.pl-end { font-family: var(--font-body); font-weight: 600; font-size: 18px; fill: #202732; text-anchor: end; }

.investor-hero {
    background: #202732; color: #fff;
    padding: calc(var(--header-height) + 56px) var(--container-padding) 56px;
}
.investor-hero__inner { max-width: var(--container-width); margin: 0 auto; }
.investor-hero h1 {
    font-family: var(--font-heading); font-weight: 300; font-size: var(--schrift-abschnitt);
    margin: 8px 0 14px; color: #fff; line-height: 1.15;
}
.investor-hero__sub { font-size: 20px; font-weight: 300; color: #d7d2cb; margin: 0; max-width: 800px; line-height: 1.55; }

.inv-crumbs { font-size: 15px; color: #9aa0a8; }
.inv-crumbs a { color: #c9b79f; text-decoration: none; }
.inv-crumbs a:hover { text-decoration: underline; }
.inv-crumbs span { margin: 0 7px; color: #6b7178; }
.inv-crumbs [aria-current] { color: #fff; margin: 0; }

.investor-body { padding: 64px var(--container-padding) 0; }
.investor-inner { max-width: var(--container-width); margin: 0 auto; }
.investor-intro { font-size: 19px; font-weight: 300; color: #333; line-height: 1.7; max-width: 840px; margin: 0 0 46px; }
.investor-h2 {
    font-family: var(--font-heading); font-weight: 300; font-size: var(--schrift-untertitel); color: #202732;
    margin: 0 0 24px;
}
/* 80px Luft + Trennlinie + 80px zwischen den Bereichen */
.inv-abschnitt + .inv-abschnitt { margin-top: 80px; padding-top: 80px; border-top: 1px solid #ccc; }
.investor-quelle { font-size: 15px; color: #8a8a8a; margin: 42px 0 0; }
.investor-hinweis { font-size: 16px; color: #777; margin: 16px 0 0; }
/* Conversion- + Themen-Cluster-Links unter dem Intro */
.investor-links { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; margin: 0 0 42px; font-size: 17px; }
.investor-cta { display: inline-flex; align-items: center; background: #aa8d70; color: #fff; text-decoration: none; padding: 11px 20px; border-radius: 5px; font-weight: 500; transition: background .15s; }
.investor-cta:hover { background: #96795d; }
.investor-links__cluster { color: #6a6258; }
.investor-links__cluster a { color: #aa8d70; text-decoration: none; }
.investor-links__cluster a:hover { text-decoration: underline; }
/* Autoren-Byline (EEAT) */
.investor-byline { font-size: 15px; color: #8a7f72; margin: -8px 0 22px; }
.investor-byline a { color: #aa8d70; text-decoration: none; }
.investor-byline a:hover { text-decoration: underline; }
/* Datengetriebene FAQ (natives details, kein JS) */
.inv-faq { border-top: 1px solid #ece3d5; }
.inv-faq__item { border-bottom: 1px solid #ece3d5; }
.inv-faq__item summary { cursor: pointer; list-style: none; padding: 18px 0; font-size: 20px; font-weight: 500; color: #202732; display: flex; justify-content: space-between; align-items: center; gap: 16px; }
.inv-faq__item summary::-webkit-details-marker { display: none; }
.inv-faq__item summary::after { content: '+'; color: #aa8d70; font-size: 26px; font-weight: 300; line-height: 1; }
.inv-faq__item[open] summary::after { content: '\2212'; }
.inv-faq__a { font-size: 18px; line-height: 1.7; color: #333; padding: 0 0 20px; max-width: 860px; }
.inv-faq__a p { margin: 0 0 12px; }
.inv-faq__a ul { margin: 0 0 12px; padding-left: 22px; }
.inv-faq__a li { margin: 0 0 6px; }
.inv-faq__a strong { color: #202732; font-weight: 600; }
.inv-faq__cta { display: inline-block; margin-top: 4px; color: #aa8d70; font-weight: 600; text-decoration: none; }
.inv-faq__cta:hover { text-decoration: underline; }
/* Kompakte, dezente Autoren-Box unter der FAQ */
/* Autor unter der FAQ: vorhandene .autor-Textstile; Foto absolut, groesser,
   unten am Koerper beschnitten und auf die Trennlinie darunter gesetzt. */
.autor.inv-autor { position: relative; display: block; width: 100%; max-width: none; overflow: hidden; min-height: 410px; margin: 120px 0 0; padding: 0; }
.inv-autor .autor__text { padding: 116px 440px 6px 0; }
.inv-autor .autor__text h3 { margin: 0 0 14px; }
.inv-autor .autor__text a { color: var(--color-gold-hover); font-weight: 600; text-decoration: none; }
.inv-autor .autor__text a:hover { text-decoration: underline; }
.inv-autor .autor__foto { position: absolute; right: 20px; top: 20px; width: 396px; margin: 0; }
.inv-autor .autor__bild { width: 100%; height: auto; display: block; }
/* Abschluss-Trennlinie unter dem Autor ueber die volle Fensterbreite (Full-Bleed),
   als eigenes Element (der Autor-Block clippt per overflow das Foto). */
.inv-autor-linie { border-top: 1px solid #e6ddd2; width: calc(100vw - var(--finder-raum)); position: relative; left: 50%; transform: translateX(-50%); }
@media (max-width: 700px) {
    .autor.inv-autor { min-height: 0; overflow: visible; text-align: center; }
    .inv-autor .autor__text { padding: 0; }
    .inv-autor .autor__foto { position: static; width: 200px; margin: 14px auto 0; }
}
.investor-zurueck { margin: 36px 0 0; font-size: 18px; }
.investor-zurueck a { color: #aa8d70; text-decoration: none; font-weight: 500; }
.investor-zurueck a:hover { text-decoration: underline; }
/* Fussnav: Zurueck links, Crosslinks rechtsbuendig */
.investor-fussnav { display: flex; justify-content: space-between; align-items: baseline; gap: 14px 28px; flex-wrap: wrap; margin: 42px 0 0; font-size: 17px; }
.investor-fussnav .investor-zurueck { margin: 0; color: var(--color-gold-hover); text-decoration: none; font-weight: 500; }
.investor-fussnav .investor-zurueck:hover { text-decoration: underline; }
.investor-crosslinks { margin-left: auto; text-align: right; color: #6a6258; }
.investor-crosslinks a { color: var(--color-gold-hover); text-decoration: none; }
.investor-crosslinks a:hover { text-decoration: underline; }
@media (max-width: 560px) { .investor-fussnav { flex-direction: column; } .investor-crosslinks { margin-left: 0; text-align: left; } }

/* Region-Karten (Hub) */
.inv-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.inv-card {
    display: flex; flex-direction: column; background: #fff; border: 1px solid #e6ddd2;
    border-top: 3px solid #aa8d70; padding: 24px 24px 22px; text-decoration: none; transition: box-shadow .15s;
}
.inv-card:hover { box-shadow: 0 8px 26px rgba(32,39,50,.10); }
.inv-card__ort { font-family: var(--font-heading); font-size: 23px; color: #202732; }
.inv-card__zahl { font-family: var(--font-body); font-weight: 500; font-size: 44px; color: #202732; margin: 8px 0 4px; line-height: 1; }
.inv-card__unter { font-size: 16px; color: #666; }
.inv-card__mehr { margin-top: 18px; font-size: 17px; color: #aa8d70; font-weight: 500; }

/* Balkendiagramm */
.inv-chart { margin: 0; }
.inv-chart__titel {
    font-family: var(--font-heading); font-weight: 400; text-transform: uppercase; letter-spacing: .04em;
    font-size: 17px; color: #8a7a67; margin: 0 0 18px;
}
.inv-bar { display: grid; grid-template-columns: 180px 1fr 104px; align-items: center; gap: 14px; margin: 18px 0; font-size: 18px; }
.inv-bar__label { color: #202732; }
.inv-bar__schiene { background: #efe9e0; height: 60px; overflow: hidden; }
.inv-bar__fuell { display: block; height: 100%; background: #aa8d70; }
.inv-bar--neg .inv-bar__fuell { background: #b45a4d; }
.inv-bar__wert { text-align: right; font-variant-numeric: tabular-nums; color: #202732; font-weight: 600; font-size: 23px; }
.inv-chart .inv-bar:first-of-type { margin-top: 46px; }

/* Divergierendes Balkendiagramm (Stadtteile): 0-Linie in der Mitte,
   negativ nach links, positiv nach rechts. */
.inv-dbar { display: grid; grid-template-columns: 180px 1fr 104px; align-items: center; gap: 14px; margin: 12px 0; font-size: 18px; }
.inv-dbar__label { color: #202732; }
.inv-dbar__schiene { position: relative; height: 44px; background: #f5f1ea; }
.inv-dbar__schiene::before { content: ''; position: absolute; left: 50%; top: -5px; bottom: -5px; width: 1px; background: #b9ac97; }
.inv-dbar__fuell { position: absolute; top: 0; bottom: 0; background: #aa8d70; }
.inv-dbar--neg .inv-dbar__fuell { background: #b45a4d; }
.inv-dbar__wert { text-align: right; font-variant-numeric: tabular-nums; color: #202732; font-weight: 600; font-size: 23px; }
.inv-dbar--neg .inv-dbar__wert { color: #b45a4d; }
.inv-chart--div .inv-dbar:first-of-type { margin-top: 46px; }

/* Vergleichstabelle */
.inv-tabelle-wrap { overflow-x: auto; margin: 0; }
.inv-tabelle { width: 100%; border-collapse: collapse; font-size: 18px; }
.inv-tabelle th, .inv-tabelle td { text-align: left; padding: 12px 12px; white-space: nowrap; vertical-align: top; }
.inv-tabelle th { background: #f4efe5; font-family: var(--font-body); font-weight: 700; font-size: 18px; color: #5a5148; white-space: normal; }
.inv-tabelle th .inv-th__main { display: block; font-weight: 700; }
.inv-tabelle th .inv-th__sub { display: block; font-weight: 400; font-size: 16px; color: #8a7f72; margin-top: 2px; white-space: normal; }
.inv-tabelle td.r, .inv-tabelle th.r { text-align: right; font-variant-numeric: tabular-nums; }
.inv-tabelle tbody tr:nth-child(odd) td { background: #fff; }
.inv-tabelle tbody tr:nth-child(even) td { background: #f2f2f2; }
/* Faux-Bold per text-shadow: verdickt die Schrift bei Hover ohne Breitenaenderung
   (echtes font-weight wuerde die Spalten neu berechnen -> Wackeln). */
.inv-tabelle tbody tr:hover td { color: #202732; text-shadow: .35px 0 0 currentColor, -.35px 0 0 currentColor; }
.inv-tab__ort a { color: #202732; text-decoration: none; font-weight: 500; }
.inv-tab__ort a:hover { color: #aa8d70; }
.inv-tab__mehr { color: #aa8d70; text-decoration: none; white-space: nowrap; }
/* Einzeiliger Kennzahlen-Streifen (Estepona-Gesamt): Wertzeile prominent. */
.inv-tabelle--einzeln tbody td { font-size: 22px; font-weight: 500; color: #202732; padding: 16px 12px; }
.inv-tabelle--einzeln tbody td strong { font-weight: 700; }
.inv-tabelle--einzeln tbody tr:hover td { background: transparent; }
/* Spalten "aktiv vermietet" der Gesamtrendite-Tabelle: klar vom Durchschnitt
   getrennt (linke Kante) und im goldenen Kopf-Ton hervorgehoben. */
.inv-tabelle th.inv-tab__aktiv, .inv-tabelle td.inv-tab__aktiv { border-left: 2px solid #d8cbb6; }
.inv-tabelle th.inv-tab__aktiv { background: #efe6d4; color: #6b5c3f; }
.inv-tab__obj { display: block; font-size: 15px; font-weight: 400; color: #8a7f72; white-space: nowrap; }

/* KPI-Boxen (Ortsseite) */
.inv-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; margin: 60px 0 0; }
.inv-kpi { background: #fff; border: 1px solid #e6ddd2; }
.inv-kpi__kopf {
    background: #aa8d70; color: #fff; font-family: var(--font-heading); font-weight: 400;
    text-transform: uppercase; letter-spacing: .05em; font-size: 17px; padding: 12px 16px;
}
.inv-kpi__body { padding: 8px 16px 14px; }
.inv-kpi__zeile { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 11px 0; border-bottom: 1px solid #f0ebe3; }
.inv-kpi__zeile:last-child { border-bottom: none; }
.inv-kpi__label { font-size: 16px; color: #666; white-space: nowrap; }
.inv-kpi__wert { font-family: var(--font-body); font-weight: 500; font-size: 24px; color: #202732; font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap; }
.inv-kpi__stand { font-size: 15px; color: #9a9a9a; padding: 0 16px 14px; }

/* Projektliste */
.inv-projekte { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.inv-projekt { display: flex; flex-direction: column; border: 1px solid #e6ddd2; padding: 16px 20px; text-decoration: none; }
.inv-projekt:hover { border-color: #aa8d70; }
.inv-projekt__name { font-family: var(--font-heading); font-size: 21px; color: #202732; }
.inv-projekt__meta { font-size: 16px; color: #8a7a67; margin-top: 4px; }

@media (max-width: 900px) {
    .inv-cards { grid-template-columns: repeat(2, 1fr); }
    .inv-kpis { grid-template-columns: repeat(2, 1fr); }
    .inv-projekte { grid-template-columns: 1fr; }
    .inv-bar { grid-template-columns: 130px 1fr 88px; gap: 10px; font-size: 17px; }
    .inv-dbar { grid-template-columns: 110px 1fr 80px; gap: 10px; font-size: 16px; }
    .inv-dbar__wert { font-size: 19px; }
}
@media (max-width: 560px) {
    .inv-cards { grid-template-columns: 1fr; }
    .inv-kpis { grid-template-columns: 1fr; }
}

/* ============================================================
   Gemeinde-Kacheln mit Tabs (Startseite / Hub) — Kaufpreis-Entwicklung
   umschaltbar 1/5/10 Jahre. Schriftgrößen = Fließtext (18px).
   ============================================================ */
.gemeinde-kacheln { background: #f6f2ec; padding: 64px var(--container-padding); }
.gk-inner { max-width: var(--container-width); margin: 0 auto; }
.gk-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 20px; flex-wrap: wrap; margin: 0 0 28px; }
.gk-titel { font-family: var(--font-heading); font-weight: 300; font-size: var(--schrift-untertitel); color: #202732; margin: 0; line-height: 1.15; }
.gk-unter { font-size: 18px; color: #6a6258; margin: 6px 0 0; }
.gk-tabs { display: inline-flex; border: 1px solid #d9cebd; border-radius: 4px; overflow: hidden; background: #fff; }
.gk-tab {
    font-family: var(--font-body); font-size: 18px; color: #6a6258; background: transparent;
    border: none; padding: 11px 22px; cursor: pointer; line-height: 1;
    border-left: 1px solid #ece3d5;
}
.gk-tab:first-child { border-left: none; }
.gk-tab.is-aktiv { background: #aa8d70; color: #fff; }
.gk-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 16px; }
.gk-card {
    display: flex; flex-direction: column; align-items: flex-start; background: #fff;
    border: 1px solid #e6ddd2; border-top: 3px solid #aa8d70; padding: 20px 18px 18px;
    text-decoration: none; transition: box-shadow .15s;
}
.gk-card:hover { box-shadow: 0 8px 24px rgba(32,39,50,.10); }
.gk-card__ort { font-family: var(--font-heading); font-size: 20px; color: #202732; }
.gk-card__pct { font-family: var(--font-body); font-weight: 500; font-size: 34px; color: #202732; line-height: 1; margin: 10px 0 2px; font-variant-numeric: tabular-nums; }
.gk-card__zeit { font-size: 16px; color: #8a7a67; }
.gk-card__preis { font-size: 18px; color: #555; margin-top: 12px; }
.gk-mehr { display: inline-block; margin: 30px 0 0; font-size: 18px; color: #aa8d70; text-decoration: none; font-weight: 500; }
.gk-mehr:hover { text-decoration: underline; }

@media (max-width: 1040px) { .gk-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 620px) {
    .gk-grid { grid-template-columns: repeat(2, 1fr); }
    .gk-head { align-items: flex-start; }
    .gk-card__pct { font-size: 32px; }
}

/* ============================================================
   Zonenkarte (Investor-Hub) — 6 Regionen als SVG, volle Breite,
   kein Hintergrund, dezente Navy-Skala, Eckdaten als weiße Chips.
   ============================================================ */
/* Auftakt: Einleitungstext links, Karte rechts. Auf Desktop leicht gedreht,
   ragt oben rechts ins Blaue des Heros und hängt darunter über den Text.
   Tabs (1/5/10 Jahre) sitzen unten rechts in der Karte. */
.investor-hero { position: relative; overflow: visible; z-index: 1; }
.investor-body { position: relative; }
.investor-auftakt { position: relative; }
.zonenkarte { position: relative; }

.zk-tabs { display: inline-flex; border: 1px solid #d9cebd; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 3px 12px rgba(32,39,50,.16); }
.zk-tab { font-family: var(--font-body); font-size: 17px; color: #6a6258; background: transparent; border: none; border-left: 1px solid #ece3d5; padding: 10px 18px; cursor: pointer; line-height: 1; }
.zk-tab:first-child { border-left: none; }
.zk-tab.is-aktiv { background: #aa8d70; color: #fff; }
.zk-map { width: 100%; }
.zk-map svg { display: block; width: 100%; height: auto; overflow: visible; }
/* Flächen verlinken zur Ortsseite, Hover verdunkelt leicht. Chips lassen Klicks
   durch, damit die ganze Region inkl. Preis-Tag anklickbar/hoverbar ist. */
.zk-region { cursor: pointer; transition: filter .15s ease; }
.zk-region:hover { filter: brightness(0.9); }
.zk-region-a { -webkit-tap-highlight-color: transparent; outline: none; }
.zk-chip { pointer-events: none; }
/* Standard (Handy/Tablet, < 1200px): Karte aus, die Kacheln zeigen die Daten. */
.investor-auftakt__karte { display: none; }

@media (min-width: 1200px) {
    /* Ab Desktop: Karte an, Kacheln (inkl. deren Überschrift) aus. */
    .investor-auftakt__karte { display: block; }
    .inv-abschnitt--kacheln { display: none; }
    /* Karte volle Breite, im UZS gedreht (flacht die SW→NE-Diagonale ab und
       spart Höhe). Oben ins Blaue gezogen, Einleitungstext darunter. */
    .investor-auftakt__karte {
        position: relative; z-index: 5; margin-top: -230px; height: 900px; overflow: visible;
    }
    /* Tabs oben rechts über die Karte */
    .investor-auftakt__karte .zk-tabs {
        position: absolute; right: 0; top: 30px; z-index: 7;
    }
    /* Einleitungstext unten rechts in die freie Fläche der Karte */
    .investor-auftakt .investor-intro {
        position: absolute; right: 0; bottom: 120px; width: 700px; max-width: 55%;
        margin: 0; z-index: 6; text-align: right;
    }
}
.zk-chip__box { fill: #fff; stroke: #e6ddd2; stroke-width: 1; filter: drop-shadow(0 3px 9px rgba(32,39,50,.14)); }
.zk-chip__ort { font-family: var(--font-body); font-weight: 500; font-size: 20px; fill: #202732; }
.zk-chip__pct { font-family: var(--font-body); font-weight: 700; font-size: 28px; fill: #202732; }
.zk-chip__preis { font-family: var(--font-body); font-weight: 500; font-size: 16px; fill: #555; }

/* Fakten-Fließtext (mit Variablen) + Projekt-Bereich */
.investor-fliesstext { font-size: 18px; line-height: 1.75; color: #333; max-width: 860px; margin: 0 0 26px; }
.investor-fliesstext strong { font-weight: 500; color: #202732; }
.investor-stand { font-size: 15px; color: #8a8a8a; max-width: 860px; margin: 10px 0 0; }
.investor-projekte-mehr { margin: 0 0 24px; font-size: 18px; }
.investor-projekte-mehr a { color: #aa8d70; text-decoration: none; font-weight: 500; }
.investor-projekte-mehr a:hover { text-decoration: underline; }

/* Rendite-Rankings: Filter linksbündig (nutzt die bestehende .filter-bar),
   Leermeldung zentriert. Sonst kommt alles aus .filter-bar und .inv-tabelle. */
.filter-bar--rankings { justify-content: flex-start; margin-bottom: 22px; }
.inv-ranking__leer { text-align: center; padding: 24px 12px; color: #8a7f72; }

/* Link-Icon hinter dem Projektnamen (öffnet das Projekt im neuen Tab). */
.inv-ext { display: inline-flex; align-items: center; margin-left: 7px; color: #aa8d70; vertical-align: middle; }
.inv-ext:hover { color: #202732; }


/* === layouts/project-page.css === */
/* Project Description + Location */
.project-description {
    padding: 100px 0; max-width: 800px; margin: 0 auto; text-align: center;
}
.project-description h2 {
    font-size: var(--schrift-abschnitt); font-weight: 300; font-family: var(--font-heading);
    text-align: center; color: #202732; margin: 0 0 30px;
}
.project-description__image { margin: 0 0 50px; }
.project-description__image img { width: 100%; height: auto; display: block; }
.project-description__text { text-align: center; }
.project-description__text p {
    font-size: 18px; font-weight: 300; line-height: 28.8px;
    text-align: center; margin: 0 0 18px; color: #000;
}
.project-location { padding: 100px var(--container-padding); background: #eeeeee; }
.project-location__inner { max-width: 1200px; margin: 0 auto; }
.project-location h2 {
    font-size: var(--schrift-abschnitt); font-weight: 300; font-family: var(--font-heading);
    color: #202732; margin: 0 0 40px; text-align: center;
}
/* Tighten the gap when the map subtitle sits right underneath the heading */
.project-location h2:has(+ .project-location__subtitle) { margin-bottom: 12px; }
.project-location__subtitle {
    font-size: 18px; font-weight: 300; color: #202732;
    margin: 0 0 40px; text-align: center;
}
.project-location__grid {
    display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: start;
}
.project-location__left { display: flex; flex-direction: column; gap: 30px; }
.project-location__text { font-size: 18px; font-weight: 300; line-height: 1.7; color: #000; }
.project-location__text p { margin: 0 0 18px; }
.project-location__map iframe { display: block; width: 100%; height: 300px; border: 0; }
/* Statt der eingebetteten Karte liegt hier der Kartenausschnitt als Bild. */
.project-location__map img { display: block; width: 100%; height: auto; }
.project-location__images { display: flex; flex-direction: column; gap: 20px; }
.project-location__images img { width: 100%; height: auto; display: block; }

/*
 * Gekappter Text mit weichem Uebergang und Knopf darunter — das Gegenstueck
 * zum Show-More-Block der alten Mobilvorlage (200 Pixel, mit Ausblendung).
 * Die Klassen setzt assets/js/src/mehr-zeigen.js, damit ohne JavaScript der
 * vollstaendige Text dasteht.
 */
.mehr-zeigen {
    position: relative;
    max-height: 200px;
    overflow: hidden;
}
.mehr-zeigen::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 80px;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff);
    pointer-events: none;
}
.mehr-zeigen.offen { max-height: none; }
.mehr-zeigen.offen::after { display: none; }

/* Masse und Farbe der alten Mobilvorlage, nachgemessen auf dem iPhone:
   113x35, #202732, weiss, 3px Radius, 14,4px in Schriftstaerke 400. */
.mehr-knopf {
    display: block;
    margin: 20px auto 0;
    padding: 5.76px 14.4px;
    font-family: var(--font-body);
    font-size: 14.4px;
    font-weight: 400;
    line-height: 1.6;
    color: #fff;
    background: #202732;
    border: none;
    border-radius: 3px;
    cursor: pointer;
    transition: background 0.2s;
}
.mehr-knopf:hover { background: #3a4455; }


/* === components/faq.css === */
/* FAQ Accordion */
.project-faqs { padding: 100px var(--container-padding); max-width: 1200px; margin: 0 auto; }
.project-faqs h2 {
    font-size: var(--schrift-abschnitt); font-weight: 300; font-family: var(--font-heading);
    color: #202732; margin: 0 0 40px; text-align: center;
}
.faqs { margin: 0; }
.faq__item { border-bottom: 1px solid var(--color-border); padding: 20px 0; }
.faq__question {
    font-size: 17.6px; font-weight: 600; color: #1a1a1a;
    cursor: pointer; display: flex; justify-content: space-between; align-items: center;
    background: none; border: none; width: 100%; text-align: left; padding: 0;
    font-family: var(--font-body); list-style: none;
}
.faq__question::-webkit-details-marker { display: none; }
.faq__question::after {
    content: '+'; font-size: 24px; color: var(--color-gold);
    flex-shrink: 0; margin-left: 20px; font-weight: 300;
}
details[open] .faq__question::after { content: '\2212'; }
.faq__answer { padding-top: 16px; color: #444; line-height: 1.7; font-size: 16px; font-weight: 300; }
.faq__answer p { margin: 0 0 12px; }
.faq__answer p:last-child { margin-bottom: 0; }
.faq__answer ul { margin: 0 0 12px; padding-left: 20px; list-style: disc; }
.faq__answer ul:last-child { margin-bottom: 0; }
.faq__answer li { margin-bottom: 6px; padding-left: 2px; }
.faq__answer li:last-child { margin-bottom: 0; }
.faq__answer strong { font-weight: 600; color: #222; }


/* === components/equipment-distances.css === */
/* Equipment + Distances */
.equipment-distances-section { padding: 100px var(--container-padding); background: #202732; color: var(--color-white); }
.equipment-distances-inner {
    max-width: 1200px; margin: 0 auto;
    display: grid; grid-template-columns: 1fr 1fr; gap: 60px;
}
.equipment-column h3, .distances-column h3 {
    font-family: var(--font-heading); font-size: 19.8px;
    font-weight: 400; text-transform: uppercase;
    color: var(--color-white); margin: 0 0 30px;
}
.equipment-list { list-style: none; display: grid; grid-template-columns: 1fr 1fr; gap: 8px 30px; }
.equipment__item {
    font-size: 16.2px; font-weight: 300; color: var(--color-white);
    padding-left: 24px; position: relative; line-height: 28.8px;
    font-family: 'Roboto', sans-serif;
}
.equipment__item::before { content: '\2713'; position: absolute; left: 0; color: var(--color-gold); font-weight: 700; }
.distances-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 40px; }
.distance__item { display: flex; justify-content: space-between; align-items: baseline; }
.distance__label {
    font-size: 15px; font-weight: 300; text-transform: uppercase;
    color: var(--color-white); font-family: 'Roboto', sans-serif; line-height: 28.8px;
}
.distance__value { font-size: 16.2px; font-weight: 300; color: #CCAB86; font-family: 'Roboto', sans-serif; line-height: 28.8px; }


/* === components/contact-form.css === */
/* Contact Section + Form */
/* scroll-margin-top haelt den Sprung ueber #contact unter dem fixierten
   Header, sonst verdeckt der die ersten 100px des Bereichs. */
/* Die Trennlinie ueber dem Bereich spannt die ganze Seitenbreite. Frueher
   zeichnete sie ein absolut gesetztes ::before mit width: 100vw. Das Mass
   schliesst die senkrechte Bildlaufleiste ein: die Linie ragte auf jeder Seite
   um deren halbe Breite hinaus und erzeugte auf jeder Seite der Site einen
   waagerechten Bildlauf von 8 Pixeln. Jetzt ist der Bereich selbst so breit
   wie die Seite und traegt die Linie als eigenen Rahmen; die Inhaltsbreite
   begrenzt der innere Kasten. */
.contact-section {
    padding: 100px 0 0; margin: 0 auto; position: relative;
    border-top: 1px solid #ccc;
    scroll-margin-top: var(--header-height);
}
.contact-section__inner {
    max-width: 1200px; margin: 0 auto;
    display: grid; grid-template-columns: 1fr 1fr;
    gap: 0 32px; align-items: stretch;
}
.contact-section__left { position: relative; background: var(--color-white); }
.contact-section__left-bg {
    padding: 0; min-height: 100%;
    background-image: url('../images/Christiane-freigestellt-bust.webp');
    background-size: 256px auto; background-position: 100% 100%; background-repeat: no-repeat;
}
.contact-section__about { margin-bottom: 0; }
.contact-section__about h4 {
    font-family: var(--font-heading); font-size: 21.6px;
    font-weight: 400; color: #000; margin: 0 0 10.8px;
}
.contact-section__questions h4 {
    font-family: var(--font-heading); font-size: 21.6px;
    font-weight: 400; color: #000; margin: 30px 0 10.8px;
}
.contact-section__about p, .contact-section__questions p {
    font-size: 16.2px; font-weight: 300; line-height: 1.6;
    color: #000; margin: 0 0 16.2px; font-family: 'Roboto', sans-serif;
}
.contact-section__subtitle { font-size: 16.2px !important; color: #000 !important; }
.contact-person {
    margin: 0 0 16.2px; line-height: 25.92px; font-size: 16.2px;
    font-weight: 300; color: #000; font-family: 'Roboto', sans-serif;
}
.contact-person strong { font-weight: 700; }
.contact-person a { color: #000; text-decoration: none; }
.contact-person a:hover { color: var(--color-gold); }

/* Right column: dark form */
.contact-section__right { background: #202732; padding: 40px; color: var(--color-white); }
.contact-section__right h4 {
    font-family: var(--font-heading); font-size: 21.6px;
    font-weight: 400; color: var(--color-white); margin: 0 0 10.8px; text-align: center;
}
.service-tags {
    margin-bottom: 24px; text-align: center;
    font-size: 16.2px; font-weight: 300; color: var(--color-white);
    font-family: 'Roboto', sans-serif;
}
.service-tags__label { margin-right: 6px; }
.service-tags__tag { display: inline-block; margin-left: 4px; font-size: 16.2px; font-weight: 300; color: var(--color-white); }
/*
 * Der Haken ist gezeichnet, nicht geschrieben.
 *
 * Vorher stand hier content: '\2714' — das Zeichen "heavy check mark". Keine
 * unicode-range unserer Roboto-Dateien deckt U+2714 ab, das Zeichen kommt also
 * immer aus einer Systemschrift. Unter Windows ist das eine Textschrift, der
 * Haken wird gruen. Unter iOS greift die Fallback-Kette zur Apple Color Emoji:
 * die bringt ihre eigene Farbe mit und ignoriert color — auf dem iPad standen
 * deshalb graue Haken statt gruener.
 *
 * Eine Maske haengt an keiner Schrift. Die Farbe kommt aus background-color
 * und gilt auf jedem Geraet, die Groesse folgt der Schriftgroesse.
 */
.service-tags__tag::before {
    content: '';
    display: inline-block;
    width: 0.85em;
    height: 0.85em;
    margin-right: 6px;
    vertical-align: -0.08em;
    background-color: #55FF55;
    -webkit-mask: var(--haken) no-repeat center / contain;
    mask: var(--haken) no-repeat center / contain;
}

/* Form fields */
.contact-form { margin-top: 10px; }
.form-field { display: flex; flex-direction: column; }
.form-field label {
    display: block; font-size: 16px; font-weight: 700;
    color: var(--color-white); margin-bottom: 6px; font-family: 'Roboto', sans-serif;
}
.contact-form input, .contact-form select, .contact-form textarea {
    width: 100%; height: 38px; padding: 6px 10px; border: 1px solid #ccc;
    background: #fff; font-family: 'Roboto', sans-serif;
    font-size: 16px; line-height: 20.8px; color: #333; border-radius: 2px;
    box-sizing: border-box; transition: border-color 0.2s;
}
.contact-form textarea { height: auto; }
.contact-form select { appearance: auto; background: #fff; color: #333; }
.contact-form input::placeholder, .contact-form textarea::placeholder { color: #999; }
.contact-form input:focus, .contact-form select:focus, .contact-form textarea:focus {
    outline: none; border-color: var(--color-gold);
}
.form-row { margin-bottom: 14px; }
.form-row--3col { display: grid; grid-template-columns: auto 1fr 1fr; gap: 14px; }
.form-row--2col { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

/* intl-tel-input overrides */
.contact-form .iti { width: 100%; height: 38px; }
.contact-form .iti__dropdown-content { background: #fff !important; border: 1px solid #ccc !important; max-height: 200px; z-index: 100; }
.contact-form .iti__country-list { background: #fff !important; color: #333 !important; }
.contact-form .iti__country-list .iti__country { color: #333 !important; background: #fff !important; }
.contact-form .iti__country-list .iti__country-name { color: #333 !important; }
.contact-form .iti__country-list .iti__dial-code { color: #666 !important; }
.contact-form .iti__country-list .iti__country:hover,
.contact-form .iti__country-list .iti__highlight { background: #f0f0f0 !important; }
.contact-form .iti__search-input { background: #fff !important; color: #333 !important; border: 1px solid #ccc !important; }
.contact-form .iti__selected-dial-code { color: #333; }

.btn--submit {
    display: inline-block; width: 150px;
    background: var(--color-gold); color: var(--color-white);
    border: none; padding: 8px 15px 7px;
    font-family: 'Roboto', sans-serif; font-size: 16.2px; font-weight: 300;
    text-transform: uppercase; cursor: pointer; transition: background 0.2s;
    margin-top: 8px; border-radius: 0;
}
.btn--submit:hover { background: #8a7058; }
.btn--submit:disabled { opacity: 0.6; cursor: wait; }

/* Form feedback */
.form-feedback { margin-top: 10px; padding: 0; font-size: 14px; font-family: 'Roboto', sans-serif; line-height: 1.5; border-radius: 3px; }
.form-feedback:empty { display: none; }
.form-feedback--success { display: block; padding: 10px 14px; background: #1a3a1a; color: #55FF55; border: 1px solid #2a5a2a; }
.form-feedback--error { display: block; padding: 10px 14px; background: #3a1a1a; color: #ff6b6b; border: 1px solid #5a2a2a; }

/*
 * Falls die Laenderliste je wieder mit Suchfeld laeuft: 16px. Alles darunter
 * laesst iOS beim Antippen in die Seite hineinzoomen, und danach steht die
 * Seite schief, bis der Besucher von Hand herauszoomt.
 */
.iti__search-input { font-size: 16px; }

/* Am Ende der Laenderliste nicht auf die Seite darunter weiterscrollen. */
.iti__country-list {
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
}

/*
 * Die Laendervorwahl auf fingerbedienten Geraeten: ein sichtbarer Kasten mit
 * der Vorwahl, darueber ein durchsichtiges <select> mit den vollen
 * Laendernamen. Angetippt wird das <select>, also oeffnet die Auswahl des
 * Systems; zu sehen ist der Kasten darunter.
 *
 * Der Umweg ist noetig, weil ein <select> immer den Text der gewaehlten
 * Option zeigt und "Vereinigtes Königreich (+44)" in 112 Pixeln unlesbar
 * abschneidet. Die Beschriftungen je nach Zustand umzuschreiben hat nicht
 * getragen: focus, change und blur kommen je nach Geraet in anderer
 * Reihenfolge.
 */
.tel-zeile {
    display: flex;
    gap: 8px;
    align-items: stretch;
}
.tel-zeile input:not([type="hidden"]) { flex: 1 1 auto; min-width: 0; }

.tel-vorwahl-kasten {
    position: relative;
    flex: 0 0 32%;
    display: flex;
    align-items: center;
    height: 38px;
    background: var(--color-white);
    border: 1px solid #ccc;
    border-radius: 2px;
    padding: 0 10px;
}
.tel-vorwahl-anzeige {
    font-family: var(--font-body);
    font-size: 16px;
    color: #333;
}
/* Dreieck wie an den uebrigen Auswahlfeldern: es zeigt, dass sich hier etwas
   oeffnet — das durchsichtige <select> bringt keines mit. */
.tel-vorwahl-kasten::after {
    content: '';
    position: absolute;
    right: 10px;
    width: 0; height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 6px solid var(--color-gold);
    pointer-events: none;
}
.tel-vorwahl {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    /* 16px ist Pflicht: darunter zoomt iOS beim Antippen in die Seite hinein. */
    font-size: 16px;
    border: 0;
    background: none;
    -webkit-appearance: none;
    appearance: none;
}


/* === components/buttons.css === */
/* Buttons */
.btn {
    display: inline-block; padding: 12px 35px;
    /*
     * Ein <button> erbt die Schrift NICHT — der Browser setzt dort seine
     * eigene. Ohne diese Zeile lief jeder Knopf, der ein <button> ist, in
     * Arial: die Cookie-Leiste, der Absenden-Knopf im Kontaktformular, der im
     * Broschuerenfenster und der Immo-Finder. Ein <a class="btn"> sah richtig
     * aus, weil ein Link die Schrift sehr wohl erbt — deshalb fiel es lange
     * nicht auf.
     */
    font-family: inherit;
    font-size: 16px; font-weight: 400;
    text-transform: uppercase; text-align: center;
    cursor: pointer; transition: all 0.2s;
    border: 1px solid transparent; border-radius: 0;
}
.btn--primary { background: var(--color-gold); color: var(--color-white); border-color: var(--color-gold); }
.btn--primary:hover { background: var(--color-heading); border-color: var(--color-heading); color: var(--color-white); }
/* Zweite Wahl neben einem .btn--primary: gleiche Groesse und Form, nur ohne
   Flaeche. Gebraucht ueberall, wo zwei Moeglichkeiten gleich erreichbar sein
   muessen, aber nur eine empfohlen ist — etwa Annehmen und Ablehnen in der
   Cookie-Einwilligung. */
.btn--outline { background: none; color: var(--color-gold); border-color: var(--color-gold); }
.btn--outline:hover { background: var(--color-gold); color: var(--color-white); }

/* Weisse Flaeche, graue Kontur, dunkle Schrift. Fuer Listen, in denen viele
   Knoepfe nebeneinander stehen und keiner hervorstechen soll — etwa die
   Antworten im Immo-Finder. */
.btn--weiss {
    background: var(--color-white);
    color: var(--color-heading);
    border-color: var(--global-palette5);
}
.btn--weiss:hover { border-color: var(--color-gold); color: var(--color-gold); }

/* Dunkle Flaeche in der Hausfarbe. Der eine Knopf, der weitergeht. */
.btn--dunkel {
    background: var(--color-heading);
    color: var(--color-white);
    border-color: var(--color-heading);
}
.btn--dunkel:hover { background: var(--color-gold); border-color: var(--color-gold); }

/* Haken hinter der Beschriftung: zeigt an, dass dieser Knopf gewaehlt ist.
   Das Zeichen kommt als Maske aus --haken, siehe contact-form.css — als
   Schriftzeichen geschrieben zieht iOS die Emoji-Schrift heran. */
.btn--haken { display: inline-flex; align-items: center; gap: 10px; }
.btn--haken::after {
    content: '';
    width: 16px;
    height: 16px;
    flex: 0 0 auto;
    background: currentColor;
    -webkit-mask: var(--haken) center / contain no-repeat;
    mask: var(--haken) center / contain no-repeat;
}

.btn--whatsapp {
    background: #00C666; color: var(--color-white);
    border-radius: 5px; font-size: 15px; font-weight: 300;
    padding: 5px 15px; display: inline-flex; align-items: center; gap: 8px;
}
.btn--whatsapp:hover { opacity: 0.9; color: var(--color-white); }


/* === components/footer.css === */
/* Footer */
.site-footer {
    padding: 0 var(--container-padding);
    background: transparent;
    border-top: 1px solid #ccc;
}
.site-footer__inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 0;
}
/*
 * Kleine Rechtsverweise. Dieselbe Optik ueberall, wo Impressum, Datenschutz
 * und Cookie-Einstellungen stehen — in der Fusszeile und in der
 * Cookie-Einwilligung. Deshalb eine Regel und keine zweite daneben, sonst
 * laufen die beiden Stellen beim naechsten Eingriff auseinander.
 *
 * font-size und font-family stehen ausdruecklich da, weil der Cookie-Knopf in
 * der Fusszeile ein <button> ist und Schrift nicht erbt.
 */
.footer-imprint,
.cb-banner__links a,
.cb-modal__links a {
    color: var(--color-gold); font-size: 12px;
    font-family: var(--font-body); font-weight: 400; text-decoration: none;
}
.footer-imprint:hover,
.cb-banner__links a:hover,
.cb-modal__links a:hover { color: #a88a3e; }

/*
 * Die Rechtsverweise als eine Gruppe rechts unten. margin-left:auto haelt sie
 * dort auch auf den Seiten, die links keinen Aufklappknopf tragen — sonst
 * rutschte die Gruppe als einziges Kind nach links.
 */
.site-footer__rechtliches {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 20px;
}

/*
 * Datenschutz und Cookie-Einstellungen stehen neben dem Impressum. Der Knopf
 * sieht aus wie die Verweise daneben — er ist nur deshalb ein Knopf, weil er
 * nicht auf eine Seite fuehrt, sondern ein Fenster oeffnet.
 *
 * Hier steht nur, was der Browser von sich aus an Knopfaussehen mitbringt:
 * Flaeche, Rahmen, Innenabstand. Schrift und Farbe kommen aus
 * .footer-imprint, das der Knopf ebenfalls traegt.
 *
 * Kein "font: inherit" und kein "color: inherit": diese Regel steht nach
 * .footer-imprint und ist gleich spezifisch, wuerde dessen 12 px und das Gold
 * also ueberschreiben — der Knopf stand dann in Groesse und Farbe des
 * Koerpertexts neben zwei goldenen Verweisen.
 */
.footer-cookies {
    background: none;
    border: none;
    padding: 0;
    line-height: inherit;
    cursor: pointer;
}

/*
 * Telefon.
 *
 * Am Schirm ist die Fusszeile eine Zeile: links der Aufklappknopf des
 * Infotexts, rechts die Rechtsverweise. Am Telefon wurden daraus vier
 * gequetschte Spalten, weil alle vier Elemente in derselben Flex-Zeile
 * stehen — der Knopf und die drei Verweise.
 *
 * Deshalb hier zwei Zeilen: der Knopf oben, die Verweise darunter, beides
 * mittig. Sie duerfen umbrechen, damit auch eine laengere Uebersetzung von
 * "Cookie-Einstellungen" nicht aus dem Satzspiegel laeuft.
 */
@media (max-width: 768px) {
    .site-footer {
        padding: 0 var(--container-padding-mobile);
    }
    .site-footer__inner {
        flex-direction: column;
        align-items: center;
        gap: 10px;
        padding: 16px 0;
        text-align: center;
    }
    .site-footer__rechtliches {
        margin-left: 0;
        flex-wrap: wrap;
        justify-content: center;
        gap: 6px 16px;
    }
    .info-text__toggle {
        text-align: center;
    }
}


/* === components/cookiebar.css === */
/*
 * Cookie-Einwilligung.
 *
 * Die Leiste kam samt eigenem Stylesheet aus einem anderen Projekt und brachte
 * fremde Farben, fremde Schriftgroessen und Radien mit. Hier steht nur noch die
 * Anordnung — Position, Aufteilung, Abstaende. Schrift, Farben und Knoepfe
 * kommen aus dem Bestand: die Ueberschriften ueber --schrift-untertitel, der
 * Fliesstext ueber die Grundschrift des Rumpfes, die Knoepfe als .btn im
 * Markup. Damit folgt die Leiste jeder kuenftigen Aenderung an diesen Werten
 * von selbst.
 *
 * Das Skript bleibt unberuehrt: es schaltet die Klasse "visible", setzt
 * "hidden" am Fenster und "cb-active" am Rumpf.
 */

/* ── Grundlage ────────────────────────────────────────────────────────── */

/* Der Rumpf darf nicht scrollen, solange Leiste oder Fenster offen sind. */
body.cb-active { overflow: hidden; }

.cb-overlay {
    position: fixed;
    inset: 0;
    z-index: 99998;
    background: rgba(0, 0, 0, 0.5);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
}
.cb-overlay.visible { opacity: 1; visibility: visible; }

/* ── Leiste ───────────────────────────────────────────────────────────── */

/*
 * Mittig statt als Leiste am unteren Rand.
 *
 * Ueber die ganze Breite gezogen sah der Kasten am grossen Schirm verloren
 * aus: viel Weissraum zwischen Text links und Knoepfen rechts, und die
 * Entscheidung stand am Rand des Blickfelds. In der Mitte ist sie das, was sie
 * ist — eine Frage, die vor dem Weiterlesen beantwortet wird. Der abgedunkelte
 * Hintergrund dahinter kommt vom Skript und war vorher ohne Wirkung.
 */
.cb-banner {
    position: fixed;
    inset: 0;
    z-index: 99999;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    /* Kein eigener Hintergrund: der liegt als .cb-overlay darunter. */
    background: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
    pointer-events: none;
}
.cb-banner.visible { opacity: 1; visibility: visible; pointer-events: auto; }

.cb-banner__inner {
    width: 100%;
    max-width: 560px;
    /* Hoehe begrenzen und innen scrollen lassen: bei langem Text oder kleinem
       Fenster muss die Ueberschrift oben sichtbar bleiben. */
    max-height: calc(100vh - 40px);
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    background: var(--color-bg);
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.25);
    padding: 32px;
    display: flex;
    flex-direction: column;
    gap: 22px;
    /* Kommt mit dem Einblenden leicht herauf. */
    transform: translateY(10px);
    transition: transform 0.3s;
}
.cb-banner.visible .cb-banner__inner { transform: translateY(0); }

/* Untereinander statt nebeneinander: Text, Knoepfe, Rechtsverweise. */
.cb-banner__actions { flex-wrap: wrap; }
.cb-banner__links { justify-content: flex-start; }

.cb-banner__content { flex: 1 1 auto; min-width: 0; }

.cb-banner__title {
    font-family: var(--font-heading);
    font-size: var(--schrift-untertitel);
    font-weight: 300;
    line-height: 1.2;
    color: var(--color-heading);
    margin: 0 0 8px;
}

.cb-banner__text { margin: 0; }

.cb-banner__actions {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 12px;
}

.cb-banner__links {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 10px;
}

/*
 * "Einstellungen" ist eine Handlung, kein Rechtsverweis: wer nicht alles
 * annehmen will, braucht genau diesen Knopf. Er steht deshalb in der Groesse
 * der uebrigen Knoepfe (16px wie .btn) und nicht in den 12px der Verweise
 * darunter — Impressum und Datenschutz braucht an dieser Stelle fast niemand.
 */
.cb-textknopf {
    background: none;
    border: none;
    padding: 0;
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 400;
    color: var(--color-gold);
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
}
.cb-textknopf:hover { color: var(--color-gold-hover); }

.cb-banner__sep { color: var(--color-text-muted); }

/* ── Fenster ──────────────────────────────────────────────────────────── */

.cb-modal {
    position: fixed;
    inset: 0;
    z-index: 100000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s, visibility 0.3s;
}
.cb-modal.visible { opacity: 1; visibility: visible; }
.cb-modal[hidden] { display: none; }

.cb-modal__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
}

.cb-modal__dialog {
    position: relative;
    width: 100%;
    max-width: 640px;
    /* Die Hoehe des Fensters, nicht die des Inhalts: gescrollt wird innen im
       Rumpf, damit Kopf und Fuss stehen bleiben. */
    max-height: calc(100vh - 40px);
    display: flex;
    flex-direction: column;
    background: var(--color-bg);
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
}

.cb-modal__header {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 24px 32px;
    border-bottom: 1px solid var(--color-border);
}

.cb-modal__title {
    font-family: var(--font-heading);
    font-size: var(--schrift-untertitel);
    font-weight: 300;
    line-height: 1.2;
    color: var(--color-heading);
    margin: 0;
}

.cb-modal__close {
    background: none;
    border: none;
    color: var(--color-heading);
    font-size: 30px;
    line-height: 1;
    padding: 0 4px;
    cursor: pointer;
}
.cb-modal__close:hover { color: var(--color-gold); }

.cb-modal__body {
    flex: 1 1 auto;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 24px 32px;
}

.cb-modal__intro { margin: 0 0 24px; }

/*
 * Zwei Zeilen: erst die Knoepfe, darunter die Rechtsverweise. Nebeneinander
 * standen die Verweise gleichrangig neben der Entscheidung, zu der sie nur die
 * Fussnote sind — und auf dem Telefon landeten sie dadurch sogar darueber.
 */
.cb-modal__footer {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 14px;
    padding: 20px 32px;
    border-top: 1px solid var(--color-border);
}

.cb-modal__actions { order: 1; display: flex; flex-wrap: wrap; gap: 10px; }
.cb-modal__links { order: 2; display: flex; gap: 10px; }

/* ── Kategorien ───────────────────────────────────────────────────────── */

.cb-category { border-bottom: 1px solid var(--color-border); }
.cb-category:last-of-type { border-bottom: 0; }

.cb-category__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 16px 0;
}

.cb-category__info { min-width: 0; }

/*
 * font: inherit ist hier notwendig, nicht Zierde: ein <button> erbt Schrift
 * nicht, sondern bekommt vom Browser seine eigene von rund 13 Pixeln. Ohne
 * diese Zeile stehen "Essenziell" und "Statistik" winzig neben ihrem Schalter.
 * Die Ueberschriftenschrift setzt .cb-category__label darunter selbst.
 */
.cb-category__toggle {
    display: flex;
    align-items: center;
    gap: 10px;
    background: none;
    border: none;
    padding: 0;
    font: inherit;
    color: var(--color-heading);
    cursor: pointer;
    text-align: left;
}

.cb-category__arrow {
    display: inline-block;
    font-size: 10px;
    color: var(--color-gold);
    transition: transform 0.2s;
}
.cb-category__toggle[aria-expanded="true"] .cb-category__arrow {
    transform: rotate(90deg);
}

.cb-category__label {
    font-family: var(--font-heading);
    font-weight: 400;
}

.cb-category__badge {
    font-family: var(--font-body);
    font-size: 12px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--color-gold);
    border: 1px solid var(--color-border);
    padding: 3px 8px;
}

.cb-category__details { padding: 0 0 18px 24px; }
.cb-category__desc { margin: 0; color: var(--color-text-light); }

/* ── Schalter ─────────────────────────────────────────────────────────── */

.cb-switch { position: relative; flex: 0 0 auto; width: 46px; height: 24px; }
.cb-switch__input {
    position: absolute;
    opacity: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    cursor: pointer;
}
.cb-switch__slider {
    position: absolute;
    inset: 0;
    background: var(--color-bg-light);
    border: 1px solid var(--color-text-muted);
    transition: background 0.2s, border-color 0.2s;
    pointer-events: none;
}
.cb-switch__slider::before {
    content: '';
    position: absolute;
    top: 3px;
    left: 3px;
    width: 16px;
    height: 16px;
    background: var(--color-white);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
    transition: transform 0.2s;
}
.cb-switch__input:checked + .cb-switch__slider {
    background: var(--color-gold);
    border-color: var(--color-gold);
}
.cb-switch__input:checked + .cb-switch__slider::before { transform: translateX(22px); }
/*
 * Der Schalter der notwendigen Kategorie ist an und laesst sich nicht
 * ausschalten. Er war deshalb blasser — und ein blasser Schalter sieht aus wie
 * ein kaputter. Er traegt jetzt dasselbe Gold wie der andere; dass er fest
 * steht, sagt das Kennzeichen "Erforderlich" daneben, und der Zeiger bleibt
 * ein Pfeil statt einer Hand.
 */
.cb-switch__input:disabled { cursor: default; }
.cb-switch__input:focus-visible + .cb-switch__slider { outline: 2px solid var(--color-gold); }

/* ── Telefon ──────────────────────────────────────────────────────────── */

@media (max-width: 768px) {
    .cb-banner { padding: 12px; }
    .cb-banner__inner {
        gap: 20px;
        padding: 24px var(--container-padding-mobile);
        max-height: calc(100vh - 24px);
    }

    .cb-banner__actions { flex-direction: column; align-items: stretch; gap: 10px; }
    .cb-banner__actions .btn { width: 100%; }
    .cb-banner__links { justify-content: center; }

    .cb-modal { padding: 0; align-items: flex-end; }
    .cb-modal__dialog { max-width: none; max-height: 92vh; }
    .cb-modal__header { padding: 20px var(--container-padding-mobile); }
    .cb-modal__body { padding: 20px var(--container-padding-mobile); }
    .cb-modal__footer {
        flex-direction: column;
        align-items: stretch;
        padding: 18px var(--container-padding-mobile);
    }
    .cb-modal__actions { flex-direction: column; align-self: stretch; }
    .cb-modal__actions .btn { width: 100%; }
    .cb-modal__links { align-self: center; }
}


/* === components/project-card.css === */
/* Project Cards (Listings) */
.project-card {
    display: block; background: var(--color-white);
    overflow: hidden; box-shadow: 0 0 5px rgba(0,0,0,0.25);
    transition: box-shadow 0.3s, transform 0.3s;
}
.project-card:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.15); transform: translateY(-3px); }
.project-card__image {
    display: flex; width: 100%; min-height: 364px; max-height: 364px;
    overflow: hidden; justify-content: center; align-items: center;
}
.project-card__image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s; }
.project-card:hover .project-card__image img { transform: scale(1.05); }
.project-card__info { padding: 20px; }
.project-card__location { font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--color-text-muted); }
.project-card__title { font-size: 21.6px; font-weight: 400; margin: 8px 0; color: var(--color-heading); font-family: var(--font-heading); }
.project-card__meta { font-size: 14.4px; color: var(--color-text-light); }

/* Meldung, wenn die Filter keinen Treffer lassen. */
.project-grid__leer {
    margin: 10px auto 50px;
    max-width: 1200px;
    padding: 0 var(--container-padding);
    font-size: 18px;
    font-weight: 300;
    color: #555;
    text-align: center;
}
@media (max-width: 768px) {
    .project-grid__leer { padding: 0 20px; font-size: 16px; }
}


/* === components/homepage-hero.css === */
/*
 * Der Hero der Startseite liegt jetzt in components/hero.css, gemeinsam mit dem
 * der Listen- und Projektseiten. Diese Datei ist dadurch leer geworden; sie
 * kann aus build/assets.js und dem Verzeichnis genommen werden.
 */


/* === components/category-cards.css === */
/* Category Cards */
.category-cards-section {
    padding: 15px 0 0;
}
.category-cards-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 32px 20px;
}
/* Beide Reihen stehen jetzt in einem Abschnitt untereinander — ohne diese
   Zeile klebt die zweite Reihe an der ersten, weil gap nur innerhalb eines
   Gitters wirkt. */
.category-cards-grid + .category-cards-grid { margin-top: 32px; }
.category-card {
    display: block;
    position: relative;
    overflow: hidden;
    box-shadow: 0 0 5px rgba(0,0,0,0.25);
    transition: box-shadow 0.3s;
}
.category-card:hover {
    box-shadow: 0 8px 24px rgba(0,0,0,0.15);
}
.category-card__image {
    width: 100%;
    overflow: hidden;
}
.category-card__image img {
    width: 100%;
    height: auto;
    display: block;
    transition: transform 0.3s;
}
.category-card:hover .category-card__image img {
    transform: scale(1.05);
}
.category-card__text {
    padding: 18px 0 17px;
    text-align: center;
}
.category-card__title {
    font-size: 19.8px;
    font-weight: 400;
    color: #000;
    text-transform: uppercase;
    margin: 0;
    line-height: 28.8px;
    font-family: var(--font-heading);
}
.category-card__desc {
    font-size: 16.2px;
    font-weight: 300;
    color: #000;
    margin: -3px 0 0;
    line-height: 25.92px;
}

/*
 * Auf dem grossen Schirm stehen drei Kacheln ueber und drei unter den
 * Ergebnissen. Im Quelltext liegen beide Abschnitte dahinter — das ist die
 * Reihenfolge des Telefons und zugleich die, in der Suchmaschinen lesen.
 * Verschoben wird nur die Anzeige.
 */
@media (min-width: 769px) {
    .homepage { display: flex; flex-direction: column; }
    .homepage > .homepage-hero { order: 1; }
    .homepage > .category-cards-section--oben { order: 2; }
    .homepage > .search-section { order: 3; }
    .homepage > * { order: 4; }
}


/* === components/kategorie-liste.css === */
/*
 * Kategorien als schmale Zeilen — die Fassung fuers Handy.
 *
 * Nachgebaut nach Messung am Original (newestepona.com, 375 Pixel Fenster),
 * nicht nach Augenmass:
 *
 *   Zeile          x=0, Breite 375, Hoehe 94 — randlos, keine Seitenpolsterung
 *   Bild           94x94, buendig links
 *   Textspalte     94 bis 281, also die Haelfte der Breite
 *   Pfeilspalte    281 bis 375
 *   Ueberschrift   Roboto Condensed 19.8px/28.8px, Versalien, Gewicht 400
 *   Beschreibung   Roboto 16.2px/25.92px, Gewicht 300
 *   Hintergrund    #f5f5f5, dazwischen 3 Pixel weiss
 *
 * Auf dem grossen Schirm zeigt die Vorlage stattdessen die breiten Kacheln;
 * Elementor blendete die Zeilen ab 768 Pixeln aus, hier steht dieselbe Grenze.
 */
.kategorie-liste { display: none; }

.kategorie-zeile {
    display: flex;
    align-items: stretch;
    background: #f5f5f5;
    margin-bottom: 3px;
    text-decoration: none;
    color: inherit;
    min-height: 94px;
}

.kategorie-zeile__bild {
    flex: 0 0 25.07%;
    display: block;
    line-height: 0;
    align-self: stretch;
}
.kategorie-zeile__bild img {
    width: 100%;
    height: 100%;
    display: block;
    aspect-ratio: 1 / 1;
    object-fit: cover;
}

.kategorie-zeile__text {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 8px 10px 8px 15px;
    min-width: 0;
}
.kategorie-zeile__titel {
    display: block;
    font-family: var(--font-heading);
    font-size: 19.8px;
    line-height: 28.8px;
    font-weight: 400;
    text-transform: uppercase;
    color: #202732;
}
.kategorie-zeile__satz {
    display: block;
    font-family: var(--font-body);
    font-size: 16.2px;
    line-height: 25.92px;
    font-weight: 300;
    color: #202732;
}

/*
 * Der Pfeil sitzt im Original in einem grauen Kreis. Gezeichnet, nicht
 * geschrieben — ein Schriftzeichen haette auf iOS die Emoji-Schrift gezogen
 * und die Farbe ignoriert, dasselbe Problem wie beim Haken im Formular.
 */
.kategorie-zeile__pfeil {
    flex: 0 0 25.07%;
    align-self: center;
    display: flex;
    align-items: center;
    justify-content: center;
}
.kategorie-zeile__pfeil::before {
    content: '';
    display: block;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background-color: #cccccc;
    -webkit-mask: none;
    mask: none;
    background-image: var(--pfeil-rechts-hell);
    background-repeat: no-repeat;
    background-position: 53% center;
    background-size: 10px 17px;
}

/* Die Zeile "Alle Projekte anzeigen" traegt kein Bild. */
.kategorie-zeile--alle { min-height: 60px; margin-top: 12px; }
.kategorie-zeile--alle .kategorie-zeile__text { padding-left: 20px; }

@media (max-width: 768px) {
    .kategorie-liste { display: block; }
    .category-cards-section { display: none; }
}


/* === components/menue-mobil.css === */
/*
 * Mobile Navigation.
 *
 * Unter 768 Pixeln wird .site-header__center ausgeblendet — im Nachbau blieb
 * damit im Kopf nur noch Logo und Sprachwaehler, und es gab keinen Weg mehr
 * ins Menue. Der Knopf holt das nach.
 *
 * Der Sprachwaehler war ausserdem 173 Pixel breit und schob sich auf schmalen
 * Geraeten ueber das Logo. Mobil wird er schmaler und ruecht neben den Knopf.
 */
.menue-knopf {
    display: none;
    background: none;
    border: none;
    padding: 10px 0 10px 14px;
    cursor: pointer;
    flex-direction: column;
    justify-content: center;
    gap: 5px;
    width: 44px;
    height: 44px;
}
.menue-knopf span {
    display: block;
    width: 24px;
    height: 2px;
    background: #fff;
    transition: transform 0.25s, opacity 0.2s;
}
.menue-knopf[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.menue-knopf[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.menue-knopf[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.menue-mobil {
    display: none;
    position: fixed;
    /* Ueber den ganzen Schirm. Vorher begann es unter der Kopfzeile, dadurch
       blieb oben ein Streifen der Seite stehen und das Kreuz sass ausserhalb
       der schwarzen Flaeche. */
    inset: 0;
    z-index: 1000;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    background: rgba(0, 0, 0, 0.97);
    padding: 0 20px 40px;
}

/* Eigene Kopfzeile: Sprachwahl links, Kreuz rechts, auf Hoehe der Seitenkopfzeile. */
.menue-mobil__kopf {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    min-height: var(--header-height);
    padding: 10px 0;
}
.menue-mobil__kopf .nav-lang { padding: 0; flex: 0 0 auto; }
.menue-mobil__zu {
    flex: 0 0 auto;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    color: #fff;
    font-size: 34px;
    line-height: 1;
    cursor: pointer;
}
.menue-mobil__zu:hover { color: var(--color-gold-light); }
.menue-mobil[hidden] { display: none; }
.menue-mobil.ist-offen { display: block; }

.menue-mobil a {
    display: block;
    padding: 13px 0;
    color: #fff;
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 400;
    text-decoration: none;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.menue-mobil a:hover,
.menue-mobil a:focus { color: var(--color-gold-light); }

.menue-mobil__gruppe {
    display: block;
    padding: 22px 0 6px;
    color: var(--color-gold);
    font-family: var(--font-heading);
    /* Vier Pixel groesser als die Eintraege darunter — auf Ansage. */
    font-size: 17px;
    font-weight: 400;
    text-transform: uppercase;
    letter-spacing: 0.06em;
}
.menue-mobil__trenner { display: block; height: 18px; }

@media (max-width: 768px) {
    .menue-knopf { display: flex; }

    /*
     * Der Sprachwaehler wandert ins Menue. Im Kopf war er 173 Pixel breit und
     * drueckte das Logo zusammen — gemessen am Original steht dort ein Logo
     * von 200 Pixeln bei 24 Pixeln Abstand, unverkleinert. Das Original ist
     * einsprachig und hat den Waehler gar nicht; ihn ins Menue zu legen ist
     * der einzige Platz, an dem er keine Ecke des Kopfes kostet.
     */
    .site-header__right .nav-lang { display: none; }
    /* 20 statt 24: derselbe Satzspiegel wie der Inhalt und die Fusszeile. */
    .site-header__container { padding: 0 var(--container-padding); }
    /* Nur die Breite vorgeben. Eine feste Hoehe daneben staucht das Logo,
       sobald die Breite nicht passt: der Kopfbereich gibt der Spalte hier 171
       Pixel, max-width kappt die 200 darauf — und die Hoehe blieb bei 45. */
    .site-logo img { width: 200px; height: auto; }
}

/*
 * Der Sprachwaehler in der Kopfzeile des Menues: schwarz mit weisser Schrift,
 * damit er sich in die dunkle Flaeche einfuegt statt als helles Feld
 * herauszustechen. Der Pfeil ist dieselbe Zeichnung wie sonst, nur in Weiss.
 */
.menue-mobil .lang-switcher {
    width: 200px;
    height: 40px;
    font-size: 16px;
    color: #fff;
    border: 1px solid rgba(255, 255, 255, 0.35);
    background-color: #000;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23fff' stroke-width='1.5' fill='none'/%3E%3C/svg%3E"), none;
    background-repeat: no-repeat, no-repeat;
    background-position: right 12px center, 0 0;
    background-size: 12px 7px, auto;
}
.menue-mobil .lang-switcher option { color: #fff; background: #000; }

/* Aufgeklappt bleibt die Seite stehen, statt hinter dem Menue zu scrollen. */
body.menue-offen { overflow: hidden; }

/*
 * Die Eintraege einer Gruppe stehen zweispaltig, die Gruppenueberschrift laeuft
 * ueber beide Spalten. Der laengste Eintrag ("Golf Residences") braucht rund
 * 120 Pixel; bei 340 Pixeln Fensterbreite hat eine Spalte noch 138. Darunter
 * bleibt es einspaltig.
 */
@media (min-width: 340px) and (max-width: 768px) {
    .menue-mobil {
        display: none;
    }
    .menue-mobil.ist-offen {
        display: grid;
        grid-template-columns: 1fr 1fr;
        column-gap: 24px;
        align-content: start;
    }
    .menue-mobil__kopf,
    .menue-mobil__gruppe,
    .menue-mobil__trenner { grid-column: 1 / -1; }
}


/* === components/search-section.css === */
/* Search Section + Project Grid */
.search-section {
    padding: 100px 0 100px;
    max-width: 1220px;
    margin: 0 auto;
    text-align: center;
}
.search-section h2 {
    font-size: var(--schrift-abschnitt);
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 0 0 12px;
}
.search-section__subtitle {
    font-size: 18px;
    font-weight: 300;
    color: #000;
    margin: 0 0 40px;
}

/* Project Grid */
.project-grid {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-start;
    gap: 0;
    text-align: left;
}

/* Project Card */
.project-grid-card {
    width: 33.333%;
    padding: 10px;
    display: block;
}
.project-grid-card__inner {
    position: relative;
    overflow: hidden;
    box-shadow: 0 0 5px rgba(0,0,0,0.25);
    transition: box-shadow 0.3s, transform 0.3s;
    background: #fff;
}
.project-grid-card:hover .project-grid-card__inner {
    box-shadow: 0 8px 24px rgba(0,0,0,0.15);
    transform: translateY(-3px);
}

/* Card Image */
.project-grid-card__image {
    width: 100%;
    overflow: hidden;
    position: relative;
    z-index: 2;
}
.project-grid-card__image img {
    width: 100%;
    height: 236px;
    object-fit: cover;
    display: block;
    transition: transform 0.3s;
}
.project-grid-card:hover .project-grid-card__image img {
    transform: scale(1.05);
}

/* Location Badge */
.project-grid-card__badge {
    position: absolute;
    top: 215px;
    left: 50%;
    transform: translateX(-50%);
    background: var(--color-gold);
    color: #fff;
    font-size: 11.7px;
    font-weight: 400;
    text-transform: uppercase;
    padding: 3px 10px;
    border: 1px solid #fff;
    box-shadow: 0 0 4px rgba(0,0,0,0.39);
    white-space: nowrap;
    z-index: 5;
}

/* Daten-Badges oben links: Fertigstellung (soon-available) und Rendite-Beispiel
   (nur im Investoren-/Top-Return-Kontext). Dezent, edel, CI-Gold als Akzent —
   dunkles Glas ueber dem Bild, damit sie ueber jedem Titelbild lesbar bleiben. */
.project-grid-card__flags {
    position: absolute;
    top: 12px;
    left: 12px;
    z-index: 6;
    display: flex;
    flex-direction: column;
    gap: 6px;
    align-items: flex-start;
    pointer-events: none;
}
.project-grid-card__flag {
    display: inline-flex;
    align-items: baseline;
    gap: 7px;
    background: rgba(26, 24, 22, 0.66);
    -webkit-backdrop-filter: blur(3px);
    backdrop-filter: blur(3px);
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-left: 2px solid var(--color-gold);
    padding: 5px 11px;
    line-height: 1;
    white-space: nowrap;
}
.project-grid-card__flag .flag-k {
    font-size: 9.5px;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    font-weight: 400;
    color: #e4d2ba;
}
.project-grid-card__flag .flag-v {
    font-size: 12.5px;
    font-weight: 500;
    color: #fff;
}
/* Sofort beziehbar: gleicher Aufbau wie das datierte Badge (Gold-Label + weiss),
   nur mit dunkelgruenem Hintergrund und gruenem Akzent. */
.project-grid-card__flag--ready-now {
    background: rgba(20, 58, 42, 0.86);
    border-left-color: #3f9b6e;
}

/* Card Text Area */
.project-grid-card__info {
    padding: 18px 15px 17px;
    background: #fff;
    text-align: center;
    position: relative;
    z-index: 1;
}
.project-grid-card__title {
    font-size: 19.8px;
    font-weight: 400;
    font-family: var(--font-heading);
    text-transform: uppercase;
    color: #000;
    line-height: 28.8px;
    margin: 0;
}
.project-grid-card__meta {
    font-size: 16.2px;
    font-weight: 300;
    color: #000;
    line-height: 25.92px;
    margin: -3px 0 0;
}

/* Project Card Ribbon/Banderole */
.project-grid-card__ribbon {
    position: absolute;
    top: 30px;
    right: -50px;
    width: 202px;
    height: 32px;
    background: var(--color-gold);
    color: #fff;
    font-family: 'Roboto', sans-serif;
    font-size: 14.4px;
    font-weight: 700;
    text-transform: uppercase;
    text-align: center;
    line-height: 28.8px;
    padding: 2px 60px 1px;
    transform: rotate(40deg);
    z-index: 4;
}

/* Load More Button */
.project-grid__load-more {
    display: block;
    width: 100%;
    text-align: center;
    padding: 30px 0;
}
.project-grid__load-more button {
    background: var(--color-gold);
    color: #fff;
    border: none;
    padding: 12px 40px;
    font-family: 'Roboto', sans-serif;
    font-size: 16px;
    font-weight: 300;
    text-transform: uppercase;
    cursor: pointer;
    transition: background 0.2s;
}
.project-grid__load-more button:hover {
    background: var(--color-heading);
}

/* 2-column grid variant (for resales, fewer items) */
.project-grid.grid-2col .project-grid-card {
    width: 50%;
}
.project-grid.grid-2col .project-grid-card__image img {
    height: 360px;
}
.project-grid.grid-2col .project-grid-card__badge {
    top: 337px;
}

/* 1-column variant (schmale Spalten, z. B. Blog-Sidebar): unsere Kachel gestapelt,
   volle Breite, ohne den Gutter-Innenabstand (kein seitliches Padding/Margin);
   der Abstand zwischen den Kacheln kommt vom Spalten-gap. */
.project-grid.grid-1col { flex-direction: column; gap: 24px; }
.project-grid.grid-1col .project-grid-card {
    width: 100%;
    padding: 0;
}

/* === components/listing-hero.css === */
/*
 * Was auf Listenseiten unter dem Titelbild steht.
 *
 * Der Hero selbst liegt in components/hero.css — gemeinsam mit dem der
 * Startseite und der Projektseiten, weil es derselbe Aufbau ist.
 */

/* Listing Intro — element inside search-section, not a frame */
.search-section > h2 {
    font-size: var(--schrift-abschnitt);
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 0 0 16px;
}
.search-section__subtitle {
    font-size: 18px;
    font-weight: 300;
    color: #000;
    line-height: 1.7;
    margin: 0 auto 40px;
}

/* Listing Page Content (below grid) */
.listing-content {
    /* 900 statt 1200: bei voller Satzspiegelbreite laufen ueber 130 Zeichen in
       eine Zeile, und das Auge verliert beim Ruecksprung die naechste. */
    max-width: 900px;
    margin: 0 auto;
    padding: 0 var(--container-padding) 100px;
}
.listing-content h2 {
    font-size: var(--schrift-untertitel);
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 40px 0 16px;
    line-height: 1.2;
}
.listing-content h2:first-child {
    margin-top: 0;
}
.listing-content h3 {
    font-size: 24px;
    font-weight: 400;
    font-family: var(--font-heading);
    color: #202732;
    margin: 30px 0 12px;
}
.listing-content p {
    font-size: 16.2px;
    font-weight: 300;
    line-height: 1.7;
    color: #333;
    margin: 0 0 16px;
}
.listing-content ul, .listing-content ol {
    margin: 0 0 16px;
    padding-left: 24px;
}
.listing-content li {
    font-size: 16.2px;
    font-weight: 300;
    line-height: 1.7;
    color: #333;
    margin: 0 0 8px;
}
.listing-content a { color: var(--color-gold); }
.listing-content a:hover { color: var(--color-gold-hover); }
.listing-content strong { font-weight: 600; }

/* Listing FAQ spacing — reuses .project-faqs styles */
.listing-content .project-faqs {
    margin-top: 100px;
    border-top: 1px solid var(--color-border);
    padding: 100px 0 0;
    max-width: none;
}
.listing-content .project-faqs h2 {
    font-size: var(--schrift-untertitel);
    text-align: left;
}


/* === components/filter-bar.css === */
/* Filter Bar */
.filter-bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    /* Abstand zwischen Suchfeld und Feldergruppe — die sind direkte Kinder. */
    gap: 18px;
    max-width: 1220px;
    margin: 0 auto 30px;
    padding: 0 10px;
}
/*
 * Die Felder liegen in einem eigenen Rahmen, weil der auf dem Handy zur
 * Vollbildflaeche wird. Auf dem grossen Schirm darf dieser Rahmen die Reihe
 * nicht brechen — ohne diese Zeile standen Filter und Sortierung
 * untereinander statt nebeneinander.
 */
.filter-bar__felder {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex: 1 1 auto;
    gap: 18px;
}
.filter-bar__filters {
    display: flex;
    gap: 18px;
}
.filter-bar__sort {
    display: flex;
    align-items: center;
}
/*
 * Helle Felder mit dunkler Schrift und beigem Dreieck. Dunkel war einen
 * Versuch wert, wirkte neben den hellen Kacheln aber schwer.
 */
.filter-bar select {
    appearance: none;
    -webkit-appearance: none;
    width: 170px;
    /* 46 statt 38 Pixel hoch und mehr Luft innen — mit den engen Werten sassen
       Schrift und Dreieck gequetscht im Feld. Dieselbe Hoehe wie das Suchfeld
       auf dem Telefon. */
    height: 46px;
    background-color: #fff;
    border: 1px solid #bfbfbf;
    border-radius: 0;
    font-family: 'Roboto', sans-serif;
    font-size: 16px;
    font-weight: 300;
    color: var(--color-text);
    padding: 4px 40px 3px 18px;
    cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6' fill='%23aa8d70'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 16px center;
    background-size: 10px 6px;
    transition: border-color 0.2s;
}
.filter-bar select option { color: var(--color-text); background: #fff; }
.filter-bar__sort select {
    width: 248px;
}

/*
 * Mobil bricht die Leiste um.
 *
 * Drei Filter zu 150 Pixeln plus die Sortierung zu 248 ergeben 764 Pixel in
 * einer Zeile. Auf einem 375er Display ragte die Leiste 389 Pixel hinaus und
 * machte die ganze Startseite seitlich verschiebbar. Unter 768 Pixeln stehen
 * die vier Auswahlfelder deshalb in einem 2x2-Raster ueber die volle Breite.
 */
@media (max-width: 768px) {
    .filter-bar {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 10px;
        padding: 0 20px;
    }
    .filter-bar__filters {
        display: contents;
    }
    .filter-bar__sort {
        display: block;
    }
    .filter-bar select,
    .filter-bar__sort select {
        width: 100%;
    }
}

/* Auf sehr schmalen Geraeten wird auch zweispaltig zu eng: der laengste
   Eintrag der Sortierung braucht mehr Platz als die halbe Breite. */
@media (max-width: 420px) {
    .filter-bar { grid-template-columns: 1fr; }
}

/*
 * Suchfeld und Filterknopf — nur auf dem Telefon.
 *
 * Vorher standen dort vier Auswahlfelder untereinander, jedes schmaler als der
 * Satzspiegel. Jetzt eine Zeile: links suchen, rechts filtern. Die Felder
 * ziehen in eine Vollbildflaeche um, die sich wie das Menue oeffnet.
 */
/*
 * Suchfeld und Filterknopf sind direkte Kinder der Leiste. Auf dem grossen
 * Schirm steht das Feld dadurch vor den Auswahlfeldern, der Knopf ist dort
 * ausgeblendet.
 */
.filter-knopf { display: none; }
.filter-suche {
    flex: 0 0 auto;
    /* Breit genug fuer "Search project or location" samt Lupe und Innenabstand
       — bei 230 Pixeln brach der Platzhalter nach "loca" ab. */
    width: 290px;
    height: 46px;
    /* Links Platz fuer die Lupe. */
    padding: 0 18px 0 44px;
    border: 1px solid #bfbfbf;
    border-radius: 0;
    background-color: #fff;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='6.8' cy='6.8' r='4.8' fill='none' stroke='%23aa8d70' stroke-width='1.6'/%3E%3Cpath d='M10.4 10.4 L14.6 14.6' stroke='%23aa8d70' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: left 16px center;
    background-size: 16px 16px;
    color: var(--color-text);
    font-family: 'Roboto', sans-serif;
    font-size: 16px;
    font-weight: 300;
    appearance: none;
    -webkit-appearance: none;
    transition: border-color 0.2s;
}
.filter-suche::placeholder { color: #6b7079; opacity: 1; }
.filter-suche:focus,
.filter-bar select:focus { outline: none; border-color: var(--color-gold); }
.filter-flaeche__kopf,
.filter-flaeche__fuss { display: none; }

@media (max-width: 768px) {
    .filter-bar {
        display: block;
        padding: 0;
        margin-bottom: 24px;
    }

    .filter-bar {
        display: grid;
        grid-template-columns: 1fr auto;
        gap: 10px;
        align-items: stretch;
    }
    .filter-knopf { display: inline-flex; }
    .filter-suche {
        width: auto;
        flex: 1 1 auto;
        min-width: 0;
        height: 46px;
        padding: 0 14px 0 42px;
        /* Kraeftiger Rahmen in der Farbe des Knopfes daneben. Mit dem hellen
           Grau davor verschwamm das Feld auf weissem Grund und wirkte
           ausgegraut, als waere es gesperrt. */
        border: 1px solid var(--color-heading);
        border-radius: 0;
        /* Nur die Farbe setzen, nicht "background" — das wuerde die Lupe
           mitloeschen, die als Hintergrundbild darin sitzt. */
        background-color: #fff;
        background-position: left 15px center;
        font-family: var(--font-body);
        font-size: 16px;      /* nicht kleiner: iOS zoomt sonst beim Tippen */
        font-weight: 300;
        color: #000;
        appearance: none;
        -webkit-appearance: none;
    }
    /* Manche Browser setzen den Platzhalter von sich aus halbtransparent —
       daher opacity ausdruecklich auf 1. */
    .filter-suche::placeholder { color: #6b7079; opacity: 1; }
    .filter-suche:focus { outline: none; border-color: var(--color-gold); }

    .filter-knopf {
        flex: 0 0 auto;
        display: inline-flex;
        align-items: center;
        gap: 8px;
        height: 46px;
        padding: 0 20px;
        border: none;
        background: var(--color-heading);
        color: #fff;
        font-family: var(--font-heading);
        font-size: 16px;
        font-weight: 400;
        text-transform: uppercase;
        cursor: pointer;
    }
    .filter-knopf__zahl {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 20px;
        height: 20px;
        padding: 0 5px;
        border-radius: 10px;
        background: var(--color-gold);
        color: #fff;
        font-family: var(--font-body);
        font-size: 12px;
        font-weight: 400;
    }
    .filter-knopf__zahl[hidden] { display: none; }

    /* ── Die Vollbildflaeche ───────────────────────────────────────────── */
    .filter-bar__felder {
        display: none;
        position: fixed;
        inset: 0;
        z-index: 1000;
        /* Dunkel wie das Menue: schwarze Flaeche, weisse Schrift, Beige als
           Akzent. */
        background: rgba(0, 0, 0, 0.97);
        color: #fff;
        padding: 0 20px 20px;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }
    .filter-bar__felder.ist-offen { display: block; }
    body.filter-offen { overflow: hidden; }

    .filter-flaeche__kopf {
        display: flex;
        align-items: center;
        justify-content: space-between;
        min-height: var(--header-height);
        border-bottom: 1px solid rgba(255, 255, 255, 0.15);
        margin-bottom: 24px;
    }
    .filter-flaeche__titel {
        font-family: var(--font-heading);
        font-size: 24px;
        font-weight: 400;
        text-transform: uppercase;
        letter-spacing: 0.06em;
        color: var(--color-gold);
    }
    .filter-flaeche__zu {
        width: 44px; height: 44px;
        display: flex; align-items: center; justify-content: center;
        background: none; border: none;
        color: #fff; font-size: 34px; line-height: 1; cursor: pointer;
    }
    .filter-flaeche__zu:hover { color: var(--color-gold-light); }

    /* In der Flaeche steht jedes Feld auf voller Breite untereinander. */
    .filter-bar__filters,
    .filter-bar__sort { display: block; }
    .filter-bar__felder select {
        width: 100%;
        height: 52px;
        margin-bottom: 14px;
        font-size: 16px;
        color: #fff;
        background-color: transparent;
        border: 1px solid rgba(255, 255, 255, 0.35);
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6' fill='%23fff'/%3E%3C/svg%3E");
        background-position: right 16px center;
    }
    .filter-bar__felder select:focus { border-color: var(--color-gold); }
    /* Die aufgeklappte Liste kommt vom System und muss eigens gefaerbt werden. */
    .filter-bar__felder select option { color: #fff; background: #111; }

    .filter-flaeche__fuss {
        display: flex;
        gap: 12px;
        align-items: stretch;
        margin-top: 26px;
    }
    .filter-flaeche__leeren {
        flex: 0 0 auto;
        padding: 0 20px;
        height: 52px;
        background: none;
        border: 1px solid rgba(255, 255, 255, 0.35);
        color: #fff;
        font-family: var(--font-body);
        font-size: 16px;
        cursor: pointer;
    }
    .filter-flaeche__leeren:hover { border-color: var(--color-gold); color: var(--color-gold-light); }
    .filter-flaeche__zeigen {
        flex: 1 1 auto;
        height: 52px;
        background: var(--color-gold);
        border: none;
        color: #fff;
        font-family: var(--font-heading);
        font-size: 17px;
        font-weight: 400;
        text-transform: uppercase;
        cursor: pointer;
    }
    .filter-flaeche__zeigen:hover { background: var(--color-gold-hover); }
}


/* === components/objektliste.css === */
/*
 * Teile der Objektliste aus der Datenbank, die es bei newEstepona nicht gibt
 * (Filterleiste aus api/liste/Filterleiste.php, von realEstepona). Regeln von
 * dort uebernommen; Leiste, Felder, Kacheln und "Load more" gestaltet das
 * newEstepona-CSS selbst, weil die Ausgabe dessen Klassen traegt.
 */

/* Zeile aus Objektnummer-Suche und Filterleiste. Die Suche nach der
   Objektnummer gibt es nur auf dem Telefon — dort neben dem Filterknopf. */
.filter-reihe { display: block; }
.refno-bar { display: none; }

/* Die Leiste sucht auf dem grossen Schirm bei jeder Auswahl sofort
   (objekt-filter.js), auf dem Telefon fuehrt "Show results" in der Flaeche.
   Ein eigener Suchknopf waere doppelt. */
.filter-bar__suche { display: none; }

@media (max-width: 767px) {
    .filter-reihe {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 10px;
        align-items: center;
        margin-bottom: 20px;
        padding: 0 10px;
    }
    .refno-bar { display: block; }
    .refno-bar__feld {
        width: 100%;
        height: 46px;
        padding: 0 14px 0 42px;
        border: 1px solid var(--global-palette1);
        border-radius: 0;
        background-color: #fff;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none'%3E%3Ccircle cx='11' cy='11' r='7' stroke='%23202732' stroke-width='2'/%3E%3Cpath d='M16.5 16.5 21 21' stroke='%23202732' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
        background-repeat: no-repeat;
        background-position: left 14px center;
        background-size: 18px 18px;
        font-family: var(--font-body);
        font-size: 16px;
        font-weight: 300;
    }
    .refno-bar__feld:focus { outline: none; border-color: var(--color-gold); }
    .filter-reihe .filter-bar {
        display: block;
        margin: 0;
        padding: 0;
        max-width: none;
    }
}

/*
 * Objektkachel wie auf der alten Luxury-Marbella-Seite (bei 1440 gemessen):
 * Kachel mit 10 Innenabstand, 1px-Kontur #3f4958, Bild im Verhaeltnis 583 x 364,
 * weisses Feld 22/25/10, Kopfzeile 14,4 grau, Titel 18, Trennlinie #eee,
 * Fusszeile 14,4 mit fetten Zahlen und Preis 18/600.
 */
.lm-karte {
    width: 33.333%;
    padding: 10px;
}
.lm-karte__verweis {
    display: flex;
    flex-direction: column;
    height: 100%;
    border: 1px solid #3f4958;
    color: #000;
    text-decoration: none;
    transition: transform 0.3s, box-shadow 0.3s;
}
.lm-karte__verweis:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
}
.lm-karte__bild {
    position: relative;
    display: block;
    aspect-ratio: 583 / 364;   /* Seitenverhaeltnis der Kachelbilder (Vorgabe ST) */
    overflow: hidden;
    background: #2a3240;
}
.lm-karte__bild img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.lm-karte__banderole {
    position: absolute;
    top: 20px;
    left: 0;
    padding: 4px 14px;
    background: var(--color-gold);
    color: #fff;
    font-size: 13px;
    font-weight: 400;
}
.lm-karte__info {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    padding: 22px 25px 10px;
    background: #fff;
}
.lm-karte__kopf {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    font-size: 14.4px;
    font-weight: 300;
    line-height: 20.16px;
    color: #888;
}
.lm-karte__ref { flex: 0 0 auto; }
.lm-karte__titel {
    display: block;
    margin: 6px 0 0;
    font-size: 18px;
    font-weight: 400;
    line-height: 25.2px;
    color: #000;
}
.lm-karte__fuss {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    margin-top: auto;
    padding: 10px 0 0;
    border-top: 1px solid #eee;
    /* Abstand Titel -> Linie wie auf der alten Seite (25). */
    position: relative;
}
.lm-karte__titel + .lm-karte__fuss { margin-top: 25px; }
.lm-karte__masse {
    font-size: 14.4px;
    font-weight: 300;
    line-height: 20.16px;
    color: #666;
}
.lm-karte__masse strong { font-weight: 400; color: #000; }
.lm-karte__preis {
    flex: 0 0 auto;
    font-size: 18px;
    font-weight: 600;
    line-height: 28.8px;
    color: #000;
    white-space: nowrap;
}

@media (max-width: 1024px) {
    .lm-karte { width: 50%; }
}
@media (max-width: 767px) {
    .lm-karte { width: 100%; }
}

/* Suchseite nach Objektnummer (/suche/), von realEstepona uebernommen. */
.suchseite {
    max-width: 1200px;
    margin: 0 auto;
    padding: 60px 120px 80px;
}

.suchseite__titel {
    margin: 0 0 10px;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 44.2px;
    line-height: 53.04px;
    font-weight: 300;
    color: #202732;
}

.suchseite__text {
    margin: 0 0 26px;
    max-width: 640px;
    font-size: 17px;
    line-height: 28.9px;
    font-weight: 300;
    color: #000;
}
.suchseite__text:empty { display: none; }

/* Dasselbe Feld wie im Kopf, nur gross genug, um etwas einzutippen. */
.suchseite__form {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 40px;
}
.suchseite__label {
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    color: #202732;
}
.suchseite__feld {
    flex: 0 1 260px;
    height: 48px;
    padding: 0 16px;
    border: 1px solid #e4e4e4;
    border-radius: 2px;
    background: #fff;
    font-family: Roboto, sans-serif;
    /* 16, sonst zoomt iOS beim Hineintippen in das Feld. */
    font-size: 16px;
    color: #202732;
}
.suchseite__feld:focus { outline: none; border-color: #aa8d70; }
.suchseite__knopf {
    flex: 0 0 auto;
    height: 48px;
    padding: 0 26px;
    border: none;
    border-radius: 2px;
    background: #aa8d70;
    color: #fff;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 16px;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    cursor: pointer;
}
.suchseite__knopf:hover { background: #202732; }


/* === components/finder.css === */
/*
 * Immo-Finder — die Gardine.
 *
 * Diese Datei regelt NUR den Balken selbst: wie er hereinkommt, wie breit er
 * ist, welchen Schatten er wirft, dass er auf dem Telefon unten statt rechts
 * steht, und dass die Seite dabei zusammengeschoben wird.
 *
 * Alles, was IM Balken steht, wird hier nicht gestaltet. Fragen sind h2,
 * Zwischentafeln h3, Text ist Fliesstext, alles Klickbare traegt .btn mit
 * .btn--outline, .btn--primary oder .btn--whatsapp. Groesse, Schrift, Farbe
 * und Form kommen aus der CSS der Seite — auch auf dem Telefon.
 *
 * Darum steht hier keine Angabe zu Schrift oder Farbe fuer einen Inhalt. Was
 * noch da ist, ist Lage: Raster, Abstaende, Hoehen, Ueberlauf. Wer hier eine
 * Schrift- oder Farbangabe fuer einen Inhalt ergaenzt, macht es falsch.
 */

/*
 * Die Seite wird zusammengeschoben, nicht uebermalt: der Koerper bekommt den
 * Platz der Gardine als Innenabstand, die festen Elemente ruecken mit. Dadurch
 * fliessen Raster und Spalten in die schmalere Breite.
 *
 * Eine Einschraenkung, die man wissen muss: Medienabfragen messen das Fenster,
 * nicht den verbleibenden Platz. Bei halber Breite wird das Layout enger,
 * schaltet aber nicht auf die Telefonfassung um.
 */
body {
    /* Die Seite wandert um genau die Breite nach links, die die Gardine
       hereinkommt — sie wird geschoben, nicht gestaucht. Die Breite bleibt
       dabei die des Fensters, sonst liefe der rechte Teil unter die Gardine. */
    margin-left: calc(var(--finder-raum) * -1);
    width: 100vw;
    padding-bottom: var(--finder-raum-unten);
    transition: margin-left var(--finder-dauer) var(--finder-kurve),
                padding-bottom var(--finder-dauer) var(--finder-kurve);
}

/* Die Kopfzeile haengt am Fenster, nicht am Koerper — sie muss denselben Weg
   eigens gehen, sonst bliebe sie stehen und wuerde schmaler. */
.site-header {
    left: calc(var(--finder-raum) * -1);
    right: var(--finder-raum);
    transition: left var(--finder-dauer) var(--finder-kurve),
                right var(--finder-dauer) var(--finder-kurve);
}

/* Der Broschuerenknopf auf den Projektseiten haengt ebenfalls fest am Rand. */
.brochure-link {
    right: calc(52px + var(--finder-raum));
    transition: right var(--finder-dauer) var(--finder-kurve);
}

/* Der Griff zum Zurueckholen, nachdem jemand „Nein, danke" gesagt hat. Er
   sitzt am rechten Rand ueber den Knoepfen der Koobolds-Animation; der Abstand
   nach unten steht in der Konfiguration. Der Pfeil ist das vorhandene
   --pfeil-rechts, um 180 Grad gedreht. */
.finder__zurueckholen {
    position: fixed;
    right: 0;
    bottom: var(--finder-zurueckholen-unten, 120px);
    z-index: 899;
    width: 34px;
    height: 48px;
    padding: 0;
    border: 1px solid var(--global-palette5);
    border-right: 0;
    border-radius: 4px 0 0 4px;
    background: var(--color-white);
    cursor: pointer;
    box-shadow: -4px 0 12px rgba(32, 39, 50, .14);
}

.finder__zurueckholen::before {
    content: '';
    display: block;
    width: 12px;
    height: 20px;
    margin: 0 auto;
    background: var(--color-heading);
    transform: rotate(180deg);
    -webkit-mask: var(--pfeil-rechts) center / contain no-repeat;
    mask: var(--pfeil-rechts) center / contain no-repeat;
}

.finder__zurueckholen:hover { border-color: var(--color-gold); }
.finder__zurueckholen:hover::before { background: var(--color-gold); }
.finder__zurueckholen[hidden] { display: none; }

/* ------------------------------------------------------------- Der Balken */

.finder {
    --finder-streifen: 13%;
    --finder-offen: 50%;
    position: fixed;
    inset: 0 0 auto auto;
    height: 100vh;
    height: 100dvh;
    width: var(--finder-streifen);
    /* Nicht breiter als noetig: 18 % von 2560px waeren 460px Streifen. Beide
       Grenzen stehen in der Konfiguration, das Skript setzt sie. */
    max-width: var(--finder-streifen-max, 265px);
    min-width: var(--finder-streifen-min, 132px);
    z-index: 900;
    display: flex;
    /* Eingefahren steht die Gardine neben dem Bild und schiebt sich erst
       herein, wenn das Skript sie freigibt. */
    transform: translateX(100%);
    transition: transform var(--finder-dauer) var(--finder-kurve),
                width var(--finder-dauer) var(--finder-kurve),
                max-width var(--finder-dauer) var(--finder-kurve);
}

.finder[data-sichtbar] { transform: translateX(0); }

.finder[data-offen] {
    width: var(--finder-offen);
    max-width: none;
}

/* Ohne JavaScript ist keine Gardine da. */
.finder[hidden] { display: none; }

/* Geschlossen: der Streifen. Weiss, mit dem Schatten nach rechts in die Leiste
   hinein — eine harte Kante am linken Rand, dahinter ein weicher Verlauf. Die
   Seite selbst bleibt dadurch unangetastet hell. */
.finder__streifen {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 28px;
    width: 100%;
    padding: 40px 28px;
    background: var(--color-white);
    cursor: pointer;
    text-align: center;
    box-shadow: inset 1px 0 0 rgba(32, 39, 50, .14),
                inset 18px 0 24px -12px rgba(32, 39, 50, .30);
}

.finder[data-offen] .finder__streifen { display: none; }

/* Satz und Knopf im Streifen untereinander. Nur die Lage. */
.finder__teaser {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 32px;
}

/* Auf Ansage: engerer Zeilenfall als die h2 der Seite. Im schmalen Streifen
   bricht der Satz auf vier Zeilen, da wirken 1.2 auseinandergezogen. */
.finder__streifen h2 {
    margin: 0;
    line-height: 1.08;
}

/* Aufgezogen: die Flaeche. In der Mitte laeuft das Video, oben und unten
   stehen weisse Leisten davor. */
.finder__flaeche {
    display: none;
    flex: 1 1 auto;
    width: 100%;
    height: 100%;
    flex-direction: column;
    position: relative;
    background: var(--color-white);
    box-shadow: inset 1px 0 0 rgba(32, 39, 50, .14),
                inset 18px 0 24px -12px rgba(32, 39, 50, .22);
}

.finder[data-offen] .finder__flaeche { display: flex; }

/* Der Kantenschatten an der linken Seite gehoert nach vorn: Kopf- und
   Fussleiste sind deckend und wuerden ihn sonst uebermalen. Er zeigt die Tiefe
   und darf beim Aufziehen nicht verschwinden. */
.finder__flaeche::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 3;
    pointer-events: none;
    box-shadow: inset 1px 0 0 rgba(32, 39, 50, .14),
                inset 18px 0 24px -12px rgba(32, 39, 50, .30);
}

/* Der Lautsprecher sitzt im Bewegtbild, unten rechts mit 20 Pixeln Abstand.
   Weiss mit einem weichen Schatten, damit er auf hellen wie dunklen Stellen
   des Videos steht. */
.finder__ton {
    position: absolute;
    right: 20px;
    bottom: 20px;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--color-white);
    color: var(--color-heading);
    cursor: pointer;
    box-shadow: 0 2px 8px rgba(32, 39, 50, .22);
    transition: color 160ms ease, box-shadow 160ms ease;
}

.finder__ton svg {
    width: 24px;
    height: 24px;
    display: block;
}

.finder__ton:hover {
    color: var(--color-gold);
    box-shadow: 0 3px 12px rgba(32, 39, 50, .30);
}

/* Das Video fuellt die Mitte und nichts sonst. */
.finder__video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    pointer-events: none;
}

/* Die beiden weissen Leisten stehen vor dem Bild und werfen ihren Schatten
   darauf. Weil sie decken, braucht es keinen Verlauf: das Video zeigt in der
   Mitte volle Farben, und die Schrift steht auf Weiss. */
.finder__kopf,
.finder__unten {
    position: relative;
    z-index: 2;
    background: var(--color-white);
}

.finder__kopf { box-shadow: 0 8px 20px rgba(32, 39, 50, .16); }
.finder__unten { box-shadow: 0 -8px 20px rgba(32, 39, 50, .16); }

/* ----------------------------------------------------------- Lage im Balken

   Ab hier nur noch: was steht wo, wie viel Platz, was laeuft bei Ueberlaenge
   um. Kein Aussehen. */

/* Drei Spalten, aussen gleich breit: nur so steht die Mitte wirklich mittig
   und nicht um die Breite des Kreuzes versetzt. */
.finder__kopf {
    flex: 0 0 auto;
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 16px;
    padding: 50px 50px;
}

.finder__mitte {
    display: flex;
    align-items: center;
    gap: 32px;
}

.finder__zeichen {
    flex: 0 0 auto;
    width: 50px;
    height: 50px;
    display: block;
}

/* Links oben zwei Icons: neu starten und Ton. Sie sollen den Weg nicht
   wichtiger machen als die Frage, darum klein und ohne Flaeche. */
/* Die beiden Werkzeuge stehen dicht beieinander und in derselben Staerke wie
   das Kreuz rechts: feine Konturen, dieselbe Farbe, dieselbe Groesse. */
.finder__werkzeuge {
    justify-self: start;
    display: flex;
    align-items: center;
    gap: 6px;
}

.finder__werkzeug {
    position: relative;
    display: block;
    width: 44px;
    height: 44px;
    border: 0;
    background: transparent;
    color: var(--color-heading);
    cursor: pointer;
    padding: 0;
}

.finder__werkzeug svg {
    width: 24px;
    height: 24px;
    display: block;
    margin: 0 auto;
}

.finder__werkzeug:hover { color: var(--color-gold); }

/* Das Wort steht nur da, wenn man darueberfaehrt — sonst nimmt es der
   Kopfzeile die Ruhe. */
.finder__werkzeug-wort {
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    margin-top: 2px;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.2;
    white-space: nowrap;
    color: var(--color-heading);
    opacity: 0;
    transition: opacity 160ms ease;
    pointer-events: none;
}

.finder__werkzeug:hover .finder__werkzeug-wort,
.finder__werkzeug:focus-visible .finder__werkzeug-wort { opacity: 1; }

.finder__zu { justify-self: end; }

/* Der Fortschritt liegt in der Kopfzeile und endet vor dem Kreuz — nicht von
   Rand zu Rand. Zwei Pixel hoch, Fuellung in der Akzentfarbe der Seite. */
.finder__fortschritt {
    flex: 1 1 auto;
    width: 240px;
    height: 5px;
    border-radius: 3px;
    background: var(--color-border);
}

.finder__fortschritt-fuellung {
    position: relative;
    display: block;
    height: 100%;
    width: 0;
    border-radius: 3px;
    background: var(--color-gold);
    transition: width 320ms var(--finder-kurve);
}

/* Der Marker sitzt auf dem Ende der Fuellung und laeuft mit. Er nennt die
   Zahl, damit der Balken auch dann etwas sagt, wenn man ihn nur streift. */
.finder__fortschritt-marke {
    position: absolute;
    right: 0;
    top: 50%;
    transform: translate(50%, -50%);
    padding: 3px 9px;
    border-radius: 999px;
    background: var(--color-gold);
    color: var(--color-white);
    font-size: 15px;
    font-style: normal;
    line-height: 1.2;
    white-space: nowrap;
}

/* Das Kreuz: schwarz, ohne Rahmen und ohne Flaeche. */
.finder__zu {
    flex: 0 0 auto;
    width: 44px;
    height: 44px;
    border: 0;
    background: transparent;
    color: var(--color-heading);
    font-size: 30px;
    line-height: 1;
    cursor: pointer;
}

/* Die Mitte: Platz fuer die Animation. Hier steht nichts drin und nichts
   darauf — kein Hintergrund, keine Zahl. Sie nimmt den Raum, der zwischen
   Fortschritt und der Spalte unten uebrig bleibt. */
.finder__buehne {
    position: relative;
    overflow: hidden;
    flex: 1 1 auto;
    min-height: 170px;
    background: var(--finder-hintergrund, none) center / cover no-repeat,
                var(--color-bg-light);
}

/* Unten die schmale, mittige Spalte: Frage und Knoepfe, nicht in die Ecken
   gezogen. */
.finder__unten {
    flex: 0 0 auto;
    padding: 50px 50px 50px 50px;
}

.finder__spalte,
.finder__fuss {
    max-width: 520px;
    margin-left: auto;
    margin-right: auto;
}

/* Mittig, wie bei Sol — das traegt die schmale Spalte besser als Linksbuendig. */
.finder__unten { text-align: center; }

/* Was wir tun, als Liste ohne Aufzaehlungszeichen. */
.finder__leistungen {
    list-style: none;
    margin: 0 0 16px;
    padding: 0;
}

.finder__unten h2 { margin: 0 0 48px; }
.finder__unten h3 { margin: 0 0 48px; }
.finder__unten p  { margin: 0 0 16px; }

/* Die Antworten sind Standardknoepfe der Seite. Hier steht nur, wie sie
   liegen: nebeneinander, solange Platz ist, sonst untereinander. */
/*
 * Alle Antworten gleich hoch: grid-auto-rows macht jede Reihe gleich hoch,
 * und weil die Knoepfe selbst Flex-Kaesten sind, fuellen sie diese Hoehe aus
 * und tragen ihre Beschriftung mittig. Braucht eine Antwort zwei Zeilen,
 * wachsen alle mit — sonst steht die Reihe wie eine Treppe da.
 */
.finder__optionen {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
    grid-auto-rows: 1fr;
    gap: 14px;
}

/*
 * Zwei bewusste Abweichungen von den Knoepfen der Seite, auf Ansage: keine
 * Versalien und etwas mehr Strichstaerke. Antworten wie „Nach dem Verkauf
 * meiner jetzigen Immobilie" sind in Grossbuchstaben muehsam zu lesen, und
 * Schriftstaerke 400 traegt die laengeren Zeilen nicht.
 */
.finder__optionen .btn {
    text-transform: none;
    font-weight: 500;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Drei Felder: links der Zurueck-Weg, mittig der Weiter-Knopf, rechts ein
   leeres Feld derselben Breite — nur so bleibt die Mitte wirklich die Mitte. */
.finder__fuss {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 12px;
    margin-top: 18px;
}

/* Der Zurueck-Weg ist kein Knopf mit Flaeche: er soll den Weg nach vorn nicht
   ueberstrahlen. Pfeil und Wort stehen auf einer Zeile. */
.finder__zurueck {
    /* Feste Spalte, nicht der Reihe nach einsortiert: auf der ersten Folie
       steht der Zurueck-Weg auf display: none und faellt aus dem Raster — ohne
       feste Zuweisung ruecken dann alle auf und der Weiter-Knopf landet links
       statt in der Mitte. */
    grid-column: 1;
    justify-self: start;
    display: flex;
    align-items: center;
    gap: 6px;
    border: 0;
    background: transparent;
    color: var(--color-text-light);
    cursor: pointer;
    padding: 6px 2px;
}

.finder__zurueck svg {
    width: 20px;
    height: 20px;
    display: block;
}

.finder__zurueck:hover { color: var(--color-gold); }
.finder__zurueck[hidden] { display: none; }

/* .btn setzt display: inline-block und schlaegt damit hidden. */
.finder__fuss .btn { grid-column: 2; }
.finder__fuss .btn[hidden] { display: none; }

.finder__kacheln {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 10px;
    margin-bottom: 18px;
}

.finder__kachel { overflow: hidden; }

.finder__kachel img {
    display: block;
    width: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
}

.finder__kachel-text { padding: 8px 10px; margin: 0; }

/* Die hinteren Kacheln bleiben verschwommen. Das ist keine Zierde, sondern der
   Kern der Sache: sichtbar ist, dass es sie gibt — nicht, welche es sind. */
.finder__kachel--verdeckt img {
    filter: blur(9px);
    transform: scale(1.06);
}

/* Der WhatsApp-Knopf ueber die ganze Breite. */
.finder__cta { width: 100%; justify-content: center; }

/* --------------------------------------------------------------- Das Telefon

   Keine halbe Breite: die Gardine kommt von unten und nimmt fast die ganze
   Hoehe. Geschlossen bleibt ein flacher Streifen am unteren Rand stehen. */

@media (max-width: 860px) {
    .finder {
        inset: auto 0 0 0;
        width: 100%;
        max-width: none;
        min-width: 0;
        height: auto;
        transform: translateY(100%);
        transition: transform var(--finder-dauer) var(--finder-kurve),
                    height var(--finder-dauer) var(--finder-kurve);
    }

    .finder[data-sichtbar] { transform: translateY(0); }

    .finder[data-offen] {
        height: var(--finder-offen-mobil, 92dvh);
        width: 100%;
    }

    .finder__streifen {
        flex-direction: row;
        justify-content: space-between;
        gap: 14px;
        padding: 22px 24px 18px;
        text-align: left;
        box-shadow: inset 0 1px 0 rgba(32, 39, 50, .14),
                    inset 0 18px 24px -12px rgba(32, 39, 50, .26);
    }

    .finder__teaser {
        flex-direction: row;
        align-items: center;
        gap: 14px;
        flex-wrap: wrap;
        text-align: left;
    }

    .finder__buehne { min-height: 130px; }

    .finder__unten {
        padding: 28px 20px 32px;
        max-height: 62dvh;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }

    .finder__optionen { grid-template-columns: 1fr; }
    .finder__kacheln { grid-template-columns: repeat(auto-fill, minmax(118px, 1fr)); }
}

/* ------------------------------------------------------- Weniger Bewegung */

@media (prefers-reduced-motion: reduce) {
    body,
    .site-header,
    .brochure-link,
    .finder {
        transition-duration: 1ms;
    }
}


/* === components/info-text.css === */
/* Info Text (collapsible content in footer) */
.info-text__toggle {
    font-size: 12px;
    font-weight: 400;
    font-family: 'Roboto', sans-serif;
    color: var(--color-gold);
    cursor: pointer;
    padding: 0;
    border: none;
    background: none;
    text-align: left;
}
.info-text__toggle:hover {
    color: var(--color-gold);
}
.info-text__content {
    display: none;
    background: #fff;
}
.info-text__content.is-open {
    display: block;
}
.info-text__content-inner {
    max-width: 1200px;
    margin: 0 auto;
    padding: 40px var(--container-padding);
}
.info-text__content h1 {
    font-size: 28.8px;
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 0 0 12px;
    text-transform: uppercase;
}
.info-text__content h2 {
    font-size: 21.6px;
    font-weight: 400;
    font-family: var(--font-heading);
    color: #202732;
    margin: 24px 0 10px;
}
.info-text__content h3 {
    font-size: 19.8px;
    font-weight: 400;
    font-family: var(--font-heading);
    color: #202732;
    margin: 20px 0 8px;
}
.info-text__content p {
    font-size: 16.2px;
    font-weight: 300;
    line-height: 1.7;
    color: #333;
    margin: 0 0 14px;
}
.info-text__content a { color: var(--color-gold); }
.info-text__content a:hover { color: var(--color-gold-hover); }


/* === components/blog.css === */
/* Blog Index */
.blog-grid-section { max-width: 1200px; margin: 0 auto; padding: 100px var(--container-padding); }
.blog-grid {
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 30px;
}

/* Blog Card */
.blog-card {
    background: var(--color-white); overflow: hidden;
    box-shadow: 0 0 5px rgba(0,0,0,0.25);
    transition: box-shadow 0.3s, transform 0.3s;
}
.blog-card:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.15); transform: translateY(-3px); }
.blog-card a { text-decoration: none; color: inherit; display: block; }

.blog-card__image { width: 100%; height: 220px; overflow: hidden; background: #e8e8e8; }
.blog-card__image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s; }
.blog-card:hover .blog-card__image img { transform: scale(1.05); }
.blog-card__image--placeholder { background: linear-gradient(135deg, #202732 0%, #3a4555 100%); }

.blog-card__body { padding: 30px; }
.blog-card__title {
    font-family: var(--font-heading); font-size: 21.6px; font-weight: 400;
    color: #202732; margin: 0 0 12px; line-height: 1.25;
}
.blog-card__excerpt {
    font-family: var(--font-body); font-size: 16px; font-weight: 300;
    line-height: 1.6; color: #333; margin: 0 0 12px;
    display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.blog-card__more {
    display: block; font-family: var(--font-body); font-size: 16px;
    font-weight: 300; color: var(--color-gold); margin-bottom: 14px;
}
.blog-card:hover .blog-card__more { color: var(--color-gold-hover); }
.blog-card__date {
    display: block; font-family: var(--font-body); font-size: 14px;
    font-weight: 300; color: var(--color-text-light);
}

/* Blog Post */
.blog-post-page { margin: 0 auto; }

/* Volle Breite wie im Original, Text in einer 1265px-Spalte */
.blog-post__hero {
    width: 100%; aspect-ratio: 1425 / 579;
    position: relative; overflow: hidden;
}
.blog-post__hero img {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover; object-position: 50% 50%;
}
/* Satzspiegel wie im Original: 900px. Begrenzt werden die Textbloecke,
   nicht der Artikel — so kann die Galerie voll ausbrechen. */
.blog-post { margin: 0 auto; }
.blog-post__header,
.blog-post__block { max-width: 940px; margin: 0 auto; padding: 0 20px; }

.blog-post__header { padding: 50px 0 20px; }
.blog-post__meta {
    display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 16px; font-size: 14px; color: var(--color-text-muted);
    font-family: 'Roboto', sans-serif;
}
/*
 * Verfasser und Datum stehen rechts in der Kopfzeile, durch einen Punkt
 * getrennt. Zusammen in einem Element, weil sie dieselbe Frage beantworten:
 * von wem und von wann ist der Text.
 */
.blog-post__autor {
    margin: 0;
    display: flex;
    align-items: center;
    gap: 10px;
}
.blog-post__autor-name { color: var(--color-text-light); }
.blog-post__autor-name::after {
    content: '·';
    margin-left: 10px;
    color: var(--color-text-muted);
}

@media (max-width: 600px) {
    /* Auf dem Telefon reicht die Breite nicht fuer Zurueck-Verweis, Name und
       Datum in einer Zeile — dann untereinander, links ausgerichtet. */
    .blog-post__meta {
        flex-direction: column;
        align-items: flex-start;
        gap: 8px;
    }
}

.blog-post__back {
    color: var(--color-gold); text-decoration: none; font-weight: 400;
    transition: color 0.2s;
}
.blog-post__back:hover { color: #8a7058; }
.blog-post__header h1 {
    font-family: var(--font-heading); font-size: 48px; font-weight: 300;
    text-transform: none;
    color: #202732; margin: 0 0 20px; line-height: 1.2;
}

.blog-post__note {
    background: #f7f3ee; border-left: 4px solid var(--color-gold);
    padding: 16px 20px; margin-bottom: 30px; border-radius: 0 4px 4px 0;
}
.blog-post__note p {
    margin: 0; font-size: 15px; font-style: italic; color: #555;
    font-family: 'Roboto', sans-serif; line-height: 1.5;
}

.blog-post__content {
    font-family: var(--font-body); font-size: 18px;
    line-height: 1.6; color: #000; font-weight: 300;
}
.blog-post__content h2 {
    font-family: var(--font-heading); font-size: var(--schrift-untertitel); font-weight: 300;
    color: var(--color-gold); margin: 30px 0 18px; line-height: 1.2;
}
.blog-post__content h3 {
    font-family: var(--font-heading); font-size: 22px; font-weight: 400;
    color: #202732; margin: 20px 0 11px; line-height: 1.2;
}
.blog-post__content p { margin: 0 0 18px; }
.blog-post__content a:not(.sell-btn) { color: var(--color-gold); text-decoration: none; }
.blog-post__content a:not(.sell-btn):hover { color: #8a7058; }
.blog-post__content ul, .blog-post__content ol { margin: 0 0 16px; padding-left: 24px; }
.blog-post__content li { margin-bottom: 6px; }
.blog-post__content img { max-width: 100%; height: auto; margin: 20px 0; }
.blog-post__content blockquote {
    border-left: 3px solid var(--color-gold); margin: 20px 0;
    padding: 10px 20px; font-style: italic; color: #555;
}

/* Exposé-Schaltflaeche nach jedem Textblock — nutzt den dunklen Button
   der Verkaufsseite (.sell-btn) */
.blog-post__expose { padding: 12px 0 40px; }

.blog-post__gallery { margin: 10px 0 50px; }

/* Responsive */
@media (max-width: 900px) {
    .blog-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
    .blog-grid { grid-template-columns: 1fr; gap: 20px; }
    .blog-hero { padding: 60px 20px 40px; }
    .blog-hero h1 { font-size: 28px; }
    .blog-post__header h1 { font-size: 30px; }
    .blog-post__content { font-size: 16px; }
    .blog-post__content h2 { font-size: 26px; }
    .blog-post__hero { height: 240px; }
}

/* Verwandte Beitraege am Fuss des Artikels */
.blog-related { border-top: 1px solid var(--color-border); margin-top: 20px; }
.blog-related__inner {
    /* volle Bildschirmbreite, nicht auf den Satzspiegel begrenzt */
    max-width: none; margin: 0; padding: 100px var(--container-padding);
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px;
}
.blog-related__item { text-decoration: none; display: block; }
.blog-related__image { width: 100%; aspect-ratio: 16 / 9; overflow: hidden; margin-bottom: 18px; }
.blog-related__image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s; }
.blog-related__item:hover .blog-related__image img { transform: scale(1.05); }
.blog-related__title {
    font-family: var(--font-heading); font-size: 27px; font-weight: 300;
    color: var(--color-gold); margin: 0 0 8px; line-height: 1.2;
}
.blog-related__item:hover .blog-related__title { color: var(--color-gold-hover); }
.blog-related__date {
    font-family: var(--font-body); font-size: 14px; font-weight: 300;
    color: var(--color-text-light); margin: 0 0 10px;
}
.blog-related__excerpt {
    font-family: var(--font-body); font-size: 16px; font-weight: 300;
    line-height: 1.6; color: #000; margin: 0;
    display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden;
}
@media (max-width: 900px) { .blog-related__inner { grid-template-columns: 1fr; gap: 30px; } }

/* Standortbild des Projekts als Trenner zwischen den letzten beiden Bloecken.
   Linksbuendig auf der Textkante, wie im Original. */
.blog-post__divider {
    max-width: 940px; margin: 0 auto 50px; padding: 0 20px;
    text-align: left;
}
.blog-post__divider img { max-width: 100%; height: auto; display: inline-block; }


/* === components/blog-artikel.css === */
/* ============================================================
   Blog-Artikel — Struktur aus dem aiadmin-Template, Stile/Palette
   von newEstepona. Layout: Artikel links / Sidebar 350px rechts.
   Keine erfundenen Kaesten, Mini-Headlines oder runden Bilder.
   Projekt-Kacheln = unsere Standard-Kacheln (Slides im Text,
   gestapelt in der Sidebar). Filter in der Sidebar = Mobil-Logik
   (Suchfeld + Knopf -> Vollflaeche).
   ============================================================ */

/* Fixe Navi (100px) freihalten + 60px Luft nach oben */
.blog-artikel-page { padding-top: calc(var(--header-height) + 60px); }

/* ---- Breadcrumbs (volle 1200px, kein Seitenpadding) ---- */
.ne-breadcrumbs { border-bottom: 1px solid var(--color-border); }
.ne-breadcrumbs__inner { max-width: var(--container-width); margin: 0 auto; padding: 12px 0; font-size: 0.85rem; color: #6b7280; }
.ne-breadcrumbs a { color: #6b7280; }
.ne-breadcrumbs a:hover { color: var(--color-gold); }
.ne-breadcrumbs__sep { margin: 0 0.4rem; color: #d1d5db; }

/* ---- Grundraster: volle 1200px, kein Seitenpadding ---- */
.article-layout {
    max-width: var(--container-width); margin: 0 auto;
    padding: 60px 0 80px;
    display: grid; grid-template-columns: minmax(0, 1fr) 350px;
    gap: 92px; align-items: start;
}
.article-content { min-width: 0; }

/* ---- Artikelkopf ---- */
.article-header-top { margin-bottom: 1.5rem; }
.article-cat-link { display: inline-block; font-family: var(--font-heading); font-size: 18px; font-weight: 400; color: var(--color-gold); margin-bottom: 0.5rem; }
.article-cat-link:hover { color: var(--color-gold-hover); }
.article-title { font-family: var(--font-heading); font-size: clamp(2rem, 3.4vw, 40px); font-weight: 300; line-height: 1.2; color: var(--color-heading); margin: 0 0 20px; }
.article-meta { display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; font-size: 0.85rem; color: #9ca3af; margin: 0; }
.article-meta__sep { color: #d1d5db; }
.blog-artikel__updated { color: #9ca3af; }

/* ---- Hero-Bild im grauen Band (kein Radius/Schatten/Versatz) ---- */
/* Grauer Band voll breit; Bild laeuft 40px nach LINKS aus dem Satzspiegel
   raus, rechts bleiben 40px Grau stehen (gleiche Breite). */
.article-hero-img { margin: 2rem 0 3rem; padding: 40px 0; background: var(--color-bg-light); overflow: visible; }
.article-hero-img img { width: 100%; margin-left: -40px; aspect-ratio: 16 / 9; object-fit: cover; object-position: var(--hero-bildlage, center); display: block; }

/* ---- Fliesstext ---- */
/* WICHTIG: nur direkte Prosa-Kinder ansprechen — niemals verschachtelte
   Komponenten wie unsere Projekt-Kacheln (die im Text als Karussell stehen).
   Sonst ueberschreibt .article-body h3/img/a die Kachel und reisst sie auf. */
.article-body { font-family: var(--font-body); font-size: 18px; line-height: 1.75; color: #666; }
.article-body > p { margin: 0 0 1.5rem; }
.article-body > p a, .article-body > ul a, .article-body > ol a, .article-body > blockquote a, .article-body > .blog-box a { color: var(--color-gold); text-decoration: underline; text-underline-offset: 2px; }
.article-body > p a:hover, .article-body > ul a:hover, .article-body > ol a:hover, .article-body > blockquote a:hover, .article-body > .blog-box a:hover { color: var(--color-gold-hover); }
.article-body > p strong, .article-body > ul strong, .article-body > ol strong, .article-body li strong { color: var(--color-heading); font-weight: 600; }
.article-body > h2 { font-family: var(--font-heading); font-weight: 300; font-size: 30px; line-height: 1.25; color: var(--color-heading); margin: 53px 0 23px; scroll-margin-top: 120px; }
.article-body > h3 { font-family: var(--font-heading); font-weight: 400; font-size: 23px; color: var(--color-heading); margin: 31px 0 16px; }
.article-body > figure img { max-width: 100%; height: auto; }

/* Jedes Modul steht autark: 40px Luft oben+unten. Steht davor/danach eine
   Ueberschrift mit eigener Marge, bleibt es durch margin-collapse bei 40px.
   Nur Top-Level-Module (direkte Kinder), damit z. B. eine Liste IN einer Box
   ihre normale Marge behaelt. */
.article-body > .blog-liste,
.article-body > .blog-check,
.article-body > .blog-schritte,
.article-body > .blog-timeline,
.article-body > .blog-box,
.article-body > .blog-tabelle,
.article-body > .blog-bild,
.article-body > .blog-zitat,
.article-body > .blog-marktkasten,
.article-body > .blog-cta,
.article-body > .blog-projekte,
.article-body > .blog-golf,
.article-body > .blog-hinweis {
    margin-top: 60px;
    margin-bottom: 60px;
}
/* Steht eine Ueberschrift DIREKT vor einem Modul, gehoert sie zum Modul:
   sie ruecken eng zusammen, die 60px liegen dann VOR der Ueberschrift. */
.article-body > :is(h2, h3) + :is(.blog-liste, .blog-check, .blog-schritte, .blog-timeline, .blog-box, .blog-tabelle, .blog-bild, .blog-zitat, .blog-marktkasten, .blog-cta, .blog-projekte, .blog-golf, .blog-hinweis) {
    margin-top: 0;
}
.article-body > :is(h2, h3):has(+ :is(.blog-liste, .blog-check, .blog-schritte, .blog-timeline, .blog-box, .blog-tabelle, .blog-bild, .blog-zitat, .blog-marktkasten, .blog-cta, .blog-projekte, .blog-golf, .blog-hinweis)) {
    margin-top: 60px;
}

/* Aufzaehlung (Modul .blog-liste), Fallback fuer klassenlose Listen im Text.
   Schlicht, dezenter Gold-Punkt, KEIN linker Rahmen. */
.blog-liste, .article-body ul:not([class]) { list-style: none; margin: 0 0 1.5rem; padding: 0; }
.blog-liste > li, .article-body ul:not([class]) > li { position: relative; padding-left: 26px; margin-bottom: 0.5rem; }
.blog-liste > li::before, .article-body ul:not([class]) > li::before { content: ""; position: absolute; left: 4px; top: 0.62em; width: 7px; height: 7px; background: var(--color-gold); border-radius: 50%; }
.article-body ol:not([class]) { margin: 0 0 1.5rem 1.4em; padding: 0; }
.article-body ol:not([class]) > li { margin-bottom: 0.5rem; padding-left: 0.3em; }
.article-body ol:not([class]) > li::marker { color: var(--color-gold); font-family: var(--font-heading); }

/* Checkliste: hellgrauer Kreis mit beigem Haken */
.blog-check { list-style: none; margin: 0 0 1.5rem; padding: 0; }
.blog-check > li { position: relative; padding-left: 34px; margin-bottom: 0.7rem; }
.blog-check > li::before { content: "\2713"; position: absolute; left: 0; top: 0.1em; width: 22px; height: 22px; line-height: 22px; text-align: center; font-size: 13px; color: var(--color-gold); background: #ededed; border-radius: 50%; }

/* Nummerierte Schritte: Zahl oberkantenbuendig, Headline ueber Fliesstext */
.blog-schritte { list-style: none; counter-reset: schritt; margin: 0 0 1.6rem; padding: 0; }
.blog-schritte > li { position: relative; padding: 0 0 0 56px; margin-bottom: 1.5rem; min-height: 40px; }
.blog-schritte > li::before {
    counter-increment: schritt; content: counter(schritt);
    position: absolute; left: 0; top: 0; width: 40px; height: 40px; line-height: 38px; text-align: center;
    background: #fff; border: 1px solid var(--color-gold-light); color: var(--color-heading);
    border-radius: 50%; font-family: var(--font-heading); font-weight: 400; font-size: 17px;
}
/* Nur die Headline (erstes strong) wird Block; Betonungen im Fliesstext bleiben inline.
   line-height 40px = Kreishoehe -> Headline vertikal mittig zum Zahlenkreis. */
.blog-schritte > li > strong:first-child { display: block; line-height: 40px; font-family: var(--font-body); font-weight: 700; font-size: 18px; color: var(--color-heading); margin-bottom: 4px; }

/* Timeline (Zeitpunkte) — vertikale Linie, Punkt je Eintrag, Zeit fett darueber */
.blog-timeline { list-style: none; margin: 0 0 1.6rem; padding: 0; border-left: 2px solid #ccc; }
.blog-timeline > li { position: relative; margin: 0 0 1.1rem; padding: 0 0 0 26px; }
.blog-timeline > li:last-child { margin-bottom: 0; }
/* 14px-Punkt, mittig auf der 2px-Linie: left = -1px(Linienmitte) - 7px(Radius) */
.blog-timeline > li::before { content: ""; position: absolute; left: -8px; top: 0.32em; width: 14px; height: 14px; border-radius: 50%; background: #fff; border: 2px solid var(--color-gold); }
.blog-timeline__zeit { display: block; font-family: var(--font-heading); font-weight: 400; color: var(--color-heading); margin-bottom: 2px; }

/* Zitat / Pull-Quote */
.blog-zitat { position: relative; font-family: var(--font-heading); font-style: italic; font-weight: 300; font-size: 1.55rem; line-height: 1.4; color: var(--color-heading); margin: 2rem 0; padding-left: 40px; }
.blog-zitat::before { content: "\201C"; position: absolute; left: 0; top: 0.12em; font-family: var(--font-heading); font-size: 4.2rem; line-height: 0.9; color: var(--color-gold-light); }

/* Tabellen: Modul ist ein <figure class="blog-tabelle"> mit <table> + optionaler figcaption */
.blog-tabelle { margin: 1.7rem 0; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.blog-tabelle table { width: 100%; border-collapse: collapse; background: #fff; font-size: 16px; }
.blog-tabelle thead th { background: #f4efe5; color: var(--color-heading); font-family: var(--font-body); font-weight: 700; font-size: 16px; text-align: left; padding: 14px 20px; border-bottom: 1px solid var(--color-gold-light); }
.blog-tabelle th, .blog-tabelle td { vertical-align: top; }
.blog-tabelle td { padding: 13px 20px; color: #444; }
.blog-tabelle tbody tr:nth-child(even) { background: #f2f2f2; }
.blog-tabelle td:first-child { font-weight: 700; color: var(--color-heading); }
.blog-tabelle figcaption { margin-top: 8px; font-size: 13px; color: #9a9a9a; }

/* Hinweisbox im Text: schlicht, kein linker Rahmen, keine Mini-Headline */
.blog-box { background: #f7f7f7; padding: 40px; border-left: 3px solid var(--color-gold-light); margin: 1.8rem 0; }
.blog-box__titel { font-family: var(--font-heading); font-weight: 400; font-size: 1.15rem; color: var(--color-heading); margin: 0 0 6px; }
.blog-box p { margin: 0; }
.blog-box--achtung .blog-box__titel { color: var(--color-red); }

/* Faktenbox: Titel als H3, 4 Fakten als 2x2-Karten (weiss, beige Kontur, 40px, gleiche Hoehe) */
.blog-box--fakten { background: none; padding: 0; border-left: none; }
.blog-fakten__titel { font-family: var(--font-heading); font-weight: 400; font-size: 23px; line-height: 1.3; color: var(--color-heading); margin: 0 0 16px; }
.blog-fakten__raster { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; grid-auto-rows: 1fr; }
.blog-fakten__box { background: #f2f2f2; border: 1px solid var(--color-gold-light); padding: 40px; text-align: center; display: flex; flex-direction: column; justify-content: center; }
.blog-fakten__box strong { display: block; font-family: var(--font-body); font-weight: 700; font-size: 22px; color: var(--color-gold); margin-bottom: 8px; }
@media (max-width: 768px) { .blog-fakten__raster { grid-template-columns: 1fr; } }

/* Bild mit Bildunterschrift */
.blog-bild { margin: 1.8rem 0; }
.blog-bild img { width: 100%; display: block; border: 1px solid #ccc; }
.blog-bild figcaption { margin-top: 0.5rem; font-size: 14px; color: var(--color-text-light); text-align: center; }
/* Hochformat 4:5, das auf dem Desktop neben dem Text stehen darf */
.blog-bild--hoch { float: right; width: 320px; max-width: 45%; margin: 0.3rem 0 1rem 1.6rem; }
.blog-bild--hoch figcaption { text-align: left; }

/* Rechtshinweis: dezent, kleine Schrift, Rahmen */
.blog-hinweis { margin: 40px 0 0; padding: 16px 20px; border: 1px solid var(--color-border); background: #fafafa; font-size: 13px; line-height: 1.6; color: #777; }
.blog-hinweis p { margin: 0; }
.blog-hinweis strong { color: #555; }

/* Inhaltsverzeichnis: kein HG-Kasten, oben+unten 1px #ccc zum Abtrennen */
.blog-toc { margin: 2rem 0; padding: 24px 0; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; }
.blog-toc__titel { font-family: var(--font-heading); font-weight: 400; font-size: 23px; line-height: 1.3; color: var(--color-heading); margin: 0 0 12px; }
.blog-toc ol { margin: 0; padding-left: 1.2em; }
.blog-toc li { margin-bottom: 6px; }
.blog-toc a { color: var(--color-gold); }
.blog-toc a:hover { color: var(--color-gold-hover); }

/* Marktzahl (inline) + Marktkasten */
.blog-marktzahl__wert { font-family: var(--font-heading); font-weight: 400; color: var(--color-gold); }
.blog-marktzahl__label { font-size: 0.85em; color: #8a8a8a; }
.blog-marktkasten { background: #f7f7f7; padding: 22px 26px; margin: 1.8rem 0; }
.blog-marktkasten__ort { font-family: var(--font-heading); font-weight: 400; font-size: 1.15rem; color: var(--color-heading); margin: 0 0 14px; }
.blog-marktkasten__zeile { display: flex; justify-content: space-between; align-items: baseline; padding: 11px 0; border-bottom: 1px solid var(--color-border); }
.blog-marktkasten__zeile:last-of-type { border-bottom: none; }
.blog-marktkasten__wert { font-family: var(--font-heading); font-weight: 400; font-size: 1.5rem; color: var(--color-heading); }
.blog-marktkasten__label { color: #666; font-size: 15px; }
.blog-marktkasten__quelle { margin: 12px 0 0; font-size: 12px; color: #9a9a9a; }

/* CTA: hellbeige Karte, beige Kontur, Text links, Foto (freigestellt) unten rechts auf der Border */
.blog-cta { position: relative; min-height: 250px; background: #f6f1e8; border: 1px solid var(--color-gold-light); padding: 40px 240px 40px 40px; margin: 2.2rem 0; background-image: url('../images/Christiane-freigestellt-bust.webp'); background-repeat: no-repeat; background-position: right bottom; background-size: 210px auto; }
.blog-cta__titel { font-family: var(--font-heading); font-weight: 400; font-size: 1.3rem; color: var(--color-heading); margin: 0 0 6px; }
.blog-cta__satz { margin: 0 0 12px; color: #555; font-size: 16px; }
.blog-cta__person { margin: 0 0 16px; font-size: 15px; color: var(--color-heading); }
.blog-cta__person a { color: var(--color-gold); text-decoration: none; }
.blog-cta__person a:hover { color: var(--color-gold-hover); }
.blog-cta__sep { margin: 0 12px; color: #bbb; }
.blog-cta__aktion { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; margin: 0; }
.blog-cta__wa { display: inline-block; background: var(--color-whatsapp); color: #fff; font-weight: 500; padding: 11px 24px; border-radius: 5px; font-size: 15px; }
.blog-cta__wa:hover { filter: brightness(0.94); color: #fff; }
.blog-cta__schreiben { display: inline-block; background: var(--color-gold); color: #fff; font-weight: 500; padding: 11px 24px; border-radius: 5px; font-size: 15px; text-decoration: none; }
.blog-cta__schreiben:hover { background: var(--color-gold-hover); color: #fff; }

/* Projekt-Slider im Text: unsere Standard-Kacheln, 2 je Ansicht, Pfeile blaettern */
.blog-projekte { margin: 2.2rem 0; }
.blog-projekte__kopf { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; margin-bottom: 1rem; }
.blog-projekte__titel { font-family: var(--font-heading); font-weight: 300; font-size: 1.9rem; color: var(--color-heading); margin: 0; }
.blog-projekte__nav { display: flex; gap: 8px; flex-shrink: 0; }
.blog-projekte__pfeil { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border: 1px solid var(--color-border); background: #fff; color: var(--color-heading); font-size: 22px; line-height: 1; cursor: pointer; transition: border-color 0.2s, color 0.2s; }
.blog-projekte__pfeil:hover { border-color: var(--color-gold); color: var(--color-gold); }
.blog-projekte__pfeil:disabled { opacity: 0.35; cursor: default; border-color: var(--color-border); color: var(--color-heading); }
.blog-projekte__spur { display: grid; grid-auto-flow: column; grid-auto-columns: calc(50% - 8px); gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; padding-bottom: 4px; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.blog-projekte__spur::-webkit-scrollbar { display: none; }
.blog-projekte__spur .project-grid-card { width: auto; scroll-snap-align: start; }
.blog-projekte__mehr { display: inline-block; margin-top: 0.8rem; color: var(--color-gold); font-weight: 500; }
@media (max-width: 768px) {
    .blog-projekte__spur { grid-auto-columns: 100%; }
}

/* Projekt-Steckbriefe am Golfplatz (Baustein golfprojekte): Foto links,
   Entfernung zum Platz als erste Zeile, Link auf die Projektseite. */
.blog-golf { margin: 2.2rem 0; display: grid; gap: 18px; }
.blog-golf__titel { font-family: var(--font-heading); font-weight: 300; font-size: 1.9rem; color: var(--color-heading); margin: 0; }
.blog-golf__projekt { display: grid; grid-template-columns: 240px 1fr; gap: 20px; align-items: start; padding-bottom: 18px; border-bottom: 1px solid var(--color-border); }
.blog-golf__projekt:last-child { border-bottom: none; padding-bottom: 0; }
.blog-golf__bild { display: block; overflow: hidden; }
.blog-golf__bild img { display: block; width: 100%; height: 160px; object-fit: cover; transition: transform 0.4s; }
.blog-golf__bild:hover img { transform: scale(1.04); }
.blog-golf__text > * { margin: 0 0 6px; }
.blog-golf__weg { font-size: 15px; color: var(--color-gold); letter-spacing: 0.02em; }
.blog-golf__name { font-family: var(--font-heading); font-size: 24px; font-weight: 400; line-height: 1.25; margin-bottom: 8px; }
.blog-golf__name a { color: var(--color-heading); text-decoration: none; }
.blog-golf__name a:hover { color: var(--color-gold); }
.blog-golf__fakten, .blog-golf__preis { font-size: 18px; color: var(--color-text); }
.blog-golf__preis { font-weight: 600; }
.blog-golf__mehr a { font-size: 16px; font-weight: 500; color: var(--color-gold); }
@media (max-width: 768px) {
    .blog-golf__projekt { grid-template-columns: 1fr; gap: 12px; }
    .blog-golf__bild img { height: 200px; }
}

/* FAQ im Artikel */
.article-content .blog-artikel__faqs { padding: 36px 0 0; max-width: none; margin: 44px 0 0; border-top: 1px solid var(--color-border); }
.article-content .blog-artikel__faqs h2 { text-align: left; font-size: 30px; font-weight: 300; margin: 0 0 20px; }

/* Quellen */
.blog-quellen { margin: 40px 0 0; padding: 0; border-top: none; }
.blog-quellen summary { font-family: var(--font-body); font-weight: 600; font-size: 16px; color: var(--color-heading); margin: 0; cursor: pointer; list-style: none; display: flex; justify-content: space-between; align-items: center; }
.blog-quellen summary::-webkit-details-marker { display: none; }
.blog-quellen summary::after { content: "+"; font-size: 20px; font-weight: 300; color: var(--color-gold); margin-left: 20px; line-height: 1; }
.blog-quellen[open] summary::after { content: "\2212"; }
.blog-quellen ul { list-style: none; margin: 16px 0 0; padding: 0; }
.blog-quellen li { margin-bottom: 8px; font-size: 15px; }
.blog-quellen a { color: var(--color-gold); }
.blog-quellen__datum { color: #9a9a9a; font-size: 13px; }

/* ============================================================
   SIDEBAR — flach (keine Kaesten)
   ============================================================ */
.sidebar { min-width: 0; }
.sidebar-widget { background: transparent; border: none; padding: 0; box-shadow: none; }
/* NUR die eigene Widget-Ueberschrift (direktes Kind), niemals den verschachtelten
   Kachel-Titel .project-grid-card__title (sonst 24px/Margin -> Kachel kaputt). */
.sidebar-widget > h3 { font-family: var(--font-heading); font-size: 24px; font-weight: 400; color: var(--color-heading); margin: 0 0 12px; }
.sidebar-widget + .sidebar-widget { margin-top: 76px; }

/* Autor = Kontaktframe 1:1 (Groessen/Abstaende), Foto als Hintergrund unten rechts */
/* Foto ~90% der Originalgroesse (256px -> 230px) und nach rechts rausgeschoben
   (rechter Teil wird an der Box-Kante beschnitten). */
.blog-kontakt { position: relative; padding-bottom: 96px; border-bottom: 1px solid #ccc; background-image: url('../images/Christiane-freigestellt-bust.webp'); background-repeat: no-repeat; background-position: calc(100% + 40px) bottom; background-size: 230px auto; }
.blog-kontakt h3 { font-family: var(--font-heading); font-size: 24px; font-weight: 400; color: var(--color-heading); margin: 0 0 10.8px; }
.blog-kontakt__sub { font-family: var(--font-body); font-size: 16.2px; font-weight: 300; line-height: 1.6; color: #000; margin: 0 0 16.2px; }
.blog-kontakt__person { font-family: var(--font-body); font-size: 16.2px; font-weight: 300; line-height: 25.92px; color: #000; margin: 0 0 16.2px; }
.blog-kontakt__person strong { font-weight: 700; }
.blog-kontakt__person a { color: #000; text-decoration: none; }
.blog-kontakt__person a:hover { color: var(--color-gold); }

/* Kategorien untereinander */
.blog-kat { list-style: none; margin: 0; padding: 0; }
.blog-kat li { border-bottom: 1px solid var(--color-border); }
.blog-kat li:last-child { border-bottom: none; }
.blog-kat__link { display: block; padding: 9px 0; color: var(--color-heading); font-size: 16px; transition: color 0.2s, padding-left 0.2s; }
.blog-kat__link:hover { color: var(--color-gold); padding-left: 5px; }
.blog-kat__link.is-aktiv { color: var(--color-gold); font-weight: 600; }

/* Immobilien: unsere Standard-Kacheln gestapelt (grid-1col) */
.sidebar-immobilien__grid { margin-top: 16px; }

/* Kompaktansicht: quadratisches Thumb links, Ort/Titel/Preis in 3 Zeilen rechts */
.project-grid.grid-1col.project-grid--kompakt { gap: 0; }
.project-grid--kompakt .project-grid-card--kompakt { display: flex; gap: 14px; align-items: center; width: 100%; padding: 12px 0; border-bottom: 1px solid var(--color-border); background: #fff; }
.project-grid--kompakt .project-grid-card--kompakt:last-child { border-bottom: none; }
.project-grid-card--kompakt .pk-thumb { flex: 0 0 auto; width: 92px; height: 92px; overflow: hidden; }
.project-grid-card--kompakt .pk-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.project-grid-card--kompakt .pk-info { flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: center; gap: 2px; }
.project-grid-card--kompakt .pk-ort { font-size: 12px; text-transform: uppercase; letter-spacing: 0.4px; color: #8a8a8a; }
.project-grid-card--kompakt .pk-titel { font-family: var(--font-body); font-weight: 700; font-size: 15px; line-height: 1.12; color: var(--color-heading); text-transform: none; }
.project-grid-card--kompakt .pk-preis { font-size: 13px; color: #666; font-weight: 600; }

/* ---- Filter in der Sidebar: Mobil-Mechanik erzwingen (Suchfeld + Knopf,
        Felder als Vollflaeche). Nur hier gescopt, andere Seiten unberuehrt. ---- */
/* 21px (kollabiert mit der 12px-Marge der h3) = gleicher Abstand wie
   "Categories" zum ersten Punkt. */
.blog-filter { position: relative; margin: 21px 0 24px; }
.blog-filter .filter-bar { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: stretch; padding: 0; margin: 0; }
.blog-filter .filter-suche { width: auto; flex: 1 1 auto; min-width: 0; height: 46px; padding: 0 14px 0 42px; border: 1px solid var(--color-heading); border-radius: 0; background-color: #fff; background-position: left 15px center; }
.blog-filter .filter-knopf { display: inline-flex; align-items: center; gap: 8px; flex: 0 0 auto; height: 46px; padding: 0 20px; border: none; background: var(--color-heading); color: #fff; font-family: var(--font-heading); font-size: 16px; font-weight: 400; text-transform: uppercase; cursor: pointer; }
.blog-filter .filter-knopf__zahl { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 5px; border-radius: 10px; background: var(--color-gold); color: #fff; font-family: var(--font-body); font-size: 12px; }
.blog-filter .filter-knopf__zahl[hidden] { display: none; }
/* Desktop: eleganter Popover unter dem Filter (kein Vollbild-Abdecker) */
.blog-filter .filter-bar__felder { display: none; position: absolute; top: calc(100% + 8px); right: 0; z-index: 200; width: 320px; max-width: calc(100vw - 40px); background: #fff; color: var(--color-text); border: 1px solid var(--color-border); box-shadow: 0 12px 40px rgba(0,0,0,0.16); padding: 16px 18px; max-height: 70vh; overflow-y: auto; }
.blog-filter .filter-bar__felder.ist-offen { display: block; }
.blog-filter .filter-flaeche__kopf { display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--color-border); padding-bottom: 12px; margin-bottom: 14px; }
.blog-filter .filter-flaeche__titel { font-family: var(--font-heading); font-size: 18px; font-weight: 400; text-transform: uppercase; letter-spacing: 0.05em; color: var(--color-heading); }
.blog-filter .filter-flaeche__zu { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; background: none; border: none; color: #9a9a9a; font-size: 26px; line-height: 1; cursor: pointer; }
.blog-filter .filter-flaeche__zu:hover { color: var(--color-gold); }
.blog-filter .filter-bar__filters, .blog-filter .filter-bar__sort { display: block; }
.blog-filter .filter-bar__felder select { width: 100%; height: 44px; margin-bottom: 10px; font-size: 15px; color: var(--color-text); background-color: #fff; border: 1px solid var(--color-border); padding: 0 14px; appearance: none; -webkit-appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6' fill='%23202732'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; }
.blog-filter .filter-bar__felder select:focus { border-color: var(--color-gold); outline: none; }
.blog-filter .filter-flaeche__fuss { display: flex; gap: 10px; align-items: stretch; margin-top: 14px; }
.blog-filter .filter-flaeche__leeren { flex: 0 0 auto; padding: 0 16px; height: 44px; background: none; border: 1px solid var(--color-border); color: var(--color-text); font-family: var(--font-body); font-size: 14px; cursor: pointer; }
.blog-filter .filter-flaeche__leeren:hover { border-color: var(--color-gold); color: var(--color-gold); }
.blog-filter .filter-flaeche__zeigen { flex: 1 1 auto; height: 44px; background: var(--color-gold); border: none; color: #fff; font-family: var(--font-heading); font-size: 15px; font-weight: 400; text-transform: uppercase; cursor: pointer; }
.blog-filter .filter-flaeche__zeigen:hover { background: var(--color-gold-hover); }

/* Mobil: echter Vollbild-Abdecker (dunkel) */
@media (max-width: 768px) {
    .blog-filter .filter-bar__felder { position: fixed; inset: 0; width: auto; max-width: none; z-index: 1000; background: rgba(0,0,0,0.97); color: #fff; border: none; box-shadow: none; padding: 0 20px 20px; max-height: none; }
    .blog-filter .filter-flaeche__kopf { min-height: var(--header-height); border-bottom-color: rgba(255,255,255,0.15); padding-bottom: 0; margin-bottom: 24px; }
    .blog-filter .filter-flaeche__titel { font-size: 24px; letter-spacing: 0.06em; color: var(--color-gold); }
    .blog-filter .filter-flaeche__zu { width: 44px; height: 44px; color: #fff; font-size: 34px; }
    .blog-filter .filter-bar__felder select { height: 52px; margin-bottom: 14px; font-size: 16px; color: #fff; background-color: transparent; border-color: rgba(255,255,255,0.35); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6' fill='%23fff'/%3E%3C/svg%3E"); }
    .blog-filter .filter-bar__felder select option { color: #fff; background: #111; }
    .blog-filter .filter-flaeche__fuss { margin-top: 26px; gap: 12px; }
    .blog-filter .filter-flaeche__leeren { height: 52px; font-size: 16px; color: #fff; border-color: rgba(255,255,255,0.35); }
    .blog-filter .filter-flaeche__leeren:hover { color: var(--color-gold-light); }
    .blog-filter .filter-flaeche__zeigen { height: 52px; font-size: 17px; }
}

/* ============================================================
   VERWANDTE ARTIKEL (volle 1200px)
   ============================================================ */
.blog-related { max-width: var(--container-width); margin: 0 auto; padding: 100px 0; border-top: none; }
.blog-related__titel { font-family: var(--font-heading); font-weight: 300; font-size: 30px; line-height: 1.2; color: var(--color-heading); margin: 0 0 24px; }
/* Vertikal Luft ja, seitlich NICHT (ueberschreibt die alte blog.css-Regel mit var(--container-padding)) */
.blog-related__inner { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; padding: 0; max-width: none; margin: 0; }
/* Overlay-Kachel wie im Magazin: BG-Bild, weisser Titel unten mit Dunkelverlauf */
.blog-related__item { position: relative; display: block; overflow: hidden; color: #fff; aspect-ratio: 4 / 3; }
.blog-related__item img, .blog-related__platzhalter { width: 100%; height: 100%; object-fit: cover; display: block; }
.blog-related__platzhalter { background: linear-gradient(135deg, #6b7280, #374151); }
.blog-related__overlay { position: absolute; inset: auto 0 0 0; padding: 48px 20px 18px; background: linear-gradient(0deg, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.55) 48%, rgba(0,0,0,0) 100%); }
.blog-related__title { font-family: var(--font-heading); font-weight: 400; font-size: 1.2rem; line-height: 1.3; color: #fff; margin: 0; }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 1280px) {
    .ne-breadcrumbs__inner, .article-layout, .autor { padding-left: var(--container-padding); padding-right: var(--container-padding); }
}
@media (max-width: 1024px) {
    .article-layout { grid-template-columns: 1fr; gap: 0; }
    .article-layout .sidebar { margin-top: 48px; }
    .blog-related__inner { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
    .blog-artikel-page { padding-top: calc(var(--header-height) + 20px); }
    .ne-breadcrumbs__inner, .article-layout { padding-left: var(--container-padding-mobile); padding-right: var(--container-padding-mobile); }
    .article-hero-img { padding: 20px 0; }
    .article-hero-img img { margin-left: -20px; }
    .article-body { font-size: 17px; }
    .blog-bild--hoch { float: none; width: auto; max-width: none; margin: 1.8rem 0; }
    .blog-cta { padding: 32px 32px 200px; background-position: center bottom; background-size: 180px auto; min-height: 0; }
    /* Mobile: seitlicher Gutter wie die anderen Sektionen, weniger Luft oben */
    .blog-related { padding: 32px var(--container-padding-mobile) 40px; }
    .blog-related__inner { grid-template-columns: 1fr; }
}

/* ============================================================
   Autorenseite (verlinkt, nicht in Nav): freigestelltes Foto seitlich,
   Text daneben. Person-Schema fuers E-E-A-T liegt im <head>.
   ============================================================ */
.autor-page { padding-top: calc(var(--header-height) + 60px); }
/* Keine eigene Linie — das Foto setzt unten auf der Rahmenkante der
   folgenden contact-section auf (die hat border-top: 1px #ccc). */
.autor { max-width: var(--container-width); margin: 0 auto; padding: 0; display: grid; grid-template-columns: 1fr 550px; gap: 56px; align-items: end; }
.autor__foto { align-self: end; margin-bottom: -1px; }
.autor__bild { width: 100%; height: auto; display: block; }
.autor__text { min-width: 0; align-self: end; padding-bottom: 100px; }
.autor__rolle { font-family: var(--font-heading); font-size: 14px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--color-gold); margin: 0 0 8px; }
.autor__name { font-family: var(--font-heading); font-weight: 300; font-size: clamp(2rem, 4vw, 3rem); line-height: 1.1; color: var(--color-heading); margin: 0 0 24px; }
.autor__bio { font-family: var(--font-body); font-size: 18px; line-height: 1.8; color: #444; }
.autor__bio p { margin: 0 0 1.2em; }
.autor__kontakt { margin: 24px 0 16px; font-size: 16px; color: var(--color-heading); }
.autor__kontakt a { color: var(--color-gold); text-decoration: none; }
.autor__kontakt a:hover { color: var(--color-gold-hover); }
.autor__sep { margin: 0 12px; color: #bbb; }
.autor__aktion { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; margin: 0; }
.autor__wa { display: inline-block; background: var(--color-whatsapp); color: #fff; font-weight: 500; padding: 11px 24px; border-radius: 5px; font-size: 15px; text-decoration: none; }
.autor__wa:hover { filter: brightness(0.94); color: #fff; }
.autor__schreiben { display: inline-block; background: var(--color-gold); color: #fff; font-weight: 500; padding: 11px 24px; border-radius: 5px; font-size: 15px; text-decoration: none; }
.autor__schreiben:hover { background: var(--color-gold-hover); color: #fff; }
@media (max-width: 900px) {
    .autor { grid-template-columns: 1fr; gap: 24px; text-align: center; }
    .autor__foto { max-width: 300px; margin: 0 auto; }
    .autor__text { padding-bottom: 0; }
    .autor__kontakt { display: flex; justify-content: center; flex-wrap: wrap; }
    .autor__aktion { justify-content: center; }
}
@media (max-width: 768px) {
    .autor-page { padding-top: calc(var(--header-height) + 20px); }
    .autor { padding-left: var(--container-padding-mobile); padding-right: var(--container-padding-mobile); }
}

/* Autorenseite: Profil-/Marken-Links unter den Aktionen */
.autor__links { margin: 28px 0 0; display: flex; flex-direction: column; gap: 12px; }
.autor__links-gruppe { font-size: 14px; color: #666; }
.autor__links-titel { display: inline-block; margin-right: 10px; font-family: var(--font-heading); text-transform: uppercase; letter-spacing: 0.05em; font-size: 12px; color: #9a9a9a; }
.autor__links-gruppe a { color: var(--color-gold); text-decoration: none; margin-right: 14px; }
.autor__links-gruppe a:hover { color: var(--color-gold-hover); text-decoration: underline; }
@media (max-width: 900px) {
    .autor__links { align-items: center; }
}

/* Autor-Byline verlinkt auf die Autorenseite */
.article-meta__autor a { color: var(--color-gold); text-decoration: none; }
.article-meta__autor a:hover { text-decoration: underline; }


/* === components/blog-index.css === */
/* ============================================================
   Blog-Uebersicht (Magazin) — Aufbau 1:1 aiadmin-Startseite,
   Farben/Fonts newEstepona. Alles unter .blog-index gescopt,
   damit keine generischen Klassen (.container, .section-badge …)
   mit dem Rest der Seite kollidieren.
   ============================================================ */
.blog-index .home-content { padding: 100px 0 80px; }
.blog-index .container { max-width: var(--container-width); margin: 0 auto; padding: 0; }

/* Desktop-/Mobile-Umschaltung (Markup-Swap) */
.blog-index .home-mobile { display: none; }

/* Section-Badge (Kategorie) */
.blog-index .section-badge {
    display: inline-block; background: var(--color-heading); color: #fff;
    padding: 8px 20px 6px; font-family: var(--font-heading); font-weight: 400;
    font-size: 18px; line-height: 1.7em; text-transform: uppercase;
    letter-spacing: 0.05em; margin: 0 0 -1px;
}
.blog-index a.section-badge:hover { opacity: 0.85; color: #fff; }
.blog-index .section-badge-line,
.blog-index .column-badge-line {
    display: flex; justify-content: space-between; align-items: baseline;
    border-bottom: 1px solid var(--color-border); margin-bottom: 1.5rem;
}
.blog-index .badge-all-link {
    font-size: 14.58px; font-weight: 400; text-transform: none; letter-spacing: normal;
    color: var(--color-gold); white-space: nowrap; padding-bottom: 6px;
}
.blog-index .badge-all-link:hover { color: var(--color-gold-hover); text-decoration: underline; }

/* Overlay-Kategorielabel */
.blog-index .card-cat { font-size: 14.4px; font-weight: 400; color: rgba(255,255,255,0.85); }

/* ===== Hero (1. Kategorie) ===== */
.blog-index .hero-layout { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 490px; gap: 4px; margin-top: 1rem; }
.blog-index .hero-main { position: relative; display: block; overflow: hidden; color: #fff; }
.blog-index .hero-main img, .blog-index .hero-main-placeholder { width: 100%; height: 100%; object-fit: cover; display: block; }
/* <picture> aus imageTagFuerBreite muss den fest hohen Slot fuellen, damit
   img { height:100% } greift. */
.blog-index .hero-main picture, .blog-index .hero-grid-card picture { display: block; width: 100%; height: 100%; }
.blog-index .hero-main-placeholder, .blog-index .hero-grid-placeholder { background: linear-gradient(135deg, #6b7280, #374151); }
.blog-index .hero-main-overlay { position: absolute; inset: auto 0 0 0; padding: 56px 20px 22px; background: linear-gradient(0deg, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.62) 42%, rgba(0,0,0,0) 100%); }
.blog-index .hero-main h2 { font-family: var(--font-heading); font-weight: 400; color: #fff; font-size: 25.2px; line-height: 1.3; margin: 0.3rem 0 0; }
.blog-index .hero-grid { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 4px; }
.blog-index .hero-grid-card { position: relative; display: block; overflow: hidden; color: #fff; }
.blog-index .hero-grid-card img, .blog-index .hero-grid-placeholder { width: 100%; height: 100%; object-fit: cover; display: block; }
.blog-index .hero-grid-overlay { position: absolute; inset: auto 0 0 0; padding: 44px 18px 18px; background: linear-gradient(0deg, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.58) 48%, rgba(0,0,0,0) 100%); }
.blog-index .hero-grid-card h3 { font-family: var(--font-heading); font-weight: 400; color: #fff; font-size: 19.8px; line-height: 1.3; margin: 0.2rem 0 0; }

/* ===== 3-Spalten (restliche Kategorien) ===== */
.blog-index .columns-grid { display: grid; grid-template-columns: repeat(3, 1fr); column-gap: 2rem; margin-top: 5rem; margin-bottom: 3rem; }
.blog-index .columns-grid .column-section { padding: 0; }
.blog-index .column-featured { display: block; color: inherit; margin-bottom: 1.25rem; }
.blog-index .column-featured img, .blog-index .column-featured-placeholder { width: 100%; aspect-ratio: 16/9; object-fit: cover; display: block; }
.blog-index .column-featured-placeholder { background: linear-gradient(135deg, #6b7280, #374151); }
.blog-index .column-featured-info { padding: 0.6rem 0 0; }
.blog-index .column-featured-cat, .blog-index .column-list-cat { display: block; font-size: 14.58px; font-weight: 400; color: var(--color-gold); margin-bottom: 0.15rem; }
.blog-index .column-featured h3 { font-family: var(--font-heading); font-weight: 400; color: var(--color-heading); font-size: 18px; line-height: 1.4; margin: 0; }
.blog-index .column-featured:hover h3 { color: var(--color-gold); }

/* Liste unter Featured */
.blog-index .column-list { list-style: none; margin: 0; padding: 0; }
.blog-index .column-list-item { display: flex; gap: 20px; padding: 0.85rem 0; color: inherit; align-items: center; }
.blog-index .column-list-thumb { flex-shrink: 0; width: 92px; height: 92px; overflow: hidden; aspect-ratio: 1/1; }
.blog-index .column-list-thumb img { width: 100%; height: 100%; object-fit: cover; }
.blog-index .column-list-placeholder { width: 100%; height: 100%; background: #e5e7eb; }
.blog-index .column-list-info { flex: 1; min-width: 0; }
.blog-index .column-list-title { display: block; font-size: 16.2px; line-height: 1.3; color: #666; }
.blog-index .column-list-item:hover .column-list-title { color: var(--color-gold); }

/* 4.+ Kategorie: Vollbreiten-Raster 3xN */
.blog-index .trends-section { margin-top: 4rem; }
.blog-index .trends-fullwidth { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; }
.blog-index .trends-fullwidth .column-featured { margin-bottom: 0; }

/* ===== Responsive ===== */
@media (max-width: 1280px) {
    .blog-index .container { padding-left: var(--container-padding); padding-right: var(--container-padding); }
}
@media (max-width: 1024px) {
    .blog-index .columns-grid { grid-template-columns: 1fr; gap: 2.5rem; }
    .blog-index .trends-fullwidth { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
    .blog-index .home-content { padding-top: 48px; }
    .blog-index .container { padding: 0 var(--container-padding-mobile); }
    .blog-index .home-desktop { display: none; }
    .blog-index .home-mobile { display: block; }
    .blog-index .home-mobile .container:not(:first-child) { padding-top: 20px; }
    .blog-index .home-mobile .column-featured { margin-bottom: 30px; }
    .blog-index .trends-fullwidth { grid-template-columns: 1fr; }
}


/* === layouts/static-page.css === */
/* Static Page (Contact, Blog, Resales, Imprint) */
.static-hero {
    padding: 160px var(--container-padding) 60px;
    text-align: center;
    max-width: 1200px;
    margin: 0 auto;
}
.static-hero h1 {
    font-size: var(--schrift-abschnitt);
    font-weight: 300;
    font-family: var(--font-heading);
    text-transform: uppercase;
    color: #202732;
    margin: 0;
    line-height: 1.1;
}
.static-content {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 var(--container-padding) 60px;
}
.static-content h2 {
    font-size: var(--schrift-untertitel);
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 40px 0 16px;
}
.static-content p {
    font-size: 16.2px;
    font-weight: 300;
    line-height: 1.7;
    color: #333;
    margin: 0 0 16px;
}

/* listing-content nested inside static-content: no double horizontal padding */
.static-content .listing-content {
    padding: 100px 0;
}
/* About Estepona */
.about-video { margin: 60px 0; }
.about-video__frame {
    position: relative;
    padding-bottom: 56.25%;
    height: 0;
    overflow: hidden;
}
.about-video__frame iframe {
    position: absolute; inset: 0;
    width: 100%; height: 100%; border: 0;
}
.about-video figcaption {
    margin-top: 14px;
    font-size: 16.2px; font-weight: 300; color: var(--color-text-light);
    text-align: center;
}
.static-content h5 {
    font-size: 27px; font-weight: 300; font-family: var(--font-heading);
    color: #202732; margin: 60px 0 24px;
}
.about-advantages {
    list-style: none; padding: 0; margin: 0;
    display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px 40px;
}
.about-advantages li {
    font-size: 16.2px; font-weight: 300; color: #333;
    padding-left: 26px; position: relative;
}
.about-advantages li::before {
    content: "✓"; position: absolute; left: 0; color: var(--color-gold);
}
.about-facts {
    margin: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px 40px;
}
.about-facts > div {
    display: flex; justify-content: space-between; gap: 20px;
    border-bottom: 1px solid var(--color-border); padding-bottom: 8px;
}
.about-facts dt { font-size: 16.2px; font-weight: 400; color: #202732; }
.about-facts dd { margin: 0; font-size: 16.2px; font-weight: 300; color: #333; }

@media (max-width: 768px) {
    .about-advantages, .about-facts { grid-template-columns: 1fr; }
}


/* === layouts/sell-property.css === */
/* Sell your Property Page */
.sell-stats {
    padding: 60px var(--container-padding);
    max-width: 1200px;
    margin: 0 auto;
}
.sell-stats__grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 40px;
    text-align: center;
}
.sell-stats__number {
    display: block;
    font-size: 90px;
    font-weight: 300;
    font-family: 'Roboto', sans-serif;
    color: #000;
    line-height: 1;
}
.sell-stats__label {
    display: block;
    font-size: 18px;
    font-weight: 300;
    color: #000;
    margin-top: 8px;
}

/* Service sections */
.sell-service {
    position: relative;
    overflow: hidden;
    border-bottom: 1px solid #000;
}
/* Als CSS-Hintergrund kann der Browser keine Groesse waehlen — deshalb liegt
   hier ein echtes <img> mit srcset hinter dem Text. */
.sell-service__image,
.sell-packages__image {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    z-index: 0;
}
.sell-service__inner {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: 1fr 1fr;
    max-width: 1200px;
    margin: 0 auto;
    padding: 100px 0;
    align-items: center;
}
.sell-service__text {
    padding: 0;
}
.sell-service__spacer {}
.sell-service__text h2 {
    font-size: var(--schrift-abschnitt);
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 0 0 30px;
    line-height: 60.48px;
}
.sell-service__text p {
    font-size: 18px;
    font-weight: 300;
    line-height: 28.8px;
    color: #000;
    margin: 0 0 18px;
}
.sell-service__text .btn {
    display: inline-flex;
    align-items: center;
    background: #202732;
    color: #fff;
    font-size: 18px;
    font-weight: 300;
    text-transform: uppercase;
    padding: 7.2px 18px;
    border-radius: 3px;
    border: none;
    margin-top: 10px;
    width: auto;
}
.sell-service__text .btn:hover {
    background: var(--color-gold);
}

/* Packages section */
.sell-packages {
    position: relative;
    overflow: hidden;
    padding: 80px var(--container-padding);
    border-bottom: 1px solid #000;
}


/* Full-width breakout from static-content container */
.static-content .sell-stats,
.static-content .sell-service,
.static-content .sell-packages {
    /* Volle Breite heisst: Fensterbreite minus dem Platz, den die Gardine des
       Immo-Finders einnimmt. Ohne den Abzug ragte der Block darunter hinaus und
       die Seite bekaeme einen waagerechten Rollbalken. */
    width: calc(100vw - var(--finder-raum));
    position: relative;
    left: 50%;
    right: 50%;
    margin-left: calc((100vw - var(--finder-raum)) / -2);
    margin-right: calc((100vw - var(--finder-raum)) / -2);
}
.static-content .sell-stats {
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
    left: auto;
    right: auto;
    width: auto;
}

/*
 * position und z-index sind hier nicht Zierde, sondern der Grund, dass man den
 * Inhalt ueberhaupt sieht: das Hintergrundbild darueber ist absolut gesetzt,
 * und ein positioniertes Element malt ueber Inhalt, der nicht positioniert
 * ist — auch bei z-index: 0. Ohne diese zwei Zeilen zeigt der Rahmen nur das
 * Bild, und Ueberschrift, Provisionsfrage und alle sechs Pakete verschwinden
 * dahinter. Der Dienstleistungsrahmen darueber hat es deshalb ebenfalls.
 */
.sell-packages__inner {
    position: relative;
    z-index: 1;
    max-width: 1200px;
    margin: 0 auto;
    padding: 100px 0;
    text-align: center;
}
.sell-packages__inner h2 {
    font-size: var(--schrift-abschnitt);
    font-weight: 300;
    font-family: var(--font-heading);
    color: #fff;
    margin: 0 0 10px;
}
/*
 * Mit .static-content davor, nicht ohne: die Seite liegt in diesem Behaelter,
 * und dessen Regel .static-content p traegt Klasse plus Element. Eine Regel
 * aus nur einer Klasse verliert dagegen, egal wie weit hinten sie steht — die
 * beiden Absaetze standen deshalb in der dunklen Fliesstextfarbe auf dem
 * blauen Bild.
 */
.static-content .sell-packages__subtitle,
.sell-packages__subtitle {
    font-size: 25.2px;
    font-weight: 300;
    color: var(--color-gold);
    margin: 0 0 10px;
}
.sell-packages__inner h5 {
    font-size: 19.8px;
    font-weight: 400;
    color: #fff;
    margin: 0 0 20px;
    text-transform: uppercase;
}
.sell-packages__row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    margin-bottom: 10px;
}
.sell-packages__card {
    background: rgba(255,255,255,0.92);
    border-radius: 20px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    padding: 40px 30px;
    text-align: center;
}
.sell-packages__pct {
    display: block;
    font-size: 70px;
    font-weight: 300;
    font-family: 'Roboto', sans-serif;
    color: var(--color-gold);
    line-height: 1;
    margin-bottom: 15px;
}
.sell-packages__card h4 {
    font-size: 21.6px;
    font-weight: 400;
    font-family: var(--font-heading);
    color: #000;
    margin: 0 0 15px;
}
.sell-packages__card p {
    font-size: 18px;
    font-weight: 300;
    line-height: 28.8px;
    color: #000;
    margin: 0;
}
.static-content .sell-packages__note,
.sell-packages__note {
    font-size: 14px;
    font-weight: 300;
    color: #fff;
    margin: 30px 0 20px;
}
.sell-packages .sell-btn {
    margin-top: 10px;
    background: var(--color-gold);
}

@media (max-width: 768px) {
    .sell-stats__grid { grid-template-columns: 1fr; }
    .sell-stats__number { font-size: 60px; }
    .sell-service__inner { grid-template-columns: 1fr; padding: 40px 20px; }
    .sell-service__spacer { display: none; }
    .sell-packages__row { grid-template-columns: 1fr; }
    .sell-packages__inner { padding: 30px 20px; }
}
/* Sell page CTA button */
.sell-btn {
    display: inline-flex;
    align-items: center;
    background: #202732;
    color: #fff !important;
    font-size: 18px;
    font-weight: 300;
    text-transform: uppercase;
    padding: 7.2px 18px;
    border-radius: 3px;
    margin-top: 10px;
    text-decoration: none;
    transition: background 0.2s;
}
.sell-btn:hover {
    background: var(--color-gold);
    color: #fff !important;
}

/* === responsive/responsive.css === */
/* Responsive Breakpoints */
@media (max-width: 1200px) {
    .reasons-grid { grid-template-columns: repeat(2, 1fr); }
    .equipment-distances-inner { grid-template-columns: 1fr; gap: 40px; }
    .distances-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
    /* wpMobPadding der alten Vorlage: 20px seitlich schon ab 768. */
    :root { --container-padding: var(--container-padding-mobile); }

    /*
     * Die Kopfzeile ist auf dem Handy 30 Prozent flacher: 70 statt 100 Pixel.
     * Die Hoehe steckt in --header-height, an ihr haengen auch das Menue und
     * die Kopfzeile der Filterflaeche — eine Zahl, drei Stellen richtig.
     */
    :root { --header-height: 70px; }
    .site-header__grid { grid-template-columns: 1fr 1fr; }
    .site-header__center { display: none; }
    /*
     * Projektseite auf dem Handy: Titelbild als Querformat-Streifen, darunter
     * ein weisser Block mit Titel, Ort und Eckdaten - so wie es die alte Seite
     * gemacht hat. Nachgemessen bei 390 Punkten Fensterbreite: Bild 375x338,
     * Titel 28,8 px zentriert, Ort 21,6 px, Eckdaten 18 px.
     *
     * Ueber dem Bild liegend, wie auf dem grossen Schirm, hatte das Band einen
     * 70vh hohen Bildbereich noetig - und dafuer wurde das Bild so weit
     * hochgerechnet, dass nichts mehr zu erkennen war.
     */
    .project-hero {
        --hero-hoehe: auto;
        /* Zeile "headlines": 60 oben, 20 seitlich. Unten mehr, auf Ansage. */
        --hero-abstand: 60px 20px 60px;
        --hero-deckkraft: 1;
    }
    .project-hero__image {
        position: static;
        width: 100%;
        /* Feste 300 Pixel, nachgemessen an der mobilen Vorlage auf einem
           iPhone. Vorher standen hier 338 - das war die Desktopvorlage mit
           min-height 40vh, die ein schmales Fenster ausgeliefert bekommt. */
        height: 300px;
        object-fit: cover;
    }
    .project-title-overlay { position: static; }
    /* Kein Hero-Titel mehr, sondern die Ueberschrift der Seite: feste Groesse
       statt der mitwachsenden des Titelbands. */
    .project-title-overlay h1 { font-size: 28.8px; }
    .project-title-overlay__location { font-size: 21.6px; }
    .project-title-overlay__meta { font-size: 18px; }

    /* Galerie vor die Einleitung, ohne das Markup umzustellen. */
    .project-page { display: flex; flex-direction: column; }
    .project-page > .project-hero { order: 1; }
    .project-page > .project-gallery { order: 2; }
    .project-page > .project-description { order: 3; }
    .project-page > * { order: 4; }

    .project-description,
    .project-description h2,
    .project-description__text,
    .project-description__text p { text-align: left; }

    .project-location h2 { text-align: left; }

    /*
     * Vertikale Abstaende je Abschnitt, nachgemessen an der mobilen Vorlage
     * (oben / seitlich / unten). Sie sind bewusst nicht einheitlich: Lage und
     * Ausstattung stehen luftiger als Einleitung und FAQ.
     */
    .project-gallery { padding: 0; }
    .project-description { padding: 50px 20px 60px; }
    .project-investment { padding: 60px 20px; }
    .project-location { padding: 70px 20px; }
    .project-faqs { padding: 60px 20px; }
    .equipment-distances-section { padding: 70px 20px; }

    /*
     * Was die Mobilvorlage in diesen beiden Zeilen nicht zeigt, nachgemessen
     * auf dem iPhone: die Einleitung hat dort kein Bild, und die Lage genau
     * eines — die Karte. Ortsfoto und Untertitel stehen nur auf dem grossen
     * Schirm. Ohne das ist die Seite auf dem Telefon 850 Pixel laenger als das
     * Original, ohne dass ein Besucher etwas davon haette.
     */
    .project-description__image { display: none; }
    .project-location__images { display: none; }
    .project-location__subtitle { display: none; }
    /* Mobil ist eine Seite ein Bild, also rastet jedes Bild ein. */
    .gallery__slide { flex: 0 0 100%; }
    .gallery__slide:nth-child(even) { scroll-snap-align: start; scroll-snap-stop: always; }
    .reasons-grid { grid-template-columns: 1fr; }
    .project-location__grid { grid-template-columns: 1fr; }
    .contact-section__inner { grid-template-columns: 1fr; }

    /*
     * Das Portraet liegt als Hintergrundbild in derselben Box wie der Text und
     * ist unten rechts verankert. Auf dem grossen Schirm ist die Spalte breit
     * genug, auf dem Handy legte es sich ueber Telefonnummer und
     * WhatsApp-Knopf.
     *
     * Wie auf der alten Seite: Text links, Foto rechts daneben. Dafuer wird das
     * Bild auf 140 Pixel Breite gebracht und der Text bekommt rechts so viel
     * Abstand, dass er nicht darunter laeuft.
     */
    .contact-section__left-bg {
        /*
         * Der Text laeuft ueber die volle Breite — kein Einruecken, keine
         * zweite Spalte. Das Foto liegt als Hintergrund dahinter, unten rechts.
         *
         * Es steht ein paar Pixel ueber die Kante hinaus, rechts wie unten, so
         * wie auf der alten Seite. Dafuer wird die Box um die 20 Pixel
         * Sektionsabstand nach rechts herausgezogen und bekommt sie als eigenen
         * Abstand zurueck, damit der Text stehen bleibt, wo er war.
         *
         * Der Abstand nach unten haelt den Text aus dem Gesicht: der
         * WhatsApp-Knopf ist das letzte Element, darunter beginnt das Foto.
         */
        margin-right: -20px;
        padding-right: 20px;
        padding-bottom: 105px;
        background-size: auto 260px;
        background-position: right -70px bottom -20px;
        min-height: 260px;
    }
    .equipment-list { grid-template-columns: 1fr; }
    /*
     * Auf dem Handy steht jedes Feld auf einer eigenen Zeile. Telefon und
     * E-Mail nebeneinander ergaben je 128 Pixel — zu schmal, um eine Nummer
     * oder Adresse beim Tippen zu sehen. Die alte Seite hat dort 340.
     */
    .form-row--3col,
    .form-row--2col { grid-template-columns: 1fr; }

    /*
     * Der dunkle Formularblock laeuft ueber die volle Breite und traegt seinen
     * Rand selbst. Vorher kamen 20 Pixel der Sektion und 40 des Blocks
     * zusammen, dadurch waren die Felder nur 270 statt 350 Pixel breit.
     */
    .contact-section__right {
        margin: 0 -20px;
        padding: 40px 20px;
    }
    /* Die Abstaende der Projektabschnitte stehen weiter oben einzeln — die
       frueheren 60px fuer alle waren geraten, die neuen sind gemessen. Hier
       bleibt nur der Kontaktbereich, den die Messung nicht erfasst hat. */
    /* Nur oben und an den Seiten. Die Kurzschreibweise setzte auch unten
       60px — sichtbar als Luft zwischen Formular und Trennlinie der
       Fusszeile, wo die Grundregel ausdruecklich 0 vorsieht. */
    .contact-section { padding: 60px 20px 0; }
    /* Homepage */
    /*
     * Mobil steht das weisse Band unter dem Bild statt darueber. Das Bild
     * bekommt dafuer eine feste Hoehe und laeuft im Fluss mit; der Rahmen
     * richtet sich nach seinem Inhalt. Absolut gesetzt bliebe die letzte Zeile
     * der Ueberschrift abgeschnitten.
     */
    /*
     * Der Schatten des Titelbands, fuer alle drei Heroes gemeinsam.
     *
     * Auf dem grossen Schirm schwebt das Band ueber einem hohen Bild und wirft
     * seinen Schatten nach oben. Auf dem Handy ist seine Unterkante die Grenze
     * zum weissen Grund darunter — also faellt er dort nach unten. Die Richtung
     * haengt an dieser Lage, nicht am Seitentyp, deshalb steht sie hier einmal.
     *
     * "overflow: visible" muss dazu: der Rahmen schneidet sonst genau an der
     * Kante ab, an der der Schatten anfangen soll. Und ohne eigene Stapelebene
     * malt der folgende Abschnitt seinen Hintergrund darueber.
     */
    .homepage-hero,
    .listing-hero,
    .project-hero {
        --hero-schatten: 0 4px 8px -3px rgba(0, 0, 0, 0.25);
        overflow: visible;
    }
    .homepage-hero__overlay,
    .listing-hero__overlay,
    .project-title-overlay { z-index: 2; }

    .homepage-hero {
        --hero-hoehe: auto;
        --hero-abstand: 32px 16px 26px;
        --hero-deckkraft: 1;
    }
    .homepage-hero__image { position: static; height: 250px; }

    /*
     * Listenseiten wie Startseite und Projektseiten: Bild oben im Fluss,
     * Titelblock darunter auf weissem Grund. Vorher lag das Band ueber einem
     * 400 bis 500 Pixel hohen Bild — damit gab es keine Kante, an der sich der
     * Abschnitt vom Inhalt darunter absetzt.
     */
    .listing-hero {
        --hero-hoehe: auto;
        --hero-abstand: 60px 20px 60px;
        --hero-deckkraft: 1;
    }
    .listing-hero__image {
        position: static;
        width: 100%;
        /* Wie die Startseite. */
        height: 250px;
        object-fit: cover;
    }
    .listing-hero__overlay { position: relative; }
    /* Im Fluss, aber eine Ebene hoeher: sonst malt der folgende weisse
       Abschnitt seinen Hintergrund ueber den Schatten des Bandes. */
    .homepage-hero__overlay { position: relative; z-index: 2; }
    .homepage-hero__overlay p { font-size: 18px; line-height: 28.8px; }
    .category-cards-grid { grid-template-columns: 1fr; }
    /* .project-grid ist ein Flexbox, kein Grid — grid-template-columns lief hier
       ins Leere und die Karten blieben bei 33.333%, also 87px auf einem 375er
       Display. Die Breite muss auf der Karte selbst zurueckgenommen werden. */
    .project-grid-card,
    .project-grid.grid-2col .project-grid-card { width: 50%; }
    .search-section { padding: 40px 20px; }

    /*
     * Auf dem Telefon geht es nach dem Titelbild direkt in die Suche.
     * Ueberschrift und Untertitel des Abschnitts kosten dort eine halbe
     * Bildschirmhoehe, bevor der Besucher das erste Angebot sieht — und wer
     * hier ankommt, kommt wegen der Angebote.
     *
     * Ausgenommen die Fehlerseite: sie nutzt dieselbe Vorlage, und bei ihr
     * stehen an dieser Stelle der Hinweis und die Erklaerung.
     */
    .homepage:not(.fehlerseite) > .search-section > h2,
    .homepage:not(.fehlerseite) > .search-section > .search-section__subtitle {
        display: none;
    }
}
@media (max-width: 480px) {
    /* Die 2col-Variante der Resales-Seite ist spezifischer als .project-grid-card
       allein — ohne sie hier stehen auf dem Handy zwei 140px-Kacheln nebeneinander. */
    .project-grid-card,
    .project-grid.grid-2col .project-grid-card { width: 100%; }

    /*
     * Die Karte selbst traegt auf dem grossen Schirm 10 Pixel Innenabstand als
     * Fuge zwischen den Spalten. Einspaltig gibt es keine Fuge, wohl aber den
     * Versatz: die sichtbare Karte lief von 30 bis 360, waehrend Suchfeld,
     * Ueberschrift und Filterknopf von 20 bis 370 laufen. Hier steht sie
     * deshalb randlos im Satzspiegel, der Abstand nach unten bleibt.
     */
    .project-grid-card { padding: 0 0 20px; }
    /* Kein 70vh mehr: der Hero der Projektseite ist auf dem Handy Bild plus
       Titelblock und richtet sich nach deren Hoehe. Mit der festen Hoehe lief
       jede Aenderung am Innenabstand ins Leere — sie fuellte nur den Rest auf,
       statt den Block wachsen zu lassen. */
    .brochure-link { width: 140px; height: 140px; right: 20px; top: 100px; }
    .brochure-link__label { font-size: 14px; }
    .brochure-link__cta { font-size: 11px; }
}

/* Listing hero responsive */
@media (max-width: 768px) {

}
@media (max-width: 480px) {

}


/* === components/inhaltsseite.css === */
/*
 * Inhaltsseiten mit Gestaltung (layout: inhalt) — von realEstepona uebernommen,
 * zuerst fuer /sell-your-property/. Zusammengestellt aus den Dateien dort:
 *   components/startseite.css    Grundblock .start-text (Spalte 960, Absaetze, Listen, Kasten)
 *   components/seitentext.css    Ueberschriften-Leiter, hier nur fuer .start-text__inhalt
 *                                (der Aufklapptext behaelt die Leiter von Luxury Marbella)
 *   components/inhaltsseite.css  Held, Reihen/Spalten/Kaesten, Haekchenliste, Knopf
 *   components/objekt-detail.css Fenster ueber der Seite
 * Markenfarbe: das Gold von realEstepona (var(--color-gold)) ist hier die CI #ccab86
 * (var(--color-gold)). Builder: build/builders/inhaltsseite.js.
 */


/* ---- aus realEstepona components/startseite.css ---- */
.start-text {
    padding: 32px 0 0;
}

/* 960 breit, gemessen an der Live-Seite (bei 1920 von 480 bis 1440). */
.start-text__inhalt {
    max-width: 960px;
    margin: 0 auto;
    padding: 0;
}

/*
 * Die Ueberschriften stehen in components/seitentext.css — dieselbe Leiter
 * wie auf allen anderen Seiten. Hier standen Roboto 40.8 und 22.1 mit
 * Gewicht 600; das war das fette Schriftbild, das die Startseite von den
 * Listenseiten unterschied.
 */

.start-text__inhalt p {
    font-size: 17px;
    line-height: 28.9px;
    color: #000;
    margin: 0 0 15px;
}

/*
 * Aufzaehlungen: der Abstand gehoert an die Liste, nicht an die Punkte.
 * Gemessen: li ohne Rand und Innenabstand, ul mit 32 unten und 34 links.
 * Mit Rand an jedem li driften die Punkte auseinander.
 */
.start-text__inhalt ul,
.start-text__inhalt ol {
    margin: 0 0 32px;
    padding: 0 0 0 34px;
}

.start-text__inhalt li {
    font-size: 17px;
    line-height: 28.9px;
    color: #000;
    margin: 0;
    padding: 0;
}

.start-text__inhalt a { color: var(--color-gold); }

/* Der Fliesstext laeuft in Gewicht 300; fett braucht deshalb 700, sonst
   hebt es sich kaum ab. */
.start-text__inhalt strong,
.start-text__inhalt b { font-weight: 700; }

/*
 * Hell hinterlegter Kasten um den Schlussabsatz — im Export eine
 * Kadence-Spalte mit "background", hier als eigener Block.
 */
/*
 * Abstaende wie auf der Live-Seite gemessen (bei 1920):
 *   letzter Absatz → Kasten  39
 *   Kasten → Trennlinie      53
 *   Trennlinie → Ueberschrift 70
 * Da benachbarte Raender zusammenfallen, traegt jeweils der groessere Wert
 * den Abstand: der Absatz hat 15 unten, der Kasten 39 oben.
 */
.start-text__box {
    background: #f7fafc;
    border: 1px solid #eee;
    box-shadow: 0 0 14px rgba(0, 0, 0, 0.2);
    padding: 50px;
    margin: 39px 0 0;
}

/* Der letzte Absatz behaelt seinen Rand — im Original hat er ihn auch. */

/* Trennlinie zwischen Schlusskasten und FAQ: 768 breit, mittig. */
.start-text__inhalt hr,
.start-text__inhalt .kt-divider {
    width: 768px;
    max-width: 100%;
    margin: 53px auto 70px;
    border: 0;
    border-top: 1px solid #ccc;
}


/* ---- aus realEstepona components/seitentext.css (nur .start-text__inhalt) ---- */
 */
:where(.start-text__inhalt) :is(h1, h2, h3, h4, h5) {
    font-family: var(--font-heading);
    font-weight: 300;
    color: #202732;
    text-transform: none;
}

:where(.start-text__inhalt) h1 { font-size: 46px; line-height: 1.1; margin: 0 0 20px; }
:where(.start-text__inhalt) h2 { font-size: 36px; line-height: 1.2; margin: 30px 0 10px; }
:where(.start-text__inhalt) h3 { font-size: 23px; line-height: 1.4; margin: 20px 0 8px; }
:where(.start-text__inhalt) h4 { font-size: 20px; line-height: 1.4; margin: 20px 0 8px; font-weight: 400; }
:where(.start-text__inhalt) h5 { font-size: 18px; line-height: 1.5; margin: 18px 0 8px; font-weight: 400; }

@media (max-width: 1024px) {
    :where(.start-text__inhalt) h1 { font-size: 26px; }
    :where(.start-text__inhalt) h2 { font-size: 23px; }
    :where(.start-text__inhalt) h3 { font-size: 20px; }
    :where(.start-text__inhalt) h4 { font-size: 19px; }
    :where(.start-text__inhalt) h5 { font-size: 18px; }
}

@media (max-width: 600px) {
    :where(.start-text__inhalt) h1 { font-size: 22px; }
    :where(.start-text__inhalt) h2 { font-size: 20px; }
    :where(.start-text__inhalt) h3 { font-size: 18px; }
    :where(.start-text__inhalt) h4 { font-size: 17px; }
    :where(.start-text__inhalt) h5 { font-size: 16px; }
}

/*
 * Das erste Stueck eines Textes traegt keinen Abstand nach oben — der kommt
 * vom Abschnitt. Galt bisher nur auf den Listenseiten.
 */
:where(.start-text__inhalt) > :first-child { margin-top: 0; }

/* ---- aus realEstepona components/inhaltsseite.css ---- */
/*
 * Inhaltsseiten: /imprint/, /rental-services/, /sell-your-property/ …
 *
 * Alle Masse an realestepona.com/rental-services/ gemessen:
 *   Held      80vh hoch, Seitenabstand 120, Text unten, Bild mit #202732
 *             darueber bei halber Deckkraft
 *   h1        51 / 56.1, Gewicht 300, Roboto Condensed, weiss
 *   Unterzeile 17, Gewicht 300, weiss
 *   Textspalte 1200 breit
 *
 * Die Typografie des Textes kommt aus objektliste.css (.start-text) — dort
 * steht sie schon, und es ist dieselbe. Hier steht nur, was dazukommt.
 */

/* ----------------------------------------------------------------- Held */

.inhalt-held {
    position: relative;
    display: flex;
    align-items: flex-end;
    min-height: 80vh;
    padding: 0 120px 60px;
    overflow: hidden;
    background-color: #202732;
}

/*
 * Das Bild als Pseudoelement und nicht als Hintergrund des Abschnitts: so
 * laesst sich die Verdunklung darueberlegen, ohne sie auf den Text zu
 * vererben. --held-bild setzt der Erzeuger je Seite.
 */
.inhalt-held::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: var(--held-bild);
    background-size: cover;
    background-position: 50% 50%;
}

/* #202732 bei halber Deckkraft, wie overlayOpacity 50 auf der Live-Seite. */
.inhalt-held::after {
    content: "";
    position: absolute;
    inset: 0;
    background: #202732;
    opacity: 0.5;
}

/*
 * Ohne Bild bleibt der dunkle Grund allein stehen — /imprint/ hat keinen
 * Helden mit Bild, braucht aber eine Ueberschrift.
 */
.inhalt-held--ohne-bild {
    min-height: 0;
    padding-top: 80px;
}

.inhalt-held--ohne-bild::before,
.inhalt-held--ohne-bild::after {
    display: none;
}

/*
 * Ein Bildband ohne Text: so steht es auf /thank-you/ und /property-alarm/,
 * wo die Ueberschrift darunter in einer eigenen Karte sitzt. Dann braucht es
 * unten keinen Platz fuer Text.
 */
.inhalt-held--ohne-text {
    min-height: 56vh;
    padding-bottom: 0;
}

/*
 * Der Text im Helden steht mittig und laeuft ueber die volle Breite minus
 * den 120 Seitenabstand — nachgemessen auf /sell-your-property/,
 * /rental-services/ und /premium-partner/: Kasten 120 bis 1465 bei 1600
 * Fensterbreite, Text zentriert, Unterzeile ebenso.
 */
.inhalt-held__inhalt {
    position: relative;
    z-index: 1;
    width: 100%;
    text-align: center;
}

/*
 * Die Zeile im Helden. Gemessen auf fuenf Seiten des Originals: immer 51px in
 * Roboto Condensed 300 — die Zeilenhoehe haengt aber an der Stufe, weil das
 * Theme h1 und h2 verschieden setzt.
 */
.inhalt-held__titel {
    margin: 0;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 51px;
    font-weight: 300;
    color: #fff;
}

/*
 * Versal, egal ob h1 oder h2.
 *
 * Im Original steht die h2 im Helden nicht versal und eine Spur hoeher (51 /
 * 61.2 statt 56.1) — das betrifft nur /real-estate-agent-estepona/, wo die h1
 * im Artikel sitzt und der Held deshalb eine h2 traegt. Auf drei Seiten
 * nebeneinander sah das aus wie ein Versehen; jetzt sehen alle drei Helden
 * gleich aus. Welche Stufe die Zeile ist, bleibt davon unberuehrt — sie steht
 * weiter als h2 im Quelltext.
 */
h1.inhalt-held__titel,
h2.inhalt-held__titel { line-height: 56.1px; text-transform: uppercase; }

/*
 * Der Pfeil unter der Zeile: 30 x 30, weiss.
 *
 * Die Zeichnung selbst muss ein Block sein, sonst sitzt sie auf einer
 * Schriftlinie und zieht die Unterlaenge mit — der Held stand dadurch 9
 * Punkte zu hoch.
 */
.inhalt-held__pfeil {
    display: block;
    width: 30px;
    margin: 0 auto;
    color: #fff;
}

.inhalt-held__pfeil svg { display: block; }

.inhalt-held__vor,
.inhalt-held__zeile {
    margin: 0;
    font-size: 17px;
    line-height: 1.7;
    font-weight: 300;
    color: #fff;
}

.inhalt-held__vor {
    margin-bottom: 4px;
}

/*
 * Etwas Luft unter die Ueberschrift. Im Original stossen beide aneinander —
 * die Unterzeile beginnt genau dort, wo die Ueberschrift endet, und bei einer
 * dreizeiligen Ueberschrift las sich das als deren vierte Zeile.
 */
.inhalt-held__zeile {
    margin-top: 12px;
}

/* ------------------------------------------------------------ Textspalte */

/*
 * Derselbe Block wie unter den Objektlisten, nur ohne den Abstand nach oben:
 * dort folgt er auf das Kachelraster, hier auf den Helden.
 */
/*
 * Unten 100, nicht nur oben 80. Ohne das stiess der Text direkt an den
 * naechsten Abschnitt: auf /rental-services/ endete die letzte Antwort der
 * Fragen genau an der Oberkante des grauen Bandes, Abstand gemessen null.
 *
 * 100 wie auf den Listenseiten und wie im Original, wo die Artikelreihe
 * padding [40,120,100,120] traegt.
 */
/*
 * Kein eigenes Polster: jede Reihe bringt ihres mit (60 oben auf
 * /real-estate-agent-estepona/, 40 auf /rental-services/). Die 80, die
 * hier standen, kamen oben drauf — der Inhalt begann 80 Punkte zu tief.
 */
.inhalt-text {
    padding: 0;
}

/* ------------------------------------------------------- Aufruf am Fuss */

/*
 * Der Aufruf am Fuss, gemessen auf /real-estate-agent-estepona/:
 *
 *   Band       ueber die volle Breite, Grund rgba(170,141,112,0.15) —
 *              dasselbe Gold wie die Karten, nicht das Grau, das hier stand
 *   innen      1200 breit, Polster 60 oben/unten und 120 seitlich
 *   Inhalt     960 breit, alles mittig
 *
 * Vorher: Grau, 808 breit und linksbuendig. Das war geraten.
 */
.inhalt-aufruf {
    padding: 60px 120px;
    background: rgba(170, 141, 112, 0.15);
}

.inhalt-aufruf__innen {
    max-width: 960px;
    margin: 0 auto;
}

/* Mittig stehen Ueberschrift und Satz, nicht die Felder darunter. */
.inhalt-aufruf__titel,
.inhalt-aufruf__text { text-align: center; }

.inhalt-aufruf__titel {
    margin: 0 0 10px;
    font-family: "Roboto Condensed", sans-serif;
    /* 44.2, nicht 44 — dieselbe Groesse wie die uebrigen Seitenueberschriften. */
    font-size: 44.2px;
    line-height: 53.04px;
    font-weight: 300;
    color: #202732;
}

.inhalt-aufruf__text {
    margin: 0 0 24px;
    font-size: 17px;
    line-height: 1.7;
    font-weight: 300;
    color: #202732;
}

/* --------------------------------------------------------------- Mobil */

@media (max-width: 1024px) {
    .inhalt-held { padding: 0 50px 40px; }
    .inhalt-aufruf { padding: 60px 50px; }
}

@media (max-width: 767px) {
    /*
     * Ein Seitenrand fuer die ganze Seite: 16, buendig mit Logo und Brenner
     * in der Kopfzeile — so stehen es auch die Listen- und Objektseiten.
     *
     * Der Rand kommt von .start-text__inhalt. Die Reihen brachten aus dem
     * Export ihren eigenen mit (20 auf /rental-services/, 50 auf /imprint/),
     * und der kam oben drauf: der Text stand dort 36 beziehungsweise 66
     * Punkte vom Rand, waehrend das Logo darueber bei 16 steht. Senkrecht
     * bleibt das Polster des Exports, nur waagrecht faellt es weg.
     */
    .start-text__inhalt .start-text__reihe { padding-inline: 0; }

    /*
     * Lange Adressen umbrechen. In der Datenschutzerklaerung stehen volle
     * URLs; die gelten als ein Wort und schoben die Seite 168 Punkte nach
     * rechts hinaus.
     */
    .start-text__inhalt a { overflow-wrap: anywhere; }

    .inhalt-held {
        /*
         * 80vh auf dem Telefon waere fast der ganze Bildschirm, und darunter
         * kaeme nichts in Sicht. 60vh laesst den Textanfang mit ins Bild.
         */
        min-height: 60vh;
        padding: 0 20px 30px;
    }

    /*
     * Am Original bei 390 nachgemessen: h1 32.4 / 37.94 und h2 27 / 35.1.
     * Hier stand nur die Groesse, und die Zeilenhoehe blieb bei den 56.1
     * Punkten des Schirms stehen — bei 34 Punkt Schrift war das ein
     * Verhaeltnis von 1.65, und eine dreizeilige Ueberschrift im Helden fiel
     * auseinander. Deshalb beide Werte zusammen, und je Stufe eigene: das
     * Theme setzt h1 und h2 verschieden.
     */
    h1.inhalt-held__titel,
    h2.inhalt-held__titel { font-size: 32.4px; line-height: 37.94px; }


    .inhalt-aufruf { padding: 50px 20px; }
    .inhalt-aufruf__titel { font-size: 30px; }
}

/* ------------------------------------------------ Mehrspaltige Reihen */

/*
 * Kadence baut Reihen mit Spalten. Beim Import fielen beide Huellen weg —
 * richtig fuer Fliesstext, falsch fuer alles, was eine Anordnung IST: die
 * sechs Preispakete auf /sell-your-property/, der Vergleich zweier Anbieter
 * auf /real-estate-agent-estepona/, die drei Specials. Die standen danach
 * untereinander statt nebeneinander.
 *
 * Markiert werden nur Reihen mit mehr als einer Spalte; Fliesstext bleibt
 * ohne jede Huelle.
 *
 * Gemessen an realestepona.com/sell-your-property/ (1600): drei Spalten,
 * Luecke 32, Karte #F2F2F2 mit Innenabstand 30 und zentriertem Text,
 * Prozentzahl 70 in var(--color-gold), H4 23.8/33.32 in Roboto Condensed.
 */
/*
 * Polster, Rand und Luecke stehen am Block selbst (siehe build/kadence.js):
 * jede Reihe des Originals bringt ihre eigenen Masse mit, fuer alle drei
 * Geraetebreiten. Hier stehen nur die Rueckfallwerte fuer Reihen, die nichts
 * mitbringen.
 *
 * Vorher stand hier pauschal "margin: 40px 0". Das war geraten und lag an
 * jeder zweiten Stelle 20 bis 40 Punkte daneben — zu sehen erst, seit der
 * Seitenvergleich auch die senkrechten Abstaende misst.
 */
.start-text__reihe {
    display: grid;
    gap: 32px;
    align-items: start;
    padding: var(--polster, 0);
    margin: var(--rand, 0);

    /*
     * Jede Reihe setzt ihre Stufen selbst zurueck.
     *
     * Eigene Eigenschaften vererben sich. Der Export schreibt --polster-tafel
     * und --polster-telefon nur dort hin, wo er andere Masse hat; eine Reihe
     * in einer Reihe sah deshalb die Werte der aeusseren und nahm deren
     * Seitenabstand ein zweites Mal. Auf /real-estate-agent-estepona/ standen
     * die Vergleichskaesten dadurch 36 Punkt weiter innen als der Text
     * darueber: 16 von der Seite, 20 von der Reihe, 20 noch einmal vom
     * Kasten. Dieselbe Verdopplung auf /rental-services/.
     *
     * Hier bekommt jede Reihe ihre feineren Stufen aus ihrer eigenen groben.
     * Steht im Markup ein eigener Wert, gewinnt der — ein Stil am Element
     * schlaegt die Regel im Stylesheet.
     */
    --polster-tafel: var(--polster, 0);
    --polster-telefon: var(--polster-tafel);
    --rand-tafel: var(--rand, 0);
    --rand-telefon: var(--rand-tafel);
}

.start-text__spalte {
    --spaltenpolster-tafel: var(--spaltenpolster, 0);
    --spaltenpolster-telefon: var(--spaltenpolster-tafel);
}

/*
 * min-width: 0 ist hier kein Schoenheitsfehler, sondern das, was die Seite
 * auf dem Telefon zusammenhaelt.
 *
 * Ein Rasterfeld darf von sich aus nicht schmaler werden als sein Inhalt
 * (min-width: auto). Der Fliesstext unter den Listen hat lange Zeilen, also
 * blies das Feld die Spalte auf 768 Punkte auf — gemessen bei 390 Punkten
 * Fensterbreite: die Seite war 784 breit und liess sich seitlich schieben.
 * Mit 0 darf das Feld schrumpfen, und der Text bricht um, wie er soll.
 */
.start-text__spalte {
    padding: var(--spaltenpolster, 0);
    min-width: 0;
}

@media (max-width: 1024px) {
    .start-text__reihe {
        padding: var(--polster-tafel, var(--polster, 0));
        margin: var(--rand-tafel, var(--rand, 0));
    }
    .start-text__spalte { padding: var(--spaltenpolster-tafel, var(--spaltenpolster, 0)); }
}

@media (max-width: 767px) {
    .start-text__reihe {
        padding: var(--polster-telefon, var(--polster-tafel, var(--polster, 0)));
        margin: var(--rand-telefon, var(--rand-tafel, var(--rand, 0)));
    }
    .start-text__spalte { padding: var(--spaltenpolster-telefon, var(--spaltenpolster-tafel, var(--spaltenpolster, 0))); }
}

.start-text__reihe--2 { grid-template-columns: repeat(2, 1fr); }
.start-text__reihe--3 { grid-template-columns: repeat(3, 1fr); }
.start-text__reihe--4 { grid-template-columns: repeat(4, 1fr); }
.start-text__reihe--5 { grid-template-columns: repeat(5, 1fr); }

/*
 * Was oben in einer Spalte steht, beginnt ohne Abstand — das macht das Theme
 * auch so. Der letzte behaelt seinen: im Original hat der letzte Absatz einer
 * Spalte seine 15 Punkte, sie fallen ohnehin mit dem Polster zusammen.
 */
.start-text__spalte > :first-child { margin-top: 0; }

/*
 * Eine Spalte mit Hintergrund ist eine Karte. Sie setzt den Kasten der
 * Listenseiten zurueck: dort ist er ein heller Hinweis mit Schatten, hier
 * eine Karte im Raster.
 */
.start-text__reihe:not(.start-text__reihe--1) .start-text__box {
    margin: 0;
    padding: 30px;
    background: #F2F2F2;
    border: 0;
    box-shadow: none;
    text-align: center;
    height: 100%;
}

/*
 * Die Prozentzahl steht im Export als blosses <div> ganz oben in der Karte —
 * ohne Klasse, weil Kadence ihre Groesse ueber eine Regel je Block setzt und
 * die beim Import faellt.
 */
.start-text__reihe:not(.start-text__reihe--1) .start-text__box > div:first-child {
    font-family: var(--font-body);
    font-size: 70px;
    line-height: 1;
    font-weight: 300;
    color: var(--color-gold);
    margin-bottom: 14px;
}

.inhaltsseite .start-text__reihe:not(.start-text__reihe--1) .start-text__box h4 {
    margin: 0 0 14px;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 23.8px;
    line-height: 1.4;
    font-weight: 400;
    color: #000;
}

.start-text__reihe:not(.start-text__reihe--1) .start-text__box p { margin: 0; }
.start-text__reihe:not(.start-text__reihe--1) .start-text__box p + p { margin-top: 14px; }

@media (max-width: 1024px) {
    .start-text__reihe { gap: 24px; }
    .start-text__reihe--3,
    .start-text__reihe--4,
    .start-text__reihe--5 { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 1024px) {
    /*
     * Der Titel im Kasten muss mit: seit die Ueberschriften der Leiter aus
     * components/seitentext.css auf dem Telefon kleiner werden (h2 20, h3
     * 18), stand er mit seinen 23.8 Punkten groesser da als die
     * Kapitelueberschrift darueber. Er folgt jetzt den Stufen der h3, in
     * deren Groesse er auch am Schreibtisch liegt.
     */
    .inhaltsseite .start-text__reihe:not(.start-text__reihe--1) .start-text__box h4 { font-size: 20px; }
}

@media (max-width: 600px) {
    .start-text__reihe,
    .start-text__reihe--2,
    .start-text__reihe--3,
    .start-text__reihe--4,
    .start-text__reihe--5 { grid-template-columns: 1fr; }
    .start-text__reihe:not(.start-text__reihe--1) .start-text__box > div:first-child { font-size: 54px; }
    .inhaltsseite .start-text__reihe:not(.start-text__reihe--1) .start-text__box h4 { font-size: 18px; }
}

/* ------------------------------------------------ Aufzaehlung mit Symbol */

/*
 * Kadence legt im Export nur eine leere Huelle ab und zeichnet das Symbol
 * erst im Browser. Ohne das Plugin blieben die Haken vor den Vorzuegen leer.
 * build/kadence.js setzt die drei Zeichnungen ein, die vorkommen, und
 * benennt die Klassen auf unsere eigenen um.
 *
 * Gemessen an realestepona.com/sell-your-property/:
 *   Liste    Raster, Abstand 10, ohne Punkte
 *   Symbol   20 x 20, Strich rgb(105, 164, 59), 10 Luecke zum Text
 *   Text     20 / 28.9
 */
.start-text__inhalt .text-symbolliste {
    display: grid;
    gap: 10px;
    /* Im Original ohne Rand — die 10 unten kamen oben auf das Polster der Karte. */
    margin: 0;
    padding: 0;
    list-style: none;
}

.start-text__inhalt .text-symbolliste > li {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin: 0;
    padding: 0;
    /*
     * Die Groesse kommt vom Block selbst (siehe symbollistenMassnehmen in
     * build/kadence.js): 18px in der Gegenueberstellung auf
     * /real-estate-agent-estepona/, 20px in den Vorzuegen auf
     * /sell-your-property/. 20px ist der Rueckfall, wenn der Block keine
     * nennt.
     */
    font-size: inherit;
    /*
     * Die Zeilenhoehe kommt aus dem Fliesstext und wird nicht mit der
     * Schriftgroesse groesser — im Original stehen die Punkte der
     * Gegenueberstellung in 18px auf 28.9px Zeile.
     */
    line-height: inherit;
    list-style: none;
}

.start-text__inhalt .text-symbolliste { font-size: 20px; }

.start-text__inhalt .text-symbolliste > li::marker { content: none; }

.text-symbol {
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
    /* Auf die erste Textzeile ausgerichtet, nicht auf den Kastenanfang. */
    margin-top: 4px;
    color: rgb(105, 164, 59);
}

@media (max-width: 767px) {
    .start-text__inhalt .text-symbolliste { font-size: 17px; }
}

/* --------------------------------------------------------- Knopf im Text */

/*
 * Knoepfe, die im Text stehen ("Get into contact"). Kadence legt sie teils
 * nur als Blockangabe ab; build/kadence.js baut daraus ein <a>. Aussehen wie
 * die uebrigen Knoepfe der Seite.
 */
.start-text__inhalt .text-knopf,
.start-text__inhalt .kt-button {
    display: inline-block;
    /* Ohne eigenen Rand: der Abstand kommt aus dem Polster der Reihe. */
    margin: 0;
    /* Gemessen am Original: 44px hoch, 2px Sperrung, Zeile 24. */
    padding: 11px 28px 9px;
    border-radius: 20px;
    background: var(--color-gold);
    color: #fff;
    font-size: 15px;
    font-weight: 400;
    line-height: 24px;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
    transition: background 0.2s;
}

.start-text__inhalt .text-knopf:hover,
.start-text__inhalt .kt-button:hover { background: #202732; color: #fff; }

/* Steht der Knopf allein in seinem Absatz, sitzt er mittig wie im Original. */
/*
 * Steht der Knopf allein in seinem Absatz, sitzt er mittig wie im Original —
 * ohne eigenen Rand. Der Abstand kommt aus dem Polster der Reihe.
 */
.start-text__inhalt .text-knopf:only-child { display: block; width: max-content; margin-inline: auto; }

/* --------------------------------- Textspalte und Schriften der Inhalte */

/*
 * Die Inhaltsseiten sind breiter gesetzt als die Listenseiten. Gemessen an
 * realestepona.com bei 1600 Fensterbreite, jeweils dieselbe Textstelle:
 *
 *   Reihe ohne maxWidth   1360 breit, linker Rand 120   (Einleitung)
 *   Reihe mit maxWidth    1200, darin 3 Karten zu 379   (Preispakete)
 *   H2                    Roboto Condensed 44.2 / 53.04 / Gewicht 300
 *
 * Auf den Listenseiten bleibt es bei 960 — dort ist der Text ein Artikel
 * und keine Seitenanlage.
 */
.inhaltsseite .start-text__inhalt {
    max-width: none;
    /*
     * Das Mass des Fliesstextes, damit auch blosse <div> aus dem Export es
     * erben. Ohne das fielen sie auf die Groesse des Dokuments (18) zurueck,
     * waehrend im Original 17 dastand — zu sehen an "Selling your Property
     * with" ueber der Gegenueberstellung.
     */
    font-size: 17px;
    line-height: 28.9px;
}

/*
 * Die Ueberschriften der Inhaltsseiten stehen in
 * components/seitentext.css — dieselbe Leiter wie auf allen anderen Seiten.
 *
 * Hier standen zwei Saetze nebeneinander, beide am Original gemessen:
 *
 *              ausserhalb des Artikels          im Artikel
 *   h2         Condensed 44.2 / 53.04 / 300     Roboto 40.8 / 48.96 / 600
 *   h3         Condensed 30.6 / 42.84 / 300     Roboto 22.1 / 30.94 / 600
 *   h4         Condensed 23.8 / 33.32 / 400     Roboto 20.4 / 28.56 / 600
 *   h5         —                                Roboto 20.4 / 30.6  / 600
 *
 * Der Unterschied kam aus dem alten Theme: der Artikelteil trug dort die
 * Klasse "ownersContent" und damit Roboto in schweren Schnitten. Auf
 * /rental-services/ standen deshalb drei Schriftbilder auf einer Seite. Das
 * ist aufgegeben; es gilt die Leiter der Listenseiten, auch das Versal der
 * h3 und h5 faellt weg.
 */

/*
 * Verweise im Fliesstext stehen im helleren Gold. Gemessen auf vier Seiten
 * des Originals, immer #CCAB86 — das var(--color-gold), das hier galt, kommt von der
 * Startseite und war hier falsch.
 */
.inhaltsseite .start-text__inhalt a:not(.text-knopf):not(.kt-button) { color: #CCAB86; }

/*
 * Eine Seite, die ganz Artikel ist: /sell-your-property/selling-property-
 * in-estepona/. Im Original steht sie in 800 Punkten, mittig — gemessen
 * bei 1500 Fensterbreite, Inhalt von 350 bis 1150.
 */
.inhaltsseite .start-text__inhalt--artikel {
    max-width: 800px;
    margin-inline: auto;
}

/*
 * Ein durchlaufender Rechtstext (Datenschutz) hat keine Reihen, die den
 * Abstand tragen: dort steht jede Ueberschrift mitten im Fluss und braucht
 * ihn selbst. Auf den uebrigen Seiten waere das falsch — da kommt die Luft
 * aus dem Polster der Reihe, und die Ueberschrift sitzt mit -6 sogar leicht
 * darueber.
 *
 * Muss hinter den Artikelregeln stehen: beide sind gleich stark, es
 * entscheidet die Reihenfolge.
 */
.inhaltsseite .rechtstext h1 { margin-bottom: 24px; }
.inhaltsseite .rechtstext h2 { margin-top: 48px; }
.inhaltsseite .rechtstext h3 { margin-top: 32px; }

/*
 * Keine Regel fuer das erste Kind mehr: Rand und Polster der Ueberschriften
 * stehen am Block und werden uebernommen (siehe ueberschriftenMassnehmen in
 * build/kadence.js). Eine Regel hier riete nur daran herum — auf
 * /sell-your-property/ hat die zweite h2 im Original 40 oben, obwohl sie das
 * erste Kind ihrer Spalte ist.
 */

/*
 * Eine eingeengte Reihe mit einer Spalte ist der Artikelteil: Reihe 1200,
 * Seitenabstand 120, innen also 960 — wie auf der Live-Seite. Eine
 * eingeengte Reihe mit mehreren Spalten sind die Karten, die stehen in
 * vollen 1200.
 */
.inhaltsseite .start-text__reihe--schmal {
    max-width: 1200px;
    margin-inline: auto;
}

/*
 * Kartenreihen auf dem Telefon: im Satzspiegel, und sechs Kaesten statt
 * zweimal drei.
 *
 * Der Export gibt ihnen dort ein eigenes Seitenpolster von 20, waehrend
 * Ueberschrift und Fliesstext darueber bis an den Rand der Spalte laufen —
 * die Kaesten standen eingerueckt unter einem Text, der weiter nach aussen
 * reicht. Die Breite am Schirm (1200, eingerueckt) bleibt wie im Original.
 *
 * Und zwei Reihen zu dreien sind sechs Kaesten und nicht zwei Gruppen: ihr
 * Abstand untereinander kam aus zwei Polstern des Exports und war 30 gegen
 * 32 zwischen den Spalten. Jetzt traegt ihn der Rasterabstand — dafuer
 * faellt das Polster unter einer Reihe weg, *die eine weitere vor sich hat*,
 * und die folgende bekommt ihre 32 oben. Das Polster unter der letzten
 * bleibt stehen: es traegt den Abstand zur Fussnote darunter.
 */
.inhaltsseite .start-text__reihe--2:has(.start-text__box),
.inhaltsseite .start-text__reihe--3:has(.start-text__box),
.inhaltsseite .start-text__reihe--4:has(.start-text__box) {
    padding-inline: 0;
}

.inhaltsseite .start-text__reihe--2:has(.start-text__box):has(+ .start-text__reihe--2),
.inhaltsseite .start-text__reihe--3:has(.start-text__box):has(+ .start-text__reihe--3),
.inhaltsseite .start-text__reihe--4:has(.start-text__box):has(+ .start-text__reihe--4) {
    padding-bottom: 0;
}

.inhaltsseite .start-text__reihe--2:has(.start-text__box)
    + .start-text__reihe--2:has(.start-text__box),
.inhaltsseite .start-text__reihe--3:has(.start-text__box)
    + .start-text__reihe--3:has(.start-text__box),
.inhaltsseite .start-text__reihe--4:has(.start-text__box)
    + .start-text__reihe--4:has(.start-text__box) {
    padding-top: 32px;
}

/* Schmaler ist der Rasterabstand 24 — dann auch der zwischen den Reihen. */
@media (max-width: 1024px) {
    .inhaltsseite .start-text__reihe--2:has(.start-text__box)
        + .start-text__reihe--2:has(.start-text__box),
    .inhaltsseite .start-text__reihe--3:has(.start-text__box)
        + .start-text__reihe--3:has(.start-text__box),
    .inhaltsseite .start-text__reihe--4:has(.start-text__box)
        + .start-text__reihe--4:has(.start-text__box) {
        padding-top: 24px;
    }
}

/*
 * Nur Reihen, die im Export ein maxWidth tragen, werden eingeengt. Die
 * Einleitungsreihen haben keines und laufen ueber die volle Breite — 1360
 * bei 1600 Fensterbreite.
 */
.start-text__reihe--schmal {
    max-width: 1200px;
    margin-inline: auto;
}

/*
 * Spalten, die im Export auf Mitte stehen. Das betrifft die Einleitung von
 * /sell-your-property/ und /rental-services/ — dort ist alles zentriert,
 * waehrend der Fliesstext darunter linksbuendig bleibt.
 */
.start-text__spalte--mitte,
.start-text__spalte--mitte h2,
.start-text__spalte--mitte h3,
.start-text__spalte--mitte p { text-align: center; }

/*
 * In einer zentrierten Spalte steht die Aufzaehlung mittig, ihr Text aber
 * weiter linksbuendig: der Punkt laeuft ueber die volle Breite und schiebt
 * Symbol und Text zusammen in die Mitte. Nachgemessen auf der Live-Seite —
 * dort ist das li 1360 breit und sein Text links ausgerichtet.
 */
.start-text__spalte--mitte .text-symbolliste > li {
    justify-content: center;
    text-align: left;
}

/*
 * Die h1 mitten im Fliesstext — auf /sell-your-property/selling-property-in-
 * estepona/ traegt der Text selbst die Ueberschrift — und die Groessen fuer
 * das Telefon stehen in components/seitentext.css. Hier lagen sie bei
 * Roboto 40.8 / 44.88 / Gewicht 600.
 */

/*
 * Die Fragen stehen auf Artikelbreite, nicht ueber die ganze Seite — auf
 * /rental-services/ gemessen: 960 statt 1345.
 *
 * Das gilt fuer den Aufklappteil, der fuer sich steht. Steht er im Text, hat
 * die Spalte diese Breite schon; siehe weiter unten.
 */
.inhaltsseite .objekt-faq {
    max-width: 1200px;
    margin-inline: auto;
    padding-inline: 120px;
}

@media (max-width: 1400px) {
    .inhaltsseite .objekt-faq { padding-inline: 40px; }
}

@media (max-width: 767px) {
    .inhaltsseite .objekt-faq { padding-inline: 0; }
}

/*
 * Im Text zaehlt die Spalte.
 *
 * Seit der Aufklappteil an seiner Stelle im Text steht und nicht mehr am
 * Seitenende, sitzt er in einer Spalte, die schon auf 960px eingeengt ist.
 * Seine eigene Einengung kaeme oben drauf: gemessen 720px statt 960px, und
 * die Fragen sprangen 113px nach rechts weg von ihrer Ueberschrift.
 */
.inhaltsseite .start-text__spalte .objekt-faq {
    max-width: none;
    margin-inline: 0;
    padding-inline: 0;
}

/* --------------------------------------------- Karten mit eigener Flaeche */

/*
 * Die Gegenueberstellung auf /real-estate-agent-estepona/: jede Zeile ist
 * eine eigene Flaeche. Die Farbe steht am Block (sie wechselt je Zeile), das
 * Mass steht hier.
 *
 * Gemessen am Original, 1500 Fensterbreite:
 *   Polster innen      24px   (Kadence: padding "sm" an der Spalte)
 *   Abstand zur naechsten 8px (Kadence: margin "xxs" an der Reihe)
 *   Ecken              eckig
 * Andere Masse kommen im ganzen Export nicht vor; taucht eines auf, faellt
 * es im Seitenvergleich auf (node tests/vergleich.js).
 */
/*
 * Innerhalb einer Karte sitzt der Inhalt ohne weiteren Abstand: das Polster
 * der Karte ist der Abstand.
 */
.start-text__reihe--kasten > .start-text__spalte > :first-child { margin-top: 0; }

/*
 * Steht die Flaeche voll im Ton der Marke, traegt sie weisse Schrift — so die
 * Zeile "Potential Client Reach in 3 months" im Original.
 */
.start-text__reihe--kasten[style*="rgb(170, 141, 112)"],
.start-text__reihe--kasten[style*="rgb(136, 136, 136)"] {
    color: #fff;
}
.start-text__reihe--kasten[style*="rgb(170, 141, 112)"] *,
.start-text__reihe--kasten[style*="rgb(136, 136, 136)"] * { color: inherit; }

/*
 * Ein Knopf gleich hinter der Hakenliste klebte an ihr — weder die Liste noch
 * die Knopfhuelle bringen einen Abstand mit. Im Original sind es 10 Punkte;
 * das ist hier zu wenig, weil unsere Eintraege oft zweizeilig umbrechen und
 * der Knopf dann zur letzten Zeile zu gehoeren scheint. 24, wie die uebrigen
 * senkrechten Abstaende der Inhaltsseiten.
 */
.wp-block-kadence-iconlist + .wp-block-kadence-advancedbtn { margin-top: 24px; }

/* ------------------------------------------ Umschalter der Gegenueberstellung */

/*
 * Am Schirm stehen beide Listen nebeneinander, der Umschalter ist dort
 * ueberfluessig. Auf dem Telefon ist es umgekehrt: dort traegt er die Wahl,
 * und die Ueberschriftskaesten der Spalten entfallen — ihre Worte stehen auf
 * den Knoepfen.
 */
.vergleich-schalter { display: none; }

@media (max-width: 767px) {
    .vergleich-schalter {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 8px;
        margin: 0 0 16px;
    }

    .vergleich-schalter__knopf {
        min-height: 48px;
        padding: 8px 10px;
        border: 1px solid #d8cec2;
        border-radius: 24px;
        background: #fff;
        color: #202732;
        font-family: 'Roboto Condensed', Roboto, sans-serif;
        font-size: 16px;
        font-weight: 500;
        line-height: 1.2;
        cursor: pointer;
    }

    .vergleich-schalter__knopf.ist-aktiv {
        background: var(--color-gold, var(--color-gold));
        border-color: var(--color-gold, var(--color-gold));
        color: #fff;
    }

    /* Die abgewaehlte Spalte ist weg, die gewaehlte nimmt die Breite. */
    [data-vergleich][data-vergleich-aktiv="0"] > .start-text__spalte:nth-of-type(2),
    [data-vergleich][data-vergleich-aktiv="1"] > .start-text__spalte:nth-of-type(1) {
        display: none;
    }

    /*
     * Der erste Kasten jeder Spalte ist ihre Ueberschrift ("Selling your
     * Property with realEstepona"). Sie steht jetzt auf dem Knopf darueber
     * und waere hier ein zweites Mal dasselbe.
     */
    [data-vergleich-aktiv] > .start-text__spalte > .start-text__reihe--kasten:first-child {
        display: none;
    }
}

/* ------------------------------------------- Kontaktformular im Fenster */

/*
 * Auf /rental-services/, /sell-your-property/ und /premium-partner/ liegt das
 * Formular im Original nicht im Seitenfluss, sondern in einem Fenster: die
 * Seite endet mit dem Knopf "Get into contact", und erst der oeffnet es.
 *
 * Die Flaeche selbst kommt aus objekt-detail.css — es ist dieselbe wie bei
 * Exposé und Besichtigung. Hier steht nur, was ein Knopf im Text braucht.
 */
.start-text__inhalt .text-knopf[data-fenster-auf],
.start-text__inhalt .kt-button[data-fenster-auf] { cursor: pointer; }


/*
 * Der Abschluss der Seite.
 *
 * Im Original traegt die letzte Reihe 100px Polster nach unten, und nichts
 * darin hat einen eigenen Abstand. Bei uns kommen die 100px vom Abschnitt —
 * der Abstand der letzten Reihe und der des letzten Knopfes darin kaemen also
 * oben drauf. Gemessen: 164px statt 100px Luft vor dem Fussbereich.
 */
.start-text__inhalt > .start-text__reihe:last-child { margin-bottom: 0; }
.start-text__inhalt > .start-text__reihe:last-child .start-text__spalte > :last-child,
.start-text__inhalt > .start-text__reihe:last-child .text-knopf:only-child { margin-bottom: 0; }


/* ---- aus realEstepona components/objekt-detail.css (Fenster) ---- */
/* --------------------------------------------------- Fenster ueber der Seite */

/*
 * Gemessen: Grund rgba(0,0,0,.6) ueber dem ganzen Fenster, darueber eine
 * weisse Flaeche von 600 Breite. Sie liegt oben und nicht mittig, damit ein
 * langes Formular auf kleinen Schirmen nicht oben abgeschnitten wird.
 */
.objekt-fenster {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    padding: 40px 20px;
    overflow-y: auto;
}

.objekt-fenster[hidden] { display: none; }

.objekt-fenster__grund {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.6);
}

.objekt-fenster__kasten {
    position: relative;
    width: 600px;
    max-width: 100%;
    background: #fff;
    padding: 40px;
}

/* Die Seite darunter steht still, solange ein Fenster offen ist. */
body.fenster-offen { overflow: hidden; }

.objekt-fenster__zu {
    position: absolute;
    top: 10px;
    right: 14px;
    width: 32px;
    height: 32px;
    padding: 0;
    border: 0;
    background: none;
    font-size: 30px;
    line-height: 1;
    color: #202732;
    cursor: pointer;
}

.objekt-fenster__zu:hover { color: var(--color-gold); }

.objekt-fenster__titel {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 30.6px;
    font-weight: 300;
    line-height: 42.84px;
    color: #202732;
    margin: 0 30px 0 0;
}

.objekt-fenster__text {
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
    margin: 0 0 22px;
}

/* ------------------------------------------------------------- Formular */

@media (max-width: 767px) {
    .objekt-fenster { padding: 20px 12px; }
    .objekt-fenster__kasten { padding: 28px 20px; }
    .objekt-fenster__titel { font-size: 24px; line-height: 1.25; }
}

/* Luxury Marbella: das Verkaufsformular (contact-form) im weissen Fenster —
   im Kontaktframe steht es auf Navy, die Beschriftungen sind dort weiss. */
.objekt-fenster .form-field label { color: #202732; }
.objekt-fenster .contact-form { margin-top: 18px; }


/* === components/luxury-marbella.css === */
/*
 * Luxury Marbella: die "negative" Optik der Startseite.
 *
 * Alles darueber ist newEstepona 1:1. Diese Datei steht als letzte im Bundle
 * (build/assets.js) und haelt nur die Abweichungen — so bleiben die
 * newEstepona-Dateien unveraendert und mit dem Schwesterprojekt vergleichbar.
 *
 * Vorbild ist die alte WordPress-Startseite (Kadence-Export + Messung am
 * 17.10.2026): Hero-Banner, Kachelzeile und der Block "Find your luxury
 * property" mit Filtern und Raster stehen auf Navy (palette1). Der Block geht
 * ueber die volle Breite, mit 100px Innenabstand links und rechts; die Karten
 * bleiben weiss. SEO-Text, FAQ und Fuss bleiben hell wie dort. Dasselbe gilt
 * fuer die Kategorieseiten; das dunkle Banner auch fuer das Expose.
 */
:root {
    --lm-navy: var(--global-palette1);
    --lm-navy-tief: #23262c;          /* Kachel-Unterschriften der alten Seite */
    --lm-feld: #3a414d;               /* Filterfelder auf Navy */
    --lm-kontur: #3f4958;             /* 1px-Kontur von Karten und Hero-Banner der alten Seite */
    --lm-text-hell: #ffffff;
    --lm-text-gedimmt: rgba(255, 255, 255, 0.78);

    /* CI-Farbe von Luxury Marbella ist #ccab86 (palette3) — ueberall, wo
       newEstepona sein Gold (#aa8d70) nimmt. Hover eine Stufe dunkler. */
    --color-gold: var(--global-palette3);
    --color-gold-hover: var(--global-palette2);
}

/* Pfeil und Lupe der Filterfelder stecken als SVG in der Adresse, dort greift
   kein Token — darum hier dieselben Bilder in der CI-Farbe. */
.filter-bar select {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6' fill='%23ccab86'/%3E%3C/svg%3E");
}
.filter-suche {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='6.8' cy='6.8' r='4.8' fill='none' stroke='%23ccab86' stroke-width='1.6'/%3E%3Cpath d='M10.4 10.4 L14.6 14.6' stroke='%23ccab86' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
}

/* Hero: Banner dunkel statt weiss, Ueberschrift weiss, Unterzeile in CI-Farbe.
   Verlauf und Kontur wie auf der alten Seite (unten Navy, oben 70 %). */
.homepage .homepage-hero__overlay,
.listing-hero__overlay,
.project-title-overlay {
    background: linear-gradient(0deg, var(--lm-navy) 0%, rgba(32, 39, 50, 0.7) 100%);
    border: 1px solid var(--lm-kontur);
}
.homepage .homepage-hero__overlay h2,
.listing-hero__overlay h1,
.listing-hero__overlay h2,
.project-title-overlay h1 { color: var(--lm-text-hell); }
.homepage .homepage-hero__overlay p,
.listing-hero__overlay p,
.project-title-overlay p  { color: var(--color-gold); }

/* Kachelzeile auf Navy, ueber die volle Breite. */
.homepage > .category-cards-section {
    background: var(--lm-navy);
    padding: 20px 20px 0;
}
.homepage .category-card {
    box-shadow: none;
    border: 1px solid var(--lm-kontur);
}
.homepage .category-card__text {
    background: linear-gradient(0deg, var(--lm-navy-tief) 0%, var(--lm-navy) 100%);
}
.homepage .category-card__title { color: var(--lm-text-hell); }
.homepage .category-card__desc  { color: var(--color-gold); }

/* Suche + Raster: volle Breite statt 1220px, 100px Rand, Navy. */
:is(.homepage, .listing-page) > .search-section {
    max-width: none;
    margin: 0;
    padding: 100px 100px 80px;
    background: var(--lm-navy);
}
:is(.homepage, .listing-page) > .search-section h2 { color: var(--lm-text-hell); }
:is(.homepage, .listing-page) > .search-section .search-section__subtitle { color: var(--lm-text-gedimmt); }
:is(.homepage, .listing-page) > .search-section .filter-bar { max-width: none; }
:is(.homepage, .listing-page) > .search-section .project-grid__leer { color: var(--lm-text-gedimmt); }

/* Filterfelder dunkel mit heller Schrift, wie auf der alten Seite. */
:is(.homepage, .listing-page) > .search-section .filter-bar select,
:is(.homepage, .listing-page) > .search-section .filter-suche {
    background-color: var(--lm-feld);
    border-color: var(--lm-feld);
    color: var(--lm-text-hell);
}
:is(.homepage, .listing-page) > .search-section .filter-suche::placeholder { color: var(--lm-text-gedimmt); }
:is(.homepage, .listing-page) > .search-section .filter-bar select option {
    background: var(--lm-feld);
    color: var(--lm-text-hell);
}

/* Karten auf Navy: der helle Schatten verschwindet, ein dunkler hebt sie ab. */
:is(.homepage, .listing-page) > .search-section .project-grid-card__inner { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06); }

/* Tablet und Telefon: der Rand schrumpft mit, die Flaeche bleibt dunkel. */
@media (max-width: 1024px) {
    :is(.homepage, .listing-page) > .search-section { padding: 60px 50px; }
}
@media (max-width: 768px) {
    :is(.homepage, .listing-page) > .search-section { padding: 40px 20px; }
    .homepage > .category-cards-section { padding: 20px 20px 0; }
}

/* Info-Text: so breit wie der Kontaktrahmen (1200, ohne seitlichen Innenabstand),
   Ueberschriften ohne Versalien und deutlich abgestuft — H1 > H2 > H3 erkennbar. */
.info-text__content-inner {
    padding-left: 0;
    padding-right: 0;
}
.info-text__content h1 {
    font-size: 36px;
    line-height: 1.2;
    font-weight: 300;
    text-transform: none;
    margin: 0 0 14px;
}
.info-text__content h2 {
    font-size: 28px;
    line-height: 1.25;
    font-weight: 300;
    text-transform: none;
    margin: 40px 0 12px;
}
.info-text__content h3 {
    font-size: 21.6px;
    line-height: 1.3;
    font-weight: 500;
    text-transform: none;
    margin: 26px 0 8px;
}

/* Expose: H1 im Hero wie die H2 "Find your luxury property" auf der Startseite —
   ohne Versalien, gleiche Groesse (--schrift-abschnitt, mobil kleiner) und Staerke. */
.objekt-seite .project-title-overlay h1 {
    font-family: var(--font-heading);
    font-size: var(--schrift-abschnitt);
    font-weight: 300;
    line-height: 1.2;
    text-transform: none;
}

/* Expose: Text im Hero-Banner im Satzspiegel von 1200 px (Banner selbst bleibt vollbreit). */
.objekt-seite .project-title-overlay > * {
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
}

/* ------------------------------------------------------------------------
 * Expose-Aufbau (Absprache 18.10.2026)
 * Hero: Titel, darunter Ort · Preis. Dann Beschreibung links und Eckdaten
 * als Tabelle rechts, die Galerie, und die Ausstattung vierspaltig im
 * dunklen Rahmen. Markup: api/objekt-ansicht.php.
 * ------------------------------------------------------------------------ */
.objekt-ueberblick { padding: 100px var(--container-padding); background: #fff; }
.objekt-ueberblick__inner {
    max-width: 1200px; margin: 0 auto;
    display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 100px; align-items: start;
}
/* Ueberschriften des Exposes nach der Leiter von realEstepona (components/seitentext.css):
   h2 36/1.2, h3 23/1.4, alle Gewicht 300, ohne Versal; Absatz 17/1.7/300 in #333.
   Mobil 23/20 bzw. 20/18 wie dort. */
:where(.objekt-ueberblick, .objekt-ausstattung) :is(h2, h3) {
    font-family: var(--font-heading); font-weight: 300; text-transform: none; color: #202732;
}
:where(.objekt-ueberblick, .objekt-ausstattung) h2 { font-size: 36px; line-height: 1.2; margin: 30px 0 10px; }
:where(.objekt-ueberblick, .objekt-ausstattung) h3 { font-size: 23px; line-height: 1.4; margin: 20px 0 8px; }
/* Spaltenkoepfe "Property Description" und "Property Details": keine Ueberschrift, sondern
   ein Etikett in der CI-Farbe, in Versalien. */
.objekt-ueberblick__kopf {
    font-family: var(--font-heading); font-size: 24px; font-weight: 400; line-height: 1.3;
    text-transform: uppercase; color: var(--color-gold); margin: 0 0 18px;
}

/* Beschreibung: linksbuendig, ruhige Lesegroesse; Zwischenueberschriften des Textes abgestuft. */
.objekt-beschreibung { font-size: 17px; font-weight: 300; line-height: 1.7; color: #333; }
.objekt-beschreibung p { margin: 0 0 14px; }
.objekt-beschreibung > :first-child { margin-top: 0; }
/* Gekappt mit weichem Uebergang (assets/js/src/objekt-beschreibung.js). */
.objekt-beschreibung.lm-klappe { position: relative; overflow: hidden; }
.objekt-beschreibung.lm-klappe::after {
    content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 180px;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff); pointer-events: none;
}
.objekt-beschreibung.lm-klappe.offen { overflow: visible; }
.objekt-beschreibung.lm-klappe.offen::after { display: none; }
/* Knopf in der CI-Knopfklasse der Seite (.btn.btn--primary, components/buttons.css). */
.lm-klappe-knopf { margin-top: 18px; }

/* Eckdaten: Tabelle im Zebra, feine Linien in der CI-Farbe oben und unten. */
.objekt-daten {
    width: 100%; border-collapse: collapse;
    border-top: 2px solid var(--color-gold); border-bottom: 1px solid var(--color-gold);
}
.objekt-daten tr:nth-child(odd)  { background: #f7f3ee; }
.objekt-daten tr:nth-child(even) { background: #fff; }
.objekt-daten th, .objekt-daten td { padding: 13px 18px; vertical-align: baseline; }
.objekt-daten th {
    text-align: left; font-family: var(--font-body); font-size: 12.6px; font-weight: 400;
    letter-spacing: .1em; text-transform: uppercase; color: #6b6f76; white-space: nowrap;
}
.objekt-daten td { text-align: right; font-size: 16px; font-weight: 400; color: #202732; }
.objekt-daten tr:first-child td { font-size: 19px; font-weight: 600; color: #202732; }

/* Ausstattung: vierspaltig im dunklen Rahmen. */
.objekt-ausstattung { padding: 90px var(--container-padding); background: var(--lm-navy); }
.objekt-ausstattung__inner { max-width: 1200px; margin: 0 auto; }
.objekt-ausstattung h2 { color: var(--lm-text-hell); margin: 0 0 30px; }
.objekt-ausstattung__gruppen {
    padding: 32px 36px; border: 1px solid var(--lm-kontur);
    column-count: 4; column-gap: 36px;
}
/* Eine Kategorie bricht nie ueber zwei Spalten. */
.objekt-ausstattung__gruppe { break-inside: avoid; margin: 0 0 26px; }
.objekt-ausstattung__kategorie {
    font-family: var(--font-body); font-size: 12.6px; font-weight: 500; line-height: 1.4;
    letter-spacing: .12em; text-transform: uppercase; color: var(--color-gold); margin: 0 0 8px;
}
.objekt-ausstattung__liste { list-style: none; margin: 0; padding: 0; }
.objekt-ausstattung__liste li {
    position: relative; padding-left: 22px; font-size: 15.3px; font-weight: 300; line-height: 1.7;
    color: var(--lm-text-gedimmt);
}
.objekt-ausstattung__liste li::before { content: '\2713'; position: absolute; left: 0; color: var(--color-gold); font-weight: 700; }

@media (max-width: 1024px) {
    .objekt-ausstattung__gruppen { column-count: 3; }
    :where(.objekt-ueberblick, .objekt-ausstattung) h2 { font-size: 23px; }
    :where(.objekt-ueberblick, .objekt-ausstattung) h3 { font-size: 20px; }
}
@media (max-width: 900px) {
    .objekt-ueberblick { padding: 50px 20px 60px; }
    .objekt-ueberblick__inner { grid-template-columns: 1fr; gap: 44px; }
    .objekt-ausstattung { padding: 60px 20px; }
    .objekt-ausstattung__gruppen { column-count: 2; padding: 24px 20px; }
}
@media (max-width: 600px) {
    :where(.objekt-ueberblick, .objekt-ausstattung) h2 { font-size: 20px; }
    :where(.objekt-ueberblick, .objekt-ausstattung) h3 { font-size: 18px; }
}
@media (max-width: 480px) {
    .objekt-ausstattung__gruppen { column-count: 1; }
    .objekt-daten th, .objekt-daten td { padding: 11px 12px; }
}

/* Banner-Ueberschrift der Listenseiten als H2, sobald der Info-Text die H1 traegt —
   dieselbe Gestalt wie die H1 (components/hero.css). */
.listing-hero__overlay h2 {
    font-family: var(--font-heading);
    font-size: clamp(28px, 9vw, var(--hero-max));
    font-weight: 300;
    text-transform: uppercase;
    line-height: 1.1;
    margin: 0;
}

/* Lagefeld: Hauptorte (Gemeinden) in 500, Stadtteile bleiben duenn. */
.filter-bar select option.ist-hauptort { font-weight: 500; }

/* Sprungziel der Filterleiste (action="#objekte"): nicht unter dem festen Kopf verschwinden. */
#objekte { scroll-margin-top: calc(var(--header-height) + 20px); }

/* Ohne Sprachwahl (nur eine Sprache) bleibt kein leerer Platz im Kopf. */
.nav-lang:empty { display: none; }
