/* ===== Токены ===== */
:root {
  --bg: #f7f6f3;          /* lighter-29.10: тёплый почти белый (было #f1f4f6) */ /* kera-29.10: «Закат над Чёрным морем» (выбор владелицы) — морской туман */
  --surface: #ffffff;
  --surface-2: #f3f2ee;   /* lighter-29.10: тёплый (было #f4f6f8) */
  --ink: #13243b;          /* kera-29.10: ночное море */          /* palette-29.10: глубокий синий: 14.3:1 на bg */
  --muted: #5b6876;        /* kera-29.10: галька — 5.2:1 на bg, 5.7 на surface, 4.6 на sea-soft */
  --line: #d8dfe9;         /* декоративные разделители */
  --field-border: #7a8799; /* границы полей, поиска, чипов, тумблера, трека: ≥ 3:1 на bg (3.3) / surface (3.7) / surface-2 (3.4) */
  --sea: #17507a;          /* kera-29.10: Чёрное море — вкладки, чипы, ссылки, иконки: белый текст 8.5:1 */
  --sea-ink: #ffffff;
  --sea-soft: #dde9f2;     /* kera-29.10: море на ней 6.9:1 */     /* palette-29.10: мягкая синяя заливка, синий текст на ней 6.7:1 */
  --sea-fixed: #17507a;    /* palette-29.10: основной синий, одинаковый в обеих темах (текст на белых кнопках) */
  /* palette-29.10: оранжевый «закат» — только главные кнопки действия. #F07D3A давал белому тексту 2.7:1, #D9622B — 3.7:1,
     поэтому затемнён до #C4501C: 4.65:1. Наведение и нажатие — темнее */
  --cta: #d9572b; --cta-hover: #c44a22; --cta-active: #a83e1c;   /* lighter-29.10: мягче (было #cf4520), белый текст 3.9:1 */ --cta-ink: #ffffff;   /* kera-29.10: закат, белый текст 4.64:1 */
  --sun: #f5a524;          /* kera-29.10: солнце (тёмный текст 7.7:1); было: янтарь — «новое / ждёт ответа / избранное», не путать с оранжевым кнопок; тёмный текст 8.5:1 */
  --heart: #f5a524;        /* устар.: вместо него --like (нравится) и --danger (ошибки) */
  --like: var(--sun);
  --like-fg: #7a5600;      /* palette-29.10: обводка «в избранном» на светлом: 6.7:1 */
  --like-on-paper: #7a5600;/* то же на белой кнопке поверх фото — в обеих темах */
  --danger: var(--bad-fg);
  --sun-soft: color-mix(in srgb, var(--sun) 16%, var(--surface));
  --sun-text: #7a5600;     /* palette-29.10: текст цветом янтаря на белом: 6.7:1 */
  --ok: #3f7a5a;           /* чайный лист — «проверено», «сдан» */
  --ok-soft: #e3eee7;
  --display: 'Geologica', system-ui, sans-serif;
  --text: 'Golos Text', system-ui, sans-serif;

  /* Текст акцентом на мягком фоне: в светлой — море, в тёмной — светлый текст */
  --sea-text: var(--sea);
  /* Статусы: текст ≥ 4.5:1 на своём фоне */
  --ok-fg: #36694c;
  --good-bg: #dff3e5; --good-fg: #1f7a3f;     /* выгодно, ниже рынка — зелёный светофора */
  --warn-bg: #fdf0c8; --warn-fg: #7a5600;     /* на проверке — palette-29.10: янтарь, не оранжевый кнопок (5.9:1) */
  --bad-bg: #fde2e4;  --bad-fg: #b4233a;      /* отклонено, опасное действие */
  --neutral-fg: #5b6876;                      /* «по рынку» — нейтрально */
  /* Светофор цены: дёшево → дорого (шкала оценки и карта цен; PM_COLORS в app.js читает эти же токены) */
  --tl-1: #1f9d5a; --tl-2: #8fcf7a; --tl-3: #f2d45c; --tl-4: #f39a3c; --tl-5: #e2453b;
  --grad-score: linear-gradient(90deg, var(--tl-1), var(--tl-2) 30%, var(--tl-3) 55%, var(--tl-4) 78%, var(--tl-5));
  --grad-price: linear-gradient(90deg, var(--tl-1), var(--tl-2), var(--tl-3), var(--tl-4), var(--tl-5));
  --mark-below: #1f9d5a; --mark-fair: #c9a400; --mark-above: #b56a00;
  /* Фиксированные цвета поверх фото и акцентов */
  --on-photo: #ffffff;
  --photo-btn: rgba(255,255,255,.92);
  --ink-fixed: #13243b;                       /* тёмный текст на мандарине и белых кнопках — в обеих темах */
  --paper: #ffffff;                           /* подложка планировок, логотипа, ползунка */
  --paper-2: #f6f8fb;                         /* подложка картинок планировок (фикс.) */
  --media-bg: #000000;
  /* Единая база теней и затемнений (вместо rgb(15 46 54), rgba(14,36,39), rgba(0,0,0)); в тёмной теме — чёрный */
  --shade-rgb: 12 28 50;   /* palette-29.10: сине-серые тени вместо зелёных */
  --scrim: rgb(var(--shade-rgb) / .72);
  --scrim-strong: rgba(6,14,28,.85);
  --backdrop: rgba(6,14,28,.45);
  --grad-photo: linear-gradient(180deg, transparent 40%, rgb(var(--shade-rgb) / .35));
  --grad-photo-strong: linear-gradient(180deg, rgb(var(--shade-rgb) / .4), rgb(var(--shade-rgb) / .8));

  /* Радиусы: фото крупнее, служебные блоки спокойнее */
  --r-2xs: 4px; --r-xs: 8px; --r-sm: 12px; --r-md: 16px; --r-lg: 20px; --r-xl: 24px; --r-pill: 999px; --r-round: 50%;
  /* Отступы */
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 20px; --s-6: 24px; --gutter: 16px;
  /* Шрифт: rem — масштабируется вместе с настройкой размера текста. 12/13/14/15/16/18/20/26/34 */
  --fs-2xs: .75rem;   /* 12 — минимальный кегль (таббар, подписи плиток) */
  --fs-xs: .75rem;    /* 12 */
  --fs-sm: .8125rem;  /* 13 */
  --fs-md: .875rem;   /* 14 */
  --fs-base: .9375rem;/* 15 */
  --fs-lead: 1rem;    /* 16 — жирные имена и подписи в строках */
  --fs-lg: 1.125rem;  /* 18 — заголовок блока */
  --fs-xl: 1.25rem;   /* 20 — заголовок страницы, крупные цифры */
  --fs-2xl: 1.625rem; /* 26 — цена в ленте */
  --fs-3xl: 2.125rem; /* 34 — цена на странице объекта */
  /* Высоты контролов */
  --h-xs: 36px; --h-sm: 40px; --h-md: 48px; --tap: 44px;
  /* Иконки */
  --ic-xs: 14px; --ic-sm: 16px; --ic-md: 18px; --ic-lg: 20px; --ic: 22px; --ic-xl: 28px;
  /* Тени */
  --sh-1: 0 1px 4px rgb(var(--shade-rgb) / .25);
  --sh-2: 0 4px 16px rgb(var(--shade-rgb) / .14);
  --sh-3: 0 10px 30px rgb(var(--shade-rgb) / .18);
  /* Движение */
  --dur-fast: .15s; --dur: .2s; --dur-mid: .25s; --dur-slow: .28s; --ease-out: cubic-bezier(.2,.8,.2,1);
  /* Слои */
  --z-raised: 2; --z-low: 5; --z-sticky: 20; --z-float: 25; --z-bar: 30; --z-action: 31;
  --z-backdrop: 60; --z-sheet: 61; --z-viewer: 80; --z-toast: 90; --z-map-ui: 500;

  /* Раскладка и Telegram */
  --app-max: 560px;
  --top-h: 58px;
  --tabbar-h: 64px;
  --vh: var(--tg-viewport-stable-height, 100vh);
  --safe-b: max(env(safe-area-inset-bottom, 0px), var(--tg-safe-area-inset-bottom, 0px));
}
:root[data-theme="dark"] {
  /* Ночной графит с лёгкой морской прохладой: без чистого чёрного и чистого белого, акценты приглушены.
     Ступени: bg (страница) < surface (карточки, шапка, таббар, шторки) < surface-2 (поля, вложенные плашки). */
  --bg: #0f1724;          /* palette-29.10: ночное море, сине-серое */
  --surface: #162131;
  --surface-2: #1e2b3e;
  --ink: #e3eaf3;          /* 14.8:1 на bg, 11.8 на surface-2 */
  --muted: #a0b0c4;        /* 8.1:1 на bg, 7.3 на surface, 6.5 на surface-2, 5.8 на sea-soft */
  --line: #263449;
  --field-border: #6c7f99; /* ≥ 3:1 на surface (4.0) и surface-2 (3.5) */
  --like-fg: var(--sun);
  --shade-rgb: 0 0 0;
  --sea: #74aee0;          /* kera-29.10: светлое море на тёмном — вкладки, чипы, ссылки; 7.6:1 на bg */
  --sea-ink: #0b1a2e;      /* 6.7:1 на синем */
  --sea-soft: #1c3253;     /* вторичные кнопки — синий оттенок, отличаются от выключенных (surface-2) */
  --sun: #f5a524;          /* kera-29.10: солнце, на surface 7.9:1; оранжевый кнопок (--cta) не меняется */
  --sun-text: #f5a524;     /* fix3-29.10: «Ждёт назначения», «Новая» — светлым на тёмном было #7a5600, 2.15:1 */
  --ok: #8bc4a0;
  --ok-soft: #1d3329;

  --sea-text: var(--ink);
  --ok-fg: var(--ok);
  --good-bg: #1b3324; --good-fg: #8fd8a6;
  --warn-bg: #3a2e12; --warn-fg: #f3c55a;     /* palette-29.10: янтарь */
  --bad-bg: #3b1f24;  --bad-fg: #f19aa7;
  --neutral-fg: var(--muted);
  --sh-1: 0 1px 4px rgb(var(--shade-rgb) / .45);
  --sh-2: 0 4px 16px rgb(var(--shade-rgb) / .35);
  --sh-3: 0 10px 30px rgb(var(--shade-rgb) / .45);
}
/* Тёмная тема: метки на графитовой суше карты — светлее подложки и с тонкой обводкой, чтобы не тонули */
:root[data-theme="dark"] :is(.pin:not(.on), .mini-map-open) { background: var(--surface-2); box-shadow: 0 0 0 1px rgb(227 234 243 / .22), var(--sh-2); }   /* palette-29.10 */
/* Выключенные чипы: пунктир + приглушённый текст без полупрозрачности — видно, но не спорит с активными */
:root[data-theme="dark"] .chip:disabled { opacity: 1; color: color-mix(in srgb, var(--muted) 70%, var(--surface)); border-color: var(--line); }

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body { margin: 0; background: var(--bg); color: var(--ink); font: 400 var(--fs-base)/1.45 var(--text); }
body { overscroll-behavior-y: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; touch-action: manipulation; }
a { color: inherit; text-decoration: none; }
svg { width: var(--ic); height: var(--ic); fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }
:focus-visible { outline: 2px solid var(--sea); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }

#app { max-width: var(--app-max); margin: 0 auto; min-height: var(--vh); padding-bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-3)); }

/* Утилиты (вместо инлайн-стилей) */
.m-0 { margin: 0; }
.mt-1 { margin-top: var(--s-1); }
.mt-3 { margin-top: var(--s-3); }
.spacer { height: 84px; }          /* место под action-bar */
.spacer.sm { height: var(--s-3); }

/* ===== Кнопки ===== */
/* min-height вместо height: при крупном системном шрифте кнопка растёт, а не обрезает текст */
.btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: var(--s-2); min-height: var(--h-md); padding: 0 var(--s-4);
  border-radius: var(--r-md); font-weight: 600; font-size: var(--fs-base); white-space: nowrap; }
.btn.primary { background: var(--cta); color: var(--cta-ink); }   /* palette-29.10: главные кнопки — оранжевый «закат» */
@media (hover: hover) { .btn.primary:not(:disabled):hover { background: var(--cta-hover); } }
.btn.primary:not(:disabled):active { background: var(--cta-active); }
.btn.ghost { background: var(--sea-soft); color: var(--sea-text); }
.btn.danger { background: var(--bad-bg); color: var(--danger); }      /* опасное действие: 5.3:1 */
.btn.icon { flex: none; width: var(--h-md); padding: 0; }
.btn.sm { position: relative; min-height: var(--h-sm); padding: 0 var(--s-3); border-radius: var(--r-sm); font-size: var(--fs-md); }
/* Широкие кнопки с длинной подписью («…в Telegram») переносят текст, а не обрезают */
.btn.wide { flex: none; width: 100%; white-space: normal; text-align: center; line-height: 1.2; padding-block: 10px; overflow-wrap: anywhere; }
.btn.fit { flex: none; }
/* fixC-29.10: «Отправить запрос на показ» + время — в две строки, на 360 px не обрезается */
.btn.vw-send { flex-direction: column; gap: 0; white-space: normal; text-align: center; line-height: 1.2; padding-block: 6px; }
.btn.vw-send small { font-size: var(--fs-sm); font-weight: 500; }
.btn:disabled { background: var(--surface-2); color: var(--muted); opacity: 1; cursor: default; }
.block > .btn.wide { margin-top: var(--s-3); }
.block > .btn.wide + .btn.wide { margin-top: var(--s-2); }
.join > .btn.wide { margin-top: 0; }
.link { color: var(--sea-text); font-weight: 600; font-size: var(--fs-md); }

/* ===== Поля ввода ===== */
.field { display: grid; gap: 6px; min-width: 0; overflow-wrap: anywhere; font-size: var(--fs-md); font-weight: 500; color: var(--muted); }
.field input, .field select, .field textarea, .range input, .sc-link-edit input, .sc-link-edit select, .sch-hours input, .sch-break input {
  width: 100%; min-width: 0; height: var(--h-md); padding: 0 var(--s-3); border-radius: var(--r-sm); border: 1px solid var(--field-border);
  background: var(--surface-2); color: var(--ink); font: 400 var(--fs-base) var(--text); }
.field textarea { height: auto; padding: 10px var(--s-3); resize: vertical; }
.field .seg, .field .amens { margin-top: 2px; }
/* Общий вид всех полей ввода (копии ниже задают только фон и высоту): граница ≥ 3:1 и фокус */
:is(.lc-remind input, .lc-tpl-edit input, .lc-tpl-edit textarea, .sch-range input, .pk-max input) { border-color: var(--field-border); }
:is(.field input, .field select, .field textarea, .range input, .sc-link-edit input, .sc-link-edit select, .sch-hours input, .sch-break input,
  .lc-remind input, .lc-tpl-edit input, .lc-tpl-edit textarea, .sch-range input, .pk-max input):focus:not(.invalid) {
  outline: none; border-color: var(--sea); box-shadow: 0 0 0 3px color-mix(in srgb, var(--sea) 20%, transparent); }
:is(.field, .lc-tpl-edit, .lc-remind, .sch-range, .pk-max) :is(input, textarea)::placeholder { color: var(--muted); }

/* ===== Чипы ===== */
.chips { display: flex; gap: var(--s-2); overflow-x: auto; padding: var(--s-3) var(--gutter) 2px; scrollbar-width: none; }
.chips::-webkit-scrollbar { display: none; }
/* Высота = зона нажатия 44px; граница ≥ 3:1 к фону */
.chip { flex: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--s-1); min-height: var(--tap); padding: var(--s-2) 14px;
  border-radius: var(--r-pill); background: var(--surface); font-size: var(--fs-md); font-weight: 500; border: 1px solid var(--field-border); white-space: nowrap; }
.chip.sm { min-height: var(--h-sm); padding: 6px 10px; font-size: var(--fs-sm); }
/* Фон по контексту: на белом блоке — серый, на сером — белый (специфичность 0,1,0 — .chip.on всегда сильнее) */
:where(.seg, .times, .translate) .chip { background: var(--surface-2); }
:where(.reg-box, .sc-link-ops) .chip { background: var(--surface); }
.chip.on { background: var(--sea); border-color: var(--sea); color: var(--sea-ink); }
.chip.danger { color: var(--bad-fg); border-color: color-mix(in srgb, var(--bad-fg) 45%, transparent); }
.chip:disabled { opacity: .5; border-style: dashed; cursor: default; }
.chip.busy { text-decoration: line-through; }       /* занятое время */
.seg { display: flex; flex-wrap: wrap; gap: var(--s-2); }

/* ===== Сегменты и табы: одна форма активного состояния ===== */
.deal-switch, .tabs, .map-mode { padding: var(--s-1); background: var(--surface); }
.deal-switch button, .tabs button, .map-mode button { min-height: var(--h-sm); padding: 0 14px; border-radius: var(--r-sm); font-weight: 600; font-size: var(--fs-md);
  color: var(--muted); white-space: nowrap; transition: background var(--dur), color var(--dur); }
.deal-switch button.on, .tabs button.on, .map-mode button.on { background: var(--sea); color: var(--sea-ink); }
.deal-switch { margin: 6px var(--gutter) 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-radius: var(--r-md); }
/* Подпись переносится при крупном шрифте, а не раздвигает сетку */
.deal-switch button { position: relative; min-width: 0; padding: 0 2px; white-space: normal; line-height: 1.15; overflow-wrap: anywhere; }
.map-mode button { position: relative; }
/* Аренда: «Помесячно | Посуточно» — второй уровень под сделкой, поэтому тише: выбранный — белая плашка, не заливка */
.rent-mode { margin: var(--s-3) var(--gutter) 0; padding: 3px; display: grid; grid-template-columns: 1fr 1fr; gap: 3px;
  border-radius: var(--r-sm); background: color-mix(in srgb, var(--ink) 7%, transparent); }
.rent-mode button { position: relative; min-width: 0; min-height: var(--h-sm); padding: 0 var(--s-2); border-radius: 9px; font-size: var(--fs-md); font-weight: 600;
  color: var(--muted); transition: background var(--dur-fast), color var(--dur-fast); }
.rent-mode button::after { content: ''; position: absolute; inset: -2px 0; }     /* зона нажатия 44px */
.rent-mode button.on { background: var(--surface); color: var(--ink); box-shadow: var(--sh-1); }
.rent-mode + .feed-chips { padding-top: 10px; }
.rent-mode { margin-top: 10px; }
.rent-mode button { min-height: 36px; }
/* тёмная тема: --surface темнее подложки — выбранная половина выглядела утопленной */
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .rent-mode button.on { background: color-mix(in srgb, var(--sea) 20%, var(--surface)); } }
:root[data-theme="dark"] .rent-mode button.on { background: color-mix(in srgb, var(--sea) 20%, var(--surface)); }
/* Табы кабинета и админки: горизонтальная прокрутка + затухание справа */
.tabs { position: relative; display: flex; gap: 6px; margin: 2px var(--gutter) var(--s-1); border-radius: var(--r-md); overflow-x: auto; scrollbar-width: none; scroll-padding-inline: var(--s-2); }
.tabs::-webkit-scrollbar { display: none; }
.tabs.more { -webkit-mask-image: linear-gradient(90deg, black calc(100% - 36px), transparent); mask-image: linear-gradient(90deg, black calc(100% - 36px), transparent); }
.tabs button { flex: none; }

/* ===== Шапка ===== */
.top { position: sticky; top: 0; z-index: var(--z-sticky); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-2);
  padding: 10px var(--gutter); background: color-mix(in srgb, var(--bg) 88%, transparent); backdrop-filter: blur(14px); }
.brand { position: relative; display: flex; align-items: center; gap: var(--s-2); font: 600 var(--fs-lg)/1 var(--display); letter-spacing: -.02em; color: var(--sea); }
.brand svg { width: var(--ic-xl); height: var(--ic-xl); stroke-width: 2.2; }
/* kera-29.10: знак «крыша над закатом» и название FiraGO (только название; файл урезан до латиницы и грузинских букв, 14 КБ).
   Kera по буквам уходит вверх, снизу приходит კერა, потом обратно; при «меньше движения» — просто Kera */
@font-face { font-family: 'FiraGO Kera'; font-style: normal; font-weight: 800; font-display: swap; src: url(fonts/firago-kera-800.woff2?v=733f00a78a) format('woff2'); }
.top .brand { color: var(--ink); }
.top .brand svg { width: 30px; height: 30px; stroke-width: 3.2; }
.brand svg .b-sun { fill: var(--sun); stroke: var(--cta); stroke-width: 2.4; }
.top .brand .bn { display: inline-grid; font: 800 1.3rem/1.15 'FiraGO Kera', var(--display); letter-spacing: -.01em; overflow: hidden; padding: 2px 0; }
.top .brand .bn > span { grid-area: 1 / 1; display: inline-flex; }
.top .brand .bn i { display: inline-block; font-style: normal; animation: 9s var(--ease-out) calc(1.2s + var(--i) * 70ms) infinite both; }
.top .brand .bn-l i { animation-name: bn-out; }
.top .brand .bn-k i { animation-name: bn-in; opacity: 0; }
@keyframes bn-out { 0%, 40% { opacity: 1; transform: none; } 46%, 88% { opacity: 0; transform: translateY(-70%); } 94%, 100% { opacity: 1; transform: none; } }
@keyframes bn-in { 0%, 42% { opacity: 0; transform: translateY(70%); } 48%, 86% { opacity: 1; transform: none; } 92%, 100% { opacity: 0; transform: translateY(-70%); } }
@media (prefers-reduced-motion: reduce) { .top .brand .bn-k { display: none !important; } }
/* Имя продукта видно и на телефоне; прячем только на очень узких экранах */
.top .brand span { display: inline; }
@media (max-width: 359px) { .top .brand span { display: none; } }
/* Риелтор/владелец: в шапке ещё и кнопка кабинета с подписью — на узком экране прячем имя и стрелки, чтобы всё влезло в одну строку */
@media (max-width: 419px) {
  .top:has(.pro-only:not([hidden])) .brand span { display: none; }
  .top:has(.pro-only:not([hidden])) .top-actions { gap: 6px; }
  .top:has(.pro-only:not([hidden])) .locale { padding-inline: 10px; }
  .top:has(.pro-only:not([hidden])) .locale > svg:last-child:not(:first-child) { display: none; }
  /* Кабинет и админка: имя бренда важнее фильтра города — город сворачивается в иконку */
  body.pro-mode .top:has(.pro-only) .brand span { display: inline; }
  body.pro-mode .top:has(.pro-only) .city-btn span { display: none; }
  body.pro-mode .top:has(.pro-only) .city-btn { padding-inline: 10px; }
}
@media (max-width: 359px) { body.pro-mode .top:has(.pro-only) .brand span { display: none; } }
.top-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--s-2); }
/* Кнопки шапки: визуально 36px, зона нажатия 44px */
.locale { position: relative; display: flex; align-items: center; gap: 6px; padding: var(--s-2) var(--s-3); border-radius: var(--r-pill); background: var(--surface);
  font-weight: 600; font-size: var(--fs-sm); white-space: nowrap; }
.locale.icon-only { padding: var(--s-2) 10px; }
.city-btn span { max-width: 64px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Нижняя панель */
.tabbar { position: fixed; z-index: var(--z-bar); left: 50%; transform: translateX(-50%); bottom: 0; width: 100%; max-width: var(--app-max);
  display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); min-height: calc(var(--tabbar-h) + var(--safe-b)); padding-bottom: var(--safe-b);
  background: var(--surface); border-top: 1px solid var(--line); }
.tabbar button { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; min-width: 0; padding: var(--s-1) 2px;
  font-size: var(--fs-2xs); font-weight: 500; color: var(--muted); }
.tabbar button span { max-width: 100%; line-height: 1.1; text-align: center; overflow-wrap: anywhere; }
.tabbar button.on { color: var(--sea); }
.tabbar button.on svg { stroke-width: 2.3; }
.badge { position: absolute; top: var(--s-2); left: calc(50% + 6px); min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--r-pill);
  background: var(--sun); color: var(--ink-fixed); font: 700 var(--fs-2xs)/18px var(--text); font-style: normal; display: none; }
.badge.show { display: block; }

/* ===== Каталог ===== */
.search { margin: 10px var(--gutter) 0; display: flex; align-items: center; gap: 10px; padding: 0 14px; min-height: var(--h-md); border-radius: var(--r-md); background: var(--surface);
  border: 1px solid var(--field-border); }
.search:focus-within { border-color: var(--sea); }
.search svg { color: var(--muted); width: var(--ic-lg); height: var(--ic-lg); }
.search input { flex: 1; min-width: 0; border: 0; outline: 0; background: none; font: inherit; color: var(--ink); }
.search input::placeholder { color: var(--muted); }
.search .filter-btn { position: relative; display: grid; place-items: center; width: var(--h-xs); height: var(--h-xs); margin-right: -6px; border-radius: var(--r-xs); background: var(--surface-2); color: var(--ink); }
.search .filter-btn i { position: absolute; top: -3px; right: -3px; width: 16px; height: 16px; border-radius: var(--r-round); background: var(--sea); color: var(--sea-ink); font: 600 var(--fs-2xs)/16px var(--text); font-style: normal; }

.result-bar { display: flex; align-items: baseline; justify-content: space-between; padding: 18px var(--gutter) 10px; }
.result-bar h1 { margin: 0; font: 600 var(--fs-xl)/1.1 var(--display); letter-spacing: -.03em; }   /* заголовок страницы ниже цены по весу */
/* Подзаголовок под h1 страницы */
.result-bar h1 small, .page-head h1 small { display: block; margin-top: var(--s-1); font: 400 var(--fs-sm) var(--text); color: var(--muted); letter-spacing: 0; }
.sort { display: flex; align-items: center; gap: var(--s-1); min-height: var(--tap); padding: 0 2px; font-size: var(--fs-md); font-weight: 600; color: var(--sea); }
.sort svg { width: var(--ic-sm); height: var(--ic-sm); }

.feed { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; padding: 0 var(--gutter); }
.empty { margin: 30px var(--gutter); padding: 28px var(--s-5); border-radius: var(--r-lg); background: var(--surface); text-align: center; color: var(--muted); }
.empty b { display: block; margin-bottom: 6px; color: var(--ink); font: 600 var(--fs-lead) var(--display); }
.empty button { margin-top: 14px; min-height: var(--h-sm); padding: 0 var(--s-4); border-radius: var(--r-sm); background: var(--sea); color: var(--sea-ink); font-weight: 600; }
/* пустая выдача: снять один фильтр — на чипе сразу видно, сколько станет */
.drop-chips { margin-top: var(--s-3); display: flex; flex-wrap: wrap; justify-content: center; gap: var(--s-2); }
.empty .drop-chip { margin: 0; min-height: var(--tap); padding: 6px 10px 6px 14px; border-radius: var(--r-pill); background: var(--surface-2); color: var(--ink);
  font-weight: 500; white-space: normal; text-align: left; gap: 6px; }
.drop-chip small { color: var(--muted); font-size: var(--fs-sm); white-space: nowrap; }
.drop-chip svg { width: var(--ic-sm); height: var(--ic-sm); color: var(--muted); }
/* «Сохранить поиск» — главное действие пустой выдачи, «Сбросить» — второстепенное, текстом */
.empty .sub-cta { width: 100%; margin: var(--s-4) 0 0; min-height: 0; padding: var(--s-3) 14px; border-radius: var(--r-md); background: var(--sea-soft); color: var(--sea-text); font-weight: 400; }
.empty .sub-cta b { margin: 0; font: 600 var(--fs-base) var(--text); color: var(--sea-text); }
.empty .empty-reset { background: transparent; color: var(--sea-text); }

/* Карточка в ленте */
.card { border-radius: var(--r-xl); background: var(--surface); overflow: hidden; }
.gallery { position: relative; aspect-ratio: 16 / 11; }
.gallery .track { display: flex; height: 100%; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; }
.gallery .track::-webkit-scrollbar { display: none; }
.gallery img { flex: none; width: 100%; height: 100%; object-fit: cover; scroll-snap-align: center; }
/* Пока фото грузятся — мягкий «шиммер» вместо пустого серого блока */
.gallery, .cmp-head img, .sc-item img {
  background: linear-gradient(100deg, var(--surface-2) 35%, var(--surface) 50%, var(--surface-2) 65%) 0 0 / 300% 100% var(--surface-2);
  animation: c-shimmer 1.6s linear infinite; }
@keyframes c-shimmer { from { background-position: 100% 0; } to { background-position: 0 0; } }
.dots { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); display: flex; gap: var(--s-1); }
.dots i { width: 6px; height: 6px; border-radius: var(--r-pill); background: color-mix(in srgb, var(--on-photo) 55%, transparent); transition: width var(--dur); }
.dots i.on { width: 16px; background: var(--on-photo); }
.on-photo { position: absolute; top: 10px; right: 10px; display: flex; gap: var(--s-2); }
.round { position: relative; display: grid; place-items: center; width: var(--h-sm); height: var(--h-sm); border-radius: var(--r-round); background: var(--photo-btn); color: var(--ink-fixed); }
.round svg { width: var(--ic-lg); height: var(--ic-lg); }
/* «В избранном»: заливка мандарином + тёмно-мандариновый контур (4.6:1 на белой кнопке) */
.round.fav-on { color: var(--like-on-paper); }
.round.fav-on svg { fill: var(--like); }
.round.cmp-on { background: var(--sea); color: var(--sea-ink); }
/* Плашки на фото */
.sea-tag, .detail .counter { position: absolute; display: flex; align-items: center; gap: 5px; padding: 6px 10px; border-radius: var(--r-pill);
  background: var(--scrim); color: var(--on-photo); font-size: var(--fs-xs); font-weight: 600; }
.sea-tag { left: 10px; bottom: 10px; padding-left: var(--s-2); backdrop-filter: blur(6px); }
.sea-tag svg { width: var(--ic-sm); height: var(--ic-sm); }
/* Мандариновые плашки на фото: тёмный текст (4.9:1); .cx-status — та же плашка на странице ЖК */
.fresh, .cx-status { position: absolute; left: 10px; top: 10px; padding: 5px 10px; border-radius: var(--r-pill); background: var(--sun); color: var(--ink-fixed); font-size: var(--fs-xs); font-weight: 600; }

.card-body { padding: 13px var(--s-4) var(--s-4); }
.price { font: 600 var(--fs-2xl)/1.05 var(--display); letter-spacing: -.035em; font-variant-numeric: tabular-nums; }
/* Цифры одной ширины: цены, плитки, статистика */
.money b, .calc-out b, .calc-grid b, .stats b, .dev-stats b, .st-nums b, .fy-scen b, .td-time b, .cmp td, .day b, .pm-ends { font-variant-numeric: tabular-nums; }
.price small { font: 500 var(--fs-md) var(--text); color: var(--muted); letter-spacing: 0; }
.price-sub { margin-top: 3px; font-size: var(--fs-sm); color: var(--muted); }
.addr { margin-top: var(--s-2); font-weight: 600; }
.addr span { display: block; font-weight: 400; font-size: var(--fs-md); color: var(--muted); }
.facts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.fact { padding: 5px 9px; border-radius: var(--r-xs); background: var(--surface-2); font-size: var(--fs-sm); font-weight: 500; }
/* Условия (питомцы, коммуналка, рассрочка) — нейтральные; зелёный только у денег (.good) и проверки (.ok) */
.fact.green { background: var(--ok-soft); color: var(--ok-fg); }      /* преимущество — отличимо от фактов «2 спальни · 48 м²» */
.fact.green::before { content: '✓'; margin-right: 4px; font-weight: 700; }
.fact.green svg { color: var(--ok-fg); }
.fact.ok { background: var(--ok-soft); color: var(--ok-fg); }         /* сдан, в срок, проверено */
.fact.good { background: var(--good-bg); color: var(--good-fg); }      /* ниже рынка, цена снижена */
.fact.sun { background: var(--sun); color: var(--ink-fixed); }         /* новое, предпродажа: 4.9:1 */

