/* forms_redesign.css — единый слой раскладки форм.
   Основание: UX-аудит Plans/feature_forms_ux_audit_2026-06-18/.
   НЕ переопределяет .form-control/.form-select (они уже едины в site.css) —
   только добавляет семантические ширины полей по содержимому, ровный
   вертикальный ритм, метку обязательности и аккуратные ряды чекбоксов.
   Формы подключаются опционально через .bdk-form-grid + .bdk-field.bdk-fw-*. */

/* Строка формы: поля пакуются слева, единый зазор, перенос на узких экранах. */
.bdk-form-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;                 /* единый вертикальный и горизонтальный ритм */
  align-items: flex-start;
}

/* Поле — flex-элемент. По умолчанию тянется на доступную ширину строки. */
.bdk-form-grid > .bdk-field {
  flex: 1 1 220px;
  min-width: 0;
  margin-bottom: 0;          /* ритм задаёт gap контейнера, а не margin поля */
}

/* Семантические ширины по содержимому (десктоп): flex-basis + max-width,
   чтобы поле было «ровно под контент», а не на всю колонку. */
.bdk-field.bdk-fw-counter { flex: 0 1 96px;  max-width: 96px;  }  /* 1–2 цифры: комнаты, этаж, очереди */
.bdk-field.bdk-fw-xs      { flex: 0 1 132px; max-width: 132px; }  /* 3–4 знака: № квартиры, год, %, расст. */
.bdk-field.bdk-fw-sm      { flex: 0 1 200px; max-width: 200px; }  /* площадь, цена, дата, телефон */
.bdk-field.bdk-fw-md      { flex: 1 1 300px; max-width: 340px; }  /* селекты, email, кад. квартал */
.bdk-field.bdk-fw-lg      { flex: 1 1 420px; max-width: 520px; }  /* кад. номер, ФИО, autocomplete */
.bdk-field.bdk-fw-full    { flex: 1 1 100%;  max-width: 100%;  }  /* описание, заметки, адрес, ВРИ */

/* На мобильном текстовые/широкие поля разворачиваются на всю строку,
   узкие числовые остаются компактными в ряд. */
@media (max-width: 575.98px) {
  .bdk-field.bdk-fw-sm,
  .bdk-field.bdk-fw-md,
  .bdk-field.bdk-fw-lg { flex-basis: 100%; max-width: 100%; }
  .bdk-field.bdk-fw-counter { flex-basis: 88px; }
  .bdk-field.bdk-fw-xs      { flex-basis: 120px; }
}

/* input/select внутри поля тянется на всю ширину поля. */
.bdk-form-grid > .bdk-field > .form-control,
.bdk-form-grid > .bdk-field > .form-select { width: 100%; }

/* Метка обязательного поля — красная звёздочка у ярлыка (решение владельца). */
.bdk-field .bdk-required-mark {
  color: var(--ios-red);
  margin-left: 2px;
  font-weight: 600;
}

/* Подсказка под полем — единый отступ (опираемся на готовый .form-text). */
.bdk-field .form-text { margin-top: 4px; }

/* Заголовок смыслового блока внутри формы + тонкий разделитель. */
.bdk-form-section {
  margin: 8px 0 4px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ios-text-secondary);
}
.bdk-form-divider {
  border: 0;
  border-top: 1px solid var(--ios-separator);
  margin: 20px 0;
}

/* Ряд чекбоксов — отдельным аккуратным блоком, ровные тач-таргеты 44px. */
.bdk-check-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
}
.bdk-check-row .form-check {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  margin: 0;
}

/* =====================================================================
   ДИЗАЙН-СИСТЕМА ФОРМ V2 (плотный) — 2026-06-18.
   Эталон: Plans/feature_forms_design_system_2026-06-18/styleguide_b_compare.html.
   Достраивает слой выше: колоночная сетка 12, состояния полей, единица
   измерения, сегментированная развилка, степпер-маршрут, кнопка импорта.
   Старый flex-слой (.bdk-form-grid + .bdk-fw-*) НЕ трогаем — он на проде.
   ===================================================================== */

/* --- Колоночная сетка 12 (V2). Поля заполняют строку без горизонтальных
   дыр: ширину задаёт span .bdk-col-N. --- */
.bdk-form-grid--12 {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 12px 16px;
  align-items: start;
}
.bdk-form-grid--12 > .bdk-field { min-width: 0; margin-bottom: 0; }
/* Полный набор 1–12: любой span определён, чтобы поле никогда не схлопывалось
   в одну колонку из-за неописанного класса (грабли: col-5, col-9). */
