/**
 * home.css — картки Головної мовою дашборду ради з нової карти (map-v2).
 *
 * Та сама граматика, що в плитках старту ради й на панелі обмінів:
 *   .hm-k     мала іконка кольору картки + назва;
 *   .hm-v     одне велике число, поруч .hm-l — що воно значить і дрібно чому;
 *   картинка, що число пояснює — у кожної картки своя: кільце (Банк),
 *             стовпці (строки оренди), шкала (РРП), смуга часток (Зміни);
 *   .hm-leg   рядки-легенда: кружок зі знаком, назва з поясненням, число;
 *   .hm-next  «Далі: …» — один найважливіший крок.
 * Людина вчиться читати це один раз — на карті й тут однаково.
 *
 * Колір картки — одна змінна --accent (смужка зліва, іконка в назві);
 * кольори графіків — токени --chart-* (перевірені валідатором палітри в
 * обох темах).
 *
 * Розкладка (хто поруч із ким) — тут же, розділ «Розкладка Головної».
 * Підключати після dashboard.css: старі правила карток там ще з !important.
 */

/* ── Картка ──────────────────────────────────────────────────────────── */

body #user-dashboard-grid .dashboard-card {
  padding: 0 !important;
  background: var(--color-surface) !important;
  border: 1px solid var(--color-outline-subtle) !important;
  border-left: 3px solid var(--accent) !important;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-1) !important;
}
/* Старі кольорові смуги згори (::before з dashboard.css) — тепер смужка
   зліва, як у плиток старту ради */
body #user-dashboard-grid .dashboard-card::before { display: none !important; }
body #user-dashboard-grid .dashboard-card:hover {
  background: var(--color-surface-variant) !important;
  box-shadow: var(--shadow-2) !important;
  transform: none;
}
body #user-dashboard-grid .dashboard-card:focus-visible { outline: none; box-shadow: var(--focus-ring) !important; }
/* Великі картки — не кнопки-переходи, а зведення з власними кнопками:
   підсвітка всієї картки обіцяла б клік, якого немає */
body #user-dashboard-grid .dashboard-card:is([data-zone="land_bank"], [data-zone="dzk_changes"], [data-zone="todo"]):hover {
  background: var(--color-surface) !important;
  cursor: default;
}

/* Колір картки — як задачі на карті */
.dashboard-card[data-zone="ownership"]   { --accent: var(--color-map-mine); }
.dashboard-card[data-zone="land_bank"]   { --accent: var(--color-icon-bank); }
.dashboard-card[data-zone="rrp_dzk"]     { --accent: var(--color-tertiary); }
.dashboard-card[data-zone="resources"]   { --accent: var(--color-primary); }
.dashboard-card[data-zone="notes"]       { --accent: var(--color-notes); }
.dashboard-card[data-zone="companies"]   { --accent: var(--color-tertiary); }
.dashboard-card[data-zone="dzk_changes"] { --accent: var(--color-outline-subtle); }
.dashboard-card[data-zone="todo"]        { --accent: var(--color-error); }

.hm {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  min-width: 0;
}

/* ── Шапка: іконка + назва, праворуч — дія ─────────────────────────── */

.hm-top { display: flex; align-items: center; gap: var(--space-2); min-height: 28px; }
.hm-k {
  display: flex; align-items: center; gap: 6px;
  flex: 1; min-width: 0;
  font-size: var(--text-xs);
  font-weight: var(--font-semibold);
  color: var(--color-text-muted);
}
.hm-k .material-icons-round { font-size: 17px; color: var(--accent); }
.hm-go { font-size: 20px; color: var(--color-text-muted); transition: transform var(--duration-1) var(--ease-out); }
.dashboard-card:hover .hm-go { transform: translateX(2px); color: var(--color-text); }

/* Чип дати аналізу з кнопкою оновлення */
.hm-chip {
  display: inline-flex; align-items: center; gap: 4px;
  height: 26px; padding: 0 var(--space-2);
  border: 1px solid var(--color-outline-subtle);
  border-radius: var(--radius-full);
  background: transparent;
  color: var(--color-text-muted);
  font: inherit; font-size: var(--text-xs);
  cursor: pointer;
  white-space: nowrap;
}
.hm-chip .material-icons-round { font-size: 14px; }
.hm-chip:hover { color: var(--color-text); border-color: var(--color-outline); }
.hm-chip:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.hm-chip.updating .ds-refresh-icon { animation: hm-spin 1s linear infinite; }
@keyframes hm-spin { to { transform: rotate(360deg); } }

/* Перемикач «Субʼєкти / По роках» */
.hm-tabs { display: inline-flex; padding: 2px; border-radius: var(--radius-full); background: var(--color-surface-container); }
.hm-tab {
  height: 24px; padding: 0 var(--space-3);
  border: 0; border-radius: var(--radius-full);
  background: transparent; color: var(--color-text-muted);
  font: inherit; font-size: var(--text-xs); font-weight: var(--font-semibold);
  cursor: pointer;
}
.hm-tab.active { background: var(--color-surface); color: var(--color-text); box-shadow: var(--shadow-1); }
.hm-tab:focus-visible { outline: none; box-shadow: var(--focus-ring); }

/* ── Головне число ─────────────────────────────────────────────────── */

.hm-hero { display: flex; align-items: flex-end; gap: var(--space-3); flex-wrap: wrap; }
.hm-v {
  font-family: var(--font-display);
  font-size: 34px;
  font-weight: var(--font-bold);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--color-text);
  font-variant-numeric: tabular-nums;
}
.hm-v small { font-size: 17px; font-weight: var(--font-semibold); letter-spacing: 0; color: var(--color-text-secondary); }
.hm-l {
  display: grid;
  padding-bottom: 2px;
  font-size: var(--text-sm);
  font-weight: var(--font-semibold);
  line-height: 1.25;
  color: var(--color-text);
}
.hm-l small { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-text-muted); }

/* ── Легенда: кружок зі знаком, назва, число ───────────────────────── */

.hm-legs { display: grid; gap: var(--space-2); }
.hm-leg { display: grid; grid-template-columns: 24px 1fr auto; gap: var(--space-2); align-items: center; }
.hm-ic {
  display: grid; place-items: center;
  width: 24px; height: 24px;
  border-radius: 50%;
  color: var(--neutral-0);
}
.hm-ic .material-icons-round { font-size: 15px; font-weight: 700; }
.hm-ic.is-own  { background: var(--color-map-mine); }
.hm-ic.is-rent { background: var(--color-secondary); }
.hm-ic.is-risk { background: var(--chart-risk); }
.hm-ic.is-opp  { background: var(--chart-opp); }
/* Вільне на карті біле — кружок теж білий, тож знак темний і є контур */
.hm-ic.is-free { background: var(--neutral-0); color: var(--color-text); box-shadow: inset 0 0 0 1.5px var(--color-outline); }
.hm-leg-l { display: grid; min-width: 0; font-size: var(--text-sm); font-weight: var(--font-semibold); line-height: 1.25; }
.hm-leg-l small { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-text-muted); }
.hm-leg-v { display: grid; justify-items: end; line-height: 1.2; }
/* Числа — шрифтом заголовків, не моноширинним: перекреслений нуль
   JetBrains Mono на ноутбуці робив «0,9 га» схожим на «8,9 га».
   Моноширинний лишився для кодів — кадастрових номерів і ЄДРПОУ */