/* Карточка ЖК в «Новостройках» */
.cx-card { cursor: pointer; }
.cx-card .fresh.done, .cx-status.done { background: var(--ok); color: var(--sea-ink); }
.cx-card .price small { font-size: var(--fs-sm); }
.cx-card-more { margin-top: var(--s-3); padding-top: 10px; border-top: 1px solid var(--line); color: var(--sea-text); font-weight: 600; font-size: var(--fs-md); }

/* Подписка на поиск */
.sub-cta { display: flex; align-items: center; gap: var(--s-3); width: calc(100% - 2 * var(--gutter)); margin: 0 var(--gutter) var(--s-3); padding: var(--s-3) 14px; border-radius: var(--r-md);
  background: var(--sea-soft); color: var(--sea-text); text-align: left; }
button.sub-cta { cursor: pointer; }
.feed > .sub-cta { width: auto; margin: 0; }
.sub-cta b { display: block; font-size: var(--fs-base); }
.sub-cta span { font-size: var(--fs-sm); color: var(--muted); }
.sub-cta span b { color: var(--sea-text); }

/* ===== Страница объекта ===== */
.detail > .gallery { aspect-ratio: 4 / 3.2; border-radius: 0 0 var(--r-xl) var(--r-xl); overflow: hidden; }
.detail .counter { right: var(--s-3); bottom: var(--s-3); }
.detail .back-web { position: absolute; top: 10px; left: 10px; }
.thumbs { display: flex; gap: 6px; padding: 10px var(--gutter) 0; overflow-x: auto; scrollbar-width: none; }
.thumbs img { flex: none; width: 62px; height: 46px; object-fit: cover; border-radius: var(--r-xs); opacity: .55; border: 2px solid transparent; }
.thumbs img.on { opacity: 1; border-color: var(--sea); }

.block { margin: var(--s-3) var(--gutter) 0; padding: var(--s-4); border-radius: var(--r-lg); background: var(--surface); }
.block h2 { margin: 0 0 var(--s-3); font: 600 var(--fs-lg)/1.2 var(--display); letter-spacing: -.02em; }   /* 18: заметно крупнее текста 15 */
.head-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--s-3); }
.head-row .price { font-size: var(--fs-3xl); }
.head-actions { display: flex; gap: var(--s-2); }
/* страница объекта: «Сравнить» и «Избранное» всегда справа от цены, ≈ ₾ — в той же строке мелко; адрес — строкой ниже */
.price-row { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--s-3); }
.price-row .price { flex: 1; min-width: 0; font-size: var(--fs-3xl); overflow-wrap: anywhere; }
.price-row .head-actions { flex: none; }
.price small.gel { font-size: var(--fs-sm); font-weight: 400; white-space: nowrap; }
.price-row + .addr { margin-top: var(--s-1); }
.spec dd small { margin-left: 2px; font: 500 var(--fs-sm) var(--text); color: var(--muted); }
.money b small { display: block; font-size: var(--fs-sm); font-weight: 400; color: var(--muted); }
/* видео в объявлении — плашка на фото, ведёт к «Видеообзору» */
.vid-badge { position: absolute; left: var(--s-3); bottom: var(--s-3); display: flex; align-items: center; gap: 5px; min-height: 32px; padding: 6px 12px 6px 10px;
  border-radius: var(--r-pill); background: var(--scrim); color: var(--on-photo); font-size: var(--fs-xs); font-weight: 600; backdrop-filter: blur(6px); }
.vid-badge svg { width: var(--ic-sm); height: var(--ic-sm); fill: currentColor; stroke: none; }
.square { display: grid; place-items: center; width: var(--tap); height: var(--tap); border-radius: var(--r-sm); background: var(--surface-2); }
.square.fav-on { color: var(--like-fg); } .square.fav-on svg { fill: var(--like); }
.square.cmp-on { background: var(--sea); color: var(--sea-ink); }

/* Характеристики: строки с тонким разделителем вместо серых плиток внутри белой карточки */
.spec { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: var(--s-4); margin-top: 14px; border-top: 1px solid var(--line); }
.spec div { min-width: 0; padding: 10px 0; border-bottom: 1px solid var(--line); }
.spec dt { font-size: var(--fs-sm); color: var(--muted); }
.spec dd { margin: 2px 0 0; font: 600 var(--fs-base) var(--display); overflow-wrap: anywhere; }
.money { display: grid; gap: var(--s-2); }
.money div { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0 var(--s-3); font-size: var(--fs-base); }
.money span { color: var(--muted); }
.money b { min-width: 0; margin-left: auto; font-weight: 600; text-align: right; overflow-wrap: anywhere; }
.money em { font-style: normal; font-size: var(--fs-xs); margin-left: var(--s-1); }
.money em.down { color: var(--good-fg); }          /* цена снизилась — выгодно */
.money em.up { color: var(--bad-fg); }
.desc { margin: 0; color: var(--ink); }
.desc.loading { opacity: .4; }
.video-row { display: flex; gap: var(--s-2); margin-top: 14px; }
.video-row button { display: flex; align-items: center; gap: 7px; min-height: var(--h-sm); padding: 0 var(--s-3); border-radius: var(--r-sm); background: var(--surface-2); font-weight: 600; font-size: var(--fs-md); }
.video-row svg { width: var(--ic-md); height: var(--ic-md); }

.agent { display: flex; align-items: center; gap: var(--s-3); }
button.agent { width: 100%; text-align: left; }
.agent img { width: 56px; height: 56px; border-radius: var(--r-round); object-fit: cover; }
.agent b { display: block; font-size: var(--fs-lead); }
.agent span { font-size: var(--fs-md); color: var(--muted); }
.agent .chev { margin-left: auto; color: var(--muted); width: var(--ic-md); height: var(--ic-md); }
.contacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 6rem), 1fr)); gap: var(--s-2); margin-top: 14px; }
.contacts a, .contacts button { min-width: 0; display: flex; flex-direction: column; align-items: center; gap: var(--s-1); padding: 11px var(--s-1); border-radius: var(--r-sm); background: var(--surface-2); font-size: var(--fs-sm); font-weight: 600; }

/* Хлебные крошки */
.crumbs { display: flex; align-items: center; gap: var(--s-1); padding: 0 var(--gutter) 2px; overflow-x: auto; white-space: nowrap; scrollbar-width: none;
  font-size: var(--fs-sm); color: var(--muted); }
.crumbs::-webkit-scrollbar { display: none; }
.crumbs button { min-height: var(--tap); padding: 0 var(--s-1); color: var(--sea-text); font-weight: 500; }
:root[data-theme="dark"] .crumbs button { text-decoration: underline; text-underline-offset: 3px; }
.crumbs .sep { color: var(--muted); font-size: var(--fs-base); }
.crumbs .here { overflow: hidden; text-overflow: ellipsis; max-width: 180px; color: var(--ink); font-weight: 500; }
.crumbs + .detail > .gallery { border-radius: var(--r-xl); margin: 0 var(--gutter); }

/* Статусы */
.verified { display: inline-flex; align-items: center; gap: 3px; padding: 2px 7px 2px var(--s-1); border-radius: var(--r-pill); background: var(--ok-soft); color: var(--ok-fg);
  font: 600 var(--fs-xs) var(--text); vertical-align: middle; }
.verified svg { width: var(--ic-xs); height: var(--ic-xs); stroke-width: 2.6; }
.verified.big { margin-top: var(--s-2); padding: 5px var(--s-3) 5px var(--s-2); font-size: var(--fs-sm); }
.st-badge { flex: none; align-self: flex-start; margin-left: auto; padding: var(--s-1) 9px; border-radius: var(--r-pill); font-size: var(--fs-xs); font-weight: 600; background: var(--surface-2); color: var(--muted); }
.st-badge.published, .st-badge.approved { background: var(--ok-soft); color: var(--ok-fg); }
.st-badge.moderation, .st-badge.pending { background: var(--warn-bg); color: var(--warn-fg); }
.st-badge.rejected, .st-badge.blocked { background: var(--bad-bg); color: var(--bad-fg); }

/* История цены */
.hist-days { margin: -6px 0 10px; color: var(--muted); font-size: var(--fs-md); }
.hist-chart { width: 100%; height: 56px; margin-bottom: 10px; }
.hist-chart path { fill: none; stroke: var(--sea); stroke-width: 2.5; vector-effect: non-scaling-stroke; }

/* Оценка цены: светофор — выгодно зелёным, по рынку нейтрально, дорого красноватым */
.score-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: var(--s-4); }
.score-head h2 { margin: 0; }
.score-badge { padding: 6px var(--s-3); border-radius: var(--r-pill); font-size: var(--fs-md); font-weight: 600; }
.score-badge.below { background: var(--good-bg); color: var(--good-fg); }
.score-badge.fair { background: var(--surface-2); color: var(--neutral-fg); }
.score-badge.above { background: var(--bad-bg); color: var(--bad-fg); }
.score-bar { position: relative; height: var(--s-2); border-radius: var(--r-pill); background: var(--grad-score); }
.score-bar i { position: absolute; top: 50%; width: 22px; height: 22px; border-radius: var(--r-round); background: var(--paper); border: 5px solid var(--mark-above);
  transform: translate(-50%, -50%); box-shadow: var(--sh-1); }
.score-bar i.below { border-color: var(--mark-below); }
.score-bar i.fair { border-color: var(--mark-fair); }
.score-ends { display: flex; justify-content: space-between; margin-top: var(--s-2); font-size: var(--fs-sm); color: var(--muted); }
.score p { margin: var(--s-3) 0 2px; font-weight: 500; }
.score small { color: var(--muted); font-size: var(--fs-sm); }

/* Калькуляторы */
.calc h2 { margin-bottom: 10px; }
.range-row { display: grid; gap: 6px; margin-bottom: var(--s-3); font-size: var(--fs-md); color: var(--muted); }
.range-row span { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0 var(--s-2); }
.range-row b { margin-left: auto; overflow-wrap: anywhere; }
.range-row b { color: var(--ink); font-weight: 600; }
.range-row input { width: 100%; accent-color: var(--sea); }
.calc-out { display: flex; justify-content: space-between; align-items: baseline; padding: var(--s-3) 14px; border-radius: var(--r-md); background: var(--sea-soft); }
.calc-out b { font: 600 var(--fs-xl) var(--display); color: var(--sea-text); }
.calc-gap { height: 18px; }
/* Итоги калькулятора: строки с разделителем, а не серые плитки; колонки сами уходят в одну при крупном шрифте */
.calc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 5.5rem), 1fr)); column-gap: var(--s-3); border-top: 1px solid var(--line); }
.calc-grid div { display: grid; gap: 2px; min-width: 0; padding: 10px 0; border-bottom: 1px solid var(--line); }
.calc-grid span { font-size: var(--fs-xs); color: var(--muted); overflow-wrap: anywhere; }
.calc-grid b { font: 600 var(--fs-base) var(--display); overflow-wrap: anywhere; }
/* Плитки статистики: подпись сверху, число прижато к низу */
.calc-grid.four { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.calc-grid.four div { align-content: space-between; }
.calc-grid.four span { overflow-wrap: anywhere; }
.calc-grid.four b { font-size: var(--fs-xl); }
@media (max-width: 400px) { .calc-grid.four { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.calc-note { display: block; margin-top: 10px; color: var(--muted); font-size: var(--fs-sm); }
/* источник цифр (НБГ) — бледнее пояснения, чтобы не спорить с расчётом */
/* ипотека: валюта кредита — подпись слева, сегмент справа (меняет ставку, а не только показ цен) */
.fp-cur { display: flex; align-items: center; justify-content: space-between; gap: var(--s-3); margin: var(--s-2) 0 var(--s-3); font-size: var(--fs-md); color: var(--muted); }
.fp-cur .seg { flex: 0 1 12rem; flex-wrap: nowrap; }
.fp-cur .chip { flex: 1; min-height: var(--tap); }
/* под ползунком ставки: средняя НБГ и «Вернуть среднюю», если клиент сдвинул */
.fp-avg { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 var(--s-2); margin: -4px 0 var(--s-2); color: var(--muted); font-size: var(--fs-sm); }
.fp-avg .link { min-height: var(--tap); margin: -10px 0; padding: 0; border: 0; background: none; color: var(--sea-text); font: inherit; font-weight: 600; cursor: pointer; }
/* платёж в месяц — главный итог блока, под ним три равные ячейки */
.fp-pay { margin-bottom: var(--s-2); }
.fp-pay b { color: var(--good-fg); }
.calc-grid.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.calc-src .link { padding: 0; border: 0; background: none; color: var(--sea-text); font: inherit; font-weight: 600; text-decoration: underline; cursor: pointer; }
/* «ⓘ Примерный расчёт…» — длинные оговорки, источник и пояснения раскрываются по нажатию */
.fp-info { margin: var(--s-2) 0 var(--s-3); color: var(--muted); font-size: var(--fs-sm); }
.fp-info summary { display: flex; align-items: center; gap: var(--s-2); min-height: var(--tap); cursor: pointer; list-style: none; }
.fp-info summary::-webkit-details-marker { display: none; }
.fp-info summary svg { flex: none; width: 20px; height: 20px; fill: none; stroke: var(--sea-text); stroke-width: 2; stroke-linecap: round; }
.fp-info summary span { text-decoration: underline dotted; text-underline-offset: 3px; }
.fp-info[open] summary span { text-decoration: none; }
.fp-info p { margin: 0 0 var(--s-2); line-height: 1.45; }
.fp-info .calc-src { margin: 0 0 var(--s-2); }
.calc-src { display: block; margin-top: 6px; color: var(--muted); font-size: var(--fs-xs); line-height: 1.4; }
/* Ползунок: зона нажатия 44px (отрицательный margin сохраняет прежнюю высоту строки), трек ≥ 3:1,
   бегунок 24px в WebKit и Firefox одинаково (border-box) */
input[type=range] { -webkit-appearance: none; appearance: none; height: var(--tap); margin: -6px 0; background: transparent; }
input[type=range]::-webkit-slider-runnable-track { height: 6px; border-radius: var(--r-pill); background: var(--field-border); }
input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; box-sizing: border-box; width: 24px; height: 24px; margin-top: -9px; border-radius: var(--r-round);
  background: var(--sea); border: 3px solid var(--surface); box-shadow: var(--sh-1); }
input[type=range]::-moz-range-track { height: 6px; border-radius: var(--r-pill); background: var(--field-border); }
input[type=range]::-moz-range-progress { height: 6px; border-radius: var(--r-pill); background: var(--sea); }
input[type=range]::-moz-range-thumb { box-sizing: border-box; width: 24px; height: 24px; border-radius: var(--r-round); background: var(--sea); border: 3px solid var(--surface); box-shadow: var(--sh-1); }

/* Перевод, видео, рядом */
.desc-lang { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0 0 var(--s-2); font-size: var(--fs-sm); color: var(--muted); }
.desc-lang svg { flex: none; width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; }
.translate { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: var(--s-3); font-size: var(--fs-sm); color: var(--muted); }
.video { width: 100%; aspect-ratio: 16 / 9; border-radius: var(--r-md); background: var(--media-bg); object-fit: cover; }
.embed { position: relative; height: calc(var(--vh) * .7); border-radius: var(--r-md); overflow: hidden; background: var(--media-bg); }
.embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.sub-h { margin: var(--s-4) 0 var(--s-2); font-size: var(--fs-md); font-weight: 600; }
.near-center { display: flex; align-items: center; gap: 10px; min-height: var(--h-md); margin-bottom: 6px; padding: 0 var(--s-3);
  border-radius: var(--r-sm); background: var(--sea-soft); }
.near-center svg { flex: none; width: var(--ic-lg); height: var(--ic-lg); color: var(--sea-text); }
.near-center span { flex: 1; min-width: 0; font-size: var(--fs-md); font-weight: 500; }
.near-center b { flex: none; font-weight: 600; }
.near { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }   /* 390 px → ~105 px плитка */
.near > div, .near-more { min-width: 0; min-height: 76px; display: grid; align-content: start; justify-items: start; gap: 2px;
  padding: 10px; border-radius: var(--r-sm); background: var(--surface-2); text-align: left; }
.near svg { width: var(--ic-lg); height: var(--ic-lg); color: var(--sea); }
.near span { font-size: var(--fs-sm); color: var(--muted); line-height: 1.25; overflow-wrap: anywhere; }
.near b { font-weight: 600; }
.near:not(.open) > .x { display: none; }
.near-more { align-content: center; justify-items: center; gap: 4px; background: transparent; border: 1px dashed var(--field-border);
  color: var(--sea-text); font-weight: 600; font-size: var(--fs-md); }
.near-more span { color: inherit; font-size: inherit; }
.near-more svg { color: currentColor; transition: transform var(--dur); }
.near.open .near-more { order: 99; }                       /* раскрыто — кнопка уходит в конец */
.near.open .near-more svg { transform: rotate(180deg); }
@media (min-width: 520px) { .near { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* Удобства */
.amens { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.amen { display: inline-flex; align-items: center; gap: 7px; padding: var(--s-2) var(--s-3); border-radius: var(--r-sm); background: var(--surface-2); font-size: var(--fs-md); font-weight: 500; }
.amen svg { width: var(--ic-md); height: var(--ic-md); color: var(--sea); }
.amen.pick { position: relative; border: 1px solid var(--field-border); cursor: pointer; }
.amen.pick.on { background: var(--sea); border-color: var(--sea); color: var(--sea-ink); }
.amen.pick.on svg { color: inherit; }
.amens.collapsed .amen.extra { display: none; }       /* форма: удобства свёрнуты до 8 */
.amen-more { justify-self: start; min-height: var(--h-sm); padding: 0 2px; }

/* ЖК в карточке объекта */
.cx-photos { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 6px; margin-bottom: var(--s-3); }
.cx-photos img { width: 100%; height: 96px; object-fit: cover; border-radius: var(--r-xs); }
/* Одно фото ЖК — на всю ширину блока, а не мелкой миниатюрой */
.cx-photos img:only-child, .cx-photos-row img:only-child { grid-column: 1 / -1; width: 100%; height: auto; aspect-ratio: 16 / 9; }
.cx-title + .role { margin-top: var(--s-3); }
.cx-title { margin: 0; font: 600 var(--fs-2xl) var(--display); letter-spacing: -.03em; }

.mini-map { position: relative; z-index: 0; isolation: isolate; height: 190px; border-radius: var(--r-md); overflow: hidden; margin-top: var(--s-1); }
.district { margin-top: 10px; font-size: var(--fs-md); color: var(--muted); }

.similar { display: flex; gap: 10px; overflow-x: auto; padding: 0 var(--gutter); scrollbar-width: none; scroll-snap-type: x mandatory; scroll-padding: 0 var(--gutter); }
.similar .card { flex: none; width: 70%; scroll-snap-align: start; }
.similar .gallery { aspect-ratio: 16 / 10; }
.section-title { margin: 22px var(--gutter) 10px; font: 600 var(--fs-lg) var(--display); letter-spacing: -.02em; }

.action-bar { position: fixed; z-index: var(--z-action); left: 50%; transform: translateX(-50%); bottom: 0; width: 100%; max-width: var(--app-max);
  display: flex; gap: var(--s-2); padding: 10px var(--gutter) calc(10px + var(--safe-b)); background: var(--surface); border-top: 1px solid var(--line); }
/* Подписи переносятся при крупном шрифте, а не уходят за край */
.action-bar { flex-wrap: wrap; }
.action-bar .btn { min-width: 0; white-space: normal; line-height: 1.2; text-align: center; }
.action-bar .btn.primary { flex: 1 1 9rem; }   /* при крупном шрифте главная кнопка уходит на свою строку, а не сжимается в столбик */
/* Главное действие экрана — мандарин с тёмным текстом (4.9:1), выбранное и навигация остаются морскими */
.action-bar .btn.primary { background: var(--cta); color: var(--cta-ink); }   /* palette-29.10 */
@media (hover: hover) { .action-bar .btn.primary:not(:disabled):hover { background: var(--cta-hover); } }
.action-bar .btn.primary:not(:disabled):active { background: var(--cta-active); }
.action-bar .btn.primary:disabled { background: var(--surface-2); color: var(--muted); }
body.has-action .tabbar { display: none; }

/* ===== Страница агента ===== */
.agent-hero { text-align: center; padding-top: 22px; }
.agent-hero > img { width: 96px; height: 96px; border-radius: var(--r-round); object-fit: cover; }
.agent-hero h1 { margin: 10px 0 2px; font: 600 var(--fs-2xl) var(--display); letter-spacing: -.03em; }
.agent-hero .role { margin: 0; color: var(--muted); }
.stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: var(--s-2); margin: var(--s-4) 0 14px; border-block: 1px solid var(--line); }
.stats div { display: flex; flex-direction: column; justify-content: flex-start; min-width: 0; padding: 10px var(--s-1); }
.stats b { display: block; font: 600 var(--fs-xl) var(--display); }
.stats span { font-size: var(--fs-sm); color: var(--muted); }
.bio { margin: 0; text-align: left; }
.langs { margin-top: var(--s-2); text-align: left; font-size: var(--fs-md); color: var(--muted); }

/* ===== Карта ===== */
.map-wrap { position: fixed; inset: var(--top-h) 0 calc(var(--tabbar-h) + var(--safe-b)) 0; max-width: var(--app-max); margin: 0 auto; }
.map-wrap .deal-switch { position: absolute; z-index: var(--z-map-ui); top: var(--s-1); left: 0; right: 0; box-shadow: var(--sh-2); }
#bigMap { width: 100%; height: 100%; }
.pin { display: inline-block; padding: 6px 10px; border-radius: var(--r-pill); background: var(--surface); color: var(--ink); font: 600 var(--fs-xs)/1 var(--display);
  white-space: nowrap; box-shadow: var(--sh-2); cursor: pointer; font-variant-numeric: tabular-nums; }
.pin.on { z-index: var(--z-raised); background: var(--sea); color: var(--sea-ink); }
.map-card { position: absolute; z-index: var(--z-map-ui); left: var(--s-3); right: var(--s-3); bottom: var(--s-3); display: flex; gap: var(--s-3); padding: 10px; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--sh-3); }
.map-card img { width: 96px; height: 80px; border-radius: var(--r-sm); object-fit: cover; }
.map-card .price { font-size: var(--fs-xl); }
.maplibregl-map { font-family: var(--text); background: var(--surface-2); }
.maplibregl-ctrl-attrib { font-size: var(--fs-2xs); }
/* Режимы карты, карта цен */
.map-mode { position: absolute; z-index: var(--z-map-ui); top: 64px; left: 50%; transform: translateX(-50%); display: flex; border-radius: var(--r-pill); box-shadow: var(--sh-2); }
.map-mode button { border-radius: var(--r-pill); }
.pm-legend { position: absolute; z-index: var(--z-map-ui); left: var(--s-3); bottom: var(--s-3); width: 210px; padding: 10px var(--s-3); border-radius: var(--r-md); background: var(--surface);
  box-shadow: var(--sh-2); font-size: var(--fs-xs); color: var(--muted); }
.pm-legend-head { display: flex; justify-content: space-between; align-items: center; color: var(--ink); font-size: var(--fs-md); }
.pm-legend-head svg { width: var(--ic-md); height: var(--ic-md); }
.pm-bar { height: var(--s-2); margin: var(--s-2) 0 var(--s-1); border-radius: var(--r-pill); background: var(--grad-price); }
.pm-ends { display: flex; justify-content: space-between; font-weight: 600; color: var(--ink); }
.pm-card { display: block; bottom: 118px; }
.pm-card .price { font-size: var(--fs-xl); margin-top: 6px; }
.pm-card .pm-btn { margin-top: 10px; }
.rates-note { margin: var(--s-3) 0 0; font-size: var(--fs-sm); color: var(--muted); }

/* ===== Сравнение ===== */
/* Таблица прокручивается внутри своего блока (страница не едет вбок); затухание справа — .cmp-wrap.more (app.js) */
.cmp-scroll { overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x proximity; margin: 0 var(--gutter); border-radius: var(--r-lg); background: var(--surface); }
.cmp { border-collapse: collapse; min-width: 100%; font-size: var(--fs-md); }
.cmp th, .cmp td { padding: 10px var(--s-3); border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; min-width: 120px; }
.cmp td { scroll-snap-align: end; }
/* Липкая колонка подписей */
.cmp th { position: sticky; left: 0; z-index: var(--z-raised); min-width: 96px; background: var(--surface); color: var(--muted); font-weight: 500; box-shadow: 1px 0 0 var(--line); }
/* 390 px: подписи 88–96, ячейки от 104 — две колонки объектов помещаются целиком */
.cmp th { min-width: 88px; max-width: 96px; }
.cmp th, .cmp td { padding: 10px 8px; }
.cmp td { min-width: 104px; }
.cmp-name b.best { color: var(--sea-text); }
.cmp-note { margin: 0 var(--gutter) var(--s-2); font-size: var(--fs-sm); color: var(--muted); }
.cmp td.best { color: var(--sea-text); font-weight: 600; }
.cmp img { width: 100%; height: 78px; object-fit: cover; border-radius: var(--r-xs); }
.cmp-head { position: relative; }
/* Крестик: зона 44×44 */
.cmp .x { position: absolute; top: -8px; right: -8px; display: grid; place-items: center; width: var(--tap); height: var(--tap); margin: 0; color: var(--on-photo); }
.cmp .x svg { width: var(--ic-xl); height: var(--ic-xl); padding: 6px; border-radius: var(--r-round); background: var(--scrim); stroke-width: 2.4; box-sizing: border-box; }
.cmp-name { display: grid; gap: 2px; width: 100%; margin-top: var(--s-2); text-align: left; }
.cmp-name b { font-weight: 600; color: var(--ink); }
.cmp-name span { font-size: var(--fs-sm); color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

.page-head { display: flex; align-items: center; justify-content: space-between; padding: 14px var(--gutter) var(--s-3); }
.page-head h1 { margin: 0; font: 600 var(--fs-xl) var(--display); letter-spacing: -.03em; }

/* ===== Шторка ===== */
.sheet-backdrop { position: fixed; inset: 0; z-index: var(--z-backdrop); background: var(--backdrop); opacity: 0; pointer-events: none; transition: opacity var(--dur); }
.sheet-backdrop.show { opacity: 1; pointer-events: auto; }
.sheet { position: fixed; z-index: var(--z-sheet); left: 50%; bottom: 0; width: 100%; max-width: var(--app-max); max-height: calc(var(--vh) * .88); overflow-y: auto;
  padding: var(--s-2) var(--gutter) calc(18px + var(--safe-b)); border-radius: var(--r-xl) var(--r-xl) 0 0; background: var(--surface);
  transform: translate(-50%, 105%); transition: transform var(--dur-slow) var(--ease-out); }
.sheet.show { transform: translate(-50%, 0); }
.sheet .grab { width: 40px; height: 5px; margin: 0 auto var(--s-3); border-radius: var(--r-pill); background: var(--line); }
.sheet h3 { margin: var(--s-1) 0 14px; font: 600 var(--fs-xl) var(--display); letter-spacing: -.02em; }
.sheet h4 { margin: 24px 0 10px; font: 600 var(--fs-lead)/1.3 var(--display); color: var(--ink); }      /* раздел — сильнее подписей .f-sub */
.sheet h4:first-of-type { margin-top: 8px; }
/* клавиатура открыта (класс ставит app.js по visualViewport): запас — пустое место ДО футера, «Показать N» остаётся у низа шторки */
.sheet.kb { padding-bottom: calc(18px + var(--safe-b)); }
.sheet.kb > .sheet-actions { margin-top: 40vh; }
/* «Свой район, улица или ЖК» (docs/design-review/nearby-district-spec.md, A3) */
.sheet .f-own { margin-top: var(--s-3); display: grid; gap: var(--s-2); }
.sheet .f-own-chips:empty { display: none; }
.f-own-chip { gap: 6px; padding-right: 10px; }
.f-own-chip small { font-size: var(--fs-sm); opacity: .8; font-weight: 500; }
.f-own-chip svg { width: var(--ic-sm); height: var(--ic-sm); margin-left: 2px; }
.f-own-chip.just { animation: fOwnIn .6s var(--ease-out); }
@keyframes fOwnIn { 0% { transform: scale(.85); box-shadow: 0 0 0 0 color-mix(in srgb, var(--sun) 60%, transparent); }
  60% { transform: scale(1); box-shadow: 0 0 0 6px color-mix(in srgb, var(--sun) 0%, transparent); } }
.f-own-field { position: relative; scroll-margin: 96px 0 40vh; }
.f-own-field input { width: 100%; min-width: 0; height: var(--h-md); padding: 0 56px 0 var(--s-3);
  border-radius: var(--r-sm); border: 1px solid var(--field-border); background: var(--surface-2); color: var(--ink);
  font: 400 var(--fs-lead) var(--text); }          /* 16px — иначе iOS зумит страницу при фокусе */
.f-own-field input::placeholder { color: var(--muted); }
.f-own-field input:focus { outline: none; border-color: var(--sea); box-shadow: 0 0 0 3px color-mix(in srgb, var(--sea) 20%, transparent); }
/* 1rem здесь = 15px (корневой шрифт): меньше 16px iOS зумит страницу при фокусе и не возвращает */
.f-own-field input, .range input, .field input, .field select, .field textarea { font-size: max(16px, 1rem); }
.f-own-add { position: absolute; top: 4px; right: 4px; width: 40px; height: 40px; display: grid; place-items: center;
  border-radius: 9px; background: var(--sea); color: var(--sea-ink); transition: background var(--dur-fast), color var(--dur-fast); }
.f-own-add::after { content: ''; position: absolute; inset: -2px; }   /* зона нажатия 44×44 */
.f-own-add svg { width: var(--ic-md); height: var(--ic-md); stroke: currentColor; stroke-width: 2.2; fill: none; stroke-linecap: round; }
.f-own-add:disabled { background: transparent; color: var(--muted); cursor: default; }
.f-own-list { margin-top: calc(-1 * var(--s-1)); display: grid; border: 1px solid var(--line); border-radius: var(--r-sm); overflow: hidden; background: var(--surface); }
.f-own-list[hidden] { display: none; }
.f-own-opt { display: flex; align-items: center; gap: var(--s-2); min-height: var(--tap); padding: 0 var(--s-3); text-align: left; font-size: var(--fs-base); }
.f-own-opt + .f-own-opt { border-top: 1px solid var(--line); }
.f-own-opt .k { flex: none; width: 4.75em; min-width: 0; font-size: var(--fs-xs); color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
.f-own-opt b { flex: 1; min-width: 0; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.f-own-opt small { flex: none; color: var(--muted); font-size: var(--fs-sm); }
.f-own-opt:active, .f-own-opt[aria-selected="true"] { background: var(--surface-2); }
.f-own-hint { margin: 0; min-height: 0; font-size: var(--fs-sm); color: var(--muted); }
.f-own-hint:empty { display: none; }
.f-own-hint.warn { color: var(--warn-fg); }
.sheet-note { margin: 0 0 var(--s-3); color: var(--muted); font-size: var(--fs-md); }
.vw-none { margin: var(--s-1) 0 0; }
.opt-list { display: grid; gap: var(--s-1); }
.opt { display: flex; align-items: center; gap: 14px; width: 100%; padding: var(--s-3); border-radius: var(--r-md); text-align: left; font-weight: 500; }
.opt:active { background: var(--surface-2); }
.opt .ico { display: grid; place-items: center; width: 42px; height: 42px; border-radius: var(--r-sm); background: var(--sea-soft); color: var(--sea-text); }
.opt small { display: block; color: var(--muted); font-weight: 400; font-size: var(--fs-sm); }
/* Радио (выбор города, сортировка): кольцо с точкой внутри */
.opt.check::after { content: ''; flex: none; margin-left: auto; width: 20px; height: 20px; border-radius: var(--r-round); border: 2px solid var(--field-border); }
.opt.check.on::after { border-color: var(--sea); background: radial-gradient(circle, var(--sea) 0 5px, transparent 5.5px); }
.opt.soon { opacity: .55; }                           /* города без объектов */
.range { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-2); }
.toggle { display: flex; align-items: center; justify-content: space-between; padding: 10px 0; font-weight: 500; }
/* Тумблер: выключенный трек ≥ 3:1 к фону; при фокусе с клавиатуры — общее кольцо */
.toggle input { flex: none; appearance: none; width: 46px; height: 28px; margin: 0; border-radius: var(--r-pill); background: var(--field-border); position: relative; transition: background var(--dur); cursor: pointer; }
.toggle input::after { content: ''; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: var(--r-round); background: var(--paper); box-shadow: var(--sh-1); transition: left var(--dur); }
.toggle input:checked { background: var(--sea); }
.toggle input:checked::after { left: 21px; }
.sheet-actions { position: sticky; bottom: calc(-18px - var(--safe-b)); display: flex; gap: var(--s-2); margin: 18px calc(-1 * var(--gutter)) 0; padding: var(--s-3) var(--gutter) calc(var(--s-3) + var(--safe-b));
  background: var(--surface); border-top: 1px solid var(--line); }
.share-preview { display: flex; gap: var(--s-3); align-items: center; padding: 10px; border-radius: var(--r-md); background: var(--surface-2); margin-bottom: 10px; }
.share-preview > svg { width: 28px; height: 28px; margin: 0 6px; color: var(--sea); flex: none; }
.share-preview img { width: 64px; height: 52px; border-radius: var(--r-xs); object-fit: cover; }
.share-preview b { display: block; font-family: var(--display); font-weight: 600; }
.share-preview span { font-size: var(--fs-sm); color: var(--muted); }
.list-block { display: grid; gap: 2px; padding: 6px var(--s-3); }
.list-row { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line); cursor: pointer; }
.list-row:last-child { border-bottom: 0; }
.list-row > svg { color: var(--sea); width: var(--ic-lg); height: var(--ic-lg); }
.list-row span { flex: 1; font-weight: 500; font-size: var(--fs-md); }
.list-row small { display: block; color: var(--muted); font-weight: 400; font-size: var(--fs-sm); }

/* Запись на просмотр */
.days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.day { display: grid; gap: 2px; padding: var(--s-2) 0; border-radius: var(--r-sm); background: var(--surface-2); text-align: center; }
.day small { font-size: var(--fs-xs); color: var(--muted); }
.day b { font: 600 var(--fs-lead) var(--display); }
.day.on { background: var(--sea); color: var(--sea-ink); }
.day.on small { color: inherit; opacity: .8; }
.days .day.off { opacity: .4; }
.times { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; }
.times .chip { text-align: center; padding: 9px 0; }

/* Просмотр фото */
.viewer { position: fixed; inset: 0; z-index: var(--z-viewer); display: none; background: var(--media-bg); }
.viewer.show { display: block; }
.viewer .track { display: flex; height: 100%; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; }
.viewer img { flex: none; width: 100%; height: 100%; object-fit: contain; scroll-snap-align: center; }
.viewer .close { position: absolute; top: 14px; right: 14px; }

/* Тост: длинный текст переносится и не вылезает за экран */
.toast { position: fixed; z-index: var(--z-toast); left: 50%; bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-4)); transform: translate(-50%, 20px);
  width: max-content; max-width: min(calc(var(--app-max) - 2 * var(--gutter)), calc(100% - 2 * var(--gutter)));
  padding: 11px var(--s-4); border-radius: var(--r-md); background: var(--ink); color: var(--bg); font-weight: 500; font-size: var(--fs-md); line-height: 1.35; text-align: center;
  overflow-wrap: anywhere; opacity: 0; pointer-events: none; transition: opacity var(--dur), transform var(--dur); }
.toast.show { opacity: 1; transform: translate(-50%, 0); }

/* ===== Вход риелтора, формы ===== */
.join { display: grid; gap: 14px; }
.join-row { display: flex; gap: var(--s-3); align-items: flex-start; }
.join-row b { display: block; }
.join-row span { font-size: var(--fs-md); color: var(--muted); }
.ok-dot { flex: none; display: grid; place-items: center; width: 28px; height: 28px; border-radius: var(--r-round); background: var(--sea); color: var(--sea-ink); font-weight: 700; font-size: var(--fs-md); }
.ok-dot.wait { background: var(--surface-2); color: var(--muted); }
.join-row .ok-dot { color: var(--sea-ink); font-size: var(--fs-md); }   /* .join-row span красил галочку серым */
.join-row .ok-dot.wait { color: var(--muted); }
.join-error { margin: 0; color: var(--danger); font-weight: 500; }   /* 6.5:1 на белом; было мандарином 2.46 */
.add-form .two { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; }
.add-form .two > .field { align-content: start; }      /* подсказка под одним полем не сдвигает соседнее */
.add-form .deal-switch button { min-width: 0; font-size: var(--fs-sm); }
.photo-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-top: var(--s-1); }
/* своё видео объекта в форме правки: посмотреть и удалить (загрузка — через бота) */
.form-video { display: block; width: 100%; max-height: 220px; margin: var(--s-1) 0; border-radius: 12px; background: #000; }
.add-form .field > .chip.danger { justify-self: start; width: auto; }
.ph { position: relative; aspect-ratio: 1; border-radius: var(--r-xs); overflow: hidden; background: var(--surface-2); }
.ph img { width: 100%; height: 100%; object-fit: cover; }
/* Удалить фото: зона 44×44, видимый кружок 26px */
.ph button { position: absolute; top: 0; right: 0; display: grid; place-items: center; width: var(--tap); height: var(--tap); color: var(--on-photo); }
.ph button svg { width: 26px; height: 26px; padding: 6px; border-radius: var(--r-round); background: var(--scrim); box-sizing: border-box; }
.ph.add { display: grid; place-items: center; font-size: var(--fs-3xl); color: var(--sea); border: 1.5px dashed var(--field-border); cursor: pointer; }
.ph.add:focus-within, .doc-pick:focus-within { outline: 2px solid var(--sea); outline-offset: 2px; }
/* Проверка по ИП */
.doc-pick { display: flex; align-items: center; gap: 10px; min-height: var(--h-md); padding: 0 var(--s-3); border-radius: var(--r-sm); border: 1.5px dashed var(--field-border);
  background: var(--surface-2); color: var(--ink); font-weight: 500; cursor: pointer; overflow: hidden; }
.doc-pick svg { color: var(--sea); flex: none; }
.doc-pick span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.reg-box { display: grid; gap: var(--s-1); padding: 10px var(--s-3); border-radius: var(--r-sm); background: var(--surface-2); }
.reg-head { display: flex; align-items: center; gap: var(--s-2); }
.reg-box .seg { margin-top: var(--s-1); }

/* ===== Мои объекты, админка ===== */
.my { margin: 0; display: grid; gap: var(--s-2); }
.my .st-head { margin: 0; }
.my-note { margin: 0; font-size: var(--fs-md); color: var(--muted); white-space: pre-wrap; }
.reasons { margin: 0; padding-left: 18px; font-size: var(--fs-md); }
.reasons li { margin: 2px 0; }
.report { margin: 10px 0; padding: 10px; border-radius: var(--r-xs); background: var(--surface-2); font: var(--fs-sm)/1.4 var(--text); white-space: pre-wrap; }
.mod-photos { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--s-1); }
.mod-photos img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--r-xs); }
.inv-link { display: block; padding: var(--s-2) 10px; border-radius: var(--r-xs); background: var(--surface-2); font-size: var(--fs-sm); word-break: break-all; }