.bdk-col-12 { grid-column: span 12; }
.bdk-col-11 { grid-column: span 11; }
.bdk-col-10 { grid-column: span 10; }
.bdk-col-9  { grid-column: span 9; }
.bdk-col-8  { grid-column: span 8; }
.bdk-col-7  { grid-column: span 7; }
.bdk-col-6  { grid-column: span 6; }
.bdk-col-5  { grid-column: span 5; }
.bdk-col-4  { grid-column: span 4; }
.bdk-col-3  { grid-column: span 3; }
.bdk-col-2  { grid-column: span 2; }
.bdk-col-1  { grid-column: span 1; }

/* input/select/textarea внутри поля тянется на всю ширину колонки. */
.bdk-form-grid--12 > .bdk-field > .form-control,
.bdk-form-grid--12 > .bdk-field > .form-select,
.bdk-form-grid--12 > .bdk-field > .bdk-unit > .form-control { width: 100%; }

/* На мобильном сетка схлопывается в одну колонку. Тесно связанные поля
   (дом/корпус/строение), помеченные .bdk-col-tight, остаются в ряд по 3. */
@media (max-width: 575.98px) {
  .bdk-form-grid--12 > .bdk-field { grid-column: span 12; }
  .bdk-form-grid--12 > .bdk-col-tight { grid-column: span 4; }
}

/* Плотные лейблы V2: контраст выше, отступ к полю меньше. */
.bdk-form-grid--12 .form-label { font-weight: 600; margin-bottom: 5px; }

/* --- Состояния полей --- */
/* Невалидное поле: красную рамку рисует обёртка .bdk-field--invalid, чтобы
   не требовать is-invalid на самом виджете из шаблона. */
.bdk-field--invalid > .form-control,
.bdk-field--invalid > .form-select,
.bdk-field--invalid > .bdk-unit > .form-control {
  border-color: var(--ios-red);
  box-shadow: 0 0 0 3px rgba(255, 59, 48, 0.12);
}
/* Текст ошибки поля — с круглым восклицательным маркером. */
.bdk-field-error {
  margin-top: 6px;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--bdk-danger);
  display: flex;
  align-items: center;
  gap: 5px;
}
.bdk-field-error::before {
  content: "!";
  display: inline-grid;
  place-items: center;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: var(--ios-red);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  flex: 0 0 auto;
}
/* Загрузка: спиннер в правой части поля (напр. запрос в Росреестр). */
.bdk-field.is-loading > .form-control,
.bdk-field.is-loading > .bdk-unit > .form-control {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 50 50'%3E%3Ccircle cx='25' cy='25' r='20' fill='none' stroke='%2300599C' stroke-width='5' stroke-linecap='round' stroke-dasharray='80 50'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 25 25' to='360 25 25' dur='.8s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 11px center;
  padding-right: 38px;
}
@media (prefers-reduced-motion: reduce) {
  .bdk-field.is-loading > .form-control { background-image: none; }
}

/* --- Поле с единицей измерения (м², %, ₽) --- */
.bdk-unit { position: relative; }
.bdk-unit > .form-control { padding-right: 42px; }
.bdk-unit > .u {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 13px;
  color: var(--bdk-text-dim);
  pointer-events: none;
}
/* Убираем браузерные стрелки number-инпута, чтобы они не наезжали на суффикс. */
.bdk-unit > input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
.bdk-unit > input[type="number"]::-webkit-outer-spin-button,
.bdk-unit > input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* --- Сегментированный переключатель способа ввода --- */
.bdk-input-switch {
  display: inline-flex;
  background: var(--ios-gray-tint);
  border-radius: 10px;
  padding: 3px;
  gap: 2px;
  margin-bottom: 12px;
  max-width: 100%;
  flex-wrap: wrap;
}
.bdk-input-switch button {
  border: 0;
  background: transparent;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--bdk-text-muted);
  padding: 6px 14px;
  border-radius: 8px;
  cursor: pointer;
  min-height: 32px;
  transition: var(--bdk-transition);
}
.bdk-input-switch button.active {
  background: var(--bdk-surface);
  color: var(--bdk-text);
  box-shadow: var(--bdk-shadow-sm);
  font-weight: 600;
}
.bdk-input-switch button:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--bdk-primary-bg);
}

/* --- Кнопка импорта (Получить из Росреестра / Импорт ЕГРН) --- */
/* Контурная синяя, визуально отделена от submit; в V2 прижата под полем. */
.btn-import {
  background: var(--bdk-surface);
  color: var(--bdk-primary);
  border: 1px solid var(--bdk-primary);
}
.btn-import:hover { background: var(--bdk-primary-bg); color: var(--bdk-primary-hover); border-color: var(--bdk-primary-hover); }
.bdk-import-under { margin-top: 6px; }