.hm-leg-v b { font: var(--font-semibold) var(--text-md) var(--font-display); font-variant-numeric: tabular-nums; }
.hm-leg-v em { font-style: normal; font-size: var(--text-xs); color: var(--color-text-muted); white-space: nowrap; }

/* ── Портфель: дві колонки зі списками ─────────────────────────────── */

.hm-cols { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-5); }
.hm-col { display: grid; gap: var(--space-2); align-content: start; min-width: 0; }
.hm-list { display: grid; gap: 2px; }
/* Рядок субʼєкта чи року: смуга під ним — частка від найбільшого */
.hm-row {
  display: flex; align-items: baseline; gap: var(--space-2);
  padding: 5px var(--space-2);
  border-radius: var(--radius-xs);
  font-size: var(--text-xs);
  background: linear-gradient(90deg, color-mix(in srgb, var(--row-c) 14%, transparent) var(--w), transparent var(--w));
}
.hm-row.is-own  { --row-c: var(--color-map-mine); }
.hm-row.is-rent { --row-c: var(--color-secondary); }
.hm-row-n { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hm-row b { font: var(--font-semibold) var(--text-xs) var(--font-display); font-variant-numeric: tabular-nums; }
.hm-row b small { font-family: var(--font-family); font-weight: var(--font-regular); color: var(--color-text-muted); }
.hm-empty { padding: 5px var(--space-2); font-size: var(--text-xs); color: var(--color-text-muted); }
.ow-panel.hidden { display: none; }

/* ── РРП: шкала збігу й підсумок ───────────────────────────────────── */

.hm-meter { height: 6px; border-radius: var(--radius-full); background: var(--color-surface-container); overflow: hidden; }
.hm-meter-fill { height: 100%; border-radius: inherit; background: var(--accent); transition: width var(--duration-3) var(--ease-out); }
.hm-foot { display: flex; gap: var(--space-4); font-size: var(--text-xs); color: var(--color-text-muted); }
.hm-foot b { font-family: var(--font-display); font-weight: var(--font-semibold); color: var(--color-text); font-variant-numeric: tabular-nums; }
.hm-foot-r { margin-left: auto; }

/* ── «Далі: …» ─────────────────────────────────────────────────────── */

/* Як на панелі обмінів: тонована смуга зі знаком, клік веде до кроку */
.hm-next { margin-top: auto; }
.hm-next[hidden] { display: none; }
.hm-next > :is(a, button) {
  display: flex; align-items: center; gap: var(--space-2);
  width: 100%;
  padding: var(--space-2) var(--space-3);
  border: 0;
  border-radius: var(--radius-sm);
  background: color-mix(in srgb, var(--color-secondary) 14%, var(--color-surface));
  color: var(--color-text);
  font: inherit; font-size: var(--text-xs); font-weight: var(--font-semibold);
  text-align: left; text-decoration: none;
  cursor: pointer;
}
.hm-next .material-icons-round { font-size: 17px; color: var(--color-secondary); }
.hm-next > :is(a, button):hover { background: color-mix(in srgb, var(--color-secondary) 22%, var(--color-surface)); }
.hm-next > :is(a, button):focus-visible { outline: none; box-shadow: var(--focus-ring); }

/* ── Статус картки ─────────────────────────────────────────────────── */

/* Лише те, що вимагає уваги: «гаразд» мовчить (updateCardStatus лишає
   його порожнім), помилка й «потрібен аналіз» — видно */
.dashboard-card .ds-badge:empty,
.dashboard-card .ds-badge.ds-badge-success { display: none !important; }
.dashboard-card .ds-badge { margin: 0 var(--space-5) var(--space-4); }
/* У Банку «потрібен аналіз» уже сказано порадою «Далі» з кнопкою запуску */
.dashboard-card[data-zone="land_bank"] .ds-badge-warning { display: none !important; }

/* ── Розкладка Головної ───────────────────────────────────────────── */

/* Зверху вниз — відповідь на «як справи?»: речення-висновок, числа, дві
   половини поруч (Портфель — що в мене є, Зміни — що сталося навколо),
   унизу ряд із трьох (Що зробити, Земельний банк, РРП vs ДЗК).
   Селектор довший за старі з dashboard-material3.css і dashboard.css —
   ті з !important і з 12 колонками на широкому екрані. */
body #user-dashboard-grid.dashboard-visible.home-board {
  display: flex !important;
  flex-direction: column;
  gap: var(--space-4);
  padding: 0;
  margin: 0;
}
/* Ліворуч колонка Портфеля — росте донизу разом зі списком власників.
   Праворуч сітка у дві колонки: Зміни на всю ширину, під ними пари карток */
.home-grid { display: grid; grid-template-columns: minmax(380px, 460px) minmax(0, 1fr); gap: var(--space-4); align-items: start; }
.home-left { display: flex; flex-direction: column; gap: var(--space-4); min-width: 0; }
/* Картки лівої колонки не стискаються й не прокручуються: колонка росте
   донизу разом зі списком власників */
/* height: 100% — з dashboard-material3.css: у стовпчику кожна картка
   ставала заввишки з усю колонку */
.home-left > .dashboard-card { flex: 0 0 auto; height: auto; }
.home-left .pf-list { overflow: visible; }
.home-right { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-4); min-width: 0; }
.home-right > .dashboard-card, .home-left > .dashboard-card { display: flex; flex-direction: column; }
/* dashboard.css ставить Портфелю, Змінам і Банку grid-column: 1 / -1 з
   !important — тут кожна картка займає свою клітинку */
body #user-dashboard-grid :is(.home-left, .home-right) > .dashboard-card[data-zone] { grid-column: auto !important; }
body #user-dashboard-grid .home-right > .dashboard-card:is([data-zone="dzk_changes"], [data-zone="rrp_dzk"]) { grid-column: 1 / -1 !important; }
/* Праворуч лишились самі Зміни — вони беруть висоту лівої колонки
   (Портфель + справи), а стрічка прокручується всередині. contain: size —
   щоб довга стрічка не розтягувала сторінку, а заповнювала готову висоту */
/* Зміни ростуть за змістом: п'ять подій і кнопка «ще», без прокрутки
   всередині картки — колись тут було вікно на дві події */

/* ── Земельний портфель — як головна картка застосунку ─────────────── */

/* Темно-зелене тло в обох темах: це «обкладинка» господарства, так само
   як у застосунку. Кольори — бренду: власність бурштином, оренда білим */