/* ===== Кабинет риелтора ===== */
/* Шапка кабинета и админки: заголовок в одну строку, компактная кнопка справа */
.cab-head { gap: var(--s-2); }
.cab-head h1 { min-width: 0; letter-spacing: -.04em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.head-btns { display: flex; gap: 6px; flex: none; }
.head-add { flex: none; }
.head-sec { flex: none; background: var(--surface); color: var(--ink); }

.lead { margin: 0; display: grid; gap: var(--s-2); }
.lead-head { display: flex; justify-content: space-between; gap: 10px; }
.lead-head b { display: block; font-size: var(--fs-lead); }
.lead-head .link { font-size: var(--fs-md); }
.lead-ch { display: flex; gap: 6px; color: var(--sea); }
.lead-ch svg { width: var(--ic-md); height: var(--ic-md); }
.lead-obj { text-align: left; font-weight: 600; color: var(--sea-text); }
.lead-meta { font-size: var(--fs-sm); color: var(--muted); }
.lead-meta svg { width: var(--ic-xs); height: var(--ic-xs); vertical-align: -2px; }
.st-row { margin: 0; cursor: pointer; }
.st-head { display: flex; gap: var(--s-3); align-items: center; margin-bottom: var(--s-3); }
.st-head img { flex: none; width: 56px; height: 44px; border-radius: var(--r-xs); object-fit: cover; }
.st-head b { display: block; }
.st-head span { font-size: var(--fs-sm); color: var(--muted); }
/* 5 чисел на 375px не помещаются в строку: 3 + 2, подписи переносятся, а не налезают */
.st-nums { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-3) var(--s-1); text-align: center; }
.st-nums b { display: block; font: 600 var(--fs-lead) var(--display); }
.st-nums span { display: block; font-size: var(--fs-xs); line-height: 1.25; color: var(--muted); overflow-wrap: anywhere; }

/* Запись на показ в карточке заявки */
.lead-vw { display: flex; gap: 10px; align-items: flex-start; margin: 10px 0 2px; padding: 10px var(--s-3); border-radius: var(--r-sm); background: var(--sea-soft); }
.lead-vw > svg { width: var(--ic-lg); height: var(--ic-lg); margin-top: 2px; color: var(--sea); flex: none; }
.lead-vw b { display: block; font-size: var(--fs-base); }
.lead-vw span { display: block; font-size: var(--fs-sm); color: var(--muted); }
.lead-vw.requested { background: var(--sun-soft); }
.lead-vw.requested > svg { color: var(--sun-text); }
.lead-vw.confirmed { background: var(--ok-soft); }
.lead-vw.confirmed > svg, .lead-vw.confirmed span:first-of-type { color: var(--ok-fg); }
.lead-vw.declined, .lead-vw.past { background: var(--surface-2); }
.lead-vw .lead-vw-note { margin-top: var(--s-1); color: var(--ink); font-style: italic; }
.lead-vw-actions { display: flex; gap: var(--s-2); margin: var(--s-2) 0 var(--s-1); }
.lead-vw-actions .btn { min-height: var(--tap); }
.lead-vw-actions .chip { min-height: var(--tap); padding: 0 var(--s-4); }

/* Кабинет → «Мои объекты»: компактный список инструментов (витрина, значок, канал) */
.cab-tools { margin: var(--s-2) var(--gutter) var(--s-3); padding: 0 14px; }
.tool-row { display: flex; align-items: center; gap: var(--s-3); width: 100%; min-height: var(--h-md); padding: 6px 0; text-align: left; font-weight: 500; font-size: var(--fs-base);
  border-bottom: 1px solid var(--line); cursor: pointer; }
div.tool-row { cursor: default; }
.cab-tools > :last-child, .cab-tools > :last-child > .tool-row { border-bottom: 0; }
.tool-row > svg { width: var(--ic-lg); height: var(--ic-lg); color: var(--sea); }
.tool-row > span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tool-row small { display: block; font-size: var(--fs-sm); font-weight: 400; color: var(--muted); overflow: hidden; text-overflow: ellipsis; }
.tool-chev { display: grid; place-items: center; color: var(--muted); font-style: normal; transform: rotate(-90deg); transition: transform var(--dur); }
/* Автоимпорт из канала */
.ch-tool > summary { list-style: none; }
.ch-tool > summary::-webkit-details-marker { display: none; }
.ch-tool[open] > summary .tool-chev { transform: rotate(0); }
.cab-tools .ch-tool[open] > summary { border-bottom: 1px solid var(--line); }
.ch-body { display: grid; gap: var(--s-2); padding: 10px 0 14px; }
.ch-steps { margin: 0; padding-left: var(--s-5); display: grid; gap: 6px; font-size: var(--fs-md); }
.ch-on .toggle { flex: none; gap: var(--s-2); padding: 0; }
.ch-on .toggle small { font-size: var(--fs-sm); color: var(--muted); font-weight: 500; }

/* Расписание показов */
.sch-lead { margin: 0 var(--gutter) var(--s-3); color: var(--muted); font-size: var(--fs-md); }
.sch-days { display: grid; }
.sch-day { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 52px; border-bottom: 1px solid var(--line); }
.sch-day:last-child { border-bottom: 0; }
.sch-day .toggle { flex: 1; min-width: 0; flex-direction: row-reverse; justify-content: flex-end; gap: var(--s-3); padding: 0; font-weight: 500; }
.sch-day.off .toggle { color: var(--muted); }
.sch-hours, .sch-break { display: flex; align-items: center; gap: 6px; }
/* Время — компактные поля (h-sm) */
.sch-hours input, .sch-break input { width: 84px; height: var(--h-sm); padding: 0 var(--s-2); font-weight: 500; }
.sch-hours input::-webkit-calendar-picker-indicator, .sch-break input::-webkit-calendar-picker-indicator { display: none; }
.sch-hours span, .sch-break span { color: var(--muted); }
.sch-offlabel { color: var(--muted); font-size: var(--fs-md); }
.sch-copy { margin-top: var(--s-3); }
.sch-break { margin-bottom: var(--s-2); }
.sch-break .chip { min-width: var(--tap); min-height: var(--h-sm); display: grid; place-items: center; padding: 0; }
.sch-break .chip svg { width: var(--ic-md); height: var(--ic-md); }
.sch-off { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.sch-off .day.on { background: var(--sun); color: var(--ink-fixed); }
.sch-off .day.on small { color: var(--ink-fixed); }
.sch-off .day.off { opacity: .4; }
.sch-preview { margin: var(--s-1) var(--gutter) 0; padding: var(--s-3) 14px; border-radius: var(--r-md); background: var(--sea-soft); font-size: var(--fs-md); }
.vw-sched { display: flex; gap: var(--s-2); align-items: flex-start; }
.vw-sched svg { width: var(--ic-md); height: var(--ic-md); flex: none; margin-top: 1px; color: var(--sea); }

/* ===== Подробная страница ЖК ===== */
.cx-page .gallery { aspect-ratio: 16 / 11; }
.cx-price { display: grid; gap: 2px; margin: var(--s-3) 0 10px; padding: var(--s-3) 14px; border-radius: var(--r-md); background: var(--sea-soft); }
.cx-price b { font: 600 var(--fs-2xl) var(--display); color: var(--sea-text); }    /* цена ориентиром */
.cx-price span { font-size: var(--fs-sm); color: var(--muted); }
.cx-blocks { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-2); }
.cx-block:only-child, .cx-block:last-child:nth-child(odd) { grid-column: 1 / -1; }   /* один корпус или последний нечётный — на всю ширину */
.cx-block { display: grid; gap: var(--s-1); align-content: start; padding: var(--s-3); border-radius: var(--r-md); background: var(--surface-2); border: 1.5px solid transparent; }
.cx-block.live { border-color: var(--sea); }
.cx-block .st-badge { justify-self: start; margin-left: 0; }
.cx-finish { display: grid; gap: 10px; }
.cx-finish > div { display: grid; grid-template-columns: 96px 1fr; grid-template-rows: auto 1fr; column-gap: var(--s-3); }
.cx-finish img { grid-row: span 2; width: 96px; height: 78px; object-fit: cover; border-radius: var(--r-xs); }
.cx-finish > div.no-img { grid-template-columns: 1fr; }
.cx-finish p { margin: 2px 0 0; font-size: var(--fs-sm); color: var(--muted); }
.cx-timeline { list-style: none; margin: 0; padding: 0 0 0 18px; border-left: 2px solid var(--line); display: grid; gap: 14px; }
.cx-timeline li { position: relative; display: grid; gap: 1px; }
.cx-timeline li::before { content: ''; position: absolute; left: -25px; top: 3px; width: 12px; height: 12px; border-radius: var(--r-round); background: var(--surface); border: 2px solid var(--line); }
.cx-timeline li.done::before { background: var(--sea); border-color: var(--sea); }
.cx-timeline b { font-size: var(--fs-sm); color: var(--sea-text); }
.cx-timeline small { font-size: var(--fs-xs); color: var(--muted); }
.cx-dev { display: grid; gap: 2px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.cx-dev span { font-size: var(--fs-sm); color: var(--muted); }
.cx-photos-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin-top: var(--s-3); }
.cx-photos-row img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: var(--r-xs); cursor: zoom-in; }
.cx-photos-row:has(> img:nth-child(2):last-child) { grid-template-columns: 1fr 1fr; }
.cx-photos-row:has(> img:nth-child(2):last-child) img { aspect-ratio: 4 / 3; }
/* «Что рядом» у ЖК — тексты, а не минуты: строки «значок | подпись над значением», на широком экране в две колонки */
.cx-near { grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr)); gap: var(--s-2); margin-top: var(--s-3); }
.cx-near div { grid-template-columns: var(--ic-lg) 1fr; align-items: start; column-gap: var(--s-3); row-gap: 2px; padding: 12px 14px; }
.cx-near svg { grid-row: span 2; margin-top: 2px; }
.cx-near span { font-size: var(--fs-xs); }
.cx-near b { font-size: var(--fs-sm); font-weight: 500; line-height: 1.4; overflow-wrap: anywhere; }
.cx-carousel { margin-bottom: 14px; scroll-padding: 0 var(--gutter); }
.cx-carousel .card { width: 100%; }
.cx-carousel .gallery { aspect-ratio: 16 / 11; }
.cx-carousel .price-sub { margin-top: 6px; color: var(--sea-text); font-weight: 600; }

/* ===== Подборки для клиента ===== */
.pk-stats { display: flex; gap: 14px; font-size: var(--fs-sm); color: var(--muted); }
.pk-stats span { display: inline-flex; align-items: center; gap: var(--s-1); }
.pk-stats svg { width: var(--ic-sm); height: var(--ic-sm); }
.pk-pool { display: grid; gap: var(--s-2); padding: var(--s-3) var(--gutter) 0; }
.pk-row { display: grid; grid-template-columns: 64px 1fr 28px; gap: var(--s-3); align-items: center; padding: var(--s-2); border-radius: var(--r-md); background: var(--surface);
  text-align: left; border: 1.5px solid transparent; }
.pk-row img { width: 64px; height: 52px; object-fit: cover; border-radius: var(--r-xs); }
.pk-row b { display: block; font: 600 var(--fs-base) var(--display); }
.pk-row small { display: block; color: var(--muted); font-size: var(--fs-sm); }
.pk-check { display: grid; place-items: center; width: 26px; height: 26px; border-radius: var(--r-round); border: 2px solid var(--field-border); color: transparent; }
.pk-check svg { width: var(--ic-sm); height: var(--ic-sm); stroke-width: 3; }
.pk-row.on { border-color: var(--sea); }
.pk-row.on .pk-check { background: var(--sea); border-color: var(--sea); color: var(--sea-ink); }
.pk-rep.liked { border: 1.5px solid var(--ok); }
.pk-mark { display: inline-block; width: 18px; text-align: center; }
.pk-mark.like { color: var(--like-fg); }
.pk-mark.dislike { color: var(--muted); }
.pk-head { display: flex; gap: var(--s-3); align-items: center; padding: 6px var(--gutter) var(--s-1); }
.pk-head img { width: 44px; height: 44px; border-radius: var(--r-round); object-fit: cover; }
.pk-head b { display: block; font: 600 var(--fs-lead) var(--display); letter-spacing: -.02em; }
.pk-head span { font-size: var(--fs-sm); color: var(--muted); }
.pk-note { margin: 6px var(--gutter) 0; padding: 10px var(--s-3); border-radius: var(--r-sm); background: var(--sea-soft); font-size: var(--fs-md); }
.pk-progress { display: flex; gap: var(--s-1); padding: var(--s-3) var(--gutter) 0; }
.pk-progress i { flex: 1; height: var(--s-1); border-radius: var(--r-pill); background: var(--line); }
.pk-progress i.cur { background: var(--ink); }
.pk-progress i.like { background: var(--like); }
.pk-progress i.no { background: var(--muted); }
.pk-deck { position: relative; height: calc(var(--vh) - 330px - var(--safe-b)); min-height: 380px; margin: var(--s-3) var(--gutter) 0; }
.pk-card { position: absolute; inset: 0; border-radius: var(--r-lg); overflow: hidden; background: var(--surface-2); box-shadow: var(--sh-3);
  touch-action: pan-y; user-select: none; cursor: grab; transition: transform var(--dur-mid) ease, opacity var(--dur-mid) ease; }
.pk-card.drag { transition: none; cursor: grabbing; }
.pk-card.back { transform: scale(.95) translateY(10px); opacity: .7; box-shadow: none; }
.pk-card img { width: 100%; height: 100%; object-fit: cover; pointer-events: none; }
.pk-info { position: absolute; left: 0; right: 0; bottom: 0; display: grid; gap: 2px; padding: 60px 18px 18px; color: var(--on-photo);
  background: linear-gradient(transparent, var(--scrim-strong)); }
.pk-info .price { font-size: var(--fs-3xl); color: var(--on-photo); }
.pk-info b { font-size: var(--fs-lead); }
.pk-info span { font-size: var(--fs-md); opacity: .9; }
.pk-sea svg { width: 15px; height: 15px; margin-right: 3px; vertical-align: -3px; }
.pk-segs { position: absolute; top: 10px; left: var(--s-3); right: var(--s-3); display: flex; gap: var(--s-1); z-index: var(--z-raised); }
.pk-segs i { flex: 1; height: 3px; border-radius: var(--r-pill); background: color-mix(in srgb, var(--on-photo) 45%, transparent); }
.pk-segs i.on { background: var(--on-photo); }
.pk-stamp { position: absolute; top: 34px; padding: 6px 14px; border: 3px solid; border-radius: var(--r-sm); font: 700 var(--fs-xl) var(--display); opacity: 0;
  transition: opacity var(--dur-fast); background: var(--photo-btn); }
.pk-stamp.like { left: 18px; color: var(--ok-fg); transform: rotate(-12deg); }
.pk-stamp.no { right: 18px; color: var(--ink-fixed); transform: rotate(12deg); }   /* «нет» нейтральный, мандарин — только «нравится» */
.pk-card.to-like .pk-stamp.like, .pk-card.fly-like .pk-stamp.like { opacity: 1; }
.pk-card.to-no .pk-stamp.no, .pk-card.fly-no .pk-stamp.no { opacity: 1; }
/* Улёт карточки (inline-transform от перетаскивания сбрасывается в pickReact) */
.pk-card.fly-like { transform: translateX(130%) rotate(18deg); opacity: 0; }
.pk-card.fly-no { transform: translateX(-130%) rotate(-18deg); opacity: 0; }
/* ♥ — залитая главная, ✕ — нейтральная */
.pk-actions { display: flex; justify-content: center; align-items: center; gap: 18px; margin-top: var(--s-4); }
.pk-btn { display: grid; place-items: center; width: 64px; height: 64px; border-radius: var(--r-round); background: var(--surface); box-shadow: var(--sh-2); }
.pk-btn svg { width: var(--ic-xl); height: var(--ic-xl); stroke-width: 2.4; }
.pk-btn.no { color: var(--muted); }
.pk-btn.like { background: var(--sun); color: var(--ink-fixed); }
.pk-btn.like svg { fill: currentColor; }
.pk-btn.more { width: auto; height: auto; min-height: var(--tap); padding: 0 18px; border-radius: var(--r-pill); font-weight: 600; font-size: var(--fs-md); }
.pk-hint { margin: var(--s-3) var(--gutter) 0; text-align: center; font-size: var(--fs-sm); color: var(--muted); }
.pk-thumb { width: 56px; height: 44px; object-fit: cover; border-radius: var(--r-xs); }

/* ===== Витрина риелтора ===== */
.sc { --sc-accent: var(--sea); padding-bottom: var(--s-2); }
.sc-cover { position: relative; aspect-ratio: 3 / 1; margin: 0 var(--gutter); border-radius: var(--r-lg); background-size: cover; background-position: center; }
.sc-logo { position: absolute; right: var(--s-3); bottom: var(--s-3); width: 56px; height: 56px; padding: 6px; border-radius: var(--r-sm); background: var(--paper); object-fit: contain;
  box-shadow: var(--sh-2); }
.sc-head { display: grid; justify-items: center; text-align: center; margin-top: -46px; padding: 0 var(--s-5); position: relative; }
.sc-avatar { width: 96px; height: 96px; border-radius: var(--r-round); object-fit: cover; border: 4px solid var(--bg); background: var(--surface-2); }
.sc-head h1 { margin: 10px 0 0; font: 600 var(--fs-2xl) var(--display); letter-spacing: -.03em; }
.sc-headline { margin: var(--s-1) 0 0; color: var(--muted); font-size: var(--fs-base); }
.sc-stats { display: flex; gap: 18px; margin-top: var(--s-3); font-size: var(--fs-sm); color: var(--muted); }
.sc-stats span { display: grid; }
.sc-stats b { font: 600 var(--fs-lead) var(--display); color: var(--ink); }
.sc-bio { margin: var(--s-3) 0 0; font-size: var(--fs-base); line-height: 1.5; }
.sc-links { display: grid; gap: 10px; padding: 18px var(--gutter) 0; }
.sc-link { display: grid; grid-template-columns: 24px 1fr 24px; align-items: center; min-height: 54px; padding: 0 18px; border-radius: var(--r-md); background: var(--sc-accent);
  color: var(--on-photo); font-weight: 600; font-size: var(--fs-lead); box-shadow: var(--sh-2); }