/* --- Степпер-маршрут мастера (V2) --- */
.bdk-steps-route {
  display: flex;
  align-items: center;
  margin-bottom: 22px;
  flex-wrap: wrap;
  gap: 6px 0;
}
.bdk-step-r {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--bdk-text-muted);
  white-space: nowrap;
  background: transparent;
  border: 0;
  padding: 4px 2px;
  font-family: inherit;
}
button.bdk-step-r { cursor: pointer; }
.bdk-step-r .n {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 12px;
  font-weight: 600;
  background: var(--ios-gray-tint);
  color: var(--bdk-text-muted);
  flex: 0 0 auto;
  transition: var(--bdk-transition);
}
.bdk-step-r.current { color: var(--bdk-text); font-weight: 600; }
.bdk-step-r.current .n { background: var(--bdk-primary); color: #fff; box-shadow: 0 0 0 4px var(--bdk-primary-bg); }
.bdk-step-r.done { color: var(--bdk-text); }
.bdk-step-r.done .n { background: var(--bdk-primary-bg); color: var(--bdk-primary); }
.bdk-step-r:focus-visible { outline: none; }
.bdk-step-r:focus-visible .n { box-shadow: 0 0 0 3px var(--bdk-primary-bg); }
.bdk-step-seg {
  flex: 1;
  min-width: 16px;
  height: 2px;
  background: var(--ios-gray-tint);
  margin: 0 12px;
  border-radius: 2px;
}
.bdk-step-seg.fill { background: var(--bdk-primary); }
/* На узком экране подписи прячем — остаются номера + линия. */
@media (max-width: 575.98px) {
  .bdk-step-r .t { display: none; }
  .bdk-step-seg { margin: 0 6px; }
}

/* --- Футер одностраничной формы --- */
.bdk-form-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-top: 24px;
  padding-top: 18px;
  border-top: 1px solid var(--ios-separator);
}
/* Primary-действие у правого края (конец пути взгляда, закон Фиттса).
   Применяем, когда в футере только Отмена + Сохранить, без левого контента. */
.bdk-form-footer--end { justify-content: flex-end; }

/* =====================================================================
   ДИЗАЙН-СИСТЕМА ДИАЛОГОВ B2B — 2026-06-19.
   Источник правды: Plans/feature_forms_dialog_design_system_2026-06-19/
   PRINCIPLES_dialog_forms.md (утверждено владельцем).
   Контентная колонка ФОРМЫ ограничена и центрирована — поля не «уезжают»
   по строке на широком мониторе. На таблицы/дашборды/карту НЕ влияет.
   ===================================================================== */

/* Обёртка форм-страницы: заголовок + <form> внутри одной центрированной
   колонки шириной --bdk-form-max (≈1120px). Левый край заголовка совпадает
   с левым краем формы. Воздух по краям — это норма для B2B-формы. */
.bdk-form-page {
  max-width: var(--bdk-form-max, 1120px);
  margin-inline: auto;
}

/* Sticky-футер для длинных форм: «Сохранить» всегда под рукой.
   Опциональный модификатор, по умолчанию не используется. */
.bdk-form-footer--sticky {
  position: sticky;
  bottom: 0;
  background: var(--bdk-bg);
  margin-top: 0;
  padding-bottom: calc(12px + env(safe-area-inset-bottom));
  z-index: 5;
}

/* =====================================================================
   ЭТАЛОН ФОРМЫ B2B — принят владельцем 2026-06-19.
   Всё ниже scoped к .bdk-form-page: форма «подключается» к эталону одной
   обёрткой, немигрированные формы не затрагиваются. Принципы и решения —
   Plans/feature_forms_dialog_design_system_2026-06-19/PRINCIPLES_dialog_forms.md
   Раскладка полей — существующий flex-слой .bdk-form-grid + .bdk-fw-* :
   каждое поле своей ширины (fw-*), последнее поле ряда БЕЗ fw-класса
   «тянется» и забирает остаток — пустот справа нет.
   ===================================================================== */

/* Плотность: на десктопе поля ниже (работа с базой за монитором),
   на мобильном — комфортный тач-таргет 44px (HIG). */
@media (min-width: 768px) {
  .bdk-form-page .form-control,
  .bdk-form-page .form-select { height: 34px; padding: 4px 10px; font-size: 14px; }
  .bdk-form-page textarea.form-control { height: auto; }
  .bdk-form-page .bdk-panel-body.padded { padding: 14px 16px; }
  .bdk-form-page .bdk-form-grid { gap: 9px 14px; }
  .bdk-form-page .bdk-form-divider { margin: 10px 0; }
}
@media (max-width: 767.98px) {
  .bdk-form-page .form-control,
  .bdk-form-page .form-select { min-height: 44px; }
}
.bdk-form-page .form-label { font-weight: 600; margin-bottom: 3px; font-size: 13px; }
.bdk-form-page .form-text { font-size: 12px; margin-top: 2px; }

