/* Финансовый контур института — оформление.
   Печать (Ctrl+P) поддержана с первого дня: реестры носят на совещания.

   ⛔ СВОИХ ЦВЕТОВ, КЕГЛЕЙ, ОТСТУПОВ, РАДИУСОВ И ТЕНЕЙ ЗДЕСЬ БОЛЬШЕ НЕТ НИ ОДНОГО.
   Всё берётся `var(--…)` из `ui-tokens.css`, который подключён в `index.html`
   ПЕРВЫМ стилем. Источник файла один — `src/Shared.Ui/ui-tokens.css`; в этот
   `wwwroot` его кладёт сборка (`src/Shared.Ui/Оформление.props`), поэтому править
   лежащую рядом копию бессмысленно: она перезаписывается.

   ⛔ ПРЕЖНИЙ БЛОК `:root` СНЯТ ЦЕЛИКОМ, А НЕ ПЕРЕВЕДЁН В ПСЕВДОНИМЫ.
   Девять своих имён (`--bg`, `--card`, `--ink`, `--muted`, `--line`, `--accent`,
   `--bad`, `--warn`, `--ok`) — это второй словарь ролей. Оставить их значить
   `var(--цвет-…)` было заманчиво (диффа меньше), но тогда у каждой роли снова
   два имени, и следующий экран берёт то, которое короче. Соответствие, по которому
   шла замена, записано здесь один раз и дальше не нужно:

     --bg     → --цвет-фон-страницы      --line   → --цвет-граница
     --card   → --цвет-поверхность       --accent → --цвет-акцент
     --ink    → --цвет-текст             --bad    → --цвет-тревога-текст
     --muted  → --цвет-текст-3           --warn   → --цвет-внимание
                                         --ok     → --цвет-успех-текст

   Пастельные литералы (#eef3f8, #fdecea, #fffaf0, #fbf7f2…) заменены НЕ цветом,
   а ролью подсветки строки (`--подсветка-*`): по закону 1 системы тинт значения
   не несёт — значение несут знак и текст, и они в разметке уже есть. */

*{box-sizing:border-box}
html,body{margin:0;padding:0;
  background:var(--цвет-фон-страницы);color:var(--цвет-текст);
  font-family:var(--шрифт);font-size:var(--кегль-основной);
  line-height:var(--интерлиньяж-обычный)}

/* ⛔ ЯВНОЕ ПРАВИЛО ДЛЯ КАЖДОГО ЭЛЕМЕНТА, У КОТОРОГО ЗАДАН СВОЙ display.
   Иначе `hidden` проигрывает `display:flex`, и скрытое остаётся на экране. */
[hidden]{display:none !important}

/* ⛔ ПОЛ ЦЕЛИ НАЖАТИЯ ГЛАВНЫХ ОРГАНОВ — 44 px, А НЕ 24.
   `--цель-нажатия` в токенах это WCAG 2.2 SC 2.5.8 (минимум, 24 px); здесь
   держится усиленный критерий SC 2.5.5 (44×44) — контур открывают рядом
   с клиентом Pilot на ноутбуке, и «Принять выгрузку заново» промахом стоит
   спора о составе ведомости. Записано через `max()`, чтобы ручка плотности
   могла орган УВЕЛИЧИТЬ и не могла опустить ниже 44.
   Своего числа система не объявляет, поэтому 44 живёт здесь, а не в токенах:
   заводить десятый радиус/отступ мимо файла токенов запрещено (§ 4.2).

   ⛔ КНОПКИ — ВИД БЕЗ ФЛАГА ОБОЛОЧКИ (веб-пакет «один продукт», волна 2, план §2.1 и §3.4). Под флагом
   data-оболочка="2" вид и размер кнопки дают компоненты.css (база 44 px — роль --высота-кнопки, кнопка
   в клетке таблицы — 24 px, уровни .сис-главная / .сис-тихая) и оболочка.css (вкладки, «Выйти»). Весь
   КЛАСТЕР — каждое правило, которое задаёт вид или размер кнопки контура (этот список, .loginBox button,
   .linkBtn, .actions button, .btn), — стоит здесь же, на месте и дословно, под :root:not([data-оболочка="2"]):
   это откат настройкой WebShell. Приставка прибавляет правилу (0,2,0), и прибавка у всего кластера
   одинакова — порядок внутри него прежний. В обоих режимах осталось только то, что с кластером не спорит:
   раскладка (width, display, align-items) и поле .loginBox input — список поделён. Печать (@media print ниже)
   не переводится. */
:root:not([data-оболочка="2"]) .tabs button,:root:not([data-оболочка="2"]) .linkBtn,
:root:not([data-оболочка="2"]) .loginBox button,:root:not([data-оболочка="2"]) .actions button{
  min-height:max(44px,var(--высота-органа));min-width:var(--цель-нажатия);
  font-family:var(--шрифт)}