.sc-link span { text-align: center; }
.sc-link svg { width: var(--ic); height: var(--ic); }
.sc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 0 var(--gutter); }
.sc-item { display: grid; gap: 2px; padding: 0 0 10px; border-radius: var(--r-md); overflow: hidden; background: var(--surface); text-align: left; }
.sc-item img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; margin-bottom: 6px; }
.sc-item b, .sc-item span, .sc-item small { padding: 0 10px; }
.sc-item b { font: 600 var(--fs-base) var(--display); }
.sc-item span { font-size: var(--fs-sm); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sc-item small { font-size: var(--fs-xs); color: var(--muted); }
.sc-foot { padding: 18px var(--gutter) 0; text-align: center; }
.sc-foot p { margin: var(--s-3) 0 0; font-size: var(--fs-xs); color: var(--muted); }
.sc-preview { margin: 0 0 var(--s-1); padding: var(--s-3) 0 14px; border-radius: 0; background: var(--surface-2); pointer-events: none; max-height: 520px; overflow: hidden;
  -webkit-mask-image: linear-gradient(black 85%, transparent); mask-image: linear-gradient(black 85%, transparent); }
.sc-swatches { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.sc-swatch { width: 56px; height: 36px; border-radius: var(--r-xs); border: 2px solid transparent; outline: 2px solid transparent; display: grid; place-items: center; }
.sc-swatch.round { width: 34px; height: 34px; border-radius: 50%; }
.sc-swatch.on { outline-color: var(--ink); outline-offset: 2px; }
.sc-swatch.upload { background: var(--surface-2); border: 1.5px dashed var(--field-border); color: var(--muted); cursor: pointer; }
.sc-swatch.upload svg { width: var(--ic-md); height: var(--ic-md); }
.sc-link-edit { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; padding: 10px; border-radius: var(--r-md); background: var(--surface-2); }
.sc-link-edit select, .sc-link-edit input { height: var(--h-sm); background: var(--surface); font-size: var(--fs-md); }
.sc-link-edit input[data-f="url"] { grid-column: span 2; }
.sc-link-ops { grid-column: span 2; display: flex; gap: 6px; justify-content: flex-end; }
.sc-link-ops .chip { min-width: var(--tap); min-height: var(--tap); }

body.clean .top, body.clean .tabbar { display: none; }
body.clean #app { padding-bottom: var(--s-6); }
body.clean .sc { padding-top: var(--s-3); }

/* ===== Нажатия ≥ 44px: невидимая зона вокруг мелких кнопок, визуально без изменений ===== */
.search .filter-btn, .translate .chip { position: relative; }
.locale::after, .search .filter-btn::after, .on-photo .round::after, .translate .chip::after,
.brand::after, .to-top::after, .btn.sm::after, .amen.pick::after, .deal-switch button::after, .map-mode button::after {
  content: ''; position: absolute; left: 50%; top: 50%; width: max(100%, var(--tap)); height: max(100%, var(--tap)); transform: translate(-50%, -50%); }

/* Маленькая карта: кнопка «На большой карте» поверх карты */
.mini-map-open { position: absolute; left: 10px; bottom: 10px; z-index: var(--z-raised); display: inline-flex; align-items: center; gap: 6px; min-height: var(--h-xs); padding: 0 14px;
  border-radius: var(--r-pill); background: var(--surface); color: var(--ink); font-weight: 600; font-size: var(--fs-sm); box-shadow: var(--sh-2); }
.mini-map-open::after { content: ''; position: absolute; inset: -4px; }
.mini-map .maplibregl-ctrl-group { border-radius: var(--r-sm); overflow: hidden; }
.mini-map .maplibregl-ctrl-group button { width: var(--h-xs); height: var(--h-xs); }

/* Подсказка в легенде карты цен */
.pm-hint { margin: var(--s-2) 0 0; font-size: var(--fs-xs); color: var(--muted); }

/* Политика конфиденциальности внутри приложения */
.policy { margin: var(--s-3) var(--gutter); }
.policy h1 { font: 600 var(--fs-2xl)/1.2 var(--display); margin: 0 0 var(--s-1); }
.policy h2 { font-size: var(--fs-lg); margin: var(--s-6) 0 var(--s-2); }
.policy p, .policy li { font-size: var(--fs-md); line-height: 1.55; }
.policy ul { padding-left: var(--s-5); }
.policy .meta { color: var(--muted); font-size: var(--fs-sm); }
.policy .fill { background: color-mix(in srgb, var(--sun) 22%, transparent); border-radius: var(--r-2xs); padding: 0 3px; }
.join-privacy { margin: 0 var(--gutter) var(--s-3); font-size: var(--fs-sm); color: var(--muted); }
.privacy-link { color: var(--sea-text); text-decoration: underline; font-size: inherit; }

/* Кнопка кабинета — только для риелторов и админа */
.pro-only[hidden] { display: none; }

/* Форма объекта: черновик и точка на карте */
.draft-note { margin: 0 var(--gutter) var(--s-2); font-size: var(--fs-sm); color: var(--muted); min-height: 1em; }
.form-map { height: 200px; margin-top: var(--s-2); }

/* Нижняя панель объявления: «Просмотр» с подписью */
.action-bar .vw-btn { flex: 0 1 auto; padding: 0 var(--s-4); }
/* Кластер меток на карте: число объектов и минимальная цена */
.pin-cluster { display: grid; justify-items: center; gap: 1px; min-width: 52px; min-height: 52px; padding: 7px 10px; border-radius: var(--r-pill);
  background: var(--sea); color: var(--sea-ink); border: 3px solid var(--surface); box-shadow: var(--sh-2); cursor: pointer; }
.pin-cluster b { font: 700 var(--fs-md)/1 var(--display); }
.pin-cluster span { font-size: var(--fs-2xs); opacity: .85; white-space: nowrap; }

/* Фильтры: районы сгруппированы по городам */
.sheet .f-city { margin: var(--s-3) 0 var(--s-2); font-size: var(--fs-sm); font-weight: 600; color: var(--muted); }
.sheet .f-hint { margin: 0; }
/* полный фильтр: подписи внутри группы («Отделка», «Вид»…), «Ещё N» у длинной группы */
.sheet .f-sub { margin: 14px 0 8px; font-size: var(--fs-sm); font-weight: 500; color: var(--muted); }
.sheet h4 + .f-sub { margin-top: 0; }
.sheet .seg.f-collapsed .f-x { display: none; }
/* «Ещё N» — раскрывашка-ссылка, а не ещё один вариант */
.sheet .chip.f-more { border-color: transparent; background: transparent; color: var(--sea-text); font-weight: 600; padding-inline: 8px; }
.sheet .chip.f-more::after { content: ''; width: 8px; height: 8px; margin-left: 6px; border: solid currentColor; border-width: 0 2px 2px 0; transform: rotate(45deg) translateY(-2px); }

/* === Заявки и показы (агент 2) === */
/* «Сегодня» в кабинете */
.td-block h2 { display: flex; align-items: center; gap: var(--s-2); }
/* OW2-B */
.ow2c-seg { margin: var(--s-2) var(--gutter) 0; }
.ow2c-ls { margin: var(--s-3) var(--gutter) var(--s-2); }
.lead-ag { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); }
.lead-ro-note { margin: 0; font-size: var(--fs-sm); color: var(--muted); }
.td-soon .td-ag { color: var(--muted); font-weight: 500; }
/* /OW2-B */
.td-block h2 svg { width: var(--ic-lg); height: var(--ic-lg); color: var(--sea); }
.td-day { margin: var(--s-3) 0 var(--s-2); font-size: var(--fs-sm); font-weight: 600; color: var(--muted); }
.td-day:first-of-type { margin-top: 0; }
.td-vw { display: flex; gap: var(--s-3); padding: var(--s-3); margin-bottom: var(--s-2); border-radius: var(--r-sm); background: var(--surface-2); }
.td-vw.requested { background: var(--sun-soft); }
.td-vw.confirmed { background: var(--ok-soft); }
.td-time { display: grid; align-content: start; min-width: 52px; }
.td-time b { font: 600 var(--fs-xl)/1 var(--display); }
.td-time small { margin-top: var(--s-1); font-size: var(--fs-xs); color: var(--muted); }
.td-body { display: grid; gap: var(--s-1); min-width: 0; flex: 1; }
.td-body .lead-obj { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.td-user { font-size: var(--fs-md); color: var(--muted); font-weight: 400; }
.td-st { display: block; font-size: var(--fs-sm); color: var(--muted); }
.td-actions { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-top: var(--s-1); }
.td-leads { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-3); }
.td-call { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--s-3); padding: var(--s-2) 0; border-top: 1px solid var(--line); }
.td-call:first-of-type { border-top: 0; padding-top: 0; }
.td-call.overdue .td-st { color: var(--bad-fg); }
.td-call .lead-vw-note { display: block; font-size: var(--fs-sm); font-style: italic; }
/* «Ближайшие 7 дней»: дата под названием, а не правой колонкой — название не ломается на 3 строки */
.td-soon { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; width: 100%; min-height: var(--tap); padding: var(--s-2) 0; border-top: 1px solid var(--line); text-align: left; }
.td-soon:first-of-type { border-top: 0; }
.td-soon span { font-size: var(--fs-sm); color: var(--muted); }
/* Заявка: заметка в ленте и карточка */
.lead-note { font-size: var(--fs-md); padding: var(--s-2) var(--s-3); border-radius: var(--r-sm); background: var(--surface-2); white-space: pre-wrap; }
.lc-open { min-height: var(--h-sm); font-size: var(--fs-md); }
.lc-contact { display: flex; gap: var(--s-2); margin: var(--s-3) 0; }
.lc-contact .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--s-2); }
.lc-contact .btn:first-child { flex: 1; }
.lc-contact svg { width: var(--ic-md); height: var(--ic-md); }
.lc-h { display: flex; justify-content: space-between; align-items: baseline; }
.lc-tpls { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.lc-remind { display: flex; gap: var(--s-2); align-items: center; flex-wrap: wrap; }
.lc-remind input { flex: 1; min-width: 0; height: var(--h-md); padding: 0 var(--s-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); font: inherit; }
.lc-tpl-edit { display: grid; gap: var(--s-2); margin-bottom: var(--s-3); }
.lc-tpl-row { display: flex; gap: var(--s-2); }
.lc-tpl-edit input, .lc-tpl-edit textarea { width: 100%; min-width: 0; padding: var(--s-2) var(--s-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); font: inherit; }
.lc-tpl-edit input { height: var(--h-md); }
.lc-tpl-edit textarea { resize: vertical; }
/* Полоса дней, если их больше недели: прокрутка вбок */
.days.scroll { display: flex; overflow-x: auto; scrollbar-width: none; margin: 0 calc(-1 * var(--gutter)); padding: 0 var(--gutter); }
.days.scroll::-webkit-scrollbar { display: none; }
.days.scroll .day { flex: 0 0 calc((100% - 6 * 6px) / 7.5); }
/* Выходные: диапазон дат и список */
.sch-sub { margin: var(--s-4) 0 var(--s-2); font-size: var(--fs-sm); font-weight: 600; color: var(--muted); }
.sch-range { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-2); margin-bottom: var(--s-2); }
.sch-range label { display: grid; gap: var(--s-1); font-size: var(--fs-sm); color: var(--muted); }
.sch-range input { min-width: 0; height: var(--h-md); padding: 0 var(--s-2); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); font: inherit; }
.sch-offrow { display: flex; justify-content: space-between; align-items: center; gap: var(--s-2); padding: var(--s-2) 0; border-top: 1px solid var(--line); }
.sch-offrow:first-of-type { border-top: 0; }
.sch-offrow .chip svg { width: var(--ic-xs); height: var(--ic-xs); }

/* Подсказки поиска */
.suggest { margin: var(--s-1) var(--gutter) 0; border-radius: var(--r-md); background: var(--surface); box-shadow: var(--sh-2); overflow: hidden; }
.suggest button { display: flex; align-items: center; gap: var(--s-3); width: 100%; min-height: var(--tap); padding: var(--s-2) var(--s-4); text-align: left; border-bottom: 1px solid var(--line); }
.suggest button:last-child { border-bottom: 0; }
.suggest .sg-kind { flex: none; padding: 2px 8px; border-radius: var(--r-pill); background: var(--surface-2); font-size: var(--fs-2xs); line-height: 1.4; color: var(--muted); white-space: nowrap; }
.suggest b { flex: 1; min-width: 0; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.suggest small { color: var(--muted); font-size: var(--fs-xs); }

/* Быстрые метки над лентой: одна строка с прокруткой, справа затухание */
.feed-chips { -webkit-mask-image: linear-gradient(90deg, black calc(100% - 28px), transparent); mask-image: linear-gradient(90deg, black calc(100% - 28px), transparent); }
.feed-chips.at-end { -webkit-mask-image: none; mask-image: none; }

/* === Кабинет, статистика, подборки (агент 3) === */
/* Вкладки кабинета и админки — в нижнем таббаре (.pro-tabbar, блок «Логика и навигация») */
/* Кнопка кабинета в шапке: подпись видна всегда (.pro-btn, блок агента app.js); без .pro-btn — только иконка */
.pro-label { display: none; }
/* Незаполненные поля формы и ошибки в ссылках витрины */
.field input.invalid, .field select.invalid, .field textarea.invalid, .sc-link-edit input.invalid { border-color: var(--bad-fg); box-shadow: 0 0 0 3px color-mix(in srgb, var(--bad-fg) 18%, transparent); }
/* Цена аренды в лари второй строкой */
.price-gel { margin-top: 2px; font-size: var(--fs-sm); color: var(--muted); }
/* Статистика: период и свёрнутые снятые объекты */
.st-period { margin: var(--s-2) var(--gutter); }
.st-total + .calc-note { display: block; margin-top: var(--s-2); }
.st-gone { margin: var(--s-3) var(--gutter); }
.st-gone summary { min-height: var(--tap); display: flex; align-items: center; font-weight: 600; color: var(--muted); cursor: pointer; }
.st-gone .feed { padding: 0; }
.st-row.gone { cursor: default; opacity: .75; }
/* Конструктор подборки: фильтры */
.pk-filters { display: grid; gap: var(--s-2); padding: var(--s-3) var(--gutter) 0; }
.pk-max { display: flex; align-items: center; gap: var(--s-2); font-size: var(--fs-sm); color: var(--muted); }
.pk-max input { width: 120px; min-height: var(--h-sm); padding: 0 var(--s-3); border-radius: var(--r-sm); border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; }
/* Итог подборки у клиента: «Записаться» рядом с каждым понравившимся */
.pk-liked { cursor: default; }
.pk-liked-open { display: flex; flex: 1; min-width: 0; align-items: center; gap: 10px; text-align: left; }
.pk-liked-open span { flex: 1; min-width: 0; }
.pk-book { display: inline-flex; align-items: center; gap: var(--s-1); min-height: var(--tap); flex: none; }
.pk-book svg { width: var(--ic-sm); height: var(--ic-sm); }

/* Похожие: почему объект предложен */
.similar .sim-why { margin: calc(-1 * var(--s-2)) var(--s-4) var(--s-3); font-size: var(--fs-xs); color: var(--sea-text); }

/* === Объекты риелтора (агент 1) === */
/* «Мои объекты»: поиск и фильтры */
.my-tools { display: grid; gap: var(--s-2); padding: var(--s-3) var(--gutter) 0; }
.my-tools .my-search { margin: 0; }
.my-sel-btn { margin-left: auto; }
.my-actions { align-items: center; }
.my-actions .chip { min-height: var(--tap); }
.my-more { display: grid; place-items: center; width: var(--tap); padding: 0; margin-left: auto; }
.my-more svg { width: var(--ic); height: var(--ic); }
.my.picked { outline: 2px solid var(--sea); outline-offset: -2px; }
.my-pick { display: grid; place-items: center; flex: none; width: var(--tap); height: var(--tap); margin: calc(-1 * var(--s-2)) 0 calc(-1 * var(--s-2)) calc(-1 * var(--s-2)); }
.my-pick input { width: 22px; height: 22px; accent-color: var(--sea); }
.my-priv { font-size: var(--fs-sm); }
.my-priv summary { min-height: var(--tap); display: flex; align-items: center; color: var(--muted); font-weight: 600; cursor: pointer; }
.my-priv dl { display: grid; grid-template-columns: auto 1fr; gap: var(--s-1) var(--s-3); margin: 0 0 var(--s-2); }
.my-priv dt { color: var(--muted); }
.my-priv dd { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
/* «⋯»: редкие и опасные действия — строками по 44px+, а не красными чипами рядом */
.my-menu .opt { min-height: calc(var(--tap) + var(--s-2)); }
.my-menu .opt.danger { color: var(--bad-fg); }
/* Выбрано несколько → «Изменить цену» */
.my-bulk { position: sticky; z-index: var(--z-low); bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-2)); display: flex; align-items: center; gap: var(--s-3);
  margin: var(--s-3) var(--gutter) 0; padding: var(--s-2) var(--s-2) var(--s-2) var(--s-4); border-radius: var(--r-md); background: var(--surface);
  border: 1px solid var(--line); box-shadow: 0 6px 20px rgb(var(--shade-rgb) / .14); font-weight: 600; }
.my-bulk .btn { flex: none; margin-left: auto; }
.bulk-pcts { margin-bottom: var(--s-3); }
.bulk-pcts .chip { min-height: var(--tap); min-width: 64px; justify-content: center; }
/* Фото в форме: обложка, сдвиг */
.ph .ph-cover, .ph .ph-left { top: auto; bottom: 0; font-size: var(--fs-md); text-shadow: 0 1px 3px rgb(var(--shade-rgb) / .6); }
.ph .ph-cover { left: 0; right: auto; }
.ph .ph-left { right: 0; }
.ph.cover { outline: 2px solid var(--sea); outline-offset: -2px; }
.ph-badge { position: absolute; left: 4px; bottom: 4px; padding: 1px 6px; border-radius: var(--r-pill); background: var(--scrim); color: var(--on-photo); font-size: var(--fs-2xs); }
/* Поля «для агентства» в форме */
.priv-box { display: grid; gap: var(--s-3); padding: 0 var(--s-3) var(--s-1); border-radius: var(--r-sm); background: var(--surface-2); }
.priv-box summary { min-height: var(--tap); display: flex; align-items: center; font-weight: 600; cursor: pointer; }
.priv-box[open] { padding-bottom: var(--s-3); }

/* Блок «О доме» в объявлении без данных о ЖК */
.house .house-others { margin: var(--s-4) 0 var(--s-2); font-weight: 600; font-size: var(--fs-md); }
.house .similar { margin: 0 calc(-1 * var(--s-4)); }
.cx .spec > div:last-child:nth-child(odd) { grid-column: 1 / -1; }   /* нечётное число фактов — без пустой клетки */

/* Плавающая «Сохранить поиск» — когда большой баннер ушёл вверх */
.sub-float { position: fixed; z-index: var(--z-float); left: 50%; transform: translateX(-50%); bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-3));
  display: inline-flex; align-items: center; gap: var(--s-2); min-height: var(--tap); padding: 0 var(--s-4); border-radius: var(--r-pill);
  background: var(--sea); color: var(--sea-ink); font-weight: 600; font-size: var(--fs-md); box-shadow: var(--sh-2); white-space: nowrap; }
.sub-float[hidden] { display: none; }
.sub-float svg { width: var(--ic-md); height: var(--ic-md); }
/* fixF-29.10: плавающая «Сохранить поиск» не перекрывает ссылки «О сервисе / Правила» в конце ленты */
.sub-float ~ .app-foot { margin-bottom: calc(var(--tap) + var(--s-3) * 2); }

/* Новостройки: табы, ЖК списком, застройщики, квартиры по типам */
/* nb-tabs: underlined (designer) — второй уровень: текстовые табы с подчёркиванием, без плашек */
.nb-tabs { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; margin: var(--s-2) var(--gutter) 0; border-bottom: 1px solid var(--line); }
.nb-tabs button { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 5px; min-height: var(--tap); padding: 0 var(--s-1);
  background: none; border-radius: 0; color: var(--muted); font-weight: 600; font-size: var(--fs-md); white-space: nowrap; transition: color var(--dur); }
.nb-tabs button small { font-size: var(--fs-xs); font-weight: 500; color: var(--muted); opacity: .8; font-variant-numeric: tabular-nums; }
.nb-tabs button::after { content: ''; position: absolute; left: 18%; right: 18%; bottom: -1px; height: 2.5px; border-radius: 2px 2px 0 0; background: transparent; transition: background var(--dur); }
.nb-tabs button.on { color: var(--sea-text); }
.nb-tabs button.on::after { background: var(--sea); }
.nb-tabs button:focus-visible { outline: 2px solid var(--sea); outline-offset: -2px; border-radius: var(--r-sm); }
.nb-tabs + .dev-list { margin-top: var(--s-3); }
.cx-list .cx-card { width: 100%; }
.dev-head { display: flex; align-items: center; gap: var(--s-3); }
.dev-head > div { flex: 1; min-width: 0; }
.dev-head b { display: block; font-size: var(--fs-lead); }
.dev-head span { font-size: var(--fs-sm); color: var(--muted); }
.dev-head h1 { margin: 0; font: 600 var(--fs-2xl)/1.2 var(--display); }
.dev-hero .spec { margin-top: var(--s-4); }
.flat-group { border-top: 1px solid var(--line); }
.flat-group:first-of-type { margin-top: var(--s-2); }
.flat-group summary { display: flex; align-items: center; gap: var(--s-3); min-height: var(--tap); padding: var(--s-2) 0; cursor: pointer; list-style: none; }
.flat-group summary::-webkit-details-marker { display: none; }
.flat-group summary b { min-width: 72px; }
.flat-group summary span { flex: 1; color: var(--muted); font-size: var(--fs-sm); }
.flat-group summary i { font-style: normal; min-width: 28px; text-align: center; padding: 2px 8px; border-radius: var(--r-pill); background: var(--surface-2); font-size: var(--fs-xs); }
.flat-group[open] summary i { background: var(--sea); color: var(--sea-ink); }
.flat-group .similar { margin: 0 calc(-1 * var(--s-4)) var(--s-3); }

/* Избранное: объект сдали или продали */
.gone-card { display: flex; gap: var(--s-3); align-items: flex-start; margin: 0 0 var(--s-3); padding: var(--s-3); border-radius: var(--r-md); background: var(--surface); border: 1px dashed var(--line); }
.gone-card img { flex: none; width: 64px; height: 64px; border-radius: var(--r-sm); object-fit: cover; filter: grayscale(1); opacity: .6; }
.gone-card > div { flex: 1; min-width: 0; }
.gone-card b { display: block; font-size: var(--fs-md); }
.gone-card span { display: block; margin-top: 2px; color: var(--muted); font-size: var(--fs-sm); }
.gone-acts { display: flex; align-items: center; gap: var(--s-3); margin-top: var(--s-2); }

/* «Подборки» клиента и запрос подборки у агента */
.rcv-card { display: flex; align-items: center; gap: var(--s-3); margin: 0; cursor: pointer; }
.rcv-covers { flex: none; position: relative; width: 76px; height: 64px; }
.rcv-covers img { position: absolute; top: 0; width: 56px; height: 64px; border-radius: var(--r-sm); object-fit: cover; border: 2px solid var(--surface); background: var(--surface-2); }
.rcv-ph { display: grid; place-items: center; width: 56px; height: 64px; border-radius: var(--r-sm); background: var(--sea-soft); color: var(--sea); }      /* fix8-29.10 */
.rcv-ph svg { width: 24px; height: 24px; }
.rcv-covers img:nth-child(1) { left: 0; z-index: 3; }
.rcv-covers img:nth-child(2) { left: 10px; z-index: 2; transform: scale(.92); opacity: .85; }
.rcv-covers img:nth-child(3) { left: 20px; z-index: 1; transform: scale(.84); opacity: .7; }
.rcv-body { flex: 1; min-width: 0; }
.rcv-body > b { display: block; font-size: var(--fs-md); }
.rcv-body > span { display: block; color: var(--muted); font-size: var(--fs-sm); }
.rcv-body .facts { margin-top: var(--s-2); }
.rcv-empty { padding-bottom: var(--s-2); }
.rcv-agent { display: flex; align-items: center; gap: var(--s-3); margin: 0; }
.rcv-agent img { flex: none; width: 48px; height: 48px; border-radius: var(--r-round); object-fit: cover; }
.rcv-agent > div { flex: 1; min-width: 0; }
.rcv-agent b { display: block; }
.rcv-agent span { display: block; color: var(--muted); font-size: var(--fs-sm); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rq-deal { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-2); }
.rq-deal .chip { justify-content: center; }
.sheet .chips.wrap { flex-wrap: wrap; overflow: visible; padding: 0; gap: var(--s-2); mask: none; -webkit-mask: none; }
.sheet .chips.wrap .chip:not(.on), .rq-deal .chip:not(.on) { background: var(--surface-2); }
.lead-req { margin: var(--s-2) 0; padding: var(--s-3); border-radius: var(--r-sm); background: var(--sea-soft); color: var(--ink); font-size: var(--fs-sm); line-height: 1.45; }
.lead-req b { display: block; color: var(--sea-text); margin-bottom: 2px; }
.lead-req small { display: block; margin-top: 4px; color: var(--muted); }
.pk-lead { margin: 0 var(--gutter) var(--s-3); }
.rcv-list, .rcv-agents { grid-template-columns: minmax(0, 1fr); }
.rcv-agent .btn { flex: none; }

/* Точка «примерно» на карте объекта */
.geo-approx { display: flex; gap: var(--s-2); align-items: flex-start; margin: var(--s-2) 0 0; color: var(--muted); font-size: var(--fs-sm); line-height: 1.4; }
.geo-approx svg { flex: none; width: var(--ic-sm); height: var(--ic-sm); margin-top: 1px; }

/* Застройщики по макету: обложка, логотип, надёжность */
.dev-list { gap: var(--s-3); }
.dev-card { display: block; width: auto; margin: 0; padding: 0; overflow: hidden; border-radius: var(--r-lg); background: var(--surface); text-align: left; cursor: pointer; }
.dev-cover { position: relative; height: 112px; background: var(--sea-soft) center / cover; }
.dev-cover::after { content: ''; position: absolute; inset: 0; background: var(--grad-photo); }
.dev-logo { flex: none; display: grid; place-items: center; overflow: hidden; width: 52px; height: 52px; border-radius: var(--r-md);
  background: var(--surface); color: var(--sea-text); font: 700 var(--fs-md) var(--display); box-shadow: 0 2px 10px rgb(var(--shade-rgb) / .16); }
.dev-logo img { width: 100%; height: 100%; object-fit: contain; padding: 4px; background: var(--paper); }
.dev-cover .dev-logo { position: absolute; left: var(--s-3); bottom: -22px; z-index: 1; }
.dev-body { padding: 30px var(--s-3) var(--s-3); }
.dev-name { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); }
.dev-name b { font: 600 var(--fs-lead) var(--display); letter-spacing: -.01em; }
.dev-since { margin-top: 1px; color: var(--muted); font-size: var(--fs-sm); }
.dev-card .facts { margin-top: var(--s-2); }
.fact svg { width: var(--ic-xs); height: var(--ic-xs); margin-right: 3px; vertical-align: -2px; }
.dev-thumbs { display: flex; gap: 6px; margin-top: var(--s-3); }
.dev-thumbs div { position: relative; flex: 1; height: 58px; border-radius: var(--r-sm); background: var(--sea-soft) center / cover; }
.dev-thumbs i { position: absolute; left: 5px; bottom: 5px; padding: 2px 6px; border-radius: var(--r-xs); background: var(--scrim); color: var(--on-photo);
  font: 600 var(--fs-2xs) var(--text); font-style: normal; }
.dev-foot { display: flex; align-items: center; justify-content: space-between; margin-top: var(--s-3); padding-top: var(--s-3); border-top: 1px solid var(--line); }
.dev-price { font: 600 var(--fs-lead) var(--display); }
.dev-price small { font: 500 var(--fs-sm) var(--text); color: var(--muted); }
.dev-go { color: var(--sea-text); font-weight: 600; font-size: var(--fs-md); }
.dev-hero { position: relative; display: flex; flex-direction: column; justify-content: space-between; min-height: 230px; margin: 0 0 var(--s-1);
  padding: var(--s-3) var(--gutter) var(--s-4); background: var(--sea) center / cover; color: var(--on-photo); }
/* верх градиента плотнее (.4 вместо .15): белые крошки читаются и на светлом фото */
.dev-hero::before { content: ''; position: absolute; inset: 0; background: var(--grad-photo-strong); }
.dev-hero > * { position: relative; }
.dev-hero .crumbs, .dev-hero .crumbs button { color: color-mix(in srgb, var(--on-photo) 90%, transparent); }
.dev-hero-in { display: flex; align-items: center; gap: var(--s-3); }
.dev-logo.big { width: 60px; height: 60px; font-size: var(--fs-lead); }
.dev-hero h1 { margin: 0; font: 600 var(--fs-2xl)/1.1 var(--display); letter-spacing: -.02em; }
.dev-hero p { margin: 2px 0 0; font-size: var(--fs-sm); opacity: .9; }
.dev-hero a { color: var(--on-photo); text-decoration: underline; text-underline-offset: 2px; }
.dev-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: var(--s-2); }
.dev-stats div { padding: 10px; border-radius: var(--r-sm); background: var(--surface-2); }
.dev-stats b { display: block; font: 600 var(--fs-xl) var(--display); }
.dev-stats span { font-size: var(--fs-xs); color: var(--muted); }
.dev-stats .g { background: var(--ok-soft); }
.dev-stats .g b { color: var(--ok-fg, var(--ok)); }
.dev-tl { margin-top: var(--s-3); font-size: var(--fs-sm); }
.dev-tl div { display: flex; justify-content: space-between; gap: var(--s-2); padding: 7px 0; border-top: 1px solid var(--line); }
.dev-tl em { flex: none; font-style: normal; font-weight: 600; color: var(--ok-fg, var(--ok)); }
.dev-tl .building em { color: var(--warn-fg); }   /* было #b4610a: в тёмной теме 3.1:1 */
.dev-src { margin: var(--s-2) 0 0; font-size: var(--fs-xs); color: var(--muted); }
.dev-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-2); }
.dev-tile { position: relative; display: flex; flex-direction: column; justify-content: flex-end; min-height: 110px; padding: var(--s-2); border-radius: var(--r-md);
  background: var(--sea) center / cover; color: var(--on-photo); text-align: left; overflow: hidden; }
.dev-tile::before { content: ''; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 30%, rgb(var(--shade-rgb) / .8)); }
.dev-tile > * { position: relative; }
.dev-tile b { font-size: var(--fs-md); }
.dev-tile i { font-style: normal; font-size: var(--fs-xs); opacity: .9; }
.dev-link { display: block; width: 100%; margin: var(--s-3) 0 var(--s-2); padding: var(--s-3); border: 1px solid var(--line); border-radius: var(--r-md); background: var(--surface-2); text-align: left; }
.dev-link .dev-logo { width: 44px; height: 44px; box-shadow: none; }
.adm-note { margin: 0 var(--gutter) var(--s-3); }
/* страница застройщика как в макете: последняя крошка видна на фото, кнопка «парит» без белой полосы */
.dev-hero .crumbs .here, .dev-hero .crumbs .sep { color: var(--on-photo); }
.action-bar.float { background: transparent; border-top: 0; pointer-events: none; }
.action-bar.float .btn { pointer-events: auto; box-shadow: 0 6px 18px rgb(var(--shade-rgb) / .3); }

/* шапка шторки с действием справа («Фильтры» · «Сбросить») */
.sheet-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--s-3); }
/* шапка «Фильтры · Сбросить» не уезжает при прокрутке */
.sheet .sheet-head { position: sticky; top: -8px; z-index: 2; background: var(--surface); padding-top: 8px; margin-top: -8px; }
.sheet-head .link { min-height: var(--tap); padding: 0 var(--s-1); font-weight: 600; color: var(--sea-text); }

/* ---------- Страница ЖК: статус на фото, якоря, факты, квартиры по планировкам, план этажа ---------- */
/* .cx-status описан вместе с .fresh (та же плашка) */
.cx-head .cx-price { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px; margin: var(--s-2) 0 var(--s-1); padding: 0; background: none; border-radius: 0; }
.cx-head .cx-price b { font: 700 var(--fs-xl) var(--display); white-space: nowrap; }
.cx-head .cx-price span { color: var(--muted); font-size: var(--fs-sm); }
.cx-anchors { display: flex; gap: var(--s-2); overflow-x: auto; scrollbar-width: none; padding: var(--s-2) var(--gutter); background: var(--bg); }
.cx-anchors .chip { flex: none; }
.cx-page .block[id] { scroll-margin-top: 56px; }
/* плитки фактов ЖК: слова не рвутся по буквам — плитка растёт до ширины самого длинного слова и переносится в следующий ряд;
   слово длиннее всей строки (крайний случай) переносится только тогда (break-word не уменьшает min-content) */
.cx-facts { display: flex; flex-wrap: wrap; gap: 6px; }
.cx-facts div { flex: 1 1 5.5rem; max-width: 100%; display: grid; align-content: start; gap: 2px; padding: 10px; border-radius: var(--r-sm); background: var(--surface-2); }
.cx-facts b { font-weight: 700; overflow-wrap: break-word; word-break: normal; hyphens: manual; }
.cx-facts span { font-size: var(--fs-xs); color: var(--muted); }
.cx-types { display: grid; }
.cx-type { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3); padding: var(--s-3) 0; border-bottom: 1px solid var(--line); list-style: none; cursor: pointer; }
.cx-type::-webkit-details-marker { display: none; }
.cx-type-group:last-child > .cx-type, .cx-types > .cx-type:last-child { border-bottom: 0; }
.cx-plan-thumb { flex: none; width: 52px; height: 42px; border-radius: var(--r-xs); border: 1px solid var(--line); background: var(--paper-2); object-fit: contain; cursor: zoom-in; }
.cx-plan-thumb.empty { cursor: default; }
.cx-type-main { flex: 1 1 8rem; min-width: 0; display: grid; gap: 2px; }
.cx-type-main span { font-size: var(--fs-sm); color: var(--muted); }
.cx-type-price { display: grid; justify-items: end; gap: 2px; text-align: right; }
.cx-type-price b { white-space: nowrap; }
/* стрелка раскрытия списка квартир: в кружке, поворачивается, когда список открыт */
.cx-type-chev { display: grid; place-items: center; width: 28px; height: 28px; flex: none; border-radius: 50%; background: var(--surface-2); color: var(--ink); transition: transform var(--dur, .2s); }
.cx-type-chev svg { fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.cx-type-group[open] > .cx-type .cx-type-chev { transform: rotate(180deg); }
.cx-type-group > summary::-webkit-details-marker { display: none; }
.cx-type-group > .cx-type { flex-wrap: nowrap; gap: var(--s-2); }   /* стрелка всегда в строке, справа от цены */
.cx-type-group > .cx-type .cx-type-main { flex: 1 1 auto; }
.cx-type-price small { font-size: var(--fs-xs); color: var(--muted); }
.cx-type-ask { flex: none; font-weight: 600; }
.cx-flat-list { display: grid; padding: 0 0 var(--s-2) 64px; }
.cx-flat-list.open { padding-left: 0; }
.cx-flat-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--s-3); padding: 9px 0; border: 0; border-bottom: 1px solid var(--line); background: none; color: inherit; font: inherit; font-size: var(--fs-sm); text-align: left; cursor: pointer; }
.cx-flat-row:last-child { border-bottom: 0; }
.cx-flat-row b { white-space: nowrap; display: inline-flex; align-items: center; gap: 6px; }
.cx-row-chev { font-style: normal; font-weight: 400; font-size: 1.25em; line-height: 1; color: var(--muted); }   /* строка открывает карточку квартиры */
.cx-flat-type { margin-right: 4px; }
.cx-floor-img { display: block; width: 100%; margin-top: var(--s-3); border-radius: var(--r-md); border: 1px solid var(--line); background: var(--paper-2); cursor: zoom-in; }
#cxFloor .seg { margin-top: var(--s-2); }