body #user-dashboard-grid .dashboard-card[data-zone="ownership"],
body #user-dashboard-grid .dashboard-card[data-zone="ownership"]:hover {
  --pf-ink: var(--neutral-0);
  --pf-mute: color-mix(in srgb, var(--neutral-0) 62%, transparent);
  --pf-line: color-mix(in srgb, var(--neutral-0) 14%, transparent);
  --pf-own: var(--brand-amber);
  background:
    radial-gradient(ellipse 60% 70% at 105% 45%, color-mix(in srgb, var(--neutral-0) 6%, transparent), transparent 70%),
    linear-gradient(140deg, var(--brand-green-700), var(--brand-green-800)) !important;
  border: 0 !important;
  color: var(--pf-ink);
  box-shadow: var(--shadow-2) !important;
}
.pf { display: flex; flex-direction: column; gap: var(--space-4); flex: 1; min-height: 0; padding: var(--space-5) var(--space-6); }
.pf-top { display: flex; align-items: center; gap: var(--space-3); }
.pf-brand { color: var(--pf-ink); font-size: 15px; }
.pf-brand .pin-hole { fill: var(--brand-green-700); }
.pf-k { margin-left: auto; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--pf-mute); }

.pf-hero { display: grid; gap: 2px; }
.pf-label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--pf-mute); }
.pf-area {
  display: flex; align-items: baseline; gap: var(--space-2);
  font-family: var(--font-display); font-size: 48px; font-weight: var(--font-bold);
  line-height: 1.05; letter-spacing: -0.02em; font-variant-numeric: tabular-nums;
}
.pf-area small { font-size: 22px; font-weight: var(--font-semibold); color: var(--pf-mute); letter-spacing: 0; }
.pf-sub { font-size: var(--text-sm); color: var(--pf-mute); }

.pf-bar { display: flex; gap: 3px; height: 8px; border-radius: var(--radius-full); overflow: hidden; background: var(--pf-line); }
.pf-bar i { display: block; height: 100%; transition: width var(--duration-3) var(--ease-out); }
.pf-bar .is-own  { background: var(--pf-own); }
.pf-bar .is-rent { background: var(--pf-ink); }

.pf-split { display: grid; grid-template-columns: 1fr 1fr; }
.pf-col { display: grid; gap: 4px; padding-right: var(--space-4); }
.pf-col + .pf-col { padding: 0 0 0 var(--space-5); border-left: 1px solid var(--pf-line); }
.pf-col-k { display: flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--pf-mute); }
.pf-dot { width: 8px; height: 8px; border-radius: 50%; }
.pf-dot.is-own  { background: var(--pf-own); }
.pf-dot.is-rent { background: var(--pf-ink); }
.pf-col-v { display: flex; align-items: baseline; gap: 5px; font-family: var(--font-display); font-size: 26px; font-weight: var(--font-bold); line-height: 1.1; font-variant-numeric: tabular-nums; }
.pf-col-v small { font-size: var(--text-sm); color: var(--pf-mute); font-weight: var(--font-semibold); }
.pf-col-v.is-own { color: var(--pf-own); }

/* Банк — рамка над Користуванням: скільки землі всього і скільки працює */
.pf-bank { display: grid; gap: 6px; padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); background: color-mix(in srgb, var(--neutral-0) 7%, transparent); }
.pf-bank-row { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-3); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--pf-mute); }
.pf-bank-row b { font-family: var(--font-display); font-size: var(--text-lg); color: var(--pf-ink); font-variant-numeric: tabular-nums; }
.pf-bank-row.is-small { font-weight: var(--font-medium); }
.pf-gauge { display: flex; gap: 2px; height: 6px; border-radius: var(--radius-full); overflow: hidden; background: var(--pf-line); }
.pf-gauge i { display: block; height: 100%; transition: width var(--duration-3) var(--ease-out); }
.pf-gauge .is-use { background: var(--brand-green-glow); }
.pf-gauge .is-off { background: color-mix(in srgb, var(--neutral-0) 30%, transparent); }