.loginBox input{
  min-height:max(44px,var(--высота-органа));min-width:var(--цель-нажатия);
  font-family:var(--шрифт)}

/* ─── полоса режима ───
   ⛔ ВИД БЕЗ ФЛАГА ОБОЛОЧКИ. Под флагом data-оболочка="2" (веб-пакет «один продукт», волна 1)
   полосу рисует оболочка.css: база .сис-полоса в разметке, тон .сис-полоса-тревога ставит app.js
   через classList. Прежние правила стоят под :root:not([data-оболочка="2"]) — это откат
   настройкой WebShell, и с оболочкой они не спорят ни специфичностью, ни порядком. */
:root:not([data-оболочка="2"]) .modeBar{padding:var(--отступ-малый) var(--отступ-крупный);
  background:var(--цвет-поверхность-утопленная);
  border-bottom:1px solid var(--цвет-граница);
  color:var(--цвет-текст);font-size:var(--кегль-таблица)}
:root:not([data-оболочка="2"]) .modeBar.bad{background:var(--подсветка-тревога);
  border-color:var(--цвет-граница-отказа);color:var(--цвет-тревога-текст)}
/* Узлы полосы режима ставит app.js (полосаРежима) на оба вида сразу, выбирает — флаг (ревью волны 1):
   без флага знака полосы (.сис-полоса-знак, он и у полосы отказа) до пакета не было, а правило круга
   стояло своей строкой (перенос .modeRuleBr); под флагом правило — в строку через « · » (.modeRuleSep). */
:root:not([data-оболочка="2"]) .сис-полоса-знак,
:root:not([data-оболочка="2"]) .modeRuleSep{display:none}
:root[data-оболочка="2"] .modeRuleBr{display:none}

/* ─── вход ─── */
.loginScreen{display:flex;align-items:center;justify-content:center;min-height:80vh;
  padding:var(--отступ-раздел)}
.loginBox{background:var(--цвет-поверхность);border:1px solid var(--цвет-граница);
  border-radius:var(--скругление-крупное);
  padding:var(--отступ-раздел);width:min(420px,100%);box-shadow:var(--тень-карточки)}
.loginBox h1{margin:0 0 var(--отступ-микро);font-size:var(--кегль-заголовок)}
.loginBox .sub{margin:0 0 var(--отступ-крупный);color:var(--цвет-текст-3);
  font-size:var(--кегль-служебный)}
.loginBox label{display:block;margin:0 0 var(--отступ-средний);
  font-size:var(--кегль-служебный);color:var(--цвет-текст-3)}
.loginBox input{display:block;width:100%;margin-top:var(--отступ-микро);
  padding:var(--отступ-малый);font-size:var(--кегль-таблица);
  border:1px solid var(--цвет-граница-сильная);border-radius:var(--скругление);
  color:var(--цвет-текст);background:var(--цвет-поверхность)}
/* Кнопка входа: ширина — раскладка, в обоих режимах; вид — кластер отката (под флагом «Войти» —
   .сис-главная в разметке, база даёт 44 px и прозрачность отключённой). */
.loginBox button{width:100%}
:root:not([data-оболочка="2"]) .loginBox button{padding:0 var(--отступ-средний);
  font-size:var(--кегль-основной);border:0;border-radius:var(--скругление);
  background:var(--цвет-акцент);color:var(--цвет-текст-на-акценте);cursor:pointer}
:root:not([data-оболочка="2"]) .loginBox button[disabled]{opacity:var(--непрозрачность-отключено);
  cursor:var(--курсор-отключено)}
.loginBox .note{margin:var(--отступ-крупный) 0 0;font-size:var(--кегль-служебный);
  color:var(--цвет-текст-3)}
.err{margin:var(--отступ-средний) 0 0;padding:var(--отступ-малый) var(--отступ-средний);
  background:var(--подсветка-тревога);border:1px solid var(--цвет-граница-отказа);
  border-radius:var(--скругление);color:var(--цвет-отказ);
  font-size:var(--кегль-таблица)}

/* ─── рабочая область ─── */
.app{display:block;max-width:1500px;margin:0 auto;
  padding:0 var(--отступ-крупный) var(--отступ-экран)}
/* Шапка, «кто я» и ряд вкладок — ВИД БЕЗ ФЛАГА ОБОЛОЧКИ (см. полосу режима выше): под флагом
   header.top.сис-шапка, .сис-верх и nav.tabs.сис-вкладки рисует оболочка.css. */
