    .object-page__inner {
      padding-block: 24px 32px;
      width: min(var(--fewo-content-max), calc(100% - 2*var(--fewo-gutter)));
      margin: 0 auto;
      box-sizing: border-box;
    }

    .object-title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; margin-bottom: 24px; }
    .object-title-row__title { font-family: 'Inter', sans-serif; font-weight: 700; font-size: 26px; line-height: 1.25; color: #1C398E; margin: 0; flex: 1 1 auto; min-width: 0; max-width: 863px; overflow-wrap: anywhere; word-break: normal; text-wrap: balance; hyphens: none; /* UI/UX 5.3: без вылезаний за контейнер, перенос строк */ }
    .object-title-row__actions { display: flex; gap: 4px; flex-shrink: 0; align-items: center; }
    /* UI/UX 5.2: компактные текстовые кнопки как у Airbnb (иконка 16px + текст 14px, подчёркнуто) */
    .object-title-row__action-btn {
      display: inline-flex; align-items: center; justify-content: center; gap: 6px;
      background: transparent; border: none; border-radius: 8px; padding: 6px 8px;
      font-family: 'Inter', sans-serif; font-size: 14px; font-weight: 600;
      color: #1C398E; cursor: pointer; transition: background 0.15s; white-space: nowrap;
      text-decoration: underline; text-underline-offset: 2px;
    }
    .object-title-row__action-btn img { width: 16px; height: 16px; flex-shrink: 0; }
    .object-title-row__action-btn:first-child { background: transparent; }
    .object-title-row__action-btn:hover { background: #EDF6FF; }
    .object-title-row__action-btn.is-compare-active { background: #DBEAFE; }


    .object-gallery { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; border-radius: 16px; overflow: hidden; position: relative; }
    .object-gallery__main { grid-row: 1; grid-column: 1; }
    .object-gallery__main-img { width: 100%; height: 597px; object-fit: cover; display: block; }
    .object-gallery__grid { grid-row: 1; grid-column: 2; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 8px; }
    .object-gallery__grid-img { width: 100%; height: 293px; object-fit: cover; display: block; }
    .object-gallery__all-btn {
      position: absolute; bottom: 20px; right: 20px;
      display: inline-flex; align-items: center; gap: 8px;
      background: #fff; border: none; border-radius: 8px;
      box-shadow: 0px 0px 10px rgba(0,24,34,0.12);
      padding: 10px 20px; font-family: 'Inter', sans-serif;
      font-size: 14px; font-weight: 500; color: #1C398E; cursor: pointer;
      transition: background 0.15s;
    }
    .object-gallery__all-btn:hover { background: #f3f8ff; }
    .object-gallery__all-btn img { width: 18px; height: 18px; }
    /* Gewischte Fotostrecke — ausschliesslich auf dem Telefon (siehe ≤768px).
       Auf dem Rechner bleibt das Mosaik, dort wischt niemand. */
    .object-gallery__track,
    .object-gallery__counter,
    .object-gallery__dots { display: none; }

    /* ── Foto-Lichtkasten (grosses Bild + Pfeile + Miniaturen) ──────────────
       Übernommen aus dem Katalog (page-4368.php), wo er seit 44ed7e6 läuft.
       Eigene Hüllenklasse: .foto-overlay ist auf DIESER Seite schon vergeben —
       so heisst hier das Raster "Alle Fotos anzeigen". Die inneren Klassen
       bleiben gleich, es ist derselbe Baustein. */
    .foto-lb-overlay {
      display: none; position: fixed; inset: 0; background: #0a0e1c;
      /* über dem Raster-Fenster (8000), aus dem er geöffnet werden kann */
      z-index: 8500; flex-direction: column;
    }
    .foto-lb-overlay.is-open { display: flex; }
    .foto-lb { position: relative; flex: 1; display: flex; flex-direction: column; min-height: 0; }
    .foto-lb__top {
      display: flex; align-items: center; justify-content: space-between;
      padding: 14px 20px; flex-shrink: 0;
      padding-top: calc(14px + env(safe-area-inset-top));
    }
    .foto-lb__counter { font-size: 15px; font-weight: 600; color: #fff; letter-spacing: .02em; }
    .foto-lb__close {
      width: 40px; height: 40px; border: none; border-radius: 50%;
      background: rgba(255,255,255,0.14); color: #fff; cursor: pointer;
      display: flex; align-items: center; justify-content: center; transition: background .15s;
    }
    .foto-lb__close:hover { background: rgba(255,255,255,0.28); }
    .foto-lb__stage {
      flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center;
      padding: 0 12px; position: relative;
    }
    .foto-lb__img { width: 100%; height: 100%; object-fit: contain; user-select: none; -webkit-user-drag: none; }
    .foto-lb__nav {
      position: absolute; top: 50%; transform: translateY(-50%);
      width: 48px; height: 48px; border: none; border-radius: 50%;
      background: rgba(255,255,255,0.92); color: #1c398e; cursor: pointer; z-index: 2;
      display: flex; align-items: center; justify-content: center;
      box-shadow: 0 2px 12px rgba(0,0,0,0.35); transition: background .15s, transform .15s;
    }
    .foto-lb__nav:hover { background: #fff; }
    .foto-lb__nav:active { transform: translateY(-50%) scale(0.94); }
    .foto-lb__nav--prev { left: 20px; }
    .foto-lb__nav--next { right: 20px; }
    .foto-lb__nav[hidden] { display: none; }
    .foto-lb__thumbs {
      display: flex; gap: 8px; padding: 14px 20px; overflow-x: auto; flex-shrink: 0;
      justify-content: center; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,.3) transparent;
      padding-bottom: calc(14px + env(safe-area-inset-bottom));
    }
    .foto-lb__thumb {
      width: 84px; height: 60px; flex-shrink: 0; border-radius: 6px; overflow: hidden;
      cursor: pointer; opacity: .5; border: 2px solid transparent; padding: 0; background: none;
      transition: opacity .15s, border-color .15s;
    }
    .foto-lb__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
    .foto-lb__thumb:hover { opacity: .85; }
    .foto-lb__thumb--active { opacity: 1; border-color: #fff; }
    @media (max-width: 700px) {
      /* Keine Pfeile auf dem Telefon: gewischt wird ohnehin, und zwei runde
         Knöpfe auf einem 390px breiten Bild verdecken genau die Bildmitte.
         Geblättert wird mit dem Finger, ausgewählt über die Miniaturen. */
      .foto-lb__nav { display: none; }
      .foto-lb__thumbs { justify-content: flex-start; }
      .foto-lb__thumb { width: 64px; height: 46px; }
      /* Waagerechtes Wischen gehört uns, senkrecht bleibt beim Browser. */
      .foto-lb__stage { touch-action: pan-y; }
    }
    @media (prefers-reduced-motion: reduce) { .foto-lb__nav { transition: none; } }
    /* Foto-gallery modal */
    .foto-overlay {
      display: none; position: fixed; inset: 0; background: rgba(10,20,60,0.6);
      z-index: 8000; align-items: center; justify-content: center;
      padding: 20px;
      /* No backdrop-filter: blur() — while the gallery is open Chrome re-rasterizes
         the blurred backdrop every scroll frame, which tanks FPS (worse on wide
         screens). The 0.6 dark overlay already separates the modal. */
    }
    .foto-overlay.is-open { display: flex; }
    .foto-modal {
      padding: 24px 40px 24px 24px; background: #fff; border-radius: 20px;
      box-shadow: 0 20px 60px rgba(10,30,90,0.2);
      width: min(1200px, 95vw); max-height: calc(100vh - 40px);
      display: flex; flex-direction: column; overflow: hidden;
    }
    .foto-modal__header {
      display: flex; align-items: center; justify-content: space-between;
      gap: 12px; padding-bottom: 16px; border-bottom: 1px solid #edf1fa; flex-shrink: 0;
    }
    .foto-modal__header-left { display: flex; align-items: center; gap: 16px; }
    .foto-modal__close {
      width: 32px; height: 32px; border: none; border-radius: 8px;
      background: #f0f4fd; display: flex; align-items: center; justify-content: center;
      cursor: pointer; flex-shrink: 0; transition: background 0.15s;
    }
    .foto-modal__close:hover { background: #e1eaf8; }
    .foto-modal__title { margin: 0; font-size: 20px; font-weight: 700; color: #1c398e; }
    .foto-modal__body { overflow-y: auto; padding: 20px 0 28px; scrollbar-width: thin; scrollbar-color: #c8d6f0 transparent; }
    .foto-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
    .foto-grid__img { width: 100%; aspect-ratio: 4/3; object-fit: cover; border-radius: 10px; cursor: pointer; transition: opacity 0.15s; content-visibility: auto; contain-intrinsic-size: auto 220px; }
    .foto-grid__img:hover { opacity: 0.88; }
    .foto-grid__img--large { grid-column: 1 / -1; aspect-ratio: 16/9; }

    /* QA refactoring-3 A#8/C#26/B-BUG2: лента вкладок скроллится по горизонтали, не рвётся по слогам 360–600px */
    /* 27.09.2026: overflow-x:auto macht auch die Senkrechte zum Scrollbereich, und die
       Reiter ragten 1px heraus (margin-bottom:-1px) — scrollHeight 49 bei 48. Auf dem
       Telefon fing die Leiste darum den ersten Wisch nach unten ab und wackelte nach
       unten und zur Seite, statt die Seite zu scrollen. Senkrecht jetzt fest. */
    .object-tabs { display: flex; border-bottom: 1px solid #E2E8F0; overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; touch-action: pan-x pan-y; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
    .object-tabs::-webkit-scrollbar { display: none; }
    /* B-BUG2 (qa4): визуальный намёк, что лента вкладок скроллится вправо (fade + шеврон),
       показывается только когда справа есть скрытые вкладки (класс от JS). */
    .object-tabs-wrap { position: relative; margin-bottom: 40px; }
    .object-tabs-wrap::after {
      content: ''; position: absolute; top: 0; right: 0; bottom: 1px; width: 48px;
      background: linear-gradient(90deg, rgba(255,255,255,0) 0%, #fff 78%);
      pointer-events: none; opacity: 0; transition: opacity 0.15s;
    }
    .object-tabs-wrap::before {
      content: '›'; position: absolute; top: 50%; right: 8px; transform: translateY(-60%);
      font-size: 22px; line-height: 1; color: #1C398E; font-weight: 700;
      pointer-events: none; opacity: 0; transition: opacity 0.15s; z-index: 1;
    }
    .object-tabs-wrap.is-scrollable-right::after,
    .object-tabs-wrap.is-scrollable-right::before { opacity: 1; }
    .object-tabs__tab {
      background: none; border: none; border-bottom: 5px solid transparent;
      margin-bottom: -1px; padding: 12px 16px;
      font-family: 'Inter', sans-serif; font-size: 17px; font-weight: 600;
      color: #6D7580; cursor: pointer; transition: color 0.15s, border-color 0.15s;
      white-space: nowrap; flex: 0 0 auto; /* вкладка в одну строку, не сжимается */
    }
    .object-tabs__tab--active { color: #1C398E; border-bottom-color: #1C398E; }
    /* §7.5: убрано серое правило для последней вкладки — Hausregeln не должна выглядеть «выключенной» */

    .object-layout { display: grid; grid-template-columns: 1fr 363px; gap: 48px; }
    .object-content { align-self: start; min-width: 0; }
    .object-divider { border: none; border-top: 1px solid #E2E8F0; margin: 40px 0; }
    .object-section-title { font-family: 'Inter', sans-serif; font-size: 20px; font-weight: 700; color: #1C398E; margin: 0 0 16px; }

    /* About */
    /* UI/UX 7.3: тип+город — подзаголовок/мета под H1, не конкурирующий заголовок */

    /* Description */
    .object-desc { margin-top: 32px; }
    /* Der erste Abschnitt braucht keinen eigenen Abstand nach oben: darüber
       steht die Karteikartenleiste mit ihren 40px. Solange oben noch Gattung, Zahlen
       und Baujahr standen, fiel das nicht auf — seit die weg sind, klaffte über
       "Über diese Unterkunft" die Summe aus beidem (40 + 32 = 72px). */
    .object-content > section:first-of-type { margin-top: 0; }
    .object-desc__text { font-size: 17px; font-weight: 500; color: #1C398E; margin: 0 0 16px; white-space: pre-line; }
    .object-desc__text--clamped { display: -webkit-box; -webkit-line-clamp: 5; line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; }
    .object-desc__toggle {
      display: inline-flex; align-items: center; justify-content: center;
      background: #EDF6FF; border: none; border-radius: 8px; padding: 10px 24px;
      font-size: 17px; font-weight: 500; color: #1C398E; cursor: pointer; transition: background 0.15s;
    }
    .object-desc__toggle:hover { background: #dce9f7; }
    /* display: inline-flex sticht das hidden-Attribut aus — ausdrücklich zurücknehmen. */
    .object-desc__toggle[hidden] { display: none; }

    /* Amenities */
    .object-amenities { display: flex; flex-direction: column; gap: 32px; margin-top: 32px; }

    /* Ausstattungsleiste: benannte Merkmale mit Symbol, wie sie Buchungsportale
       zeigen. Umbricht frei, damit sie auf 360px nicht seitlich hinausläuft. */
    .object-features { list-style: none; margin: 0 0 8px; padding: 0;
      display: flex; flex-wrap: wrap; gap: 8px 10px; }
    .object-features__item { display: inline-flex; align-items: center; gap: 6px;
      padding: 6px 10px; border: 1px solid #e3e8f0; border-radius: 999px;
      font-size: 14px; line-height: 1.3; color: #1c398e; background: #f7f9fc; }
    .object-features__icon { width: 20px; height: 20px; flex-shrink: 0; }
    @media (max-width: 480px) { .object-features__item { font-size: 13px; padding: 5px 9px; } }

    .object-amenities__header { display: flex; flex-direction: column; gap: 8px; }
    .object-amenities__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-amenities__subtitle { font-size: 14px; font-weight: 500; color: #1C398E; margin: 0; }
    .object-amenities__cols { display: flex; gap: 40px; }
    .object-amenities__col { display: flex; flex-direction: column; gap: 24px; }
    .object-amenities__item { display: flex; align-items: center; gap: 12px; }
    .object-amenities__icon { width: 32px; height: 32px; flex-shrink: 0; }
    .object-amenities__label { font-size: 17px; font-weight: 500; color: #1C398E; }
    .object-amenities__btn { display: flex; justify-content: center; align-items: center; padding: 10px 24px; background: #EDF6FF; border: none; border-radius: 8px; font-size: 17px; font-weight: 500; color: #1C398E; cursor: pointer; transition: background 0.15s; }
    .object-amenities__btn:hover { background: #dce9f7; }

    /* Subsection (kids/activities) */
    .object-subsection { display: flex; flex-direction: column; gap: 32px; margin-top: 32px; }
    .object-subsection__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-subsection__items { display: flex; gap: 40px; }
    .object-subsection__item { display: flex; align-items: center; gap: 12px; }
    .object-subsection__icon { width: 32px; height: 32px; flex-shrink: 0; }
    .object-subsection__label { font-size: 17px; font-weight: 500; color: #1C398E; }

    /* Rooms */
    /* R4-3 (qa6): инфо и цена бок-о-бок не помещаются, когда ТЕЛО карточки узкое —
       ценник (одна широкая строка «… € insgesamt», ~237px) сжимает инфо-колонку до
       ~116px, название рвётся, «insgesamt» обрезается. Это случается сразу в двух
       диапазонах: 581–~780px (одна колонка, но фото 260px съедает ширину) и 1025–1200px
       (присутствует sidebar 363px). Вместо угадывания вьюпортов используем CONTAINER
       QUERY по фактической ширине тела карточки: тело ≤460px → ставим инфо НАД ценой. */
    .object-rrc__body { container-type: inline-size; }
    @container (max-width: 460px) {
      .object-rrc__body-top { flex-direction: column; gap: 12px; }
      .object-rrc__price-block { align-items: flex-start; }
      .object-rrc__dates { text-align: left; }
    }

    /* Location */
    .object-location { display: flex; flex-direction: column; gap: 16px; margin-top: 32px; }
    .object-location__header { display: flex; flex-direction: column; gap: 8px; }
    .object-location__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-location__subtitle { font-size: 14px; font-weight: 500; color: #6D7580; margin: 0; }
    /* Fliesstext, keine Kleinschrift: das ist eine Beschreibung, kein Beiwerk.
       Oben in der Kopfzeile stand er bis zum 03.09.2026 in 14px Grau zwischen
       Baujahr und Bewertung — dort las ihn niemand.
       Keine Zeilenbreite von 68ch mehr: der Absatz war damit 686px breit in
       einer 933px-Spalte, während der Beschreibungstext ein Stück weiter oben
       die volle Breite nutzt. Zwei Absätze derselben Art in zwei Breiten sehen
       nach Versehen aus. Gleiche Breite, gleiche Schriftgrösse wie dort; die
       grössere Zeilenhöhe bleibt, sie trägt die längeren Zeilen. */
    .object-location__text { font-size: 17px; font-weight: 400; line-height: 1.55; color: #4A5568; margin: 4px 0 0; }
    .object-location__body { display: flex; gap: 16px; width: 100%; }
    .object-location__map-wrap { position: relative; flex: 1; height: 272px; border-radius: 8px; overflow: hidden; display: flex; align-items: center; justify-content: center; }
    /* No runtime filter: blur() — it re-rasterizes every scroll frame and tanks FPS.
       Use a smaller, slightly-dimmed static map image instead. */
    /* §5.7: нейтральный плейсхолдер (без стокового фото чужого города) — виден только пока грузится геокодинг */
    .object-location__map-bg { position: absolute; inset: 0; background:
      repeating-linear-gradient(0deg, #E8EEF7 0 1px, transparent 1px 28px),
      repeating-linear-gradient(90deg, #E8EEF7 0 1px, transparent 1px 28px),
      #F2F6FC; }
    .object-location__map-btn { position: relative; z-index: 1; display: flex; align-items: center; gap: 4px; padding: 8px; background: #EDF6FF; border: none; border-radius: 8px; font-size: 17px; font-weight: 500; color: #90A1B9; cursor: pointer; }
    .object-location__map-btn img { width: 32px; height: 32px; }
    /* Kein space-between mehr: mit den beiden Zwischenüberschriften riss das
       die Gruppen auseinander, sobald die Karte daneben höher war als die Liste. */
    .object-location__places { flex: 1; display: flex; flex-direction: column; justify-content: flex-start; padding: 16px 0; gap: 14px; box-sizing: border-box; }
    .object-location__place { display: flex; justify-content: space-between; align-items: center; }
    .object-location__place-left { display: flex; align-items: center; gap: 12px; }
    .object-location__place-icon { width: 32px; height: 32px; flex-shrink: 0; }
    .object-location__place-name { font-size: 17px; font-weight: 500; color: #1C398E; }
    /* NEW-2 (qa4): единица измерения не должна переноситься на 2-ю строку («23,9 / km»). */
    .object-location__place-dist { font-size: 17px; font-weight: 500; color: #6D7580; white-space: nowrap; flex-shrink: 0; }
    .object-location__places-head {
      margin: 0; font-size: 12px; font-weight: 700; letter-spacing: .04em;
      text-transform: uppercase; color: #90A1B9;
    }
    .object-location__places-head + .object-location__place { margin-top: -4px; }
    .object-location__place--extra { display: none; }
    .object-location__places.is-expanded .object-location__place--extra { display: flex; }
    .object-location__places-btn {
      align-self: flex-start; margin-top: 4px; padding: 0; border: 0; background: none;
      font-family: 'Inter', sans-serif; font-size: 15px; font-weight: 600; color: #1C398E;
      text-decoration: underline; text-underline-offset: 2px; cursor: pointer;
    }
    .object-location__route-btn { display: flex; justify-content: center; align-items: center; padding: 10px 24px; background: #EDF6FF; border: none; border-radius: 8px; font-size: 17px; font-weight: 500; color: #1C398E; cursor: pointer; transition: background 0.15s; }
    .object-location__route-btn:hover { background: #dce9f7; }

    /* Availability search bar */
    .object-availability { display: flex; flex-direction: column; gap: 16px; margin-top: 32px; }
    .object-availability__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-availability__row { position: relative; display: flex; align-items: center; gap: 16px; width: 100%; }
    .object-availability__bar { flex: 1; display: flex; height: 56px; border: 1px solid #90A1B9; border-radius: 8px; overflow: hidden; }
    .object-availability__field { flex: 1; display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; border-right: 1px solid #90A1B9; cursor: pointer; transition: background 0.15s; }
    .object-availability__field:hover { background: #f0f4f9; }
    .object-availability__field--last { border-right: none; }
    .object-availability__field-text { display: flex; flex-direction: column; gap: 4px; }
    .object-availability__field-label { font-size: 14px; font-weight: 500; color: #6D7580; }
    .object-availability__field-value { font-size: 14px; font-weight: 500; color: #1C398E; }
    .object-availability__field-arrow { width: 32px; height: 32px; flex-shrink: 0; }

    /* Room results */
    .object-room-results { display: flex; flex-direction: column; gap: 16px; margin-top: 16px; }
    .object-rr-filters { display: flex; align-items: center; justify-content: space-between; width: 100%; height: 40px; }
    .object-rr-filters__tabs { display: flex; gap: 8px; }
    .object-rr-filters__tab { display: flex; align-items: center; justify-content: center; height: 40px; padding: 0 16px; border-radius: 12px; border: 1px solid #90A1B9; background: #FFFFFF; font-size: 17px; font-weight: 500; color: #1C398E; cursor: pointer; transition: background 0.15s; }
    .object-rr-filters__tab--active { background: #EDF6FF; border-color: #1C398E; }
    .object-rr-filters__count { font-size: 17px; font-weight: 500; color: #6D7580; }
    .object-rr-list { display: flex; flex-direction: column; gap: 16px; }

    /* NEW-7 (qa4): min-height, а не фиксированные 260px — при длинном списке удобств
       карточка растёт, кнопка «Auswählen» больше не выезжает за нижнюю границу. */
    .object-rrc { display: flex; min-height: 260px; border: 1px solid rgba(28,57,142,0.2); border-radius: 16px; overflow: hidden; cursor: pointer; transition: border-color 0.15s, box-shadow 0.15s; content-visibility: auto; contain-intrinsic-size: auto 260px; }
    .object-rrc:hover { border-color: #1C398E; }
    .object-rrc--selected { border: 2px solid #1C398E; box-shadow: 0 0 0 3px rgba(28,57,142,0.12); }
    .object-rrc__photo { position: relative; width: 260px; min-height: 260px; align-self: stretch; flex-shrink: 0; background: #DADADA; padding: 12px; display: flex; flex-direction: column; justify-content: space-between; align-items: center; box-sizing: border-box; }
    .object-rrc__photo-top { display: flex; justify-content: space-between; align-items: center; width: 100%; height: 40px; }
    .object-rrc__photos-pill { display: flex; align-items: center; gap: 8px; padding: 0 16px; height: 40px; background: #FFFFFF; border-radius: 8px; }
    .object-rrc__photos-icon { width: 16px; height: 16px; flex-shrink: 0; }
    .object-rrc__photos-text { font-size: 17px; font-weight: 500; color: #1C398E; white-space: nowrap; }
    .object-rrc__photo-arrows { display: flex; justify-content: space-between; align-items: center; width: 100%; height: 32px; }
    .object-rrc__photo-arrow { width: 32px; height: 32px; border-radius: 50%; background: rgba(141,141,141,0.4); border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; }
    .object-rrc__photo-arrow img { width: 16px; height: 16px; filter: brightness(0) invert(1); }
    .object-rrc__photo-arrow:hover { background: rgba(141,141,141,0.6); }
    .object-rrc__pagination { display: flex; align-items: center; gap: 8px; }
    .object-rrc__zoom { position: absolute; bottom: 12px; right: 12px; width: 32px; height: 32px; background: #F4F6F9; border-radius: 4px; border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 3; }
    .object-rrc__zoom-icon { width: 24px; height: 24px; }
    /* Room photo controls sit ABOVE the absolutely-positioned <img>, otherwise the
       image covers them and intercepts clicks (only zoom had z-index, so only it
       worked). Lift the pill / nav arrows / pagination so the arrows are clickable. */
    .object-rrc__photo-top,
    .object-rrc__photo-arrows,
    .object-rrc__pagination { position: relative; z-index: 2; }
    .object-rrc__body { flex: 1; min-height: 260px; padding: 16px; display: flex; flex-direction: column; gap: 12px; justify-content: space-between; box-sizing: border-box; }
    .object-rrc__body-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
    /* R4-3 (qa5): info занимает доступную ширину и может ужиматься (min-width:0),
       чтобы название/удобства переносились по словам, а не сдавливались ценой. */
    .object-rrc__info { display: flex; flex-direction: column; gap: 8px; flex: 1 1 auto; min-width: 0; }
    .object-rrc__name { font-size: 24px; font-weight: 500; color: #1C398E; margin: 0; }
    .object-rrc__chars { font-size: 14px; font-weight: 500; color: #6D7580; margin: 0; }
    .object-rrc__incl { font-size: 13px; font-weight: 500; color: #1a8a4a; margin: 6px 0 0; line-height: 1.5; }
    .object-rrc__excl { font-size: 13px; font-weight: 500; color: #6B7280; margin: 4px 0 0; line-height: 1.5; }
    .object-rrc__excl-label { color: #1C398E; font-weight: 600; }
    .object-rrc__photo-note { position: absolute; left: 8px; bottom: 8px; z-index: 2; background: rgba(0,0,0,0.62); color: #fff; font-size: 11px; font-weight: 500; padding: 3px 8px; border-radius: 6px; pointer-events: none; }
    .object-rrc__price-block { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; flex-shrink: 0; }
    .object-rrc__prices { display: flex; align-items: flex-end; gap: 2px; }
    .object-rrc__old-price { font-size: 17px; font-weight: 500; text-decoration: line-through; color: #1C398E; opacity: 0.4; }
    .object-rrc__new-price { font-size: 17px; font-weight: 700; color: #1C398E; }
    .object-rrc__insgesamt { font-size: 14px; font-weight: 500; color: #6D7580; padding-bottom: 2px; }
    .object-rrc__dates { font-size: 12px; font-weight: 500; color: #90A1B9; text-align: right; }
    .object-rrc__cancellation { display: flex; align-items: center; justify-content: center; padding: 4px 8px; background: #EDF6FF; border-radius: 4px; font-size: 14px; font-weight: 500; color: #1C398E; opacity: 0.7; }
    .object-rrc__unavailable-block { display: flex; flex-direction: column; align-items: flex-end; gap: 11px; flex-shrink: 0; }
    .object-rrc__unavailable { font-size: 17px; font-weight: 500; color: #90A1B9; }
    .object-rrc__equipment { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 43px; }
    .object-rrc__eq-item { display: flex; align-items: center; gap: 8px; }
    .object-rrc__eq-icon { width: 16px; height: 16px; flex-shrink: 0; }
    .object-rrc__eq-label { font-size: 14px; font-weight: 500; color: #1C398E; }
    .object-rrc__actions { display: flex; justify-content: space-between; align-items: center; }
    .object-rrc__btn-details { height: 48px; padding: 0 24px; background: #EDF6FF; border: none; border-radius: 8px; font-size: 14px; font-weight: 500; color: #1C398E; cursor: pointer; transition: background 0.15s; }
    .object-rrc__btn-details:hover { background: #dce9f7; }
    .object-rrc__btn-book { height: 48px; padding: 0 32px; background: #145DFC; border: 2px solid #145DFC; border-radius: 8px; font-size: 14px; font-weight: 500; color: #FFFFFF; cursor: pointer; transition: background 0.15s; }
    .object-rrc__btn-book:hover { background: #0d4de0; }
    /* Punkt 2 (refactoring-7): Das bereits gewählte Zimmer behielt den vollen
       Handlungsanreiz — blaue Fläche, weiße Schrift — für eine Handlung, die
       schon passiert ist. Jetzt sekundärer Stil mit Haken. Bewusst NICHT
       disabled: ein disabled-Button verschwindet aus der Tab-Reihenfolge und
       aus dem Screenreader, der Nutzer verliert an dieser Stelle die Position.
       Der Zustand wird über aria-pressed gemeldet, nicht über die Farbe allein
       — Haken und Wortlaut tragen ihn mit. */
    .object-rrc__btn-book[aria-pressed="true"] { background: #FFFFFF; color: #145DFC; cursor: default; display: inline-flex; align-items: center; gap: 6px; justify-content: center; }
    .object-rrc__btn-book[aria-pressed="true"]:hover { background: #FFFFFF; }
    .object-rrc__btn-change { height: 48px; padding: 0 32px; background: transparent; border: 1px solid #90A1B9; border-radius: 8px; font-size: 14px; font-weight: 500; color: #1C398E; cursor: pointer; }

    /* Availability inline */

    /* Reviews */
    .object-reviews { display: flex; flex-direction: column; gap: 32px; }
    .object-reviews__summary { display: flex; flex-direction: column; padding-bottom: 24px; gap: 16px; border-bottom: 1px solid #E2E8F0; margin-top: 32px;}
    .object-reviews__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-reviews__summary-row { display: flex; align-items: flex-start; gap: 46px; width: 100%; }
    .object-reviews__score-main { font-size: 29px; font-weight: 700; color: #1C398E; }
    .object-reviews__score-max { font-size: 29px; font-weight: 500; color: #6D7580; }
    .object-reviews__more-btn { display: flex; align-items: center; justify-content: center; padding: 10px 24px; width: 290px; height: 40px; background: #EDF6FF; border: none; border-radius: 8px; font-size: 17px; font-weight: 500; color: #1C398E; cursor: pointer; }
    /* Gesamtnote links, Kategorien rechts als Balken: elf Zeilen "Name — Zahl"
       liessen sich nicht überfliegen, ein Balken schon. */
    .object-reviews__score-box { display: flex; flex-direction: column; gap: 4px; flex-shrink: 0; min-width: 132px; }
    .object-reviews__score-line { display: flex; align-items: baseline; gap: 6px; }
    .object-reviews__score-count { font-size: 14px; color: #6D7580; }
    .object-reviews__cats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 32px; flex: 1; min-width: 0; }
    /* Die Wertespalte muss "10,0" fassen, nicht nur "9,2" — bei 30px brach die
       letzte Null in die nächste Zeile um. Feste Breite, weil jede Zeile ein
       eigenes Raster ist: nur so stehen Balken und Zahlen untereinander bündig. */
    .object-rev-cat { display: grid; grid-template-columns: minmax(96px, 1fr) 72px 38px; align-items: center; gap: 10px; }
    .object-rev-cat__name { font-size: 14px; font-weight: 500; color: #1C398E; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .object-rev-cat__bar { height: 6px; border-radius: 999px; background: #E4EAF6; overflow: hidden; }
    .object-rev-cat__fill { display: block; height: 100%; border-radius: 999px; background: #1C398E; }
    .object-rev-cat__val { font-size: 14px; font-weight: 600; color: #1C398E; font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap; }
    .object-reviews__list { display: flex; flex-direction: column; gap: 20px; margin-top: 24px; }
    .object-reviews__none { margin: 20px 0 0; font-size: 15px; line-height: 1.5; color: #6D7580; }
    .object-review-item { border-bottom: 1px solid #E2E8F0; padding-bottom: 20px; }
    .object-review-item:last-of-type { border-bottom: 0; padding-bottom: 0; }
    .object-review-item--extra { display: none; }
    .object-reviews__list.is-expanded .object-review-item--extra { display: block; }
    .object-review__head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin-bottom: 6px; }
    .object-review__who { min-width: 0; }
    .object-review__author { font-size: 15px; font-weight: 700; color: #1C398E; }
    .object-review__meta { font-size: 13px; color: #6D7580; }
    .object-review__score { flex-shrink: 0; background: #1C398E; color: #fff; font-size: 13px; font-weight: 700; padding: 3px 9px; border-radius: 6px 6px 6px 2px; font-variant-numeric: tabular-nums; white-space: nowrap; }
    .object-review__text { font-size: 15px; line-height: 1.55; color: #1C398E; margin: 0 0 8px; white-space: pre-line; }
    .object-review__part { font-size: 15px; line-height: 1.55; color: #1C398E; margin: 0 0 6px; white-space: pre-line; }
    .object-review__part-label { font-weight: 700; }
    .object-review__part--plus  .object-review__part-label { color: #1a8a4a; }
    .object-review__part--minus .object-review__part-label { color: #C2410C; }
    .object-review__impr { font-size: 13px; line-height: 1.5; color: #6D7580; margin: 0; }
    .object-review__impr strong { color: #1C398E; }
    @media (max-width: 768px) {
      .object-reviews__summary-row { flex-direction: column; gap: 20px; }
      .object-reviews__cats { grid-template-columns: 1fr; }
    }

    /* Payment */
    .object-payment { display: flex; flex-direction: column; gap: 16px; }
    .object-payment__header { display: flex; flex-direction: column; gap: 8px; }
    .object-payment__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-payment__subtitle { font-size: 14px; color: #6D7580; margin: 0; }
    .object-payment__desc { font-size: 14px; color: #1C398E; margin: 0; }
    .object-payment__list { display: flex; gap: 24px; flex-wrap: wrap; } /* QA refactoring-3 B-BUG1/C#30: колонки переносятся, не сжимаются в ноль */
    .object-payment__method { display: flex; align-items: center; gap: 8px; }
    .object-payment__icon-box { display: flex; align-items: center; justify-content: center; padding: 4px 8px; width: 40px; height: 32px; border: 1px solid #90A1B9; border-radius: 4px; flex-shrink: 0; }
    .object-payment__icon { width: 24px; height: 24px; }
    .object-payment__name { font-size: 14px; font-weight: 500; color: #1C398E; overflow-wrap: normal; word-break: normal; hyphens: none; } /* QA refactoring-3 B-BUG1/C#30: подпись не рвётся по буквам */

    /* Cancellation */

    /* House rules */
    .object-rules { display: flex; flex-direction: column; gap: 16px; }
    .object-rules__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-rules__container { display: flex; flex-direction: column; gap: 8px; }
    .object-rules__times { display: flex; flex-direction: column; gap: 11px; }
    .object-rules__time-row { display: flex; gap: 16px; }
    .object-rules__time-label { font-size: 17px; font-weight: 500; color: #1C398E; min-width: 173px; }
    .object-rules__time-value { font-size: 17px; font-weight: 500; color: #6D7580; }
    .object-rules__policy { font-size: 17px; font-weight: 500; color: #1C398E; margin: 0; }

    /* Host / Legal / Help */
    .object-host-group { display: flex; flex-direction: column; gap: 48px; max-width: calc(100% - 96px); margin-top: 48px; }
    .object-host { display: flex; flex-direction: column; gap: 16px; }
    .object-host__title { font-size: 20px; font-weight: 700; color: #1C398E; margin: 0; }
    .object-host__desc { font-size: 17px; font-weight: 500; color: #1C398E; margin: 0; }
    .object-host__btn { display: inline-flex; justify-content: center; align-items: center; padding: 10px 24px; background: #EDF6FF; border-radius: 8px; border: none; cursor: pointer; font-size: 17px; font-weight: 500; color: #1C398E; }
    .object-help { display: flex; flex-direction: column; gap: 21px; }
    .object-help__container { display: flex; flex-direction: column; gap: 8px; }
    .object-legal-notice { display: flex; align-items: center; gap: 8px; background: none; border: none; padding: 0; cursor: pointer; }
    .object-legal-notice__icon { width: 20px; height: 20px; }
    .object-legal-notice__link { font-size: 12px; font-weight: 500; text-decoration: underline; color: #6D7580; }

    /* Sidebar booking widget */
    .object-sidebar { position: sticky; top: 108px; align-self: start; /* UI/UX 5.4: ниже фикс. шапки 96px. QA refactoring-3 A#2: align-self:start — иначе grid-item растягивается на всю строку и sticky не работает */ }
    .bw { display: flex; flex-direction: column; align-items: center; gap: 16px; }
    .bw__card { display: flex; flex-direction: column; padding: 16px; gap: 24px; width: 100%; background: #FFFFFF; border: 1px solid #90A1B9; box-shadow: 0 1px 2px rgba(0,0,0,0.12); border-radius: 16px; box-sizing: border-box; }
    .bw__badge { display: flex; align-items: flex-start; padding: 6px 8px; gap: 6px; width: 100%; background: #CFF2D7; border-radius: 4px; box-sizing: border-box; }
    .bw__badge-icon { width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px; }
    .bw__badge-text { font-size: 14px; font-weight: 500; color: #268D3F; line-height: 1.4; }
    /* Drei unterscheidbare Statuszustände (Punkt 1/F). Die Unterscheidung darf
       nicht allein an der Farbe hängen — Icon und Wortlaut tragen sie mit. */
    .bw__badge--neutral { background: #EDF1F8; }
    .bw__badge--neutral .bw__badge-text { color: #33415C; }
    .bw__badge--error { background: #FDE8E4; }
    .bw__badge--error .bw__badge-text { color: #B3261E; }
    .bw__badge--ok { background: #CFF2D7; }
    .bw__badge--ok .bw__badge-text { color: #268D3F; }
    .bw__price-row { display: flex; align-items: flex-end; gap: 2px; }
    .bw__price-current { font-size: 24px; font-weight: 700; color: #1C398E; }
    .bw__price-label { font-size: 17px; font-weight: 500; color: #1C398E; margin-left: 2px; }
    .bw__alt { display: flex; flex-direction: column; gap: 6px; margin: 8px 0 4px; }
    .bw__alt[hidden] { display: none; }
    .bw__alt-title { font-size: 12px; font-weight: 600; color: #1C398E; }
    .bw__alt-btn {
      display: flex; align-items: center; justify-content: space-between; gap: 8px;
      width: 100%; min-height: 44px; padding: 8px 12px; box-sizing: border-box;
      background: #EDF6FF; border: 1px solid #DBEAFE; border-radius: 8px;
      font-family: inherit; font-size: 14px; font-weight: 600; color: #1C398E;
      cursor: pointer; text-align: left;
    }
    .bw__alt-btn:hover { background: #DBEAFE; }
    .bw__alt-price { font-weight: 500; color: #268D3F; white-space: nowrap; }
    .bw__price-note { margin: 4px 0 0; font-size: 12px; line-height: 1.4; color: #5A6B8C; }
    .bw__price-note[hidden] { display: none; }
    .bw__calendar { display: flex; flex-direction: column; width: 100%; border-radius: 8px; }
    .bw__calendar-dates { display: flex; }
    .bw__cal-field { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; gap: 10px; width: 50%; background: #FFFFFF; border: 1px solid #90A1B9; box-sizing: border-box; }
    .bw__cal-field--checkin { border-radius: 8px 0 0 0; border-right-width: 0; }
    .bw__cal-field--checkout { border-radius: 0 8px 0 0; }
    .bw__guests-field { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; width: 100%; background: #FFFFFF; border-width: 0 1px 1px 1px; border-style: solid; border-color: #90A1B9; border-radius: 0 0 8px 8px; box-sizing: border-box; }
    .bw__cal-text { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
    /* C#28 (qa4): на узком экране подписи/даты не должны рваться по символам
       («Eincheck en», «21.07.202 6», «Auschec ken»). */
    .bw__cal-helper { font-size: 14px; font-weight: 500; color: #6D7580; white-space: nowrap; }
    .bw__cal-value { font-size: 14px; font-weight: 500; color: #1C398E; white-space: nowrap; }
    .bw__cal-arrow { width: 32px; height: 32px; flex-shrink: 0; }
    .bw__rates { display: flex; flex-direction: column; width: 100%; gap: 8px; }
    .bw__rates-label { font-size: 14px; font-weight: 600; color: #1C398E; }
    .bw__rates-list { display: flex; flex-direction: column; width: 100%; }
    .bw__rate { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; gap: 10px; width: 100%; border: 1px solid #90A1B9; box-sizing: border-box; }
    .bw__rate--top { border-radius: 8px 8px 0 0; border-bottom-width: 0; }
    .bw__rate--bottom { border-radius: 0 0 8px 8px; align-items: flex-start; }
    .bw__rate-info { display: flex; flex-direction: column; gap: 0; }
    .bw__rate-name { font-size: 14px; font-weight: 600; color: #1C398E; }
    .bw__rate-desc { font-size: 12px; font-weight: 500; color: #6D7580; margin-top: 5px; }
    .bw__rate-radio { width: 16px; height: 16px; flex-shrink: 0; border: 1px solid #BFDBFF; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: #FFFFFF; }
    .bw__rate-radio-dot { width: 8px; height: 8px; border-radius: 50%; background: #145DFC; }
    .bw__actions { display: flex; flex-direction: column; align-items: center; gap: 8px; width: 100%; }
    .bw__cta { display: flex; justify-content: center; align-items: center; padding: 10px 24px; width: 100%; height: 40px; background: #145DFC; border-radius: 8px; border: none; cursor: pointer; font-size: 17px; font-weight: 500; color: #EDF6FF; transition: background 0.15s; }
    .bw__cta:hover { background: #0f4ed6; }
    /* Gesperrter Weiter-Button (Punkt 1). Bewusst KEIN disabled-Attribut: ein
       disabled-Element fällt aus der Tab-Reihenfolge und wird von Screenreadern
       übersprungen — wer bis hierher gekommen ist, verliert dann die Position.
       aria-disabled meldet den Zustand, der Klick wird im Handler abgefangen
       und erklärt, was fehlt. */
    .bw__cta[aria-disabled="true"] { background: #C3CBD9; color: #F7F9FC; cursor: not-allowed; }
    .bw__cta[aria-disabled="true"]:hover { background: #C3CBD9; }
    .bw__cta-note { font-size: 14px; font-weight: 500; color: #6D7580; margin: 0; }
    .bw-trust { display: flex; flex-direction: column; gap: 8px; margin: 4px 0 0; }
    .bw-trust__line { display: flex; gap: 8px; align-items: flex-start; font-size: 14px; line-height: 1.4; color: #1C398E; margin: 0; }
    .bw-trust__icon { flex: 0 0 18px; font-weight: 700; color: #6D7580; }
    .bw-trust__line--ok .bw-trust__icon { color: #1a7f4b; }
    .bw-trust__line--ok strong { color: #1a7f4b; }
    .bw-trust__sub { display: block; font-size: 12px; color: #6D7580; font-weight: 400; }
    .bw-trust__more { font-size: 12px; color: #1C398E; text-decoration: underline; cursor: pointer; background: none; border: 0; padding: 0; text-align: left; font-family: inherit; }
    .bw__cta-hint { font-size: 13px; font-weight: 500; color: #B3261E; margin: 0; text-align: center; }
    .bw__cta-hint:empty { display: none; }
    .bw__breakdown { display: flex; flex-direction: column; width: 100%; gap: 8px; }
    .bw__breakdown-row { display: flex; justify-content: space-between; }
    .bw__breakdown-label { font-size: 14px; font-weight: 500; color: #1C398E; }
    .bw__breakdown-value { font-size: 14px; font-weight: 500; color: #1C398E; }
    /* Befund E: Hinweis auf Kosten, die erst vor Ort anfallen. */
    .bw__breakdown-note { font-size: 12px; line-height: 1.45; color: #6D7580; margin: 4px 0 0; }
    .bw__payment { display: flex; flex-direction: column; gap: 8px; width: 100%; }
    .bw__payment-title { font-size: 14px; font-weight: 500; color: #1C398E; }
    .bw__payment-methods { display: flex; flex-wrap: wrap; gap: 8px; }
    .bw__payment-icon { width: 32px; height: 32px; border: 1px solid #E2E8F0; border-radius: 4px; display: flex; align-items: center; justify-content: center; }
    .bw__payment-icon img { width: 20px; height: 20px; }
    .bw__payment-badge { padding: 4px 12px; border: 1px solid #BFDBFF; border-radius: 4px; font-size: 12px; font-weight: 500; color: #1C398E; }
    .bw__payment-badge--wide { padding: 4px 16px; }
    .bw__legal { display: flex; flex-direction: column; align-items: center; gap: 8px; width: 100%; }
    .bw__legal-link-row { display: flex; align-items: center; gap: 8px; background: none; border: none; padding: 0; cursor: pointer; }
    .bw__legal-icon { width: 16px; height: 16px; }
    .bw__legal-link { font-size: 12px; font-weight: 500; text-decoration: underline; color: #6D7580; }
    .bw__legal-id { font-size: 12px; font-weight: 500; color: #A5ABB3; background: none; border: none; padding: 6px 0; font-family: inherit; cursor: pointer; text-align: left; }
    .bw__legal-id:hover { color: #6D7580; text-decoration: underline; }
    .bw__legal-id.is-copied { color: #268D3F; }

    /* ── Booking widget interactive ── */
    .bw__calendar-wrap { position: relative; }
    .bw__cal-field, .bw__guests-field { cursor: pointer; user-select: none; }
    .bw__cal-field:hover, .bw__guests-field:hover { background: #f7faff; }
    .bw__loading { opacity: 0.6; pointer-events: none; }

    /* Calendar popup */
    .bwcal-popup {
      /* UI/UX 5.5: открывать под боксом, не вылезать вправо.
         NEW-1 (qa4): не растягивать на всю ширину бокса — при aspect-ratio 1/1 у ячеек
         это превращало дни в гигантские квадраты с разреженными строками. Фиксируем
         ширину как у обычного датапикера; на узком экране ограничиваемся 100%. */
      display: none; position: absolute; top: calc(100% + 8px); left: 0; right: auto;
      z-index: 600; background: #FFFFFF; border-radius: 16px;
      box-shadow: 0px 10px 30px rgba(0,7,48,0.11);
      padding: 16px; box-sizing: border-box; width: 360px; max-width: 100%;
      max-height: min(72vh, 620px); overflow-y: auto;
    }
    /* Der Inhalt war höher als das Fenster (gemessen 30.08.2026: 690 px Inhalt
       bei 608 px Höhe), und die Schaltflächen am Fuß lagen im abgeschnittenen
       Teil — erreichbar nur durch Wischen INNERHALB einer Sprechblase, die
       selbst auf einer scrollenden Seite liegt. Mit den Preiszeilen wird der
       Inhalt noch höher, also bleibt der Fuß jetzt stehen. */
    .bwcal__footer { position: sticky; bottom: -16px; background: #FFFFFF; padding-bottom: 4px; }
    @media (max-width: 768px) { .bwcal-popup { max-height: 85vh; } }
    /* 24.09.2026: на 360 px день выходил 37 px в ширину при минимуме 44 для
       пальца. Окно заходит на внутренние отступы карточки, зазоры между днями
       убраны — ширина дня растёт до ~42 px. */
    @media (max-width: 480px) {
      .bwcal-popup { padding: 12px 6px; left: -12px; width: calc(100% + 24px); max-width: calc(100% + 24px); }
      .bwcal__grid { gap: 4px 0; }
    }
    .bwcal-popup.is-open { display: block; }
    .bwcal__months { display: flex; flex-direction: column; gap: 20px; }
    .bwcal__month { flex: 1; display: flex; flex-direction: column; gap: 8px; }
    .bwcal__month-header {
      display: flex; flex-direction: row; justify-content: space-between;
      align-items: center; gap: 4px; height: 32px;
    }
    .bwcal__nav {
      width: 32px; height: 32px; border: none; border-radius: 4px;
      background: #FFFFFF; cursor: pointer; display: flex; align-items: center;
      justify-content: center; flex-shrink: 0; transition: background 0.15s;
    }
    .bwcal__nav--next { background: #DBEAFE; }
    .bwcal__nav:hover { background: #c7dcf8; }
    .bwcal__nav--hidden { visibility: hidden; pointer-events: none; }
    .bwcal__month-name {
      font-family: 'Inter', sans-serif; font-weight: 400; font-size: 17px;
      line-height: 120%; letter-spacing: -0.01em; color: #1C398E;
      text-align: center; flex: 1;
    }
    .bwcal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px 2px; }
    .bwcal__wd {
      display: flex; align-items: center; justify-content: center;
      width: auto; height: 32px;
      font-family: 'Inter', sans-serif; font-size: 13px; font-weight: 500; color: #6D7580;
    }
    /* Zwei Zeilen statt einer: Tag und darunter der Preis. Die Höhe steigt
       damit von 38 auf 48 Pixel — und erledigt nebenbei den alten Befund, dass
       die Tageszelle mit 38,9 px unter der Mindestgröße für ein Tippziel von
       44 px lag (WCAG 2.5.5). aspect-ratio ist raus: ein Quadrat kann keine
       zwei Zeilen tragen. */
    .bwcal__day {
      display: flex; flex-direction: column; align-items: center; justify-content: center;
      gap: 1px;
      width: 100%; min-height: 48px; padding: 2px; box-sizing: border-box;
      border-radius: 8px;
      font-family: 'Inter', sans-serif; font-size: 15px; font-weight: 400;
      letter-spacing: -0.01em; color: #1C398E; cursor: pointer;
      transition: background 0.1s;
    }
    .bwcal__day-price { font-size: 10px; font-weight: 500; line-height: 1; color: #268D3F; }
    .bwcal__day--sel .bwcal__day-price { color: #EDF6FF; }
    /* Die Legende steht unter dem Kalender, nicht in einer Sprechblase: auf dem
       Telefon gibt es kein Überfahren mit der Maus, und ohne sie sind ein
       durchgestrichener und ein grauer Tag zwei Rätsel. */
    .bwcal__legend {
      display: flex; flex-wrap: wrap; gap: 4px 12px; padding: 8px 0 0;
      font-size: 11px; line-height: 1.3; color: #6D7580;
    }
    .bwcal__legend b { font-weight: 600; color: #268D3F; }
    .bwcal__legend s { color: #C0C7D2; }
    .bwcal__day:hover:not(.bwcal__day--past):not(.bwcal__day--empty):not(.bwcal__day--blocked) { background: #EDF6FF; }
    .bwcal__day--empty { cursor: default; }
    .bwcal__day--past { color: #90A1B9; font-weight: 500; text-decoration: line-through; cursor: default; }
    /* QA refactoring-3 A#3: занятые даты — визуально заблокированы (как Airbnb), не выбираемы */
    .bwcal__day--blocked { color: #C0C7D2; text-decoration: line-through; cursor: not-allowed; pointer-events: none; }
    /* Wagrain-Befund: frei, aber kein Anreisetag. Bewusst NICHT durchgestrichen —
       der Tag ist als Abreise gültig; er trägt nur einen dezenten Punkt und
       gedämpfte Schrift, damit er sich vom vollwertigen Anreisetag unterscheidet. */
    .bwcal__day--no-arrival { color: #98A2B3; position: relative; }
    .bwcal__day--no-arrival::after {
      content: ''; position: absolute; left: 50%; bottom: 3px; transform: translateX(-50%);
      width: 4px; height: 4px; border-radius: 50%; background: #C0C7D2;
    }
    .bwcal__day--no-arrival.bwcal__day--sel::after { background: #EDF6FF; }
    .bwcal__day--range { background: #DBEAFE; border-radius: 0; }
    .bwcal__day--sel { background: #145DFC !important; color: #EDF6FF !important; }
    .bwcal__day--start { border-radius: 8px 0 0 8px; }
    .bwcal__day--end   { border-radius: 0 8px 8px 0; }
    .bwcal__footer {
      display: flex; justify-content: flex-end; align-items: center;
      gap: 16px; margin-top: 12px; padding-top: 12px; border-top: 1px solid #E2E8F0;
    }
    .bwcal__reset {
      background: none; border: none; font-family: 'Inter', sans-serif;
      font-size: 17px; font-weight: 500; color: #6D7580; cursor: pointer; padding: 0;
      letter-spacing: -0.01em;
    }
    .bwcal__reset:hover { color: #1C398E; }
    .bwcal__apply {
      height: 40px; padding: 0 24px; background: #F1F5F9; border: none; border-radius: 8px;
      font-family: 'Inter', sans-serif; font-size: 17px; font-weight: 500;
      letter-spacing: -0.01em; color: #1C398E; cursor: pointer;
      transition: background 0.15s;
    }
    .bwcal__apply:hover { background: #e2e8f0; }

    /* Guests popup */
    .bwg-popup {
      display: none; position: absolute; left: 0; right: 0; top: calc(100% + 4px);
      z-index: 600; background: #fff; border: 1px solid #E2E8F0; border-radius: 12px;
      box-shadow: 0 8px 24px rgba(10,30,90,0.14); padding: 16px; box-sizing: border-box;
    }
    .bwg-popup.is-open { display: block; }
    .bwg__row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
    .bwg__label { font-size: 14px; font-weight: 500; color: #1C398E; }
    .bwg__controls { display: flex; align-items: center; gap: 12px; }
    .bwg__btn {
      width: 32px; height: 32px; border: 1px solid #BFDBFF; border-radius: 50%;
      background: #fff; font-size: 20px; color: #1C398E; cursor: pointer;
      display: flex; align-items: center; justify-content: center; line-height: 1;
    }
    .bwg__btn:disabled { opacity: 0.3; cursor: default; }
    .bwg__val { font-size: 16px; font-weight: 600; color: #1C398E; min-width: 20px; text-align: center; }
    .bwg__apply { margin-top: 12px; width: 100%; height: 36px; background: #EDF6FF; border: none; border-radius: 8px; font-size: 14px; font-weight: 600; color: #1C398E; cursor: pointer; }
    .bwg__apply:hover { background: #dce9f7; }

    /* Punkt 7: Abstände kommen zentral aus --fewo-gutter. */
    @media (max-width: 1024px) {
      .object-layout { grid-template-columns: 1fr; }
      .object-sidebar { position: static; }
      .object-host-group { max-width: 100%; } /* QA refactoring-3 C#31: в одноколоночной раскладке блоки Gastgeber/helfen на полную ширину, не прижаты влево */
    }
    @media (max-width: 900px) {
      .object-page__inner { width: calc(100% - 64px); }
      .object-similar     { width: calc(100% - 64px); }
    }
    @media (max-width: 768px) {
      .object-gallery { grid-template-columns: 1fr; }
      .object-gallery__grid { display: none; }
      .object-gallery__main-img { height: 300px; }
      /* Bis hierher blieb auf dem Telefon von der Galerie EIN Bild übrig: das
         Mosaik wird ausgeblendet, und an die übrigen Fotos kam man nur über
         den Knopf "Alle Fotos anzeigen". Jetzt liegen alle Bilder als
         gewischte Strecke nebeneinander.
         Bewusst die eingebaute Bildlaufmechanik (scroll-snap) statt eines
         Touch-Handlers in JS: Schwung, Abbremsen, das Einrasten und die
         Unterscheidung von senkrechtem Wischen kommen so vom Gerät und
         verhalten sich wie überall sonst auf dem Telefon. */
      .object-gallery--swipe .object-gallery__main { display: none; }
      .object-gallery--swipe .object-gallery__track {
        display: flex;
        grid-row: 1; grid-column: 1;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        overscroll-behavior-x: contain;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
      }
      .object-gallery--swipe .object-gallery__track::-webkit-scrollbar { display: none; }
      .object-gallery__slide { flex: 0 0 100%; scroll-snap-align: center; scroll-snap-stop: always; cursor: zoom-in; }
      .object-gallery__slide-img { width: 100%; height: 300px; object-fit: cover; display: block; }
      /* Punkte sagen auf den ersten Blick "hier liegt mehr als ein Bild, und
         es lässt sich wischen" — die Zahl daneben sagt, wie viel mehr. Beides
         zusammen, weil beides etwas anderes beantwortet.
         Höchstens fünf Punkte, wanderndes Fenster: bei 88 Fotos wären 88
         Punkte eine graue Linie. Gleiches Muster wie auf den Trefferkarten
         im Katalog (.lm-card__dot), damit es sich nicht fremd anfühlt. */
      .object-gallery--swipe .object-gallery__dots {
        display: flex; gap: 6px; align-items: center;
        position: absolute; left: 50%; transform: translateX(-50%);
        bottom: 16px; z-index: 2; pointer-events: none;
      }
      .object-gallery__dot {
        width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
        background: rgba(255,255,255,0.55);
        box-shadow: 0 0 3px rgba(0,0,0,0.35);
        transition: width .2s, height .2s, background .2s;
      }
      .object-gallery__dot--small { width: 6px; height: 6px; }
      .object-gallery__dot--active { background: #fff; }
      .object-gallery--swipe .object-gallery__counter {
        display: block; position: absolute; left: 12px; bottom: 12px; z-index: 2;
        padding: 4px 10px; border-radius: 999px;
        background: rgba(10,20,60,0.62); color: #fff;
        font-family: 'Inter', sans-serif; font-size: 13px; font-weight: 600;
        font-variant-numeric: tabular-nums; pointer-events: none;
      }
      /* Der Knopf sass unten rechts und nahm der Punktreihe die Mitte weg —
         er ist mit rund 215px auf einem 350px breiten Bild einfach zu breit
         dafür. Oben rechts steht er frei, und die untere Kante gehört den
         Punkten und dem Zähler. */
      .object-gallery--swipe .object-gallery__all-btn { top: 12px; bottom: auto; right: 12px; }
      .object-title-row { flex-direction: column; }
      .object-title-row__title { font-size: 22px; max-width: 100%; } /* UI/UX 5.3: мобайл */
      .object-amenities__cols, .object-subsection__items { flex-wrap: wrap; }
    }
    @media (max-width: 580px) {
      .object-page__inner { width: calc(100% - 40px); }
      .object-similar     { width: calc(100% - 40px); }
      .object-location__body { flex-direction: column; }
      .object-location__places { height: auto; }
      /* C#27 (qa4): в колоночной раскладке flex:1 + flex-basis:0 схлопывал карту
         в тонкую полоску (нет явной высоты контейнера). Фиксируем нормальную высоту. */
      .object-location__map-wrap { flex: none; height: 220px; width: 100%; }
      .object-rrc { flex-direction: column; min-height: 0; height: auto; }
      .object-rrc__photo { width: 100%; min-height: 0; height: 200px; align-self: auto; }
      .object-rrc__body { min-height: 0; height: auto; }
      /* QA refactoring-3 C#23/C#29: инфо и цена в стек (не бок-о-бок) — иначе длинный список
         «Gegen Aufpreis» уходит под соседний блок и «лишние отступы» от тесного переноса. */
      .object-rrc__body-top { flex-direction: column; gap: 12px; }
      .object-rrc__price-block { align-items: flex-start; }
      .object-rrc__excl, .object-rrc__incl { line-height: 1.4; }
      /* QA refactoring-3 B-BUG1/C#30: способы оплаты — одна колонка, подписи в строку */
      .object-payment__list { flex-direction: column; gap: 8px; }
      .object-payment__method { width: 100%; }
    }
    /* QA refactoring-3 C#28: даты «Wähle dein Zimmer» не обрезаются/не рвутся на узких экранах */
    @media (max-width: 440px) {
      .object-availability__field { padding: 6px 8px; }
      .object-availability__field-arrow { width: 20px; height: 20px; }
      .object-availability__field-text { min-width: 0; overflow: hidden; }
      .object-availability__field-label,
      .object-availability__field-value { font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
      /* C#28 (qa4): sticky booking-бокс — уплотнить поля дат, чтобы «21.07.2026»/
         «Einchecken» помещались в одну строку без обрезки по символам. */
      .bw__cal-field { padding: 6px 8px; gap: 4px; }
      .bw__cal-arrow { width: 20px; height: 20px; }
      .bw__cal-helper, .bw__cal-value { font-size: 12px; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
    }
    @media (max-width: 375px) {
      .object-page__inner { width: calc(100% - 24px); }
      .object-similar     { width: calc(100% - 24px); }
    }
    @media (max-width: 320px) {
      .object-page__inner { width: calc(100% - 16px); }
      .object-similar     { width: calc(100% - 16px); }
    }

    /* ── Similar listings section ────────────────────────────────────────── */
    .object-similar { width: min(var(--fewo-content-max), calc(100% - 2*var(--fewo-gutter))); margin: 0 auto; padding-block: 48px 64px; box-sizing: border-box; }
    .object-similar__title { font-family: 'Inter', sans-serif; font-size: 22px; font-weight: 700; color: #1C398E; margin: 0 0 24px; }
    .object-similar__grid { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 24px; }
    @media (max-width: 900px) { .object-similar__grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }
    @media (max-width: 580px) { .object-similar__grid { grid-template-columns: 1fr; } }

    /* ── lm-card ─────────────────────────────────────────────────────────── */
    .lm-card { position: relative; display: block; color: inherit; width: 100%; background: #fff; border-radius: 16px; overflow: hidden; font-family: inherit; cursor: pointer; transition: box-shadow 0.2s ease; }
    .lm-card__link { position: absolute; inset: 0; z-index: 1; display: block; text-decoration: none; }
    .lm-card:hover { box-shadow: 0 4px 20px rgba(28,57,142,0.12); }
    .lm-card__img-wrap { position: relative; overflow: hidden; border-radius: 16px 16px 0 0; aspect-ratio: 1/1; }
    .lm-card__img { width: 100%; height: 100%; object-fit: cover; display: block; }
    .lm-card__actions { position: absolute; z-index: 2; top: 12px; display: flex; gap: 8px; }
    .lm-card__actions--left { left: 12px; }
    .lm-card__actions--right { right: 12px; }
    .lm-card__icon-btn { width: 32px; height: 32px; border-radius: 4px; border: none; background: #F4F6F9; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background 0.15s; }
    .lm-card__icon-btn:hover { background: #e1eaf8; }
    .lm-card__expand { position: absolute; z-index: 2; bottom: 12px; right: 12px; width: 34px; height: 34px; border-radius: 10px; border: none; background: rgba(255,255,255,0.88); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background 0.15s; }
    .lm-card__expand:hover { background: #fff; }
    .lm-card__nav { position: absolute; z-index: 2; top: 50%; transform: translateY(-50%); width: 32px; height: 32px; border-radius: 9px; border: none; background: rgba(255,255,255,0.88); display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: 0.7; transition: opacity 0.15s, background 0.15s; }
    .lm-card__nav:hover { opacity: 1; background: #fff; }
    .lm-card__nav--prev { left: 12px; }
    .lm-card__nav--next { right: 12px; }
    .lm-card__dots { position: absolute; bottom: 12px; left: 50%; transform: translateX(-50%); display: flex; gap: 6px; align-items: center; z-index: 2; pointer-events: none; }
    .lm-card__dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.55); transition: width 0.2s, height 0.2s, background 0.2s; flex-shrink: 0; }
    .lm-card__dot--active { background: #fff; }
    .lm-card__body { padding: 8px 4px 4px; min-width: 0; }
    .lm-card__header { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; margin-bottom: 4px; }
    .lm-card__title { margin: 0; color: #1c398e; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; font-size: 14px; font-weight: 600; }
    .lm-card__rating { display: flex; align-items: center; gap: 3px; font-size: 13px; font-weight: 600; color: #1c398e; flex-shrink: 0; }
    .lm-card__rev-count { color: #6b84c2; font-weight: 400; }
    .lm-card__desc { font-size: 14px; color: #858C94; margin: 0 0 6px; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
    .lm-card__meta { font-size: 14px; font-weight: 600; color: #1c398e; margin: 0 0 8px; line-height: 1.5; }
    .lm-card__price-row { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
    .lm-card__price-label { font-size: 13px; color: #8a9fc4; }
    .lm-card__price { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
    .lm-card__price--orig { font-size: 13px; color: #b0bdd8; text-decoration: line-through; }
    .lm-card__price--cur { font-size: 18px; font-weight: 700; color: #1c398e; white-space: nowrap; }
    /* Punkt E: Hinweis auf Kurtaxe/Nebenkosten direkt an der Preiszeile. */
    .lm-card__price-note { margin: -4px 0 8px; font-size: 11px; line-height: 1.35; color: #8a9fc4; }
    .lm-card__cancel-badge { display: inline-block; font-size: 12px; font-weight: 500; color: #185fa5; background: #ddeeff; padding: 4px 12px; border-radius: 8px; line-height: 1.2; }
    .lm-card__status { font-size: 14px; font-weight: 600; margin: 0; }
    .lm-card__status--sold { color: #d85a30; }
    .lm-card__status--unavailable { color: #d85a30; }
    .lm-card__footer { margin-top: 4px; display: flex; justify-content: space-between; align-items: flex-end; }

    /* ── Location map modal ──────────────────────────────────────────────── */
    .loc-overlay { display: none; position: fixed; inset: 0; background: rgba(0,7,48,0.45); z-index: 9000; align-items: flex-start; justify-content: center; padding: 32px 20px 20px; box-sizing: border-box; overflow-y: auto; }
    .loc-overlay.is-open { display: flex; }
    .loc-modal { display: flex; flex-direction: row; align-items: flex-start; padding: 24px 16px; width: 1120px; max-width: 100%; background: #FFFFFF; box-shadow: 0px 10px 30px rgba(0,7,48,0.11); border-radius: 16px; box-sizing: border-box; flex-shrink: 0; }
    .loc-modal__inner { display: flex; flex-direction: column; align-items: flex-start; gap: 32px; width: 100%; }
    .loc-modal__header { display: flex; flex-direction: column; align-items: flex-start; padding: 0 0 16px; gap: 10px; width: 100%; border-bottom: 1px solid #E2E8F0; box-sizing: border-box; }
    .loc-modal__head-row { display: flex; flex-direction: row; align-items: center; gap: 16px; }
    .loc-modal__close { display: flex; flex-direction: row; justify-content: center; align-items: center; padding: 4px; width: 32px; height: 32px; background: #F4F6F9; border-radius: 4px; border: none; cursor: pointer; flex-shrink: 0; transition: background 0.15s; }
    .loc-modal__close:hover { background: #e5e9f0; }
    .loc-modal__title-wrap { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; gap: 4px; }
    .loc-modal__title { font-family: 'Inter', sans-serif; font-weight: 700; font-size: 20px; line-height: 120%; letter-spacing: -0.01em; color: #1C398E; margin: 0; }
    .loc-modal__subtitle { font-family: 'Inter', sans-serif; font-weight: 500; font-size: 14px; line-height: 120%; color: #6D7580; margin: 0; }
    .loc-modal__body { display: flex; flex-direction: row; justify-content: space-between; align-items: flex-start; gap: 32px; width: 100%; }
    .loc-modal__map-wrap { flex: 1; height: 426px; border-radius: 16px; min-width: 0; overflow: hidden; position: relative; }
    .loc-modal__map { width: 100%; height: 100%; position: relative; }
    .loc-modal__sidebar { display: flex; flex-direction: column; align-items: flex-start; padding: 16px; gap: 16px; width: 332px; flex-shrink: 0; box-sizing: border-box; overflow-y: auto; max-height: 426px; }
    .loc-modal__sidebar-title { font-family: 'Inter', sans-serif; font-weight: 500; font-size: 17px; line-height: 120%; letter-spacing: -0.01em; color: #90A1B9; margin: 0; }
    .loc-modal__cats { display: flex; flex-direction: row; flex-wrap: wrap; align-items: flex-start; gap: 8px; width: 100%; }
    .loc-modal__cat { display: flex; justify-content: center; align-items: center; padding: 10px 24px; height: 40px; background: #FFFFFF; border: 1px solid #BFDBFF; border-radius: 8px; font-family: 'Inter', sans-serif; font-weight: 500; font-size: 17px; line-height: 120%; letter-spacing: -0.01em; color: #193CB8; cursor: pointer; white-space: nowrap; transition: background 0.15s, color 0.15s, border-color 0.15s; }
    .loc-modal__cat.is-active { background: #145DFC; border-color: #145DFC; color: #EDF6FF; }
    .loc-modal__cat:hover:not(.is-active) { background: #EDF6FF; }
    .loc-modal__places { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; width: 100%; }
    .loc-modal__place { display: flex; flex-direction: row; justify-content: space-between; align-items: center; gap: 16px; width: 100%; }
    .loc-modal__place-left { display: flex; flex-direction: row; align-items: center; gap: 8px; min-width: 0; flex: 1; }
    .loc-modal__place-icon { width: 24px; height: 24px; flex-shrink: 0; }
    .loc-modal__place-name { font-family: 'Inter', sans-serif; font-weight: 500; font-size: 14px; line-height: 120%; color: #1C398E; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    /* NEW-11 (qa4): «2,5 km» одной строкой — не разрывать число и единицу. */
    .loc-modal__place-dist { font-family: 'Inter', sans-serif; font-weight: 500; font-size: 14px; line-height: 120%; color: #6D7580; flex-shrink: 0; white-space: nowrap; }
    .loc-modal__empty { font-family: 'Inter', sans-serif; font-size: 14px; color: #90A1B9; }
    @media (max-width: 1200px) { .loc-modal { width: 100%; } }
    @media (max-width: 900px) {
      .loc-modal__body { flex-direction: column; }
      /* 27.09.2026: In der Spalte (align-items: flex-start) schrumpfte die
         Hülle auf die Breite ihres Inhalts — 0px, Leaflet hat keine eigene.
         Die Karte war auf Telefon und Tablet unsichtbar, nur weißer Raum. */
      .loc-modal__map-wrap { width: 100%; height: 300px; flex: none; }
      .loc-modal__map { width: 100%; height: 300px; flex: none; }
      .loc-modal__sidebar { width: 100%; max-height: 280px; }
    }
    @media (max-width: 580px) {
      .loc-overlay { padding: 12px; }
      .loc-modal { padding: 16px 12px; }
      .loc-modal__inner { gap: 20px; }
      .loc-modal__cat { font-size: 14px; padding: 8px 16px; }
    }
    /* Telefon, für alle (aus dem A/B-Test übernommen, 26.09.2026):
       - größeres, quadratisches Foto (höchstens 62 % der Bildschirmhöhe,
         vorher fest 300 px), dank _xl-Fotos ohne Unschärfe;
       - statt «Vergleichen» die Gästenote mit Anzahl, Sprung zu #bewertungen. */
    @media (max-width: 900px) {
      .object-gallery__slide-img, .object-gallery__main-img { height: auto; aspect-ratio: 1 / 1; max-height: 62vh; }
      #objTitleCmpBtn { display: none; } /* auf dem Telefon nie (Wunsch des Inhabers), Vergleichen bleibt im Katalog */
      .object-title-row__rating { display: inline-flex !important; align-items: center; gap: 8px; text-decoration: none; }
      .object-title-row__rating-score { background: #1C398E; color: #fff; font-weight: 700; font-size: 14px; line-height: 1; padding: 5px 7px; border-radius: 6px; }
      .object-title-row__rating-count { color: #1C398E; font-size: 15px; font-weight: 500; text-decoration: underline; text-underline-offset: 3px; }
    }
    /* ── A/B "Zimmerauswahl", Variante B ─────────────────────────────────── */
    .rrB-group { border: 1px solid rgba(28,57,142,.2); border-radius: 14px; padding: 14px; background: #fff; }
    .rrB-group + .rrB-group { margin-top: 12px; }
    .rrB-head { display: flex; gap: 12px; align-items: flex-start; }
    .rrB-thumb { position: relative; flex: 0 0 88px; width: 88px; height: 88px; border: 0; padding: 0; border-radius: 10px; overflow: hidden; cursor: zoom-in; background: #EDF2F7; }
    .rrB-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
    .rrB-thumb span { position: absolute; right: 4px; bottom: 4px; background: rgba(0,0,0,.6); color: #fff; font-size: 12px; font-weight: 600; padding: 2px 6px; border-radius: 6px; }
    .rrB-name { font-size: 18px; font-weight: 700; color: #1C398E; margin: 0 0 4px; line-height: 1.25; }
    .rrB-meta { font-size: 14px; color: #6D7580; margin: 0; }
    .rrB-rates { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }
    .rrB-rate { display: flex; gap: 10px; justify-content: space-between; align-items: flex-end; border: 1px solid #E2E8F0; border-radius: 10px; padding: 12px; cursor: pointer; }
    .rrB-rate.is-sel { border: 2px solid #1C398E; padding: 11px; background: #F5F9FF; }
    .rrB-lines { display: flex; flex-direction: column; gap: 3px; font-size: 14px; line-height: 1.35; color: #1C398E; min-width: 0; }
    .rrB-ok { color: #15803D; font-weight: 600; }
    .rrB-mut { color: #6D7580; }
    .rrB-tag { align-self: flex-start; background: #FEF3C7; color: #92400E; font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 6px; }
    .rrB-price { text-align: right; flex-shrink: 0; display: flex; flex-direction: column; align-items: flex-end; gap: 2px; }
    .rrB-price b { font-size: 18px; color: #1C398E; white-space: nowrap; }
    .rrB-price small { font-size: 12px; color: #6D7580; white-space: nowrap; }
    .rrB-book { margin-top: 6px; background: #1760FF; color: #fff; border: 0; border-radius: 8px; padding: 9px 16px; font-size: 15px; font-weight: 600; cursor: pointer; }
    .rrB-na { font-size: 14px; color: #6D7580; }
    /* ── A/B Variante B: kompakter Kopf (nur Telefon) ─────────────────────── */
    .hdrB-float, .hdrB-bar, .object-title-row__rating { display: none; }
    @media (max-width: 900px) {
      body.fewo-hdrB .app-header, body.fewo-hdrB .app-header-spacer, body.fewo-hdrB .fewo-breadcrumbs { display: none !important; }
      body.fewo-hdrB .object-page { position: relative; padding-top: 0; margin-top: 0; }
      body.fewo-hdrB .object-page__inner { margin-top: 0; padding-top: 0; }
      body.fewo-hdrB .object-page__inner { display: flex; flex-direction: column; }
      body.fewo-hdrB .object-page__inner > .object-gallery { order: -1; width: 100vw; margin: 0 0 0 calc(50% - 50vw); border-radius: 0; }
      body.fewo-hdrB .object-gallery .object-gallery__main-img, body.fewo-hdrB .object-gallery img { border-radius: 0; }
      body.fewo-hdrB .object-gallery__all-btn { display: none; }
      body.fewo-hdrB .object-title-row { margin-top: 16px; }
      body.fewo-hdrB .object-title-row__action-btn[data-share] { display: none; }
      .hdrB-btn { width: 40px; height: 40px; border-radius: 50%; border: 0; background: #fff; display: inline-flex;
        align-items: center; justify-content: center; box-shadow: 0 2px 8px rgba(0, 7, 48, .18); cursor: pointer; padding: 0; color: #1C398E; }
      .hdrB-btn svg { width: 20px; height: 20px; }
      body.fewo-hdrB .hdrB-float { display: flex; justify-content: space-between; position: absolute; top: 12px; left: 12px; right: 12px; z-index: 20; pointer-events: none; }
      body.fewo-hdrB .hdrB-float .hdrB-btn { pointer-events: auto; }
      body.fewo-hdrB .hdrB-bar { display: flex; align-items: center; gap: 10px; position: fixed; top: 0; left: 0; right: 0; height: 56px;
        padding: 0 12px; background: #fff; box-shadow: 0 2px 12px rgba(0, 7, 48, .10); z-index: 1001;
        transform: translateY(-110%); transition: transform .2s ease; }
      body.fewo-hdrB .hdrB-bar.is-on { transform: translateY(0); }
      .hdrB-bar .hdrB-btn { box-shadow: none; background: #F3F6FB; width: 38px; height: 38px; }
      .hdrB-bar__title { flex: 1; min-width: 0; font-size: 16px; font-weight: 600; color: #1C398E; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    }
  