/* Заголовок секции: фирменный синий + опциональная иконка-якорь +
   подпись-источник справа (авто·Росреестр / авто·КЛАДР). */
.bdk-form-page .bdk-form-section {
  display: flex; align-items: center; gap: 7px;
  color: var(--bdk-primary); font-weight: 700; font-size: 13px; letter-spacing: 0;
  margin: 0 0 7px;
}
.bdk-form-page .bdk-form-section .bi { opacity: .85; font-size: 14px; }
.bdk-form-page .bdk-form-section .src { margin-left: auto; font-weight: 500; font-size: 12px; color: var(--bdk-text-dim); }
.bdk-form-page .bdk-form-section .src.auto { color: var(--bdk-primary); }

/* Узкое числовое поле: дом/корпус/строение/комиссия (тоньше fw-counter). */
.bdk-field.bdk-fw-tiny { flex: 0 1 64px; max-width: 64px; }
@media (max-width: 575.98px) { .bdk-field.bdk-fw-tiny { flex-basis: 60px; } }

/* Полоса-группа «источник данных»: синяя = авто, золотая = вводит человек.
   Цвет привязан к смыслу (где проверяю / где печатаю), не декорация. */
.bdk-form-band { border-left: 3px solid var(--bdk-primary); padding-left: 14px; margin: 0 0 4px; }
.bdk-form-band--manual { border-left-color: var(--bdk-accent); }
.bdk-form-band .t { font-size: 12px; font-weight: 700; letter-spacing: 0; text-transform: uppercase; color: var(--bdk-text-muted); }

/* Компактная подсказка рядом с группой или полем.
   В .bdk-form-dense остаётся видимой (в отличие от .form-text, который скрыт). */
.bdk-form-hint-compact {
  font-size: 12px;
  color: var(--bdk-text-dim);
  margin: 2px 0 6px;
  padding-left: 14px;
  line-height: 1.4;
}

/* Сворачиваемый редкий блок (РНС, обременения): по умолчанию свёрнут. */
.bdk-fold-head {
  border: 1px solid var(--bdk-border); border-radius: var(--bdk-radius); background: var(--bdk-surface);
  padding: 10px 14px; display: flex; align-items: center; gap: 10px;
  font-weight: 600; font-size: 14px; margin-bottom: 8px; cursor: pointer; width: 100%; text-align: left;
  font-family: inherit; color: var(--bdk-text);
}
.bdk-fold-head .bi { color: var(--bdk-text-dim); transition: transform .2s ease; }
.bdk-fold-head[aria-expanded="true"] .bi-chevron-right { transform: rotate(90deg); }
.bdk-fold-head .hint { margin-left: auto; font-weight: 400; font-size: 12.5px; color: var(--bdk-text-muted); }
.bdk-fold-body { padding: 2px 0 6px; }

/* --- Вкладки формы (.bdk-tabs на <button>) --- */
/* Класс .bdk-tab из site.css рассчитан на <a>; сбрасываем нативную рамку/фон
   кнопки, нижнюю границу-индикатор оставляем (активную красит .bdk-tab.active). */