/* ---------- Квартира в новостройке ---------- */
.gallery.has-plan .track img:first-child { object-fit: contain; background: #fff; }   /* у планов поля белые — белый фон слайда продолжает их, план выглядит на всю ширину и не обрезается */
.card .gallery.has-plan .track img:first-child { object-fit: cover; background: #fff; }   /* в карточке каталога план на всю ширину: поля у планов белые, обрезаются они */
.plan-tag { position: absolute; right: 10px; top: 10px; padding: 4px 10px; border-radius: var(--r-pill); background: var(--surface); color: var(--ink); font-size: var(--fs-xs); font-weight: 600; pointer-events: none; }
.thumbs img.plan { object-fit: contain; background: var(--paper-2); }
.fp-ppm { margin-top: 2px; font-size: var(--fs-sm); color: var(--muted); }
.fp-cx { display: block; margin-top: 4px; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
.fp-cx b { color: var(--sea-text); }
.fp-cx span { color: var(--muted); }
/* Характеристики квартиры — строками, как .spec */
.fp-spec { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: var(--s-4); margin-top: var(--s-2); border-top: 1px solid var(--line); }
.fp-spec div { display: grid; gap: 2px; min-width: 0; padding: 10px 0; border-bottom: 1px solid var(--line); }
.fp-spec span { font-size: var(--fs-xs); color: var(--muted); }
.fp-assign { margin-top: var(--s-3); padding: var(--s-3) 14px; border-radius: var(--r-md); background: var(--sun-soft); }
.fp-assign b { color: var(--sun-text); }
.fp-assign p { margin: 4px 0 0; font-size: var(--fs-sm); }
/* Цена за м² среди квартир того же типа: цифра и оценка сверху, шкала с точкой (эта квартира) и риской (средняя) */
.fp-peer-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-2); margin-top: var(--s-2); }
.fp-peer-head > b { font-size: var(--fs-lg); font-variant-numeric: tabular-nums; }
.fp-peer-head > b small { font-size: var(--fs-sm); font-weight: 500; color: var(--muted); }
.fp-bar { position: relative; height: 8px; margin: var(--s-4) 7px 6px; border-radius: var(--r-2xs); background: linear-gradient(90deg, var(--good-bg), var(--surface-2) 50%, color-mix(in srgb, var(--sun) 25%, var(--surface))); }
.fp-bar i { position: absolute; z-index: 1; top: 50%; width: 16px; height: 16px; margin-left: -8px; border-radius: var(--r-round); background: var(--good-fg); border: 3px solid var(--surface); box-shadow: 0 0 0 1px var(--line); transform: translateY(-50%); }
.fp-bar b { position: absolute; top: -4px; bottom: -4px; width: 2px; margin-left: -1px; border-radius: 1px; background: var(--muted); opacity: .6; }
.fp-verdict { padding: 4px 10px; border-radius: var(--r-pill); background: var(--good-bg); color: var(--good-fg); font-size: var(--fs-sm); font-weight: 600; }
.fp-verdict.dear { background: color-mix(in srgb, var(--sun) 25%, var(--surface)); color: var(--sun-text); }
.fp-more > summary { list-style: none; padding: var(--s-2) 0; cursor: pointer; font-size: var(--fs-sm); }
.fp-more > summary::-webkit-details-marker { display: none; }
.fp-more[open] > summary { display: none; }
.fp-ends { font-size: var(--fs-xs); margin-bottom: var(--s-2); }
.seg-fill { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); margin-bottom: var(--s-3); }
.seg-fill .chip { min-width: 0; white-space: normal; line-height: 1.15; overflow-wrap: anywhere; }
.calc-grid.two { grid-template-columns: 1fr 1fr; margin-top: var(--s-2); }
.calc-grid .good { background: none; }   /* акцент — цветом числа, без плитки в карточке */
.calc-grid .good b { color: var(--good-fg); font-size: var(--fs-xl); }
.calc .btn.wide { margin-top: var(--s-3); }
.fy-rows { margin-top: var(--s-2); font-size: var(--fs-sm); }
.fy-rows .total { padding-top: var(--s-2); border-top: 1px solid var(--line); font-weight: 700; }
.fy-rows .total span { color: var(--ink); }
.fy-scen { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: var(--s-3) 0 var(--s-2); }
.fy-scen div { display: grid; justify-items: center; padding: 10px 4px; border-radius: var(--r-sm); background: var(--surface-2); }
.fy-scen div.base { background: var(--good-bg); color: var(--good-fg); }
.fy-scen b { font: 700 var(--fs-lead) var(--display); }
.fy-scen span { font-size: var(--fs-xs); color: var(--muted); }
.fp-cx-card { display: flex; gap: var(--s-3); width: 100%; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
.fp-cx-card img { flex: none; width: 84px; height: 84px; border-radius: var(--r-sm); object-fit: cover; }
.fp-cx-card div { display: grid; gap: 3px; align-content: start; min-width: 0; }
.fp-cx-card span { font-size: var(--fs-sm); color: var(--muted); }
.fp-cx-card i { font-style: normal; font-weight: 600; color: var(--sea-text); }

/* кнопка «наверх» — справа, над нижней панелью, в пределах колонки приложения */
.to-top { position: fixed; z-index: var(--z-bar); right: max(12px, calc(50% - var(--app-max) / 2 + 12px)); bottom: calc(var(--tabbar-h) + var(--safe-b) + 130px);
  display: grid; place-items: center; width: var(--h-sm); height: var(--h-sm); padding: 0; border: 1px solid var(--line); border-radius: var(--r-round);
  background: var(--surface); color: var(--ink); box-shadow: 0 4px 14px rgb(var(--shade-rgb) / .16); cursor: pointer;
  opacity: 0; transform: translateY(8px); pointer-events: none; transition: opacity var(--dur), transform var(--dur); }
.to-top.show { opacity: 1; transform: none; pointer-events: auto; }
.to-top svg { width: var(--ic-lg); height: var(--ic-lg); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.fp-spec div:last-child:nth-child(odd) { grid-column: 1 / -1; }
.fp-bar.dear i { background: var(--sun); }
.fy-rows + .range-row { margin-top: var(--s-3); }
/* фильтры ЖК: условия рассрочки — под переключателем */
.cxf-sub { display: grid; gap: var(--s-2); margin: 0 0 var(--s-3); }
.cxf-sub > span { font-size: var(--fs-sm); color: var(--muted); }

/* ---------- PDF квартиры: лист A4 (794 px) вне экрана, всегда в светлых фирменных цветах ---------- */
.pdf-sheet { position: fixed; left: -10000px; top: 0; z-index: -1; }
/* Свои фиксированные цвета (лист всегда светлый, тёмная тема не влияет); px намеренно — это растр A4, не интерфейс */
.pdf-page { --p-ink: #13243b; --p-muted: #5b6876; --p-line: #d8dfe9; --p-soft: #f4f6f8; --p-bg: #f1f4f6; --p-paper: #fff; --p-sun: #f5a524;   /* palette-29.10 */
  --p-r: 14px; --p-r-sm: 10px;
  width: 794px; box-sizing: border-box; padding: 0 0 26px; background: var(--p-paper); color: var(--p-ink); font-family: var(--text); font-size: 13px; line-height: 1.45; }
.pdf-page h1, .pdf-page h2, .pdf-page b { font-family: var(--display); }
.pdf-top { display: flex; align-items: baseline; gap: 14px; padding: 18px 40px; background: var(--p-ink); color: var(--p-bg); }
.pdf-top b { font-size: 22px; font-weight: 700; letter-spacing: -.01em; color: var(--p-paper); }
.pdf-top span { opacity: .8; }
.pdf-top .pdf-date { margin-left: auto; font-size: 12px; }
.pdf-hero { display: grid; grid-template-columns: 1.55fr 1fr; gap: 14px; padding: 20px 40px 0; }
.pdf-hero.solo { grid-template-columns: 1fr; }
.pdf-photo { width: 100%; height: 270px; object-fit: cover; border-radius: var(--p-r); display: block; }
.pdf-plan { margin: 0; position: relative; border: 1px solid var(--p-line); border-radius: var(--p-r); background: var(--p-soft); display: flex; align-items: center; justify-content: center; overflow: hidden; }
.pdf-plan img { max-width: 88%; max-height: 82%; }
.pdf-plan figcaption { position: absolute; left: 12px; top: 10px; font-size: 11px; font-weight: 600; color: var(--p-muted); }
.pdf-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; padding: 20px 40px 4px; }
.pdf-head h1 { margin: 0; font-size: 32px; line-height: 1.1; font-weight: 700; letter-spacing: -.02em; }
.pdf-head p { margin: 6px 0 0; color: var(--p-muted); font-size: 14px; }
.pdf-price { text-align: right; flex: none; }
.pdf-price b { display: block; font-size: 34px; line-height: 1.05; font-weight: 700; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.pdf-price b::after { content: ''; display: block; height: 4px; width: 100%; margin-top: 6px; border-radius: 2px; background: var(--p-sun); }
.pdf-price span { display: block; margin-top: 6px; color: var(--p-muted); }
.pdf-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.pdf-chips span { padding: 3px 10px; border-radius: 999px; background: var(--p-bg); font-size: 12px; font-weight: 500; }
.pdf-spec { display: grid; grid-template-columns: repeat(3, 1fr); margin: 14px 40px 0; padding: 0; border-top: 1px solid var(--p-line); }
.pdf-spec div { padding: 10px 12px 10px 0; border-bottom: 1px solid var(--p-line); }
.pdf-spec dt { color: var(--p-muted); font-size: 11px; }
.pdf-spec dd { margin: 2px 0 0; font-weight: 600; font-size: 14px; }
.pdf-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; padding: 16px 40px 0; }
.pdf-cols section, .pdf-cx { border-radius: var(--p-r); background: var(--p-soft); padding: 16px 18px; }
.pdf-page h2 { margin: 0 0 10px; font-size: 16px; font-weight: 700; }
.pdf-pay { display: grid; grid-template-columns: 1fr auto; column-gap: 10px; padding: 7px 0; border-top: 1px solid var(--p-line); }
.pdf-pay:first-of-type { border-top: 0; padding-top: 0; }
.pdf-pay b { font-size: 15px; text-align: right; font-variant-numeric: tabular-nums; }
.pdf-pay small { grid-column: 1 / -1; color: var(--p-muted); font-size: 11px; }
.pdf-scen { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.pdf-scen div { background: var(--p-paper); border-radius: var(--p-r-sm); padding: 10px; text-align: center; }
.pdf-scen .base { background: var(--p-ink); color: var(--p-paper); }
.pdf-scen b { display: block; font-size: 22px; font-weight: 700; font-variant-numeric: tabular-nums; }
.pdf-scen span { display: block; font-size: 11px; font-weight: 600; }
.pdf-scen small { display: block; font-size: 11px; opacity: .8; }
.pdf-note { margin: 10px 0 0; font-size: 11px; color: var(--p-muted); }
.pdf-cx { margin: 14px 40px 0; padding: 12px 18px; }
.pdf-cx p { margin: 0; color: var(--p-muted); }
.pdf-cx .pdf-chips span { background: var(--p-paper); }
.pdf-foot { display: flex; justify-content: space-between; align-items: center; gap: 20px; margin: 14px 40px 0; padding-top: 12px; border-top: 1px solid var(--p-line); }
.pdf-agent { display: flex; align-items: center; gap: 12px; }
.pdf-agent i { position: relative; width: 54px; height: 54px; flex: none; border-radius: 50%; overflow: hidden; background: var(--p-ink); color: var(--p-paper); font: 700 22px/54px var(--display); font-style: normal; text-align: center; }
.pdf-agent i img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.pdf-agent small, .pdf-agent span { display: block; color: var(--p-muted); font-size: 11px; }
.pdf-agent b { display: block; font-size: 16px; }
.pdf-qr { display: flex; align-items: center; gap: 12px; max-width: 330px; }
.pdf-qr img { width: 84px; height: 84px; image-rendering: pixelated; flex: none; }
.pdf-qr span { font-size: 11px; color: var(--p-muted); }
.pdf-qr b { display: block; font-size: 15px; color: var(--p-ink); }
.pdf-legal { margin: 10px 40px 0; font-size: 11px; line-height: 1.4; color: var(--p-muted); }

/* ---------- Памятка «Как оформлять пост» для канала риелтора ---------- */
.ch-rules { margin: 0 0 var(--s-2); padding-left: var(--s-5); display: grid; gap: 6px; font-size: var(--fs-md); line-height: 1.45; }
.ch-rules code, .ch-tpl pre { font-family: inherit; background: var(--surface-2); border-radius: var(--r-2xs); padding: 1px 6px; }
.ch-tpl { border: 1px solid var(--line); border-radius: var(--r-sm); padding: 10px 12px; margin-bottom: var(--s-2); }
.ch-tpl-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-bottom: 6px; }
.ch-tpl pre { display: block; margin: 0; padding: 8px 10px; white-space: pre-wrap; font-size: var(--fs-sm); line-height: 1.5; }

/* Аватар агента без фото: круг с инициалом (как .pdf-agent i), а не чужое лицо */
.ava { display: inline-grid; place-items: center; flex: none; border-radius: var(--r-round); background: var(--sea); color: var(--sea-ink); font: 700 var(--fs-xl)/1 var(--display); text-transform: uppercase; user-select: none; }
.agent .ava { width: 56px; height: 56px; font-size: 22px; }
.agent-hero > .ava { width: 96px; height: 96px; font-size: 38px; }
.rcv-agent .ava { width: 48px; height: 48px; }
.pk-head .ava { width: 44px; height: 44px; font-size: 18px; }
.ava.sc-avatar { font-size: 38px; }
/* Допущения калькуляторов: метка рядом с подписью ползунка */
.assume { margin-left: 6px; padding: 1px 6px; border-radius: var(--r-pill); background: var(--surface-2); color: var(--muted); font: 500 var(--fs-xs) var(--text); font-style: normal; white-space: nowrap; }
/* Оценка цены: источник и дата средней */
.score .score-src { display: block; margin-top: 2px; }
/* Карта цен: район без данных */
.pm-nodata-dot { display: inline-block; width: 9px; height: 9px; margin-right: 6px; border-radius: var(--r-round); background: var(--muted); opacity: .45; vertical-align: 0; }
/* Админка → Цены рынка: что видят клиенты по району */
.calc-grid.mk-now { margin-top: var(--s-2); }
.calc-grid.mk-now small { color: var(--muted); font-size: var(--fs-xs); }

/* ---------- Логика и навигация (агент app.js) ---------- */
/* Вход в кабинет/админку в шапке — всегда с подписью; на рабочих экранах — «Каталог» */
.pro-only.pro-btn .pro-label { display: inline; }
.pro-btn svg { width: var(--ic-md); height: var(--ic-md); flex: none; }
/* В кабинете и админке клиентский таббар не нужен — вместо него свой (#proTabbar, пункты рисует syncProTabbar).
   Экраны с action-bar (подборка, расписание, витрина) прячут его, как и клиентский: нижняя кнопка не перекрывается */
.pro-tabbar { display: none; grid-template-columns: repeat(var(--n, 5), minmax(0, 1fr)); }
body.pro-mode #tabbar { display: none; }
body.pro-mode .pro-tabbar { display: grid; }
body.pro-mode.has-action .pro-tabbar, body.clean .pro-tabbar { display: none; }
.pro-tabbar button { min-height: var(--tap); padding-inline: 1px; }
/* подписи — целыми словами (короткие admT_*), при крупном шрифте перенос по слогам, а не по букве */
.pro-tabbar button span { overflow-wrap: normal; hyphens: auto; }
.pro-tabbar button:focus-visible { outline-offset: -3px; border-radius: var(--r-sm); }
/* «Ещё»: текущий раздел из шторки подсвечен */
.pro-more .opt.on { background: var(--sea-soft); color: var(--sea-text); }
/* OW2-A (28.10): сегмент «Сервис | Риелторы | Мои объекты» над экранами статистики владелицы */
.ow-seg { margin: var(--s-2) var(--gutter) var(--s-3); }
.ow-seg .chip { padding-inline: var(--s-2); }
/* /OW2-A */
/* Карта: пока стиль и метки грузятся */
.map-loading { position: absolute; z-index: var(--z-map-ui); left: 50%; top: 50%; transform: translate(-50%, -50%); display: flex; align-items: center; gap: var(--s-2);
  padding: var(--s-2) var(--s-4); border-radius: var(--r-pill); background: var(--surface); color: var(--ink); box-shadow: var(--sh-2); font-size: var(--fs-md); white-space: nowrap; pointer-events: none; }
.map-loading i { width: var(--ic-sm); height: var(--ic-sm); border-radius: var(--r-round); border: 2px solid var(--line); border-top-color: var(--sea); animation: map-spin .8s linear infinite; }
@keyframes map-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .map-loading i { animation: none; } }
/* Админка → Сотрудники: «Заблокировать» / «Удалить» спрятаны в меню «•••» */
.adm-actions { align-items: flex-start; }
.adm-more { position: relative; }
.adm-more > summary { list-style: none; cursor: pointer; }
.adm-more > summary::-webkit-details-marker { display: none; }
.adm-more-menu { position: absolute; z-index: var(--z-raised); left: 0; top: calc(100% + 4px); display: grid; gap: var(--s-1); padding: var(--s-2); border-radius: var(--r-sm);
  background: var(--surface); box-shadow: var(--sh-2); min-width: 160px; }
/* Сравнение: справа есть ещё колонки — затухание у края */
.cmp-wrap { position: relative; }
.cmp-wrap.more::after { content: ''; position: absolute; top: 0; bottom: 0; right: var(--gutter); width: 28px; pointer-events: none;
  border-radius: 0 var(--r-lg) var(--r-lg) 0; background: linear-gradient(to right, transparent, var(--surface)); }

/* ---------- Доступность (агент a11y) ---------- */
/* Скрыто визуально, но доступно скринридеру и клавиатуре (input[type=file], «Город: », «Язык и валюта: ») */
.sr-only { position: absolute !important; width: 1px !important; height: 1px !important; max-width: none !important; padding: 0 !important; margin: -1px !important;
  overflow: hidden !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; white-space: nowrap !important; border: 0 !important; }
/* Фокус: кликабельные карточки, миниатюры, галерея; label с невидимым input файла */
:is(.card, .rcv-card, .map-card, .cx-card, .dev-card, .gallery, .thumbs img, .cmp-head img)[tabindex]:focus-visible { outline: 3px solid var(--sea); outline-offset: 2px; }
.gallery[tabindex]:focus-visible { outline-offset: -3px; }
label:has(> input.sr-only:focus-visible) { outline: 2px solid var(--sea); outline-offset: 2px; }
.ph.add { position: relative; }
/* Заголовки h1 на детальной — в прежнем виде */
h1.price, h1.addr { margin: 0; }
h1.addr { margin-top: var(--s-2); font-size: inherit; letter-spacing: normal; }
/* Метка на карте — кнопка */
button.pin { border: 0; line-height: 1; }
button.pin:focus-visible { outline: 3px solid var(--sea); outline-offset: 2px; z-index: var(--z-raised); }
/* Ползунок: заливка пройденной части в WebKit (--p ставит app.js) */
input[type=range]::-webkit-slider-runnable-track { background: linear-gradient(to right, var(--sea) var(--p, 0%), var(--field-border) var(--p, 0%)); }
/* Просмотрщик: «назад/вперёд» */
.viewer .v-prev, .viewer .v-next { position: absolute; top: 50%; transform: translateY(-50%); }
.viewer .v-prev { left: 14px; }
.viewer .v-next { right: 14px; }
.viewer .v-next svg { transform: scaleX(-1); }
.viewer :focus-visible { outline: 3px solid var(--on-photo, #fff); outline-offset: 2px; }
/* Тост: ошибка и успех */
.toast.error { background: var(--bad-bg); color: var(--bad-fg); box-shadow: inset 0 0 0 1px var(--bad-fg); }
.toast.ok { background: var(--ok-soft); color: var(--ok-fg); box-shadow: inset 0 0 0 1px var(--ok-fg); }
/* Обязательные поля и ошибки у поля */
.req { color: var(--bad-fg); font-weight: 700; }
.req-note { margin: 0; font-size: var(--fs-sm); color: var(--muted); }
.field-err { display: block; margin-top: 4px; color: var(--bad-fg); font-size: var(--fs-sm); font-weight: 500; }
.field-lab { display: block; }
/* Круг с инициалом агента: «.agent span { color: muted }» перебивал цвет — было 1.99:1, стало ≈11:1 (--sea-ink на --sea) */
.agent span.ava, span.ava { color: var(--sea-ink); }

/* Квартира новостройки: выбор этажа с ценой по прайсу застройщика и номер квартиры на плане этажа */
.fl-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--s-2); margin-top: var(--s-3); }
.fl-chip { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; min-height: var(--tap); padding: var(--s-2) 2px;
  border: 1px solid var(--field-border); border-radius: var(--r-md); background: var(--surface); color: var(--ink); font: inherit; cursor: pointer;
  transition: background var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out); }
.fl-chip b { font-size: var(--fs-md); line-height: 1.1; }
.fl-chip span { font-size: var(--fs-xs); color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.fl-chip.on { background: var(--sea); border-color: var(--sea); color: var(--sea-ink); }
.fl-chip.on span { color: inherit; opacity: .85; }
.fl-chip.own { border: 2px solid var(--sea); }                 /* flchip-29.10: этаж этой квартиры */
.fl-chip i { font-style: normal; font-size: 10px; line-height: 1.1; color: var(--sea); white-space: nowrap; }
.fl-chip.on i { color: inherit; }
.fl-chip:focus-visible { outline: 2px solid var(--sea); outline-offset: 2px; }
.fl-plan { position: relative; margin-top: var(--s-3); border-radius: var(--r-md); border: 1px solid var(--line); background: #fff; overflow: hidden; cursor: zoom-in; }
.fl-plan img { position: absolute; display: block; max-width: none; height: auto; }
.fl-plan i { position: absolute; aspect-ratio: 1; transform: translate(-50%, -50%); border-radius: 50%;
  border: 3px solid var(--sea); box-shadow: 0 0 0 4px color-mix(in srgb, var(--sea) 30%, transparent); pointer-events: none; }
@media (prefers-reduced-motion: no-preference) {
  .fl-plan i { animation: fl-pulse 1.6s var(--ease-out) 2; }
  @keyframes fl-pulse { 50% { box-shadow: 0 0 0 9px color-mix(in srgb, var(--sea) 15%, transparent); } }
}

/* Форма риелтора: «Не указано» выбрано по умолчанию — нейтрально, не как активный выбор (дизайн-ревью 27.10, #15) */
.seg .chip.on[data-ff-tri$=":null"] { background: var(--surface-2); color: var(--ink); border-color: var(--ink); }
/* раздел формы «Условия» — разделитель, а не подпись поля (#16) */
.add-form .form-sec { margin: 24px 0 0; padding-top: 16px; border-top: 1px solid var(--line); font: 600 var(--fs-lead) var(--display); color: var(--ink); }

/* Страницы 27.10.2026 (часть A): правила, «О сервисе», «Мои данные», «Объявление снято», журнал удалений */
.fill { background: color-mix(in srgb, var(--sun) 22%, transparent); border-radius: var(--r-2xs); padding: 0 3px; color: var(--ink); }   /* заглушка: данные даст владелец */
.policy .note { padding: var(--s-2) var(--s-3); border: 1px solid var(--line); border-radius: var(--r-sm); color: var(--muted); font-size: var(--fs-sm); }
.legal-note { font-size: var(--fs-sm); }
.doc-links, .app-foot { display: flex; flex-wrap: wrap; justify-content: center; gap: 0 var(--s-4); margin: var(--s-4) var(--gutter) 0; }
.doc-links .link, .app-foot .link { min-height: var(--tap); padding: 0 var(--s-1); font-weight: 500; font-size: var(--fs-sm); color: var(--muted); text-decoration: underline; text-underline-offset: 3px; }
.app-foot { margin: var(--s-6) var(--gutter) var(--s-2); padding-top: var(--s-3); border-top: 1px solid var(--line); }
.info-list .opt { min-height: var(--h-md); }
.info-list .ico svg { width: var(--ic-md); height: var(--ic-md); }
.about-lead p, .about-support p { margin: 0; font-size: var(--fs-base); line-height: 1.55; }
.faq { padding: 0 var(--s-4); }
.faq-item { border-bottom: 1px solid var(--line); }
.faq-item:last-child { border-bottom: 0; }
.faq-item summary { display: flex; align-items: center; justify-content: space-between; gap: var(--s-3); min-height: var(--h-md); padding: var(--s-3) 0;
  font-weight: 600; font-size: var(--fs-base); cursor: pointer; list-style: none; }
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after { content: ''; flex: none; width: 8px; height: 8px; margin-right: 4px; border: solid var(--muted); border-width: 0 2px 2px 0; transform: rotate(45deg); transition: transform var(--dur); }
.faq-item[open] summary::after { transform: rotate(-135deg); }
.faq-item p { margin: 0 0 var(--s-3); color: var(--ink); font-size: var(--fs-md); line-height: 1.55; }
.page-head h1 small { display: block; margin-top: 2px; color: var(--muted); font: 400 var(--fs-md) var(--text); letter-spacing: 0; }
.md-block h2 { margin-bottom: var(--s-2); }
.md-row { display: flex; justify-content: space-between; align-items: baseline; gap: var(--s-3); padding: var(--s-2) 0; border-bottom: 1px solid var(--line); font-size: var(--fs-md); }
.md-row:last-of-type { border-bottom: 0; }
.md-row span { color: var(--muted); }
.md-row b { text-align: right; font-weight: 600; }
.md-note { margin: var(--s-2) 0 0; color: var(--muted); font-size: var(--fs-sm); line-height: 1.5; }
.md-actions .btn + .md-note { margin-bottom: var(--s-4); }
.md-actions .btn:not(.danger):not(:disabled) { background: var(--sea-soft); color: var(--sea-text); }
.md-agent { margin: 0 var(--gutter) var(--s-1); padding: var(--s-3); border-radius: var(--r-md); background: var(--warn-bg); color: var(--warn-fg); font-size: var(--fs-md); }
.md-agent .fill { color: inherit; }
.md-del-list { margin: 0 0 var(--s-3); padding-left: var(--s-5); font-size: var(--fs-md); line-height: 1.5; }
.md-del-list li { margin-bottom: var(--s-1); }
.md-irrev { margin: 0 0 var(--s-3); color: var(--danger); font-weight: 600; font-size: var(--fs-md); }
.md-del-acts { gap: var(--s-2); }
.missing-card { text-align: center; }
.missing-card h1 { margin: var(--s-2) 0 var(--s-1); font: 600 var(--fs-xl)/1.25 var(--display); letter-spacing: -.02em; }
.missing-ico { display: grid; place-items: center; width: 56px; height: 56px; margin: var(--s-2) auto 0; border-radius: var(--r-round); background: var(--surface-2); color: var(--muted); }
.missing-what { margin: 0 0 var(--s-1); font-weight: 600; font-size: var(--fs-md); }
.missing-sub { margin: 0; color: var(--muted); font-size: var(--fs-md); }
.missing-acts { display: grid; gap: var(--s-2); margin-top: var(--s-4); }
.missing-none { margin: var(--s-4) var(--gutter); color: var(--muted); font-size: var(--fs-md); text-align: center; }
.adm-note { margin: var(--s-2) var(--gutter) var(--s-3); color: var(--muted); font-size: var(--fs-sm); }
.del-row code { padding: 2px 6px; border-radius: var(--r-xs); background: var(--surface-2); color: var(--ink); font-size: var(--fs-sm); }
/* ===== Часть B (27.10.2026): «Уведомления», «Мои обращения», админка «Все объявления» ===== */
.sec-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--s-3); margin: 22px var(--gutter) 10px; }
.sec-head .section-title { margin: 0; }
.sec-head .link, .nt-sub .link { min-height: var(--h-md); padding: 0 var(--s-1); }
.md-note .link { font-size: inherit; }
.nt-sub { cursor: default; }
.nt-sub .link { flex: none; }
.nt-block .toggle { min-height: var(--h-md); padding: var(--s-1) 0; gap: var(--s-3); }
.nt-empty button { margin-top: var(--s-3); }
.st-badge.done { background: var(--sea-soft); color: var(--sea-text); }
.st-badge.closed { background: var(--surface-2); color: var(--muted); }
.rq-card .lead-head b { display: flex; align-items: center; gap: var(--s-2); }
.rq-card .lead-head b svg { flex: none; width: var(--ic-lg, 20px); height: var(--ic-lg, 20px); color: var(--sea); }
.rq-card .lead-head .lead-meta { display: block; margin-top: 2px; }
.rq-card > .lead-meta { margin-top: var(--s-2); }
.rq-card .seg, .ao-card .seg { margin-top: var(--s-3); }
.rq-card .chip, .ao-card .chip { min-height: var(--h-md); }
.ao-filters { display: grid; gap: var(--s-3); }
.ao-filters .field { margin: 0; }
.ao-card .st-head { margin-bottom: var(--s-2); }
.ao-card .st-head > div { min-width: 0; }
.ao-card .st-head b { overflow-wrap: anywhere; }
.ao-card .my-note { margin-top: var(--s-2); }
.ao-more { margin: var(--s-3) var(--gutter) 0; }
.ao-reasons { display: grid; gap: var(--s-1); margin: 0 0 var(--s-3); padding: 0; border: 0; }
.ao-reasons legend { margin-bottom: var(--s-2); padding: 0; font-weight: 600; }
.ao-reason { display: flex; align-items: center; gap: var(--s-3); min-height: var(--h-md); font-size: var(--fs-md); cursor: pointer; }
.ao-reason input { flex: none; width: 20px; height: 20px; margin: 0; accent-color: var(--sea); }
.ao-reasons .field { margin-top: var(--s-2); }

/* ===== Часть C (27.10.2026): календарь посуточной аренды ===== */
/* Лента «Посуточно»: даты и гости */
.stay-bar { display: grid; grid-template-columns: 1.5fr 1fr; gap: var(--s-2); margin: 10px var(--gutter) 0; }
.stay-btn { display: flex; align-items: center; gap: var(--s-2); min-width: 0; min-height: var(--h-md); padding: 0 var(--s-3); border: 1px solid var(--field-border);
  border-radius: var(--r-sm); background: var(--surface); font-size: var(--fs-md); font-weight: 600; text-align: left; }
.stay-btn svg { width: var(--ic-md); height: var(--ic-md); color: var(--muted); }
.stay-btn span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.stay-btn small { margin-left: 6px; color: var(--muted); font-weight: 400; }
.stay-btn.on { border-color: var(--sea); box-shadow: inset 0 0 0 1px var(--sea); }
.stay-btn.on svg { color: var(--sea-text); }
.stay-bar + .feed-chips { padding-top: 10px; }
.stay-sub { color: var(--sea-text); font-weight: 600; }
.stay-sub span { color: var(--muted); font-weight: 400; }

