/* Тема «Инструмент» (Linear/Vercel/Height) — детали поверх UNFOLD["COLORS"].
   Палитра (монохромные нейтрали, лаванда #5E6AD2) задана в settings; здесь то,
   чего палитра не достаёт: компактная таблица с uppercase-микрозаголовками,
   волосяные линии вместо теней, тёмные поверхности, фокус-кольцо, логин.

   Принципы A: страница и карточки БЕЛЫЕ (хардкод Unfold нам на руку) — глубину
   дают волосяные границы #EBEBEF, не тень и не подложка; акцент < 5% пикселей;
   монохром и типографика несут дизайн.

   Ключ: весь CSS Unfold 0.100 лежит в @layer, этот файл — вне слоёв, поэтому
   его правила побеждают без !important. НЕ оборачивать в @layer.

   Правило селекторов: только стабильные id (#main, #page, #nav-sidebar,
   #result_list, #changelist-form, #toolbar, #login-form), атрибут data-simplebar
   и :has() по ним. Скомпилированные Tailwind-цепочки Unfold не трогаем. */

/* ==================== 1. Поверхности ==================== */

/* Светлая: страница/карточки — сток-белые; сайдбар #F9F9FB — из палитры (base-50).
   Переопределений светлых поверхностей не нужно — это и есть «Инструмент». */

/* Тёмная: чёрно-графитовые слои Linear (страница глубже карточки). */
.dark #main {
  background-color: #08090a;
}
.dark #main > div:has(#header-inner) {
  background-color: #08090a;
}
.dark #nav-sidebar,
.dark #nav-sidebar-inner {
  background-color: #0f1011;
}
.dark #changelist-form [data-simplebar] {
  background-color: #161618;
}
.dark #changelist div:has(> #toolbar) {
  background-color: #161618;
}

/* ==================== 2. Карточка списка: границы, не тени ==================== */

#changelist-form [data-simplebar] {
  border-radius: 8px;
  /* «максимум» допустимой тени по A — едва заметная, вместо стоковой shadow-xs */
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}
.dark #changelist-form [data-simplebar] {
  box-shadow: none;
}

/* Полоса поиска/фильтров — единый hairline-контур с карточкой (радиус 8px). */
#changelist div:has(> #toolbar) {
  background-color: #ffffff;
  border-top-left-radius: 8px;
  border-top-right-radius: 8px;
}

/* ==================== 3. Компактная монохромная таблица ==================== */

/* Плотность инструмента: 36px против стоковых 45px. Высоту держит ПЕРВАЯ
   ячейка-объект — это <th class="field-name flex h-[45px]">, а не <td>,
   поэтому бьём и td, и th. nowrap убирает двухстрочные ячейки (широкие
   таблицы уходят в существующий горизонтальный скролл simplebar). */
#result_list tbody td,
#result_list tbody th {
  height: 36px;
  font-size: 13px;
  white-space: nowrap;
}

/* Без зебры: разделение — волосяными границами (сток красит каждый 2-й tbody). */
#changelist-form tbody {
  background-color: transparent;
}

/* Hover-строка — тон сайдбара + фирменная 2px-каретка акцента слева (Linear).
   Единственное место, кроме фокуса, где акцент появляется от действия. */
#changelist-form .data-row:hover {
  background-color: #f9f9fb;
}
.dark #changelist-form .data-row:hover {
  background-color: #1a1b1d;
}
#result_list tbody tr:hover > :first-child {
  box-shadow: inset 2px 0 0 #5e6ad2;
}

/* Uppercase-микрозаголовки колонок — сигнатура Linear-класса. */
#result_list thead th {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: #6e6f73;
  font-weight: 500;
}
.dark #result_list thead th {
  color: #8a8f98;
}

/* Ссылки-объекты — монохром (ink, вес 500), hover — underline. Акцентных
   глифов в теле таблицы ноль: лаванда живёт лишь на primary-действии,
   активном пункте навигации и фокусе. */
