/* Вкладка «План» карточки объекта и редактор плана (plans/floor-plans,
 * ЗД-1). Три колонки: этажи, план, карточка помещения; на компактном
 * экране карточка уходит под план, на телефоне всё в одну колонку и этажи
 * прокручиваются строкой. Цвета — токены --plan-* из tokens.css */

.strip.plan-summary { grid-template-columns: repeat(auto-fit, minmax(176px, 1fr)); }
.plan-summary .strip__value.plan-summary__debt { color: var(--danger); }
.plan-card-frame { display: block; min-width: 0; }

.plan-definitions {
  font-size: var(--font-size-secondary);
  line-height: var(--line-height-secondary);
  color: var(--text-secondary);
}
.plan-definitions > summary { cursor: pointer; color: var(--accent); }
.plan-definitions .kv-list { margin-top: var(--space-2); background: var(--surface); border: 1px solid var(--border-panel); border-radius: var(--radius-panel); padding: 0 var(--space-4); }

.plan-layout {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr) 340px;
  gap: var(--space-4);
  align-items: start;
}

.plan-note {
  margin: 0;
  font-size: var(--font-size-hint);
  line-height: var(--line-height-hint);
  color: var(--text-muted);
}

/* --- Этажи --- */
.plan-floors__list { display: flex; flex-direction: column; }
.plan-floor {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-2-5) var(--space-4);
  border-top: 1px solid var(--border-soft);
  color: var(--text);
  text-decoration: none;
}
.plan-floor:first-child { border-top: 0; }
.plan-floor:hover { background: var(--row-hover); text-decoration: none; }
.plan-floor--active { background: var(--accent-bg); }
.plan-floor__top { display: flex; justify-content: space-between; gap: var(--space-2); font-weight: 600; }
.plan-floor__top .num { font-weight: 500; font-size: var(--font-size-mono-cell); }
.plan-floor__sub { font-size: var(--font-size-hint); line-height: var(--line-height-hint); color: var(--text-muted); }
.plan-stack { display: block; width: 100%; height: 8px; border-radius: 3px; overflow: hidden; }
.plan-stack__track { fill: var(--border-soft); }
.plan-stack__seg--leased { fill: var(--plan-leased-line); }
.plan-stack__seg--freeing { fill: var(--plan-freeing-line); }
.plan-stack__seg--reserve { fill: var(--plan-reserve-line); }
.plan-stack__seg--free { fill: var(--plan-free-line); }
.plan-floors__add { padding: var(--space-3) var(--space-4); border-top: 1px solid var(--border-soft); font-size: var(--font-size-secondary); }
.plan-floors__add > summary { cursor: pointer; color: var(--accent); }
.plan-floors__form { display: flex; flex-direction: column; gap: var(--space-2); margin-top: var(--space-2); }

/* --- План этажа --- */
.plan-panel .panel__actions { flex-wrap: wrap; }
.plan-upload {
  margin: 0 var(--space-4) var(--space-3);
  padding: var(--space-3);
  border: 1px dashed var(--border-control);
  border-radius: var(--radius);
  font-size: var(--font-size-secondary);
}
.plan-upload > summary { cursor: pointer; color: var(--accent); font-weight: 500; }
.plan-upload__form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--space-3); margin-top: var(--space-2); }