.bdk-tabs button.bdk-tab {
  appearance: none; -webkit-appearance: none;
  background: none; border: 0; border-bottom: 2px solid transparent;
  font-family: inherit; cursor: pointer;
}
.bdk-tab-pane { margin-top: 14px; }
/* Бейдж-точка «на вкладке есть ошибка валидации». */
.bdk-tab .bdk-err-dot {
  display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  background: var(--ios-red, #ff3b30); margin-left: 2px; vertical-align: middle;
}

/* Alpine: прячем элементы с x-cloak до инициализации (убирает мигание
   всех вкладок/панелей при загрузке). Стандартное требование Alpine. */
[x-cloak] { display: none !important; }

/* =====================================================================
   ПЛОТНЫЙ ДЕСКТОП-РЕЖИМ — 2026-06-20.
   Модификатор .bdk-form-dense — исключение из iOS-правила: B2B-форма
   для риелтора, максимум полей на экран, быстрый ввод.
   Scoped только к .bdk-form-dense, никакие другие формы не затронуты.
   Решение владельца 2026-06-20 (Plans/feature_object_forms_dense_modal_2026-06-20/).
   ===================================================================== */

/* Обёртка: умеренный потолок ширины, выравнивание влево (решение владельца
   2026-06-30, Q1=A). Прежде было max-width:none — на широком мониторе фикс-
   ширины полей (.bdk-w-*) оставляли большие дыры справа («форма-бар»). Потолок
   ~1180px держит поля близко; full-width давало рваный правый край. На мобильном
   потолок больше вьюпорта → форма всё равно во всю ширину. */
.bdk-form-dense.bdk-form-page {
  max-width: 1180px;
  margin-inline: 0;
}

/* Плотные поля на десктопе ≥992px. */
@media (min-width: 992px) {
  .bdk-form-dense .form-control,
  .bdk-form-dense .form-select {
    height: 30px;
    padding: 2px 8px;
    font-size: 13px;
    border-radius: 6px;
  }
  .bdk-form-dense textarea.form-control {
    height: auto;
    min-height: 60px;
    padding: 4px 8px;
  }
  /* «Описание» объекта идёт в рекламу/презентацию — высокое поле под продающий
     текст. Модификатор .bdk-textarea-tall на обёртке поля. 3 класса + элемент —
     перебивает общее правило min-height:60px на любом брейкпоинте. */
  .bdk-form-dense .bdk-textarea-tall textarea.form-control { min-height: 200px; }
  .bdk-form-dense .form-label {
    font-size: 12px;
    font-weight: 600;
    margin-bottom: 2px;
    color: var(--bdk-text-muted, #6b7280);
  }
  /* Сетка: меньший gap, чем в базовом grid--12 */
  .bdk-form-dense .bdk-form-grid--12 {
    gap: 6px 12px;
  }
  /* Секции: компактнее */
  .bdk-form-dense .bdk-form-section {
    margin: 0 0 4px;
    font-size: 12px;
  }
  .bdk-form-dense .bdk-form-divider {
    margin: 8px 0;
  }
  /* Панели: меньше padding */
  .bdk-form-dense .bdk-panel-body.padded {
    padding: 10px 14px;
  }
  /* Чекбоксы: минимальная высота тач-таргета уменьшена для десктопа */
  .bdk-form-dense .bdk-check-row .form-check {
    min-height: 28px;
    gap: 6px;
    font-size: 13px;
  }
  /* Единица измерения: позиция по высоте 30px-поля */
  .bdk-form-dense .bdk-unit > .u {
    font-size: 12px;
    right: 8px;
  }
  /* Футер: компактнее */
  .bdk-form-dense .bdk-form-footer {
    margin-top: 14px;
    padding-top: 12px;
  }
  /* Кнопки футера: меньше */
  .bdk-form-dense .bdk-form-footer .btn {
    height: 34px;
    padding: 0 16px;
    font-size: 13px;
    border-radius: 6px;
  }
  /* Вкладки: компактнее текст */
  .bdk-form-dense .bdk-tabs .bdk-tab {
    font-size: 13px;
    padding: 6px 14px;
  }
}

/* На мобильном (<992px) — стандартный комфортный размер, не плотный. */
@media (max-width: 991.98px) {
  .bdk-form-dense .form-control,
  .bdk-form-dense .form-select {
    height: 40px;
    padding: 6px 12px;
    font-size: 14px;
  }
  /* Сетка разворачивается в 1 столбец (базовый grid--12 уже делает это при 575px,
     но для dense-формы переопределяем на 992px). */
  .bdk-form-dense .bdk-form-grid--12 > .bdk-field {
    grid-column: span 12;
  }
  /* tight-поля (адрес) держим в ряду */
  .bdk-form-dense .bdk-form-grid--12 > .bdk-col-tight {
    grid-column: span 4;
  }
}

/* ─── Inline help_text → скрыт в dense-режиме ───────────────────────────────
   Подсказки под полями (.form-text) убираем: в .bdk-form-dense они превращают
   форму в «простынь текста». Для полей с kind=popover/sheet JS из base.html
   добавляет иконку (i) рядом с лейблом — подсказка доступна по клику.
   Для полей с kind=inline подсказку конвертируем в popover через overrides
   в BuildingForm.__init__ (см. apps/properties/forms/building.py).
   Scoped только к .bdk-form-dense — все остальные формы НЕ затронуты.
   ──────────────────────────────────────────────────────────────────────────── */
.bdk-form-dense .form-text {
  display: none !important;
}

/* Секции: уменьшить отступ между блоками внутри вкладки для большей плотности */
.bdk-form-dense .bdk-tab-pane .bdk-panel-body.padded > .bdk-form-grid--12 {
  margin-bottom: 2px;
}

/* =====================================================================
   МОДИФИКАТОРЫ ШИРИНЫ ПО СОДЕРЖАНИЮ (Фаза 1b).
   Класс вешается на обёртку поля (.bdk-col-* div).
   CSS ограничивает max-width ВНУТРЕННЕГО инпута — поле остаётся в
   своей grid-ячейке, но не растягивается на всю ячейку.
   Scoped только к .bdk-form-dense.
   ===================================================================== */
@media (min-width: 992px) {
  /* ~9ch — этажи выше/ниже, кол-во номеров, комнаты, этаж, номер квартиры.
     Было 7ch (~57px) — не вмещало placeholder типа «напр.» и 4-значные числа.
     Увеличено до 10ch (~80px) — минимум для 4-5 символов с запасом (аудит Е1). */
  .bdk-form-dense .bdk-w-xs .form-control,
  .bdk-form-dense .bdk-w-xs .form-select { max-width: 10ch; }

  /* ~13ch — год постройки, площадь, %, дистанции, даты, денежные суммы.
     Было 12ch (~96px) — не вмещало «85 000 000» (11 символов с пробелами).
     Увеличено до 15ch (~120px) — достаточно для 8-значных чисел (аудит Е1). */
  .bdk-form-dense .bdk-w-sm .form-control,
  .bdk-form-dense .bdk-w-sm .form-select { max-width: 15ch; }

  /* ~17ch — телефон */
  .bdk-form-dense .bdk-w-phone .form-control,
  .bdk-form-dense .bdk-w-phone .form-select { max-width: 18ch; }

  /* ~12ch — широта/долгота */
  .bdk-form-dense .bdk-w-coord .form-control,
  .bdk-form-dense .bdk-w-coord .form-select { max-width: 14ch; }

  /* ~22ch — кадастровый номер/квартал */
  .bdk-form-dense .bdk-w-cadastre .form-control,
  .bdk-form-dense .bdk-w-cadastre .form-select { max-width: 24ch; }

  /* ~32ch — название/корпус, дом */
  .bdk-form-dense .bdk-w-md .form-control,
  .bdk-form-dense .bdk-w-md .form-select { max-width: 34ch; }

  /* Поля с единицей измерения: max-width на сам инпут внутри .bdk-unit */
  .bdk-form-dense .bdk-w-xs .bdk-unit .form-control { max-width: 10ch; }
  .bdk-form-dense .bdk-w-sm .bdk-unit .form-control { max-width: 15ch; }

  /* Суффикс единицы прижимаем к узкому инпуту: контейнер .bdk-unit
     ужимаем до ширины поля (иначе абсолютный .u уезжал к правому краю
     grid-ячейки — см. смоук Фазы 4). Резерв справа тоже меньше. */
  .bdk-form-dense .bdk-unit > .form-control { padding-right: 28px; }
  .bdk-form-dense .bdk-w-xs .bdk-unit { max-width: 10ch; }
  .bdk-form-dense .bdk-w-sm .bdk-unit { max-width: 15ch; }
  .bdk-form-dense .bdk-w-phone .bdk-unit { max-width: 18ch; }
}

/* =====================================================================
   2-КОЛОНОЧНАЯ КОМПОНОВКА СЕКЦИЙ (Фаза 1b).
   .bdk-form-cols-2 — оборачивает два смежных блока/панели.
   На десктопе ≥992px — grid 1fr 1fr; на <992px — одна колонка.
   ===================================================================== */
.bdk-form-cols-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 16px;
  align-items: start;
}
@media (max-width: 991.98px) {
  .bdk-form-cols-2 { grid-template-columns: 1fr; }
}

/* =====================================================================
   ЛЕНТА КОММУНИКАЦИЙ (Фаза 1b).
   .bdk-comm-strip — inline-ряд переключателей/чекбоксов, компактный.
   Scoped к .bdk-form-dense.
   ===================================================================== */
.bdk-form-dense .bdk-comm-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 16px;
  align-items: center;
  padding: 4px 0;
}
.bdk-form-dense .bdk-comm-strip .form-check {
  display: flex;
  align-items: center;
  gap: 5px;
  margin: 0;
  min-height: 28px;
  font-size: 13px;
  white-space: nowrap;
}
.bdk-form-dense .bdk-comm-strip .form-check-input {
  width: 14px;
  height: 14px;
  flex: 0 0 auto;
  margin-top: 0;
}
@media (max-width: 991.98px) {
  .bdk-form-dense .bdk-comm-strip { gap: 8px 20px; }
  .bdk-form-dense .bdk-comm-strip .form-check { min-height: 36px; }
}