#result_list tbody a {
  color: #08090a;
  font-weight: 500;
}
#result_list tbody a:hover {
  text-decoration: underline;
}
.dark #result_list tbody a {
  color: #f7f8f8;
}

/* Служебные ссылки-действия (HTML · PDF документа) — muted, тише объектов. */
#result_list td.field-document_link a {
  color: #6e6f73;
  font-weight: 400;
}
.dark #result_list td.field-document_link a {
  color: #8a8f98;
}

/* ==================== 4. Денежная дисциплина ==================== */

/* Все цифры в списках — табличные (1 111,11 не уже, чем 999,99). */
#result_list th,
#result_list td {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}

/* Денежные/числовые колонки — вправо и без переноса. Новые денежные колонки
   достаточно дописать сюда.
   Селектор итога счёта переименован под total_amount_display (кволити-ревью
   C+D 24.08): InvoiceAdmin перевёл поле total_amount в @display-метод с этим
   именем (задача D, CSS-ширины) — прежнее написание молча переставало
   совпадать с ячейкой списка счетов. */
#result_list td.field-total_amount_display,
#result_list td.field-amount,
#result_list td.field-amount_rub,
#result_list td.field-nominal_amount,
#result_list td.field-rate_rub,
#result_list td.field-cross_rate,
#result_list td.field-opening_balance,
#result_list td.field-rate,
#result_list td.field-balance,
#result_list th.column-total_amount_display,
#result_list th.column-amount,
#result_list th.column-amount_rub,
#result_list th.column-nominal_amount,
#result_list th.column-rate_rub,
#result_list th.column-cross_rate,
#result_list th.column-opening_balance,
#result_list th.column-rate,
#result_list th.column-balance {
  text-align: right;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

/* ==================== 5. Фокус контролов ==================== */

/* Лавандовое кольцо — единственное место, где акцент «светится»
   (и в админке #main, и на логине #page). */
#main input:focus,
#main select:focus,
#main textarea:focus,
#page input:focus,
#page select:focus,
#page textarea:focus {
  border-color: #5e6ad2;
  box-shadow: 0 0 0 2px rgba(94, 106, 210, 0.25);
  outline: none;
}
.dark #main input:focus,
.dark #main select:focus,
.dark #main textarea:focus,
.dark #page input:focus,
.dark #page select:focus,
.dark #page textarea:focus {
  box-shadow: 0 0 0 2px rgba(136, 144, 220, 0.3);
}

/* ==================== 6. Логин ==================== */

/* Белая страница, белая карточка — их различает только волосяная рамка (A-приёмка). */
#page {
  background-color: #ffffff;
}
.dark #page {
  background-color: #08090a;
}
#login-form {
  background-color: #ffffff;
  border: 1px solid #ebebef;
  border-radius: 8px;
  padding: 2rem;
}
.dark #login-form {
  background-color: #161618;
  border-color: #242528;
}
/* Красные звёздочки обязательных полей — единственный красный на логине;
   уводим в muted, чтобы монохром держался. */
#login-form [class*="text-red"] {
  color: #8a8f98;
}

/* ==================== 7. Отчёты (/admin/reports/…) ==================== */

/* Цифровые таблицы отчётов — табличные цифры, колонки не «пляшут». */
.report-table th,
.report-table td {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}

/* Активный таб навигации отчётов — лавандовое подчёркивание (box-shadow —
   без сдвига раскладки). */
.report-tab-active {
  box-shadow: inset 0 -2px 0 #5e6ad2;
}

/* Колонка текущего месяца (th+td) — лавандовый тинт. Solid-эквиваленты
   rgba(94,106,210,.06) на белом и .12 на #08090a — непрозрачность нужна
   липкой шапке (иначе контент просвечивает при скролле). */
.report-table .col-now {
  background-color: #f5f6fc;
}
.dark .report-table .col-now {
  background-color: #121522;
}

/* Скролл-контейнер таблицы ДДС: ограничение высоты — иначе sticky-шапка
   не работает (вертикальный скролл шёл бы по странице, а не по контейнеру). */