:root:not([data-оболочка="2"]) .top{display:flex;align-items:center;gap:var(--отступ-крупный);flex-wrap:wrap;
  padding:var(--отступ-средний) 0;border-bottom:1px solid var(--цвет-граница)}
:root:not([data-оболочка="2"]) .who strong{display:block;font-size:var(--кегль-заголовок)}
:root:not([data-оболочка="2"]) .who .muted{font-size:var(--кегль-служебный)}
:root:not([data-оболочка="2"]) .tabs{display:flex;gap:var(--отступ-малый);flex:1 1 auto;flex-wrap:wrap}
:root:not([data-оболочка="2"]) .tabs button{padding:0 var(--отступ-средний);border:1px solid var(--цвет-граница-сильная);
  background:var(--цвет-поверхность);border-radius:var(--скругление);
  cursor:pointer;font-size:var(--кегль-таблица);color:var(--цвет-текст)}
:root:not([data-оболочка="2"]) .tabs button.on{background:var(--цвет-фон-выбрано);border-color:var(--цвет-фон-выбрано);
  color:var(--цвет-текст-выбрано)}
/* Кнопка-ссылка — кластер отката; под флагом её вид даёт .сис-тихая в разметке («Выйти» рисует оболочка). */
:root:not([data-оболочка="2"]) .linkBtn{border:0;background:none;color:var(--цвет-акцент);cursor:pointer;
  font-size:var(--кегль-таблица);text-decoration:underline}
.stamp{margin:var(--отступ-средний) 0 0;
  padding:var(--отступ-малый) var(--отступ-средний);
  background:var(--подсветка-внимание);border:1px solid var(--цвет-граница);
  border-radius:var(--скругление);font-size:var(--кегль-таблица)}
.stamp b{font-weight:var(--начертание-выделенное)}
.view{margin-top:var(--отступ-крупный)}
.foot{margin-top:var(--отступ-раздел);padding-top:var(--отступ-средний);
  border-top:1px solid var(--цвет-граница);font-size:var(--кегль-служебный)}
.muted{color:var(--цвет-текст-3)}

/* ─── карточки и таблицы ─── */
.card{background:var(--цвет-поверхность);border:1px solid var(--цвет-граница);
  border-radius:var(--скругление-крупное);
  padding:var(--отступ-крупный);margin:0 0 var(--отступ-крупный)}
.card h2{margin:0 0 var(--отступ-микро);font-size:var(--кегль-основной)}
.card .cov{margin:0 0 var(--отступ-средний);font-size:var(--кегль-служебный);
  color:var(--цвет-текст-3)}
.warnBox{background:var(--подсветка-внимание);border:1px solid var(--цвет-граница);
  border-radius:var(--скругление);padding:var(--отступ-малый) var(--отступ-средний);
  margin:0 0 var(--отступ-средний);font-size:var(--кегль-таблица);
  color:var(--цвет-внимание)}
.emptyBox{background:var(--цвет-поверхность);border:1px dashed var(--цвет-граница);
  border-radius:var(--скругление);padding:var(--отступ-крупный);
  font-size:var(--кегль-основной)}
.emptyBox b{display:block;margin-bottom:var(--отступ-малый)}
.scroll{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:var(--кегль-таблица);
  line-height:var(--интерлиньяж-плотный)}
th,td{padding:var(--поле-клетки-по-вертикали) var(--поле-клетки-по-горизонтали);
  border-bottom:1px solid var(--цвет-граница);text-align:left;vertical-align:top}
th{background:var(--цвет-поверхность-утопленная);
  font-weight:var(--начертание-выделенное);white-space:nowrap}

/* ⛔ ЧИСЛО — ВПРАВО И ТАБЛИЧНЫМИ ЦИФРАМИ, И ШАПКА ВМЕСТЕ С НИМ.
   Класс стоит И на `th`, И на `td`: шапка, оставшаяся слева, разъезжается
   с разрядами под ней — а разряды и есть то, ради чего берутся табличные цифры.
   Правило — общий слой (таблица.css: `td.num, th.num` вправо и табличными цифрами, `td.num` неразрывно);
   `th,td{text-align:left}` выше весит меньше (0,0,1). Своя копия снята (гейт ревью волны 2, MEDIUM-2).
   Центрированных чисел в этом контуре не было ни одного (проверено грепом
   `text-align:center` по app.css и app.js) — убирать было нечего.
   ⛔ ПОД ФЛАГОМ ШАПКА ЧИСЛА ПЕРЕНОСИТСЯ (план волны 2 §2.4): `th{white-space:nowrap}` выше держал неразрывными
   и шапки `th.num`. Поправка — только под флагом: без флага шапки — как до пакета (ворота 12). Держит сторож
   ШапкаЧислаПереноситсяTests. */