/* Розбивка під колонками власності й оренди */
.pf-sublist { display: grid; gap: 2px; margin-top: 4px; }
.pf-sublist:empty { display: none; }
.pf-subrow { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-2); font-size: var(--text-xs); color: var(--pf-mute); }
.pf-subrow > span small { margin-left: 6px; opacity: .8; }
.pf-subrow b { font-family: var(--font-display); font-weight: var(--font-semibold); color: var(--pf-ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pf-subrow b small { color: var(--pf-mute); font-weight: var(--font-medium); }

/* Поза використанням — наша земля в чужих руках */
.pf-off { display: grid; gap: 4px; padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); border: 1px dashed color-mix(in srgb, var(--neutral-0) 26%, transparent); }
.pf-off[hidden] { display: none; }
.pf-off-k { display: flex; align-items: center; gap: 6px; font-size: var(--text-sm); font-weight: var(--font-semibold); }
.pf-off-k .material-icons-round { font-size: 16px; color: var(--pf-mute); }
.pf-off-k b { margin-left: auto; font-family: var(--font-display); font-variant-numeric: tabular-nums; }

/* Обробіток: засіяне проти орендованого */
.pf-cult { display: flex; align-items: center; gap: var(--space-2); font-size: var(--text-sm); color: var(--pf-mute); }
.pf-cult[hidden] { display: none; }
.pf-cult .material-icons-round { font-size: 18px; color: var(--brand-green-glow); }
.pf-cult b { color: var(--pf-ink); font-variant-numeric: tabular-nums; }
.pf-cult .pf-pct { margin-left: auto; }
.pf-pct { font-weight: var(--font-bold); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pf-pct.is-good { color: var(--brand-green-glow); }
.pf-pct.is-mid  { color: var(--brand-green-200); }
.pf-pct.is-low  { color: var(--pf-own); }
.pf-chip { display: inline-block; margin-right: 6px; padding: 0 6px; border-radius: var(--radius-full); font-style: normal; font-size: 11px; background: color-mix(in srgb, var(--neutral-0) 14%, transparent); color: var(--pf-ink); }
.pf-chip.is-warn { background: color-mix(in srgb, var(--brand-amber) 30%, transparent); }

/* «Суб'єкти» — те, що в застосунку на екрані «Земельний банк» */
.pf-holders { display: flex; flex-direction: column; gap: var(--space-2); flex: 1; min-height: 0; padding-top: var(--space-4); border-top: 1px solid var(--pf-line); }
.pf-holders-k { font-size: var(--text-xs); font-weight: var(--font-bold); letter-spacing: .06em; text-transform: uppercase; color: var(--pf-mute); }
.pf-list { display: grid; align-content: start; overflow-y: auto; scrollbar-width: thin; }
.pf-h { display: grid; gap: 3px; padding: var(--space-2) 0; }
.pf-h + .pf-h { border-top: 1px solid var(--pf-line); }
.pf-h-n { display: flex; align-items: center; gap: 6px; min-width: 0; font-size: var(--text-sm); font-weight: var(--font-semibold); }
.pf-h-n .material-icons-round { font-size: 15px; color: var(--pf-mute); }
.pf-h-n > span:nth-child(2) { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-h-t { font-family: var(--font-display); font-size: var(--text-sm); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pf-h-e { padding-left: 21px; font-family: var(--font-mono); font-size: 11px; color: var(--pf-mute); }
.pf-h-l { display: flex; justify-content: space-between; gap: var(--space-3); padding-left: 21px; font-size: var(--text-xs); color: var(--pf-mute); }
.pf-h-l b { font-family: var(--font-display); font-weight: var(--font-semibold); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pf-h-l b.is-rent { color: var(--pf-ink); }
.pf-h-l b.is-own  { color: var(--pf-own); }
.pf-h-l b.is-cult { color: var(--pf-ink); }
.pf-more {
  display: inline-flex; justify-self: start; margin-top: var(--space-1);
  padding: 0; border: 0; background: none;
  color: var(--pf-ink); font: inherit; font-size: var(--text-xs); font-weight: var(--font-semibold);
  text-decoration: underline; text-underline-offset: 3px; cursor: pointer;
}
.pf-empty { font-size: var(--text-sm); color: var(--pf-mute); }

/* ── «Як справи» ─────────────────────────────────────────────────────── */

.home-status {
  display: flex; align-items: center; gap: var(--space-2);
  min-height: 40px;
  padding: 6px var(--space-4) 6px var(--space-3);
  /* 20 px, а не «пігулка»: з причинами текст переноситься на другий рядок */
  border-radius: 20px;
  background: color-mix(in srgb, var(--st-c) 10%, var(--color-surface));
  border: 1px solid color-mix(in srgb, var(--st-c) 30%, transparent);
}
.home-status.is-ok   { --st-c: var(--color-primary); }
.home-status.is-warn { --st-c: var(--color-progress-warning); }
.home-status.is-bad  { --st-c: var(--color-error); }
.home-status.is-wait { --st-c: var(--color-text-muted); }
/* У шапці — пігулка, як свіжість даних поруч: один рядок, без смуги */
.home-head .home-status { align-self: center; max-width: min(640px, 100%); }
.home-status-ic { font-size: 20px; color: var(--st-c); }
.home-status-txt { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--space-3); min-width: 0; }
.home-status-txt b { font-family: var(--font-display); font-size: var(--text-sm); font-weight: var(--font-bold); color: var(--color-text); white-space: nowrap; }
#home-status-d { display: flex; flex-wrap: wrap; gap: 2px var(--space-3); font-size: var(--text-xs); color: var(--color-text-secondary); }
#home-status-d:empty { display: none; }
#home-status-d a { color: var(--color-text); text-decoration: none; border-bottom: 1px dashed color-mix(in srgb, var(--st-c) 60%, transparent); }
#home-status-d a:hover { color: var(--st-c); }
/* Причини через крапку — як речення, а не як список */
#home-status-d > * + *::before { content: '·'; margin-right: var(--space-3); color: var(--color-text-muted); }

/* grid-column з dashboard.css у стовпчику нічого не значить, а висота й
   відступи старих карток — значать */
.home-board .dashboard-card { width: 100%; min-height: 0 !important; margin: 0 !important; }

/* ── Шапка: привітання, пошук, свіжість ─────────────────────────────── */

.home-head { align-items: center; }
/* Привітання ліворуч, справа — висновок і свіжість одним рядком */
.home-head .home-fresh { align-self: center; }
.home-head .page-subtitle { margin-top: 2px; }
/* Привітання не ламаємо — вужчий екран переносить пошук під нього */
.home-head .page-title { white-space: nowrap; }

.home-find {
  position: relative;
  display: flex; align-items: center; gap: var(--space-2);
  width: min(340px, 100%);
  height: 40px;
  padding: 0 var(--space-3);
  border: 1px solid var(--color-outline-subtle);
  border-radius: var(--radius-full);
  background: var(--color-surface);
  box-shadow: var(--shadow-1);
}
.home-find:focus-within { border-color: var(--color-primary); box-shadow: var(--focus-ring); }
.home-find.is-bad { border-color: var(--color-error); }
.home-find > .material-icons-round { font-size: 19px; color: var(--color-text-muted); }
.home-find input {
  flex: 1; min-width: 0;
  border: 0; outline: 0; background: transparent;
  color: var(--color-text);
  font: inherit; font-size: var(--text-sm);
  font-variant-numeric: tabular-nums;
}
.home-find input::placeholder { color: var(--color-text-muted); }
/* Підказка про формат — під полем, не зсуваючи шапку */
.home-find-err {
  position: absolute; top: calc(100% + 4px); left: var(--space-4);
  font-size: var(--text-xs); color: var(--color-error);
  white-space: nowrap; pointer-events: none;
}

/* Колір позначки — за віком даних (--fresh ставить loadFreshness) */
.home-fresh {
  display: inline-flex; align-items: center; gap: 6px;
  height: 40px; padding: 0 var(--space-3);
  border-radius: var(--radius-full);
  background: color-mix(in srgb, var(--fresh, var(--color-primary)) 12%, var(--color-surface));
  color: var(--color-text);
  font-size: var(--text-xs); font-weight: var(--font-semibold);
  text-decoration: none; white-space: nowrap;
}
.home-fresh[hidden] { display: none; }
.home-fresh .material-icons-round { font-size: 17px; color: var(--fresh, var(--color-primary)); }
.home-fresh-n { padding-left: 6px; border-left: 1px solid var(--color-outline-subtle); color: var(--color-text-muted); font-weight: var(--font-medium); }
.home-fresh:hover { background: color-mix(in srgb, var(--fresh, var(--color-primary)) 20%, var(--color-surface)); color: var(--color-text); }
.home-fresh:focus-visible { outline: none; box-shadow: var(--focus-ring); }

/* ── «Що зробити» ───────────────────────────────────────────────────── */

.todo-lead { margin: calc(-1 * var(--space-2)) 0 0; font-size: var(--text-xs); color: var(--color-text-muted); }
.todo-list { display: grid; gap: var(--space-1); }
.todo-row {
  display: grid; grid-template-columns: 30px 1fr auto; align-items: center; gap: var(--space-3);
  padding: var(--space-2);
  margin: 0 calc(-1 * var(--space-2));
  border-radius: var(--radius-sm);
  color: var(--color-text); text-decoration: none;
}
.todo-row:hover { background: var(--color-surface-variant); color: var(--color-text); }
.todo-row:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.todo-row.is-error   { --todo-c: var(--color-error); }
.todo-row.is-warning { --todo-c: var(--color-progress-warning); }
.todo-row.is-primary { --todo-c: var(--color-primary); }
.todo-ic {
  display: grid; place-items: center;
  width: 30px; height: 30px;
  border-radius: var(--radius-sm);
  background: color-mix(in srgb, var(--todo-c) 14%, transparent);
  color: var(--todo-c);
}
.todo-ic .material-icons-round { font-size: 17px; }
.todo-txt { display: grid; font-size: var(--text-sm); font-weight: var(--font-semibold); line-height: 1.3; }
.todo-txt small { font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-text-muted); }
.todo-go { font-size: 18px; color: var(--color-text-muted); }

.todo-ok {
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-2) 0;
  font-size: var(--text-sm); font-weight: var(--font-semibold);
}
.todo-ok > .material-icons-round { font-size: 26px; color: var(--color-primary); }
.todo-ok small { display: block; font-size: var(--text-xs); font-weight: var(--font-regular); color: var(--color-text-muted); }

.todo-tasks { display: grid; gap: 2px; padding-top: var(--space-3); border-top: 1px solid var(--color-outline-subtle); }
.todo-tasks[hidden] { display: none; }
.todo-sub { margin-bottom: var(--space-1); font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-text-muted); }
.todo-task {
  display: flex; align-items: center; gap: var(--space-2);
  padding: 5px var(--space-2); margin: 0 calc(-1 * var(--space-2));
  border-radius: var(--radius-xs);
  color: var(--color-text); text-decoration: none;
  font-size: var(--text-sm);
}
.todo-task:hover { background: var(--color-surface-variant); color: var(--color-text); }
.todo-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; background: var(--color-outline); }
.todo-dot.is-error { background: var(--color-error); }
.todo-task-t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.todo-task-d { font-size: var(--text-xs); color: var(--color-text-muted); white-space: nowrap; }
.todo-task-d.is-late { color: var(--color-error); font-weight: var(--font-semibold); }