.report-scroll {
  max-height: calc(100vh - 12rem);
  overflow: auto;
}
/* Липкие первая колонка и шапка отчёта ДДС: непрозрачный фон поверх скролла. */
.report-sticky thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  background-color: #ffffff;
}
.report-sticky th:first-child,
.report-sticky td:first-child {
  position: sticky;
  left: 0;
  z-index: 1;
  background-color: #ffffff;
}
.report-sticky thead th:first-child {
  z-index: 3;
}
.dark .report-sticky thead th,
.dark .report-sticky th:first-child,
.dark .report-sticky td:first-child {
  background-color: #08090a;
}
/* Первая (липкая) ячейка итоговой строки — тинт итога (base-50), не белый. */
.report-sticky tr.row-total td:first-child {
  background-color: #f9f9fb;
}
.dark .report-sticky tr.row-total td:first-child {
  background-color: #08090a;
}

/* Утилиты палитры отчётов, которых нет в сборке Tailwind Unfold (амбер
   целиком, тёмный зелёный текст, полупрозрачные тинты, дробные размеры).
   Селекторы — в нотации Tailwind v4 (dark-вариант через :where(.dark …)),
   чтобы классы в шаблонах читались как обычные Tailwind-классы. */
.text-amber-600 { color: #d97706; }
.text-amber-700 { color: #b45309; }
.bg-amber-50 { background-color: #fffbeb; }
.bg-amber-600 { background-color: #d97706; }
.border-l-amber-600 { border-left-color: #d97706; }
.dark\:text-amber-500:where(.dark, .dark *) { color: #f59e0b; }
.dark\:bg-amber-500:where(.dark, .dark *) { background-color: #f59e0b; }
.dark\:bg-amber-900\/20:where(.dark, .dark *) { background-color: rgba(120, 53, 15, 0.2); }
.dark\:border-l-amber-500:where(.dark, .dark *) { border-left-color: #f59e0b; }
.dark\:text-green-500:where(.dark, .dark *) { color: #22c55e; }
.dark\:bg-green-900\/20:where(.dark, .dark *) { background-color: rgba(20, 83, 45, 0.2); }
.dark\:bg-red-900\/40:where(.dark, .dark *) { background-color: rgba(127, 29, 29, 0.4); }
.h-1\.5 { height: 0.375rem; }
.w-1\.5 { width: 0.375rem; }
.mt-1\.5 { margin-top: 0.375rem; }
.py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }
.max-w-56 { max-width: 14rem; }
.items-end { align-items: flex-end; }
/* Направляющая 2px-полоса строк свода: зелёный приход / красный расход. */
.border-l-green-700 { border-left-color: #15803d; }
.border-l-red-700 { border-left-color: #b91c1c; }
.dark\:border-l-green-500:where(.dark, .dark *) { border-left-color: #22c55e; }
.dark\:border-l-red-400:where(.dark, .dark *) { border-left-color: #f87171; }
/* Тонкая верхняя граница итоговых строк (base-300/base-700 темы). */
.border-t-base-300 { border-top-color: #d9d9de; }
.dark\:border-t-base-700:where(.dark, .dark *) { border-top-color: #2c2f36; }
/* Жёлтая плашка «операции без ₽-оценки» (dds.html). */
.bg-yellow-50 { background-color: #fefce8; }
.border-yellow-300 { border-color: #fde047; }
.dark\:bg-yellow-900\/20:where(.dark, .dark *) { background-color: rgba(113, 63, 18, 0.2); }
.dark\:border-yellow-700:where(.dark, .dark *) { border-color: #a16207; }
/* Карточки итогов свода: 4 колонки от sm (брейкпоинт Tailwind v4 — 40rem). */
@media (min-width: 40rem) {
  .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* ==================== 8. Табло здоровья (флаги и карточки зон) ==================== */

/* Единственное место табло, где есть цвет: точка статуса, пилюля числа и
   рамка флага. Свои классы, а не утилиты Tailwind, по двум причинам: цвета
   статуса в сборке Unfold нет вовсе (как и амбера отчётов), а смысл «цвет =
   можно ли верить цифрам» обязан жить одним определением на оба экрана —
   строку флагов дашборда и карточки страницы /admin/health/. Оттенки — те же,
   что у направлений свода (зелёный #15803d / амбер #d97706 / красный #b91c1c),
   тёмная тема — их светлые пары. */

.health-dot {
  display: inline-block;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 9999px;
  flex-shrink: 0;
}
.health-ok { background-color: #15803d; }
.health-warn { background-color: #d97706; }
.health-err { background-color: #b91c1c; }
.dark .health-ok { background-color: #22c55e; }
.dark .health-warn { background-color: #f59e0b; }
.dark .health-err { background-color: #f87171; }

/* Флаг зоны на дашборде: волосяная пилюля «точка · зона · число». Ссылка —
   монохромная (акцент лаванды на табло не участвует), цвет несёт только точка. */
.health-flag {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  border: 1px solid #ebebef;
  border-radius: 9999px;
  padding: 0.25rem 0.625rem;
  font-size: 12px;
  line-height: 1.25;
  color: #08090a;
  white-space: nowrap;
}
.health-flag:hover { background-color: #f9f9fb; }
.dark .health-flag { border-color: #242528; color: #f7f8f8; }
.dark .health-flag:hover { background-color: #1a1b1d; }

/* Число во флаге и в строке проверки — табличные цифры (денежная дисциплина
   раздела 4 распространяется на любые счётные колонки). */
.health-num,
.health-flag .health-count {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}

/* Пилюля числа в заголовке карточки: тинт статуса, без заливки-блока.
   Цифры табличные — как у соседей выше. */
.health-pill {
  border-radius: 9999px;
  padding: 0.125rem 0.5rem;
  font-size: 11px;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}
.health-pill-warn { background-color: #fffbeb; color: #b45309; }
.health-pill-err { background-color: #fef2f2; color: #b91c1c; }
.health-pill-ok { background-color: #f0fdf4; color: #15803d; }
.dark .health-pill-warn { background-color: rgba(120, 53, 15, 0.2); color: #f59e0b; }
.dark .health-pill-err { background-color: rgba(127, 29, 29, 0.4); color: #f87171; }
.dark .health-pill-ok { background-color: rgba(20, 83, 45, 0.2); color: #22c55e; }

/* Перенос длинных неразрывных токенов (хэш TON — 64 символа, ссылка
   tronscan — 99) в тексте строки проверки и в вердикте автоагента.
   Браузерная приёмка 28.08: без этого правила строка не переносилась вовсе —
   на 1440px текст печатался ПОВЕРХ соседней карточки (+219px), на 1024px
   уходил за край экрана. `anywhere`, а не `break-word`: последний рвёт слово
   только когда оно одно в строке, а хэш стоит в конце фразы («Сделка не
   нашла пары: e5f…») и остаётся неразрывным. Обрезать текст нельзя — за ним
   и идут на карточку. */
.health-text {
  overflow-wrap: anywhere;
}

/* «Где чинить» — служебная ссылка, тише текста строки (тот же приём, что у
   ссылок-действий таблицы). */
.health-fix { color: #6e6f73; }
.health-fix:hover { text-decoration: underline; }
.dark .health-fix { color: #8a8f98; }

/* Категории расходов «Анализа P&L»: сворачиваемые details — summary без
   штатного маркера, каретка поворачивается при раскрытии; цифры табличные. */
.report-cats {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}
.report-cat summary {
  list-style: none;
  cursor: pointer;
}
.report-cat summary::-webkit-details-marker {
  display: none;
}
.report-cat .cat-caret {
  display: inline-block;
  width: 0.75rem;
  color: #8a8f98;
  transition: transform 0.12s;
}
.report-cat[open] .cat-caret {
  transform: rotate(90deg);
}