:root[data-оболочка="2"] th.num{white-space:normal}
td.num .cell-cov{display:block;font-size:var(--кегль-подпись);
  color:var(--цвет-текст-3);text-align:right;font-variant-numeric:normal}
/* Под флагом оболочки подпись стала 12 px, и строки полноты РЕЕСТРОВ дали бы больше четверти
   знаков экрана 12-пиксельными (ворота волны 2: доля 12 px ≤ 25 %; registers 1600 — 28,6 %
   при строке полноты 12 px, браузер, 26.09.2026): строка стоит под каждой ценой и суммой.
   В реестрах строка полноты — служебным кеглем; иерархию держит цвет --цвет-текст-3, а не размер.
   ⛔ ТОЛЬКО В ЧЕТЫРЁХ ТАБЛИЦАХ ЭКРАНА РЕЕСТРОВ, А НЕ В ЛЮБОЙ td.num. Клетка числа не переносится
   (nowrap), и строка полноты держит ширину столбца. В сводных таблицах она длиннее («доходных
   договоров с ценой 1, субподрядных с ценой 1»), и 13 px выталкивали их за окно 1366: «Движение
   денег» — прокрутка вбок 1327 > 1298, период «01.01.2026 — 31.01.2026» в три строки (клетка
   137 → 78 px), высота таблицы 438 → 585 px; «Итоги» — 575 → 770 px (ревью этапа 1). Цена
   в реестрах при 1366: окно реестра, которое прокручивается вбок и при 12 px, шире на 81 px
   (1557 → 1638), высота +38 px (+2 %). Список таблиц держит сторож ГеометрияПодъёмаКеглейTests. */
:root[data-оболочка="2"] table[data-таблица="договоры"] td.num .cell-cov,
:root[data-оболочка="2"] table[data-таблица="акты"] td.num .cell-cov,
:root[data-оболочка="2"] table[data-таблица="допсоглашения"] td.num .cell-cov,
:root[data-оболочка="2"] table[data-таблица="субподряд"] td.num .cell-cov{font-size:var(--кегль-служебный)}
/* ⛔ ПЕРЕНОС СТРОКИ ПОЛНОТЫ — ПОИМЁННО, А НЕ У ВСЕХ .cell-cov (ревью волны 2 веб-пакета, этап 2; сторож
   ПереносСтрокиПолнотыTests). Число над строкой не переносится никогда (nowrap у td.num), а суммы внутри
   строки держит неразрывный пробел между разрядами (app.js, разрядыНеРвутся).
   · «Действующая цена» реестра договоров — ПОД ФЛАГОМ, клетка с классом полнота-переносится (app.js,
     ячейкаЧисла). Реестр уходил за край окна и до пакета: строка полноты этого столбца («цена договора …
     → ДС-2 добавляет … = … на дату») держала его одной строкой — окно 1472 > 1298 (1366) и > 1432 (1600)
     до волны 2, 1638 под флагом после подъёма кегля. Первая редакция разрешала перенос строкам полноты
     всех четырёх таблиц и рвала суммы посередине («1 288» / «000,00», 3 суммы при 1366), а в столбце
     «Цена» переносила и короткие строки — 16 клеток в две строки; содержимое окна договоров выросло
     757 → 1017 px. Теперь (браузер, стенд, 27.09.2026, флаг): окно договоров 1638 → 1298 (1366) и 1432
     (1600), прокрутки вбок нет, разорванных сумм 0, переносятся 3 клетки одного столбца; высота окна
     упёрта в потолок .таблица-окно (72vh: 551 и 646 px) и прежняя, а СОДЕРЖИМОЕ выросло 757 → 806 px
     (+49; с переносом у всех строк полноты было 1017, +260) — прокрутка вбок сменилась прокруткой вниз.
     Без флага — как до пакета (откат): строка одной строкой, окно прокручивается вбок.
   · «Результат месяца» — В ОБОИХ РЕЖИМАХ. Числа этой таблицы стоят в td.num и без флага: это починка
     разметки, откат её не возвращает (план волны 2 §2.1, «Чего откат не возвращает», п. 2). Основание ФОТ —
     свободный текст бухгалтера без предела длины (ФондОплатыТруда.Внести проверяет месяц и сумму) — встало
     строкой полноты в td.num и не переносилось: основание в 147 знаков выталкивало окно таблицы вбок —
     под флагом 1486 > 1332 (1366) и > 1466 (1600), в откате 1405 > 1332 (1366). До пакета оно шло
     в обычной клетке через « · » и переносилось. С переносом (браузер, стенд, 27.09.2026): окно 1332
     и 1466, вбок нет в обоих режимах; содержимое 503 px под флагом и 483 px в откате. До пакета было
     410 и 393 px: откат этой таблицы с видом до пакета не совпадает — это названная починка разметки. */
