/* === 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 */

    --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;
    /*
     * Kein -webkit-font-smoothing: antialiased. Das schaltet die
     * Subpixel-Glaettung ab (ClearType unter Windows, Subpixel-AA unter
     * macOS) und laesst jede Schrift duenner und weicher aussehen, als sie
     * ist — bei Gewicht 300 besonders deutlich. Die Live-Seite setzt es
     * nicht, deshalb setzen wir es auch nicht.
     */
}
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;
}
/*
 * Keine Grossbuchstaben. Die Regel kam von newEstepona, dort sind die
 * Ueberschriften versal; auf realestepona.com ist kein h1 versal — nachgemessen
 * auf /apartments/ und /rental-services/, beide text-transform: none. Sie
 * wirkte bisher auch auf der Startseite, fiel dort aber nicht auf, weil deren
 * h1 im zugeklappten Aufklapptext sitzt.
 */
h1 { font-size: 3.6em; 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/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: 100vw; 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: die Vorwahlliste.
 *
 * Nicht mehr auf .contact-form eingeschraenkt. Diese Regeln beschreiben das
 * Telefonfeld und nicht ein bestimmtes Formular — mit der Einschraenkung
 * haette jedes weitere Formular (Exposé, Besichtigung, Property Alarm, der
 * Aufruf unter den Inhaltsseiten) eine ungestaltete Liste bekommen, und zwar
 * jedes Mal unbemerkt.
 *
 * Das !important bleibt: die Bibliothek bringt eigenes CSS mit, das spaeter
 * geladen wird.
 */
.iti { width: 100%; }
.iti__dropdown-content { background: #fff !important; border: 1px solid #ccc !important; max-height: 200px; z-index: 100; }
.iti__country-list { background: #fff !important; color: #333 !important; }
.iti__country-list .iti__country { color: #333 !important; background: #fff !important; }
.iti__country-list .iti__country-name { color: #333 !important; }
.iti__country-list .iti__dial-code { color: #666 !important; }
.iti__country-list .iti__country:hover,
.iti__country-list .iti__highlight { background: #f0f0f0 !important; }
.iti__search-input { background: #fff !important; color: #333 !important; border: 1px solid #ccc !important; }
.iti__selected-dial-code { color: #333; }

.contact-form .iti { height: 38px; }

.btn--submit {
    display: inline-block; width: 150px;
    background: #AA8D70; 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;
    /*
     * min-height statt height: der Kasten soll so hoch werden wie das
     * Eingabefeld daneben, und das ist je Formular verschieden — 38 im
     * Kontaktformular, 45 im Objekt- und Alarmformular. Mit fester Hoehe
     * stand er sieben Punkte zu niedrig und die Zeile sass schief.
     */
    min-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;
    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); }

.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 === */
/*
 * Fusszeile — dunkelblauer Streifen mit kleiner heller Schrift, wie auf
 * realestepona.com (Grund #202732, 100 hoch, Verweise 12px).
 */
.site-footer {
    padding: 0 120px;
    background: #202732;
    border-top: 0;
    color: #fff;
}
.site-footer__inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 24px;
    min-height: 100px;
    padding: 14px 0;
}

@media (max-width: 1024px) {
    .site-footer { padding: 0 24px; }
}

@media (max-width: 767px) {
    .site-footer { padding: 0 20px; }
    .site-footer__inner {
        flex-direction: column;
        align-items: flex-start;
        gap: 12px;
        padding: 20px 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.
 */
/*
 * Alle Verweise im dunklen Fussbereich hell — auch die Schaltflaeche des
 * Info-Textes. Die traegt eine eigene Klasse und waere sonst als einzige
 * beige geblieben.
 */
.site-footer .footer-imprint,
.site-footer .info-text__toggle {
    color: rgba(255, 255, 255, 0.75);
}

.site-footer .footer-imprint:hover,
.site-footer .info-text__toggle:hover { color: #fff; }

.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;
    }
}

/*
 * Auf dem Telefon sind die drei Verweise der Fusszeile mit 12 Punkten Schrift
 * und 19 Punkten Hoehe kaum zu treffen. Sie bekommen dort 14 Punkte und eine
 * Zeilenhoehe von 44 — die Flaeche waechst, die Schrift bleibt zurueckhaltend.
 */
@media (max-width: 767px) {
    .footer-imprint,
    .site-footer .info-text__toggle {
        font-size: 14px;
        min-height: 44px;
        display: inline-flex;
        align-items: 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 der Unterseiten.
 *
 * Unter 768 Pixeln passt das Menue der Kopfzeile nicht mehr neben das Logo.
 * Vorher brach es einfach um und stand als siebenzeilige Liste offen im Kopf —
 * fast 190 Pixel, bevor der erste Treffer kam, und die Aufklappfelder waren
 * ohne Mauszeiger ohnehin nicht erreichbar. Jetzt uebernimmt ein Brennerknopf.
 *
 * Aufbau und Masse von newEstepona uebernommen. Zwei Dinge sind anders, und
 * zwar notwendigerweise:
 *   - Die Striche des Knopfes sind dunkel. Dort liegt die Kopfzeile ueber
 *     einem Foto und ist weiss; hier ist sie weiss und die Schrift dunkel.
 *   - Oben links steht das Negativ-Logo statt der Sprachwahl. Diese Seite ist
 *     einsprachig, und ein leerer Platz neben dem Kreuz saehe nach Fehler aus.
 */
.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: #202732;
    transition: transform 0.25s, opacity 0.2s;
}
/* Aufgeklappt wird aus den drei Strichen ein Kreuz. */
.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. Begaenne es unter der Kopfzeile, bliebe oben
       ein Streifen der Seite stehen und das Kreuz saesse ausserhalb der
       dunklen Flaeche. */
    inset: 0;
    z-index: 1000;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    /* Das Dunkelblau der Marke statt Schwarz — sonst steht ein zweiter,
       fremder Farbton in einer Seite, die sonst nur diesen einen kennt. */
    background: rgba(32, 39, 50, 0.98);
    padding: 0 16px 40px;
}
.menue-mobil[hidden] { display: none; }
.menue-mobil.ist-offen { display: block; }

/* Eigene Kopfzeile: Logo links, Kreuz rechts, auf Hoehe der Seitenkopfzeile. */
.menue-mobil__kopf {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 14px 0;
    margin-bottom: 6px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.menue-mobil__marke { flex: 0 0 auto; display: block; }
.menue-mobil__marke img { width: 180px; height: auto; display: block; }
.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 a {
    display: block;
    padding: 13px 0;
    color: #fff;
    font-family: Roboto, sans-serif;
    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); }
/* Die Seite, auf der man steht, in Gold — wie der dunkle Kasten am Schirm. */
.menue-mobil a[aria-current="page"] { color: var(--color-gold-light); }

.menue-mobil__gruppe {
    display: block;
    padding: 22px 0 6px;
    color: var(--color-gold);
    font-family: 'Roboto Condensed', Roboto, sans-serif;
    /* Einen Punkt groesser als die Eintraege darunter, dazu Versalien und
       Sperrung — so hebt sie sich ab, ohne fett zu sein. */
    font-size: 17px;
    font-weight: 400;
    text-transform: uppercase;
    letter-spacing: 0.06em;
}
.menue-mobil__trenner { display: block; height: 18px; }

/*
 * Ein Ast: Oberpunkt als Zusammenfassung, Unterpunkte darunter.
 *
 * Offen untereinander waren es 38 Verweise — zwei Bildschirmhoehen, bevor der
 * letzte Punkt kam. Zugeklappt sind es acht Zeilen.
 */
.menue-mobil__ast { display: block; }
.menue-mobil__ast > summary {
    list-style: none;
    cursor: pointer;
    position: relative;
    /*
     * Dieselbe Zeile wie ein Verweis: Polster, Farbe und Trennlinie. Ohne das
     * stand ein Ast ohne Linie zwischen zwei Verweisen mit Linie, und die
     * Reihe wirkte wie aus zwei Listen zusammengesetzt.
     */
    display: block;
    padding: 13px 28px 13px 0;
    color: #fff;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.menue-mobil__ast > summary:hover { color: var(--color-gold-light); }
/* Aufgeklappt gehoert die Linie unter den Ast, nicht unter die Zeile. */
.menue-mobil__ast[open] > summary { border-bottom-color: transparent; }
.menue-mobil__ast > summary::-webkit-details-marker { display: none; }

/* Das Zeichen rechts: ein Winkel, der sich beim Aufklappen dreht. */
.menue-mobil__ast > summary::after {
    content: '';
    position: absolute;
    right: 6px;
    top: 50%;
    width: 8px;
    height: 8px;
    margin-top: -6px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
    transition: transform 0.2s;
}
.menue-mobil__ast[open] > summary::after {
    transform: rotate(-135deg);
    margin-top: -2px;
}

/* Die Unterpunkte ruecken ein, damit die Gliederung zu sehen ist. */
.menue-mobil__zweige { padding-left: 14px; }

/*
 * "Show All Apartments" ist der Oberpunkt selbst. Er steht als erster
 * Eintrag im Ast, weil ein Verweis in einer Zusammenfassung beim Antippen
 * nur aufklappen wuerde statt zu folgen.
 */
.menue-mobil__alle { color: var(--color-gold-light); }


/*
 * Punkt der obersten Ebene. Etwas groesser und in der schmalen Schrift, damit
 * die Gliederung auch dann lesbar bleibt, wenn die Unterpunkte zweispaltig
 * darunter stehen.
 */
.menue-mobil__haupt {
    font-family: 'Roboto Condensed', Roboto, sans-serif;
    font-size: 19px;
    /*
     * 500 und nicht 400: nur drei Punkt groesser als die Eintraege darunter
     * war der Unterschied kaum zu sehen, und die Gliederung las sich als eine
     * lange Liste gleichwertiger Zeilen. Nicht 700 — das waere lauter als die
     * Gruppenueberschriften in Gold darueber.
     */
    font-weight: 500;
    letter-spacing: 0.01em;
    padding-top: 15px;
}


/* Aufgeklappt bleibt die Seite stehen, statt hinter dem Menue zu scrollen. */
body.menue-offen { overflow: hidden; }

/*
 * Wann der Knopf erscheint und was ihm weicht, steht in objektliste.css beim
 * uebrigen Kopfzeilen-Satz: diese Datei kommt im Buendel vorher und verloere
 * bei gleicher Spezifitaet gegen die dortigen Regeln.
 */

/*
 * Die Eintraege stehen zweispaltig, Gruppenueberschriften und Trenner laufen
 * ueber beide Spalten. Der laengste Eintrag ("Semi-Detached Houses") braucht
 * rund 150 Pixel; bei 360 Punkten Fensterbreite hat eine Spalte noch 152.
 * Darunter bleibt es einspaltig.
 */
/*
 * Die Unterpunkte eines offenen Astes stehen zweispaltig; die
 * Gruppenueberschriften laufen ueber beide Spalten.
 *
 * Erst ab 480 Punkten. Der breiteste Eintrag ist "Ground Floor Apartments"
 * mit 180 Punkten (gemessen); bei 390 Fensterbreite haette eine Spalte nach
 * Rand und Einzug nur 163 und der Eintrag braeche auf zwei Zeilen um. Ab 480
 * sind es 208 und er passt. Darunter bleibt es einspaltig — das Aufklappen
 * loest die Laenge ohnehin.
 */
@media (min-width: 480px) and (max-width: 767px) {
    .menue-mobil__zweige {
        display: grid;
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
        column-gap: 18px;
        align-content: start;
    }
    .menue-mobil__gruppe,
    .menue-mobil__alle { grid-column: 1 / -1; }
}


/* === components/suche-mobil.css === */
/*
 * Suche nach der Objektnummer auf dem Telefon.
 *
 * Auf breiten Schirmen steht im Kopf ein Feld, das beim Ueberfahren auf 180
 * Punkte aufklappt. Auf einem Telefon geht beides nicht: es gibt kein
 * Ueberfahren, und neben Logo und Brenner sind keine 180 Punkte frei. Dort
 * steht deshalb nur ein Knopf, und der oeffnet eine Flaeche mit einem Feld,
 * in das man wirklich tippen kann.
 *
 * Ohne JavaScript bleibt die Flaeche zu und der Knopf ist das, was er im
 * Quelltext ist: ein Verweis auf /suche/, wo dasselbe Feld in gross steht.
 */
.suchknopf-mobil {
    display: none;
    align-items: center;
    /*
     * Kein Abstand zwischen Wort und Lupe — gemessen steht es auf der alten
     * Seite genauso, und jeder Punkt dazwischen fehlt in einer Zeile, die
     * ohnehin knapp ist.
     */
    gap: 0;
    flex: 0 0 auto;
    height: 44px;
    padding: 0 2px;
    color: #202732;
    text-decoration: none;
}
.suchknopf-mobil__wort {
    font-family: Roboto, sans-serif;
    font-size: 16px;
    font-weight: 400;
    white-space: nowrap;
}
/* Ueber dem Titelbild der Startseite steht alles in Weiss. */
.suchknopf-mobil--hell { color: #fff; }

.suche-mobil {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 1000;
    overflow-y: auto;
    background: rgba(32, 39, 50, 0.98);
    padding: 0 16px 40px;
}
.suche-mobil[hidden] { display: none; }
.suche-mobil.ist-offen { display: block; }

.suche-mobil__kopf {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 14px 0;
    margin-bottom: 20px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.suche-mobil__titel {
    font-family: 'Roboto Condensed', Roboto, sans-serif;
    font-size: 19px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--color-gold);
}
.suche-mobil__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;
}
.suche-mobil__zu:hover { color: var(--color-gold-light); }

.suche-mobil__form { display: flex; gap: 10px; }
.suche-mobil__feld {
    flex: 1 1 auto;
    min-width: 0;
    height: 48px;
    padding: 0 14px;
    border: 1px solid rgba(255, 255, 255, 0.35);
    border-radius: 2px;
    background: none;
    color: #fff;
    font-family: Roboto, sans-serif;
    /* 16, sonst zoomt iOS beim Hineintippen. */
    font-size: 16px;
}
.suche-mobil__feld::placeholder { color: rgba(255, 255, 255, 0.45); }
.suche-mobil__feld:focus { outline: none; border-color: var(--color-gold); }
.suche-mobil__knopf {
    flex: 0 0 auto;
    height: 48px;
    padding: 0 22px;
    border: none;
    border-radius: 2px;
    background: var(--color-gold);
    color: #fff;
    font-family: 'Roboto Condensed', Roboto, sans-serif;
    font-size: 16px;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    cursor: pointer;
}
.suche-mobil__knopf:hover { background: var(--color-gold-hover); }

.suche-mobil__hinweis {
    margin: 16px 0 0;
    font-family: Roboto, sans-serif;
    font-size: 14px;
    font-weight: 300;
    color: rgba(255, 255, 255, 0.6);
}

/*
 * Dass der Knopf erscheint und die Felder der breiten Schirme weichen, steht
 * in objektliste.css und startseite.css — diese Datei kommt im Buendel vor
 * beiden und verloere bei gleicher Spezifitaet gegen deren Grundregeln.
 */
@media (max-width: 767px) {
    .suchknopf-mobil { display: inline-flex; }
}


/* === 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: #AA8D70;
    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;
}

/* 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: #AA8D70;
    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); }

    /*
     * Zwei Felder je Zeile, wo es der Inhalt hergibt.
     *
     * Objektart und Lage bleiben auf voller Breite — deren Eintraege sind
     * lang ("Semi-Detached Houses", "Marbella - San Pedro de Alcantara") und
     * wuerden auf halber Breite abgeschnitten. Preis, Zimmer und Baeder
     * tragen kurze Beschriftungen und stehen paarweise; das spart vier Zeilen
     * und stellt zusammen, was zusammengehoert.
     */
    .filter-bar__filters {
        display: flex;
        flex-wrap: wrap;
        gap: 14px;
    }
    .filter-bar__sort { display: block; }
    /* Im Flex-Behaelter macht der Abstand die Luecke, nicht der Aussenrand. */
    .filter-bar__filters select { margin-bottom: 0; flex: 1 1 100%; }
    .filter-bar__filters select[name="preis_von"],
    .filter-bar__filters select[name="preis_bis"],
    .filter-bar__filters select[name="betten"],
    .filter-bar__filters select[name="baeder"] {
        /* Die halbe Breite minus der halben Luecke. */
        flex: 1 1 calc(50% - 7px);
        min-width: 0;
    }
    /* Auf halber Breite ist rechts weniger Platz — der Pfeil rueckt heran. */
    .filter-bar__filters select[name="preis_von"],
    .filter-bar__filters select[name="preis_bis"],
    .filter-bar__filters select[name="betten"],
    .filter-bar__filters select[name="baeder"] {
        padding-right: 32px;
        background-position: right 12px center;
    }
    .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;
        /*
         * Als Verweis ist das hier ein Block, und der Fuss zieht ihn ueber
         * die ganzen 52 Punkte. Die Schrift sass deshalb oben in der Ecke
         * statt in der Mitte — ein eigener Flex-Behaelter zentriert sie in
         * beiden Richtungen.
         */
        display: flex;
        align-items: center;
        justify-content: center;
        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); }
}

/* ------------------------------------- Objektnummer neben dem Filterknopf */

/*
 * Auf dem Telefon steht die Suche nach der Objektnummer hier, neben dem
 * Filterknopf — so wie bei newEstepona das Suchfeld. Oben im Kopf war sie
 * zwischen Logo und Brenner eingeklemmt und brauchte eine eigene Flaeche,
 * die aufgeht; hier ist einfach Platz fuer ein Feld.
 *
 * Masse am 2026-10-06 an newestepona.com bei 390 gemessen:
 *   Reihe    Raster 1fr auto, Luecke 10
 *   Feld     46 hoch, Rahmen 1 in #202732, kein Radius, Roboto 16,
 *            Polster 0 14 0 42 — die 42 links sind der Platz fuer die Lupe
 *   Knopf    46 hoch, Polster 0 20, Grund #202732, weiss,
 *            Roboto Condensed 16 in Versalien
 *
 * Auf dem grossen Schirm bleibt alles, wie es war: dort steht die
 * Objektnummer oben im Kopf und hat Platz, und die Reihe gibt nur die
 * Filterleiste durch.
 */
.filter-reihe { display: block; }
.refno-bar { 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;
        /*
         * Dieselben 6 Punkte, die eine Kachel innen hat: so steht die Zeile
         * buendig ueber den Fotos und nicht 6 Punkte daneben.
         */
        padding: 0 6px;
    }
    .refno-bar { display: block; }
    .refno-bar__feld {
        width: 100%;
        height: 46px;
        /* 42 links: dort sitzt die Lupe als Hintergrundbild. */
        padding: 0 14px 0 42px;
        border: 1px solid #202732;
        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: Roboto, sans-serif;
        /* 16, sonst zoomt iOS beim Hineintippen in das Feld. */
        font-size: 16px;
        color: var(--color-text);
    }
    .refno-bar__feld:focus { outline: none; border-color: var(--color-gold); }

    /*
     * Die Filterleiste ist hier nur noch der Knopf — also ein schlichter
     * Block. Als Raster blieb hinter dem Knopf eine Spur von 10 Punkten
     * stehen (die Luecke zur naechsten, leeren Spalte), und der Knopf stand
     * nicht buendig mit den Kacheln darunter.
     */
    .filter-reihe .filter-bar {
        display: block;
        margin: 0;
        padding: 0;
        max-width: none;
    }
}


/* === 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;
}
/* Verweise stehen im helleren Gold, wie ueberall im Text der Inhaltsseiten. */
.info-text__content a { color: #CCAB86; }

.info-text__content.is-open {
    display: block;
}
/*
 * Masse an realestepona.com/apartments/ gemessen, Textstelle fuer Textstelle
 * gegen dieselbe Textstelle. Die Werte vorher waren die von newEstepona:
 * durchweg zu klein, zu fett und 1100 statt 960 breit.
 *
 *   Spalte  960 (Reihe 1200 mit 120 Innenabstand)
 *   H1      34 / 37.4
 *   H2      34 / 40.8 / Gewicht 300
 *   H3      34 / 47.6 / Gewicht 300
 *   Absatz  17 / 28.9 / Gewicht 300
 */
.info-text__content-inner {
    max-width: 1200px;
    margin: 0 auto;
    padding: 40px 120px;
}
.info-text__content h1 {
    font-size: 34px;
    line-height: 1.1;
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 0 0 12px;
}
.info-text__content h2 {
    font-size: 34px;
    line-height: 1.2;
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 24px 0 10px;
}
.info-text__content h3 {
    font-size: 34px;
    line-height: 1.4;
    font-weight: 300;
    font-family: var(--font-heading);
    color: #202732;
    margin: 20px 0 8px;
}
.info-text__content p {
    font-size: 17px;
    font-weight: 300;
    line-height: 1.7;
    color: #333;
    margin: 0 0 14px;
}

@media (max-width: 1024px) {
    .info-text__content-inner { padding: 32px var(--container-padding); }
    .info-text__content h1,
    .info-text__content h2,
    .info-text__content h3 { font-size: 26px; }
}

@media (max-width: 600px) {
    .info-text__content-inner { padding: 24px var(--container-padding-mobile); }
    .info-text__content h1,
    .info-text__content h2,
    .info-text__content h3 { font-size: 22px; }
}
.info-text__content a { color: var(--color-gold); }
.info-text__content a:hover { color: var(--color-gold-hover); }


/* === components/startseite.css === */
/*
 * Startseite — nachgebaut nach realestepona.com.
 *
 * Die Werte sind am 2026-10-01 an der Live-Seite gemessen, nicht geschaetzt:
 *   Fliesstext   Roboto 17px / 28.9px Zeilenhoehe, #000
 *   h2           Roboto 40.8px, Gewicht 600, #202732, 48.96px Zeilenhoehe
 *   h3 (Hero)    Roboto Condensed 30.6px, Gewicht 300, weiss, Versalien
 *   Schaltflaeche Roboto 15px, weiss auf #AA8D70, Radius 20px,
 *                 Innenabstand 11px 28px 9px, Versalien, 2px Sperrung
 *   Nachrichtentitel Roboto 17px, Gewicht 300, #CCAB86
 */

/* ---------------------------------------------------------------- Titelbild */

/*
 * Geometrie wie auf der Live-Seite gemessen (1440 x 900):
 *   Hoehe 900 (volle Fensterhoehe), Logo bei 100 von oben (350 breit),
 *   die beiden Fragen bei 580 — also im unteren Drittel, nicht mittig.
 */
.start-hero {
    position: relative;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.start-hero__bild {
    position: absolute;
    inset: 0;
    z-index: 0;
}

.start-hero__foto {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    display: block;
}

/*
 * Der dunkle Schleier liegt als eigene Ebene ueber dem Foto statt als
 * Filter auf dem Bild: ein Filter wuerde den Text mit abdunkeln.
 */
.start-hero__bild::after {
    content: '';
    position: absolute;
    inset: 0;
    background: #202732;
    opacity: 0.3;
}

/*
 * Parallax wie im Original: das Foto bleibt beim Scrollen stehen.
 * background-attachment kostet auf Mobilgeraeten Bildrate und wird dort
 * ohnehin von vielen Browsern ignoriert — deshalb nur ab Tablet.
 */
@media (min-width: 1025px) and (prefers-reduced-motion: no-preference) {
    .start-hero__foto { position: fixed; top: 0; left: 0; height: 100vh; }
    .start-hero__bild { clip-path: inset(0); }
}

.start-hero__marke {
    position: relative;
    z-index: 1;
    padding-top: 100px;
    text-align: center;
}

.start-hero__logo {
    width: 350px;
    max-width: 70vw;
    height: auto;
    display: inline-block;
}

.start-hero__inhalt {
    position: relative;
    z-index: 1;
    width: 100%;
    max-width: 1425px;
    /* Die Fragen sitzen im unteren Drittel: oben schiebt der Abstand sie
       dorthin, unten bleibt Luft bis zum Rand. */
    margin: auto auto 0;
    padding: 0 40px 164px;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 40px 80px;
}

.start-hero__gruppe {
    flex: 1 1 420px;
    max-width: 697px;
    text-align: center;
}

.start-hero__frage {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 30.6px;
    font-weight: 300;
    line-height: 1.3;
    color: #fff;
    text-transform: uppercase;
    margin: 0 0 24px;
}

/*
 * Hinweis der Fehlerseite, ueber den Schaltflaechen im Titelbild.
 *
 * Die Fehlerseite ist die Startseite mit diesem Satz obendrauf: wer auf einer
 * toten Adresse landet, soll keine Sackgasse sehen, sondern erfahren was los
 * ist und daneben das ganze Angebot. Auf der Startseite ist der Platz leer.
 */
.start-hero__fehler {
    flex: 1 1 100%;
    max-width: 760px;
    margin: 0 auto 8px;
    text-align: center;
}

.start-hero__fehler-titel {
    margin: 0 0 6px;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 36px;
    font-weight: 300;
    line-height: 1.2;
    color: #fff;
    text-transform: uppercase;
}

.start-hero__fehler-text {
    margin: 0;
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.85);
}

.start-hero__knoepfe {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 16px;
}

.start-hero__knopf {
    display: inline-block;
    font-family: Roboto, sans-serif;
    font-size: 15px;
    font-weight: 400;
    /* 24px, nicht 1.2: mit 11 oben und 9 unten ergibt das die gemessenen
       44 Pixel Hoehe. Mit 1.2 (= 18px) waren es nur 38. */
    line-height: 24px;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
    color: #fff;
    background: #aa8d70;
    border-radius: 20px;
    padding: 11px 28px 9px;
    transition: background-color 0.2s ease, box-shadow 0.2s ease;
}

/*
 * Beim Ueberfahren wechselt der Grund auf Dunkelblau, nicht auf ein
 * dunkleres Beige — gemessen an der Live-Seite:
 * --global-palette-btn-bg-hover = #202732, Schrift bleibt weiss.
 */
.start-hero__knopf:hover,
.start-hero__knopf:focus-visible {
    background: #202732;
    color: #fff;
    box-shadow: 0 15px 25px -7px rgba(0, 0, 0, 0.1);
}

/* ------------------------------------------------------------ Nachrichten */

/*
 * Nachrichtenstreifen — am 2026-10-01 bei 1920 an der Live-Seite gemessen:
 *   Rand links und rechts  120
 *   vier Karten je Ansicht, Karte 390 breit, Abstand 40
 *     (4 x 390 + 3 x 40 = 1680 = 1920 - 240)
 *   Karte   Rahmen 1px #EEE, Bild 3:2, innen 15px 25px 25px
 *   Titel   24 / 28.8, Gewicht 300, #202732, Abstand 10 0 5
 *   Anriss  17 / 28.9, #000
 *   Weiter  17, #AA8D70, weisser Grund, Radius 20
 *   Pfeile  32 x 48, Grund rgba(0,0,0,.8), Radius 3, Deckung 0.75,
 *           16 innerhalb der Kante, senkrecht mittig
 */

.start-news {
    padding: 56px 0 48px;
    background: #fff;
}

.start-news__kopf,
.start-news__buehne,
.start-news__punkte {
    padding-inline: 120px;
}

/* Ueberschrift links, die beiden Pfeile rechts auf derselben Grundlinie. */
.start-news__kopf {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 16px;
    margin-bottom: 15.3px;
}

.start-news__titel {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 30.6px;
    font-weight: 300;
    color: #202732;
    text-transform: uppercase;
    margin: 0;
}

.start-news__buehne { position: relative; }

/*
 * Waagerechter Streifen mit Einrastpunkten statt eines Karussell-Skripts:
 * das Scrollen und Einrasten kann der Browser selbst, die Pfeile schieben
 * nur um eine Seitenbreite. Mit Fingerwisch und Trackpad fuehlt sich das
 * natuerlicher an als ein nachgebautes Karussell, und ohne JavaScript
 * bleibt der Streifen bedienbar.
 */
.start-news__spur {
    display: flex;
    gap: 40px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    scrollbar-width: none;
}

.start-news__spur::-webkit-scrollbar { display: none; }

.news-karte {
    flex: 0 0 calc((100% - 120px) / 4);
    scroll-snap-align: start;
    border: 1px solid #eee;
    background: transparent;
    display: flex;
    flex-direction: column;
}

.news-karte__bildverweis { display: block; }

/* 3:2 wie im Original (Bild 388 x 259 bei 390 Kartenbreite). */
.news-karte__bild {
    display: block;
    width: 100%;
    aspect-ratio: 3 / 2;
    object-fit: cover;
}

.news-karte__bild--leer { background: #eee; }

.news-karte__innen {
    padding: 15px 25px 25px;
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
}

/*
 * Feste Hoehe ueber fuenf Zeilen, damit die Anrisse in allen vier Kacheln
 * auf derselben Hoehe anfangen. Ohne das haengt der Textblock an der Laenge
 * der Ueberschrift und die Reihe wirkt ausgefranst — auf der Live-Seite
 * stehen die Ueberschriften mal vier, mal fuenf Zeilen hoch.
 * 10 + 5 x 28.8 + 5 = 159.
 */
.news-karte__titel {
    /* Condensed, nicht Roboto — nachgemessen auf der Live-Seite. */
    font-family: "Roboto Condensed", sans-serif;
    font-size: 24px;
    font-weight: 300;
    line-height: 28.8px;
    color: #202732;
    margin: 0;
    /*
     * 14 statt der gemessenen 5 nach unten. Mit 5 begann der Anriss direkt
     * unter der letzten Titelzeile, und bei einem vierzeiligen Titel liefen
     * beide ineinander. Die Hoehe bleibt, die Kacheln stehen also weiter auf
     * gleicher Linie.
     */
    padding: 10px 0 14px;
    height: 159px;
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 5;
}

.news-karte__titel a {
    color: inherit;
    text-decoration: none;
}

.news-karte__titel a:hover { color: #aa8d70; }

.news-karte__text {
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
}

/* Vier Zeilen fest (4 x 28.9 = 115.6), damit auch der Weiterlesen-Verweis
   in allen Kacheln auf gleicher Hoehe steht. */
.news-karte__anriss {
    margin: 0;
    height: 115.6px;
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
}

.news-karte__weiter {
    display: inline-flex;
    align-items: center;
    /*
     * 44 hoch und damit mit dem Finger zu treffen; die aeusseren Masse des
     * Blocks bleiben, weil der Aussenabstand um dieselben 13 schrumpft, um
     * die der Verweis waechst. Am Original gemessen waren es 31 bei je 10
     * Abstand — zu wenig fuer eine Beruehrung.
     */
    min-height: 44px;
    margin: -3px 0;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #aa8d70;
    background: #fff;
    border: 1px solid #fff;
    border-radius: 20px;
    text-decoration: none;
}

.news-karte__weiter:hover { text-decoration: underline; }

/* ---- Pfeile ---- */

/*
 * Aus newEstepona uebernommen: feine Kontur auf weissem Grund, neben der
 * Ueberschrift statt als dunkle Kacheln ueber den Bildern. Die Palette ist
 * in beiden Projekten dieselbe (#202732, #AA8D70, #EEEEEE), die Pfeile
 * passen also ohne Anpassung.
 */
.start-news__nav {
    display: flex;
    gap: 8px;
    flex-shrink: 0;
}

.start-news__pfeil {
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    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;
}

.start-news__pfeil:hover,
.start-news__pfeil:focus-visible {
    border-color: var(--color-gold);
    color: var(--color-gold);
}

/* ---- Punkte ---- */

/*
 * Ein Punkt je Kachel, nicht je Seite — die Live-Seite zeigt bei zwoelf
 * Meldungen zwoelf Punkte, obwohl vier gleichzeitig sichtbar sind. Die
 * Pfeile schieben entsprechend um eine Kachel und laufen im Kreis; abgeschaltet
 * ist dort nie einer.
 */
.start-news__punkte {
    display: flex;
    justify-content: center;
    gap: 0;
    margin-top: 20px;
}

.start-news__punkt {
    width: 10px;
    height: 10px;
    margin: 3px;
    border: 0;
    padding: 0;
    border-radius: 50%;
    background: #000;
    opacity: 0.5;
    cursor: pointer;
}

.start-news__punkt[aria-current='true'] { opacity: 0.75; }

/* ------------------------------------------------------------- Fliesstext */

/*
 * Unten kein Abstand: die FAQ schliesst direkt an, der Abstand kommt aus
 * dem unteren Rand der Ueberschrift "Answers around…" (10, gemessen).
 */
.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;
}

.start-text__inhalt h2 {
    font-family: Roboto, sans-serif;
    font-size: 40.8px;
    font-weight: 600;
    line-height: 48.96px;
    color: #202732;
    margin: 40px 0 10px;
}

/*
 * 22.1 / 30.94, nicht 27 / 35.1 — nachgemessen an denselben Zwischen-
 * ueberschriften auf realestepona.com/apartments/ ("Beachfront Apartments",
 * "City Centre Apartments"). Die 27 kamen von newEstepona.
 */
.start-text__inhalt h3 {
    font-family: Roboto, sans-serif;
    font-size: 22.1px;
    font-weight: 600;
    line-height: 30.94px;
    color: #202732;
    margin: 36px 0 14px;
}

.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: #aa8d70; }

/* Der Fliesstext laeuft in Gewicht 300; fett braucht deshalb 700, sonst
   hebt es sich kaum ab. */
.start-text__inhalt strong,
.start-text__inhalt b,
.start-faq__antwort strong,
.start-faq__antwort 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;
}

/* -------------------------------------------------------------------- FAQ */

.start-faq { padding: 16px 0 64px; }

.start-faq__inhalt {
    max-width: 960px;
    margin: 0 auto;
    padding: 0;
}

.start-faq__eintrag {
    border-bottom: 1px solid #e4e4e4;
}

.start-faq__frage {
    font-family: Roboto, sans-serif;
    font-size: 19px;
    font-weight: 600;
    line-height: 1.4;
    color: #202732;
    padding: 18px 32px 18px 0;
    cursor: pointer;
    list-style: none;
    position: relative;
}

.start-faq__frage::-webkit-details-marker { display: none; }

/* Eigenes Zeichen statt des Browser-Dreiecks, damit es rechts steht. */
.start-faq__frage::after {
    content: '';
    position: absolute;
    right: 4px;
    top: 50%;
    width: 9px;
    height: 9px;
    border-right: 2px solid #aa8d70;
    border-bottom: 2px solid #aa8d70;
    transform: translateY(-70%) rotate(45deg);
    transition: transform 0.2s ease;
}

.start-faq__eintrag[open] > .start-faq__frage::after {
    transform: translateY(-20%) rotate(-135deg);
}

.start-faq__antwort {
    padding: 0 0 20px;
}

.start-faq__antwort p,
.start-faq__antwort li {
    font-size: 17px;
    line-height: 28.9px;
    color: #000;
    margin: 0 0 14px;
}

/* --------------------------------------------------------------- Mobilgeraet */

@media (max-width: 1024px) {
    .start-hero__inhalt { gap: 32px 40px; padding: 0 24px; }
    .start-text__inhalt,
    .start-faq__inhalt { padding-inline: 24px; }
    .start-news__kopf,
    .start-news__buehne,
    .start-news__punkte { padding-inline: 24px; }
    .news-karte { flex-basis: calc((100% - 40px) / 2); }
}

@media (max-width: 767px) {
    .start-hero { min-height: 100svh; }
    .start-hero__fehler { margin-bottom: 4px; }
    .start-hero__fehler-titel { font-size: 26px; }
    .start-hero__fehler-text { font-size: 15px; }
    .start-hero__inhalt { flex-direction: column; gap: 36px; padding: 0 20px; }
    .start-hero__gruppe { flex: 1 1 auto; max-width: none; }
    .start-hero__frage { font-size: 24px; margin-bottom: 18px; }
    /*
     * Dunklerer Schleier als auf dem Desktop (0,3).
     *
     * Auf dem Telefon steht die Ueberschrift ueber einer anderen Stelle des
     * Fotos als auf dem Desktop: object-fit deckt bei 390 Punkten Breite
     * einen schmalen, hohen Ausschnitt ab, und dort liegt die helle
     * Wolkenbank. Am 2026-10-06 bei 390 gemessen — hellster Punkt hinter
     * "What are you looking for?" ist rgb(219,228,246):
     *
     *   Deckung 0,30   Kontrast 2,31:1   (unter 3:1, also zu wenig)
     *   Deckung 0,45   Kontrast 3,25:1
     *   Deckung 0,50   Kontrast 3,67:1
     *
     * 0,5, nicht 0,45: die Schrift ist mit Gewicht 300 duenn, und fuer
     * duenne Schrift ist die 3:1-Schwelle knapp bemessen. Ueber der
     * durchschnittlichen Flaeche sind es ohnehin 10:1 — das Foto bleibt
     * also gut sichtbar, nur die hellen Stellen geben nach.
     */
    .start-hero__bild::after { opacity: 0.5; }

    /*
     * Die Knoepfe laufen auch hier nebeneinander um, wie auf dem Desktop —
     * sie bleiben so breit wie ihre Beschriftung. Untereinander und auf volle
     * Breite gezogen standen sieben Stueck als sieben Balken da und
     * verbrauchten den halben ersten Bildschirm; nebeneinander passen zwei bis
     * drei in eine Reihe. Nur der Abstand ist enger als die 16 des Desktops.
     */
    .start-hero__knoepfe { gap: 12px; }

    .start-news__titel { font-size: 24px; }
    .start-news__kopf,
    .start-news__buehne,
    .start-news__punkte { padding-inline: 20px; }
    .start-news__spur { gap: 16px; }
    .news-karte { flex-basis: 86%; }

    .start-text__inhalt,
    .start-faq__inhalt { padding-inline: 20px; }
    .start-text__inhalt h2 { font-size: 28px; line-height: 1.25; margin: 32px 0 16px; }
    .start-text__inhalt h3 { font-size: 21px; margin: 26px 0 12px; }
}


/* --------------------------------------------------- Kopfzeile Startseite */

/*
 * Die Startseite traegt kein Menue. Die sieben Schaltflaechen im Titelbild
 * sind die Fuehrung; oben rechts steht nur die Suche nach einer
 * Referenznummer. Absolut positioniert, damit das Titelbild darunter
 * durchlaeuft.
 */
.start-kopf {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 80px;
    z-index: 10;
}

/*
 * Fester Abstand zur rechten Kante, keine zentrierte Hoechstbreite: auf der
 * Live-Seite steht die Lupe bei jeder Fensterbreite 120 Pixel vom Rand
 * (bei 1440 wie bei 1920 nachgemessen). Mit einer begrenzten, zentrierten
 * Spalte waendert sie auf breiten Schirmen nach innen — bei 1920 waren es
 * 288 statt 120.
 */
.start-kopf__innen {
    height: 100%;
    padding: 0 120px 0 40px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
}

/*
 * Kein Abstand zwischen Wort und Lupe: gemessen steht die rechte Kante von
 * "Ref-No." genau 144 vom Fensterrand, die Lupe bei 120 — die 24 Pixel
 * dazwischen sind die Lupe selbst, nicht eine Luecke.
 */
.start-kopf__suche {
    display: flex;
    align-items: center;
    gap: 0;
}

.start-kopf__label {
    font-family: Roboto, sans-serif;
    font-size: 16px;
    font-weight: 400;
    color: #fff;
    white-space: nowrap;
}

.start-kopf__feld {
    /* flex-basis 0 statt nur width: ein Eingabefeld bringt sonst seine
       Standardbreite mit und draengt sich zwischen Wort und Lupe. */
    flex: 0 0 0;
    width: 0;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
    border-bottom: 1px solid transparent;
    background: transparent;
    color: #fff;
    font-family: Roboto, sans-serif;
    font-size: 15px;
    transition: width 0.25s ease, padding 0.25s ease, border-color 0.25s ease;
}

/* Das Feld klappt erst beim Hineingehen auf — bis dahin steht dort nur das
   Wort und die Lupe, wie im Original. */
.start-kopf__suche:hover .start-kopf__feld,
.start-kopf__feld:focus {
    flex: 0 0 180px;
    width: 180px;
    padding: 4px 2px;
    border-bottom-color: rgba(255, 255, 255, 0.6);
    outline: none;
}

.start-kopf__feld::placeholder { color: rgba(255, 255, 255, 0.6); }

.start-kopf__knopf {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 42px;
    padding: 0;
    border: 0;
    background: transparent;
    color: #fff;
    cursor: pointer;
}

@media (max-width: 1024px) {
    .start-kopf__innen { padding: 0 32px 0 24px; }
}

@media (max-width: 767px) {
    .start-kopf__innen { padding: 0 20px; }
    /*
     * Die Suche weicht dem Knopf, der die Flaeche oeffnet (suche-mobil.css).
     * Das Feld oben klappt beim Ueberfahren auf 180 Punkte auf — auf einem
     * Telefon gibt es kein Ueberfahren.
     */
    .start-kopf__suche { display: none; }
    .start-hero__marke { padding-top: 60px; }
    .start-hero__logo { width: 260px; }
    .start-hero__inhalt { padding-bottom: 64px; }
}


/* === components/objektliste.css === */
/* ------------------------------------------------ Kopfzeile der Unterseite */

/*
 * Weiss und im Fluss, nicht ueber einem Titelbild wie auf der Startseite.
 * Gemessen an realestepona.com/apartments/ (1920): 101 hoch, Logo 250 x 56
 * bei 120 vom Rand, Menue 17 in Gewicht 300, #202732.
 */
/*
 * Die Trennlinie zum Inhalt steht an der Unterkante der Kopfzeile: gemessen
 * 1 Punkt in #EEE ueber die ganze Breite. Die Zeile selbst ist darum 100 hoch,
 * mit der Linie zusammen die gemessenen 101.
 */
/*
 * Die Kopfzeile bleibt beim Scrollen stehen — wie auf der Live-Seite, wo
 * .site-header-inner-wrap fest sitzt. Dort gemessen: am Schirm faehrt sie
 * beim Scrollen nach unten aus dem Bild und beim Scrollen nach oben sofort
 * wieder herein; auf dem Telefon steht sie immer. Die Startseite hat auch im
 * Original keine feste Kopfzeile — dort gilt .start-kopf, und das bleibt.
 *
 * position: sticky und nicht fixed: dann haelt die Kopfzeile ihren Platz im
 * Fluss, und der Inhalt darunter rutscht beim Laden nicht um ihre Hoehe
 * nach oben.
 */
.liste-kopf {
    background: #fff;
    position: sticky;
    top: 0;
    z-index: 20;
    border-bottom: 1px solid #eee;
    transition: transform 0.25s ease-out;
}

/*
 * Weggefahren beim Scrollen nach unten. Nur am Schirm: auf dem Telefon ist
 * die Zeile niedrig und traegt den Weg zurueck ins Menue — dort steht sie
 * im Original durchgehend.
 */
@media (min-width: 768px) {
    .liste-kopf.ist-weg { transform: translateY(-101%); }
}

.liste-kopf__innen {
    display: flex;
    align-items: center;
    gap: 32px;
    min-height: 100px;
    padding: 0 120px;
}

.liste-kopf__logo { flex: 0 0 auto; display: block; }
.liste-kopf__logo img { width: 250px; height: auto; display: block; }

.liste-kopf__menue { flex: 1 1 auto; }

/*
 * Die Abstaende stecken im Innenabstand der Eintraege, nicht in einer Luecke
 * dazwischen: gemessen 3.4px oben/unten und 21.25px links/rechts, dazwischen
 * nichts. Nur so trifft der dunkle Kasten des aktiven Punktes die richtige
 * Breite — mit einer Luecke saesse er zu schmal im Text.
 */
.liste-kopf__menue > ul {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

/*
 * Nur die Punkte der obersten Ebene. Ueber ".liste-kopf__menue a" griff die
 * Regel auch auf die Links im Aufklappfeld und gab ihnen 21.25 Innenabstand
 * und 17 Punkte Schrift — mega-menu.css von newEstepona will dort 8/0 und
 * 14.4, und bei gleicher Spezifitaet gewinnt die spaetere Datei.
 */
.liste-kopf__menue > ul > li > a {
    display: inline-block;
    padding: 3.4px 21.25px;
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    line-height: 1.7;
    color: #202732;
    text-decoration: none;
    white-space: nowrap;
}

.liste-kopf__menue > ul > li > a:hover { color: #aa8d70; }

/* Der aktive Punkt steht in einem dunklen Kasten mit weisser Schrift. */
.liste-kopf__menue > ul > li > a[aria-current="page"] {
    background: #202732;
    color: #fff;
}

.liste-kopf__suche {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 0;
}

.liste-kopf__label {
    font-family: Roboto, sans-serif;
    font-size: 16px;
    color: #202732;
    white-space: nowrap;
}

.liste-kopf__feld {
    flex: 0 0 0;
    width: 0;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
    border-bottom: 1px solid transparent;
    background: transparent;
    color: #202732;
    font-family: Roboto, sans-serif;
    font-size: 15px;
    transition: flex-basis 0.25s ease, padding 0.25s ease, border-color 0.25s ease;
}

.liste-kopf__suche:hover .liste-kopf__feld,
.liste-kopf__feld:focus {
    flex: 0 0 180px;
    width: 180px;
    padding: 4px 2px;
    border-bottom-color: #ccc;
    outline: none;
}

.liste-kopf__knopf {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 42px;
    padding: 0;
    border: 0;
    background: transparent;
    color: #202732;
    cursor: pointer;
}

@media (max-width: 1400px) {
    .liste-kopf__innen { padding-inline: 40px; gap: 20px; }
    .liste-kopf__menue > ul { gap: 16px; }
    .liste-kopf__menue > ul > li > a { font-size: 15px; }
}

@media (max-width: 1024px) {
    .liste-kopf__innen { padding-inline: 24px; flex-wrap: wrap; min-height: 0; padding-block: 16px; }
    .liste-kopf__menue { order: 3; flex-basis: 100%; }
    .liste-kopf__menue > ul { justify-content: flex-start; }
}

@media (max-width: 767px) {
    .liste-kopf__innen { padding-inline: 20px; }

    /*
     * Hier uebernimmt der Brennerknopf (siehe menue-mobil.css). Das Menue der
     * Kopfzeile brach sonst in eine siebenzeilige Liste um und nahm fast 190
     * Punkte ein, bevor der erste Treffer kam; die Aufklappfelder waren ohne
     * Mauszeiger ohnehin nicht zu oeffnen.
     *
     * Die Suche nach der Objektnummer geht denselben Weg ins Menue: neben
     * Logo und Knopf blieben bei 390 Punkten keine 120 mehr uebrig, sie brach
     * in eine zweite Zeile um und machte die Kopfzeile 140 statt 78 hoch.
     *
     * Diese Regeln stehen hier und nicht in menue-mobil.css: dort stehen sie
     * vor dieser Datei im Buendel und verloeren bei gleicher Spezifitaet
     * gegen .liste-kopf__innen aus dem 1024er-Block.
     */
    .liste-kopf__menue { display: none; }
    /*
     * Die Suche weicht dem Knopf, der die Flaeche oeffnet (suche-mobil.css).
     * Das Feld hier klappt beim Ueberfahren auf — auf einem Telefon gibt es
     * kein Ueberfahren und neben Logo und Brenner keinen Platz dafuer.
     */
    .liste-kopf__suche { display: none; }
    /*
     * Die Ref-No.-Suche bleibt im Kopf, neben dem Knopf — so steht sie auf der
     * alten Seite (dort als Knopf 92x31 bei 225 von links, Brenner bei 327).
     * Damit alle drei in eine Zeile passen, wird das Logo so schmal wie dort
     * (180) und das Eingabefeld gibt nach.
     */
    .liste-kopf__logo img { width: 180px; }
    /*
     * Die Zeile ist knapp, also wird jeder Punkt gerechnet. Bei 360 — dem
     * schmalsten gaengigen Geraet — stehen zur Verfuegung:
     *
     *   360 - 32 Rand - 180 Logo - 38 Brenner = 110 fuer Suche und Luecken
     *
     * Mit 8 Punkten Luecke bleiben 94 fuer die Suche; sie braucht 88. Mit den
     * 20 Punkten Luecke der breiteren Schirme waeren es 378 statt 360 gewesen,
     * und der Brenner stand ausserhalb des Bildes.
     */
    .liste-kopf__innen { gap: 8px; }
    .liste-kopf__innen { flex-wrap: nowrap; justify-content: space-between; }
    .menue-knopf { display: flex; flex: 0 0 auto; }
    .liste-kopf__logo { flex: 0 0 auto; }
}

/*
 * Unter 360 reicht es auch so nicht mehr. Dann faellt die Beschriftung weg und
 * es bleibt die Lupe — sie allein sagt schon, was der Knopf tut.
 */
/*
 * Unter 360 reicht der Platz auch so nicht: 16 Rand + 180 Logo + 8 + 77 Knopf
 * + 8 + 44 Brenner + 16 Rand sind 349, und bei 320 steht der Brenner damit
 * ausserhalb. Dann faellt die Beschriftung weg und es bleibt die Lupe — sie
 * allein sagt schon, was der Knopf tut.
 */
@media (max-width: 359px) {
    .suchknopf-mobil__wort { display: none; }
}

/*
 * Objektlisten-Seiten (/apartments/, /houses/, /plots/ …).
 *
 * Kachelmasse am 2026-10-01 an realestepona.com gemessen (1920):
 *   Raster  110 vom Rand, fuenf Kacheln je Reihe
 *   Kachel  340 x 413, Innenabstand 10
 *   Bild    320 x 305 (cover), darin unten links die Referenz
 *   Titel   19.8 in #AA8D70
 *   Masse   11.6 in #666, Preis 19.7 in Gewicht 600
 *
 * Die Filterleiste folgt dem Vorbild von newEstepona: auf dem grossen Schirm
 * eine Zeile aus Auswahlfeldern, auf dem Telefon ein Knopf, der eine
 * Vollbildflaeche oeffnet.
 */

/*
 * Aussen 110, damit die Kacheln bei 120 beginnen: jede Kachel traegt 10
 * Innenabstand. Die Filterleiste bekommt denselben Versatz, sonst steht sie
 * links und rechts zehn Pixel weiter aussen als die Kacheln darunter.
 */
.objektseite__liste {
    padding: 32px 110px 60px;
}

.objekt-filter { margin-inline: 10px; }

/* ----------------------------------------------------------- Filterleiste */

/*
 * Aussehen und Vollbildflaeche kommen unveraendert aus filter-bar.css von
 * newEstepona — dort sind sie ausprobiert, hier werden sie nur eingepasst.
 * Angepasst wird einzig die Breite: die Leiste steht buendig ueber den
 * Kacheln und nicht in einer eigenen, schmaleren Spalte.
 */
.objektseite__liste .filter-bar {
    max-width: none;
    margin: 0 0 28px;
    padding: 0 10px;
}

/*
 * Auf dem Telefon ist die Leiste nur noch der Filterknopf und steht in einer
 * Reihe mit dem Feld fuer die Objektnummer. Abstand und Innenabstand macht
 * dort die Reihe — blieben sie hier stehen, saesse der Knopf 20 Punkte vom
 * rechten Rand entfernt und die Zeile waere nicht buendig.
 */
@media (max-width: 767px) {
    .objektseite__liste .filter-bar { margin: 0; padding: 0; }
}

/* Den Suchknopf gibt es bei newEstepona nicht: dort filtert der Browser
   sofort, hier fragt die Seite den Server. */
.filter-bar__suche {
    flex: 0 0 auto;
    height: 46px;
    padding: 0 28px;
    border: 0;
    border-radius: 23px;
    background: var(--color-gold);
    color: #fff;
    font-family: Roboto, sans-serif;
    font-size: 15px;
    letter-spacing: 2px;
    text-transform: uppercase;
    cursor: pointer;
    transition: background-color 0.2s ease;
}

.filter-bar__suche:hover,
.filter-bar__suche:focus-visible { background: var(--color-heading); }

@media (max-width: 768px) {
    /* Auf dem Telefon fuehrt der Knopf in der Flaeche; der runde entfaellt. */
    .filter-bar__suche { display: none; }
}

/* -------------------------------------------------------------- Kachelnetz */

.objekt-raster {
    display: flex;
    flex-wrap: wrap;
}

.objekt-karte {
    flex: 0 0 20%;
    padding: 10px;
}

.objekt-karte__verweis {
    display: block;
    text-decoration: none;
    color: inherit;
}

/*
 * Abgerundet (10, gemessen) und mit dunklem Grund statt hellgrau: die Fotos
 * haben nicht alle dasselbe Seitenverhaeltnis, und ein heller Rand faellt
 * sofort auf. Mit overflow:hidden bleibt die Rundung auch beim Heranfahren
 * des Bildes erhalten.
 */
.objekt-karte__bild {
    position: relative;
    display: block;
    aspect-ratio: 320 / 305;
    overflow: hidden;
    border-radius: 10px;
    /*
     * Heller Platzhalter, solange das Foto laedt. Die Live-Seite hat hier
     * #333, und so war es hier auch — nur zeigt sie 40 Kacheln und wir 60.
     * Sechzig fast schwarze Rechtecke auf weissem Grund sehen aus, als sei
     * die Seite kaputt; dasselbe in #F2F2F2 liest sich als leerer Rahmen,
     * der gleich gefuellt wird.
     */
    background: #F2F2F2;
}

/* Immer fuellend: lieber beschneiden als einen Rand stehen lassen. */
.objekt-karte__bild img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    display: block;
    transition: transform 0.4s ease;
}

.objekt-karte__verweis:hover .objekt-karte__bild img { transform: scale(1.04); }

/*
 * Hat ein Objekt gar kein Foto, bleibt es dunkel: die Referenznummer
 * darueber ist weiss mit Schatten und waere auf Hellgrau nicht zu lesen.
 * Das ist der Dauerzustand der Kachel, nicht ein Augenblick beim Laden.
 */
.objekt-karte__bild--leer { display: block; width: 100%; height: 100%; background: #333; }

/*
 * Referenz unten links im Bild. Mit leichtem Schatten, weil sie sonst auf
 * hellen Fotos verschwindet.
 */
.objekt-karte__ref {
    position: absolute;
    left: 14px;
    bottom: 10px;
    font-size: 11.585px;
    font-weight: 300;
    line-height: 1.4;
    color: #fff;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6);
}

/*
 * Gemessen: das Bild endet, 8 Punkte darunter beginnt der Titel in 19.8 auf
 * 27.72 Zeilenhoehe, und direkt an dessen Unterkante — ohne Abstand — folgt
 * die Zeile mit Massen und Preis.
 */
.objekt-karte__titel {
    display: block;
    margin-top: 8px;
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 19.8px;
    font-weight: 400;
    line-height: 27.72px;
    color: #aa8d70;
}

.objekt-karte__verweis:hover .objekt-karte__titel { color: #96795e; }

.objekt-karte__zeile {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    margin-top: 0;
}

/*
 * 13 statt der 11.585, die an der alten Seite gemessen waren.
 *
 * Dort war die Zeile auf dem Telefon kaum zu lesen: 11.6 Punkte in Gewicht
 * 300 auf Grau sind an der Grenze, und es sind genau die Angaben, nach denen
 * jemand eine Kachel ueberhaupt ansieht. Auf Ansage ein bis zwei Punkte mehr,
 * durchgehend — auf dem Schirm wie auf dem Telefon.
 */
.objekt-karte__masse {
    font-size: 13px;
    font-weight: 300;
    color: #666;
}

/* Die Zahlen stehen fett, die Woerter bed und bath nicht. */
.objekt-karte__masse strong { font-weight: 700; }

.objekt-karte__preis {
    font-size: 19.6796px;
    font-weight: 600;
    color: #000;
    white-space: nowrap;
}

.objekt-raster__leer {
    padding: 40px 0;
    font-size: 17px;
    color: #666;
    text-align: center;
}

/* --------------------------------------------------------- Nachladen */

/* Knopf wie bei newEstepona (search-section.css). */
.objekt-mehr {
    display: block;
    width: 100%;
    text-align: center;
    padding: 30px 0;
}

.objekt-mehr 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;
}

.objekt-mehr button:hover { background: var(--color-heading); }
.objekt-mehr button[disabled] { opacity: 0.6; cursor: default; }

/* ------------------------------------------------------------ Mittelgross */

@media (max-width: 1400px) {
    .objektseite__liste { padding-inline: 40px; }
    .objekt-karte { flex-basis: 25%; }
}

@media (max-width: 1024px) {
    .objektseite__liste { padding-inline: 24px; }
    .objekt-karte { flex-basis: 33.3333%; }
}

/* ----------------------------------------------------- Vollbildflaeche */

/*
 * Auf dem Telefon standen die Felder frueher untereinander und machten die
 * Seite lang, bevor das erste Objekt zu sehen war. Stattdessen — wie bei
 * newEstepona — ein Knopf, der eine Flaeche ueber die ganze Seite oeffnet.
 */
@media (max-width: 767px) {
    .objektseite__liste { padding: 20px 20px 40px; }

    .objekt-filter {
        gap: 10px;
        margin-bottom: 20px;
    }

    .objekt-filter__knopf {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        height: 44px;
        padding: 0 18px;
        border: 1px solid #e4e4e4;
        background: #fff;
        font-family: Roboto, sans-serif;
        font-size: 15px;
        color: #202732;
        cursor: pointer;
    }

    .objekt-filter__zahl {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 20px;
        height: 20px;
        padding: 0 5px;
        border-radius: 10px;
        background: #aa8d70;
        color: #fff;
        font-size: 12px;
    }

    .objekt-filter__flaeche {
        display: flex;
        flex-direction: column;
        position: fixed;
        inset: 0;
        z-index: 100;
        background: #fff;
        padding: 0;
        /* Geschlossen aus dem Bild geschoben statt display:none: so laesst
           sich die Bewegung zeigen, und die Felder bleiben im Formular. */
        transform: translateY(100%);
        visibility: hidden;
        transition: transform 0.25s ease, visibility 0.25s;
    }

    .objekt-filter__flaeche.ist-offen {
        transform: translateY(0);
        visibility: visible;
    }

    .objekt-filter__kopf {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 16px;
        border-bottom: 1px solid #e4e4e4;
    }

    .objekt-filter__titel {
        font-family: 'Roboto Condensed', sans-serif;
        font-size: 22px;
        text-transform: uppercase;
        color: #202732;
    }

    .objekt-filter__zu {
        width: 40px;
        height: 40px;
        border: 0;
        background: none;
        font-size: 28px;
        line-height: 1;
        color: #202732;
        cursor: pointer;
    }

    .objekt-filter__felder {
        flex: 1 1 auto;
        flex-direction: column;
        gap: 12px;
        padding: 16px;
        overflow-y: auto;
    }

    .objekt-filter__feld,
    .objekt-filter__feld--ort { width: 100%; min-width: 0; }

    .objekt-filter__fuss {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 12px;
        padding: 12px 16px;
        border-top: 1px solid #e4e4e4;
    }

    .objekt-filter__leeren {
        font-size: 15px;
        color: #666;
        text-decoration: underline;
    }

    .objekt-filter__zeigen {
        flex: 1 1 auto;
        height: 44px;
        border: 0;
        border-radius: 22px;
        background: #aa8d70;
        color: #fff;
        font-family: Roboto, sans-serif;
        font-size: 15px;
        letter-spacing: 1px;
        text-transform: uppercase;
        cursor: pointer;
    }

    /* Der runde Suchknopf gehoert auf dem Telefon in die Flaeche, nicht in
       die Zeile — dort steht der Filterknopf. */
    .objekt-filter__suche { display: none; }

    /*
     * Mehr Luft zwischen den Kacheln als daneben: 11 oben und unten ergeben
     * 22 Punkte Abstand zur naechsten Kachel, seitlich bleiben es 6. Mit 6
     * ringsum standen die Kacheln 12 Punkte auseinander — zu wenig, um auf
     * einen Blick zu sehen, welcher Preis zu welchem Foto gehoert.
     */
    .objekt-karte { flex-basis: 50%; padding: 11px 6px; }

    /*
     * Titel und Preis bleiben so gross wie auf dem Desktop (19.8 und 19.68).
     * Die Verkleinerung auf 17 stammte aus der Zeit, als die Kacheln hier zu
     * zweit standen; unter 460 Punkten steht eine Kachel allein und ist mit
     * 358 Punkten sogar breiter als eine Desktop-Kachel (364 bei 1920).
     * Kleiner zu setzen gab es also keinen Grund.
     */
}

@media (max-width: 460px) {
    .objekt-karte { flex-basis: 100%; }
}

/* ------------------------------------------- Fliesstext unter der Liste */

/*
 * Gemessen auf realestepona.com/apartments/ (1920):
 *   Liste → Textspalte       100
 *   Textspalte breit         960, mittig
 *   erste Ueberschrift       40.8 / Gewicht 600, ohne Abstand nach oben
 *   Textspalte → Fuss        100
 *
 * Die Schriftgroessen stehen in startseite.css: es ist derselbe Textblock,
 * nur auf einer anderen Seite. Hier stehen nur die Abstaende, die sich
 * unterscheiden. Eine eigene Ueberschrift traegt der Block nicht — auf der
 * Live-Seite ist das erste Element die h2 des Textes, das h1 der Seite
 * steht im Info-Text.
 */
.objektseite .start-text {
    padding: 40px 0 100px;
}

/*
 * Auf dem Telefon sind 100 Punkte unter dem Fliesstext zu viel: sie machen
 * eine leere weisse Flaeche von einem Drittel Bildschirmhoehe, bevor der
 * graue Rahmen kommt. 56 passen zu dessen eigenem Innenabstand.
 */
@media (max-width: 767px) {
    .objektseite .start-text { padding: 32px 0 56px; }
}

.objektseite .start-text__inhalt > :first-child { margin-top: 0; }

/* --------------------------------------------------------- Fragen und Antworten */

/*
 * Nicht aufklappbar, anders als auf der Startseite: im Original stehen hier
 * Ueberschrift und Antwort offen untereinander, in derselben Spalte wie der
 * Text. Gemessen: Frage 22.1 / Gewicht 600 in #202732 mit 11.05 unter sich,
 * jeder Eintrag 34 unter sich.
 */
.objekt-faq__eintrag { margin: 0 0 34px; }
.objekt-faq__eintrag:last-child { margin-bottom: 0; }

/* Mit der Spalte davor, sonst gewinnt die h3-Regel des Fliesstextes. */
.start-text__inhalt .objekt-faq__frage {
    font-family: Roboto, sans-serif;
    font-size: 22.1px;
    font-weight: 600;
    line-height: 30.94px;
    color: #202732;
    margin: 0 0 11.05px;
}

.objekt-faq__antwort {
    font-size: 17px;
    line-height: 28.9px;
    color: #000;
}

/*
 * Der letzte Absatz behaelt seinen Abstand (15, wie im Original) — er faellt
 * ohnehin mit dem Abstand des Eintrags zusammen.
 */

/* --------------------------------------------- Kachel "Sell your property" */

/*
 * Steht auf der Live-Seite an zehnter Stelle jeder Seite der Liste. Gemessen
 * (1920): Flaeche 320 x 305 wie das Bild einer Kachel, 15 gerundet, Rahmen 1
 * in #202732, darueber dasselbe Dunkelblau mit 0.8 Deckung. Innen 69 oben und
 * unten, 60 links und rechts, Inhalt oben beginnend und mittig gesetzt:
 * Titel in Roboto Condensed 44.2 / Gewicht 300 in Weiss mit 20 unter sich,
 * darunter eine Zeile in Roboto 17 in #CCAB86.
 *
 * Das Bild steht hier und nicht im PHP: die Adresse gehoert ins Stylesheet,
 * dann traegt der Bildvorbau sie mit und die Kachel bleibt reiner Text.
 */
.objekt-verkaufen {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    aspect-ratio: 320 / 305;
    padding: 69px 60px;
    border: 1px solid #202732;
    border-radius: 15px;
    overflow: hidden;
    text-align: center;
    background-image:
        linear-gradient(rgba(32, 39, 50, 0.8), rgba(32, 39, 50, 0.8)),
        url('../images/sell-your-property.webp');
    background-size: cover;
    background-position: center center;
}

.objekt-verkaufen__titel {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 44.2px;
    font-weight: 300;
    line-height: 53.04px;
    color: #fff;
    text-decoration: none;
    margin-bottom: 20px;
}

.objekt-verkaufen__zeile {
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #ccab86;
    text-decoration: none;
}

.objekt-verkaufen__titel:hover,
.objekt-verkaufen__zeile:hover { color: #aa8d70; }

@media (max-width: 767px) {
    /* Auf dem Telefon sind die Kacheln halb so breit — 44 Punkte Schrift
       passten dort nicht in die 60 Punkte Innenabstand. */
    .objekt-verkaufen { padding: 34px 24px; }
    .objekt-verkaufen__titel { font-size: 28px; line-height: 1.2; margin-bottom: 14px; }
}

/* ------------------------------------------------- Aufklappfeld im Menue */

/*
 * Abgelesen an realestepona.com/apartments/ (1920), nicht nachempfunden:
 *   Feld        1200 breit, weiss, Schatten rgba(0,0,0,.1) 0 2px 13px
 *   Lage        an der Unterkante des Menuepunktes (dort y 68 bei einem
 *               Punkt von 32 bis 68) und 400 links von seiner Mitte
 *   Spalten     drei zu je 400, innen 50 oben/unten und 60 links/rechts
 *   Titel       Roboto Condensed 32 / Gewicht 300, 35 unter sich
 *   Kopfzeile   Roboto 17 / Gewicht 400 in #AA8D70, 10 unter sich
 *   Punkte      Roboto 17 / Gewicht 300 in Schwarz, ohne Rand und Abstand —
 *               der Rhythmus von 29 kommt allein aus der Zeilenhoehe
 *   "Show All"  Roboto 20 / Gewicht 400
 *   Knopf       152 x 44, 20 gerundet, #AA8D70, 15 in Versalien, Sperrung 2
 *
 * Wichtig ist die Lage ohne Luecke: saesse das Feld erst an der Unterkante
 * der ganzen Kopfzeile, laege zwischen Punkt und Feld eine Spanne ohne
 * Mauszeiger — das Feld klappte wieder zu, bevor man es erreicht.
 */
/*
 * Der Menuepunkt reicht senkrecht bis zur Unterkante des Kopfes, auch wenn
 * seine Beschriftung nur 36 Punkte hoch ist. Sonst liegen zwischen Punkt und
 * Aufklappfeld 33 Punkte toter Kopf: der Zeiger verlaesst dort den Punkt, die
 * Hervorhebung faellt weg und das Feld klappt zu, bevor man es erreicht.
 *
 * Bezug des Feldes ist bewusst NICHT dieser Punkt, sondern .liste-kopf —
 * siehe .kopf-mega.
 */
.liste-kopf__menue { align-self: stretch; }

.liste-kopf__menue > ul { height: 100%; align-items: stretch; }

.liste-kopf__menue > ul > li {
    display: flex;
    align-items: center;
}

/*
 * Mittig auf der Seite, nicht unter dem Menuepunkt.
 *
 * Vorher war der Punkt der Bezug (left: 50% minus 400). Damit wanderte das
 * Feld mit dem Punkt: unter "Apartments" sass es 110 Punkte zu weit links,
 * unter "Specials" 374 zu weit rechts — und lief bei 1920 Fensterbreite
 * rechts aus dem Bild (734 bis 1934). Bezug ist jetzt .liste-kopf, die ueber
 * die ganze Breite laeuft; damit steht das Feld bei jedem Punkt an derselben
 * Stelle.
 *
 * top: 100% heisst dadurch "Unterkante des Kopfes" — genau dort, wo der
 * Menuepunkt jetzt endet, also ohne Spalt dazwischen.
 */
.kopf-mega {
    display: none;
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    width: 1200px;
    background: #fff;
    box-shadow: rgba(0, 0, 0, 0.1) 0 2px 13px 0;
    z-index: 1000;
}

/*
 * Offen, solange der Mauszeiger auf dem Punkt oder im Feld steht. Auch bei
 * Tastaturbedienung: ohne :focus-within kaeme man mit der Tabulatortaste in
 * ein Feld, das man nicht sieht.
 */
.liste-kopf__punkt--mega:hover .kopf-mega,
.liste-kopf__punkt--mega:focus-within .kopf-mega { display: flex; }

.kopf-mega__spalte {
    flex: 0 0 400px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    padding: 50px 60px;
}

/*
 * Die mittlere Spalte steht auf #F7F7F7, die rechte traegt unten rechts das
 * Symbol aus Haus, Sprechblase und Muenze — 160 x 160 in seiner eigenen
 * Groesse, bei 95 % der Breite und an der Unterkante. Beides an der
 * Live-Seite abgelesen.
 */
.kopf-mega__spalte--grau { background: #f7f7f7; }

.kopf-mega__spalte--symbol {
    background-image: url('../images/icon-talk-house-money.webp');
    background-repeat: no-repeat;
    background-position: 95% 100%;
    background-size: auto;
}

.kopf-mega__titel {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 32px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
    margin-bottom: 35px;
}

.kopf-mega__kopf {
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 400;
    line-height: 28.9px;
    color: #aa8d70;
    margin-bottom: 10px;
}

/* Die zweite Gruppe einer Spalte setzt ab. */
.kopf-mega__kopf--weiter { margin-top: 30px; }

.kopf-mega__punkt {
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
    text-decoration: none;
}

.kopf-mega__punkt:hover { color: #aa8d70; }

.kopf-mega__text {
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
    margin: 0;
}

.kopf-mega__text strong { font-weight: 700; }
.kopf-mega__text + .kopf-mega__text { margin-top: 17px; }

.kopf-mega__alle {
    font-family: Roboto, sans-serif;
    font-size: 20px;
    font-weight: 400;
    line-height: 28.9px;
    color: #000;
    text-decoration: none;
    margin-top: 21px;
}

.kopf-mega__alle:hover { color: #aa8d70; }

.kopf-mega__knopf {
    margin-top: 27px;
    padding: 11px 28px 9px;
    border-radius: 20px;
    background: #aa8d70;
    color: #fff;
    font-family: Roboto, sans-serif;
    font-size: 15px;
    font-weight: 400;
    line-height: 24px;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
}

.kopf-mega__knopf:hover { background: #202732; color: #fff; }

/* Unter 1400 ist fuer 1200 Punkte Feld kein Platz mehr neben dem Rand. */
@media (max-width: 1400px) {
    .kopf-mega { width: 1000px; }
    .kopf-mega__spalte { flex: 1 1 0; padding: 40px; }
}

@media (max-width: 1024px) {
    /* Auf Tastatur- und Fingerbedienung ohne Mauszeiger steht das Menue
       umgebrochen in der Zeile; ein Aufklappfeld daneben hat keinen Platz. */
    .kopf-mega { display: none !important; }
}

/* ------------------------------------------------------ Gebietsseiten */

/*
 * Der Kopf einer Gebietsseite: Ueberschrift und die Zahlen des Bestands.
 *
 * Anders als die alten Archivseiten des Originals, die gar keine h1 hatten,
 * steht sie hier oben und sichtbar — die Seite soll in einer Zeile sagen, wo
 * man ist und was es gibt. Masse wie die uebrigen Seitenueberschriften:
 * Roboto Condensed 44.2 / 53.04 / 300.
 */
.gebiet__kopf {
    max-width: 1200px;
    margin: 0 auto;
    padding: 60px 120px 0;
}

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

/* Die Zahlen stehen direkt darunter, in der Groesse des Fliesstextes. */
.gebiet__zahlen {
    margin: 0;
    font-size: 17px;
    line-height: 28.9px;
    font-weight: 300;
    color: #000;
}

.gebiet__zahlen strong { font-weight: 700; }

/*
 * Der Text unter den Treffern. Artikelbreite (800) wie die uebrigen langen
 * Texte, damit die Zeilen lesbar bleiben.
 */
.gebiet__text { padding: 20px 0 80px; }

.gebiet__inhalt { max-width: 800px; margin-inline: auto; }

/* Der Bestandsabsatz kommt aus der Datenbank und steht etwas abgesetzt. */
.gebiet__bestand {
    padding: 16px 20px;
    background: rgba(170, 141, 112, 0.15);
}

@media (max-width: 1240px) {
    .gebiet__kopf { padding: 40px 40px 0; }
}

@media (max-width: 767px) {
    .gebiet__kopf { padding: 30px 20px 0; }
    .gebiet__titel { font-size: 30px; line-height: 1.2; }
    .gebiet__inhalt { padding-inline: 20px; }
}

/* Die Tabelle des Bestands: Zahlen gehoeren in Spalten, nicht in Saetze. */
.gebiet__tabelle {
    width: 100%;
    border-collapse: collapse;
    margin: 0 0 24px;
    font-size: 17px;
    line-height: 28.9px;
}

.gebiet__tabelle th,
.gebiet__tabelle td {
    padding: 8px 12px;
    text-align: left;
    border-bottom: 1px solid #EEE;
}

.gebiet__tabelle th {
    font-weight: 600;
    color: #202732;
    border-bottom: 2px solid #AA8D70;
}

.gebiet__tabelle td:not(:first-child),
.gebiet__tabelle th:not(:first-child) { text-align: right; }

@media (max-width: 600px) {
    .gebiet__tabelle { font-size: 15px; }
    .gebiet__tabelle th, .gebiet__tabelle td { padding: 6px 6px; }
}

/* ------------------------------------------------------ Suche nach Nummer */

/*
 * /suche/ — die Antwort auf das Feld "Ref-No." im Kopf jeder Seite.
 *
 * Bei genau einem Treffer sieht diese Seite niemand, dann fuehrt sie direkt
 * zum Objekt. Sichtbar wird sie nur, wenn mehrere Objekte passen, keines
 * passt, oder jemand sie ohne Nummer aufruft.
 *
 * Masse wie die Gebietsseiten: derselbe Satzspiegel, dieselbe Ueberschrift.
 */
.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; }

.suchseite__weiter { font-size: 17px; font-weight: 300; }
.suchseite__weiter a { color: #aa8d70; }

/*
 * Die Treffer stehen im selben Raster wie jede Liste, also gelten auch
 * dieselben Kachelmasse — der Raster-Rand kommt hier aber von .suchseite.
 */
.suchseite .objekt-raster { margin-inline: -10px; }

@media (max-width: 1240px) {
    .suchseite { padding: 40px 40px 60px; }
}

@media (max-width: 767px) {
    .suchseite { padding: 30px 20px 50px; }
    .suchseite__titel { font-size: 30px; line-height: 1.2; }
    .suchseite .objekt-raster { margin-inline: -6px; }
    /* Auf dem Telefon nimmt das Feld die Zeile, der Knopf steht darunter. */
    .suchseite__feld { flex: 1 1 100%; }
}


/* === 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 #AA8D70, 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: #AA8D70;
    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: 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; }
}

/* ------------------------------------------------ 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: #AA8D70;
    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 — zweierlei, je nach Reihe.
 *
 * Im Original traegt der Artikelteil die Klasse "ownersContent"; dort setzt
 * das Theme Roboto in schwereren Schnitten, ueberall sonst Roboto Condensed
 * in leichten. Zuerst hatte ich maxWidth als Unterscheidung genommen — das
 * stimmte auf /rental-services/ und war auf /real-estate-agent-estepona/
 * falsch, wo die Reihe eingeengt, aber kein Artikel ist.
 *
 * Gemessen am Original (1500 Fensterbreite, dieselben Stellen auf beiden
 * Seiten):
 *
 *              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
 *
 * Versal sind h3 und h5, nicht h2 und h4.
 *
 * WICHTIG: Beide Regelsaetze sind gleich stark (je zwei Klassen und ein
 * Element). Es entscheidet also die Reihenfolge — der Artikelteil muss
 * hinten stehen. Genau daran hing es, dass die h4 auf /rental-services/
 * trotz richtiger Regel in Condensed dastanden.
 */

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

/* ---- ausserhalb des Artikels */

.inhaltsseite .start-text__inhalt h2 {
    font-family: "Roboto Condensed", sans-serif;
    font-size: 44.2px;
    line-height: 53.04px;
    font-weight: 300;
    margin: 0 0 10px;
}

.inhaltsseite .start-text__inhalt h3 {
    font-family: "Roboto Condensed", Roboto, sans-serif;
    font-size: 30.6px;
    line-height: 42.84px;
    font-weight: 300;
    text-transform: uppercase;
    margin: 0 0 11.05px;
}

.inhaltsseite .start-text__inhalt h4 {
    font-family: "Roboto Condensed", Roboto, sans-serif;
    font-size: 23.8px;
    line-height: 33.32px;
    font-weight: 400;
    margin: 0 0 10.2px;
}

/* ---- im Artikel */

/*
 * 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;
}


.inhaltsseite .start-text__reihe--artikel h2,
.inhaltsseite .start-text__inhalt--artikel h2 {
    font-family: Roboto, sans-serif;
    font-size: 40.8px;
    line-height: 48.96px;
    font-weight: 600;
    margin: 40px 0 10px;
}

.inhaltsseite .start-text__reihe--artikel h3,
.inhaltsseite .start-text__inhalt--artikel h3 {
    font-family: Roboto, sans-serif;
    font-size: 22.1px;
    line-height: 30.94px;
    font-weight: 600;
    text-transform: uppercase;
    margin: -6px 0 11.05px;
}

.inhaltsseite .start-text__reihe--artikel h4,
.inhaltsseite .start-text__inhalt--artikel h4 {
    font-family: Roboto, sans-serif;
    font-size: 20.4px;
    line-height: 28.56px;
    font-weight: 600;
    margin: 30.6px 0 10.2px;
}

.inhaltsseite .start-text__reihe--artikel h5,
.inhaltsseite .start-text__inhalt--artikel h5 {
    font-family: Roboto, sans-serif;
    font-size: 20.4px;
    line-height: 30.6px;
    font-weight: 600;
    text-transform: uppercase;
    margin: 30.6px 0 10.2px;
}

/*
 * 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;
}

@media (max-width: 767px) {
    .inhaltsseite .start-text__inhalt h2 { font-size: 30px; line-height: 1.2; }
    .inhaltsseite .start-text__inhalt h3 { font-size: 20px; line-height: 1.4; }
}

/*
 * Eine h1 mitten im Fliesstext. Auf /sell-your-property/selling-property-in-
 * estepona/ traegt der Text selbst die Ueberschrift; ohne eigene Regel fiel
 * sie auf die globale Groesse (64.8) statt auf die des Artikels.
 * Gemessen: Roboto 40.8 / 44.88 / Gewicht 600.
 */
.inhaltsseite .start-text__inhalt h1 {
    font-family: Roboto, sans-serif;
    font-size: 40.8px;
    line-height: 44.88px;
    font-weight: 600;
    color: #202732;
    margin: 0 0 14px;
}

/*
 * 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; }
    .inhaltsseite .start-text__inhalt h1 { font-size: 28px; line-height: 1.2; }
}

/*
 * 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, #aa8d70);
        border-color: var(--color-gold, #aa8d70);
        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; }


/* === components/beitrag.css === */
/*
 * Die Beitragsseite einer Meldung (/<slug>/).
 *
 * Alles hier ist auf realestepona.com nachgemessen, am 2026-10-04 bei 1500
 * Fensterbreite, am Beispiel der Meldung zum Muay-Thai-Abend:
 *
 *   Rahmen        1200 breit, mittig (links 150), Polster 60 oben und unten
 *   zwei Spalten  733 und 367, Luecke 100, Polster 24 oben und unten
 *   Titel         h1 Roboto Condensed 51 / 56.1 / 300, versal, 25.5 unter sich
 *   Titelbild     volle Textbreite, 32 unter sich
 *   h2 im Text    Roboto Condensed 44.2 / 53.04 / 300, 22.1 unter sich
 *   p im Text     17 / 28.9 / 300, 15 unter sich
 *   Abschnitte    h2 Condensed 44.2 / 53.04 / 300, 60 oben und 30 unten
 *   Seitenspalte  h3 Condensed 30.6 / 42.84 / 300, versal, 10 unter sich;
 *                 die zweite Ueberschrift mit 40 Abstand nach oben
 */

.beitragsseite {
    /* 1200 mittig in 1500: links und rechts je 150. */
    max-width: 1200px;
    margin: 0 auto;
    padding: 60px 0;
}

/* --------------------------------------------------- Text und Seitenspalte */

.beitrag {
    display: grid;
    grid-template-columns: 733px 367px;
    column-gap: 100px;
    row-gap: 32px;
    padding: 24px 0;
    align-items: start;
}

/* --------------------------------------------------------------- Der Text */

.beitrag__titel {
    margin: 0 0 25.5px;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 51px;
    line-height: 56.1px;
    font-weight: 300;
    text-transform: uppercase;
    color: #202732;
}

.beitrag__bild {
    margin: 0 0 32px;
}

.beitrag__bild-datei {
    display: block;
    width: 100%;
    height: auto;
}

.beitrag__inhalt {
    font-size: 17px;
    line-height: 28.9px;
    font-weight: 300;
    color: #000;
}

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

.beitrag__inhalt h3 {
    margin: 0 0 11.05px;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 30.6px;
    line-height: 42.84px;
    font-weight: 300;
    text-transform: uppercase;
    color: #202732;
}

.beitrag__inhalt p { margin: 0 0 15px; }

.beitrag__inhalt a { color: #CCAB86; }

.beitrag__inhalt ul,
.beitrag__inhalt ol { margin: 0 0 15px; padding-left: 34px; }

/* ------------------------------------------------------- Die Seitenspalte */

.beitrag-spalte__titel {
    margin: 0 0 10px;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 30.6px;
    line-height: 42.84px;
    font-weight: 300;
    text-transform: uppercase;
    color: #202732;
}

/* Die zweite Ueberschrift steht 40 unter der letzten Kachel darueber. */
.beitrag-spalte__kacheln + .beitrag-spalte__titel { margin-top: 40px; }

/*
 * Die Kacheln sind dieselben wie in den Listen, hier aber untereinander.
 *
 * Im Original ist die Kachel 387 breit und traegt 10 Innenabstand — das Bild
 * darin ist also 367 breit, genau die Spaltenbreite. Dafuer ragt die Kachel
 * links und rechts um 10 aus der Spalte heraus. Zwischen den Kacheln steht
 * kein Abstand: die beiden Innenabstaende ergeben die 20.
 */
.beitrag-spalte__kacheln {
    display: grid;
    gap: 0;
    margin-inline: -10px;
}

.beitrag-spalte__kacheln .objekt-karte { width: auto; }

/*
 * Das Bild bleibt 305 hoch, auch wenn die Kachel breiter ist als in der
 * Liste: im Original misst es hier 367 x 305. Mit dem Seitenverhaeltnis der
 * Liste (320:305) waere es 350 hoch und die Kachel 437 statt 413.
 */
.beitrag-spalte__kacheln .objekt-karte__bild {
    aspect-ratio: auto;
    height: 305px;
}

/*
 * Unter der Preiszeile stehen im Original 20 Punkte Luft — die Kachel misst
 * damit 413 statt 392. (Auf den Listenseiten ist die Kachel ohnehin anders
 * geschnitten, dort gilt das nicht.)
 */
.beitrag-spalte__kacheln .objekt-karte__zeile { padding-bottom: 20px; }

/* ------------------------------------------------- Abschnitte am Seitenfuss */

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

/*
 * "More news" ist ein Streifen, kein festes Raster: drei Kacheln sichtbar,
 * wischbar, mit Pfeilen und einem Punkt je Meldung — wie im Original (dort
 * zwoelf Punkte bei drei sichtbaren Kacheln).
 *
 * Gemessen: Kachel 373 breit, Luecke 40 — (1200 - 2 x 40) / 3 = 373.3.
 * Das Einrasten und das Wischen macht der Browser; die Pfeile und Punkte
 * setzt assets/js/src/news-slider.js, derselbe wie auf der Startseite.
 */
/*
 * Die Neubau-Einheiten unter der Meldung. Dasselbe Raster wie in den Listen,
 * nur dass der Innenabstand der Kacheln hier nach aussen ausgeglichen wird —
 * sonst stuenden die Fotos 10 Punkte weiter innen als der Text darueber.
 *
 * Vier zu einem Viertel, nicht fuenf zu einem Fuenftel wie in den Listen: der
 * Textbereich einer Meldung ist 1220 breit und nicht die ganze Seite, und ein
 * Fuenftel davon laesst fuer das Foto 224 Punkte — zu wenig fuer eine Zeile
 * "3 beds · 2 baths" unter dem Preis. Mit einem Viertel sind es 285, dasselbe
 * Mass wie in einer Liste auf einem kleineren Schirm.
 */
/*
 * Der Hinweis unter einer Meldung, die aus einer Pressemitteilung entstanden
 * ist. Abgesetzt, aber nicht versteckt: eine Linie darueber, kleinere Schrift,
 * und der Verweis auf die Quelle in Gold wie die uebrigen Verweise.
 */
.beitrag__hinweis {
    margin: 32px 0 0;
    padding-top: 16px;
    border-top: 1px solid #e4e4e4;
    font-family: Roboto, sans-serif;
    font-size: 14px;
    line-height: 24px;
    font-weight: 300;
    color: #667;
}

.beitrag__hinweis a { color: #aa8d70; }

.beitrag__objekte {
    margin: 0 -10px 40px;
}

.beitrag__objekte .objekt-karte { flex-basis: 25%; }

/*
 * Auf dem Tablett zwei statt vier. Ab 1024 stehen Text und Objektspalte
 * untereinander, der Textbereich ist dann nur noch so breit wie die Seite —
 * vier Kacheln darin liessen bei 768 noch 157 Punkte fuer das Foto, weniger
 * als die Haelfte des Masses, auf das die Kachel gezeichnet ist.
 */
@media (max-width: 1024px) {
    .beitrag__objekte .objekt-karte { flex-basis: 50%; }
}

.beitrag__news-bereich { position: relative; }

.beitrag__news-buehne { position: relative; }

.beitrag__news {
    display: flex;
    gap: 40px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    scrollbar-width: none;
}

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

.beitrag__news .news-karte {
    flex: 0 0 calc((100% - 80px) / 3);
    scroll-snap-align: start;
}

/*
 * Die Pfeile liegen ueber dem Streifen, 15 von seinen Kanten entfernt und
 * mittig in der Hoehe: 32 x 48, schwarz mit 0.8 Deckung, Ecken 3, das Ganze
 * mit 0.75 Deckung — gemessen am Original.
 */
.beitrag__news-pfeile {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    pointer-events: none;
}

.beitrag__news-pfeil {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 32px;
    height: 48px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 0;
    border-radius: 3px;
    background: rgba(0, 0, 0, 0.8);
    color: #fff;
    font-size: 22px;
    line-height: 1;
    opacity: 0.75;
    cursor: pointer;
    pointer-events: auto;
}

.beitrag__news-pfeil:hover { opacity: 1; }

.beitrag__news-pfeile [data-news-zurueck] { left: 15px; }
.beitrag__news-pfeile [data-news-vor] { right: 15px; }

/* Die Punkte stehen mittig, 8 unter dem Streifen. */
.beitrag__news-punkte {
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 8px;
    min-height: 17px;
}

/* ------------------------------------------------------------- Schmaler */

@media (max-width: 1240px) {
    .beitragsseite { padding: 60px 40px; }
    .beitrag {
        grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
        column-gap: 60px;
    }
}

@media (max-width: 1024px) {
    .beitrag { grid-template-columns: 1fr; }
    .beitrag__titel { font-size: 38px; line-height: 1.15; }
    .beitrag__inhalt h2 { font-size: 32px; line-height: 1.2; }
    .beitrag__abschnitt { font-size: 32px; line-height: 1.2; }
    .beitrag__news { gap: 24px; }
    .beitrag__news .news-karte { flex: 0 0 calc((100% - 24px) / 2); }
}

@media (max-width: 767px) {
    /* 16 wie Logo und Brenner darueber — ein Seitenrand fuer die ganze Seite. */
    .beitragsseite { padding: 40px 20px; }
    .beitrag__titel { font-size: 30px; }
    .beitrag__inhalt h2 { font-size: 26px; }
    .beitrag__abschnitt { font-size: 26px; margin: 40px 0 20px; }
    .beitrag__news .news-karte { flex: 0 0 86%; }
    .beitrag__objekte { margin: 0 -6px 30px; }
    .beitrag__objekte .objekt-karte { flex-basis: 100%; }

    /*
     * Die Pfeile liegen nicht mehr ueber dem Streifen, sondern darunter.
     *
     * Auf dem Schirm stehen drei Kacheln nebeneinander, und die Pfeile sitzen
     * an den Raendern ueber den Fotos — so ist es am Original gemessen. Auf
     * dem Telefon fuellt eine Kachel den Streifen, und dieselben Pfeile lagen
     * mitten auf ihrer Ueberschrift (Kachel 20 bis 308, linker Pfeil 35 bis
     * 67). Darunter ist Platz, und sie sehen aus wie die der Startseite:
     * 40 x 40, weiss mit Rahmen statt schwarz halbdurchsichtig.
     */
    .beitrag__news-pfeile {
        position: static;
        display: flex;
        justify-content: center;
        gap: 10px;
        margin-top: 14px;
        pointer-events: auto;
    }
    .beitrag__news-pfeil {
        position: static;
        transform: none;
        width: 40px;
        height: 40px;
        border: 1px solid var(--color-border);
        border-radius: 0;
        background: #fff;
        color: var(--color-heading);
        opacity: 1;
    }
    .beitrag__news-pfeil:hover,
    .beitrag__news-pfeil:focus-visible {
        border-color: var(--color-gold);
        color: var(--color-gold);
        background: #fff;
    }
    .beitrag__news-punkte { margin-top: 12px; }
}


/* === components/objekt-detail.css === */
/* ------------------------------------------------- Detailseite eines Objekts */

/*
 * Gemessen an realestepona.com/properties/… (1920):
 *   Galerie    1200 breit, mittig — Raster aus vier Spalten zu 293 und drei
 *              Reihen zu 250, Luecke 10. Das erste Bild nimmt zwei Spalten
 *              und zwei Reihen (595 x 510), acht Vorschauen den Rest
 *   Spalten    links 779 (x 360), rechts 389 (x 1171) — Luecke 32
 *   Titel      Roboto Condensed 44.2 / 53.04 / Gewicht 300 in #202732
 *   Preis      Roboto 21.6 / 30.24 / Gewicht 700 in Schwarz
 *   Abschnitt  Roboto Condensed 23.8 / 33.32 / Gewicht 400 in #AA8D70
 *   Zeilen     Roboto 17 / 28.9 / Gewicht 300, Beschriftung links, Wert bei
 *              171, Rhythmus 37
 *   Merkmale   zwei Spalten, Roboto 17 / 27.2 / Gewicht 300, mit Haken davor
 *   Fliesstext Roboto 17 / 28.9, Absatz 15 unter sich
 */
.objektseite--detail {
    padding: 100px 120px 120px;
}

/*
 * Vier Spalten, drei Reihen, 10 Luecke — das erste Bild nimmt zwei Spalten
 * und zwei Reihen. Die Reihen sind nicht in Punkten festgelegt, sondern
 * gleich hoch innerhalb eines Seitenverhaeltnisses: so bleiben die
 * gemessenen 293 x 250 je Feld auch in einem schmaleren Fenster erhalten,
 * ohne dass eine Reihe springt.
 */
.objekt-galerie {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(3, 1fr);
    aspect-ratio: 1200 / 770;
    gap: 10px;
    max-width: 1200px;
    margin: 0 auto 60px;
    /*
     * Rund sind nur die vier Aussenecken des Blocks, jedes Foto also nur in
     * seiner eigenen Ecke — so steht es auf der Live-Seite (15 Punkte, in den
     * Eckbildern je eine Ecke). Der Rundung am Block mit Beschnitt statt
     * vier Regeln an bestimmten Kindern: die greifen auch dann richtig, wenn
     * ein Objekt weniger als neun Fotos hat oder das Raster im schmalen
     * Fenster anders laeuft.
     */
    border-radius: 15px;
    overflow: hidden;
}

.objekt-galerie__feld {
    overflow: hidden;
    background: #333;
}

.objekt-galerie__feld:first-child {
    grid-column: span 2;
    grid-row: span 2;
}

.objekt-galerie__feld img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    cursor: pointer;
    transition: transform 0.4s ease;
}

.objekt-galerie__feld img:hover { transform: scale(1.03); }

/* Die uebrigen Bilder stehen nur fuer die Lupe im Quelltext. */
.objekt-galerie__feld--verborgen { display: none; }

/* ------------------------------------------------------------ Zwei Spalten */

/*
 * Gemessen: linke Spalte 779 (ab 360), Luecke 32, rechte 389 (ab 1171) —
 * zusammen die 1200 der Galerie darueber. Die 327, die ich zuerst gemessen
 * hatte, sind der Inhalt im Kasten: der traegt 30 Innenabstand und 1 Rahmen,
 * macht 389.
 */
/*
 * Drei Bereiche in einem Raster: Titel, Hauptspalte, Kasten.
 *
 * Am Schirm steht der Titel ueber der Hauptspalte und der Kasten rechts
 * daneben ueber beide Zeilen — dasselbe Bild wie vorher mit zwei Spalten.
 * Als Raster und nicht als Flex, weil sich die Reihenfolge damit auf dem
 * Telefon aendern laesst, ohne den Quelltext umzustellen: dort kommt
 * "seite" zwischen "titel" und "haupt" (siehe 1024).
 */
.objekt-spalten {
    display: grid;
    grid-template-columns: minmax(0, 779px) 389px;
    grid-template-areas:
        "titel seite"
        "haupt seite";
    align-items: start;
    gap: 0 32px;
    max-width: 1200px;
    margin: 0 auto;
}

.objekt-kopf { grid-area: titel; min-width: 0; }
.objekt-haupt { grid-area: haupt; min-width: 0; }
.objekt-seite { grid-area: seite; }

.objekt-titel {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 44.2px;
    font-weight: 300;
    line-height: 53.04px;
    color: #202732;
    margin: 0 0 24px;
}

.objekt-hinweis {
    margin: 0 0 20px;
    padding: 12px 18px;
    background: #f7f7f7;
    border-left: 3px solid #aa8d70;
    font-size: 17px;
    font-weight: 400;
    color: #202732;
}

.objekt-block__titel {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 23.8px;
    font-weight: 400;
    line-height: 33.32px;
    color: #aa8d70;
    margin: 0 0 10px;
}

.objekt-block__titel--merkmale { margin-top: 40px; }

/*
 * Ueberschriften im Beschreibungstext.
 *
 * Der eigene Strom liefert die Beschreibung als fertiges HTML mit h2 und h3
 * darin. Fuer die galt bisher nur die allgemeine Regel aus typography.css —
 * h2 { font-size: 2.8em }, also 50.4 Punkt. Damit war eine Zwischenzeile im
 * Beschreibungstext groesser als die H1 der Seite (44.2 am Schirm, 28 auf dem
 * Telefon) und groesser als die Ueberschrift des Blocks, in dem sie steht
 * ("Property Description", 23.8).
 *
 * Sie bekommen deshalb das Mass der Seite: h2 auf 23.8 wie die
 * Blockueberschrift darueber, nur in Dunkel statt Gold, dann 20 und 18. Damit
 * steht keine ueber der H1 (44.2 / 28) und keine unter dem h4 des grauen
 * Rahmens (23.8) — bei 20 war der h4 dort groesser als ein h2 hier. Fest in
 * Punkt und nicht in em, damit die allgemeine Regel nicht durchschlaegt.
 */
.objekt-beschreibung h2,
.objekt-beschreibung h3,
.objekt-beschreibung h4 {
    font-family: 'Roboto Condensed', sans-serif;
    color: #202732;
    margin: 26px 0 8px;
}
.objekt-beschreibung > :first-child { margin-top: 0; }
.objekt-beschreibung h2 { font-size: 23.8px; line-height: 33.32px; font-weight: 400; }
.objekt-beschreibung h3 { font-size: 20px; line-height: 28px; font-weight: 400; }
.objekt-beschreibung h4 { font-size: 18px; line-height: 26px; font-weight: 500; }

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

/*
 * Merkmale: zwei Spalten mit einem Haken davor. Der Haken ist gezeichnet und
 * kein Zeichen aus einer Schrift — so sitzt er auf jedem Geraet gleich.
 */
.objekt-merkmale {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0 30px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.objekt-merkmale li {
    position: relative;
    padding-left: 26px;
    font-size: 17px;
    font-weight: 300;
    line-height: 27.2px;
    color: #000;
}

.objekt-merkmale li::before {
    content: '';
    position: absolute;
    left: 0;
    top: 9px;
    width: 12px;
    height: 7px;
    border-left: 2px solid #aa8d70;
    border-bottom: 2px solid #aa8d70;
    transform: rotate(-45deg);
}

/* ---------------------------------------------------------- Seitenkasten */

/* Die Telefonliste gilt nur dort; am Schirm steht der Kasten rechts. */
.objekt-eck { display: none; }

.objekt-preis {
    font-size: 21.6px;
    font-weight: 700;
    line-height: 30.24px;
    color: #000;
    margin: 0 0 24px;
}

/* Am Schirm steht nur die Zahl — "Price:" sagt der Zusammenhang. */
.objekt-preis__name { display: none; }

.objekt-block { margin-bottom: 36px; }

/*
 * Beschriftung und Wert stehen in einer Zeile: die Beschriftung links, der
 * Wert bei 171. Jede Zeile ist ein eigenes Raster, damit sich jede zweite
 * hell hinterlegen laesst.
 */
.objekt-block__liste {
    margin: 0;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
}

/* ---------------------------------------------------- Kasten im Seitenteil */

/*
 * Gemessen: 389 breit (also 31 breiter als die Spalte, weil der Rahmen
 * aussen liegt), Rahmen 1 in #CCC, 30 gerundet, 30 Innenabstand, Schatten
 * rgba(0,0,0,.1) 0 0 7.
 */
.objekt-seite__kasten {
    border: 1px solid #ccc;
    border-radius: 30px;
    padding: 30px;
    box-shadow: rgba(0, 0, 0, 0.1) 0 0 7px 0;
}

/*
 * Jede zweite Zeile hell hinterlegt (#F7FAFC), die erste jeder Gruppe mit
 * mehr Luft nach oben — so steht es dort: 15 oben in der ersten Zeile, 3 in
 * den uebrigen, 5 unten.
 */
.objekt-zeile {
    display: grid;
    grid-template-columns: 171px 1fr;
    padding: 3px 0 5px;
}

.objekt-zeile:first-child { padding-top: 15px; }
.objekt-zeile:nth-child(even) { background: #f7fafc; }

/*
 * Beschriftung mager, Wert halbfett. Bisher hatten beide dasselbe Gewicht,
 * und die Spalte las sich als Fliesstext statt als Tabelle. 500 und nicht
 * 700: das Fette der alten Seite ist uns zu laut.
 */
.objekt-zeile__name,
.objekt-zeile__wert { margin: 0; }
.objekt-zeile__name { font-weight: 300; }
.objekt-zeile__wert { font-weight: 500; }

/* ------------------------------------------------------------- Knoepfe */

/*
 * Derselbe Knopf wie im Aufklappmenue: 44 hoch, 20 gerundet, #AA8D70,
 * 15 in Versalien mit Sperrung 2.
 */
.objekt-knopf {
    display: inline-block;
    margin: 24px 0 30px;
    padding: 11px 28px 9px;
    border: 0;
    border-radius: 20px;
    background: #aa8d70;
    color: #fff;
    font-family: Roboto, sans-serif;
    font-size: 15px;
    font-weight: 400;
    line-height: 24px;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
    transition: background-color 0.2s ease;
}

.objekt-knopf:hover,
.objekt-knopf:focus-visible { background: #202732; color: #fff; }
.objekt-knopf[disabled] { opacity: 0.6; cursor: default; }

/* --------------------------------------------------- Aufrufe unter dem Text */

/*
 * Zwei Spalten zu 357 mit 65 Luecke, Ueberschrift in Roboto Condensed 30.6 /
 * 42.84 / Gewicht 300 in #202732.
 */
/*
 * Trennlinie zwischen Exposé und den beiden Angeboten: 1 Punkt in #CCC ueber
 * die ganze Spalte, 49 darueber und 41 darunter — so gemessen.
 */
.objekt-trenner {
    height: 0;
    margin: 49px 0 41px;
    border: 0;
    border-top: 1px solid #ccc;
}

.objekt-aufrufe {
    display: flex;
    gap: 65px;
}

/*
 * Gleiche Haelften, aber ohne Mass in der Grundbreite: flex-basis zaehlt
 * immer auf der Hauptachse, und die kippt bei 1024 auf senkrecht (siehe
 * unten). Aus 357 Punkt Breite wurden dort 357 Punkt *Hoehe* — die Bloecke
 * sind 164 hoch, also standen 193 Punkt Leere in jedem. Mit Grundbreite 0
 * teilen sich beide den Platz zu gleichen Teilen, am Schirm wieder 357, und
 * senkrecht gibt es nichts zu verteilen.
 */
.objekt-aufruf { flex: 1 1 0; min-width: 0; }

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

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

.objekt-aufruf .objekt-knopf { margin: 14px 0 0; }

/* ------------------------------------------------------------ Fussleiste */

/*
 * Zurueck links, Weiterleiten rechts — auf einer Linie, 1200 breit wie der
 * Inhalt darueber, Schrift Roboto 17 / Gewicht 300 in #202732 mit Symbol.
 */
.objekt-fuss {
    display: flex;
    justify-content: space-between;
    align-items: center;
    max-width: 1200px;
    margin: 56px auto 0;
}

.objekt-fuss__zurueck,
.objekt-fuss__teilen {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 0;
    border: 0;
    background: none;
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #202732;
    text-decoration: none;
    cursor: pointer;
}

.objekt-fuss__zurueck:hover,
.objekt-fuss__teilen:hover { color: #aa8d70; }

.objekt-fuss__symbol {
    width: 20px;
    height: 20px;
    flex: 0 0 20px;
    color: #aa8d70;
}

/* --------------------------------------------------- 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: #aa8d70; }

.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 */

.objekt-formular__reihe {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-bottom: 12px;
}

.objekt-formular__reihe--drei { grid-template-columns: 100px 1fr 1fr; }

.objekt-formular input,
.objekt-formular select,
.objekt-formular textarea {
    width: 100%;
    min-height: 45px;
    padding: 10px 14px;
    border: 1px solid #bfbfbf;
    border-radius: 0;
    background: #fff;
    font-family: Roboto, sans-serif;
    font-size: 16px;
    font-weight: 300;
    color: #202732;
}

.objekt-formular textarea {
    min-height: 110px;
    margin-bottom: 12px;
    resize: vertical;
}

.objekt-formular input:focus,
.objekt-formular select:focus,
.objekt-formular textarea:focus {
    outline: 2px solid #aa8d70;
    outline-offset: -2px;
}

.objekt-formular__wahl {
    margin: 0 0 12px;
    padding: 0;
    border: 0;
}

.objekt-formular__wahl legend {
    padding: 0;
    font-size: 17px;
    font-weight: 300;
    color: #000;
}

.objekt-formular__wahl label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 6px 18px 0 0;
    font-size: 17px;
    font-weight: 300;
}

.objekt-formular__wahl input {
    width: auto;
    min-height: 0;
    margin: 0;
}

.objekt-formular .objekt-knopf { margin: 6px 0 0; }

/*
 * Der Honigtopf. Nicht display:none — manche Bots ueberspringen, was so
 * verborgen ist. Aus dem Bild geschoben wird er dagegen ausgefuellt.
 */
.objekt-formular__honig {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.objekt-formular__meldung {
    margin: 14px 0 0;
    font-size: 17px;
    font-weight: 400;
    line-height: 28.9px;
}

.objekt-formular__meldung.ist-fertig { color: #2f7a3d; }
.objekt-formular__meldung.ist-fehler { color: #b23b3b; }

@media (max-width: 1024px) {
    .objekt-aufrufe { flex-direction: column; gap: 32px; }
    .objekt-fuss { margin-top: 40px; }
}

@media (max-width: 767px) {
    /*
     * Die Ueberschriften der beiden Angebote: 25.2 statt 30.6. Mit 30.6
     * standen sie ueber der H1 der Seite (28) — auf der alten Seite sind es
     * 25.2 bei einem Titel von 27, also klar darunter.
     */
    .objekt-aufruf__titel { font-size: 25.2px; line-height: 35.28px; }

    .objekt-fenster { padding: 20px 12px; }
    .objekt-fenster__kasten { padding: 28px 20px; }
    .objekt-fenster__titel { font-size: 24px; line-height: 1.25; }
    .objekt-formular__reihe,
    .objekt-formular__reihe--drei { grid-template-columns: 1fr; }
    .objekt-fuss { gap: 16px; }
}

/* ------------------------------------------------------------- Schmaler */

@media (max-width: 1400px) {
    .objektseite--detail { padding: 60px 40px 80px; }
    .objekt-spalten { gap: 48px; }
}

@media (max-width: 1024px) {
    .objektseite--detail { padding: 40px 24px 60px; }
    /* Zwei Spalten, das grosse Bild oben ueber die ganze Breite. */
    .objekt-galerie {
        grid-template-columns: 1fr 1fr;
        grid-template-rows: auto;
        aspect-ratio: auto;
    }
    .objekt-galerie__feld { aspect-ratio: 293 / 250; }
    .objekt-galerie__feld:first-child { grid-column: span 2; grid-row: auto; aspect-ratio: 595 / 400; }
    /*
     * Eine Spalte, und der Kasten wandert nach oben: Titel, Eckdaten,
     * Beschreibung — die Reihenfolge der alten Seite. Wer ein Objekt
     * aufruft, will zuerst Preis, Lage und Zimmerzahl sehen und nicht
     * tausend Punkte Text.
     */
    .objekt-spalten {
        grid-template-columns: minmax(0, 1fr);
        grid-template-areas:
            "titel"
            "seite"
            "haupt";
        gap: 32px;
    }
    .objekt-seite { width: 100%; }
    .objekt-titel { font-size: 34px; line-height: 1.2; }
    /*
     * Der Eigenabstand des Titels entfaellt: untereinander zaehlt schon die
     * Luecke des Rasters, und beides zusammen waren 56 Punkt zwischen Titel
     * und erster Zeile — auf der alten Seite sind es 19.
     */
    .objekt-kopf .objekt-titel { margin-bottom: 0; }

    /*
     * Der Kasten zusammengezogen: ueber die ganze Breite haben zwei Werte
     * nebeneinander Platz. Das Zebra aus :nth-child entfaellt dabei — bei
     * zwei Spalten traefe es jede zweite Zelle und nicht jede zweite Zeile,
     * und daraus wuerde ein Schachbrett. Hier statt dessen eine Haarlinie
     * unter jeder Zeile; auf dem Telefon kommt das durchgehende Streifen-
     * muster der alten Seite (siehe unten, 767).
     */
    .objekt-seite__kasten { padding: 24px; }
    .objekt-block { margin-bottom: 24px; }
    .objekt-block__liste {
        display: grid;
        grid-template-columns: 1fr 1fr;
        column-gap: 24px;
    }
    .objekt-seite__kasten .objekt-zeile {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 8px;
        padding: 6px 0;
        border-bottom: 1px solid #ededed;
        background: none;
    }
    .objekt-seite__kasten .objekt-zeile:first-child { padding-top: 6px; }
    .objekt-zeile__wert { text-align: right; }

    /*
     * Die beiden Knoepfe im Kasten entfallen hier: dieselben stehen wenige
     * Bildschirmhoehen weiter unten in "Download the Exposé!" und "Visit
     * this Property?", und zweimal derselbe Knopf in einer Spalte ist einer
     * zu viel.
     */
    .objekt-seite__kasten > .objekt-knopf { display: none; }
}

/* ------------------------------------------- Telefon: Wischer mit Punkten */

/*
 * Auf dem Telefon ist die Galerie kein Raster, sondern ein Wischer — so steht
 * es auf der Live-Seite: ein Bild von 335 x 305 je Ansicht in einem Fenster
 * von 350, also 15 Luecke, 10 gerundet, darunter Punkte zu 6 mit 18 Abstand.
 *
 * Gewischt wird mit Rastpunkten des Browsers und nicht mit einem Skript: das
 * folgt dem Finger ohne Verzoegerung, laeuft auch ohne JavaScript und braucht
 * keine fremde Bibliothek. Die Punkte darunter entstehen in
 * assets/js/src/galerie-punkte.js.
 */
@media (max-width: 767px) {
    .objektseite--detail { padding: 24px 20px 48px; }
    .objekt-merkmale { grid-template-columns: 1fr; }
    .objekt-titel { font-size: 28px; }
    .objekt-spalten { gap: 24px; }

    /*
     * Die Eckdaten, abgelesen an realestepona.com bei 390.
     *
     * Drei Zeilen ueber die ganze Breite — Preis, Gemeinde, Objektnummer —
     * und danach vier Reihen zu zweit. Kein Kasten: keine Rundung, kein
     * Rahmen, kein Schatten. Jede zweite Reihe liegt auf #F7FAFC, und der
     * Streifen laeuft ueber beide Haelften durch; deshalb steht zwischen den
     * Spalten keine Luecke, sondern der Abstand sitzt als Innenabstand in den
     * Zellen. Sonst liefe ein weisser Spalt mitten durch den Streifen.
     *
     * Der Abstand zwischen den beiden Paaren ist groesser als der zwischen
     * Beschriftung und Wert (48 gegen 76 minus Textbreite): so sieht man auf
     * einen Blick, welcher Wert zu welcher Beschriftung gehoert.
     *
     * Reihe 54 hoch bei 3 oben und 5 unten, Beschriftung 18 / Gewicht 300,
     * Wert 18 / Gewicht 500, beide schwarz.
     */
    .objekt-seite__kasten { display: none; }

    .objekt-eck {
        display: grid;
        grid-template-columns: 1fr 1fr;
        column-gap: 0;
        margin: 0;
    }

    .objekt-eck__zeile {
        display: grid;
        grid-template-columns: 76px minmax(0, 1fr);
        align-items: baseline;
        min-height: 54px;
        padding: 3px 0 5px;
        font-size: 18px;
        font-weight: 300;
        line-height: 28.9px;
        color: #000;
    }

    .objekt-eck__zeile--voll {
        grid-column: 1 / -1;
        grid-template-columns: 136px minmax(0, 1fr);
    }

    /*
     * Eine kurze Angabe ohne Nachbarin: sie bleibt ein kleiner Block — die
     * Beschriftung in ihren 76 Punkten, der Wert gleich daneben. Nur der
     * Streifen nimmt die ganze Reihe, damit er nicht in der Mitte der Seite
     * endet.
     */
    .objekt-eck__zeile--allein { grid-column: 1 / -1; }

    /* Der groessere Abstand zwischen den Paaren, ohne Loch im Streifen. */
    .objekt-eck__zeile--links  { padding-right: 24px; }
    .objekt-eck__zeile--rechts { padding-left: 24px; }

    .objekt-eck__zeile--hell { background: #f7fafc; }

    .objekt-eck__name { margin: 0; font-weight: 300; }
    .objekt-eck__wert { margin: 0; font-weight: 500; }

    .objekt-galerie {
        display: flex;
        grid-template-columns: none;
        grid-template-rows: none;
        aspect-ratio: auto;
        gap: 15px;
        margin-bottom: 14px;
        border-radius: 10px;
        overflow-x: auto;
        overflow-y: hidden;
        scroll-snap-type: x mandatory;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }

    .objekt-galerie::-webkit-scrollbar { display: none; }

    /*
     * Ein Bild je Ansicht, die Luecke bleibt sichtbar: 335 Bild und 15
     * Luecke ergeben im Fenster von 350 genau einen Schritt.
     */
    .objekt-galerie__feld {
        flex: 0 0 calc(100% - 15px);
        scroll-snap-align: start;
        aspect-ratio: 335 / 305;
    }

    /* Hier gehoeren auch die Bilder dazu, die am Schirm verborgen sind. */
    .objekt-galerie__feld--verborgen { display: block; }
    .objekt-galerie__feld:first-child { grid-column: auto; grid-row: auto; }
    .objekt-galerie__feld img:hover { transform: none; }

    /*
     * Die Standanzeige: eine Zahl unten rechts im Bild und ein Balken an
     * seiner Unterkante.
     *
     * Vorher stand hier ein Punkt je Bild. Im Schnitt hat ein Objekt 29
     * Fotos, das groesste 112 — daraus wurden fuenf Reihen Punkte von 62
     * Punkt Hoehe, und jeder einzelne war 6 breit und damit als Schaltflaeche
     * unbrauchbar. Die Zahl steht bei drei Fotos genauso wie bei
     * hundertzwoelf und kostet nichts an Hoehe: sie liegt im Bild.
     */
    .objekt-galerie__huelle { position: relative; }

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

    .objekt-galerie__zaehler {
        position: absolute;
        right: 27px;
        bottom: 26px;
        padding: 4px 10px 3px;
        border-radius: 12px;
        background: rgba(32, 39, 50, 0.72);
        color: #fff;
        font-family: Roboto, sans-serif;
        font-size: 13px;
        font-weight: 400;
        line-height: 17px;
        letter-spacing: 0.02em;
    }

    /*
     * Der Balken sitzt auf der Unterkante des Bildes, nicht darunter: so
     * braucht er keine eigene Zeile. 15 Punkt schmaler als die Huelle, weil
     * das Bild im Wischer seine Luecke rechts behaelt.
     */
    .objekt-galerie__balken {
        position: absolute;
        left: 0;
        right: 15px;
        bottom: 14px;
        height: 2px;
        border-radius: 1px;
        background: rgba(255, 255, 255, 0.45);
        overflow: hidden;
    }

    .objekt-galerie__balken i {
        display: block;
        height: 100%;
        background: #aa8d70;
        transition: width 0.18s ease-out;
    }
}

/*
 * Am Schirm braucht es die Anzeige nicht — dort liegt alles gleichzeitig da.
 * Als eigene Abfrage und nicht als Regel ohne Abfrage: eine spaetere Regel
 * mit gleicher Spezifitaet gewinnt sonst gegen die des Telefons, und die
 * Anzeige bliebe auch dort verborgen.
 */
@media (min-width: 768px) {
    .objekt-galerie__stand { display: none; }
}


/* === components/fussrahmen.css === */
/* ------------------------------- Rahmen am Fuss: Fragen, Verkauf, Alarm */

/*
 * Gemessen an realestepona.com (1920):
 *   Abschnitt  volle Breite in #F2F2F2, 80 oben/unten, 120 seitlich
 *   Spalten    zwei zu 808 mit 64 Luecke
 *   H2         Roboto Condensed 44.2 / 53.04 / Gewicht 300 in #202732
 *   H4         Roboto Condensed 23.8 / 33.32 / Gewicht 400 in Schwarz,
 *              30 ueber sich, 10 darunter
 *   Zeilen     Roboto 17 / 28.9 / Gewicht 300, Verweise in #CCAB86,
 *              Symbol links, Text bei 28
 *   Kaestchen  13 x 13 mit 5 Abstand, Beschriftung 15.3 / 28.9, zwei Spalten
 *   Felder     45 hoch, Innenabstand 6/15/5, 10 unter sich
 *   Knopf      150 x 39, 20 gerundet
 */
.fussrahmen {
    /* Grauer Grund ueber die ganze Breite, der Innenabstand liegt darin — so
       steht es dort. Die Felder des Formulars bleiben weiss. */
    background: #f2f2f2;
    padding: 80px 120px;
}

.fussrahmen__innen {
    display: flex;
    gap: 64px;
    max-width: 1680px;
    margin: 0 auto;
}

.fussrahmen__spalte { flex: 1 1 808px; min-width: 0; }

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

.fussrahmen__titel--weiter { margin-top: 44px; }

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

.fussrahmen__text strong { font-weight: 700; }

.fussrahmen__unter {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 23.8px;
    font-weight: 400;
    line-height: 33.32px;
    color: #000;
    margin: 30px 0 10px;
}

/*
 * Erreichbarkeit: Symbol links, Text bei 28 — ohne Aufzaehlungspunkte.
 * Zwischen den Zeilen 5 Punkte, gemessen am Original.
 */
.fussrahmen__wege {
    display: grid;
    gap: 5px;
    list-style: none;
    margin: 0 0 10px;
    padding: 0;
}

.fussrahmen__wege li {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
}

.fussrahmen__wege a {
    color: #ccab86;
    text-decoration: none;
    overflow-wrap: anywhere;
}

.fussrahmen__wege a:hover { color: #aa8d70; }

.fussrahmen__symbol {
    width: 20px;
    height: 20px;
    flex: 0 0 20px;
    color: #aa8d70;
}

.fussrahmen .objekt-knopf { margin: 18px 0 0; }

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

.fussrahmen__formular { margin-top: 10px; }

/*
 * Der Baum der Objektarten: zwei Spalten mit je einem Ast. Oben die
 * Kategorie in Gewicht 400, darunter eingerueckt ihre Untertypen.
 */
.fussrahmen__baum {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 18px 10px;
    margin-bottom: 20px;
}

.fussrahmen__zweige { margin-left: 18px; }

.fussrahmen__baum label,
.fussrahmen__gemeinden label {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 15.3px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
    cursor: pointer;
}

/* Die Kategorie steht etwas kraeftiger als ihre Untertypen. */
.fussrahmen__kategorie { font-weight: 400 !important; }

.fussrahmen__gemeinden {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2px 10px;
    margin-bottom: 20px;
}

.fussrahmen__baum input,
.fussrahmen__gemeinden input {
    width: 13px;
    height: 13px;
    flex: 0 0 13px;
    margin: 0;
    accent-color: #aa8d70;
}

.fussrahmen__reihe {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-bottom: 10px;
}

.fussrahmen__reihe--drei { grid-template-columns: 1fr 1fr 1fr; }
/*
 * Eine Reihe mit einem einzelnen Feld. Auf dem Schirm behaelt es die Breite
 * der uebrigen Zahlenfelder (die rechte Haelfte bleibt leer) — ueber die
 * ganzen 801 Punkte gezogen saehe ein Feld fuer eine Quadratmeterzahl aus wie
 * ein Textfeld. Auf dem Telefon nimmt es die Zeile.
 */
.fussrahmen__reihe--eins { grid-template-columns: 1fr 1fr; }

.fussrahmen__formular input[type="text"],
.fussrahmen__formular input[type="tel"],
.fussrahmen__formular input[type="email"],
.fussrahmen__formular select {
    width: 100%;
    height: 45px;
    padding: 6px 15px 5px;
    border: 1px solid #bfbfbf;
    background: #fff;
    font-family: Roboto, sans-serif;
    font-size: 17px;
    font-weight: 400;
    color: #202732;
}

.fussrahmen__formular input:focus,
.fussrahmen__formular select:focus {
    outline: 2px solid #aa8d70;
    outline-offset: -2px;
}

/*
 * Zwischentitel ueber den persoenlichen Angaben — eine Zeile, kein Feld.
 * Im Original ohne Rand; der Abstand kommt aus dem Raster des Formulars.
 */
.fussrahmen__zwischen {
    margin: 0;
    padding: 5px 0;
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    color: #000;
}

/* Der Knopf des Alarms ist kleiner als die der Objektseite: 39 statt 44. */
.objekt-knopf--klein {
    padding: 8px 15px 7px;
    margin-top: 5px;
}

/* ---------------------------------------------------------------- Schmaler */

@media (max-width: 1400px) {
    .fussrahmen { padding: 60px 40px; }
    .fussrahmen__innen { gap: 40px; }
}

@media (max-width: 1024px) {
    .fussrahmen { padding: 48px 24px; }
    .fussrahmen__innen { flex-direction: column; gap: 48px; }
    .fussrahmen__titel { font-size: 34px; line-height: 1.2; }

    /*
     * Untereinander wird aus der Basisbreite 808 eine Basis-HOEHE von 808 —
     * die erste Spalte war damit 808 Punkte hoch, obwohl ihr Inhalt nach 527
     * endete. Zwischen dem Knopf und der naechsten Ueberschrift klafften
     * dadurch 329 Punkte leerer grauer Flaeche; genau das sah zerrissen aus.
     * Hier zaehlt nur noch der Inhalt.
     */
    .fussrahmen__spalte { flex: 0 0 auto; }
}

@media (max-width: 767px) {
    /*
     * 56 oben und unten statt 36/40. Darueber endet der Fliesstext mit 56
     * Punkten Luft (objektliste.css); mit 36 sass der graue Block enger an
     * seinem eigenen Inhalt als der weisse darueber, und die beiden Flaechen
     * wirkten unterschiedlich gebaut.
     */
    .fussrahmen { padding: 56px 20px; }

    /*
     * Die Ueberschrift braucht hier einen eigenen Abstand nach unten. Auf dem
     * Schirm macht ihn die Zeilenhoehe: 53.04 bei 44.2 Punkten Schrift lassen
     * rund 9 Punkte Luft unter der letzten Zeile. Mit 1.2 auf 28 sind es noch
     * 3, und der Text klebte unter der Frage.
     */
    .fussrahmen__titel { font-size: 28px; margin-bottom: 10px; }

    /*
     * 64 zwischen den beiden Bloecken — dieselbe Luecke, die auf dem Schirm
     * zwischen den Spalten steht. Mit 40 lasen sie sich als ein
     * durchgehender Block; es sind aber zwei Angebote, und das soll man sehen.
     */
    .fussrahmen__innen { gap: 64px; }

    /*
     * Der Baum der Objektarten bleibt einspaltig — "Middle Floor Apartment"
     * braucht mit Kaestchen und Einzug rund 200 Punkte, zwei davon passen
     * nicht nebeneinander.
     *
     * Die Gemeinden bleiben zweispaltig: "Estepona", "Marbella", "Benahavis"
     * sind kurz, und einspaltig wuerde die Liste doppelt so lang, ohne
     * lesbarer zu sein.
     */
    .fussrahmen__baum { grid-template-columns: 1fr; gap: 14px 10px; }
    .fussrahmen__gemeinden { grid-template-columns: 1fr 1fr; }

    /*
     * Zahlenfelder bleiben zu zweit: "Min. Price" passt in 166 Punkte, und
     * untereinander waeren es fuenf Zeilen fuer fuenf Zahlen.
     *
     * Die Felder mit Namen, Telefon und Mail bekommen die ganze Zeile — dort
     * steht mehr drin, als auf eine halbe passt.
     */
    .fussrahmen__reihe--text,
    .fussrahmen__reihe--eins { grid-template-columns: 1fr; }

    /*
     * Anrede, Vorname, Nachname: die Anrede nimmt die ganze Zeile, die beiden
     * Namen stehen darunter nebeneinander. Sie gehoeren zusammen und sind
     * kurz genug; untereinander wurden aus drei Angaben drei Zeilen.
     */
    .fussrahmen__reihe--drei { grid-template-columns: 1fr 1fr; }
    .fussrahmen__reihe--drei > :first-child { grid-column: 1 / -1; }

    /*
     * Anhakfelder zum Antippen: 20 statt 13 Punkte, und die Zeile dazu auf
     * 36 Punkte Hoehe. 13 Punkte trifft niemand mit dem Finger zuverlaessig —
     * die Beschriftung daneben gehoert mit zur Flaeche, deshalb liegt die
     * Hoehe am Etikett und nicht am Kaestchen.
     */
    .fussrahmen__baum input,
    .fussrahmen__gemeinden input {
        width: 20px;
        height: 20px;
        flex: 0 0 20px;
    }
    .fussrahmen__baum label,
    .fussrahmen__gemeinden label {
        min-height: 36px;
        gap: 10px;
        font-size: 16px;
        line-height: 1.3;
    }
    /* Der Einzug der Untertypen folgt dem groesseren Kaestchen. */
    .fussrahmen__zweige { margin-left: 10px; }

    /*
     * Die Adressen der Kanaele laufen ueber zwei Zeilen. Mittig ausgerichtet
     * schwebte das Symbol dann zwischen beiden; es gehoert auf die erste.
     */
    .fussrahmen__wege li { align-items: flex-start; }
    .fussrahmen__symbol { margin-top: 4px; }
}

/* ----------------------------------- Seite nach der Bestaetigung des Alarms */

/*
 * api/alarm-bestaetigen.php zeigt eine eigene kleine Seite. Sie leiht sich
 * dieses Stylesheet, braucht aber ihren eigenen Rahmen.
 */
.alarm-seite {
    max-width: 700px;
    margin: 0 auto;
    padding: 80px 24px;
}

.alarm-seite h1 {
    font-family: 'Roboto Condensed', sans-serif;
    font-size: 44.2px;
    font-weight: 300;
    line-height: 53.04px;
    color: #202732;
    margin: 0 0 16px;
}

.alarm-seite p {
    font-size: 17px;
    font-weight: 300;
    line-height: 28.9px;
    margin: 0 0 20px;
}


/* === 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-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-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-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%; }
}

/* 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 {
    width: 100vw;
    position: relative;
    left: 50%;
    right: 50%;
    margin-left: -50vw;
    margin-right: -50vw;
}
.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) {

}