.plan-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1-5) var(--space-3);
  padding: var(--space-2) var(--space-4);
  border-top: 1px solid var(--border-soft);
  font-size: var(--font-size-hint);
  color: var(--text-secondary);
}
.plan-legend__item { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.plan-legend__item .num { color: var(--text); }
.plan-legend__swatch { display: inline-block; width: 12px; height: 12px; border-radius: 3px; border: 1.5px solid; }
.plan-legend__swatch--leased { background: var(--plan-leased-fill); border-color: var(--plan-leased-line); }
.plan-legend__swatch--freeing { background: var(--plan-freeing-fill); border-color: var(--plan-freeing-line); }
.plan-legend__swatch--reserve { background: var(--plan-reserve-fill); border-color: var(--plan-reserve-line); }
.plan-legend__swatch--free { background: var(--plan-free-fill); border-color: var(--plan-free-line); }
.plan-legend__swatch--common { background: var(--plan-common-fill); border-color: var(--plan-common-line); border-style: dashed; }
.plan-legend__swatch--none { background: var(--plan-lens-0); border-color: var(--border-control); }
.plan-legend__swatch--d30, .plan-legend__swatch--t365 { background: var(--plan-lens-1); border-color: var(--border-control); }
.plan-legend__swatch--d90, .plan-legend__swatch--t180 { background: var(--plan-lens-2); border-color: var(--border-control); }
.plan-legend__swatch--d90plus, .plan-legend__swatch--t90 { background: var(--plan-lens-3); border-color: var(--border-control); }
.plan-legend__swatch--long { background: var(--plan-lens-cool); border-color: var(--border-control); }
.plan-legend__swatch--vacant { background: var(--surface); border-color: var(--plan-hatch); border-style: dashed; }

.plan-banner {
  margin: 0 var(--space-4) var(--space-2);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius);
  background: var(--warning-bg);
  border: 1px solid var(--warning-border);
  color: var(--warning);
  font-size: var(--font-size-secondary);
}

.plan-canvas {
  padding: var(--space-3);
  border-top: 1px solid var(--border-soft);
  background: var(--surface-subtle);
  border-radius: 0 0 var(--radius-panel) var(--radius-panel);
}
.plan-svg { display: block; width: 100%; height: auto; background: var(--plan-underlay-bg); border-radius: 6px; }
.plan-svg__underlay { pointer-events: none; }