/* =====================================================================
   ЗДАНИЕ — компактная раскладка вкладки «Основное» (Фаза dense-2).
   Scoped к .bdk-form-dense: участок, квартира и ЖК не затронуты.
   ===================================================================== */

/* Кнопка «Получить из Росреестра» в той же строке, что кадастр/квартал:
   невидимый лейбл-спейсер выравнивает кнопку по нижнему краю ячейки. */
.bdk-form-dense .bdk-building-btn-row {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}
.bdk-form-dense .bdk-building-btn-row .bdk-label-spacer {
  visibility: hidden;
  margin-bottom: 2px;   /* = .form-label margin-bottom в dense-режиме */
}
.bdk-form-dense .bdk-building-btn-row .btn-import {
  white-space: nowrap;
  font-size: 12px;
  padding: 3px 8px;
  height: 30px;         /* = высота поля в dense-режиме ≥992px */
}

/* Блок координат внутри адрес-пикера прячем по умолчанию только для здания.
   Сам partial _address_picker.html не изменён — сворачивание scoped
   к обёртке .bdk-building-addr-wrap (через Alpine :class="coords-visible").
   Координаты (div.mt-3.p-3.border.rounded.bg-light) скрыты через CSS;
   Alpine добавляет класс coords-visible при coordsOpen=true. */