:root[data-оболочка="2"] td.num.полнота-переносится .cell-cov,
table[data-таблица="результат"] td.num .cell-cov{white-space:normal}
tr.noCard td{background:var(--подсветка-внимание)}
.tag{display:inline-block;padding:0 var(--отступ-малый);
  border-radius:var(--скругление-крупное);font-size:var(--кегль-подпись);
  border:1px solid var(--цвет-граница);background:var(--цвет-поверхность);
  color:var(--цвет-текст-3)}
.tag.bad{background:var(--подсветка-тревога);border-color:var(--цвет-граница-отказа);
  color:var(--цвет-тревога-текст)}
.tag.warn{background:var(--подсветка-внимание);border-color:var(--цвет-граница);
  color:var(--цвет-внимание)}
.tag.ok{background:var(--подсветка-успех);border-color:var(--цвет-граница);
  color:var(--цвет-успех-текст)}

/* ─── три числа руководителя ─── */
.three{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
  gap:var(--отступ-средний);margin:0 0 var(--отступ-крупный)}
.big{background:var(--цвет-поверхность);border:1px solid var(--цвет-граница);
  border-radius:var(--скругление-крупное);padding:var(--отступ-крупный)}
.big .lbl{font-size:var(--кегль-служебный);color:var(--цвет-текст-3);
  text-transform:uppercase;letter-spacing:.04em}
.big .val{font-size:var(--кегль-крупное-число);
  margin:var(--отступ-малый) 0 var(--отступ-микро);
  font-variant-numeric:tabular-nums}
.big .val.unknown{color:var(--цвет-текст-3)}
.big .cov{font-size:var(--кегль-служебный);color:var(--цвет-текст-3)}
.notes{margin:0;padding-left:var(--отступ-крупный);font-size:var(--кегль-таблица)}
.notes li{margin:0 0 var(--отступ-малый)}
.pre{white-space:pre-wrap;font-family:var(--шрифт-моно);
  font-size:var(--кегль-служебный);line-height:var(--интерлиньяж-обычный);
  background:var(--цвет-поверхность-утопленная);border:1px solid var(--цвет-граница);
  border-radius:var(--скругление);padding:var(--отступ-малый);
  max-height:340px;overflow:auto}
.actions{display:flex;gap:var(--отступ-малый);align-items:center;
  margin:0 0 var(--отступ-средний);flex-wrap:wrap}
/* Кнопки ряда действий — кластер отката: без флага все залиты акцентом, как до пакета. Под флагом —
   база, а отправка формы — .сис-главная в разметке, одна на форму (план волны 2 §3.4). */
:root:not([data-оболочка="2"]) .actions button{padding:0 var(--отступ-средний);border:1px solid var(--цвет-акцент);
  background:var(--цвет-акцент);color:var(--цвет-текст-на-акценте);
  border-radius:var(--скругление);cursor:pointer;font-size:var(--кегль-таблица)}
:root:not([data-оболочка="2"]) .actions button[disabled]{opacity:var(--непрозрачность-отключено);
  cursor:var(--курсор-отключено)}
/* Ряд кнопок движения денег («Загрузить файл…», «Сопоставить…»): класс стоял в разметке
   с 10.09.2026, правила не было — кнопки слипались без промежутков (§4 Б3). Только токены. */
.acts{display:flex;flex-wrap:wrap;gap:var(--отступ-малый);align-items:center;
  margin:0 0 var(--отступ-средний)}

/* ─── полоса отказа сети (§4 А6) ───
   Служба не отвечает — это СОСТОЯНИЕ, а не пустой экран. Полоса стоит выше формы входа
   и рабочей области; текст кладёт скрипт через textContent (у контура строгий
   `style-src 'self'`, встроенных стилей нет). Скрыта атрибутом hidden — правило
   `[hidden]{display:none !important}` выше. */
:root:not([data-оболочка="2"]) .netFail{padding:var(--отступ-малый) var(--отступ-крупный);
  background:var(--подсветка-тревога);border-bottom:2px solid var(--цвет-граница-отказа);
  color:var(--цвет-тревога-текст);font-size:var(--кегль-таблица)}
.netFail b{font-weight:var(--начертание-выделенное)}

/* ПЕЧАТЬ. Без флага оболочки шапки на листе нет, как до пакета: `.top{display:none !important}`.
   Под флагом шапку на лист возвращает класс-разрешение .сис-шапка-на-листе в разметке (правило
   оболочки сильнее этого специфичностью): строка шапки — название контура, стол роли и сборка —
   подписывает лист. #stamp подписывает не всякий лист: экраны «Ставки», «Периоды», «Таблицы»,
   «Графики» и «О контуре» его гасят (ревью волны 1). «Кто я» на листе не нужен — правило ниже,
   под флагом; вкладки, переключатель контуров и «Выйти» прячет сама оболочка. */