/* Календарь: месяц с листанием, неделя с понедельника */
.cal { margin-top: var(--s-2); }
.cal-head { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); margin-bottom: var(--s-2); }
.cal-head b { font-family: var(--display); font-size: var(--fs-lead); font-weight: 600; }
.cal-nav { display: grid; place-items: center; width: var(--h-md); height: var(--h-md); border-radius: var(--r-pill); background: var(--surface-2); }
.cal-nav svg { width: var(--ic-md); height: var(--ic-md); }
.cal-nav.next svg { transform: scaleX(-1); }
.cal-nav:disabled { opacity: .35; cursor: default; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 3px; }
.cal-wd { padding-bottom: var(--s-1); color: var(--muted); font-size: var(--fs-xs); text-align: center; text-transform: lowercase; }
.cal-d { position: relative; min-width: 0; height: var(--h-md); border-radius: var(--r-xs); background: var(--surface-2); font-size: var(--fs-md); font-weight: 600;
  font-variant-numeric: tabular-nums; }
.cal-d.today { box-shadow: inset 0 0 0 1.5px var(--field-border); }
.cal-d.past { background: none; color: var(--muted); font-weight: 400; opacity: .55; cursor: default; }
.cal-d.busy { background: none; color: var(--muted); font-weight: 400; text-decoration: line-through; box-shadow: inset 0 0 0 1px var(--line); }
.cal-d.in-range { background: var(--sea-soft); color: var(--sea-text); }
.cal-d.sel { background: var(--sea); color: var(--sea-ink); text-decoration: none; }
/* редактор риелтора: занятые ночи — заметной заливкой, первый день периода — обводкой */
.cal.edit .cal-d.busy { background: var(--warn-bg); color: var(--warn-fg); text-decoration: none; box-shadow: none; font-weight: 600; }
.cal.edit .cal-d.pick { box-shadow: inset 0 0 0 2px var(--sun); }
.cal-legend { display: flex; flex-wrap: wrap; gap: var(--s-2) var(--s-4); margin-top: var(--s-3); color: var(--muted); font-size: var(--fs-sm); }
.cal-legend span { display: inline-flex; align-items: center; gap: 6px; }
.cal-legend i { width: 14px; height: 14px; border-radius: var(--r-2xs); background: var(--surface-2); }
.cal-legend i.lg-busy { background: none; box-shadow: inset 0 0 0 1px var(--field-border); }
.cal.edit + .cal-legend i.lg-busy { background: var(--warn-bg); box-shadow: inset 0 0 0 1px var(--warn-fg); }
.cal-legend i.lg-sel { background: var(--sea); }
.cal-upd { display: block; margin-top: var(--s-2); color: var(--muted); font-size: var(--fs-sm); }
.stay-block h2 + .cal-upd { margin: -6px 0 var(--s-1); }
.cal-tools { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-bottom: var(--s-2); }
.cal-tools .chip { background: var(--surface-2); }
.cal-tools .chip.on { background: var(--sea); }
.cal-hint { margin: 0 0 var(--s-1); font-size: var(--fs-sm); }
.cal-field .ced { margin-top: var(--s-2); padding: var(--s-3); border-radius: var(--r-md); background: var(--surface-2); }
.cal-field .ced .cal-d:not(.past):not(.busy) { background: var(--surface); }
.cal-field .ced .cal-tools .chip:not(.on), .cal-field .ced .cal-nav { background: var(--surface); }
.cal-field .ced .cal-legend i.lg-free { background: var(--surface); box-shadow: inset 0 0 0 1px var(--line); }

/* Страница объекта: «Свободные даты», итог «N ночей × цена» */
.stay-ask { display: flex; align-items: center; gap: var(--s-2); margin: var(--s-2) 0 0; color: var(--muted); }
.stay-ask svg { width: var(--ic-md); height: var(--ic-md); }
.stay-total { display: grid; gap: 2px; margin-top: var(--s-3); padding: var(--s-3); border-radius: var(--r-sm); background: var(--sea-soft); }
.stay-total span { color: var(--muted); font-size: var(--fs-sm); }
.stay-total b { font-family: var(--display); font-size: var(--fs-lg); color: var(--sea-text); font-variant-numeric: tabular-nums; }
.stay-total small { color: var(--muted); font-size: var(--fs-sm); }
.stay-warn { margin: var(--s-3) 0 0; padding: var(--s-2) var(--s-3); border-radius: var(--r-xs); background: var(--warn-bg); color: var(--warn-fg); font-size: var(--fs-md); }
.stay-reset { display: inline-flex; align-items: center; min-height: var(--tap); margin-top: var(--s-1); }

/* Шторка «Даты и гости» */
.stepper { display: flex; align-items: center; gap: var(--s-3); }
.stepper .chip { width: var(--h-md); min-height: var(--h-md); padding: 0; font-size: var(--fs-xl); background: var(--surface-2); }
.stepper b { min-width: 96px; text-align: center; }
.stay-note { margin-top: var(--s-4); font-size: var(--fs-sm); }
.stay-hint { margin-bottom: var(--s-1); }

/* ===== Часть H (27.10.2026): шапка ленты V1 «Без чипов» ===== */
/* Шапка уезжает при прокрутке вниз, строка «поиск + фильтр» липнет под ней (или к верху экрана) */
.top { transition: transform var(--dur-mid) var(--ease-out); }
body.hdr-hidden .top { transform: translateY(-100%); }
.search-wrap { position: sticky; top: var(--hdr-h, var(--top-h)); z-index: calc(var(--z-sticky) - 1); padding: 10px var(--gutter) 2px; background: var(--bg);
  transition: top var(--dur-mid) var(--ease-out), box-shadow var(--dur); }
body.hdr-hidden .search-wrap { top: 0; }
body.hdr-stuck .search-wrap { padding-bottom: 8px; box-shadow: 0 6px 12px -10px rgb(var(--shade-rgb) / .5); }
.search-row { display: flex; align-items: center; gap: var(--s-2); }
.search-row .search { flex: 1; min-width: 0; margin: 0; }
.search-row .search input { font-size: max(16px, 1em); text-overflow: ellipsis; }
.search-wrap .suggest { margin: var(--s-1) 0 0; }
/* Кнопка фильтра — только иконка, 48×48; включены фильтры — заливка и бейдж-счётчик */
.fbtn { position: relative; flex: none; display: grid; place-items: center; width: var(--h-md); height: var(--h-md); border-radius: var(--r-md); background: var(--surface);
  border: 1px solid var(--field-border); color: var(--ink); }
.fbtn svg { width: var(--ic-lg); height: var(--ic-lg); }
.fbtn.has { background: var(--sea); border-color: var(--sea); color: var(--sea-ink); }
.fbtn .badge-n { position: absolute; top: -6px; right: -6px; min-width: 20px; height: 20px; padding: 0 5px; border-radius: var(--r-pill); background: var(--sun); color: var(--ink-fixed);
  font: 700 var(--fs-2xs)/20px var(--text); font-style: normal; text-align: center; box-shadow: 0 0 0 2px var(--bg); }
.fbtn .dot { position: absolute; top: 7px; right: 7px; width: 8px; height: 8px; border-radius: 50%; background: var(--sun); }
/* Ряд включённых фильтров: чип снимается одним тапом */
.act-chips { padding-top: 10px; }
.act-chip { gap: 6px; padding-right: 12px; }
.act-chip svg { width: 14px; height: 14px; }
/* Строка сводки: «Помесячно N | Посуточно N» слева, сортировка справа */
.result-bar.sum-row { align-items: center; gap: var(--s-2); padding: 12px var(--gutter) 8px; min-height: 0; }
.sum-row .rent-mode { flex: none; display: flex; margin: 0; border-radius: var(--r-md); }
.sum-row .rent-mode button { display: flex; align-items: center; gap: 5px; min-height: 38px; padding: 0 12px; border-radius: 13px; white-space: nowrap; }
.sum-row .rent-mode button::after { inset: -3px 0; }
.rent-mode button small { font-size: var(--fs-2xs); font-weight: 500; opacity: .85; }
.sum-row .sort { min-width: 0; white-space: nowrap; }
.sum-row .sort span { overflow: hidden; text-overflow: ellipsis; }
/* Шторка фильтра: «Популярное» — первой группой */
.f-pop { padding-bottom: var(--s-1); }

/* ===== Часть D (27.10.2026): «Сохранить поиск» чипом, «Недавно смотрели», первый запуск ===== */
/* «Сохранить поиск» с фильтрами — первый чип ряда включённых фильтров (вместо баннера над лентой) */
.act-save { gap: 6px; background: var(--sun-soft); border-color: var(--sun); color: var(--ink); font-weight: 600; }
.act-save svg { width: var(--ic-sm); height: var(--ic-sm); color: var(--sun-text); }
/* «Недавно смотрели» на экране «Избранное»: ряд карточек со свайпом вбок */
.recent .rv-row { display: flex; gap: 10px; overflow-x: auto; padding: 2px var(--gutter) var(--s-2); scroll-snap-type: x proximity; scroll-padding: 0 var(--gutter); scrollbar-width: none; }
.recent .rv-row::-webkit-scrollbar { display: none; }
.rv-card { flex: none; width: 140px; display: flex; flex-direction: column; align-items: stretch; gap: 2px; padding: 0 0 var(--s-2); border-radius: var(--r-md); background: var(--surface);
  text-align: left; scroll-snap-align: start; overflow: hidden; min-height: var(--h-md); }
.rv-ph { position: relative; display: block; height: 92px; margin-bottom: 6px; background: var(--surface-2); }
.rv-ph img { width: 100%; height: 100%; object-fit: cover; display: block; }
.rv-card b { padding: 0 10px; font-size: var(--fs-md); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rv-card small { padding: 0 10px; color: var(--muted); font-size: var(--fs-sm); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rv-card.gone img { filter: grayscale(1); opacity: .55; }
.rv-card.gone b { color: var(--muted); text-decoration: line-through; }
.rv-gone { position: absolute; left: 6px; bottom: 6px; padding: 2px 8px; border-radius: var(--r-pill); background: var(--scrim); color: var(--on-photo); font: 600 var(--fs-2xs) var(--text); font-style: normal; }
/* Первый запуск: шторка «Что ищете?» → «В каком городе?»; язык — переключателем справа в шапке */
.onb-head { align-items: center; }
.onb-head .onb-lang { flex: none; flex-wrap: nowrap; gap: var(--s-1); margin: 0; }
.onb-head .onb-lang .chip { min-width: var(--h-md); min-height: var(--tap); padding: 0 10px; }
.onb-sub { margin-top: 0; }
.onb-picks .opt { min-height: 60px; border: 1px solid var(--line); margin-bottom: var(--s-2); }
.onb-picks .opt span { flex: 1; font-size: var(--fs-lead); }
.onb-picks .opt.on { border-color: var(--sea); background: var(--sea-soft); }
.onb-cities .opt { min-height: var(--h-md); }
.onb-acts .btn { flex: 1; }
.onb-foot { display: flex; align-items: center; justify-content: space-between; gap: var(--s-3); margin-top: var(--s-2); }
.onb-step { color: var(--muted); font-size: var(--fs-sm); }
.onb-foot .link { min-height: var(--tap); padding: 0 var(--s-1); }

/* ---------- Часть E: новостройки — статусы, карточка ЖК, шаблон страницы ЖК, квартиры с крупным планом ---------- */
/* статусы: пресейл — мандарин (единственный акцент), строится — нейтральный, сдан — зелёный, проект — серый */
:is(.fresh, .cx-status, .st-chip).st-presale { background: var(--sun); color: var(--ink-fixed); }
:is(.fresh, .cx-status, .st-chip).st-building { background: var(--surface); color: var(--ink); box-shadow: inset 0 0 0 1px var(--line); }
:is(.fresh, .cx-status, .st-chip).st-done { background: var(--ok); color: var(--sea-ink); }
:is(.fresh, .cx-status, .st-chip).st-project { background: var(--surface-2); color: var(--muted); }
.st-chip { flex: none; padding: 3px 9px; border-radius: var(--r-pill); font-size: var(--fs-xs); font-weight: 600; white-space: nowrap; }
.cx-card .cx-ppm, .cx-ppm { color: var(--muted); font-size: var(--fs-sm); }
.cx-fit { margin-top: 4px; color: var(--sea-text); font-size: var(--fs-sm); font-weight: 600; }
.cx-fit.soft { color: var(--muted); font-weight: 500; }
/* первый экран страницы ЖК: фото не выше 220 px, подпись «Визуализация» */
.cx-page .gallery.cx-hero { aspect-ratio: auto; height: min(220px, 56vw); }
.cx-page .gallery.cx-hero .track, .cx-page .gallery.cx-hero img { height: 100%; }
.cx-viz { position: absolute; left: 10px; bottom: 10px; padding: 3px 8px; border-radius: var(--r-pill); background: rgb(0 0 0 / .55); color: #fff; font-size: var(--fs-xs); }
.cx-key { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; margin: var(--s-3) 0 var(--s-2); }
.cx-key div { display: grid; align-content: start; gap: 2px; padding: 10px; border-radius: var(--r-sm); background: var(--surface-2); min-width: 0; }
.cx-key b { font-weight: 700; overflow-wrap: break-word; }
.cx-key span { color: var(--muted); font-size: var(--fs-xs); }
.cx-desc { margin-top: var(--s-2); }
.cx-desc .link { min-height: var(--tap); padding: 0; font-weight: 600; color: var(--sea-text); }
.clamp:not(.open) { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
/* якоря разделов: липкая строка с подчёркиванием активного, цели ≥ 48 px */
.cx-page .cx-anchors { position: sticky; top: var(--hdr-h, var(--top-h)); z-index: var(--z-sticky); gap: 0; padding: 0 var(--gutter); border-bottom: 1px solid var(--line); }
body.hdr-hidden .cx-page .cx-anchors { top: 0; }
.cx-anchors button { flex: none; min-height: 48px; padding: 0 12px; border: 0; background: none; color: var(--muted); font: inherit; font-weight: 600; border-bottom: 2px solid transparent; cursor: pointer; }
.cx-anchors button.on { color: var(--ink); border-bottom-color: var(--sun); }
.cx-page .cx-sec { scroll-margin-top: calc(var(--top-h) + 56px); }
/* квартиры в продаже: крупный план планировки (фото — запасной вариант), вся карточка нажимается */
.cx-units { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-2); margin-top: var(--s-2); }
.cx-more-rest[hidden] { display: none; }
.cx-unit { display: grid; grid-template-rows: auto 1fr; padding: 0; border: 1px solid var(--line); border-radius: var(--r-md); background: var(--surface); color: var(--ink); text-align: left; font: inherit; overflow: hidden; cursor: pointer; }
.cx-unit-plan { display: block; aspect-ratio: 4 / 3; background: var(--paper-2); }
.cx-unit-plan img { width: 100%; height: 100%; object-fit: contain; display: block; }
.cx-unit-plan.photo img { object-fit: cover; }
.cx-unit-body { display: grid; gap: 2px; padding: 8px 10px 10px; }
.cx-unit-body b { font: 700 var(--fs-md) var(--display); }
.cx-unit-body span { font-size: var(--fs-sm); }
.cx-unit-body small { color: var(--muted); font-size: var(--fs-xs); }
.cx-unit.lay .cx-unit-body b em { font-style: normal; color: var(--sea-text); }
.cx-more { min-height: var(--tap); margin-top: var(--s-1); padding: 0; font-weight: 600; color: var(--sea-text); }
.cx-fit-acts { display: flex; flex-wrap: wrap; gap: var(--s-3); margin-top: var(--s-1); }
.cx-fit-acts .link { min-height: var(--tap); padding: 0; font-weight: 600; color: var(--sea-text); }
.cx-note { color: var(--muted); font-size: var(--fs-sm); }
/* ход стройки: одна строка на корпус */
.cx-brows { display: grid; gap: 6px; margin: var(--s-2) 0; }
.cx-brow { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: var(--s-2); padding: 8px 0; border-bottom: 1px solid var(--line); }
.cx-brow span:not(.st-chip) { color: var(--muted); font-size: var(--fs-sm); }
.cx-hist summary { min-height: var(--tap); display: flex; align-items: center; font-weight: 600; color: var(--sea-text); cursor: pointer; list-style: none; }
.cx-hist summary::-webkit-details-marker { display: none; }
.cx-hist[open] summary { display: none; }
.cx-sec:has(.cx-hist[open]) > .cx-timeline { display: none; }
/* свёрнутые разделы «О доме», «Застройщик и документы» */
.cx-fold > summary { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); min-height: var(--tap); cursor: pointer; list-style: none; }
.cx-fold > summary::-webkit-details-marker { display: none; }
.cx-fold > summary h2 { margin: 0; }
.cx-fold[open] > summary .cx-type-chev { transform: rotate(180deg); }
/* «←» в строке хлебных крошек (вместо плавающей кнопки на фото) */
.crumbs-row { display: flex; align-items: center; gap: var(--s-1); padding-left: var(--gutter); }
.crumbs-row .crumbs { flex: 1; min-width: 0; padding-left: 0; }
.back-inline { position: static; flex: none; width: var(--tap); height: var(--tap); }
body.no-fab .dev-fab, body.no-fab .to-top { display: none !important; }
.cx-updated { margin: var(--s-3) var(--gutter) var(--s-4); color: var(--muted); font-size: var(--fs-xs); }
.cx-ask-ctx span { color: var(--muted); font-size: var(--fs-sm); }
.cxf-more > summary { display: flex; align-items: center; justify-content: space-between; min-height: var(--tap); cursor: pointer; list-style: none; }
.cxf-more > summary::-webkit-details-marker { display: none; }
.cxf-more[open] > summary .cx-type-chev { transform: rotate(180deg); }
.cx-fit-block.none h2 + p { color: var(--muted); }

/* ---------- Часть F: админка «ЖК» — список и редактор страницы ЖК ---------- */
.cxa-head { display: flex; gap: var(--s-2); align-items: end; margin: 0 var(--gutter) var(--s-3); }
.cxa-head .cxa-q { flex: 1; }
.cxa-head .btn { flex: none; min-height: var(--tap); }
.cxa-row .lead-head > div:first-child { min-width: 0; display: grid; gap: 2px; }
.cxa-badges { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--s-1); flex: none; max-width: 48%; }
.cxa-badges .st-badge { margin-left: 0; }
.cxa-row .adm-actions { margin-top: var(--s-2); flex-wrap: wrap; }
.cxe-top { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); margin: 0 var(--gutter) var(--s-2); }
.cxe-top .btn { display: inline-flex; flex: none; align-items: center; justify-content: flex-start; gap: 6px; width: auto; min-height: var(--tap); padding-left: 0; }
.cxe-top .btn svg { width: 18px; height: 18px; }
.cxe-title { margin: 0 var(--gutter) var(--s-1); font: 600 var(--fs-xl, 22px)/1.2 var(--display); letter-spacing: -.02em; overflow-wrap: anywhere; }
.cxe-err { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); margin: 0 var(--gutter) var(--s-3); padding: 10px var(--s-3);
  border-radius: var(--r-sm); background: var(--bad-bg); color: var(--bad-fg); font-weight: 500; overflow-wrap: anywhere; }
.sheet .cxe-err { margin: var(--s-2) 0; }
.cxe { display: grid; gap: var(--s-3); }
.cxe .cxe-blk { gap: var(--s-3); }
.cxe .cxe-blk > summary { justify-content: space-between; gap: var(--s-2); }
.cxe-dot { width: 8px; height: 8px; border-radius: var(--r-round); background: var(--sea); flex: none; margin-left: auto; }
.cxe-flag { display: flex; align-items: center; gap: 10px; min-height: var(--tap); font-weight: 500; color: var(--ink); cursor: pointer; }
.cxe-flag input { width: 22px; height: 22px; flex: none; accent-color: var(--sea); }
.cxe-req2 { font-weight: 400; color: var(--muted); }
.cxe-en { padding-left: var(--s-3); border-left: 3px solid var(--line); }
.cxe-code { display: block; padding: 10px var(--s-3); border-radius: var(--r-sm); background: var(--surface); color: var(--ink); overflow-wrap: anywhere; }
.cxe-src select { font-size: 16px; }
.cxe-src { font-size: var(--fs-sm); }
.cxe-img { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); }
.cxe-img img { width: 100%; max-height: 200px; object-fit: contain; border-radius: var(--r-xs); background: var(--paper-2, var(--surface)); }
.cxe-img .chip { min-height: var(--tap); cursor: pointer; }
.cxe-img .chip:focus-within { outline: 2px solid var(--sea); outline-offset: 2px; }
.cxe-obj { display: grid; gap: var(--s-3); min-width: 0; margin: 0; padding: var(--s-3); border: 1px solid var(--line); border-radius: var(--r-sm); }
.cxe-obj legend { padding: 0 var(--s-1); font-weight: 600; color: var(--ink); }
.cxe-list { display: grid; gap: var(--s-2); min-width: 0; }
.cxe-list .sub-h { margin: var(--s-2) 0 0; }
.cxe-list > .chip, .field > .chip[data-cxe-add] { justify-self: start; min-height: var(--tap); }
.cxe-item { display: grid; gap: var(--s-3); padding: 0 var(--s-3); border-radius: var(--r-sm); background: var(--surface); }
.cxe-item[open] { padding-bottom: var(--s-3); }
.cxe-item > summary { display: flex; align-items: center; min-height: var(--tap); font-weight: 500; color: var(--ink); cursor: pointer; overflow-wrap: anywhere; }
.cxe-near { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr) auto; gap: var(--s-2); align-items: center; }
.cxe-near .chip { min-width: var(--tap); min-height: var(--tap); justify-content: center; }
.cxe-near .chip svg { width: 16px; height: 16px; }
.cxe-actions { display: grid; gap: var(--s-2); }
.cxe-actions .btn { width: 100%; min-height: var(--tap); }
.cxe-cf { display: grid; gap: var(--s-2); }
.cxe-cf .btn { width: 100%; }

/* ===== Часть G (27.10.2026): «Мой кабинет» клиента (#/me) и ярлык на главном экране ===== */
/* шапка: у клиента — «Мой кабинет» (язык и валюта внутри), в кабинете риелтора и админке — «Язык и валюта» */
body:not(.pro-mode) #localeBtn { display: none; }
body.pro-mode #meBtn { display: none; }
/* аватар как в Telegram: фото или инициалы на цвете по Telegram ID; кружок 36px, зона нажатия 44px */
.me-btn { position: relative; display: grid; place-items: center; padding: 0; border-radius: 50%; }
.me-btn::after { content: ''; position: absolute; left: 50%; top: 50%; width: var(--tap); height: var(--tap); transform: translate(-50%, -50%); }
.me-btn:focus-visible { outline: 2px solid var(--sea); outline-offset: 2px; }
.tg-ava { position: relative; display: grid; place-items: center; flex: none; overflow: hidden; border-radius: 50%; background: var(--ava, #65aadd); color: #fff;
  font: 600 14px/1 var(--text); letter-spacing: .02em; user-select: none; }
.tg-ava i { font-style: normal; }
.tg-ava svg { width: 60%; height: 60%; stroke: #fff; }
.tg-ava img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.tg-ava-sm { width: 36px; height: 36px; }
.tg-ava-lg { width: 64px; height: 64px; font-size: 24px; }
.me-head { justify-content: flex-start; gap: var(--s-4); }
.me-head h1 { min-width: 0; overflow-wrap: anywhere; }
.me-list { padding: var(--s-1) var(--s-2); gap: 0; }
.me-row { min-height: 56px; border-radius: var(--r-md); }
.me-row + .me-row { border-top: 1px solid var(--line); border-top-left-radius: 0; border-top-right-radius: 0; }
.me-row .ico svg { width: var(--ic-md); height: var(--ic-md); }
.me-txt { flex: 1; min-width: 0; font-size: var(--fs-base); }
.me-txt small { margin-top: 2px; }
.me-go { flex: none; display: grid; place-items: center; color: var(--muted); }
.me-go svg { transform: rotate(-90deg); }
.me-done .me-go svg { transform: none; width: 18px; height: 18px; color: var(--sea); }
.me-done { cursor: default; }
/* плашка «Добавьте … на главный экран» — над нижним меню ленты, не вместе с «Сохранить поиск» и не поверх шторки */
.hs-bar { position: fixed; z-index: var(--z-float); left: var(--gutter); right: var(--gutter); bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-3));
  max-width: 528px; margin: 0 auto; display: grid; grid-template-columns: auto 1fr; align-items: center; gap: var(--s-2) var(--s-3);
  padding: var(--s-3) var(--s-3) var(--s-2) var(--s-4); border-radius: var(--r-lg); background: var(--surface); color: var(--ink);
  border: 1px solid var(--line); box-shadow: var(--sh-2); }
.hs-bar[hidden], body:has(.sheet.show) .hs-bar, body:has(.sub-float:not([hidden])) .hs-bar, body.pro-mode .hs-bar { display: none; }
.hs-ico { display: grid; place-items: center; width: 40px; height: 40px; border-radius: var(--r-sm); background: var(--sea-soft); color: var(--sea-text); }
.hs-ico svg { width: var(--ic-md); height: var(--ic-md); }
.hs-bar p { margin: 0; font-size: var(--fs-md); font-weight: 500; line-height: 1.4; }
.hs-acts { grid-column: 1 / -1; display: flex; justify-content: flex-end; align-items: center; gap: var(--s-2); }
.hs-acts .link { min-height: var(--h-md); padding: 0 var(--s-3); color: var(--muted); font-weight: 600; }
.hs-acts .btn { flex: none; width: auto; min-height: var(--h-md); padding: 0 var(--s-6); }
@media (prefers-reduced-motion: no-preference) { .hs-bar:not([hidden]) { animation: hs-in var(--dur-mid, .25s) var(--ease-out, ease-out); } }
@keyframes hs-in { from { opacity: 0; transform: translateY(12px); } }
/* «Подборки» → «Запросить подборку»: аватар, имя и роль агента — ссылка на его витрину или страницу; «Запросить» — отдельная кнопка */
.rcv-agent-open { flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--s-3); min-height: var(--h-md); margin: calc(-1 * var(--s-2)) 0; padding: var(--s-2) 0;
  border-radius: var(--r-md); color: inherit; text-decoration: none; -webkit-tap-highlight-color: transparent; }
.rcv-agent-open > div { flex: 1; min-width: 0; }
.rcv-agent-open:active { opacity: .7; }
.rcv-agent-open:focus-visible { outline: 2px solid var(--sea); outline-offset: 4px; }
.sc-foot .btn + .btn { margin-top: var(--s-2); }

/* ===== Часть P / K: «Помесячно | Посуточно» — как переключатель сделки: белая дорожка, выбранный — тёмная заливка ===== */
.sum-row .rent-mode { padding: var(--s-1); gap: 0; background: var(--surface); border-radius: var(--r-md); box-shadow: none; }
.sum-row .rent-mode button { min-height: var(--h-sm); padding: 0 14px; border-radius: var(--r-sm); color: var(--muted); box-shadow: none; }
.sum-row .rent-mode button.on { background: var(--sea); color: var(--sea-ink); box-shadow: none; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .sum-row .rent-mode button.on { background: var(--sea); } }
:root[data-theme="dark"] .sum-row .rent-mode button.on { background: var(--sea); }

/* Часть P / F: «Сопровождение сделки» — короткий список с галочками */
.deal-pts { display: grid; gap: var(--s-2); margin: 0; padding: 0; list-style: none; }
.deal-pts li { display: flex; align-items: flex-start; gap: var(--s-2); font-size: var(--fs-md); line-height: 1.35; }
.deal-pts svg { flex: none; width: 18px; height: 18px; margin-top: 1px; stroke: var(--sea); }