.bdk-building-addr-wrap .mt-3.p-3.border.rounded.bg-light {
  display: none;
}
.bdk-building-addr-wrap.coords-visible .mt-3.p-3.border.rounded.bg-light {
  display: block;
}

/* Кнопка-тоггл координат: ссылочный вид, без Bootstrap btn-link фокусного контура. */
.bdk-coords-toggle {
  font-size: 12px;
  color: var(--bdk-primary);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.bdk-coords-toggle:hover {
  color: var(--bdk-primary-hover);
  text-decoration: underline;
}
.bdk-coords-toggle .bi {
  font-size: 11px;
}

/* =====================================================================
   ПЛОТНАЯ СТРАНИЦА ПРОСМОТРА ОБЪЕКТА (.bdk-detail-dense) — 2026-06-20.
   Решение владельца: страницы просмотра «большие и неудобные».
   Делаем их плотными ОДНИМ scoped-модификатором на скелете detail-страницы,
   без правки ~40 секционных partial'ов: они используют единые классы
   (.bdk-panel / .table / .bdk-price), поэтому density переопределяется тут.
   Плотный режим только на десктопе ≥992px; на мобильном — комфортный вид.
   Карта/галерея/таблицы арендаторов сохраняют полную ширину (НЕ режем в колонки).
   ===================================================================== */
@media (min-width: 992px) {
  .bdk-detail-dense .bdk-panel { margin-top: 10px; margin-bottom: 10px; }
  .bdk-detail-dense .bdk-panel-body.padded { padding: 10px 14px; }
  .bdk-detail-dense .bdk-panel-header { padding: 8px 14px; }
  .bdk-detail-dense .bdk-panel-title { font-size: 13px; }

  /* Таблицы фактов: компактные ячейки, ключ — по содержимому, значение — справа. */
  .bdk-detail-dense table.table { font-size: 13px; margin-bottom: 0; }
  .bdk-detail-dense table.table > :not(caption) > * > * { padding: 3px 8px; }
  .bdk-detail-dense table.table th {
    font-weight: 600;
    color: var(--bdk-text-muted);
    white-space: nowrap;
    width: 1%;
  }

  /* Цена: крупный inline-размер (26px) ужимаем до 20px. */
  .bdk-detail-dense .bdk-price { font-size: 20px !important; }

  /* Подзаголовки/разделители внутри секций — плотнее. */
  .bdk-detail-dense h3.h6 { font-size: 13px; margin: 6px 0 2px; }
  .bdk-detail-dense hr { margin: 6px 0; }
  .bdk-detail-dense .alert.small { padding: 6px 10px; margin-bottom: 8px; }

  /* Вкладки карточки — компактнее. */
  .bdk-detail-dense .bdk-detail-tabpanel { margin-top: 10px; }

  /* 2-колоночная masonry для табов с >1 секцией (2026-06-30): короткие панели
     встают рядом — карточка короче и без пустот справа. break-inside держит
     панель целой; margin-top:0 убирает mt-3, ритм задаёт margin-bottom.
     Табы с одной секцией (карта, документы, здания) масонри не получают —
     остаются во всю ширину. */
  .bdk-detail-dense .bdk-detail-sections--cols {
    columns: 2;
    column-gap: 14px;
  }
  .bdk-detail-dense .bdk-detail-sections--cols > .bdk-panel {
    break-inside: avoid;
    margin-top: 0 !important;
    margin-bottom: 14px;
  }
}

/* Шапка detail-карточки (2026-07-01): адрес и мета — во всю ширину строки,
   панель действий переносится на отдельную строку и прижимается вправо.
   Раньше колонка кнопок (align-items:flex-end) отъедала ширину у заголовка:
   длинный адрес переносился в узкую левую колонку, а сверху справа — над
   короткой панелью кнопок — зияла большая пустая зона. Теперь заголовок
   занимает всю ширину, пустоты нет. Только ≥769px — на ≤768 шапка и так
   складывается в столбец (site.css). */
@media (min-width: 769px) {
  .bdk-detail-dense .bdk-page-header-row { align-items: flex-start; }
  .bdk-detail-dense .bdk-page-title { flex: 1 1 100% !important; }
  .bdk-detail-dense .bdk-page-actions { margin-left: auto; }

  /* Мета-строка карточки (2026-07-01): этаж · кадастр · адрес · район · связь —
     в одну строку с переносом. Раньше каждый пункт был отдельным блоком-<p>,
     они стояли столбиком и справа зияла пустота. Теперь пункты идут инлайн,
     заполняя ширину слева направо; middot-разделители — через ::after.
     Только ≥769px — на мобильном пункты остаются в столбик (комфортнее). */
  .bdk-detail-dense .bdk-page-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    row-gap: 2px;
    margin-top: 6px;
  }
  .bdk-detail-dense .bdk-page-meta > p {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
  }
  .bdk-detail-dense .bdk-page-meta > p:not(:last-child)::after {
    content: "·";
    margin: 0 8px;
    color: var(--bdk-text-muted);
    opacity: 0.5;
  }
}