@media print{
  .top,.tabs,.linkBtn,.actions,.modeBar{display:none !important}
  .app{max-width:none;padding:0}
  .card{break-inside:avoid;border:0;padding:0 0 var(--отступ-малый)}
  /* Лист белым делает сам файл токенов (там @media print перекладывает роли,
     включая тёмную тему). Строка оставлена явной, чтобы связь была видна. */
  body{background:var(--цвет-фон-страницы)}
}

/* Работа №14: ссылки выгрузки. Выглядят кнопками, потому что ведут себя как
   действия; цель нажатия не ниже пола WCAG 2.2 SC 2.5.5 — файл забирает
   бухгалтер, часто с ноутбука без мыши. */
/* .btn — кластер отката. Под флагом оболочки вид кнопки даёт база компоненты.css: <button class="btn"> —
   кнопка сама, ссылка выгрузки — <a class="btn сис-кнопка"> (имя базы для органа не-кнопки). В обоих
   режимах у .btn остаётся раскладка: inline-flex — база display не задаёт, а у строчной ссылки min-height
   не действует. Черту ссылки под флагом снимает сама база .сис-кнопка (компоненты.css; прежняя контурная
   заплатка `a.сис-кнопка{text-decoration:none}` снята — находка F5 ревью волны 2), в откате — правило ниже. */
.row{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px}
.btn{display:inline-flex;align-items:center}
:root:not([data-оболочка="2"]) .btn{min-height:44px;padding:0 16px;
  border:1px solid var(--цвет-граница);border-radius:6px;
  background:var(--цвет-поверхность);color:var(--цвет-текст);text-decoration:none}
:root:not([data-оболочка="2"]) .btn:hover{border-color:var(--цвет-акцент);color:var(--цвет-акцент)}

/* ═══ НАБОРЫ ДАННЫХ И ГРАФИКИ (02.09.2026) — только токены ═══ */
.dsGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--отступ-средний)}
.dsCard h3{margin:0 0 var(--отступ-микро)}
.dsReports{margin:var(--отступ-малый) 0}
.dsReportRow{display:flex;gap:var(--отступ-микро);align-items:center;flex-wrap:wrap}
.dsParams,.dsBlock{display:flex;flex-wrap:wrap;gap:var(--отступ-малый);align-items:center;margin:var(--отступ-малый) 0}
.dsRow{display:flex;flex-wrap:wrap;gap:var(--отступ-микро);align-items:center;margin:var(--отступ-микро) 0}
.dsChk{margin-right:var(--отступ-малый)}
.dsPreview input[type=text],.dsParams input[type=text],.dsRow input[type=text]{min-width:12ch;font-family:var(--шрифт);font-size:var(--кегль-таблица)}
.dsPreview th input{width:100%;min-width:9ch}
.dsPreview select,.dsBlock select,.dsRow select{min-height:max(var(--высота-органа),44px);font-family:var(--шрифт)}
.dsGroup td:first-child{font-weight:var(--начертание-выделенное)}
.dsTotal td,.dsTotals th,.dsTotals td{border-top:2px solid var(--цвет-граница)}
.dsTotals{margin-top:var(--отступ-малый)}
.chart-box{margin:var(--отступ-средний) 0;padding:var(--отступ-малый) 0}
.chart-title{font-size:var(--кегль-таблица);font-weight:var(--начертание-выделенное);color:var(--цвет-текст-2);margin-bottom:var(--отступ-микро)}
.chart{width:100%;height:auto;max-width:100%;display:block}
.chart-cov{font-size:var(--кегль-подпись);color:var(--цвет-текст-3);margin-top:var(--отступ-микро)}
.chart-empty{padding:var(--отступ-средний);background:var(--цвет-поверхность-утопленная);border-radius:var(--скругление);color:var(--цвет-текст-2);font-size:var(--кегль-таблица)}
.chart-data{margin-top:var(--отступ-микро);font-size:var(--кегль-подпись)}
.chart-data summary{cursor:pointer;color:var(--цвет-акцент);min-height:max(var(--высота-органа),44px);display:flex;align-items:center}
.chart-data table{border-collapse:collapse;margin-top:var(--отступ-микро)}
.chart-data td,.chart-data th{border:1px solid var(--цвет-граница);padding:2px var(--отступ-малый)}
@media print{.chart-data[open],.chart-data{display:block}.chart-data summary{display:none}.chart-data table{display:table}}
/* Групповой график: ряды различаются ФОРМОЙ (штриховка, контур), поэтому легенда
   обязательна — восемь форм без подписей это восемь загадок. */