/* Часть P / E: адрес витрины + «Копировать» */
.sc-addr { display: flex; align-items: center; gap: var(--s-2); }
.sc-addr .calc-note { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.sc-addr .chip { flex: none; gap: 6px; }
.sc-addr .chip svg { width: 16px; height: 16px; }

/* ===== Часть P / M: витрина = страница агента (.agent-hero), без обложки ===== */
.agent-hero.sc { padding-bottom: var(--s-4); }
.agent-hero > .sc-avatar { border: 0; }
.agent-hero h1 .verified { vertical-align: middle; }
.agent-hero .langs { text-align: center; }
.agent-hero .sc-links { padding: 14px 0 0; }
.agent-hero .sc-role:empty, .agent-hero .sc-bio:empty { display: none; }
.sc-preview .agent-hero { margin: 0 var(--gutter); }
.sc-langs-pick { margin-top: var(--s-1); }
.rcv-agent .rcv-bio { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-top: 2px; color: var(--muted); font-size: var(--fs-sm); line-height: 1.35; }
.rcv-agent .rcv-langs { display: block; margin-top: 2px; color: var(--muted); font-size: var(--fs-xs); }

/* Часть P / A: «Аренда | Продажа» в сборке подборки */
.pk-tabs { margin: var(--s-2) var(--gutter) 0; }

/* Часть P / P: подписи строк «Сравнения» переносятся и не наезжают на первую колонку */
.cmp th { min-width: 104px; max-width: 112px; overflow-wrap: break-word; hyphens: auto; -webkit-hyphens: auto; padding-right: 10px; }

/* Часть P / J + I: обязательные «Свободна с» и календарь */
.avail-now { margin-bottom: var(--s-2); }
.ced.invalid { border-radius: var(--r-md); box-shadow: 0 0 0 2px var(--bad-fg); }
.cal-upd.cal-req { color: var(--bad-fg); }
.lead-meta.warn { color: var(--bad-fg); }

/* ===== Кабинет риелтора: подсказки в полях и карта точки (28.10) ===== */
/* Подсказка в поле мельче введённого текста, чтобы не спорила с подписью поля */
:is(.field, .lc-tpl-edit, .lc-remind, .sch-range, .pk-max, .f-own-field) :is(input, textarea)::placeholder { font-size: var(--fs-md); }
.form-map-wrap { position: relative; }
.form-map { height: 260px; }
.form-map-full { position: absolute; left: 8px; bottom: 8px; z-index: 2; background: var(--surface); box-shadow: var(--shadow-sm, 0 1px 4px rgba(0,0,0,.18)); }
body.map-full .form-map-wrap { position: fixed; inset: 0; z-index: 90; background: var(--bg); }
body.map-full .form-map { height: 100%; margin: 0; border-radius: 0; }
body.map-full .form-map-full { left: 50%; bottom: calc(16px + env(safe-area-inset-bottom)); transform: translateX(-50%); min-height: var(--tap); padding: 0 28px; background: var(--sea); color: var(--sea-ink); font-weight: 600; }
body.map-full .tabbar, body.map-full .dev-fab, body.map-full .dev-back { display: none; }

/* ===== Кабинет владельца: шрифты и отступы (28.10) ===== */
/* Корневой кегль 15px (html { font: var(--fs-base) }), поэтому .75rem = 11,25px, .8125rem = 12,2px.
   На рабочих экранах (админка, кабинет, форма объекта, витрина) мелкие токены — в пикселях, как задумано: 12 / 13 */
body.pro-mode { --fs-2xs: 12px; --fs-xs: 12px; --fs-sm: 13px; }
/* предпросмотр витрины в редакторе — как у клиента, без подмены */
body.pro-mode .sc-preview { --fs-2xs: .75rem; --fs-xs: .75rem; --fs-sm: .8125rem; }
/* «необязательно» в подписи поля было 10,9px */
body.pro-mode .field > small:not(.calc-note) { font-size: var(--fs-xs); font-weight: 400; }
/* Раскрывающиеся блоки (<details>): grid-gap к содержимому не применяется — поля слипались (0px).
   Форма объекта «Для агентства», редактор ЖК: блоки и элементы списков */
#view details:is(.priv-box, .cxe-item) { gap: 0; }
#view details:is(.priv-box, .cxe-item) > :not(summary) + :not(summary) { margin-top: var(--s-3); }
/* Заявки: строка счётчиков статусов вплотную к первой карточке */
body.pro-mode .chips + .feed { margin-top: var(--s-3); }
/* Заявки: @ник и объект в карточке — цели касания 16–20px */
body.pro-mode .lead-head .link, body.pro-mode .lead .lead-obj { display: flex; width: fit-content; max-width: 100%; align-items: center; min-height: 32px; }
/* Заявки: строка запроса клиента (<small> внутри 13px) была 10–11px */
body.pro-mode .lead-req small { font-size: var(--fs-sm); }

/* UX-form (28.10) */
/* форма объекта: поля дома из карточки ЖК — только для чтения */
.add-form .uf-ro, .add-form select:disabled { background: var(--surface-2); color: var(--muted); border-style: dashed; opacity: 1; cursor: default; }
.add-form .uf-cx-note { display: flex; flex-wrap: wrap; align-items: center; column-gap: 4px; margin-top: 4px; }
.add-form .uf-cx-note .link { display: inline-flex; align-items: center; min-height: 32px; }
.add-form .uf-row-note { margin-top: -6px; }
.add-form .uf-ro-wrap .toggle input:disabled { opacity: .6; cursor: default; }

/* UX-admin (28.10) */
.calc-grid .ua-tile { display: grid; gap: 2px; min-width: 0; min-height: 48px; padding: 10px 0; align-content: space-between; margin: 0;
  border: 0; border-bottom: 1px solid var(--line); border-radius: 0; background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; }
.calc-grid .ua-tile span::after { content: '\00a0›'; color: var(--sea-text); font-weight: 600; }
.calc-grid .ua-tile:active { background: var(--surface-2); }
.calc-grid .ua-tile:focus-visible { outline: 2px solid var(--sea); outline-offset: 2px; }
.ua-ag-side { display: flex; align-items: flex-start; gap: var(--s-2); flex: none; }
.ua-ag-side .st-badge { margin-left: 0; }
.ua-ag-more .adm-more-menu { left: auto; right: 0; }
.lead-meta .ua-ag-obj { display: inline-flex; align-items: center; min-height: 32px; padding: 0; border: 0; background: none; font-size: inherit; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.ua-src-n { color: var(--muted); font-weight: 400; font-size: var(--fs-sm); }
.action-bar.ua-sc-bar .btn.primary { background: var(--cta); color: var(--cta-ink); }   /* palette-29.10 */
.action-bar.ua-sc-bar .btn.primary:disabled { background: var(--surface-2); color: var(--muted); }
.ua-sc-photo { display: flex; align-items: center; gap: var(--s-4); min-height: 112px; padding: var(--s-3) var(--s-4); border: 1.5px dashed var(--field-border);
  border-radius: var(--r-md); background: var(--surface-2); cursor: pointer; }
.ua-sc-photo:focus-within { outline: 2px solid var(--sea); outline-offset: 2px; }
.ua-sc-photo > img, .ua-sc-ph { flex: none; width: 88px; height: 88px; border-radius: var(--r-round); object-fit: cover; }
.ua-sc-ph { display: grid; place-items: center; background: var(--sea-soft); color: var(--sea-text); font-size: 32px; }
.ua-sc-ph svg { width: 32px; height: 32px; }
.ua-sc-txt { display: grid; gap: var(--s-1); min-width: 0; }
.ua-sc-txt b { color: var(--sea-text); font-size: var(--fs-md); }
.ua-sc-txt small { color: var(--muted); font-size: var(--fs-sm); }
/* /UX-admin */

/* UX-nav (28.10) */
/* Владелица: на рабочих экранах выбор города не нужен — списки админки от него не зависят */
body.un-adm.pro-mode #cityBtn { display: none; }
/* Пока сервер не сказал, кто вошёл: шапка, заголовок и нижнее меню рабочих экранов — пустая заготовка, без клиентского вида */
body.un-wait.pro-mode .top-actions, body.un-wait.pro-mode .pro-tabbar > *, body.un-wait.pro-mode #view .cab-head h1 { visibility: hidden; }
/* «Мои / Все» над списком объектов владелицы */
.un-scope { margin: var(--s-2) var(--gutter) 0; }

/* UX-nav (28.10): один ряд фильтров */
.un-my-search { display: flex; align-items: center; gap: var(--s-2); }
.un-my-search .my-search { flex: 1; min-width: 0; margin: 0; }
.un-filters { align-items: center; flex-wrap: nowrap; overflow-x: auto; padding-block: 3px; scrollbar-width: none;
  -webkit-mask-image: linear-gradient(90deg, black calc(100% - 28px), transparent); mask-image: linear-gradient(90deg, black calc(100% - 28px), transparent); }
.un-filters::-webkit-scrollbar { display: none; }
.my-tools:has(.un-filters) { padding-bottom: var(--s-2); }
.un-filters > *, .un-grp > * { flex: none; }
.un-grp { display: contents; }
.un-sep { width: 1px; align-self: stretch; min-height: 24px; background: var(--line); }
.un-st { flex: none; width: auto; max-width: 70vw; height: var(--h-sm); padding: 0 var(--s-3); border-radius: var(--r-pill); border: 1px solid var(--field-border);
  background: var(--surface-2); color: var(--ink); font: 500 var(--fs-sm) var(--text); }      /* unst-29.10: как .chip.sm рядом */
@supports (-webkit-touch-callout: none) { .un-st { font-size: 16px; } }      /* iPhone: меньше 16px — страница увеличивается при нажатии */
.ao-filters .field input { height: var(--tap); }
.un-st:focus-visible { outline: none; border-color: var(--sea); box-shadow: 0 0 0 3px color-mix(in srgb, var(--sea) 20%, transparent); }

/* UX-font (28.10) */
/* Клиентские экраны: корневой кегль 15px (html { font: var(--fs-base) }), из-за этого мелкие токены выходили 11,25 / 12,2px.
   Задаём их в rem от фактического корня 15px: 12 / 12 / 13px, как в body.pro-mode выше, но с масштабированием текста.
   Заголовки и основной текст (--fs-md и крупнее) не трогаем. */
:root { --fs-2xs: .8rem; --fs-xs: .8rem; --fs-sm: .8667rem; }   /* 12 / 12 / 13 */
/* предпросмотр витрины в редакторе — как у клиента */
body.pro-mode .sc-preview { --fs-2xs: .8rem; --fs-xs: .8rem; --fs-sm: .8667rem; }
/* UX-font meta 13: подписи и мета-строки клиента — не мельче 13px (12px остаётся только у бейджей на фото, пинов и счётчиков) */
:is(.money em, .calc-grid span, .calc-grid.mk-now small, .calc-src, .pm-hint, .cx-timeline small, .cx-near span, .cx-facts span, .cx-key span,
  .cx-type-price small, .cx-unit-body small, .cx-updated, .fp-spec span, .fp-ends, .fy-scen span, .sc-item small, .sc-foot p,
  .suggest small, .similar .sim-why, .rcv-agent .rcv-langs) { font-size: var(--fs-sm); }

/* UX-cx (29.10) */
/* «Другие ЖК города»: карточки по своей высоте, без пустого низа под короткими карточками */
/* карусель: в каждой карточке одинаковый набор строк (цена, цена за м², название, подзаголовок, один чип) — карточки одной высоты, пустого низа нет */
.cx-others .cx-fit, .cx-others .facts .fact:nth-child(n+2) { display: none; }
.cx-others .cx-ppm, .cx-others .addr span, .cx-others .facts .fact { max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* «м²» на странице ЖК и в карточках ЖК — один размер: цена за м², площади типов, квартир и планировок */
.cx-page .cx-head .cx-price span, .cx-page .cx-type-main span, .cx-page .cx-unit-body > span, .cx-page .cx-flat-row > span, .cx-card .cx-ppm {
  font-family: var(--text); font-size: var(--fs-sm); font-weight: 400; font-variant-position: normal; }
/* партнёры застройщика под «Ещё N» */
.cx2-more { display: block; margin: var(--s-2) 0 var(--s-3); }
/* UX-cx: хвост страницы ЖК — таббара нет (has-action), отступ под панель даёт .spacer */
body.has-action #app:has(.cx-page) { padding-bottom: var(--safe-b); }
/* UX-cx: «Управление и сервис» */
.cx2-svc { margin: var(--s-2) 0 0; padding-left: 1.2em; display: grid; gap: 6px; }
/* UX-cx: «Соберём подборку» */
.cx2-pick .desc { margin: 4px 0 var(--s-3); color: var(--muted); }
/* UX-cx: видео — слайд галереи */
.gallery .track .cx2-vslide { flex: none; width: 100%; height: 100%; scroll-snap-align: center; background: var(--surface-2); }
.cx2-vslide video { width: 100%; height: 100%; object-fit: cover; display: block; }
/* UX-cx: отделка — карусель */
.cx-page .cx-finish { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none;
  margin: 0 calc(-1 * var(--s-4)); padding: 0 var(--s-4) 4px; scroll-padding: 0 var(--s-4); }
.cx-page .cx-finish::-webkit-scrollbar { display: none; }
.cx-page .cx-finish > div { flex: 0 0 74%; display: block; scroll-snap-align: start; padding: 0 0 var(--s-3); border-radius: var(--r-md); background: var(--surface-2); overflow: hidden; }
.cx-page .cx-finish > div:only-child { flex-basis: 100%; }
.cx-page .cx-finish img { display: block; width: 100%; height: 140px; border-radius: 0; margin-bottom: var(--s-2); }
.cx-page .cx-finish > div.no-img { padding-top: var(--s-3); }
.cx-page .cx-finish b, .cx-page .cx-finish p { display: block; padding: 0 var(--s-3); }

/* R-rent (29.10): подписи метрик, «Как это работает», «Ещё медиа» */
.rr-scope { display: block; margin: 0 0 var(--s-2); }
.rr-how { margin: 0 var(--gutter) var(--s-3); }
.rr-how > summary { min-height: var(--tap); display: flex; align-items: center; color: var(--sea-text); font-weight: 600; font-size: var(--fs-sm); cursor: pointer; }
.rr-how > .adm-note { margin: 0; }
.rr-how > summary::after { content: ""; width: 7px; height: 7px; margin-left: 8px; border: solid currentColor; border-width: 0 2px 2px 0; transform: translateY(-2px) rotate(45deg); }  /* rr-how-chev */
.rr-how[open] > summary::after { transform: translateY(2px) rotate(-135deg); }
.cxe-top + .cxe-title + .rr-how, .rr-how + .block { margin-top: 0; }
.rr-media { margin-top: var(--s-1); }

/* R-map */
/* карта: фильтры справа от переключателя «Объекты / Цены», «Список · N» внизу по центру (прячется, пока открыта карточка объекта) */
.map-wrap .mp-fbtn { position: absolute; z-index: var(--z-map-ui); top: 64px; right: var(--s-3); box-shadow: var(--sh-2); }
.mp-fab { position: absolute; z-index: var(--z-map-ui); left: 0; right: 0; bottom: var(--s-4); display: flex; justify-content: center; pointer-events: none; }
.mp-fab button { pointer-events: auto; min-height: var(--h-md); padding: 0 var(--s-4); border-radius: var(--r-pill); background: var(--sea); color: var(--sea-ink);
  font: 600 var(--fs-md)/1 var(--display); box-shadow: var(--sh-3); font-variant-numeric: tabular-nums; }
#mapCard:not(:empty) + .mp-fab { display: none; }
/* метка ЖК и метка «несколько объектов в одном доме» */
.pin-cluster.mp-cx { max-width: 180px; border-radius: var(--r-md); }
.pin-cluster.mp-cx b { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-sm); }
.pin-cluster.mp-stack:not(.mp-cx) { background: var(--surface); color: var(--ink); border-color: var(--sea); }
.mp-stack-card { display: block; padding: var(--s-2) var(--s-3); }
.mp-stack-head { margin-bottom: var(--s-1); font-size: var(--fs-sm); color: var(--muted); }
.mp-stack-list { display: grid; gap: var(--s-1); max-height: 216px; overflow-y: auto; overscroll-behavior: contain; }
.mp-sheet-list { max-height: none; overflow: visible; }
.mp-stack-row { display: flex; align-items: center; gap: var(--s-3); width: 100%; min-height: var(--tap); padding: var(--s-1) 0; text-align: left; color: var(--ink); }
.mp-stack-row img { flex: none; width: 64px; height: 48px; border-radius: var(--r-xs); object-fit: cover; background: var(--surface-2); }
.mp-stack-row span { display: grid; gap: 2px; min-width: 0; font-size: var(--fs-sm); color: var(--muted); }
.mp-stack-row b { font: 600 var(--fs-md)/1.2 var(--display); color: var(--ink); }
.mp-stack-row + .mp-stack-row { border-top: 1px solid var(--line); }
/* число у ползунка: подчёркнуто пунктиром — понятно, что его можно нажать и ввести */
.range-row b.mp-num { cursor: text; text-decoration: underline dotted; text-underline-offset: 3px; }
.range-row .mp-num-in { width: 7.5em; min-height: var(--h-sm); padding: 0 var(--s-2); border: 1px solid var(--sea); border-radius: var(--r-sm);
  background: var(--surface); color: var(--ink); font: 600 var(--fs-md)/1 var(--display); text-align: right; }
/* сравнение: строка «Совпадает: …» под таблицей */
.mp-same { margin-top: var(--s-2); }
/* лента: фото карточки 3:2 (около 230 px на 375) — на экран помещаются две карточки */
.card:not(.cx-card) > .gallery { aspect-ratio: 3 / 2; }
/* форма объекта: «Опубликовать / Сохранить» закреплена внизу экрана, пока форма прокручивается */
.btn[data-ff-send] { position: sticky; z-index: var(--z-raised); bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-2)); box-shadow: var(--sh-3); }

/* R-style (29.10) */
/* Шрифты со своего сервера (без Google Fonts): Golos Text и Geologica — вариативные woff2, latin + latin-ext (знак ₾) + cyrillic.
   Golos объявлен только до 600: запрос 700 рисуется как 600, без «искусственного» жирного */
@font-face { font-family: 'Geologica'; font-style: normal; font-weight: 500 700; font-display: swap;
  src: url(fonts/geologica-cyrillic.woff2?v=a7dc739efa) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }
@font-face { font-family: 'Geologica'; font-style: normal; font-weight: 500 700; font-display: swap;
  src: url(fonts/geologica-latin-ext.woff2?v=85ea5e8563) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Geologica'; font-style: normal; font-weight: 500 700; font-display: swap;
  src: url(fonts/geologica-latin.woff2?v=b14f1edee9) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Golos Text'; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(fonts/golos-text-cyrillic.woff2?v=17d048ca05) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }
@font-face { font-family: 'Golos Text'; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(fonts/golos-text-latin-ext.woff2?v=05befabe48) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Golos Text'; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(fonts/golos-text-latin.woff2?v=9a69d0aa47) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
/* Половинные шаги отступов: 2 / 6 / 10 / 14 px — для мест, где шкала 4/8/12/16 не подходит */
:root { --s-0-5: 2px; --s-1-5: 6px; --s-2-5: 10px; --s-3-5: 14px; }
/* Мандарин как подпись: черта под ценой на странице объекта и квартиры, точка над активной вкладкой */
.price-row .price::after, h1.price::after { content: ''; display: block; width: 40px; height: 3px; margin-top: var(--s-1-5); border-radius: var(--r-pill); background: var(--sun); }
.tabbar button.on::before { content: ''; position: absolute; top: 3px; left: 50%; width: 4px; height: 4px; margin-left: -2px; border-radius: var(--r-round); background: var(--sun); }
/* Шиммер: два прохода и стоп на ровном фоне, а не бесконечное мигание; reduced-motion гасит его совсем (общее правило) */
.gallery, .cmp-head img, .sc-item img { animation-iteration-count: 2; }
/* Golos Text 700 → 600 (700 больше не грузим) */
.badge, .fbtn .badge-n, .fact.green::before, .ok-dot, .cx-facts b, .fy-rows .total, .req, .cx-key b { font-weight: 600; }
/* Служебный блок без собственной карточки: текст прямо на фоне страницы */
.block.plain { background: none; box-shadow: none; padding-inline: 0; margin-inline: var(--gutter); }
/* Отступ под кнопкой «Поделиться подборкой» в сравнении (было style="padding:14px 16px") */
.pad-block { padding: var(--s-3-5) var(--gutter); }
/* Карточка ленты: ссылка-заголовок на цене — Tab и экранный диктор видят ссылку, клик по карточке работает как раньше */
.card-h { margin: 0; }
.card-link { color: inherit; }
.card-link:focus-visible { outline: none; }
.card:has(.card-link:focus-visible) { outline: 3px solid var(--sea); outline-offset: 2px; }
/* Миниатюры фото — кнопки */
.thumbs .thumb { flex: none; padding: 0; border-radius: var(--r-xs); }
.thumbs .thumb img { display: block; }
.thumbs .thumb.on img { opacity: 1; border-color: var(--sea); }
.thumbs .thumb.plan img { object-fit: contain; background: var(--paper-2); }
.thumbs .thumb:focus-visible { outline: 3px solid var(--sea); outline-offset: 2px; }
/* Подсказки поиска (combobox): активная строка при выборе стрелками */
.suggest [role="option"][aria-selected="true"] { background: var(--surface-2); }
/* Ошибка под полем в форме входа риелтора */
.join-error:focus { outline: none; }
/* Контраст: крошки на фото застройщика — на подложке, а не прямо на снимке */
.dev-hero .crumbs { align-self: flex-start; max-width: 100%; padding: 0 var(--s-2); border-radius: var(--r-pill); background: var(--scrim); }
.dev-hero .crumbs, .dev-hero .crumbs button { color: var(--on-photo); }
/* Контраст: метка «по рынку» на шкале цены — 4.5:1 к белой середине и 3:1 к жёлтому участку шкалы (было 2.4:1) */
:root, :root[data-theme="dark"] { --mark-fair: #8f7400; }
/* Контраст в тёмной теме: шкала стройки ЖК — линия и пустые точки видны (было 1.3:1) */
:root[data-theme="dark"] .cx-timeline { border-left-color: var(--field-border); }
:root[data-theme="dark"] .cx-timeline li:not(.done)::before { border-color: var(--field-border); }
/* Ошибка под полем «до» в заявке: отдельной строкой под парой полей */
.range:has(.field-err) { flex-wrap: wrap; }
.range .field-err { flex: 1 0 100%; grid-column: 1 / -1; margin-top: 0; }
/* R-style end */

/* UX-empty (29.10): пустая выдача — «Не нашли? Подберём под бюджет» */
.empty .em-pick { margin-top: var(--s-4); padding: var(--s-4); border-radius: var(--r-md); background: var(--surface-2); text-align: left; }
.empty .em-pick b { margin: 0 0 4px; font: 600 var(--fs-base) var(--text); color: var(--ink); }
.empty .em-pick span { display: block; font-size: var(--fs-sm); color: var(--muted); }
.empty .em-pick button { width: 100%; margin-top: var(--s-3); }
.empty .em-pick ~ .empty-reset { margin-top: var(--s-2); }

/* R-legal (29.10) */
.lg-note { margin: var(--s-3) 0 0; color: var(--muted); font-size: var(--fs-xs); line-height: 1.45; }
.lg-report { display: inline-flex; align-items: center; min-height: var(--tap); padding: 0; color: var(--muted); font-size: var(--fs-sm); font-weight: 500;
  text-decoration: underline; text-underline-offset: 3px; }
.lg-report-cx { margin: 0 var(--gutter) var(--s-2); }
.lg-src { margin: var(--s-2) 0 0; color: var(--muted); font-size: var(--fs-xs); }
.lg-check { display: flex; gap: var(--s-2); align-items: flex-start; margin: var(--s-3) 0; color: var(--ink); font-size: var(--fs-md); line-height: 1.45; cursor: pointer; }
.lg-check input { flex: none; width: 22px; height: 22px; margin: 1px 0 0; accent-color: var(--sea); }
.lg-check input[aria-invalid="true"] { outline: 2px solid var(--bad-fg); outline-offset: 2px; }
.lg-check .privacy-link { font-size: inherit; }
.lg-onb { margin: var(--s-3) 0 0; font-size: var(--fs-xs); }
.lg-pk { margin-top: var(--s-1); }
button.lg-ver { border: 0; cursor: pointer; }
.lg-rep-err { margin: var(--s-2) 0 0; color: var(--bad-fg); font-size: var(--fs-sm); font-weight: 500; }
/* OWN-stats */
.os-plat-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--s-2); }
.os-plat-head h2 { margin: 0; }
.os-plat .st-period { margin: var(--s-2) 0; }
.os-sort { margin: 0 var(--gutter) var(--s-2); }
.os-hint { display: block; margin: 0 var(--gutter) var(--s-2); }
.os-st-scope { margin: 0 var(--gutter) var(--s-2); }
.os-row { display: block; width: 100%; text-align: left; font: inherit; color: inherit; }
.os-row.gone { cursor: default; }
.os-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--s-2); margin-bottom: var(--s-3); }
.os-head b { min-width: 0; overflow-wrap: anywhere; }
.os-head small { flex: none; font-size: var(--fs-xs); color: var(--muted); }
.os-you { font-size: var(--fs-xs); font-weight: 500; color: var(--muted); }

/* owner-29.10 */
.td-ag { display: block; font-size: var(--fs-sm); font-weight: 600; color: var(--ink); }
.ua-ag-card.tap { cursor: pointer; }
.ua-ag-who { display: flex; align-items: center; gap: var(--s-3); min-width: 0; }
.ua-ag-ava { width: 48px; height: 48px; flex: none; border-radius: 50%; object-fit: cover; display: grid; place-items: center; font-size: var(--fs-md, 1.1rem); }
/* OW2-C (28.10): админ-экраны владелицы — «Статистика», приглашения на «Агентах» */
.os-plat .calc-grid > .os-subs { grid-column: 1 / -1; }
.inv-new { gap: 0; padding-top: 0; padding-bottom: 0; }
.inv-new > summary, .inv-old > summary { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); min-height: var(--tap); cursor: pointer; list-style: none; }
.inv-new > summary { padding: var(--s-3) 0; }
.inv-new > summary::-webkit-details-marker, .inv-old > summary::-webkit-details-marker { display: none; }
.inv-new > summary::after, .inv-old > summary::after { content: ""; flex: none; width: 7px; height: 7px; margin: 0 4px 0 8px; border: solid var(--sea-text); border-width: 0 2px 2px 0; transform: translateY(-2px) rotate(45deg); }
.inv-new[open] > summary::after, .inv-old[open] > summary::after { transform: translateY(2px) rotate(-135deg); }
.inv-new > .inv-body { display: grid; gap: 14px; padding-bottom: var(--s-4); }
.inv-old { margin: var(--s-3) 0 0; }
.inv-old > summary { justify-content: flex-start; padding: 0 var(--gutter); color: var(--sea-text); font-weight: 600; font-size: var(--fs-sm); }
.inv-old > .feed { margin-top: var(--s-2); }
.inv-old-card { color: var(--muted); }
.inv-old-card b { color: var(--ink); }
@media (max-width: 400px) { .calc-grid.three.ua-ag3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .calc-grid.ua-ag3 > :last-child { grid-column: 1 / -1; } }   /* OW2-C p2: «Заблокированы» — перенос по слогам, не посреди буквы */
.ua-ag-name { display: block; font-weight: 600; color: var(--ink); text-decoration: none; }

/* nomore-29.10 */
.ow-foot { margin: var(--s-4) 0 var(--s-2); text-align: center; }

/* LEADS-NB (29.10): заявки на новостройки — этап, назначение, суммы (только владелица / свой риелтор) */
.lnb { margin: var(--s-2) 0; padding: var(--s-3); border-radius: var(--r-sm); background: var(--surface-2); border: 1px solid var(--line); display: grid; gap: var(--s-2); }
.lnb-top { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); font-size: var(--fs-sm); }
.lnb-st { display: inline-flex; align-items: center; min-height: 24px; padding: 2px 10px; border-radius: var(--r-pill); background: var(--sea-soft); color: var(--sea-text); font-weight: 600; font-size: var(--fs-sm); line-height: 1.25; }
.lnb-st-new { background: var(--sun-soft); color: var(--sun-text); }
.lnb-st-commission, .lnb-st-paid { background: var(--ok-soft); color: var(--ok-fg); }
.lnb-st-closed { background: var(--bad-bg); color: var(--bad-fg); }
.lnb-who { color: var(--ink); font-weight: 600; }
.lnb-wait { color: var(--sun-text); font-weight: 600; }
.lnb-bar { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 3px; }
.lnb-bar i { height: 4px; border-radius: var(--r-pill); background: var(--line); }
.lnb-bar i.on { background: var(--sea); }
.lnb-fact { font-size: var(--fs-sm); color: var(--muted); overflow-wrap: anywhere; }
.lnb-hint { margin: 0; padding: var(--s-2) var(--s-3); border-radius: var(--r-xs); background: var(--warn-bg); color: var(--warn-fg); font-size: var(--fs-sm); }
.lnb-acts { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.lnb-pick { display: grid; gap: var(--s-2); margin: var(--s-3) 0; }
.lnb-ag { display: flex; justify-content: space-between; align-items: center; gap: var(--s-2); min-height: 48px; padding: var(--s-2) var(--s-3); border-radius: var(--r-sm); border: 1px solid var(--field-border); background: var(--surface); color: var(--ink); font: inherit; text-align: left; cursor: pointer; }
.lnb-ag.on { border-color: var(--sea); background: var(--sea-soft); }
.lnb-ag span { font-size: var(--fs-sm); color: var(--sea-text); }
.lnb-hist { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; font-size: var(--fs-sm); }
.lnb-hist li { display: flex; justify-content: space-between; gap: var(--s-2); }
.lnb-hist span { color: var(--muted); white-space: nowrap; }
.lnb-stages { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-top: var(--s-2); }
.lnb-stages small { font-size: var(--fs-xs); opacity: .8; }
.chip.lnb-chip:not(.on) { border-color: var(--sun); }
.lnb-stats { margin: var(--s-3) 0 var(--s-2); }
.lnb-stats h3 { margin: 0 0 var(--s-2); font-size: var(--fs-md); }
.lnb-stats-row { flex-wrap: wrap; }
.lnb-stats .chip.lnb-new { border-color: var(--sun); }

/* dealsv-29.10 */
.dsv .amen svg { width: 16px; height: 16px; }
.field .fhint { display: block; font-weight: 400; color: var(--muted); font-size: var(--fs-sm); margin: 2px 0 var(--s-2); }

/* Assistant (28.10) — помощник риелтора: экран #/assistant и «Материалы для риелторов» в редакторе ЖК */
.as-head { display: none; align-items: center; gap: 6px; }
.as-on .as-head { display: inline-flex; }      /* only realtors and the owner */
.as-ico { width: 16px; height: 16px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linejoin: round; }
.as-box { display: grid; gap: var(--s-3); margin: 0 var(--gutter) var(--s-6); }
.as-note { margin: 0; }
.as-thread { display: grid; gap: var(--s-3); }
.as-thread:empty { display: none; }
.as-q { justify-self: end; max-width: 86%; padding: 10px 14px; border-radius: var(--r-md) var(--r-md) var(--r-2xs) var(--r-md); background: var(--sea); color: var(--sea-ink); overflow-wrap: anywhere; white-space: pre-wrap; }
.as-a { padding: 14px; border-radius: var(--r-md); background: var(--surface); color: var(--ink); line-height: 1.55; overflow-wrap: anywhere; }
.as-a.as-wait { color: var(--muted); }
.as-a.as-bad { background: var(--bad-bg); color: var(--bad-fg); }
.as-a.as-nodata { background: var(--surface-2); color: var(--muted); }
.as-a.as-nodata b { display: block; margin-bottom: 4px; color: var(--ink); }
.as-cite { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; min-height: 24px; margin: 0 2px; padding: 0 6px; border-radius: var(--r-pill);
  background: var(--sea-soft); color: var(--sea-text); font-size: var(--fs-xs); font-weight: 700; vertical-align: 1px; }
.as-srcs-h { margin-top: var(--s-3); color: var(--muted); font-size: var(--fs-xs); font-weight: 600; }
.as-srcs { display: grid; gap: 6px; margin: 6px 0 0; padding: 0; list-style: none; }
.as-srcs li { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.as-chip { justify-content: flex-start; max-width: 100%; height: auto; text-align: left; white-space: normal; overflow-wrap: anywhere; }
.as-n { display: inline-flex; align-items: center; justify-content: center; flex: none; min-width: 20px; height: 20px; border-radius: var(--r-pill); background: var(--sea-soft); color: var(--sea-text); font-size: var(--fs-2xs); font-weight: 700; }
.as-srcs .st-badge { margin-left: 0; align-self: center; }
.as-usage { display: block; margin-top: var(--s-2); }
.as-ask { display: grid; gap: var(--s-2); padding: var(--s-3); border-radius: var(--r-md); background: var(--surface); }
.as-sugg { flex-wrap: wrap; }
.as-row { display: flex; align-items: center; justify-content: space-between; gap: var(--s-3); }
.as-row .btn { flex: none; }
.as-pg .chip { min-width: 44px; }
.as-page { display: block; width: 100%; height: auto; margin: var(--s-2) 0; border-radius: var(--r-sm); background: var(--paper); }
.as-text { max-height: 60vh; margin: var(--s-2) 0; padding: var(--s-3); overflow: auto; border-radius: var(--r-sm); background: var(--surface-2); font: var(--fs-sm)/1.5 var(--text); white-space: pre-wrap; overflow-wrap: anywhere; }
.as-pg { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); margin: var(--s-2) 0; }
.as-log-row { padding: var(--s-2) 0; border-top: 1px solid var(--line); font-size: var(--fs-sm); overflow-wrap: anywhere; }
.as-mat .as-doc { display: grid; gap: var(--s-2); padding: var(--s-3) 0; border-top: 1px solid var(--line); }
.as-mat .as-doc b { overflow-wrap: anywhere; }
.as-mat .as-doc.old b { color: var(--muted); }
.as-doc-badges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.as-doc-badges .st-badge { margin-left: 0; }
.as-mat .as-empty { display: block; padding: var(--s-2) 0; }
.as-up { display: grid; gap: var(--s-2); margin-top: var(--s-2); padding-top: var(--s-3); border-top: 1px solid var(--line); }
.as-up-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-2); }
.as-file-btn { position: relative; cursor: pointer; }
.as-file-btn.busy { opacity: .7; pointer-events: none; }
@media (max-width: 360px) { .as-up-grid { grid-template-columns: 1fr; } }
.dsv .amen { text-align: left; }
.dsv .amen:not(.on) svg { opacity: 0; width: 0; margin: 0; }
.as-mat .as-doc .lead-meta { display: block; margin-top: 2px; }