.plan-shape polygon { stroke-width: 2px; fill-opacity: .82; cursor: pointer; transition: fill-opacity .12s; }
.plan-shape:hover polygon, .plan-shape:focus-visible polygon { fill-opacity: .95; }
.plan-shape:focus { outline: none; }
.plan-shape:focus-visible polygon { stroke: var(--plan-selected); stroke-width: 3px; }
.plan-shape--selected polygon { stroke: var(--plan-selected); stroke-width: 4px; fill-opacity: .95; }
.plan-shape--leased polygon { fill: var(--plan-leased-fill); stroke: var(--plan-leased-line); }
.plan-shape--freeing polygon { fill: url(#plan-hatch-freeing); stroke: var(--plan-freeing-line); }
.plan-shape--reserve polygon { fill: var(--plan-reserve-fill); stroke: var(--plan-reserve-line); }
.plan-shape--free polygon { fill: var(--plan-free-fill); stroke: var(--plan-free-line); }
.plan-shape--vacant polygon { fill: url(#plan-hatch-vacant); stroke: var(--plan-common-line); }
.plan-shape--none polygon { fill: var(--plan-lens-0); stroke: var(--plan-common-line); }
.plan-shape--d30 polygon, .plan-shape--t365 polygon { fill: var(--plan-lens-1); stroke: var(--plan-freeing-line); }
.plan-shape--d90 polygon, .plan-shape--t180 polygon { fill: var(--plan-lens-2); stroke: var(--plan-freeing-line); }
.plan-shape--d90plus polygon, .plan-shape--t90 polygon { fill: var(--plan-lens-3); stroke: var(--danger); }
.plan-shape--long polygon { fill: var(--plan-lens-cool); stroke: var(--plan-leased-line); }
.plan-shape--selected.plan-shape polygon { stroke: var(--plan-selected); }
.plan-hatch__bg--freeing { fill: var(--plan-freeing-fill); }
.plan-hatch__line--freeing { stroke: var(--plan-freeing-line); stroke-opacity: .35; }
.plan-hatch__bg--vacant { fill: var(--surface); }
.plan-hatch__line--vacant { stroke: var(--plan-hatch); }
.plan-shape__label { pointer-events: none; fill: var(--text); font-family: var(--font-sans); }
.plan-shape__line--0 { font-family: var(--font-mono); font-weight: 600; }
.plan-shape__line--1, .plan-shape__line--2 { fill: var(--text-secondary); font-weight: 500; }

.plan-common polygon { fill: var(--plan-common-fill); fill-opacity: .7; stroke: var(--plan-common-line); stroke-width: 1.5px; stroke-dasharray: 6 4; }
.plan-common text { fill: var(--neutral); font-family: var(--font-sans); pointer-events: none; }

/* --- Плитки: этаж без плана и помещения без этажа --- */
.plan-tiles { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.plan-tile {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 112px;
  padding: var(--space-2) var(--space-2-5);
  border: 1.5px solid var(--plan-common-line);
  border-radius: 6px;
  background: var(--surface);
  color: var(--text);
  text-decoration: none;
}
.plan-tile:hover { text-decoration: none; filter: brightness(.97); }
.plan-tile__number { font-weight: 600; font-size: var(--font-size-mono-cell); }
.plan-tile__sub { font-size: var(--font-size-hint); line-height: var(--line-height-hint); color: var(--text-secondary); }
.plan-tile--leased { background: var(--plan-leased-fill); border-color: var(--plan-leased-line); }
.plan-tile--freeing { background: var(--plan-freeing-fill); border-color: var(--plan-freeing-line); }
.plan-tile--reserve { background: var(--plan-reserve-fill); border-color: var(--plan-reserve-line); }
.plan-tile--free { background: var(--plan-free-fill); border-color: var(--plan-free-line); }
.plan-tile--none { background: var(--plan-lens-0); }
.plan-tile--d30, .plan-tile--t365 { background: var(--plan-lens-1); }
.plan-tile--d90, .plan-tile--t180 { background: var(--plan-lens-2); }
.plan-tile--d90plus, .plan-tile--t90 { background: var(--plan-lens-3); }
.plan-tile--long { background: var(--plan-lens-cool); }
.plan-tile--vacant { border-style: dashed; }
.plan-tile--selected { outline: 3px solid var(--plan-selected); outline-offset: 1px; }

/* --- Карточка помещения --- */
.plan-card-frame { position: sticky; top: var(--space-3); }
.plan-card__empty { padding: var(--space-6) var(--space-5); text-align: center; display: flex; flex-direction: column; gap: var(--space-1-5); }
.plan-card__empty-title { margin: 0; font-weight: 600; }
.plan-card__sub { display: block; font-size: var(--font-size-hint); line-height: var(--line-height-hint); color: var(--text-muted); }
.plan-card__debt { color: var(--danger); font-weight: 600; }
.plan-card__reasons { display: flex; flex-wrap: wrap; gap: var(--space-1); }
.plan-card__actions { display: flex; flex-wrap: wrap; gap: var(--space-2); }

/* --- Редактор --- */
.plan-editor { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: var(--space-4); align-items: start; }
.plan-editor__tools { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); padding: var(--space-3) var(--space-4); }
.plan-editor__tool[aria-pressed="true"] { background: var(--accent-bg); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.plan-canvas--editor .plan-svg { cursor: crosshair; touch-action: none; }
.plan-editor__side { position: sticky; top: var(--space-3); }
.plan-editor__section { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3) var(--space-4); border-top: 1px solid var(--border-soft); }
.plan-editor__section:first-child { border-top: 0; }
/* Панели редактора прячет Stimulus атрибутом hidden — flex раздела его не перебивает */
.plan-editor [hidden] { display: none; }
.plan-editor__row { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.plan-editor__list { margin: 0; padding-left: var(--space-4); font-size: var(--font-size-secondary); }
.plan-edit__polygon { fill: var(--plan-leased-fill); fill-opacity: .7; stroke: var(--plan-leased-line); stroke-width: 2px; cursor: pointer; }
.plan-edit__polygon--common, .plan-edit__polygon--technical { fill: var(--plan-common-fill); stroke: var(--plan-common-line); stroke-dasharray: 6 4; }
.plan-edit__polygon--selected { stroke: var(--plan-selected); stroke-width: 4px; fill-opacity: .85; }
.plan-edit__label { fill: var(--text); font-family: var(--font-sans); font-weight: 600; pointer-events: none; }
.plan-edit__vertex { fill: var(--surface); stroke: var(--plan-selected); stroke-width: 2px; cursor: move; }
.plan-edit__draft, .plan-edit__pending { fill: var(--accent-bg); fill-opacity: .5; stroke: var(--plan-selected); stroke-width: 2px; stroke-dasharray: 6 4; pointer-events: none; }
.plan-edit__pending { stroke-dasharray: none; }
.plan-edit__start { fill: var(--plan-selected); stroke: var(--surface); stroke-width: 2px; pointer-events: none; }
.plan-edit__dot { fill: var(--surface); stroke: var(--plan-selected); stroke-width: 2px; pointer-events: none; }

@media (max-width: 1180px) {
  .plan-layout { grid-template-columns: 200px minmax(0, 1fr); }
  .plan-card-frame { grid-column: 1 / -1; position: static; }
  .plan-editor { grid-template-columns: minmax(0, 1fr); }
  .plan-editor__side { position: static; }
}

@media (max-width: 768px) {
  .plan-layout { grid-template-columns: minmax(0, 1fr); }
  .plan-floors__list { flex-direction: row; overflow-x: auto; }
  .plan-floor { min-width: 150px; border-top: 0; border-left: 1px solid var(--border-soft); }
  .plan-floor:first-child { border-left: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .plan-shape polygon { transition: none; }
}

/* --- Заполняемость по зданиям (ЗД-2): сортировка, полоса, окна освобождения --- */
.occupancy-sort { color: inherit; text-decoration: none; white-space: nowrap; }
.occupancy-sort:hover { color: var(--accent); text-decoration: none; }
.occupancy-sort--active { color: var(--accent); font-weight: 600; }
.occupancy-sort--asc::after { content: " ↑"; }
.occupancy-sort--desc::after { content: " ↓"; }
.occupancy-rate { display: block; }
.occupancy-bar {
  display: block;
  width: 96px;
  height: 6px;
  margin: var(--space-1) 0 0 auto;
  appearance: none;
  border: 0;
  border-radius: 3px;
  background: var(--border-soft);
  overflow: hidden;
}
.occupancy-bar::-webkit-progress-bar { background: var(--border-soft); }
.occupancy-bar::-webkit-progress-value { background: var(--plan-leased-line); border-radius: 3px; }
.occupancy-bar::-moz-progress-bar { background: var(--plan-leased-line); border-radius: 3px; }
/* Цвет полосы — тон статуса заполняемости (ui_status рядом со словом) */
.occupancy-bar--tone-success::-webkit-progress-value { background: var(--success); }
.occupancy-bar--tone-success::-moz-progress-bar { background: var(--success); }
.occupancy-bar--tone-warning::-webkit-progress-value { background: var(--warning); }
.occupancy-bar--tone-warning::-moz-progress-bar { background: var(--warning); }
.occupancy-bar--tone-danger::-webkit-progress-value { background: var(--danger); }
.occupancy-bar--tone-danger::-moz-progress-bar { background: var(--danger); }
.occupancy-bar--tone-neutral::-webkit-progress-value { background: var(--text-muted); }
.occupancy-bar--tone-neutral::-moz-progress-bar { background: var(--text-muted); }
.status.occupancy-status { display: flex; justify-content: flex-end; margin-top: var(--space-0-5); }
.occupancy-freeing { display: inline-flex; gap: var(--space-1); justify-content: flex-end; }
.occupancy-freeing__window {
  min-width: 28px;
  padding: 1px var(--space-1);
  border-radius: var(--radius-badge);
  background: var(--neutral-bg);
  color: var(--text-secondary);
  text-align: center;
  text-decoration: none;
  font-family: var(--font-mono);
  font-size: var(--font-size-hint);
}
.occupancy-freeing__window--on { background: var(--warning-bg); color: var(--warning); }
.occupancy-freeing__window:hover { text-decoration: none; outline: 1px solid var(--warning-border); }
.occupancy-debt { color: var(--danger); }
.ind-occupancy { white-space: nowrap; }

/* --- Карта объектов (ЗД-3): карта слева, карточка и список справа --- */
.map-layout { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: var(--space-4); align-items: start; }
.map-panel__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-2) var(--space-3); padding: var(--space-3) var(--space-4); }
.map-panel__zoom { display: inline-flex; gap: var(--space-1); }
.map-box { position: relative; height: 600px; border-top: 1px solid var(--border-soft); border-radius: 0 0 var(--radius-panel) var(--radius-panel); overflow: hidden; }
.map-svg { display: block; width: 100%; height: 100%; cursor: grab; touch-action: none; user-select: none; }
.map-svg:focus { outline: none; }
.map-svg:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.map-svg--dragging { cursor: grabbing; }
.map-svg--placing { cursor: crosshair; }
.map-svg__ground { fill: var(--neutral-bg); }
.map-tile { pointer-events: none; }
.map-box__attribution { position: absolute; right: var(--space-2); bottom: var(--space-1); padding: 1px var(--space-1-5); border-radius: 4px; background: var(--surface); color: var(--text-muted); font-size: var(--font-size-hint); line-height: var(--line-height-hint); opacity: .9; pointer-events: none; }
.map-box__empty { position: absolute; inset: auto var(--space-4) var(--space-8); margin: 0; padding: var(--space-3); border-radius: var(--radius); background: var(--surface); border: 1px solid var(--border-panel); color: var(--text-secondary); font-size: var(--font-size-secondary); text-align: center; }
.map-place-form { display: none; }

.map-pin { cursor: pointer; }
.map-pin:focus { outline: none; }
.map-pin__disc { fill: var(--surface); stroke: var(--border-control); stroke-width: 1.5; }
.map-pin:hover .map-pin__disc, .map-pin:focus-visible .map-pin__disc, .map-pin--selected .map-pin__disc { stroke: var(--accent); stroke-width: 3; }
.map-pin__track { fill: none; stroke: var(--border-soft); stroke-width: 6; }
.map-pin__ring { fill: none; stroke-width: 6; stroke: var(--plan-leased-line); }
/* Цвет кольца — тон статуса заполняемости (Metrics::Status::LEVEL_TONES,
   кандидат Р-674), слово статуса — второй строкой метки */
.map-pin--tone-success .map-pin__ring { stroke: var(--success); }
.map-pin--tone-warning .map-pin__ring { stroke: var(--warning); }
.map-pin--tone-danger .map-pin__ring { stroke: var(--danger); }
.map-pin--tone-neutral .map-pin__ring { stroke: var(--text-muted); }
.map-pin__value { font: 600 11px var(--font-mono); fill: var(--text); pointer-events: none; }
.map-pin__debt { fill: var(--danger); stroke: var(--surface); stroke-width: 2; }
/* Название и подпись — тоже часть метки: по ним кликают так же, как по кружку */
.map-pin__label, .map-pin__sub { paint-order: stroke; stroke: var(--surface); stroke-width: 3px; stroke-linejoin: round; }
.map-pin__label { font: 600 13px var(--font-sans); fill: var(--text); }
.map-pin__sub { font: 500 12px var(--font-mono); fill: var(--text-secondary); }
/* Иконка статуса перед словом (Д3б): контур тоном кольца, подложка — как у
   подписи, чтобы читалась поверх тайлов */
.map-pin__icon { fill: none; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; stroke: var(--text-muted); paint-order: stroke; }
.map-pin--tone-success .map-pin__icon { stroke: var(--success); }
.map-pin--tone-warning .map-pin__icon { stroke: var(--warning); }
.map-pin--tone-danger .map-pin__icon { stroke: var(--danger); }
/* Группа близких меток: стопка кружков и число зданий в углу */
.map-pin__stack { fill: var(--surface); stroke: var(--border-control); stroke-width: 1.5; }
.map-pin--group:hover .map-pin__stack, .map-pin--group:focus-visible .map-pin__stack, .map-pin--group.map-pin--selected .map-pin__stack { stroke: var(--accent); }
.map-pin__count { fill: var(--accent); stroke: var(--surface); stroke-width: 2; }
.map-pin__count-value { font: 700 11px var(--font-mono); fill: var(--surface); pointer-events: none; }
.map-card__list { border-top: 1px solid var(--border-soft); }

.map-side { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.map-card__grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-2-5) var(--space-3); margin: 0; padding: var(--space-3) var(--space-4); }
.map-card__grid div { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.map-card__grid dt { font-size: var(--font-size-hint); line-height: var(--line-height-hint); color: var(--text-muted); }
.map-card__grid dd { margin: 0; font-weight: 600; font-size: var(--font-size-mono-cell); }
.map-card__grid dd.map-card__rate { display: flex; flex-wrap: wrap; align-items: center; gap: 0 var(--space-1-5); }
.map-list { margin: 0; padding: 0; list-style: none; }
.map-list__row { border-top: 1px solid var(--border-soft); }
.map-list__row:first-child { border-top: 0; }
.map-list__row--selected { background: var(--accent-bg); }
.map-list__link { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px var(--space-3); padding: var(--space-2-5) var(--space-4); color: var(--text); text-decoration: none; }
.map-list__link:hover { background: var(--row-hover); text-decoration: none; }
.map-list__name { font-weight: 600; min-width: 0; }
.map-list__rate { display: inline-flex; align-items: center; justify-content: flex-end; gap: var(--space-1-5); font-weight: 600; text-align: right; white-space: nowrap; }
.map-list__address { font-size: var(--font-size-hint); line-height: var(--line-height-hint); color: var(--text-muted); min-width: 0; }
.map-list__debt { font-size: var(--font-size-hint); line-height: var(--line-height-hint); color: var(--text-muted); text-align: right; white-space: nowrap; }
.map-list__debt--on { color: var(--danger); }
.map-list__locate { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); padding: 0 var(--space-4) var(--space-2-5); }
.map-list__locate--quiet { padding-top: 0; }

@media (max-width: 1180px) {
  .map-layout { grid-template-columns: minmax(0, 1fr); }
  .map-box { height: 480px; }
}

@media (max-width: 768px) {
  .map-box { height: 380px; }
}

/* Приложение «План помещения» в карточке договора (ЗД-6) */
.lease-plan-appendix .lease-docs__status { display: flex; align-items: center; gap: var(--space-2); }
.lease-plan-appendix__body > :first-child { margin-top: 0; }
.lease-plan-appendix__form { margin-top: var(--space-2); }
.lease-plan-appendix__number .field__input { width: 8ch; }

/* План без данных CRM: кабинет арендатора и витрина (ЗД-6); обвязка кабинета — portal_floor_plans.css */
.plan-svg--schematic { background: var(--plan-common-fill); }
.plan-static polygon { stroke-width: 2px; }
.plan-static text { font-family: var(--font-sans); font-weight: 600; fill: var(--text); pointer-events: none; }
.plan-static--own polygon { fill: var(--plan-selected); fill-opacity: .32; stroke: var(--plan-selected); stroke-width: 3px; }
.plan-static--other polygon { fill: var(--surface); fill-opacity: .35; stroke: var(--plan-common-line); }
.plan-static--free polygon { fill: var(--plan-free-fill); stroke: var(--plan-free-line); }
.plan-static--taken polygon { fill: var(--plan-leased-fill); fill-opacity: .7; stroke: var(--plan-leased-line); }