.chart-legend{display:flex;flex-wrap:wrap;gap:var(--отступ-малый);font-size:var(--кегль-подпись);color:var(--цвет-текст-2);margin:var(--отступ-микро) 0}
.chart-legend-item{display:inline-flex;align-items:center;gap:var(--отступ-микро)}
.chart-swatch{width:12px;height:12px;flex:none}
/* Полотно, выросшее под тонкие столбики, ПРОКРУЧИВАЕТСЯ, а не сжимается: сжатое
   до нечитаемости оно врёт видом исправного графика. */
.chart-scroll{overflow-x:auto;max-width:100%}
.chart-scroll .chart{width:auto;max-width:none}
@media print{.chart-legend{display:flex}.chart-scroll{overflow:visible}.chart-scroll .chart{width:100%}}

/* Полнота клетки сводной: признак ставит ядро (Полна), браузер только красит подпись */
td.num.dsFull .cell-cov{color:var(--цвет-текст-3);opacity:.7}
td.num.dsPartial .cell-cov{color:var(--цвет-внимание)}
td.num.warn{color:var(--цвет-внимание)}
.cfWords summary{cursor:pointer;font-size:var(--кегль-подпись);color:var(--цвет-текст-2)}


/* Пакет 4.3: баннер давности данных в подписи выгрузки. Одно место на весь контур —
   фразу считает ядро (ДавностьДанных), здесь только вид. */
.давность{color:var(--цвет-внимание)}

/* Пояснение под органом и строка внимания: разметка ставила эти классы с 24.08,
   а правил для них не было — текст выглядел обычным (ревью удобства 18.09.2026). */
.hint{font-size:var(--кегль-служебный);color:var(--цвет-текст-3);margin:var(--отступ-малый) 0}
.warn{background:var(--подсветка-внимание);border:1px solid var(--цвет-внимание);color:var(--цвет-внимание);
  border-radius:var(--скругление);padding:var(--отступ-малый) var(--отступ-средний);margin:var(--отступ-малый) 0}
/* Блок графика в отчёте наборов: класс стоял в разметке без правила (сторож «у класса есть правило»). */
.chart-block{margin:var(--отступ-средний) 0}

/* ═══ ПОД ФЛАГОМ ОБОЛОЧКИ (веб-пакет «один продукт», волна 1) — ТОЛЬКО ТО, ЧЕГО ОБОЛОЧКА
   НЕ ЗНАЕТ ОБ ЭТОМ КОНТУРЕ. Шапку, ряд вкладок, полосы и «Выйти» рисует оболочка.css
   (src/Shared.Ui, копию кладёт сборка); здесь — стол роли, ширина рабочей области, отступы
   подписи выгрузки и оговорка на полосе. Без флага ни одно правило отсюда не действует. ═══ */

/* Стол роли — рядом с названием контура, приглушённо: «Стол бухгалтера» — слово-уточнение,
   не заголовок (роль уже названа в «кто я»). Уступает место после «кто я» (вес 1, у «кто я» — 1000). */
:root[data-оболочка="2"] #deskTitle{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-size:var(--кегль-служебный);font-weight:var(--начертание-обычное);
  color:var(--цвет-текст-2)}

/* Слот переключателя контуров на экране входа (#loginNav, вне #app; панель переносит app.js):
   строка поверхности над полосами, как строка шапки над столом. Поле слева — чтобы подложка
   текущего контура начиналась с края текста полос (поле панели — вынос обводки фокуса). */
:root[data-оболочка="2"] #loginNav{padding:0 var(--отступ-средний);background:var(--цвет-поверхность);
  border-bottom:1px solid var(--цвет-граница)}

/* Шапка — во всю ширину окна, как полосы над ней; содержимое (main, подвал) — прежней ширины
   по центру, с прежними полями. Поле сверху даёт САМ main, а не его первый ребёнок: верхний
   margin ребёнка схлопнулся бы наружу и сдвинул main вниз — замер «шапка до main». */
:root[data-оболочка="2"] .app{max-width:none;padding:0}
:root[data-оболочка="2"] .app > main,
:root[data-оболочка="2"] .app > .foot{max-width:1500px;margin-left:auto;margin-right:auto;
  padding-left:var(--отступ-крупный);padding-right:var(--отступ-крупный)}
:root[data-оболочка="2"] .app > main{padding-top:var(--отступ-средний)}
:root[data-оболочка="2"] .app > .foot{padding-bottom:var(--отступ-экран)}
:root[data-оболочка="2"] .stamp{margin:0 0 var(--отступ-средний)}
:root[data-оболочка="2"] .view{margin-top:0}