/* GUIDE (28.10): гид по Батуми — #/guide, карточка на ленте клиента */
.gu-card { display: flex; align-items: stretch; gap: var(--s-1); margin: var(--s-3) var(--gutter) 0; border: 1px solid var(--line); border-radius: var(--r-md); background: var(--surface); }
.gu-card-main { flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--s-3); padding: var(--s-3) 0 var(--s-3) 14px; text-align: left; color: var(--ink); }
.gu-card-main .ico { flex: none; display: grid; place-items: center; width: 42px; height: 42px; border-radius: var(--r-sm); background: var(--sea-soft); color: var(--sea-text); }
.gu-card-main .ico svg { width: var(--ic-md); height: var(--ic-md); }
.gu-card-main b { display: block; font-size: var(--fs-base); }
.gu-card-main small { display: block; margin-top: 2px; color: var(--muted); font-size: var(--fs-sm); }
.gu-card-x { flex: none; display: grid; place-items: center; width: var(--tap); min-height: var(--tap); border-radius: var(--r-md); color: var(--muted); }
.gu-card-x svg { width: 18px; height: 18px; }
.gu-list .me-txt small { display: block; color: var(--muted); font-size: var(--fs-sm); font-weight: 400; }
.gu-body { overflow-wrap: anywhere; }
.gu-body > * + * { margin-top: var(--s-3); }
.gu-body > .gu-h + *, .gu-body > .gu-sub + * { margin-top: var(--s-2); }
.gu-h { margin: 0; font: 600 var(--fs-lg) var(--display); letter-spacing: -.02em; }
.gu-sub { margin: 0; color: var(--muted); font: 600 var(--fs-md) var(--text); }
.gu-p { margin: 0; line-height: 1.55; }
.gu-p .link { font-size: inherit; }
.gu-ul { margin: 0; padding-left: 1.2em; line-height: 1.5; }
.gu-ul li + li { margin-top: 6px; }
.gu-note { display: flex; gap: var(--s-2); margin: 0; padding: var(--s-3); border-radius: var(--r-md); background: var(--surface-2); color: var(--muted); font-size: var(--fs-sm); line-height: 1.5; }
.gu-note svg { flex: none; width: 18px; height: 18px; margin-top: 1px; }
.gu-progress { margin: 0; color: var(--sea-text); font-weight: 600; }
.gu-check, .gu-links { margin: 0; padding: 0; list-style: none; }
.gu-check li { display: flex; align-items: flex-start; gap: var(--s-2); padding: var(--s-2) 0; border-top: 1px solid var(--line); }
.gu-check li:first-child, .gu-links li:first-child { border-top: 0; }
.gu-chk { flex: 1; min-width: 0; display: flex; align-items: flex-start; gap: var(--s-3); min-height: var(--tap); line-height: 1.45; cursor: pointer; }
.gu-chk input { flex: none; width: 22px; height: 22px; margin: 1px 0 0; accent-color: var(--sea); }
.gu-chk input:checked + span { color: var(--muted); text-decoration: line-through; text-decoration-color: var(--field-border); }
.gu-more { flex: none; padding: 2px 0; font-size: var(--fs-sm); }
.gu-links li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--s-2); padding: var(--s-2) 0; border-top: 1px solid var(--line); }
.gu-links .link { min-height: 28px; text-align: left; }
.gu-links small { color: var(--muted); font-size: var(--fs-sm); }
.gu-feed { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.gu-feed .btn { flex: 1 1 100%; }
.gu-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-4); }
.gu-row .btn { flex: none; }
.gu-actions { display: flex; margin: var(--s-4) var(--gutter) 0; }
.gu-actions .btn svg { width: var(--ic-md); height: var(--ic-md); }
.gu-src-note { margin: var(--s-3) var(--gutter) 0; color: var(--muted); font-size: var(--fs-sm); line-height: 1.5; }
.gu-src-note .link { font-size: inherit; }

/* astab-29.10: «Помощник» в таббаре риелтора — иконка как у соседних вкладок */
.tabbar .as-ico { width: var(--ic); height: var(--ic); }

/* segn-29.10: число новых на «Заявки | Подборки» */
.seg-n { display: inline-block; min-width: 20px; height: 20px; margin-left: var(--s-2); padding: 0 6px; border-radius: var(--r-pill);
  background: var(--sun); color: var(--ink-fixed); font: 600 var(--fs-2xs)/20px var(--text); font-style: normal; vertical-align: 1px; }
.seg-n[hidden] { display: none; }

/* agprof-29.10: риелтор — аватар в шапке рабочих экранов, по нему экран «витрина, расписание, каналы» */
body.pro-mode.pro-ag #meBtn { display: grid; }
body.pro-mode.pro-ag #cityBtn { display: none; }
.ag-prof { justify-content: flex-start; gap: var(--s-3); }
.ag-prof h1 small { display: block; margin-top: 2px; font: 400 var(--fs-sm)/1.3 var(--text); color: var(--muted); }

/* tdsch-29.10: строка «Расписание показов» внизу блока «Показы» на «Сегодня» */
.td-sch { margin-top: var(--s-3); padding-inline: 0; border-top: 1px solid var(--line); }

/* agprof2-29.10: язык и валюта у риелтора — на его экране, в шапке не нужны */
body.pro-mode.pro-ag #localeBtn { display: none; }

/* scshare-29.10: «Поделиться» с подписью рядом с «Сохранить витрину» */
.action-bar.ua-sc-bar .sc-share-btn { flex: 0 0 auto; gap: var(--s-2); padding-inline: var(--s-4); }
.action-bar.ua-sc-bar .sc-share-btn svg { width: 20px; height: 20px; }

/* quiet-29.10: тихие часы в листе «Уведомления» риелтора */
.agp-quiet { margin: var(--s-4) 0; padding: var(--s-3) 0; border-block: 1px solid var(--line); }
.agp-quiet .toggle small { display: block; margin-top: 2px; color: var(--muted); font-size: var(--fs-sm); }
.thr-set .toggle { margin: var(--s-3) 0; }      /* threads-29.10: шторка «Threads» — подпись под переключателем */
.thr-set .toggle small { display: block; margin-top: 2px; color: var(--muted); font-size: var(--fs-sm); font-weight: 400; }
.agp-q-hours { display: flex; align-items: center; gap: var(--s-2); margin-top: var(--s-3); color: var(--muted); }
.agp-q-hours select { flex: 1; min-height: 44px; }
.agp-q-hours select:disabled { opacity: .5; }

/* aschat-29.10: помощник как обычный чат */
.as-chat { display: flex; flex-direction: column; min-height: calc(var(--vh) - var(--top-h, 56px) - var(--tabbar-h) - var(--safe-b) - var(--s-3)); }
.as-chat .page-head h1 small { display: none; }
.as-chat .as-thread { flex: 1; display: flex; flex-direction: column; gap: var(--s-4); padding: var(--s-2) var(--gutter) var(--s-4); }
.as-chat .as-q { align-self: flex-end; max-width: 82%; border-radius: 20px 20px 6px 20px; padding: 10px 14px; }
.as-chat .as-a { align-self: stretch; padding: 0 2px; background: none; border-radius: 0; font-size: var(--fs-md, 16px); }
.as-chat .as-a.as-bad, .as-chat .as-a.as-nodata { padding: 12px 14px; border-radius: 18px; }
.as-chat .as-a.as-nodata { background: var(--surface); }
.as-chat .as-a.as-bad { background: var(--bad-bg); }
.as-chat .as-cite { min-width: 18px; min-height: 18px; margin: 0 1px 0 3px; padding: 0 5px; font-size: 11px; vertical-align: 2px; }
.as-chat .as-srcs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: var(--s-3); }
.as-chat .as-chip { font-size: var(--fs-xs); background: var(--surface); }
.as-wait { display: flex; gap: 5px; padding: 8px 2px !important; }
.as-wait i { width: 8px; height: 8px; border-radius: 50%; background: var(--muted); animation: as-dot 1.2s infinite ease-in-out; }
.as-wait i:nth-child(2) { animation-delay: .15s; } .as-wait i:nth-child(3) { animation-delay: .3s; }
@keyframes as-dot { 0%, 80%, 100% { opacity: .25; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-3px); } }
@media (prefers-reduced-motion: reduce) { .as-wait i { animation: none; opacity: .6; } }
.as-hello { margin: auto 0; display: grid; justify-items: center; gap: var(--s-2); padding: var(--s-6) 0 var(--s-4); text-align: center; }
.as-hello-ico { display: grid; place-items: center; width: 56px; height: 56px; border-radius: 50%; background: var(--surface); color: var(--sea); }
.as-hello-ico .as-ico { width: 28px; height: 28px; }
.as-hello h2 { margin: var(--s-2) 0 0; font-size: var(--fs-xl, 22px); }
.as-hello p { margin: 0; max-width: 34ch; color: var(--muted); line-height: 1.45; }
.as-hello-note { font-size: var(--fs-sm); }
.as-sugg { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-2); width: 100%; margin-top: var(--s-4); }
.as-sugg-btn { min-height: 56px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 16px; background: var(--surface); color: var(--ink);
  font: 500 var(--fs-sm)/1.3 var(--text); text-align: left; cursor: pointer; }
.as-sugg-btn:active { background: var(--surface-2); }
.as-composer { position: sticky; bottom: calc(var(--tabbar-h) + var(--safe-b) + var(--s-2)); z-index: 2; display: flex; align-items: flex-end; gap: var(--s-2);
  margin: 0 var(--gutter); padding: 6px 6px 6px 16px; border: 1px solid var(--line); border-radius: 26px; background: var(--surface); box-shadow: 0 4px 18px rgba(0, 0, 0, .06); }
.as-composer textarea { flex: 1; min-height: 40px; max-height: 160px; padding: 9px 0; border: 0; background: none; resize: none; color: var(--ink); font: 400 16px/1.4 var(--text); outline: none; }
.as-send { flex: 0 0 auto; display: grid; place-items: center; width: 40px; height: 40px; border: 0; border-radius: 50%; background: var(--sea); color: var(--sea-ink); cursor: pointer; }
.as-send svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.as-send:disabled { opacity: .45; }
.as-composer:focus-within { border-color: var(--sea); }
.as-left { display: block; margin: 6px var(--gutter) 0; text-align: center; color: var(--muted); font-size: var(--fs-xs); }

/* unseen-29.10: заявка, переданная владелицей риелтору */
.lead-from { display: flex; align-items: center; gap: var(--s-2); margin: -2px 0 var(--s-2); color: var(--sea); font: 600 var(--fs-sm)/1.3 var(--text); }
.lead-from svg { width: 16px; height: 16px; }
.lead-new { margin-left: auto; padding: 2px 8px; border-radius: var(--r-pill); background: var(--sun); color: var(--ink-fixed); font: 600 var(--fs-2xs)/1.5 var(--text); font-style: normal; }
.lead.lead-unseen { box-shadow: inset 3px 0 0 var(--sun); }

/* contact-29.10: имя и телефон в заявках */
.ct-share { margin-top: var(--s-2); gap: var(--s-2); }
.ct-share svg { width: 18px; height: 18px; }
.ct-note { margin-top: var(--s-2); }

/* tour-29.10: тур по новостройкам */
.tour-banner { display: grid; grid-template-columns: auto 1fr; gap: var(--s-2) var(--s-3); align-items: center; margin: var(--s-3) var(--gutter); padding: var(--s-4);
  border-radius: var(--r-lg, 20px); background: var(--sea); color: var(--sea-ink); }
.tour-banner .tour-ico { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; background: rgba(255, 255, 255, .16); }
.tour-banner .tour-ico svg { width: 24px; height: 24px; }
.tour-banner b { display: block; font: 700 var(--fs-md, 16px)/1.25 var(--display, var(--text)); }
.tour-banner p { margin: 2px 0 0; font-size: var(--fs-sm); line-height: 1.35; opacity: .9; }
.tour-banner .btn { grid-column: 1 / -1; justify-self: stretch; background: #fff; color: var(--sea-fixed); border-color: #fff; }   /* palette-29.10: в тёмной теме светлый синий на белом давал 2.6:1 */
.action-bar .tour-add { flex: 0 0 auto; gap: 6px; padding-inline: var(--s-3); }
.action-bar .tour-add svg { width: 18px; height: 18px; }
.action-bar .tour-add.on { border-color: var(--sea); color: var(--sea); }
.tour-sel { display: grid; gap: 6px; }
.tour-cx { display: flex; align-items: center; gap: var(--s-2); padding: 8px 8px 8px 12px; border-radius: 12px; background: var(--surface-2); }
.tour-cx i { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--sea); color: var(--sea-ink); font: 600 12px/1 var(--text); font-style: normal; }
.tour-cx span { flex: 1; font-weight: 600; }
.tour-del { display: grid; place-items: center; width: 36px; height: 36px; border: 0; border-radius: 50%; background: none; color: var(--muted); cursor: pointer; }
.tour-del svg { width: 18px; height: 18px; }
.sheet .chips.wrap.tour-more { max-height: 216px; overflow-y: auto; margin-top: var(--s-2); padding: 2px; align-content: flex-start; }
.tour-req b { display: flex; align-items: center; gap: 6px; }
.tour-req b svg { width: 18px; height: 18px; }
.tour-route { margin: 6px 0; padding-left: 20px; }
.tour-route li { margin: 2px 0; }
.lead-phone { display: inline-flex; align-items: center; gap: 6px; margin-top: var(--s-2); font-weight: 600; color: var(--sea); }
.lead-phone svg { width: 16px; height: 16px; }

/* ping-29.10: клиент открыл контакт, но мог не написать */
.lead-ping { margin: 0 0 var(--s-2); color: var(--muted); font-size: var(--fs-sm); line-height: 1.35; }

/* replied-29.10: статусы в карточке заявки */
.sheet .chips.wrap.lc-st { margin: 0 0 var(--s-3); }

/* botblock-29.10 */
.td-blocked { border: 1px solid var(--sun); }
.td-blocked p { margin: 4px 0 var(--s-3); color: var(--muted); font-size: var(--fs-sm); }
.ua-ag-blocked { margin: var(--s-2) 0 0; color: var(--danger); font-size: var(--fs-sm); }

/* agscr-29.10: экран «Риелторы» — телефон и контакты, цифры заявок, лёгкая «•••», заметная «Витрина ›» */
.ua-ag-phone { display: block; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ua-ag-meta { margin-top: var(--s-2); }
.ua-ag-new { color: var(--warn-fg); font-weight: 600; }
.ua-ag-contact { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); margin-top: var(--s-3); }
.ua-ag-contact .chip { color: var(--ink); text-decoration: none; }
.ua-ag-contact .chip svg { width: 16px; height: 16px; }
.ua-ag-go { margin-left: auto; display: inline-flex; align-items: center; min-height: var(--h-sm); padding: 0 2px 0 var(--s-2); color: var(--sea-text); font-size: var(--fs-sm); font-weight: 600; text-decoration: none; white-space: nowrap; }
.ua-ag-more > summary.chip { min-height: var(--h-xs); width: 36px; padding: 0; border: 0; background: none; color: var(--muted); letter-spacing: 1px; }
.ua-ag-more[open] > summary.chip, .ua-ag-more > summary.chip:hover { background: var(--surface-2); color: var(--ink); }
.agscr-inv { display: grid; gap: 14px; }
.agscr-inv .seg .chip { min-width: 56px; }

/* tourpad-29.10: шторка тура — одинаковый шаг между разделами */
.sheet .tour-f h4, .sheet .tour-f h4:first-of-type { margin: var(--s-6) 0 var(--s-3); }
.sheet .tour-f h4 + .sheet-note { margin: 0 0 var(--s-3); }
.sheet .tour-f .tour-sel { margin-bottom: var(--s-3); }
.sheet .tour-f .days + .tour-part { margin-top: var(--s-3); }
.sheet .tour-f .field { margin-top: var(--s-5); }
.sheet .tour-f .chips.wrap + .field { margin-top: var(--s-4); }
.sheet .tour-f .lg-rcv { margin-top: var(--s-5); }

/* ownprof-29.10: владелица - аватар в шапке рабочих экранов ведёт в её ЛК; язык и валюта - там же */
body.pro-mode.un-adm #meBtn { display: grid; }
body.pro-mode.un-adm #localeBtn { display: none; }

/* tdwait-29.10: «Ждут вас», пустые показы одной строкой, «Напомнить риелтору»; tourmin-29.10 */
.ow2c-top { padding-top: var(--s-3); }
.td-wait { border: 1px solid var(--cta); }
.td-wait-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-3); padding: var(--s-3) 0; border-top: 1px solid var(--line); }
.td-wait h2 + .td-wait-row { border-top: 0; padding-top: var(--s-2); }
.td-vw-none { display: flex; align-items: center; gap: var(--s-2); }
.td-vw-none svg { width: var(--ic-lg); height: var(--ic-lg); color: var(--sea); flex: none; }
.td-vw-none span { color: var(--muted); font-size: var(--fs-sm); }
.td-soon-row { border-top: 1px solid var(--line); }
.td-soon-row:first-of-type { border-top: 0; }
.td-soon-row .td-soon { border-top: 0; }
.td-soon-row .chip { margin: 0 0 var(--s-3); }
.tour-min { margin: var(--s-2) 0 0; padding: var(--s-2) var(--s-3); border-radius: var(--r-sm, 10px); background: color-mix(in srgb, var(--sun) 18%, transparent); font-size: var(--fs-sm); font-weight: 600; }
/* fixF-29.10: выбранные день, время и число людей — явно перед отправкой тура */
.tour-sum { margin: var(--s-3) 0 0; padding: var(--s-2) var(--s-3); border-radius: var(--r-sm, 10px); background: color-mix(in srgb, var(--sea) 12%, transparent); font-size: var(--fs-sm); font-weight: 600; }

/* cltours-29.10: «Туры» клиента и кнопка карты в шапке */
body.pro-mode #mapBtn { display: none; }
.map-btn.on { background: var(--sea-soft); color: var(--sea-text); }
.ct-acts { display: flex; flex-direction: column; align-items: center; gap: var(--s-2); margin-top: var(--s-4); }
.ct-acts .btn { flex: none; width: 100%; max-width: 320px; }
.empty .ct-acts .btn.primary, .ct-acts .btn.primary { margin: 0; min-height: var(--h-md); border-radius: var(--r-md); background: var(--cta); color: var(--cta-ink); }
.empty .ct-acts .link { margin: 0; min-height: var(--tap); background: transparent; color: var(--sea-text); }
.ct-cart { margin: 0; font-size: var(--fs-sm); color: var(--muted); }
.ct-more .ct-acts { margin-top: 0; }
.ct-card .ct-show { display: flex; align-items: center; gap: var(--s-1); color: var(--ink); font-weight: 600; }
.ct-card .ct-show svg { flex: none; width: 16px; height: 16px; color: var(--sea); }

/* newbadge-29.10: баннер модерации, новые подборки, заявки на вход, фильтр черновиков ЖК */
.mod-banner { display: flex; align-items: center; gap: var(--s-2); width: 100%; min-height: var(--tap); margin: 0 0 var(--s-3); padding: var(--s-3) var(--s-4); border: 1px solid var(--cta); border-radius: var(--r-lg, 16px); background: var(--card, #fff); color: var(--ink); font-weight: 600; text-align: left; }
.mod-banner svg { width: var(--ic-lg); height: var(--ic-lg); color: var(--cta); flex: none; }
.mod-banner span { flex: 1; }
.pk-new { border: 1px solid var(--cta); }
.pk-new-b { display: inline-block; margin-bottom: var(--s-2); }
.pk-new-n { color: var(--cta); font-weight: 600; }
.tool-row .seg-n { margin-left: auto; }
.ag-grp { margin: var(--s-4) 0 var(--s-2); font-size: var(--fs-md, 17px); }
.feed > .ag-grp:first-child { margin-top: 0; }
.ua-ag-pend { border: 1px solid var(--cta); }
.cxa-f { margin: 0 0 var(--s-3); flex-wrap: wrap; }

/* ownpicks-29.10: «Риелтор: Имя» на подборке — своей строкой */
.st-head .lead-ag { display: block; margin-top: 2px; font-size: var(--fs-sm); color: var(--muted); }

/* p2simp-29.10: «Сводка» — «Подробнее»; статусы заявок — фильтры; отмена отклонения; форма рынка в шторке */
.os-more { margin: 0 0 var(--s-3); }
.os-more > summary { margin: 0 var(--gutter); }
.rr-lead-st .chip:disabled { opacity: .5; }
.p2-undo { display: flex; align-items: center; gap: var(--s-3); text-align: left; }
.p2-undo.show { pointer-events: auto; }
.p2-undo button { flex: none; min-height: 36px; padding: 0 var(--s-2); border: 0; background: none; color: inherit; font: inherit; font-weight: 700; text-decoration: underline; cursor: pointer; }
.p2-mk-form { display: grid; gap: var(--s-3); }

/* asag-29.10: переключатель «Управление | Я риелтор» в шапке владелицы */
.top .own-sw { flex-wrap: nowrap; gap: 2px; padding: 3px; margin: 0 6px 0 auto; border-radius: 999px; background: var(--surface); box-shadow: inset 0 0 0 1px var(--line); }      /* fix1-29.10: --card нет — в тёмной теме была белая подложка */
.top .own-sw .chip { min-height: 30px; padding: 4px 10px; font-size: 13px; border: 0; white-space: nowrap; }
.top .own-sw .chip:not(.on) { background: transparent; }
body.own-sw-on #proBtn .pro-label { display: none; }
.asag-picks { margin: 0 0 10px; }
.asag-picks .chip svg { width: 16px; height: 16px; margin-right: 4px; }
@media (max-width: 370px) { .top .own-sw .chip { padding: 4px 8px; font-size: 12px; } }

/* aud-29.10: «Аудитория» в сводке владелицы */
.os-aud-h{margin:16px 0 8px;font-size:15px}

/* pkwait-29.10: запрос подборки, который ждёт риелтора */
.pk-wait .lead-req{margin:4px 0 12px}

/* mail-29.10: «Рассылки» */
.ml-form h4{margin:12px 0 6px}.ml-form h4:first-child{margin-top:0}
.ml-count{margin:12px 0 0;font-weight:600}.ml-count small{display:block;font-weight:400;color:var(--muted);font-size:var(--fs-sm)}
.ml-acts{margin-top:12px;gap:8px}.ml-acts .btn{flex:1}
.ml-cta{width:100%;margin:0 0 var(--s-3)}
.ml-text{margin:6px 0;white-space:pre-line}
.ml-st{font-size:var(--fs-sm);color:var(--muted)}.ml-st-sending{color:var(--sea)}
.ml-form .chips.wrap{flex-wrap:wrap;overflow:visible;padding:0;mask:none;-webkit-mask:none}

/* fix1-29.10: на iPhone поле < 16 px увеличивает страницу при фокусе — у риелтора и владелицы были 13–15 px */
@supports (-webkit-touch-callout: none) { input:not([type=checkbox]):not([type=radio]):not([type=range]), select, textarea { font-size: max(16px, 1em); } }
/* fix1-29.10: «Selections» на 360 px переносилось посреди слова */
@media (max-width: 380px) { .seg-fill .chip { font-size: var(--fs-xs); padding-inline: 4px; } }
/* fixB-29.10: видеообзор в шапке ЖК, примечание корпуса, фото этапа, цена отделки, план этажа без кадрирования */
.cx-vid-chip { position: absolute; right: 10px; top: 10px; display: inline-flex; align-items: center; gap: 5px; min-height: 36px; padding: 6px 12px;
  border: 0; border-radius: var(--r-pill); background: var(--scrim); color: var(--on-photo); font: inherit; font-size: var(--fs-xs); font-weight: 600; cursor: pointer; backdrop-filter: blur(6px); }
.cx-vid-chip svg { width: 14px; height: 14px; fill: currentColor; stroke: none; }
.cx-brow .cx-bnote { grid-column: 1 / -1; color: var(--muted); font-size: var(--fs-xs); line-height: 1.4; }
.cx-timeline .cx-stage-ph { width: 96px; height: 64px; margin-top: 6px; padding: 0; border: 0; border-radius: var(--r-xs); overflow: hidden; background: var(--surface-2); cursor: zoom-in; }
.cx-timeline .cx-stage-ph img { display: block; width: 100%; height: 100%; object-fit: cover; }
.cx-finish p.cx-fin-price { color: var(--ink); font-weight: 600; }
.fl-plan.full img { position: static; width: 100%; }


/* nobrand-29.10: название и знак в шапке убраны до выбора нового бренда (вернуть: удалить этот блок) */
.top .brand { display: none; }
.top .top-actions { margin-left: auto; }

/* lighter-29.10: баннеры светлые с тёмным текстом; кнопка в баннере синяя с белым текстом, оранжевый остаётся главным кнопкам */
.tour-banner { background: #e8f0f7; color: var(--ink); }
.tour-banner .tour-ico { background: var(--sea); color: var(--sea-ink); }
.tour-banner p { color: var(--muted); opacity: 1; }
.tour-banner .btn, .tour-banner .btn.primary { background: var(--sea); color: var(--sea-ink); border-color: var(--sea); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .tour-banner { background: var(--sea-soft); } }
:root[data-theme="dark"] .tour-banner { background: var(--sea-soft); }
.tour-banner .btn.primary:not(:disabled):is(:hover, :active) { background: var(--sea); filter: brightness(.92); }
/* lighter-29.10: подсказка «нужно от 3 до 5 ЖК» не прилипает к кнопке «Добавить ЖК» */
.tour-min { margin-bottom: var(--s-3); }
/* scshare2-29.10: «Поделиться» и рядом с адресом витрины */
.sc-addr { flex-wrap: wrap; }
.sc-addr .chip svg { width: 16px; height: 16px; }

/* premium-30.10: палитра Vita «Воздух» (выбор владелицы) — слоновая кость, тёмный лес, шампань. Откат: agnomore/premium-30.10 */
:root {
  --bg: #f5f1ea; --surface: #fffdf9; --surface-2: #efe9df;
  --ink: #15201c; --ink-fixed: #15201c; --muted: #6a655d; --line: #e4ddd1; --field-border: #9a9184;
  --sea: #15201c; --sea-ink: #f5f1ea; --sea-soft: #ece4d6; --sea-fixed: #15201c; --sea-text: #15201c;
  --cta: #8a6a3f; --cta-hover: #775a33; --cta-active: #644b2a; --cta-ink: #ffffff;   /* белый текст 5.1:1 */
  --sun: #b8976a; --sun-text: #7a5f37; --like-fg: #8a6a3f; --like-on-paper: #8a6a3f;
  --shade-rgb: 21 32 28;
}
:root[data-theme="dark"] {
  --bg: #0f1513; --surface: #16201c; --surface-2: #1e2a25;
  --ink: #efe9df; --muted: #b3aa9b; --line: #26332d; --field-border: #6f7d74;
  --sea: #d8c3a0; --sea-ink: #15201c; --sea-soft: #24312b;
  --cta: #c9a876; --cta-hover: #d6b88a; --cta-active: #b8976a; --cta-ink: #15201c;   /* тёмный текст на шампани 8:1 */
  --sun: #c9a876; --sun-text: #d9bd8c; --like-fg: #c9a876;
  --shade-rgb: 0 0 0;
}
.tour-banner { background: var(--sea-soft); }

/* adriatic-30.10: палитра «Чистая Адриатика» и логотип VITA ESTATE (выбор владелицы 30.10). Перекрывает premium-30.10 «Воздух».
   Почти белый фон, выбранное — голубая подсветка с синим текстом, единственная плотная заливка — закатная кнопка.
   Откат: удалить этот блок (копия до правки — agnomore/adriatic-30.10). Шрифт логотипа — Bodoni Moda 900 (OFL), только латиница */
:root, :root[data-theme="light"] {
  --bg: #f8fafd; --surface: #ffffff; --surface-2: #eef3f9;
  --ink: #16263d; --ink-fixed: #16263d; --muted: #53627a; --line: #e2e8f1; --field-border: #7d8ba0;
  --sea: #235da3; --sea-ink: #ffffff; --sea-soft: #e3edfa; --sea-fixed: #235da3; --sea-text: #235da3;
  --sel-bg: #e3edfa; --sel-fg: #235da3;
  --cta: #bf4d1a; --cta-hover: #a9441a; --cta-active: #933b16; --cta-ink: #ffffff;   /* белый текст 4.9:1 */
  --sun: #bf4d1a; --sun-text: #a3411a; --sun-soft: #fbe7dd; --on-sun: #ffffff; --like-fg: #bf4d1a; --like-on-paper: #bf4d1a;
  --shade-rgb: 22 38 61;
}
:root[data-theme="dark"] {
  --bg: #0e1520; --surface: #16202e; --surface-2: #1d2939;
  --ink: #e8eef6; --muted: #a2b1c4; --line: #243246; --field-border: #6b7a90;
  --sea: #8dbaf3; --sea-ink: #0e1520; --sea-soft: #1d3352; --sea-text: #8dbaf3;
  --sel-bg: #1d3352; --sel-fg: #8dbaf3;
  --cta: #ec8048; --cta-hover: #f08f5c; --cta-active: #d9703a; --cta-ink: #1c0e04;   /* тёмный текст на закате 7:1 */
  --sun: #ec8048; --sun-text: #f09a6a; --sun-soft: #3a2418; --on-sun: #1c0e04; --like-fg: #ec8048; --like-on-paper: #bf4d1a;
  --shade-rgb: 0 0 0;
}
/* выбранные вкладки и переключатели — голубая подсветка вместо плотной заливки */
.deal-switch button.on, .tabs button.on, .map-mode button.on, .sum-row .rent-mode button.on,
:root[data-theme="dark"] .sum-row .rent-mode button.on { background: var(--sel-bg); color: var(--sel-fg); }
.chip.on, .fl-chip.on, .amen.pick.on { background: var(--sel-bg); border-color: var(--sel-fg); color: var(--sel-fg); }
/* на закатном фоне — белый текст (в тёмной теме тёмный) */
.fresh, .cx-status, .fact.sun, .sch-off .day.on, .pk-btn.like, :is(.fresh, .cx-status, .st-chip).st-presale { color: var(--on-sun); }
.tour-banner { background: var(--sea-soft); }

/* логотип VITA ESTATE в шапке (вместо скрытого nobrand-29.10) */
@font-face { font-family: 'Vita Logo'; font-style: normal; font-weight: 900; font-display: block;
  src: url(fonts/bodoni-moda-900.woff2?v=a0ad0e7492) format('woff2'); unicode-range: U+0000-00FF; }
.top .brand { display: inline-flex; flex-direction: column; align-items: center; gap: 3px; padding: 2px 0; color: var(--ink); }
.top .brand svg, .top .brand .bn-k { display: none !important; }
.top .brand .bn { font: 900 26px/1 'Vita Logo', Georgia, serif; letter-spacing: .02em; text-transform: uppercase; padding: 0; }
.top .brand .bn i { animation: none !important; opacity: 1 !important; transform: none !important; }
.top .brand { position: relative; min-height: 44px; justify-content: center; }
.top .brand::after { content: 'ESTATE'; position: static; width: auto; height: auto; transform: none;      /* без невидимой зоны нажатия: кнопка и так 44px */
  font: 900 8px/1 'Vita Logo', Georgia, serif; letter-spacing: .5em; margin-right: -.5em; }
.top .top-actions { margin-left: auto; }