/* ── Що змінилось у кадастрі ───────────────────────────────────────── */

/* Відповідь на «що сталось» мовою фермера: речення, чотири плитки за
   змістом (стосується вас / звільнилось / сусіди взяли / змінився
   орендар), події звичайними реченнями. Без внутрішньої прокрутки:
   п'ять подій, решта — за кнопкою */
.cg { gap: var(--space-4); }
.cg-top { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-1) var(--space-3); }
.cg-title { font-family: var(--font-display); font-size: var(--text-lg); font-weight: var(--font-bold); color: var(--color-text); }
.cg-when { flex: 1; min-width: 0; font-size: var(--text-xs); color: var(--color-text-muted); }
.cg-stale { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); background: var(--brand-amber-tint); color: var(--brand-amber-deep); font-size: var(--text-sm); font-weight: var(--font-semibold); }
.cg-stale[hidden] { display: none; }
.cg-stale .material-icons-round { font-size: 18px; }
.cg-lead { margin: 0; font-size: var(--text-lg); line-height: 1.45; color: var(--color-text-secondary); }
.cg-lead b { color: var(--color-text); font-weight: var(--font-bold); }
.cg-lead .is-warn { color: var(--brand-amber-deep); }

.cg-tiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-2); }
.cg-tile { display: grid; align-content: start; gap: 2px; padding: var(--space-3); border: 1px solid var(--color-outline-subtle); border-radius: var(--radius-md); background: var(--color-surface); color: var(--color-text); font: inherit; text-align: left; cursor: pointer; }
.cg-tile:hover { border-color: var(--color-outline); }
.cg-tile:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.cg-tile.is-on { border-color: var(--k); box-shadow: inset 0 0 0 1px var(--k); background: color-mix(in srgb, var(--k) 6%, var(--color-surface)); }
.cg-tile.is-zero { cursor: default; background: transparent; }
.cg-tile.is-zero:hover { border-color: var(--color-outline-subtle); }
.cg-tile-k { display: flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-text-secondary); }
.cg-tile-k .material-icons-round { font-size: 16px; color: var(--k); }
.cg-tile-v { font-family: var(--font-display); font-size: 22px; font-weight: var(--font-bold); line-height: 1.2; font-variant-numeric: tabular-nums; }
.cg-tile-v small { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text-muted); }
.cg-tile.is-zero .cg-tile-v { padding: 4px 0; font-size: var(--text-sm); color: var(--color-text-muted); }
.cg-tile-v .is-ok { color: var(--color-primary-text, var(--color-primary)); }
.cg-tile-s { font-size: var(--text-xs); color: var(--color-text-muted); }

.cg-feed { display: grid; }
.cg-feed:empty { display: none; }
.cg-row + .cg-row { border-top: 1px solid var(--color-outline-subtle); }
.cg-row-btn {
  display: grid; grid-template-columns: 8px 28px minmax(0, 1fr) auto 18px; align-items: center; gap: var(--space-3);
  width: 100%; padding: 10px 0; border: 0; background: none;
  color: var(--color-text); font: inherit; text-align: left; cursor: pointer;
}
.cg-row-btn:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--radius-xs); }
.cg-new { width: 8px; height: 8px; border-radius: 50%; background: var(--color-primary); }
.cg-row.is-read .cg-new { background: transparent; }
.cg-ic { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: color-mix(in srgb, var(--k) 14%, transparent); color: var(--k); }
.cg-ic .material-icons-round { font-size: 16px; }
.cg-say { min-width: 0; font-size: var(--text-sm); line-height: 1.35; color: var(--color-text-secondary); }
.cg-say b { font-weight: var(--font-bold); color: var(--color-text); }
.cg-say .is-loss { font-weight: var(--font-bold); color: var(--color-error); }
.cg-say small { display: block; font-size: var(--text-xs); color: var(--color-text-muted); }
.cg-ha { font-family: var(--font-display); font-size: var(--text-md, 15px); font-weight: var(--font-bold); font-variant-numeric: tabular-nums; white-space: nowrap; }
.cg-ha small { font-size: var(--text-xs); color: var(--color-text-muted); font-weight: var(--font-semibold); }
.cg-chev { font-size: 18px; color: var(--color-text-muted); }
.cg-cads { display: flex; flex-wrap: wrap; gap: 4px; padding: 0 0 var(--space-3) calc(8px + 28px + 2 * var(--space-3)); }
.chg-cad {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 1px 6px;
  border-radius: var(--radius-xs);
  background: var(--color-surface-container);
  color: var(--color-text-secondary);
  font: var(--font-medium) 11px var(--font-mono);
  text-decoration: none;
}
.chg-cad .material-icons-round { font-size: 12px; color: var(--color-primary); }
.chg-cad:hover { background: var(--color-primary-50); color: var(--color-primary-900); }
.chg-more {
  justify-self: start;
  border: 0; background: none; padding: var(--space-1) 0;
  color: var(--color-primary); font: inherit; font-size: var(--text-sm); font-weight: var(--font-semibold);
  cursor: pointer;
}
.chg-more:hover { text-decoration: underline; }

/* ── Інфографіка ───────────────────────────────────────────────────── */

/* Земельний банк: кільце ліворуч, легенда праворуч */
/* Кільце над легендою: у половині правої частини поруч їм тісно */
.bk-viz { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-4); justify-items: center; }
.bk-viz .hm-legs { justify-self: stretch; }
.bk-donut { position: relative; width: 132px; height: 132px; }
.bk-donut svg { display: block; }
.bk-center { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; }
.bk-center b { font-family: var(--font-display); font-size: 26px; font-weight: var(--font-bold); line-height: 1; font-variant-numeric: tabular-nums; }
.bk-center small { font-size: var(--text-xs); color: var(--color-text-muted); }
.bk-sub { font-size: var(--text-xs); color: var(--color-text-muted); }