/* Оговорка основания сумм на полосе режима — в строку полосы: поля чипа .warn (8/12 px)
   выходили бы за строку высотой полосы и ложились на соседнюю. Цвет и рамка чипа прежние. */
:root[data-оболочка="2"] .сис-полоса .warn{padding:0 var(--отступ-малый);margin:0}

/* ПЛАНШЕТ И УЗКОЕ ОКНО (показ с iPad 28.09.2026; Chrome на iPad — движок WebKit). Три числа руководителя
   встают в ОДИН ряд, как только колонке достаётся 200 px (768 px портрета — уже три): прежние 260 px на колонку
   на 768–820 давали ряд «2 + 1», и третье число висело одно под первыми двумя. Уже 200 px — столбиком.
   Сетка таблиц Заказчика (.dsGrid) и карточки чисел не шире своей колонки: 320 px колонки на окне уже
   320 px вытолкнули бы страницу вбок. Только под флагом: без флага (откат WebShell) — как было. */
:root[data-оболочка="2"] .three{grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr))}
:root[data-оболочка="2"] .dsGrid{grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr))}
:root[data-оболочка="2"] .three > .big{min-width:0}
:root[data-оболочка="2"] .three > .big.big-переход{cursor:pointer}
:root[data-оболочка="2"] .three > .big.big-переход:active{background:var(--цвет-фон-нажатие)}
/* Широкие реестры и ведомости на портрете планшета: таблица не уже 900 px и ПРОКРУЧИВАЕТСЯ внутри своей
   обёртки (div.scroll сис-прокрутка; слой таблиц кладёт между ними своё окно .таблица-окно), а не сжимает колонки — на 768 px «Действующая цена» рвалась по слогу в строку.
   На 1024 px и шире обёртка сама шире 900 px, и вид прежний. Поимённо: узкие таблицы (ставки, ФОТ, периоды,
   разрезы движения денег) растягивать до 900 px незачем. Селектор — по классу контура .scroll, а не по
   .сис-прокрутка: вид органов оболочки даёт оболочка (сторож ОболочкаФинконтураTests). */
:root[data-оболочка="2"] .scroll table[data-таблица="договоры"],
:root[data-оболочка="2"] .scroll table[data-таблица="акты"],
:root[data-оболочка="2"] .scroll table[data-таблица="допсоглашения"],
:root[data-оболочка="2"] .scroll table[data-таблица="субподряд"],
:root[data-оболочка="2"] .scroll table[data-таблица="расхождения"],
:root[data-оболочка="2"] .scroll table[data-таблица="сверка"],
:root[data-оболочка="2"] .scroll table[data-таблица="рентабельность"],
:root[data-оболочка="2"] .scroll table[data-таблица="дс-месяцы"],
:root[data-оболочка="2"] .scroll table[data-таблица="итоги"]{min-width:900px}
/* Шифр объекта (первая колонка итогов, договоров, актов, субподряда) не рвётся по дефису: «26-100-01»
   в три строки на 768 px читался тремя разными числами. */
:root[data-оболочка="2"] table[data-таблица="итоги"] td:first-child,
:root[data-оболочка="2"] table[data-таблица="договоры"] td:first-child,
:root[data-оболочка="2"] table[data-таблица="акты"] td:first-child,
:root[data-оболочка="2"] table[data-таблица="субподряд"] td:first-child{white-space:nowrap}

/* ПЕЧАТЬ ПОД ФЛАГОМ. Поля main и подвала на листе — 0, как у всей рабочей области на печати до
   пакета (`.app{padding:0}` выше): экранные поля под флагом (16 px по бокам, 12 px сверху у main,
   32 px снизу у подвала) стоят вне @media и иначе доезжали до бумаги (ревью волны 1). Верхнее поле
   подвала — прежнее. ⛔ Блок стоит ПОСЛЕ экранных правил под флагом: специфичность та же, и печатный
   блок выше проиграл бы им порядком. «Кто я» с листа снят: шапка на листе подписывает лист
   контуром, столом и сборкой, а не тем, кто нажал «Печать». */
@media print{
  :root[data-оболочка="2"] .app > main{max-width:none;padding:0}
  :root[data-оболочка="2"] .app > .foot{max-width:none;padding-left:0;padding-right:0;padding-bottom:0}
  :root[data-оболочка="2"] #whoAmI{display:none}
}

/* Без флага (откат WebShell): органов, которых до пакета не было, — нет. Название контура
   и штамп сборки живут только в строке оболочки; слоты контуров без флага nav.js не заполняет. */
:root:not([data-оболочка="2"]) .сис-название,
:root:not([data-оболочка="2"]) .сис-контуры,
:root:not([data-оболочка="2"]) .сис-сборка{display:none}