/* ====================================================================
   КОМПАКТНАЯ ПОЛОСА «ПРОДАВАЕМОСТЬ» (.bdk-sellability) — 2026-06-30.
   Раньше панель была высокой и пустой: балл уезжал вправо, «что мешает»
   и «следующие действия» шли отдельными списками с крупными отступами.
   Теперь — короткая горизонтальная полоса: балл-кружок слева, статус и
   подсказки в строку справа. Цвет статуса задаёт data-status на секции.
   Без media-гейта — компактна и на мобильном.
   ==================================================================== */
.bdk-sellability { padding: 12px 16px; }
.bdk-sell-row { display: flex; align-items: flex-start; gap: 14px; }

.bdk-sell-score {
  flex-shrink: 0;
  width: 40px; height: 40px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 15px; font-weight: 700;
  border: 1px solid var(--ios-separator, rgba(60,60,67,0.12));
}
.bdk-sellability[data-status="ready"]   .bdk-sell-score { background: rgba(52,199,89,0.12); color: #2a9d4e; }
.bdk-sellability[data-status="warning"] .bdk-sell-score { background: rgba(255,149,0,0.14); color: #c2700a; }
.bdk-sellability[data-status="blocked"] .bdk-sell-score,
.bdk-sellability:not([data-status="ready"]):not([data-status="warning"]) .bdk-sell-score {
  background: rgba(255,59,48,0.12); color: #d32f27;
}

.bdk-sell-main { min-width: 0; flex: 1; }
.bdk-sell-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.bdk-sell-title {
  font-size: 13px; font-weight: 600; letter-spacing: 0;
  color: var(--bdk-text-muted, #6b6b70); text-transform: uppercase;
}
.bdk-sell-status {
  font-size: 12px; font-weight: 600;
  padding: 2px 9px; border-radius: 999px;
  border: 1px solid var(--ios-separator, rgba(60,60,67,0.12));
}
.bdk-sellability[data-status="ready"]   .bdk-sell-status { background: rgba(52,199,89,0.12); color: #2a9d4e; }
.bdk-sellability[data-status="warning"] .bdk-sell-status { background: rgba(255,149,0,0.14); color: #c2700a; }
.bdk-sellability[data-status="blocked"] .bdk-sell-status,
.bdk-sellability:not([data-status="ready"]):not([data-status="warning"]) .bdk-sell-status {
  background: rgba(255,59,48,0.12); color: #d32f27;
}

.bdk-sell-line {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px;
  font-size: 13px; line-height: 1.5; margin-top: 3px;
}
.bdk-sell-line-label {
  font-size: 12px; font-weight: 600; color: var(--bdk-text-muted, #6b6b70);
  flex-shrink: 0;
}
.bdk-sell-chip {
  font-size: 12px; font-weight: 500;
  padding: 2px 9px; border-radius: 999px;
  background: var(--bs-gray-100, #f1f1f3);
  border: 1px solid var(--ios-separator, rgba(60,60,67,0.12));
  color: var(--ios-text-primary, #1c1c1e);
}
.bdk-sell-action { color: var(--bdk-primary, #00599C); font-weight: 500; }
.bdk-sell-action:not(:last-child)::after {
  content: "·"; color: var(--bdk-text-muted, #9a9aa0);
  margin-left: 6px; font-weight: 400;
}
.bdk-sell-none { color: var(--bdk-text-muted, #6b6b70); }
