/*!
 * KristinaHouse — /market/lotcard.css — КАРТОЧКА НЕДВИЖИМОСТИ, вид для гостя (⭐ESC).
 *
 * Перенос стиля с batumi.su: `OLD_WEBSITE/public/property/card/consumer.css`. Имена классов
 * СОХРАНЕНЫ дословно, и это не ностальгия — три причины, каждая проверяемая:
 *
 *  1. Карусель главной оригинала (`homeslider.js`) написана под эти же имена; её мёртвый CSS снят из
 *     `site.css` (⭐GREAT, баг Б14), и вернётся она вместе с разметкой — без переименований.
 *  2. Столкновений нет: свои `.tag`, `.badge`, `.action-btn` портал не объявляет вовсе
 *     (проверено по `site.css`, `market.css`, `feed.css`, `profile.css`), а всё, что объявлено
 *     под старыми именами, ограничено `.kh-home-slider`.
 *  3. `:root` ОТСЮДА УБРАН. В оригинале он переобъявлял `--primary`, `--text-main` и
 *     `--border-color` — те же значения, что у портала, но вторым источником. Совпадение сегодня
 *     не значит совпадения завтра: сменив тему в панели, хозяин площадки поменял бы всё, кроме
 *     карточек, и разошлись бы они молча.
 *
 * ⚠ ЧТО НЕ ПЕРЕНЕСЕНО СОЗНАТЕЛЬНО. Оригинал считал курс валют в браузере (`getRates` в card.js)
 * и подменял число в `.price-main`. Здесь пересчёт приезжает СЧИТАННЫМ с сервера в `data-p-*`,
 * а переключает его `switch.js` — довод дословно оттуда: два счёта дают два ответа о цене, и
 * расходятся они молча, потому что оба выглядят правдоподобно.
 */

/* ===== обёртка и сама карточка ===== */

.card-wrapper { position: relative; display: inline-block; }

/* Невидимые «коридоры» по бокам — подложка под боковые рельсы кнопок: пока курсор в коридоре
   (на кнопке, между кнопками или в зазоре у края), :hover обёртки не теряется и рельс не
   прячется. Во всю высоту карточки. */
.card-wrapper:not(.kh-hs-inert)::before,
.card-wrapper:not(.kh-hs-inert)::after {
    content: '';
    position: absolute;
    top: -16px; bottom: -16px;
    width: 56px;                 /* 8px зазор + 40px кнопка + 8px запас */
    pointer-events: auto;
}
.card-wrapper:not(.kh-hs-inert)::before { left: -56px; }   /* левый рельс — управление */
.card-wrapper:not(.kh-hs-inert)::after { right: -56px; }   /* правый рельс — языки и навигация */
/* узкий экран: рельсы уезжают внутрь/вниз, коридоры не нужны — и не должны создавать
   горизонтальную прокрутку страницы */
@media (max-width: 900px) {
    .card-wrapper:not(.kh-hs-inert)::before,
    .card-wrapper:not(.kh-hs-inert)::after { display: none; }
}