/* Строки оренди: легенда над стовпцями */
.cl-legend { display: flex; flex-wrap: wrap; gap: 4px var(--space-4); font-size: var(--text-xs); color: var(--color-text-secondary); }
.cl-legend span { display: inline-flex; align-items: center; gap: 6px; }
.cl-legend i { width: 10px; height: 10px; border-radius: 3px; }
.cl-chart { margin-top: auto; }
.cl-svg { display: block; width: 100%; height: auto; overflow: visible; }
.cl-axis { stroke: var(--color-outline); stroke-width: 1; }
.cl-x { font: var(--font-medium) 11px var(--font-family); fill: var(--color-text-muted); }
.cl-peak { font: var(--font-semibold) 11px var(--font-display); fill: var(--color-text); }
.cl-svg path:hover { opacity: .8; }

/* РРП: шкала ліворуч, три факти праворуч */
.rr-viz { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--space-5); align-items: center; }
.rr-gauge { position: relative; width: 150px; }
.rr-gauge svg { display: block; }
.rr-center { position: absolute; left: 0; right: 0; bottom: 2px; display: grid; justify-items: center; }
.rr-center b { font-family: var(--font-display); font-size: 26px; font-weight: var(--font-bold); line-height: 1; }
.rr-center small { font-size: 11px; color: var(--color-text-muted); }
.rr-facts { display: grid; gap: var(--space-2); }
.rr-fact { display: grid; grid-template-columns: auto 1fr; align-items: baseline; gap: var(--space-2); font-size: var(--text-sm); }
.rr-fact b { font-family: var(--font-display); font-weight: var(--font-semibold); font-variant-numeric: tabular-nums; }
.rr-fact span { display: grid; color: var(--color-text-secondary); }
.rr-fact small { font-size: var(--text-xs); color: var(--color-text-muted); }

.dashboard-card[data-zone="lease"] { --accent: var(--chart-risk); }
body #user-dashboard-grid .dashboard-card[data-zone="lease"]:hover { background: var(--color-surface) !important; cursor: default; }

/* Вужче за 1180 px колонка Портфеля забирає забагато — Портфель угорі на
   всю ширину, картки під ним */
@media (max-width: 1180px) {
  .home-grid { grid-template-columns: minmax(0, 1fr); }
}
/* …а Портфель і «Що зробити» — поруч, щоб не тягнулись на всю ширину */
@media (max-width: 1180px) and (min-width: 769px) {
  .home-left { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; }
}

/* ── Телефон ───────────────────────────────────────────────────────── */

@media (max-width: 768px) {
  .home-right { grid-template-columns: minmax(0, 1fr); }
  .rr-viz { grid-template-columns: minmax(0, 1fr); justify-items: center; }
  .home-find { width: 100%; }
  .hm { padding: var(--space-3) var(--space-4); gap: var(--space-2); }
  .hm-v { font-size: 28px; }
  .hm-cols { grid-template-columns: 1fr; gap: var(--space-3); }
  .cg-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (prefers-reduced-motion: reduce) {
  .hm-chip.updating .ds-refresh-icon { animation: none; }
}

/* Суб'єкти портфеля — компактна таблиця; більше ~8 рядків — прокрутка всередині */
.pf-t-wrap { max-height: 280px; overflow: auto; margin-top: var(--space-1); }
.pf-t { width: 100%; border-collapse: collapse; font-size: var(--text-xs); font-variant-numeric: tabular-nums; }
.pf-t thead th { position: sticky; top: 0; z-index: 1; background: var(--brand-green-800); padding: 4px 6px; text-align: right; font-weight: var(--font-semibold); color: var(--pf-mute); border-bottom: 1px solid var(--pf-line); white-space: nowrap; }
.pf-t thead th:first-child { text-align: left; padding-left: 0; }
/* Фіксована розкладка: числові стовпці — сталої ширини, назва забирає
   решту й обрізається трикрапкою, а не розпирає таблицю */
.pf-t { table-layout: fixed; }
.pf-t thead th:nth-child(2), .pf-t thead th:nth-child(3) { width: 64px; }
.pf-t thead th:nth-child(4) { width: 74px; }
.pf-t tbody th { overflow: hidden; padding: 5px 6px 5px 0; text-align: left; font-weight: var(--font-semibold); font-size: var(--text-sm); }
.pf-t-c { display: flex; align-items: center; gap: 5px; min-width: 0; }
.pf-t tbody th .material-icons-round { flex: none; font-size: 14px; color: var(--pf-mute); }
.pf-t-n { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-t td { padding: 5px 6px; text-align: right; white-space: nowrap; font-family: var(--font-display); }
.pf-t tbody tr + tr > * { border-top: 1px solid var(--pf-line); }
.pf-t td.is-own { color: var(--pf-own); }
.pf-t td.is-none { color: var(--pf-mute); }
.pf-t td.pf-t-sum { font-weight: var(--font-semibold); color: var(--pf-ink); padding-right: 0; }

/* Стан Вашої оренди за знімками (pf-state): рядок у портфелі, під ним
   ради, де найбільше заростає, і «Порахувати решту» */
.pf-state { display: grid; grid-template-columns: auto 1fr; gap: 4px var(--space-2); font-size: var(--text-sm); color: var(--pf-mute); }
.pf-state[hidden] { display: none; }
.pf-state > .material-icons-round { font-size: 18px; color: var(--brand-amber); }
.pf-state b { color: var(--pf-ink); font-variant-numeric: tabular-nums; }
.pf-state small { display: block; font-size: var(--text-xs); color: var(--pf-mute); }
.pf-state-top { grid-column: 2; display: grid; gap: 2px; }
.pf-state-top a { display: flex; justify-content: space-between; gap: var(--space-3); color: var(--pf-mute); text-decoration: none; font-size: var(--text-xs); }
.pf-state-top a:hover { color: var(--pf-ink); }
.pf-state-top a span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-state-top b small { display: inline; }
.pf-state-go { grid-column: 2; justify-self: start; color: var(--brand-green-glow); font-weight: var(--font-semibold); font-size: var(--text-xs); text-decoration: none; }
.pf-state-go:hover { text-decoration: underline; }

/* Рахує карта в сусідній вкладці: супутник кружляє довкола значка */
.pf-state-run { grid-column: 2; display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-xs); color: var(--pf-ink); }
.pf-sat { position: relative; display: inline-flex; width: 18px; height: 18px; }
.pf-sat .material-icons-round { font-size: 16px; color: var(--brand-green-glow); animation: pf-sat-orbit 2.4s linear infinite; }
.pf-sat::after { content: ''; position: absolute; inset: -3px; border-radius: 50%; border: 1.5px dashed color-mix(in srgb, var(--neutral-0) 35%, transparent); animation: pf-sat-spin 6s linear infinite; }
@keyframes pf-sat-orbit { 0% { transform: rotate(-12deg) translateY(0); } 50% { transform: rotate(12deg) translateY(-2px); } 100% { transform: rotate(-12deg) translateY(0); } }
@keyframes pf-sat-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .pf-sat .material-icons-round, .pf-sat::after { animation: none; } }

/* Стан Вашої оренди за знімками — окремий блок (home-state): смуга з
   іконками, як «Стан землі» на карті, легенда й ради таблицею */