.property-card {
    background: #fff;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -1px rgba(0,0,0,.06);
    overflow: hidden;
    width: 380px;
    transition: transform .2s ease, box-shadow .2s ease;
    border: 1px solid var(--border-color);
    box-sizing: border-box;
    /* ⭐GREAT (карта §8.1 п.18): шрифт — НА САМОЙ карточке, как у оригинала: тема портала может сменить
       свой, и карточка недвижимости не обязана меняться вместе с форумом */
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
.property-card *, .kh-popup * { box-sizing: border-box; }

.card-wrapper:hover > .property-card {
    transform: translateY(-6px) scale(1.02);
    box-shadow: 0 20px 28px -8px rgba(0,0,0,.18), 0 8px 12px -4px rgba(0,0,0,.08);
    z-index: 15;
}

/* ⚠ В ВЫДАЧЕ КАРТОЧКА НЕ 380px, А ЯЧЕЙКА. Ширина из оригинала — это ширина каталога batumi.su,
   где сетка была своя; здесь сетку задаёт `.mkt-grid`, и фиксированная ширина ломала бы её на
   каждом экране, кроме одного. Оригинальные 380px остаются умолчанием для одиночной карточки. */
.mkt-grid > .card-wrapper { display: block; width: 100%; }
.mkt-grid > .card-wrapper .property-card { width: 100%; }
/* карточки в выдаче — рельсами внутрь: соседняя ячейка стои́т вплотную, и наружные кнопки
   накрыли бы её (в каталоге оригинала между карточками был воздух) */
.mkt-grid > .card-wrapper::before, .mkt-grid > .card-wrapper::after { display: none; }
/* ⭐GREAT: рельс языков (RU · EN · GE) теперь есть у ВСЕХ смотрящих — внутри карточки он встаёт НИЖЕ ❤
   (36 px кнопка на 12 px от края кадра), иначе накрывал бы сердце */
.mkt-grid > .card-wrapper .hover-actions { left: auto; right: 8px; top: 56px; }
.mkt-grid > .card-wrapper .hover-actions-left { right: auto; left: 8px; }
.mkt-grid > .card-wrapper .hover-nav-right { left: auto; right: 8px; }
.mkt-grid > .card-wrapper .hover-nav-left { right: auto; left: 8px; }
.mkt-grid > .card-wrapper .hover-del { left: auto; right: 8px; }

/* ===== боковые рельсы кнопок ===== */

.hover-actions, .hover-actions-left {
    position: absolute;
    top: 12px;
    display: flex; flex-direction: column; gap: 6px;
    opacity: 0; pointer-events: none;
    transition: opacity .15s ease;
    transition-delay: .5s;
    z-index: 20;
}
.hover-actions { left: calc(100% + 8px); }
.hover-actions-left { right: calc(100% + 8px); }
.card-wrapper:hover > .hover-actions,
.card-wrapper:hover > .hover-actions-left.show { opacity: 1; pointer-events: auto; transition-delay: 0s; }

.hover-btn {
    width: 40px; height: 40px;
    border-radius: 50%;
    background: #fff;
    border: 1px solid var(--border-color);
    display: flex; align-items: center; justify-content: center;
    font-size: 13px; font-weight: 600;
    cursor: pointer;
    box-shadow: 0 2px 4px rgba(0,0,0,.08);
    transition: background-color .15s ease, transform .15s ease;
    color: var(--text-main);
    user-select: none;
    line-height: 1;
    font-family: inherit;
    padding: 0;
}
.hover-btn:hover { background-color: #f0f4ff; transform: scale(1.08); }
.hover-btn.active-lang { background-color: var(--primary); color: #fff; border-color: var(--primary); }
.hover-btn.kh-save-ok { background: #dcfce7; border-color: #86efac; }
.hover-btn.kh-save-error { background: #fee2e2; border-color: #fca5a5; }
.hover-btn.kh-delete-btn:hover { background: #fee2e2; border-color: #fca5a5; }

/* ===== слайдер трёх панелей ===== */

.card-slider { display: flex; width: 300%; transition: transform .35s ease; }
.card-panel { width: calc(100% / 3); box-sizing: border-box; flex-shrink: 0; }
/* ⚠ ⭐CK K7 (повтор): RTL. ГЕОМЕТРИЯ СЛАЙДЕРА — ВСЕГДА СЛЕВА НАПРАВО, текст панелей — языком страницы.
   Сдвиг на центр (`translateX(-33.3333%)`) пишут ТРИ места: разметка (`lotcard.ts`), листание (`lotcard.js` `_nav`) и
   сцена конструктора (`designer.js` `slideTo`) — и все считают панели слева направо. При `dir="rtl"` (иврит, арабский)
   flex раскладывал их справа налево, полоса 300% вылезала влево, и тот же сдвиг уводил центр с кадром за край —
   плитки каталога на /he были пустыми белыми прямоугольниками (компьютер и телефон). Менять знак в трёх местах —
   значит держать три копии правила; здесь одно: полоса панелей — ltr (левая панель слева, как и стрелки
   `.hover-nav-left/right` и свайп), а каждая панель возвращает направление страницы своему тексту.
   ⚠ ОДНОГО `direction: ltr` У ПОЛОСЫ МАЛО (проверено замером): куда вылезает полоса шириной 300%, решает направление
   её РОДИТЕЛЯ (`.property-card`, rtl) — правый край прижат к карточке, лишние 200% уходят влево, и центр оказывается
   ещё дальше за краем. `margin-right: -200%` делает раскладку не переопределённой: левое поле считается из
   «0 + 300% − 200% = 100%» и становится нулём — полоса начинается у левого края карточки, как в ltr (у ltr-родителя то
   же поле браузер и так вычисляет сам, поэтому правило безопасно вне rtl). Родителю `direction` не меняем: в карточке
   живут и другие узлы (просмотр менеджера `.kh-viewing` подменяет слайдер), их текст — языком страницы. */
[dir="rtl"] .card-slider { direction: ltr; margin-right: -200%; }
[dir="rtl"] .card-slider > .card-panel { direction: rtl; }
/* ⭐CK K2: у каркасов без панелей (`flat`, `strip`) средняя панель — вся карточка */
.property-card:not(.lay-card) > .card-panel.panel-center { width: 100%; }
@media (prefers-reduced-motion: reduce) {
    .card-slider, .property-card, .hover-btn, .slider-outside-bottom, .qa-toggle-icon { transition: none !important; }
    .card-wrapper:hover > .property-card { transform: none; }
}
.card-panel.panel-left, .card-panel.panel-right {
    padding: 24px 20px 70px;
    overflow-y: auto;
    max-height: 640px;
}

.hover-nav-right, .hover-nav-left {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    display: flex; flex-direction: column; gap: 6px;
    opacity: 0; pointer-events: none;
    transition: opacity .15s ease;
    transition-delay: .5s;
    z-index: 20;
}
.hover-nav-right { left: calc(100% + 8px); }
.hover-nav-left { right: calc(100% + 8px); }
.card-wrapper:hover > .hover-nav-right,
.card-wrapper:hover > .hover-nav-left { opacity: 1; pointer-events: auto; transition-delay: 0s; }
.hidden-btn { opacity: 0 !important; pointer-events: none !important; }

/* удаление лота — тот же правый рельс, но НИЖЕ кнопки «вправо»
   (`.hover-nav-right` центрирована по вертикали → её низ на 50% + 20px) */
.hover-del {
    position: absolute;
    left: calc(100% + 8px);
    top: calc(50% + 26px);
    z-index: 20;
    opacity: 0; pointer-events: none;
    transition: opacity .15s ease;
    transition-delay: .5s;
}
.card-wrapper:hover > .hover-del { opacity: 1; pointer-events: auto; transition-delay: 0s; }

/* ===== кадр ===== */

.image-container {
    position: relative;
    height: 240px;
    background: #e2e8f0;
    overflow: hidden;
    cursor: pointer;
    user-select: none;
    display: block;
}
.property-image { width: 100%; height: 100%; object-fit: cover; pointer-events: none; display: block; }
/* ⭐GREAT (карта §8.1 п.2): второй кадр «проступанием» (`.property-image-2`) снят — в оригинале его
   не было, кадры листает слайдер (ниже, «фото-слайдер») */
.image-container .kh-noph {
    display: flex; align-items: center; justify-content: center;
    width: 100%; height: 100%; font-size: 40px; color: #94a3b8;
}

.badges-top {
    position: absolute; top: 12px; left: 12px;
    display: flex; gap: 8px; flex-wrap: wrap;
    z-index: 10; pointer-events: none;
}
.badge { padding: 4px 10px; border-radius: 6px; font-size: 12px; font-weight: 600; text-transform: uppercase; }
.badge-status { background-color: #10b981; color: #fff; }
.badge-class { background-color: rgba(0,0,0,.6); color: #fff; backdrop-filter: blur(4px); }
.badge-auction { background-color: #f59e0b; color: #fff; }

.favorite-btn {
    position: absolute; top: 12px; right: 12px;
    background: #fff; border: none;
    width: 36px; height: 36px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    cursor: pointer;
    box-shadow: 0 2px 4px rgba(0,0,0,.1);
    transition: transform .1s ease;
    z-index: 10;
    padding: 0;
}
.favorite-btn:active { transform: scale(.9); }
.favorite-btn svg { fill: none; stroke: var(--text-muted); stroke-width: 2; width: 20px; height: 20px; }
.favorite-btn.active svg { fill: #ef4444; stroke: #ef4444; }

/* ===== содержимое ===== */

.card-content { padding: 20px; min-height: 320px; }

.tags-row { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
.tag {
    padding: 3px 10px; border-radius: 20px;
    font-size: 11px; font-weight: 600; color: #fff;
    background: var(--tag-color, #6b7280);
    letter-spacing: .3px; white-space: nowrap;
}
/* не больше двух строк тегов — карточки одной высоты; «+n» раскрывает */
.tags-row.kh-clamp {
    max-height: 54px; min-height: 54px;
    overflow: hidden; position: relative;
    align-content: flex-start;
}
.tags-row.kh-clamp.kh-tags-open { max-height: none; overflow: visible; }
.kh-tags-more {
    position: absolute; right: 0; bottom: 2px;
    padding: 2px 9px; border-radius: 20px;
    border: 1px solid var(--border-color);
    background: rgba(255,255,255,.95);
    font-size: 11px; font-weight: 600; color: var(--primary);
    cursor: pointer; font-family: inherit;
}
.kh-tags-more:hover { background: #eff6ff; }

/* Свёрнутая карточка: видны цена, заголовок, адрес, статус и спеки; «Связаться» и атрибуция
   курса появляются наведением, уход курсора сворачивает обратно (оригинал: 607 ⇄ 680 px). */
.property-card.kh-collapsed .action-btn,
.property-card.kh-collapsed .rate-attribution { display: none; }
/* ⭐CK K2 (вывод 7): ВИДИМОСТЬ В СВЁРНУТОЙ — ПОЛЕМ `fold` БЛОКА. «Только в раскрытой» прячет любой блок,
   «видно и в свёрнутой» возвращает то, что прячет умолчание выше (кнопка «Связаться», дата курса) */
.property-card.kh-collapsed .kh-fold-hide { display: none !important; }
.property-card.kh-collapsed .action-btn.kh-fold-show { display: block; }
.property-card.kh-collapsed .kh-fold-show .rate-attribution { display: inline; }
/* свёрнутой не тянем контент до min-height — иначе под «свободно/занято» повисает пустота */
.property-card.kh-collapsed .card-content { min-height: 0; padding-bottom: 16px; cursor: pointer; }
.property-card.kh-collapsed .availability-btn { margin-bottom: 0; }
/* Боковые панели — участники flex-строки, и их содержимое растягивало карточку по высоте даже
   на средней панели. В свёрнутом виде схлопываем их целиком: высота карточки = видимый центр. */
.property-card.kh-collapsed .card-panel.panel-left,
.property-card.kh-collapsed .card-panel.panel-right {
    max-height: 0; padding-top: 0; padding-bottom: 0; overflow: hidden;
}
.property-card.kh-collapsed .card-content:hover .property-title { color: var(--primary); }

/* заголовок и «поделиться» в одну строку */
.property-title-row { display: flex; align-items: flex-start; gap: 8px; }
.property-title-row .property-title { flex: 1 1 auto; margin: 0; min-width: 0; }
.kh-title-share {
    flex: 0 0 auto; border: none; background: transparent; cursor: pointer;
    color: var(--text-muted); padding: 2px; border-radius: 6px; line-height: 0;
}
.kh-title-share:hover { color: var(--primary); background: rgba(37,99,235,.08); }
.kh-pin-badge { flex: 0 0 auto; font-size: 14px; line-height: 1.4; cursor: help; }
/* ⭐ES2 шаг F2 (решение 39): своё и командное название — под публичным, мелко; ручные бейджи на странице лота */
.kh-title-mgr { display: flex; flex-direction: column; gap: 2px; margin: -4px 0 8px; font-size: 12px; line-height: 1.25; color: var(--text-muted, #6b7280); }
.kh-title-mgr span { cursor: help; }
.kh-title-badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }

.kh-view-object {
    display: block; text-align: center; text-decoration: none;
    margin: 6px 0 4px; padding: 8px 12px; border-radius: 8px;
    border: 1px solid var(--primary); color: var(--primary);
    font-size: 14px; font-weight: 500; background: #fff;
}
.kh-view-object:hover { background: var(--primary); color: #fff; }

.price-row { display: flex; flex-direction: column; margin-bottom: 8px; }
.price-main { font-size: 24px; font-weight: 700; color: var(--text-main); }
.price-sqm { font-size: 13px; color: var(--text-muted); margin-top: 2px; }
.price-extra-info { display: flex; flex-wrap: wrap; align-items: center; margin-top: 2px; gap: 4px; }
.price-auction { font-size: 10px; color: var(--text-muted); white-space: nowrap; }
.price-discount { font-size: 10px; color: #ef4444; white-space: nowrap; }
/* ⚠ ВЫБОР ВАЛЮТЫ — ЭТО `.kh-cur-pick`, И ОН НЕ СЧИТАЕТ. Нажатие зовёт `switch.js`, который
   кладёт в узел уже посчитанное сервером значение из `data-p-<код>`. Оригинал считал сам. */
.price-main .kh-cur-pick, .price-sqm .kh-cur-pick {
    font-size: inherit; font-weight: inherit; color: inherit;
    border: none; background: transparent; cursor: pointer; outline: none;
    font-family: inherit; padding: 0 2px; margin: 0;
}
.price-alt { font-size: 13px; color: var(--text-muted); margin-top: 2px; }
/* ⭐GREAT (карта §3.8, §8.1 п.9): «140 [₾▾] / сутки» — число, выбор валюты знаком и хвост периода ОДНОЙ
   строкой, дата курса — мелко справа на той же строке (у свёрнутой плитки она скрыта, как атрибуция
   оригинала). Прежние «от 140 ₾/сутки [GEL▾]» + «сдаётся» + «≈ 54 $» тремя строками давали +40 px. */
.price-line { display: flex; align-items: baseline; justify-content: space-between; gap: 6px 10px; flex-wrap: wrap; }
.price-line .price-main { white-space: nowrap; }
.price-line .rate-attribution { margin: 0; white-space: nowrap; }
.kh-per { font-weight: inherit; }

.rate-attribution { font-size: 9px; line-height: 1; margin-bottom: 6px; color: #9ca3af; }
.rate-attribution a { color: #9ca3af; text-decoration: none; }
.rate-attribution a:hover { color: var(--text-muted); }

.property-title {
    font-size: 18px; font-weight: 600; color: var(--text-main);
    margin: 0 0 6px;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.property-title-link { color: inherit; text-decoration: none; }
.property-title-link:hover { color: var(--primary); text-decoration: underline; }
.property-address {
    font-size: 14px; color: var(--text-muted);
    display: flex; align-items: center; gap: 4px;
    margin-bottom: 16px;
    cursor: pointer;
}
.property-address svg { flex-shrink: 0; }
/* ⭐CK K2 (A20): подчёркивание адреса под курсором — оригинал (`map/consumer.css`) */
.property-address:hover span, .property-address:focus-visible span { text-decoration: underline; }
.property-address > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.availability-btn {
    display: flex; align-items: center; gap: 8px;
    font-size: 14px; font-weight: 500; color: #10b981;
    margin-bottom: 16px; padding: 8px 12px;
    background: #f0fdf4;
    border: 1px solid transparent; border-radius: 8px;
    cursor: pointer;
    transition: background-color .15s ease, border-color .15s ease;
    width: 100%;
    font-family: inherit;
}
.availability-btn:hover { background: #dcfce7; border-color: #86efac; }
.availability-btn.busy { color: #b45309; background: #fffbeb; }
.availability-btn.busy:hover { background: #fef3c7; border-color: #fcd34d; }
.availability-btn svg { flex-shrink: 0; }
.kh-avail-count {
    margin-left: auto; font-size: 12px; font-weight: 700;
    background: rgba(0,0,0,.06); color: var(--text-main);
    padding: 1px 8px; border-radius: 999px; white-space: nowrap;
}

.specs-grid {
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 12px; padding: 12px 0;
    border-top: 1px solid var(--border-color);
    border-bottom: 1px solid var(--border-color);
    margin-bottom: 16px;
}
.spec-item { display: flex; flex-direction: column; align-items: center; text-align: center; }
.spec-label {
    font-size: 11px; color: var(--text-muted);
    text-transform: uppercase; letter-spacing: .5px; margin-bottom: 4px;
}
.spec-value { font-size: 14px; font-weight: 600; color: var(--text-main); }
.kh-area-value { cursor: pointer; user-select: none; transition: color .15s; }
.kh-area-value:hover { color: var(--primary); }

.action-btn {
    display: block; width: 100%; padding: 12px;
    background-color: var(--primary); color: #fff;
    border: none; border-radius: 8px;
    font-size: 15px; font-weight: 600; text-align: center;
    text-decoration: none; cursor: pointer;
    transition: background-color .2s ease;
    font-family: inherit;
}
.action-btn:hover { background-color: var(--primary-hover); color: #fff; }

/* ===== боковые панели ===== */

.panel-left h4, .panel-right h4 {
    font-size: 15px; font-weight: 700; color: var(--text-main);
    margin: 18px 0 10px;
}
.panel-left h4:first-child, .panel-right h4:first-child { margin-top: 0; }

.desc-section p { font-size: 13px; color: var(--text-muted); line-height: 1.5; margin: 0 0 10px; }
/* описание — отрисованный markdown: списки и заголовки держат кегль раздела, а не портальный */
.desc-section ul, .desc-section ol { font-size: 13px; color: var(--text-muted); margin: 0 0 10px; padding-left: 18px; }
.desc-section h1, .desc-section h2, .desc-section h3 { font-size: 14px; margin: 8px 0 6px; color: var(--text-main); }
.char-row {
    display: flex; justify-content: space-between;
    padding: 7px 0;
    border-bottom: 1px solid var(--border-color);
    font-size: 13px; align-items: center; gap: 6px;
}
.char-row span:first-child { color: var(--text-muted); }
.char-row span:last-child { color: var(--text-main); font-weight: 500; }
.char-row-auto span:last-child { color: var(--tag-color, var(--text-main)); }

/* ===== ⭐CK K2: каркасы без панелей — «плитка» (`flat`) и «строка» (`strip`) =====
 *
 * ⚠ ТЕ ЖЕ ТОКЕНЫ, ЧТО У КАРТОЧКИ ОРИГИНАЛА (радиус 16, тень, рамка, системный шрифт, синий акцент), — у товара,
 * вакансии и задачи вид «семьи», а не четыре разных сайта. Отличие одно: наведение ничего не сворачивает
 * (`lotcard.js` сворачивает только `lay-card`) — у плитки товара свернуть нечего, всё и так на виду.
 */
.property-card.lay-flat .card-content, .property-card.lay-strip .card-content { min-height: 0; padding: 14px 16px 16px; }
.property-card.lay-flat .property-title {
    white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
    font-size: 16px; line-height: 1.3; margin-bottom: 6px;
}
.property-card.lay-flat .price-main { font-size: 20px; }
.property-card.lay-flat .price-row { margin-bottom: 6px; }
.property-card.lay-flat .property-address { margin-bottom: 8px; font-size: 13px; }
.property-card.lay-flat .specs-grid { margin-bottom: 10px; padding: 8px 0; }
.property-card.lay-flat .action-btn { padding: 10px; font-size: 14px; }
.property-card.lay-flat .kh-view-object { margin: 8px 0 0; }
.property-card.lay-flat .card-content > :last-child { margin-bottom: 0; }
/* телефон: плитки товара встают по две в ряд (~170 px) — кегли и поля мельче, кнопка «Подробнее» не нужна
   (вся плитка — ссылка), чтобы цена с выбором валюты не ломала строку */
@media (max-width: 480px) {
    .property-card.lay-flat .card-content { padding: 10px 12px 12px; }
    .property-card.lay-flat .price-main { font-size: 17px; }
    .property-card.lay-flat .property-title { font-size: 14px; }
    .property-card.lay-flat .kh-view-object { display: none; }
    .property-card.lay-flat .kh-facts-chips { gap: 4px; }
    .property-card.lay-flat .kh-fact-chip { font-size: 11px; padding: 2px 8px; }
}

.property-card.lay-strip { width: 100%; }
.property-card.lay-strip .card-panel.panel-center { display: grid; grid-template-columns: 220px 1fr; width: 100%; }
/* строка без снимка (вакансия, резюме, задача) — одна колонка, а не текст в 220 px слева */
.property-card.lay-strip .card-panel.panel-center:not(:has(> .image-container)) { grid-template-columns: 1fr; }
.property-card.lay-strip .image-container { height: 100%; min-height: 150px; }
/* тело строки: слева суть (заголовок, факты, лицо, мета), справа цена · сделка · отклики · действие —
   место решает класс корня блока, порядок — сборка; `dense` заполняет дыры левой колонки */
.property-card.lay-strip .card-content {
    display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-auto-flow: row dense;
    column-gap: 18px; row-gap: 6px; align-items: start;
}
.property-card.lay-strip .card-content > * { grid-column: 1; margin-bottom: 0; }
.property-card.lay-strip .card-content > .price-row,
.property-card.lay-strip .card-content > .kh-deal,
.property-card.lay-strip .card-content > .kh-bids,
.property-card.lay-strip .card-content > .action-btn,
.property-card.lay-strip .card-content > .kh-view-object { grid-column: 2; justify-self: end; text-align: right; }
.property-card.lay-strip .price-row { align-items: flex-end; }
.property-card.lay-strip .price-main { font-size: 20px; }
.property-card.lay-strip .property-title { font-size: 17px; white-space: normal; }
.property-card.lay-strip .action-btn, .property-card.lay-strip .kh-view-object { width: auto; margin: 0; padding: 8px 16px; font-size: 14px; }
.property-card.lay-strip .specs-grid { border: none; padding: 0; margin: 0; }
.card-wrapper:hover > .property-card.lay-strip { transform: translateY(-2px); }
@media (max-width: 560px) {
    .property-card.lay-strip .card-panel.panel-center { grid-template-columns: 1fr; }
    .property-card.lay-strip .image-container { height: 200px; }
    .property-card.lay-strip .card-content { grid-template-columns: 1fr; }
    .property-card.lay-strip .card-content > * { grid-column: 1 !important; justify-self: start !important; text-align: left !important; }
}

/* ===== ⭐CK K2: блоки карточки не-недвижимости (вывод 12) ===== */

/* `lot.card.meta` — «Батуми · 3 дня назад · 👁 25» мелко, как строка прежней плитки */
.kh-meta { font-size: 12px; color: var(--text-muted); margin: 0 0 8px; display: flex; flex-wrap: wrap; align-items: center; }
.kh-meta-dot { color: #cbd5e1; }
/* `lot.card.seller` — аватар 28 px и имя ссылкой на витрину лица; ✔ проверенное лицо */
.kh-seller {
    display: inline-flex; align-items: center; gap: 8px; max-width: 100%; margin: 0 0 10px;
    color: var(--text-main); text-decoration: none; font-size: 13px; font-weight: 600;
}
a.kh-seller:hover .kh-seller-name { color: var(--primary); text-decoration: underline; }
.kh-seller-ava {
    width: 28px; height: 28px; border-radius: 50%; flex: 0 0 28px; object-fit: cover;
    display: inline-flex; align-items: center; justify-content: center;
    background: #eef2f8; color: var(--text-muted); font-size: 11px; font-weight: 700; letter-spacing: .3px;
}
.kh-seller-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kh-seller-ok { color: #10b981; font-size: 12px; }
.kh-seller-anon { color: var(--text-muted); font-weight: 500; }
/* `lot.card.facts` — ячейками (как спеки), строкой через «·» или таблетками */
.specs-grid.kh-facts { grid-template-columns: repeat(3, 1fr); }
.kh-facts-line { font-size: 13px; color: var(--text-muted); margin: 0 0 10px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 0; }
.kh-facts-line b { color: var(--text-main); font-weight: 600; }
.kh-facts-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }
.kh-fact-chip {
    padding: 3px 10px; border-radius: 20px; font-size: 12px; font-weight: 500;
    background: #f1f5f9; color: var(--text-main); border: 1px solid var(--border-color);
}
.kh-fact-k { color: var(--text-muted); font-weight: 400; }
/* `lot.card.deal` — сделка таблеткой: вакансия синяя, резюме зелёная, задача оранжевая, услуга фиолетовая */
.kh-deal {
    display: inline-flex; align-items: center; gap: 4px; align-self: flex-start;
    padding: 3px 10px; border-radius: 20px; margin: 0 0 8px;
    font-size: 11px; font-weight: 600; letter-spacing: .3px; text-transform: uppercase;
    background: #eff6ff; color: #1d4ed8;
}
.kh-deal-job { background: #ecfdf5; color: #047857; }
.kh-deal-buy { background: #fff7ed; color: #c2410c; }
.kh-deal-service { background: #f5f3ff; color: #6d28d9; }
.kh-deal-rent, .kh-deal-rentout { background: #ecfeff; color: #0e7490; }
/* `lot.card.bids` — «🔨 3 отклика»; у свободной задачи — зелёным */
.kh-bids { display: inline-block; font-size: 12px; font-weight: 600; color: #b45309; margin: 0 0 8px; }
.kh-bids-0 { color: #059669; font-weight: 500; }
/* ⭐CK K2-ревью: `lot.card.rating` — репутация мастера строкой «★ 4.8 (27) · 63 работы · отвечает ~20 мин»
   (звезда — янтарная, число оценок — серым, «новичок» — таблеткой) */
.kh-rating { font-size: 12px; color: var(--text-muted); margin: 0 0 8px; display: flex; flex-wrap: wrap; align-items: center; }
.kh-rate-stars b { color: #b45309; font-weight: 700; }
.kh-rate-n { color: var(--text-muted); }
.kh-rate-new {
    padding: 2px 8px; border-radius: 20px; background: #f0fdf4; color: #15803d; font-weight: 600; font-size: 11px;
}
/* навыки (`lot.card.tags` с источником `skills`) — таблетки ряда тегов мягким акцентом карточки (а не цветом тега:
   у навыка его нет), чтобы рядом с цветными тегами удобств они читались «что умеет», а не «что есть» */
.tags-row.kh-skills .tag.kh-skill { background: #eef4ff; color: var(--primary); font-weight: 600; }
.property-card.lay-strip .tags-row.kh-skills { min-height: 0; margin: 0 0 4px; }

/* ===== боковые панели: разговор (блок `lot.card.talk`, оригинал §1.1, `comments/consumer.css`) ===== */

.kh-articles { display: flex; flex-direction: column; margin-bottom: 4px; }
/* ⭐CK K2 (A13): статья и комментарий — строками оригинала (`padding: 9px 0`, черта снизу), автор синим */
.article-item {
    display: block; padding: 9px 0; font-size: 13px; line-height: 1.4;
    color: var(--text-main); text-decoration: none;
    border-bottom: 1px solid var(--border-color); transition: color .15s;
}
.article-item:hover { color: var(--primary); }
.panel-header-with-toggle { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.panel-header-with-toggle h4 { margin-bottom: 10px; }
.comment-item { padding: 9px 0; border-bottom: 1px solid var(--border-color); }
.comment-author { font-size: 12px; font-weight: 600; color: var(--primary); margin-bottom: 3px; }
.comment-text { font-size: 13px; color: var(--text-muted); line-height: 1.4; overflow-wrap: anywhere; }
.kh-talk-empty, .kh-desc-empty { font-size: 13px; color: var(--text-muted); margin: 0 0 10px; }
/* формы прямо в панели (A15) — `.panel-form` оригинала дословно */
.panel-form { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border-color); display: flex; flex-direction: column; gap: 6px; }
.panel-input {
    width: 100%; padding: 8px 10px; border: 1px solid var(--border-color); border-radius: 6px;
    font-size: 13px; font-family: inherit; outline: none; box-sizing: border-box; color: var(--text-main);
}
.panel-input:focus { border-color: var(--primary); }
.panel-form textarea {
    width: 100%; padding: 10px 12px; border: 1px solid var(--border-color); border-radius: 8px;
    font-size: 13px; font-family: inherit; resize: none; outline: none; box-sizing: border-box; color: var(--text-main);
}
.panel-form textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(37,99,235,.1); }
.form-submit {
    display: inline-block; align-self: flex-start; margin-top: 8px; padding: 8px 16px; border-radius: 6px;
    background: var(--primary); color: #fff; font-size: 13px; font-weight: 600;
    text-decoration: none; border: none; cursor: pointer; font-family: inherit; transition: background .15s;
}
.form-submit:hover { background: var(--primary-hover); color: #fff; }
.form-submit:disabled { opacity: .6; cursor: wait; }
.kh-cf-status { font-size: 12px; min-height: 0; }
.kh-cf-status.ok { color: #16a34a; }
.kh-cf-status.err { color: #dc2626; }
/* ⭐CK K2 (A14): «❓ Вопросы и отзывы» — вкладки оригинала, вопрос раскрывает ответ по ▶ */
.qa-tabs { display: flex; gap: 4px; margin-bottom: 8px; border-bottom: 1px solid var(--border-color); padding-bottom: 4px; }
.qa-tab {
    padding: 4px 12px; font-size: 12px; font-weight: 600; cursor: pointer; border-radius: 4px 4px 0 0;
    color: var(--text-muted); transition: background .15s, color .15s;
    background: none; border: none; font-family: inherit;
}
.qa-tab:hover { background: #f1f5f9; }
.qa-tab.active { color: var(--primary); background: #f0f7ff; }
.qa-tab .qa-n { font-weight: 400; opacity: .7; }
.qa-content.hidden { display: none; }
.qa-item { font-size: 13px; color: var(--text-main); border-bottom: 1px solid var(--border-color); line-height: 1.4; }
.qa-question {
    padding: 7px 0; cursor: pointer; display: flex; align-items: center; gap: 6px; user-select: none;
    width: 100%; background: none; border: none; text-align: left; font: inherit; color: inherit;
}
.qa-question:hover { color: var(--primary); }
.qa-question-open { cursor: default; }
.qa-question-open:hover { color: inherit; }
.qa-q-text { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.qa-author { font-size: 11px; color: var(--text-muted); flex: 0 0 auto; }
.qa-toggle-icon { font-size: 10px; transition: transform .15s ease; flex-shrink: 0; color: var(--text-muted); }
.qa-question[aria-expanded="true"] .qa-toggle-icon { transform: rotate(90deg); }
.qa-answer { padding: 0 0 7px 14px; font-size: 12px; color: var(--text-muted); display: block; }
.qa-answer[hidden] { display: none; }
.review-item { font-size: 13px; padding: 8px 0; border-bottom: 1px solid var(--border-color); }
.review-author { display: flex; align-items: center; gap: 6px; font-weight: 600; color: var(--text-main); margin-bottom: 3px; font-size: 12px; }
.review-favicon { width: 18px; height: 18px; border-radius: 3px; }
.review-date { color: var(--text-muted); font-weight: 400; font-size: 11px; margin-left: auto; }
.review-text { color: var(--text-muted); line-height: 1.4; overflow-wrap: anywhere; }

/* ===== фото-слайдер (оригинал §3.7, `card/slider`) ===== */

/* ‹ › СНАРУЖИ карточки в выдаче (36 px, −44 px от края, на высоте 195 px — середина кадра 240 + отступ),
   видны наведением; на странице лота — поверх кадра (ниже, в разделе страницы).
   ⭐CK K2 (A19): значения оригинала — `z-index:25`, задержка скрытия .5 с (курсор, ушедший к стрелке через
   зазор, не теряет её), наведение — `scale(1.08)` на белом, а не синий текст */
.slider-outside-bottom {
    position: absolute; top: 195px; z-index: 25;
    width: 36px; height: 36px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: rgba(255,255,255,.95); border: 1px solid var(--border-color);
    box-shadow: 0 2px 6px rgba(0,0,0,.12);
    font-size: 22px; line-height: 1; color: var(--text-main);
    cursor: pointer; padding: 0 0 2px; font-family: inherit;
    opacity: 0; pointer-events: none;
    transition: opacity .15s ease, transform .15s; transition-delay: .5s;
}
.slider-prev-out { left: -44px; }
.slider-next-out { right: -44px; }
.card-wrapper:hover > .slider-outside-bottom,
.card-wrapper:hover > .property-card:not(.kh-pp) .image-container > .slider-outside-bottom { opacity: 1; pointer-events: auto; transition-delay: 0s; }
.slider-outside-bottom:hover { background: #fff; transform: scale(1.08); }
.slider-outside-bottom:focus-visible { opacity: 1; pointer-events: auto; outline: 2px solid var(--primary); }
/* ⭐CK K2 (B3): на боковой панели (📰/📑) стрелок фото нет — листать там нечего */
.card-wrapper.kh-side .slider-outside-bottom { display: none; }
/* карточки вплотную (`.mkt-grid` без воздуха) — стрелки внутрь, поверх кадра */
.mkt-grid > .card-wrapper .slider-prev-out { left: 8px; }
.mkt-grid > .card-wrapper .slider-next-out { right: 8px; }
.mkt-grid > .card-wrapper .slider-outside-bottom { top: 102px; }
/* ⭐CK K2: у плитки без панелей (`flat`, `strip` — кадр с пропорцией) стрелки живут В КАДРЕ (`lotcard.js` кладёт
   их туда) и стоят по его середине — высота кадра у резиновой ячейки заранее не известна */
.image-container > .slider-outside-bottom { top: 50%; margin-top: -18px; }
.image-container > .slider-prev-out { left: 8px; }
.image-container > .slider-next-out { right: 8px; }

/* ⭐CK K2 (A8): ряд кнопок кадра оригинала — 30 × 30 с тенью, сам ряд мимо курсора (клик по кадру между
   кнопками открывает галерею); «📷 N» — по ширине числа */
.img-bottom-row {
    position: absolute; right: 8px; bottom: 8px; z-index: 10;
    display: flex; gap: 4px; pointer-events: none;
}
.img-bottom-row button {
    pointer-events: auto; width: 30px; height: 30px; padding: 0; border: none; border-radius: 6px;
    background: rgba(255,255,255,.9); font-size: 14px; line-height: 1;
    display: flex; align-items: center; justify-content: center;
    box-shadow: 0 2px 4px rgba(0,0,0,.1); transition: background .15s;
    cursor: pointer; font-family: inherit; color: var(--text-main);
}
.img-bottom-row button:hover { background: #fff; }
.img-bottom-row .photo-count-btn { font-size: 12px; gap: 2px; padding: 0 6px; width: auto; }
.img-bottom-row .kh-off { opacity: .3; cursor: default; }
.img-bottom-row .kh-map-btn { opacity: .9; }
.kh-slide-album {
    position: absolute; top: 8px; left: 8px; z-index: 9; max-width: 60%;
    background: rgba(0,0,0,.6); color: #fff; padding: 3px 8px; border-radius: 10px;
    font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    pointer-events: none;
}
/* бейджи стоят в том же углу — имя помещения уходит под них (у оригинала они накрывали друг друга) */
.image-container:has(.badges-top) .kh-slide-album { top: 44px; left: 12px; }
.kh-slide-album[hidden] { display: none; }
/* ⭐CK K2 (A9): подпись кадра — поля оригинала (6 × 10), справа место под ряд кнопок, только когда ряд есть */
.photo-caption {
    position: absolute; left: 0; right: 0; bottom: 0; z-index: 5;
    padding: 6px 10px;
    background: linear-gradient(transparent, rgba(0,0,0,.55));
    color: #fff; font-size: 11px; font-weight: 500; text-align: center;
    pointer-events: none;
}
.image-container:has(.img-bottom-row > button) .photo-caption { padding-right: 140px; padding-top: 14px; }
.photo-caption:empty { display: none; }
/* ⭐CK K2 (A6): режимы снимков на кадре — таблетки оригинала (`slider/module.js:229`), справа сверху под ❤ */
.kh-slide-modes {
    position: absolute; top: 56px; right: 8px; z-index: 6;
    display: flex; gap: 4px; flex-wrap: wrap; justify-content: flex-end; max-width: 70%;
}
.kh-mode-btn {
    padding: 3px 9px; border-radius: 12px; border: none; font-size: 12px; cursor: pointer;
    background: rgba(0,0,0,.55); color: #fff; font-family: inherit;
}
.kh-mode-btn.on { background: var(--primary, #2563eb); }
/* ⭐CK K2 (A7, B6, N7): кадр-ролик — постер или тёмная заглушка оригинала, ▶ 64 px по центру */
.kh-media-play {
    position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 6;
    width: 64px; height: 64px; border-radius: 50%; border: none;
    background: rgba(0,0,0,.6); color: #fff; font-size: 26px; line-height: 1; cursor: pointer;
    display: flex; align-items: center; justify-content: center; padding: 0 0 0 4px;
}
.kh-media-play[hidden] { display: none; }
.kh-media-play:hover { background: rgba(0,0,0,.75); }
.kh-media-ph {
    display: block; width: 100%; height: 100%;
    background: radial-gradient(circle at 50% 45%, #334155, #0f172a);
}

/* ===== попапы «Поделиться» и «Карта» (оригинал §3.11, §3.13) ===== */

.kh-popup {
    position: fixed; inset: 0; z-index: 1000;
    background: rgba(0,0,0,.7);
    display: flex; align-items: center; justify-content: center; padding: 16px;
}
.kh-popup-box {
    position: relative; background: #fff; border-radius: 16px;
    padding: 32px 28px 28px; max-height: 85vh; overflow: auto;
    box-shadow: 0 20px 60px rgba(0,0,0,.3);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
.kh-popup-x {
    position: absolute; top: 10px; right: 10px;
    width: 34px; height: 34px; border-radius: 50%;
    border: 1px solid var(--border-color); background: #fff; cursor: pointer;
    font-size: 14px; line-height: 1; color: var(--text-muted);
}
.kh-popup-x:hover { color: var(--text-main); background: #f8fafc; }
/* ⭐CK K2 (B9): пока открыт попап, страница под ним не прокручивается (`body.no-scroll` оригинала) */
body.kh-no-scroll { overflow: hidden; }

/* ⭐CK K2 (C1): «Поделиться» — попап QR оригинала дословно (`contacts/module.js:189–259`): QR 240, подпись
   «ПОДЕЛИТЬСЯ», круглые значки сетей 44 px с рамкой и тенью (значок сайта — `/api/icon/<домен>`), «Открыть
   страницу» синей кнопкой как `.action-btn`, «📋 Скопировать ссылку» белой → «✅ Скопировано!» зелёной на 2 с */
.kh-qr-pop { width: 380px; max-width: 90vw; text-align: center; }
.qr-popup-container { display: flex; flex-direction: column; align-items: stretch; text-align: center; }
.qr-popup-image { display: block; width: 240px; height: 240px; margin: 0 auto 16px; border-radius: 12px; background: #f3f4f6; }
.qr-share-label { font-size: 13px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: .5px; margin-bottom: 10px; }
.qr-share-row { display: flex; gap: 10px; justify-content: center; margin-bottom: 12px; }
.qr-share-btn {
    width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--border-color); background: #fff;
    display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0;
    box-shadow: 0 1px 3px rgba(0,0,0,.06); transition: background .15s, transform .15s; color: var(--text-main);
}
.qr-share-btn:hover { background: #f0f4ff; transform: scale(1.08); }
.qr-share-btn img { width: 24px; height: 24px; border-radius: 4px; }
.qr-open-page {
    display: block; width: 100%; padding: 12px; border-radius: 8px; border: none;
    background: var(--primary); color: #fff; font-size: 15px; font-weight: 600; text-align: center;
    text-decoration: none; cursor: pointer; font-family: inherit;
}
.qr-open-page:hover { background: var(--primary-hover); color: #fff; }
.qr-copy-link {
    width: 100%; padding: 10px; border: 1px solid var(--border-color); border-radius: 8px; background: #fff;
    font-size: 13px; font-weight: 500; color: var(--text-main); cursor: pointer; margin-top: 14px; font-family: inherit;
}
.qr-copy-link:hover { background: #f8fafc; }
.qr-copy-link.copied { background: #f0fdf4; border-color: #86efac; color: #16a34a; }

/* ⭐CK K2 (C2): карта — тулбар оригинала: «Yandex | Google», справа «Открыть в новой вкладке ↗» */
.kh-map-pop { width: min(92vw, 900px); padding: 20px; }
.kh-map-head { display: flex; align-items: baseline; gap: 8px; margin: 0 40px 10px 0; font-size: 14px; flex-wrap: wrap; }
.kh-map-head span { color: var(--text-muted); }
.kh-map-toolbar { display: flex; align-items: center; gap: 6px; margin-bottom: 10px; flex-wrap: wrap; }
.kh-map-prov {
    border: 1px solid #d0d5dd; background: #fff; border-radius: 8px; padding: 4px 10px; font-size: 13px;
    cursor: pointer; font-family: inherit; color: var(--text-main);
}
.kh-map-prov.on { background: #2563eb; border-color: #2563eb; color: #fff; }
.kh-map-ext { margin-left: auto; font-size: 13px; color: #2563eb; text-decoration: none; }
.kh-map-ext:hover { text-decoration: underline; }
.kh-map-frame { display: block; width: 100%; height: 60vh; min-height: 240px; border: 0; border-radius: 10px; background: #f2f4f7; }
@media (max-width: 480px) {
    .kh-qr-pop { padding: 24px 20px 20px; }
    .qr-popup-image { width: 180px; height: 180px; }
}

/* ===== «Похожие» и прочие сетки карточек с воздухом (оригинал §2, §4 — Б8) ===== */

/* ⚠ ТОТ ЖЕ ВОЗДУХ, ЧТО У ВИТРИНЫ (`.bd-air` в THEMED_CSS), но без витрины: лист `board-ui` на
   странице лота не подключается, а «Похожие» обязаны стоять по 380 px с зазором 48 × 64 px. */
.kh-similar { margin-top: 48px; }
.kh-similar-h { font-size: 28px; font-weight: 700; text-align: center; margin: 0 0 24px; }
/* полоса «Похожих» шире страницы лота (1240): три карточки по 380 с рельсами — это 1480 оригинала */
.kh-similar:has(.kh-air) {
    width: min(1480px, calc(100vw - 32px)); position: relative; left: 50%; transform: translateX(-50%);
}
@media (min-width: 901px) {
    .mkt-grid.kh-air {
        display: flex; flex-wrap: wrap; justify-content: center; align-items: flex-start;
        gap: 56px 104px; padding: 0 56px; margin: 0 auto; box-sizing: border-box; overflow-x: clip;
    }
    .mkt-grid.kh-air > .card-wrapper { flex: 0 1 380px; width: 380px; max-width: 100%; }
    .mkt-grid.kh-air > .card-wrapper::before, .mkt-grid.kh-air > .card-wrapper::after { display: block; }
    .mkt-grid.kh-air > .card-wrapper .hover-actions,
    .mkt-grid.kh-air > .card-wrapper .hover-nav-right,
    .mkt-grid.kh-air > .card-wrapper .hover-del { left: calc(100% + 8px); right: auto; }
    .mkt-grid.kh-air > .card-wrapper .hover-actions-left,
    .mkt-grid.kh-air > .card-wrapper .hover-nav-left { right: calc(100% + 8px); left: auto; }
    .mkt-grid.kh-air > .card-wrapper .slider-prev-out,
    .mkt-grid.bd-air > .card-wrapper .slider-prev-out { left: -44px; }
    .mkt-grid.kh-air > .card-wrapper .slider-next-out,
    .mkt-grid.bd-air > .card-wrapper .slider-next-out { right: -44px; }
    .mkt-grid.kh-air > .card-wrapper .slider-outside-bottom,
    .mkt-grid.bd-air > .card-wrapper .slider-outside-bottom { top: 195px; }
    /* рельс снаружи — на высоте кадра, как у оригинала (top 12), а не ниже ❤ */
    .mkt-grid.kh-air > .card-wrapper .hover-actions,
    .mkt-grid.bd-air > .card-wrapper .hover-actions { top: 12px; }
}
@media (max-width: 900px) {
    .mkt-grid.kh-air { display: grid; gap: 36px 32px; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); }
}

/* ===== ⭐CK K2 (§1.7): карусель главной оригинала (`homeslider.js`) — полоса «Карусель со стрелками» =====
 * Механика ленты у главной своя (`.kh-lc-track`, стрелки `[data-scr]`, `home.ts`); здесь — вид карточек в ней по
 * оригиналу: карточка ИНЕРТНА (`.kh-hs-inert`) — рельсы, листание панелей, стрелки фото и удаление скрыты,
 * «Связаться» и дата курса тоже (свёрнутый вид), подъём под курсором мягче, чем в каталоге. */
.kh-lc-track > .card-wrapper .hover-actions, .kh-lc-track > .card-wrapper .hover-actions-left,
.kh-lc-track > .card-wrapper .hover-nav-right, .kh-lc-track > .card-wrapper .hover-nav-left,
.kh-lc-track > .card-wrapper .hover-del, .kh-lc-track > .card-wrapper .slider-outside-bottom {
    opacity: 0 !important; pointer-events: none !important;
}
.kh-lc-track > .card-wrapper .action-btn, .kh-lc-track > .card-wrapper .rate-attribution { display: none; }
.kh-lc-track > .card-wrapper:hover > .property-card {
    transform: translateY(-4px);
    box-shadow: 0 14px 22px -8px rgba(0,0,0,.16), 0 4px 8px -2px rgba(0,0,0,.07);
}

/* ===== ⭐CK K2-ревью (§1.7): вид `homeslider` блока `lst` — карусель главной оригинала дословно (`site.css:96–205`) =====
 * Лента по 3 · 2 · 1 (`--kh-cols`), зазор 48 (на телефоне 20), стрелки 46 px на высоте кадра (top 154), «⏸» 34 px справа
 * сверху, «Все объекты» — синей таблеткой под лентой. Карточка ИНЕРТНА: вуаль `.kh-hs-cardveil` поверх (вся карточка —
 * ссылка), рельсы, листание панелей, стрелки фото, удаление, «Связаться» и дата курса скрыты, свёрнутый вид всегда;
 * «Поделиться» и «Смотреть объект» — над вуалью. Поведение — `/market/homeslider.js`. */
.kh-home-slider { position: relative; padding: 0 56px; max-width: 1480px; width: 100%; box-sizing: border-box; margin: 0 auto; }
.kh-hs-track {
    --kh-cols: 3; --kh-gap: 48px;
    position: relative; display: flex; gap: var(--kh-gap); overflow-x: auto; padding: 34px 8px 40px;
    scrollbar-width: none; align-items: flex-start; overscroll-behavior-x: contain;
}
.kh-hs-track::-webkit-scrollbar { display: none; }
.kh-hs-cell { position: relative; flex: 0 0 calc((100% - (var(--kh-cols) - 1) * var(--kh-gap)) / var(--kh-cols)); min-width: 0; }
.kh-hs-cell > .card-wrapper { width: 100%; }
.kh-hs-cell > .card-wrapper > .property-card { width: 100%; }
.kh-hs-cell > .card-wrapper::before, .kh-hs-cell > .card-wrapper::after { display: none; }
.kh-hs-cardveil { position: absolute; inset: 0; z-index: 50; cursor: pointer; }
.kh-hs-inert .hover-actions, .kh-hs-inert .hover-actions-left, .kh-hs-inert .hover-nav-right, .kh-hs-inert .hover-nav-left,
.kh-hs-inert .hover-del, .kh-hs-inert .slider-outside-bottom { opacity: 0 !important; pointer-events: none !important; }
.kh-hs-inert .action-btn, .kh-hs-inert .rate-attribution { display: none; }
.kh-hs-inert .kh-title-share, .kh-hs-inert .kh-view-object { position: relative; z-index: 55; pointer-events: auto; }
.kh-hs-inert:hover > .card-wrapper > .property-card {
    transform: translateY(-4px);
    box-shadow: 0 14px 22px -8px rgba(0,0,0,0.16), 0 4px 8px -2px rgba(0,0,0,0.07);
}
.kh-hs-arrow {
    position: absolute; top: 154px; transform: translateY(-50%); z-index: 60;
    width: 46px; height: 46px; border-radius: 50%; border: 1px solid var(--border-color, #e5e7eb); background: #fff;
    font-size: 22px; line-height: 1; cursor: pointer; color: var(--text-main, #1c2330);
    box-shadow: 0 6px 16px rgba(0,0,0,0.14); display: flex; align-items: center; justify-content: center;
}
.kh-hs-prev { left: 4px; }
.kh-hs-next { right: 4px; }
.kh-hs-arrow:hover { background: #f0f4ff; }
.kh-hs-arrow:focus-visible, .kh-hs-freeze:focus-visible, .kh-hs-all:focus-visible { outline: 2px solid var(--primary, #2563eb); outline-offset: 2px; }
.kh-hs-freeze {
    position: absolute; top: 0; right: 56px; z-index: 60; width: 34px; height: 34px; border-radius: 50%;
    border: 1px solid var(--border-color, #e5e7eb); background: #fff; cursor: pointer; font-size: 14px;
    display: flex; align-items: center; justify-content: center; box-shadow: 0 2px 6px rgba(0,0,0,.08);
}
.kh-hs-freeze[aria-pressed="true"] { background: #f0f4ff; color: var(--primary, #2563eb); }
.kh-hs-all-row { text-align: center; margin: 0 0 8px; }
.kh-hs-all {
    display: inline-block; padding: 9px 22px; border-radius: 8px; background: var(--primary, #2563eb); color: #fff;
    font-size: 14px; font-weight: 600; text-decoration: none;
}
.kh-hs-all:hover { filter: brightness(1.08); }
@media (max-width: 1100px) { .kh-hs-track { --kh-cols: 2; } }
@media (max-width: 700px) { .kh-hs-track { --kh-cols: 1; --kh-gap: 20px; } }
@media (max-width: 640px) {
    .kh-home-slider { padding: 0 12px; }
    .kh-hs-track { padding: 16px 8px 20px; }
    .kh-hs-arrow { display: none; }
    .kh-hs-freeze { right: 12px; }
}
@media (prefers-reduced-motion: reduce) {
    .kh-hs-inert:hover > .card-wrapper > .property-card { transform: none; }
}

/* ===== страница лота: ряды оригинала (`map2-oldsite-delta` §2.2, `.kh-prop-page`) ПО БЛОКАМ ===== */

/* ⚠ ⭐CK K2: РЯДЫ — НЕ КОД, А ПОСЕВ. Каждый блок семейства рисует свой кусок (`lotCardPageKit`), место ему дают
   плоскости дизайна `lot`, а вид рядов оригинала держат правила ниже, привязанные к КУСКАМ, а не к позиции:
     `.kh-pp-row1`  — кадр 1.55fr + сетка снимков 1fr;
     `.kh-ppi`      — кусок полосы «инфо»: одинокий — свой бокс, подряд идущие — один бокс, а в полосе бокс держит
                      сама полоса (правая колонка — к правому краю, как `.kh-pp-info-side`);
     `.kh-pp-row2`  — теги + «Поделиться»;  `.kh-pp-col` — бокс ряда 3;  `.kh-pp-map` — карта `#map`.
   Корень карточки обнимает тело страницы, поэтому свойства «карточки» (рамка, тень, 380 px) он сбрасывает. */

/* ⚠ ШИРИНА СТРАНИЦЫ — 1240 (оригинал), а не портальные 900: страница узнаёт о карточке
   ПО ТОМУ, ЧТО НА НЕЙ НАРИСОВАНО (тот же приём, что у витрины с воздухом и журнальной темы) */
.kh-portal:has(.kh-prop-page) { max-width: 1272px; }
.kh-lot-h1 { font-size: 26px; line-height: 1.25; margin: 6px 0 14px; }

.kh-prop-page { display: block; width: 100%; }
.kh-prop-page::before, .kh-prop-page::after { display: none !important; }
.kh-prop-page > .property-card.kh-pp {
    width: 100%; background: transparent; border: none; box-shadow: none; border-radius: 0; overflow: visible;
}
.kh-prop-page:hover > .property-card.kh-pp { transform: none; box-shadow: none; }
.kh-prop-page > .hover-nav-right, .kh-prop-page > .hover-nav-left { display: none !important; }
/* рельс языков и удаление на странице видны без наведения — искать их наведением там негде */
.kh-prop-page > .hover-actions, .kh-pp-row1 > .hover-actions, .kh-prop-page > .hover-del { opacity: 1; pointer-events: auto; transition: none; }
.kh-prop-page > .hover-actions-left.show { opacity: 1; pointer-events: auto; transition: none; }
.kh-pp-col h4, .kh-ppi h4 { font-size: 16px; font-weight: 700; color: var(--text-main); margin: 0 0 12px; }
.kh-pp-col h4 ~ h4, .kh-ppi h4 ~ h4 { margin-top: 18px; }

/* ряд 1: слайдер и сетка всех снимков рядом; рельс языков — справа от ряда */
.kh-pp-row1 { position: relative; display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 16px; align-items: stretch; margin-top: 8px; }
.kh-pp-row1:not(:has(.kh-pp-gallery)) { grid-template-columns: 1fr; }
.kh-pp-row1 > .hover-actions { left: calc(100% + 8px); top: 0; transform: none; }
.kh-pp-row1 .image-container { height: clamp(320px, 42vw, 560px); border-radius: 16px; overflow: hidden; }
.kh-pp-row1 .image-container > .slider-outside-bottom {
    opacity: 1; pointer-events: auto; transition: none; width: 44px; height: 44px; font-size: 24px;
    top: 50%; margin-top: 0; transform: translateY(-50%);
}
.kh-pp-row1 .image-container > .slider-outside-bottom:hover { transform: translateY(-50%) scale(1.06); }
.kh-pp-row1 .image-container > .slider-prev-out { left: 14px; }
.kh-pp-row1 .image-container > .slider-next-out { right: 14px; left: auto; }
/* ⭐PROD2 UI-A (глаза владельца: «большая пустота под миниатюрами»): бокс снимков — ПО СВОЕМУ СОДЕРЖИМОМУ (не
   тянется до высоты кадра: 9 миниатюр по 76 px занимали треть белого бокса высотой 560), но не выше кадра — дальше
   листается внутри; миниатюры крупнее (от 110 px — три в ряд у 1440), чтобы сетка читалась, а не рябила */
.kh-pp-gallery {
    background: #fff; border: 1px solid var(--border-color); border-radius: 16px; padding: 12px 14px;
    display: flex; flex-direction: column; min-height: 0; min-width: 0;
    align-self: start; max-height: clamp(320px, 42vw, 560px); box-sizing: border-box;
}
.kh-gal-head { font-size: 13px; color: var(--text-muted); margin-bottom: 10px; display: flex; align-items: center; gap: 6px; }
.kh-gal-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 8px;
    overflow-y: auto; min-height: 0; flex: 0 1 auto; align-content: start;
}
.kh-gal-cell {
    position: relative; aspect-ratio: 4 / 3; padding: 0; border-radius: 10px; overflow: hidden;
    border: 2px solid transparent; background: #f1f5f9; cursor: pointer;
}
.kh-gal-cell img { width: 100%; height: 100%; object-fit: cover; display: block; }
.kh-gal-cell.active { border-color: var(--primary); }
.kh-gal-cell:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
.kh-gal-cap {
    position: absolute; left: 0; right: 0; bottom: 0; padding: 2px 5px;
    background: rgba(0,0,0,.5); color: #fff; font-size: 10px; line-height: 1.3;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.kh-gal-play {
    position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
    width: 28px; height: 28px; border-radius: 50%; background: rgba(0,0,0,.6); color: #fff;
    display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 400;
}
.kh-gal-cell:not(:has(img)) { background: radial-gradient(circle at 50% 45%, #334155, #0f172a); }

/* «инфо»: слева заголовок · адрес · спеки, справа цена · статус · «Связаться» (OLD `.kh-pp-info`) */
.kh-prop-page .kh-ppi {
    background: #fff; border: 1px solid var(--border-color); border-radius: 16px;
    padding: 18px 22px; margin-top: 16px; min-width: 0;
}
/* подряд идущие куски — один бокс (правило соседства, как `.mkt-seller + .mkt-seller`) */
.kh-prop-page .kh-ppi:has(+ .kh-ppi) { border-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; padding-bottom: 4px; }
.kh-prop-page .kh-ppi + .kh-ppi { margin-top: 0; border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; padding-top: 6px; }
/* в полосе бокс держит полоса, куски — его колонки */
.kh-prop-page .kh-plane-in:has(> .kh-lane > .kh-ppi) {
    background: #fff; border: 1px solid var(--border-color); border-radius: 16px;
    padding: 18px 22px; margin-top: 16px; gap: 14px 24px; max-width: none;
}
.kh-prop-page .kh-lane > .kh-ppi { background: none; border: 0; border-radius: 0; padding: 0; margin: 0; }
.kh-prop-page .kh-lane > .kh-ppi + .kh-ppi { margin-top: 10px; padding: 0; }
.kh-prop-page .kh-lane:last-child:not(:first-child):has(> .kh-ppi) { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; text-align: right; }
.kh-prop-page .kh-lane:last-child:not(:first-child) > .kh-ppi + .kh-ppi { margin-top: 0; }
.kh-ppi .property-title, .kh-ppi .property-title a { font-size: 24px; white-space: normal; line-height: 1.25; margin: 0; }
.kh-ppi .property-title-row { align-items: center; }
.kh-ppi .property-address { font-size: 15px; margin: 4px 0 0; }
.kh-ppi .specs-grid { display: flex; flex-wrap: wrap; gap: 10px 22px; margin: 14px 0 0; padding: 0; border: none; }
.kh-ppi .spec-item { align-items: flex-start; text-align: left; }
.kh-ppi .spec-value { font-size: 16px; }
.kh-ppi .price-row { margin: 0; }
.kh-ppi .price-main { font-size: 30px; }
.kh-ppi .price-sqm { font-size: 15px; }
.kh-prop-page .kh-lane:last-child:not(:first-child) > .kh-ppi .price-row { align-items: flex-end; }
.kh-prop-page .kh-lane:last-child:not(:first-child) > .kh-ppi .price-line { justify-content: flex-end; }
.kh-ppi .rate-attribution { margin: 0; }
.kh-ppi .availability-btn { width: auto; margin: 0; }
.kh-ppi .action-btn { width: auto; max-width: none; font-size: 15px; padding: 12px 22px; }
.kh-ppi .kh-title-mgr { margin: 4px 0 0; }
.kh-ppi .kh-title-badges { margin: 8px 0 0; }

/* ряд 2: теги без обрезки | «Поделиться» (в рамке, как оригинал) */
.kh-pp-row2 {
    display: flex; align-items: center; justify-content: space-between; gap: 14px;
    background: #fff; border: 1px solid var(--border-color); border-radius: 16px; padding: 14px 20px; margin-top: 16px;
}
.kh-pp-row2 .tags-row { flex: 1; margin: 0; }
.kh-pp-r2-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.kh-pp-share {
    display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
    background: #f4f5f7; border: 1px solid var(--border-color); border-radius: 10px; padding: 9px 15px;
    font-size: 14px; font-weight: 600; color: var(--text-main); cursor: pointer; font-family: inherit;
}
.kh-pp-share:hover { background: #e9eaee; }
.kh-pp-share svg { width: 16px; height: 16px; }
.kh-pp-r2-actions .hover-actions-left { position: static; flex-direction: row; gap: 6px; opacity: 1 !important; pointer-events: auto !important; transition: none; }

/* ряд 3: 📑 Описание | 📊 Характеристики | 📰 Статьи — по боксу на блок (OLD `.kh-pp-col`) */
.kh-prop-page .kh-pp-col {
    background: #fff; border: 1px solid var(--border-color); border-radius: 16px;
    padding: 18px 20px; min-width: 0; margin-top: 16px;
}
.kh-prop-page .kh-lane > .kh-pp-col { margin-top: 0; }
.kh-prop-page .kh-plane-in:has(> .kh-lane > .kh-pp-col) { gap: 16px; margin-top: 16px; max-width: none; }
.kh-pp-col h4 { font-size: 16px; font-weight: 700; margin: 0 0 12px; }
.kh-pp-col-desc .desc-section p, .kh-pp-col-desc .desc-section li { font-size: 15px; line-height: 1.65; }
.kh-pp-col-arts .kh-articles { display: flex; flex-direction: column; gap: 2px; }

/* ряд 4: разговор вкладками в одном боксе (`lot.talk`, вид `tabs`) — вкладки оригинала с подчёркиванием */
.kh-prop-page .tk-box { background: #fff; border: 1px solid var(--border-color); border-radius: 16px; padding: 0 0 18px; margin: 16px 0 0; overflow: hidden; }
.kh-prop-page .tk-box > h2 { font-size: 16px; margin: 18px 24px 0; }
.kh-prop-page .tk-box > .tk-list, .kh-prop-page .tk-box > .tk-pane, .kh-prop-page .tk-box > .tk-form,
.kh-prop-page .tk-box > .tk-queue { margin-left: 24px; margin-right: 24px; }
.kh-prop-page .tk-box > .tk-list, .kh-prop-page .tk-box > .tk-pane { padding-top: 18px; }
.kh-prop-page .tk-tabs {
    display: flex; gap: 2px; border-bottom: 1px solid var(--border-color); padding: 0 12px; margin: 0;
    overflow-x: auto; flex-wrap: nowrap;
}
.kh-prop-page .tk-tab {
    appearance: none; background: none; border: none; border-radius: 0; cursor: pointer; white-space: nowrap;
    padding: 14px 16px; font-size: 14px; color: var(--text-muted); font-weight: 600; font-family: inherit;
    border-bottom: 2px solid transparent; margin-bottom: -1px;
}
.kh-prop-page .tk-tab.on { color: var(--primary); border-bottom-color: var(--primary); background: none; }
.kh-prop-page .tk-tab .tk-n { opacity: .55; font-weight: 400; margin-left: 2px; font-size: inherit; }

/* карта дома `#map` — мини-карта своими плитками; без точки — адрес и карта поиском по нажатию */
.kh-pp-map {
    background: #fff; border: 1px solid var(--border-color); border-radius: 16px; padding: 14px 16px;
    margin-top: 16px; scroll-margin-top: 80px;
}
.kh-pp-map .mkt-addr-map { display: block; }
.kh-map-ask-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.kh-map-ask-addr { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; color: var(--text-main); flex: 1 1 auto; min-width: 0; }
.kh-map-load {
    border: 1px solid var(--primary); background: #fff; color: var(--primary); border-radius: 8px;
    padding: 7px 14px; font-size: 14px; font-weight: 500; cursor: pointer; font-family: inherit;
}
.kh-map-load:hover { background: var(--primary); color: #fff; }
.kh-map-nogeo { margin: 8px 0 0; font-size: 12px; }
.kh-map-slot:not(:empty) { margin-top: 12px; }
.kh-map-slot iframe { display: block; width: 100%; height: 420px; border: 0; border-radius: 12px; background: #f2f4f7; }

/* ⚠ ⭐PROD2 UI-A: ПОРОГ — 1360, А НЕ 1280. Страница 1240 + столбик рельса 48 px с каждой стороны = 1336: при 1280 (и
   до 1359) правый рельс вылезал за окно (горизонтальная прокрутка страницы, замер 1308 > 1280), а левый — уходил за
   левый край (x = −28), и ✏️ органов правки было не достать. Ниже порога правый рельс — строкой таблеток в шапке
   сетки снимков (справа от «Фото · N»: там пусто, а над кадром — ❤ и подпись помещения), левый — нижней панелью
   (ниже, «нижняя панель»); 🗑 страницы — в ряду «Поделиться» (`lotcard.edit.js` `_place`). */
@media (min-width: 821px) and (max-width: 1359px) {
    .kh-pp-row1:has(> .kh-pp-gallery) > .hover-actions {
        left: auto; right: 14px; top: 9px; flex-direction: row; flex-wrap: wrap; justify-content: flex-end; gap: 6px;
        max-width: calc(100% / 2.55 - 90px);
    }
    .kh-pp-row1:has(> .kh-pp-gallery) > .hover-actions > .hover-btn {
        width: auto; min-width: 36px; height: 30px; padding: 0 10px; border-radius: 999px; font-size: 12px; box-shadow: none;
    }
    .kh-pp-row1:has(> .kh-pp-gallery) > .hover-actions > .hover-btn:hover { transform: none; }
    /* на /he /ar ряд 1 зеркальный (сетка снимков слева) — и строка таблеток к её левому верху, а не на ❤ кадра */
    [dir="rtl"] .kh-pp-row1:has(> .kh-pp-gallery) > .hover-actions { right: auto; left: 14px; justify-content: flex-start; }
    .kh-pp-row1:has(> .hover-actions) .kh-gal-head { min-height: 30px; margin-bottom: 8px; }
    /* без сетки снимков кадр во всю ширину — столбик под ❤ */
    .kh-pp-row1:not(:has(> .kh-pp-gallery)) > .hover-actions { left: auto; right: 12px; top: 56px; }
}
@media (max-width: 820px) {
    .kh-pp-row1 { grid-template-columns: 1fr; }
    .kh-pp-gallery { max-height: 280px; }
    .kh-gal-grid { max-height: 230px; grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); }
    .kh-prop-page .kh-lane:last-child:not(:first-child):has(> .kh-ppi) { align-items: stretch; text-align: left; }
    .kh-prop-page .kh-lane:last-child:not(:first-child) > .kh-ppi .price-row { align-items: flex-start; }
    .kh-prop-page .kh-lane:last-child:not(:first-child) > .kh-ppi .price-line { justify-content: flex-start; }
    .kh-ppi .action-btn { width: 100%; }
}
@media (max-width: 640px) {
    .kh-pp-row1 .image-container { height: clamp(240px, 64vw, 420px); }
    .kh-ppi .price-main { font-size: 26px; }
    .kh-ppi .property-title, .kh-ppi .property-title a { font-size: 21px; }
    .kh-prop-page .kh-ppi, .kh-prop-page .kh-plane-in:has(> .kh-lane > .kh-ppi), .kh-pp-row2, .kh-prop-page .kh-pp-col, .kh-pp-map { padding: 16px; }
    .kh-prop-page .tk-box > .tk-list, .kh-prop-page .tk-box > .tk-pane, .kh-prop-page .tk-box > .tk-form { margin-left: 16px; margin-right: 16px; }
    .kh-pp-row2 { flex-wrap: wrap; }
    .kh-map-slot iframe { height: 300px; }
}

/* ===== адаптив ===== */

@media (max-width: 480px) {
    .hover-actions { left: 50%; top: calc(100% + 8px); transform: translateX(-50%); flex-direction: row; gap: 8px; }
    .hover-actions-left { display: none; }
    /* узкого правого рельса нет — удаление в нижний левый угол карточки */
    .hover-del { left: 6px; right: auto; top: auto; bottom: 8px; }
    .card-wrapper:hover > .property-card { transform: none; }
    /* ⭐CK K2 (B4): стрелок фото на телефоне нет — кадр листается пальцем (свайп), а стрелки снаружи
       карточки вылезали бы за край экрана; на странице лота стрелки внутри кадра остаются */
    .card-wrapper:not(.kh-prop-page) .slider-outside-bottom { display: none !important; }
    .card-content { padding: 16px; }
    .property-card.lay-card .card-panel.panel-left, .property-card.lay-card .card-panel.panel-right { padding: 18px 16px 60px; }
}
@media (max-width: 420px) {
    .property-card { width: 100%; }
    /* одиночная карточка (не в сетке) — по ширине экрана с полями оригинала (`calc(100vw - 40px)`) */
    .card-wrapper:not(.kh-prop-page):not(.mkt-grid > .card-wrapper) { display: block; width: 100%; }
}
/* сенсорный экран: наведения не бывает — рельсы видны сразу и перенесены в углы карточки */
@media (hover: none) {
    .card-wrapper .hover-actions, .card-wrapper .hover-actions-left.show {
        opacity: 1; pointer-events: auto; transition: none;
    }
    .card-wrapper .hover-actions-left.show { right: auto; left: 6px; top: 54px; }
    .card-wrapper .hover-actions { left: auto; right: 6px; top: 54px; }
    .card-wrapper .hover-del { opacity: 1; pointer-events: auto; transition: none; left: 6px; right: auto; top: auto; bottom: 8px; }
}

/* ===== ⭐CK K7 (V3): рельс на телефоне — СТРОКОЙ ПОД КАДРОМ, а не поверх снимка =====
 * Три правила выше (≤480 — строкой со сдвигом на половину ширины, `hover: none` — к правому краю, `.mkt-grid` — ниже ❤)
 * складывались в ряд RU · EN · GE · ✏️ ПОСЕРЕДИНЕ КАДРА плитки, а на странице лота — столбик поверх снимка (дефект V3
 * глаз K7). У оригинала на телефоне рельса поверх снимка не было. Теперь на узком экране рельс — компактная строка
 * таблеток под кадром: у плитки узел переносит `lotcard.js` (`_railPlace`, класс `kh-rail-row`: тело карточки режет
 * всё, что снаружи, — стилем туда не попасть), на странице лота — стиль ниже (ряд 1 — сетка, рельс встаёт между
 * кадром и миниатюрами через `order`). ✏️ правящего живёт в том же узле — и остаётся под рукой.
 * ⚠ Правила стоят ПОСЛЕ адаптива выше: при равной силе селектора побеждает поздний. */
@media (max-width: 480px) {
    /* плитка до переноса (скрипт ещё не дошёл) — рельс спрятан, иначе мелькнул бы поверх кадра */
    .card-wrapper:not(.kh-prop-page) > .hover-actions { display: none; }
}
/* ⭐PROD2 UI-A: страница лота — строкой между кадром и снимками уже с 820 (ряд 1 там в одну колонку): столбиком
   поверх кадра рельс накрывал ❤ и правую стрелку фото, а в правке (RU · EN · GE · 💾) — ещё и полкадра */
@media (max-width: 820px) {
    .card-wrapper .kh-pp-row1 > .hover-actions {
        position: static; order: 1; transform: none; opacity: 1; pointer-events: auto; transition: none;
        flex-direction: row; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 6px; margin: -6px 0;
    }
    .card-wrapper .kh-pp-row1 > .hover-actions:empty { display: none; }
    .kh-pp-row1 > .kh-pp-gallery { order: 2; }
    .card-wrapper .kh-pp-row1 > .hover-actions > .hover-btn {
        width: auto; min-width: 38px; height: 30px; padding: 0 10px; border-radius: 999px; font-size: 12px; box-shadow: none;
    }
    .card-wrapper .kh-pp-row1 > .hover-actions > .hover-btn:hover { transform: none; }
}
/* строка в теле плитки — пока узел несёт класс (его снимает тот же скрипт шире 480) */
.card-wrapper .property-card .hover-actions.kh-rail-row {
    position: static; transform: none; opacity: 1; pointer-events: auto; transition: none; z-index: auto;
    display: flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-end; align-items: center;
    gap: 6px; margin: 0; padding: 10px 16px 0;
}
.card-wrapper .property-card .hover-actions.kh-rail-row:empty { display: none; }
.card-wrapper .property-card .hover-actions.kh-rail-row > .hover-btn {
    width: auto; min-width: 38px; height: 30px; padding: 0 10px; border-radius: 999px; font-size: 12px; box-shadow: none;
}
.card-wrapper .property-card .hover-actions.kh-rail-row > .hover-btn:hover { transform: none; }
/* ⚠ Вторая защита карусели главной (повтор K7): скрипт рельс инертных карточек не переносит (`_railPlace`,
   `RAIL_INERT`), но если строка туда всё же попала — она НЕ РИСУЕТСЯ вовсе. Невидимая (`opacity: 0 !important` правил
   ленты) строка занимала бы 40 px между кадром и тегами. Сила селектора — та же, что у строки выше (4 класса), и
   правило стоит позже — побеждает. */
.kh-lc-track > .card-wrapper .hover-actions.kh-rail-row,
.kh-hs-inert .property-card .hover-actions.kh-rail-row { display: none; }

/* ===== ⭐PROD2 W1 (IMPL_PROD2 §5.2): ЛЕВЫЙ РЕЛЬС ПРАВКИ ПО НАВЕДЕНИЮ — И В ПРОСМОТРЕ =====
 * Поле `ed.rail.show` (`data-ed-show`): `hover` — рельс получает `.show` и в просмотре, а виден он, как правый рельс с
 * ✏️, по наведению (правило `.card-wrapper:hover > .hover-actions-left.show` выше; на касании — сразу, `hover: none`);
 * `always` — виден без наведения; `edit` — как в оригинале, только после ✏️. Классы ставит `lotcard.edit.js` (`sync`).
 * На телефоне (≤480) в просмотре рельс стоит ПЕРВЫМ в строке таблеток под кадром (переносит `_railHome`): правило ≤480
 * прятало левый рельс совсем, и смотрящий с одними бронями не видел 📅 никогда. В правке — нижняя панель
 * (`lotcard.manager.css`). ⚠ Сила селекторов строки (3–4 класса) выше правила ≤480 `.hover-actions-left {display:none}`. */
.card-wrapper > .hover-actions-left.kh-rail-always.show { opacity: 1; pointer-events: auto; transition-delay: 0s; }
.card-wrapper .hover-actions > .kh-ed-rail.show {
    position: static; display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 6px;
    opacity: 1; pointer-events: auto; transform: none; transition: none; z-index: auto; margin-right: auto;
}
.card-wrapper .hover-actions > .kh-ed-rail.show > .hover-btn {
    width: auto; min-width: 38px; height: 30px; padding: 0 10px; border-radius: 999px; font-size: 12px; box-shadow: none;
}
.card-wrapper .hover-actions > .kh-ed-rail.show > .hover-btn:hover { transform: none; }
.kh-lc-track .hover-actions-left, .kh-hs-inert .hover-actions-left { display: none; }
/* столбик рельса (40 px кнопка + 6 px зазор на каждую; посев — 7) длиннее кадра: стрелка «←» панелей уходит под
   него, а стрелка «‹» фото — внутрь кадра (как у карточек вплотную, `.mkt-grid`), иначе обе ложились на 💰 и 📄 */
.card-wrapper.kh-rail-on > .hover-nav-left { top: calc(12px + var(--kh-rail-n, 7) * 46px + 4px); transform: none; }
/* ⚠ сила 0,4,0 — как у `.mkt-grid.kh-air > .card-wrapper .slider-prev-out` (витрина с воздухом), и правило ниже — побеждает */
.card-wrapper.kh-rail-on > .slider-prev-out.slider-outside-bottom { left: 8px; }

/* ===== ⭐PROD2 UI-A: НИЖНЯЯ ПАНЕЛЬ ЛЕВОГО РЕЛЬСА — где столбику за карточкой нет места =====
 * Столбик 7 кнопок (362 px) за левым краем страницы лота умещается только от 1360 (страница 1240 + 48 + 48): уже при
 * 1280 он стоял на x = −28, за краем окна. Ниже порога рельс — плавающая панель снизу слева (не по центру: справа
 * внизу живёт круглая кнопка чата), одной строкой, с прокруткой, если органов больше, чем места. Плитки каталога
 * получают ту же панель в правке на узком экране (`lotcard.manager.css`). Тело страницы приподнимается на высоту
 * панели — последняя строка страницы под ней не прячется. */
@media (max-width: 1359px) {
    .kh-prop-page > .hover-actions-left.show {
        display: flex; position: fixed; left: 12px; right: auto; bottom: 12px; top: auto; transform: none;
        flex-direction: row; flex-wrap: nowrap; gap: 6px; padding: 6px;
        max-width: calc(100vw - 100px); overflow-x: auto; scrollbar-width: none; box-sizing: border-box;
        background: #fff; border: 1px solid var(--border-color); border-radius: 999px;
        box-shadow: 0 8px 24px rgba(15,23,42,.18);
        opacity: 1; pointer-events: auto; transition: none; z-index: 60;
    }
    .kh-prop-page > .hover-actions-left.show > .hover-btn { flex: 0 0 auto; width: 38px; height: 38px; box-shadow: none; }
    .kh-prop-page > .hover-actions-left.show > .hover-btn:hover { transform: none; }
    body:has(.kh-prop-page > .hover-actions-left.show) { padding-bottom: 68px; }
}
/* 🗑 страницы лота — в ряду «Поделиться» (переносит `lotcard.edit.js`), обычной кнопкой ряда, а не плавающей */
.kh-pp-r2-actions > .hover-del { position: static; opacity: 1; pointer-events: auto; transition: none; }
.kh-pp-r2-actions > .hover-del[hidden] { display: none; }

/* ===== ⭐PROD2 W1 (§5.4): галочка выбора карточки (`ed.select`) для панели менеджера =====
 * Видна только при панели на странице (`[data-mgr-bar]`, `_pickShow`); выбранная карточка — рамкой цвета площадки.
 * На плитке она в кадре сверху рядом с ❤ (`_place`), на странице лота и без кадра — в углу обёртки. */
/* ⭐PROD2 UI-A (глаза владельца: «квадратики»): галочка — В ОДНОМ СТИЛЕ С ❤ (`.favorite-btn`: круг 36 px, белый, тень),
   а не голый квадрат системного флажка рядом с круглым сердцем. Сам флажок остаётся настоящим `<input>` (клавиатура,
   читалка, `change` для `setPick`) — он прозрачен и накрывает круг целиком, а галку рисует `::after` подложки */
.kh-ed-pick {
    position: absolute; top: 12px; left: 12px; z-index: 21;
    width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; box-sizing: border-box;
    background: #fff; border: none; border-radius: 50%; box-shadow: 0 2px 4px rgba(0,0,0,.1);
    cursor: pointer; transition: background-color .15s ease, transform .1s ease;
}
.kh-ed-pick[hidden] { display: none; }
.kh-ed-pick > input {
    position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer;
}
.kh-ed-pick::after {
    content: ''; width: 7px; height: 13px; margin-top: -3px; box-sizing: border-box;
    border: solid var(--text-muted); border-width: 0 2px 2px 0; transform: rotate(45deg);
    pointer-events: none;
}
.kh-ed-pick:hover::after { border-color: var(--primary); }
.kh-ed-pick:active { transform: scale(.9); }
.kh-ed-pick:has(> input:focus-visible) { outline: 2px solid var(--primary); outline-offset: 2px; }
.card-wrapper.kh-picked .kh-ed-pick { background: var(--primary); }
.card-wrapper.kh-picked .kh-ed-pick::after { border-color: #fff; }
/* на плитке галочка в кадре — в строку с ❤ (тот же верх 12 px, зазор 8 px), слева сверху — подпись помещения */
.image-container > .kh-ed-pick { top: 12px; left: auto; right: 56px; }
.card-wrapper.kh-picked > .property-card { outline: 3px solid var(--primary); outline-offset: 2px; }

/* ===== ⭐ES2 шаги C → E1: окно «Связаться» с выбором дат (`lotcontact.js`) =====
 * Жило строкой `MKT_CONTACT_CSS` внутри страницы лота. Переехало сюда вместе с окном: его теперь
 * открывает главная кнопка карточки, а карточка приезжает с этим листом везде, где она есть. */
.mkc-back { position: fixed; inset: 0; z-index: 90; background: rgba(15, 23, 42, .55); display: flex;
    align-items: center; justify-content: center; padding: 16px; }
.mkc-win { position: relative; background: #fff; border-radius: 16px; padding: 18px; width: min(540px, 100%);
    max-height: 90vh; overflow: auto; display: flex; flex-direction: column; gap: 10px; text-align: start; }
.mkc-x { position: absolute; inset-inline-end: 10px; top: 10px; border: 0; background: none; font-size: 18px;
    cursor: pointer; color: var(--text-muted); }
.mkc-head { font-size: 17px; padding-inline-end: 24px; }
.mkc-sub { font-size: 14px; }
.mkc-from { margin-top: -4px; }
.mkc-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--border-color);
    border-radius: 12px; text-decoration: none; color: var(--text-main); }
a.mkc-row:hover { border-color: var(--primary, #2563eb); }
.mkc-ico { width: 24px; height: 24px; border-radius: 6px; object-fit: contain; flex: none; }
.mkc-ico-t { display: grid; place-items: center; font-size: 18px; }
.mkc-l { display: flex; flex-direction: column; min-width: 0; }
.mkc-l i { font-style: normal; font-size: 13px; color: var(--text-muted); overflow-wrap: anywhere; }
.mkc-body { display: flex; flex-direction: column; gap: 8px; }
.mkc-cta { display: flex; gap: 8px; flex-wrap: wrap; }
.mkc-cta a { text-decoration: none; }
.mkc-book[aria-disabled="true"] { opacity: .5; pointer-events: none; }
.mkc-share { display: flex; flex-direction: column; align-items: center; gap: 6px; padding-top: 8px;
    border-top: 1px solid var(--border-color); }
.mkc-qr { border-radius: 10px; }
.mkc-sh-row { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; }

/* выбор дат: сетку рисует сервер (`lotCalendarHtml`, классы `.kh-cal-*` из market.css), здесь
   только отметка выбранного и подписи броней для команды */
.mkc-dates { display: flex; flex-direction: column; gap: 6px; padding: 8px 0;
    border-top: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color); }
.mkd-bar { display: flex; align-items: center; gap: 8px; }
.mkd-hint { flex: 1; text-align: center; }
.mkd-grid .kh-cal { gap: 12px; justify-content: center; margin: 4px 0; }
.mkd-grid .kh-cal-m { min-width: 210px; }
.mkd-grid .kh-cal-c { min-height: 30px; }
.kh-cal-c.mkd-in { background: #dbeafe; border-color: #bfdbfe; }
.kh-cal-c.mkd-s, .kh-cal-c.mkd-e { background: var(--primary, #2563eb); border-color: var(--primary, #2563eb); color: #fff; }
.kh-cal-c.mkd-e.busy { text-decoration: none; }
.kh-cal-c.mkd-lb { outline: 2px solid #f59e0b; outline-offset: -2px; }
.mkd-foot { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-height: 28px; }
.mkd-q { flex: 1; }
.mkd-no { color: #b91c1c; font-weight: 600; }
.mkd-dis { color: #16a34a; }
/* ссылки-действия окна — кнопками: на витрине `.kh-btn` у ссылки не оформлен вовсе, и «Забронировать»
   читалось бы строкой текста рядом с настоящей кнопкой «Сбросить даты» */
.mkc-win a.kh-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 8px 14px;
    border-radius: 10px; border: 1px solid var(--border-color); background: #fff; color: var(--text-main);
    text-decoration: none; font-weight: 500; font-size: 14px; }
.mkc-win a.kh-btn:hover { border-color: var(--primary, #2563eb); }
.mkc-win a.kh-btn.ok { background: var(--primary, #2563eb); border-color: var(--primary, #2563eb); color: #fff; }

/* ===== ⭐CK K2 (дельта C4): КОЖА окна «Связаться» — токены единого окна оригинала (`.kh-uni-*`, §1.4.3) =====
 *
 * ⚠ ТОЛЬКО ВИД. Механизм окна (контакты-прототипы трёх слоёв, `contactsResolve`, выбор дат, заявка, QR) — ПРЕЖНИЙ
 * и не тронут (прямой запрет владельца); состав и порядок — решения ⭐ES2 C/E1, 26, 31, 32, 36. Здесь — значения
 * оригинала: окно r16 с полями 32/28 и тенью, ✕ 34 px на сером, заголовок 17/700, строки контактов кнопками
 * `.kh-uni-btn` (серый фон, рамка, r10, 15/600, наведение — синим), значок 20 × 20.
 */
.mkc-back { background: rgba(0,0,0,.7); }
.mkc-win {
    border-radius: 16px; padding: 32px 28px 28px; width: min(460px, 100%); max-height: 80vh;
    box-shadow: 0 20px 60px rgba(0,0,0,.3); gap: 12px;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
.mkc-x {
    top: 10px; inset-inline-end: 10px; width: 34px; height: 34px; border-radius: 50%;
    font-size: 24px; line-height: 1; color: var(--text-main); background: rgba(0,0,0,.05);
    display: flex; align-items: center; justify-content: center;
}
.mkc-x:hover { background: rgba(0,0,0,.12); }
.mkc-head { font-size: 17px; font-weight: 700; margin: 0 0 2px; }
.mkc-row {
    width: 100%; gap: 8px; padding: 12px 14px; border-radius: 10px; background: #f8fafc;
    border: 1px solid var(--border-color); font-size: 15px; font-weight: 600; color: var(--text-main);
    transition: background .15s, border-color .15s, color .15s; box-sizing: border-box;
}
a.mkc-row:hover { background: #eff6ff; border-color: var(--primary, #2563eb); color: var(--primary, #2563eb); }
.mkc-ico { width: 20px; height: 20px; border-radius: 4px; }
.mkc-l i { font-weight: 400; }
.mkc-dates .mkd-hint { font-size: 12px; }
.mkc-cta .mkc-book, .mkc-win a.kh-btn.ok.mkc-book {
    padding: 12px 18px; border-radius: 8px; font-size: 15px; font-weight: 600;
}
@media (max-width: 480px) { .mkc-win { padding: 24px 20px; } }

/* цены нет — подпись, а не заголовок: «цена не указана» крупным жирным была самым заметным местом карточки */
.price-main.is-none { font-size: 15px; font-weight: 500; color: var(--text-muted, #64748b); }