.ls-run { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-xs); color: var(--color-text-secondary); }
.ls-run .pf-sat .material-icons-round { color: var(--color-primary); }
.ls-run .pf-sat::after { border-color: var(--color-outline); }
.ls-lead { margin: 0; font-size: var(--text-sm); color: var(--color-text-secondary); }
.ls-hero { display: flex; align-items: baseline; gap: var(--space-3); margin-bottom: var(--space-2); }
.ls-hero > b { font: var(--font-bold) 28px/1 var(--font-display); font-variant-numeric: tabular-nums; color: var(--color-text); white-space: nowrap; }
.ls-hero > b small { font-size: 14px; font-weight: var(--font-medium); color: var(--color-text-muted); }
.ls-hero > span { font-size: var(--text-sm); color: var(--color-text-secondary); }
.ls-hero small { display: block; font-size: var(--text-xs); color: var(--color-text-muted); }
.ls-bar { position: relative; display: flex; gap: 3px; height: 34px; margin: 4px 0 6px; }
/* Прохід супутника по смузі, поки карта рахує: світла смуга з супутником іде зліва направо */
.ls-scan { position: absolute; top: -6px; bottom: -6px; left: 0; width: 40px; pointer-events: none;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--neutral-0) 55%, transparent), transparent);
  animation: ls-scan 2.6s ease-in-out infinite; }
.ls-scan .material-icons-round { position: absolute; top: -14px; left: 50%; transform: translateX(-50%); font-size: 18px; color: var(--color-primary); }
@keyframes ls-scan { from { left: -40px; } to { left: 100%; } }
.ls-now th { color: var(--color-text); }
.ls-now td { position: relative; overflow: hidden; }
.ls-now-t { color: var(--color-text-muted); font-size: var(--text-xs); }
.ls-now td::after { content: ; position: absolute; inset: 0; width: 30%;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--color-primary) 18%, transparent), transparent);
  animation: ls-row 1.8s linear infinite; }
@keyframes ls-row { from { transform: translateX(-100%); } to { transform: translateX(400%); } }
@media (prefers-reduced-motion: reduce) { .ls-scan, .ls-now td::after { animation: none; display: none; } }
.ls-sg { min-width: 6px; display: flex; align-items: center; justify-content: center; gap: 4px; border-radius: 6px; background: var(--c); color: #fff;
  font: var(--font-bold) 12px/1 var(--font-family); overflow: hidden; animation: ls-in .45s ease-out both; animation-delay: calc(var(--i) * 90ms); }
.ls-sg:first-child { border-radius: 10px 6px 6px 10px; }
.ls-sg:last-child { border-radius: 6px 10px 10px 6px; }
.ls-sg:only-child { border-radius: 10px; }
.ls-sg[data-k="grass"], .ls-sg[data-k="none"] { color: var(--neutral-900); }
.ls-sg .material-icons-round { font-size: 17px; }
@keyframes ls-in { from { opacity: 0; transform: scaleX(.6); transform-origin: left; } }
@media (prefers-reduced-motion: reduce) { .ls-sg { animation: none; } }
.ls-legs { display: flex; flex-wrap: wrap; gap: 4px 16px; margin-bottom: var(--space-3); font-size: var(--text-xs); color: var(--color-text-secondary); }
.ls-leg { display: inline-flex; align-items: center; gap: 5px; }
.ls-leg i { width: 9px; height: 9px; border-radius: 2px; }
.ls-leg b { font-family: var(--font-mono); font-weight: var(--font-semibold); color: var(--color-text); }
.ls-leg b small { font-family: var(--font-family); font-weight: var(--font-medium); color: var(--color-text-muted); }
.ls-t-wrap { max-height: 320px; overflow: auto; }
.ls-t { width: 100%; border-collapse: collapse; font-size: var(--text-sm); font-variant-numeric: tabular-nums; }
.ls-t thead th { position: sticky; top: 0; background: var(--color-surface); padding: 4px 8px; text-align: right; font-size: var(--text-xs); font-weight: var(--font-semibold); color: var(--color-text-muted); border-bottom: 1px solid var(--color-outline-subtle); white-space: nowrap; }
.ls-t thead th:first-child { text-align: left; padding-left: 0; }
.ls-t tbody th { padding: 5px 8px 5px 0; text-align: left; font-weight: var(--font-semibold); }
.ls-t tbody th a { color: var(--color-text); text-decoration: none; }
.ls-t tbody th a:hover { text-decoration: underline; }
.ls-t td { padding: 5px 8px; text-align: right; white-space: nowrap; }
.ls-t tbody tr + tr > * { border-top: 1px solid var(--color-outline-subtle); }
.ls-t td.is-wood { color: #1F6B45; }
.ls-t td.is-grass { color: color-mix(in srgb, #8FC45A 70%, var(--color-text)); }
.ls-t td.ls-off { font-weight: var(--font-semibold); }
.ls-go { display: inline-flex; align-items: center; gap: 4px; margin-top: var(--space-2); color: var(--color-primary-text); font-weight: var(--font-semibold); font-size: var(--text-sm); text-decoration: none; }
.ls-go:hover { text-decoration: underline; }
.ls-go .material-icons-round { font-size: 18px; }
body #user-dashboard-grid .home-right > .dashboard-card[data-zone="land_state"] { grid-column: 1 / -1 !important; }

/* ── Розкладка Головної (2026-10-28): справи смужкою зверху, портфель |
   зміни, стан оренди на всю ширину ─────────────────────────────────── */
.home-top { margin-bottom: var(--space-4); }
.home-top:has(> .home-todo[hidden]) { display: none; }
.home-top .todo-lead { display: none; }
/* Справи зверху — одним рядком, а не карткою на 170 px: назва, плашки
   справ і найближчі задачі поруч; не влізли — переносяться (Степан) */
.home-top .home-todo { min-height: 0; }
.home-top .home-todo .hm { flex-direction: row; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-4); padding: var(--space-2) var(--space-4); }
.home-top .home-todo .hm-top { min-height: 0; flex: none; }
.home-top .todo-list { display: flex; flex-wrap: wrap; gap: var(--space-2); flex: 0 1 auto; }
.home-top .todo-row { grid-template-columns: 22px auto auto; gap: var(--space-2); margin: 0; padding: 3px var(--space-3) 3px 4px;
  border: 1px solid var(--color-outline-subtle); border-radius: var(--radius-full); }
.home-top .todo-ic { width: 22px; height: 22px; border-radius: 50%; }
.home-top .todo-ic .material-icons-round { font-size: 14px; }
.home-top .todo-txt small { display: none; }
.home-top .todo-go { font-size: 16px; }
.home-top .todo-tasks { display: flex; flex-wrap: wrap; gap: 2px var(--space-3); align-items: center; flex: 1 1 260px; min-width: 0;
  padding: 0 0 0 var(--space-4); border-top: 0; border-left: 1px solid var(--color-outline-subtle); }
.home-top .todo-tasks[hidden] { display: none; }
.home-top .todo-sub { margin: 0; }
.home-top .todo-task { flex: 0 1 auto; min-width: 0; margin: 0; padding: 2px var(--space-2); }
.home-wide { margin-top: var(--space-4); }
.home-wide > .dashboard-card { display: flex; flex-direction: column; }
/* Стан оренди: зліва число, смуга й виноски; справа таблиця рад */
/* Смуга й таблиця — поруч лише коли широкий сам БЛОК, а не екран: на
   середньому екрані блок уже вузький, і таблиця поруч зі смугою вилазила за
   край (Степан, 2026-10-28). Тож container query по #ls-body */
#ls-body { container-type: inline-size; container-name: ls; }
.ls-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-3); align-items: start; }
@container ls (min-width: 760px) {
  .ls-grid { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: var(--space-5); }
}
/* Таблиця — у ширину блоку: назва ради обрізається трикрапкою, числа
   вужчають, а не розпирають таблицю за край */
.ls-t { table-layout: fixed; }
.ls-t thead th:first-child, .ls-t tbody th { width: 32%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ls-t td, .ls-t thead th { overflow: hidden; text-overflow: ellipsis; }
@container ls (max-width: 460px) {
  .ls-t { font-size: var(--text-xs); }
  .ls-t td, .ls-t thead th { padding: 4px 3px; }
  .ls-t thead th:first-child, .ls-t tbody th { width: 30%; }
  .ls-hero { flex-wrap: wrap; }
}
.ls-lbs { position: relative; height: 66px; margin-bottom: var(--space-2); }
.ls-ld { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.ls-ld path { fill: none; stroke: var(--color-text-muted); stroke-width: 1; opacity: .6; }
.ls-lb { position: absolute; top: 14px; display: grid; gap: 1px; padding: 2px 4px; border-radius: var(--radius-sm); white-space: nowrap; }
.ls-lb-h { display: flex; align-items: center; gap: 4px; font-size: var(--text-xs); color: var(--color-text-secondary); }
.ls-lb-h .material-icons-round { font-size: 15px; color: var(--c); }
.ls-lb[data-k="none"] .ls-lb-h .material-icons-round { color: var(--color-text-muted); }
.ls-lb-v { font: var(--font-bold) 18px/1.15 var(--font-display); font-variant-numeric: tabular-nums; color: var(--color-text); }
.ls-lb-v small { font-size: 12px; font-weight: var(--font-medium); color: var(--color-text-muted); }
.ls-lb-s { font-size: var(--text-xs); color: var(--color-text-muted); }
.ls-side .ls-t-wrap { max-height: 300px; }

/* ── Головна на один екран (is-fit, від 1100×640): колонки до низу вікна,
   прокрутка — всередині блоків, а не сторінки ──────────────────────── */
.home-grid.is-fit { align-items: stretch; overflow: hidden; }
.home-grid.is-fit > .home-left, .home-grid.is-fit > .home-right { min-height: 0; height: 100%; }
.home-grid.is-fit > .home-left > .dashboard-card[data-zone="ownership"] { flex: 1 1 auto; min-height: 0; overflow: auto; }
.home-grid.is-fit > .home-right { grid-template-rows: minmax(0, 1fr) auto; }
.home-grid.is-fit > .home-right > .dashboard-card[data-zone="dzk_changes"] { min-height: 0; overflow: auto; }
.home-grid.is-fit > .home-right > .dashboard-card[data-zone="land_state"] { grid-column: 1 / -1 !important; }
.home-grid.is-fit .ls-side .ls-t-wrap { max-height: 190px; }
.home-grid.is-fit .ls-hero > b { font-size: 24px; }
.home-grid.is-fit .ls-bar { height: 28px; }
/* Стан оренди в правій колонці, а не на всю ширину */
.home-right > .dashboard-card[data-zone="land_state"] { grid-column: 1 / -1 !important; }

/* ── Три колонки: Портфель | Зміни | Стан оренди (вужча). Від 1100 до
   1440 px стан оренди — під змінами, ширше — окремою колонкою ──────── */
.home-grid { grid-template-areas: "l c" "l s"; grid-template-rows: auto auto; }
.home-grid > .home-left { grid-area: l; }
.home-grid > .home-right { grid-area: c; }
.home-grid > .home-third { grid-area: s; display: flex; flex-direction: column; min-width: 0; }
.home-third > .dashboard-card { display: flex; flex-direction: column; }
.home-grid.is-fit { grid-template-rows: minmax(0, 1fr) auto; }
.home-grid.is-fit > .home-right { height: auto; }
@media (min-width: 1441px) {
  .home-grid { grid-template-columns: minmax(360px, 430px) minmax(0, 1.5fr) minmax(360px, 1fr); grid-template-areas: "l c s"; grid-template-rows: auto; }
  .home-grid.is-fit { grid-template-rows: minmax(0, 1fr); }
  .home-grid.is-fit > .home-right, .home-grid.is-fit > .home-third { height: 100%; min-height: 0; }
  .home-grid.is-fit > .home-right { grid-template-rows: minmax(0, 1fr); }
  /* Вузька колонка: смуга й виноски зверху, таблиця рад — під ними на решту висоти */
  .home-grid.is-fit > .home-third > .dashboard-card { flex: 1 1 auto; min-height: 0; }
  .home-grid.is-fit > .home-third .hm { height: 100%; min-height: 0; }
  .home-grid.is-fit > .home-third #ls-body { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
  .home-grid.is-fit > .home-third .ls-grid { flex: 1 1 auto; min-height: 0; grid-template-rows: auto minmax(0, 1fr); }
  .home-grid.is-fit > .home-third .ls-side { min-height: 0; display: flex; }
  .home-grid.is-fit > .home-third .ls-side .ls-t-wrap { max-height: none; flex: 1 1 auto; }
}
@media (max-width: 1180px) { .home-grid, .home-grid.is-fit { grid-template-areas: "l" "c" "s"; grid-template-rows: auto; } }

.ls-wait { margin: var(--space-2) 0 0; font-size: var(--text-xs); color: var(--color-text-muted); }

/* Ради, що ще чекають, і чому — позначкою замість чисел */
.ls-st { display: inline-block; padding: 1px 8px; border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: var(--font-semibold);
  background: var(--color-surface-variant); color: var(--color-text-muted); white-space: nowrap; cursor: help; }
.ls-st.is-wait { background: color-mix(in srgb, var(--color-primary) 14%, transparent); color: var(--color-primary-text); }
.ls-st.is-bad { background: color-mix(in srgb, var(--color-progress-warning) 16%, transparent); color: var(--color-text); }
.ls-t tr.is-wait td, .ls-t tr.is-muted td { text-align: left; }
.ls-t tr.is-muted th a { color: var(--color-text-muted); }

/* Заготовка смуги, поки не готова жодна рада */
.ls-bar.is-skel { margin: var(--space-2) 0 var(--space-3); }
.ls-bar.is-skel .ls-sg { background: var(--color-surface-variant); animation: none; border-radius: 10px; }

/* «тест» біля назви блоку — як mv2-beta на карті; пояснення в підказці */
.ls-beta { font-style: normal; font-size: 10px; font-weight: var(--font-bold); letter-spacing: .04em; text-transform: uppercase;
  padding: 1px 6px; border-radius: var(--radius-full); cursor: help;
  color: var(--color-progress-warning); background: color-mix(in srgb, var(--color-progress-warning) 16%, transparent); }
.ls-beta:focus-visible { outline: none; box-shadow: var(--focus-ring); }
