/* Раскладка сайта-приёмной поверх базы Nova (.nv-*). Шрифты — системные, внешних ссылок нет. */

/* Облик (палитра, углы, шрифты, линейки) задаёт `press.css` по образцу press-01.
   Здесь — только раскладка и поведение под размер экрана. Радиусы и цвета отсюда
   убраны намеренно: этот файл подключается ПОСЛЕ темы и перебивал бы её молча —
   ровно так у карточек оставались скруглённые углы при теме с прямыми. */

/* Кнопка действия: ширина по содержимому, а не во всю панель — растянутая кнопка
   самый заметный признак шаблонной страницы. */
.stack>.nv-btn{align-self:flex-start;min-width:180px}

/* Высота кнопки и поля. У Nova одинаковый вертикальный padding (13px), но у поля
   строка с обычным межстрочным, а у кнопки `line-height:1` — на экране это 50px против
   42px, и рядом в одной форме пара читается как съехавшая вёрстка (детектор признаков
   машинной вёрстки, `scripts/page_check.mjs`).

   Равняем межстрочным, а не распоркой `min-height`: высота тогда получается из текста,
   как у поля, и кнопка остаётся честной однострочной. С `min-height` совпадение было бы
   внешним — при другом кегле или двух словах пара снова разъехалась бы. */
.nv-btn{line-height:1.55}

/* Заголовок панели. В шаблоне внутри `.nv-panel__head` (мелкий надзаголовок капсом,
   11px, приглушённый) лежит `.nv-h2` (крупный, вес 800) — два разных приёма друг в друге.
   Наследуется `text-transform:uppercase` и цвет, а размер берётся свой: получается
   огромный жирный КАПС серым, который спорит с содержимым и ничего не сообщает. */
.nv-panel__head h1,.nv-panel__head h2{
  text-transform:none;letter-spacing:-.015em;
  font-size:19px;font-weight:600;color:var(--nv-text);line-height:1.25;
}
/* Заголовок страницы. У Nova `--nv-h2` = clamp(26…40px) при весе 800 — мера титула
   промо-страницы. «Панель» и «Мои заявки» такой мерой кричат на пустом месте: это
   названия рабочих экранов, а не обещания лендинга. Умеряем до 24px и веса 600 —
   заголовок остаётся первым в иерархии, но не спорит с данными под ним. */
main.wrap h1.nv-h2,main.wrap h2.nv-h2{font-size:24px;font-weight:600;letter-spacing:-.02em}
.uzkiy .nv-h2{font-size:22px;font-weight:650;letter-spacing:-.02em}

.wrap{max-width:1180px;margin:0 auto;padding:0 16px}
.shapka{background:var(--nv-surface);border-bottom:1px solid var(--nv-border,rgba(0,0,0,.08))}
.shapka__in{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;flex-wrap:wrap}
.logo{font-weight:800;letter-spacing:-.02em;text-decoration:none;color:var(--nv-text);font-size:18px}
/* Прямое начертание, не курсив: второе слово логотипа отличается весом и цветом
   (решение человека 07.09.2026 — курсив в заголовках снят по всем базам). */
.logo em{font-style:normal;font-weight:500;color:var(--nv-text-muted)}
.nav{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.nav a{text-decoration:none;color:var(--nv-text-muted)}
.nav a:hover{color:var(--nv-text)}
.inline{display:inline}
main.wrap{padding-top:20px;padding-bottom:40px}
.nv-card{margin-bottom:18px;padding:22px}
.uzkiy{max-width:440px;margin:40px auto}
.stack{display:flex;flex-direction:column;gap:12px}
.pole{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--nv-text-muted)}
.pole .nv-input{width:100%;box-sizing:border-box}
.nv-input--sm{padding:6px 10px;font-size:13px;width:160px}
.podpis{font-size:13px;color:var(--nv-text-muted);margin:8px 0 0}
.dim{color:var(--nv-text-dim)}
/* Метки исхода касания — радиокнопки, притворяющиеся пилюлями: выбор в один тап с
   телефона, но разметка остаётся формой, а не набором ссылок. Сам `input` не убран
   `display:none`, а спрятан размером — иначе он выпадает из обхода с клавиатуры. */
.metki{border:0;padding:0;margin:0}
.metki legend{font-size:13px;color:var(--nv-text-muted);padding:0;margin-bottom:8px}
.metki > div{display:inline-block;margin:0 6px 6px 0}
.metki label{
  display:inline-block;padding:7px 14px;border-radius:999px;cursor:pointer;
  font-size:13px;line-height:1.2;border:1px solid var(--nv-border);color:var(--nv-text-muted);
}
.metki input{position:absolute;width:1px;height:1px;opacity:0}
.metki label:hover{color:var(--nv-text);border-color:var(--nv-border-strong)}
.metki label:has(input:checked){
  background:var(--nv-text);color:var(--nv-bg);border-color:var(--nv-text);font-weight:600;
}
.metki label:has(input:focus-visible){outline:2px solid var(--nv-accent);outline-offset:2px}
.itogi{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0 0 4px;font-size:13px}
/* Вход = лендинг: форма слева и узкая, рассказ справа. Форма стоит ПЕРВОЙ в разметке —
   тот, кто уже знает пароль, не должен пролистывать рассказ на телефоне, а на широком
   экране порядок задаётся сеткой. */
.vhod-set{display:grid;grid-template-columns:minmax(300px,380px) minmax(0,1fr);gap:18px;align-items:start}
.vhod-set .nv-card{margin-bottom:0}
.vhod-forma{position:sticky;top:18px}
.vhod-rasskaz{display:flex;flex-direction:column;gap:18px}
.vygody li{margin-bottom:6px}
.shagi{margin:0 0 12px;padding-left:22px}
.shagi li{margin-bottom:8px}
/* Образец карточки: он должен читаться как чужой документ, а не как часть страницы —
   иначе выдуманные цифры примут за настоящие. */
.obrazets{border:1px solid var(--nv-border);border-radius:14px;padding:16px 18px;background:var(--nv-bg-deep)}
.obrazets h3{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--nv-text-dim);
  margin:14px 0 4px;font-family:var(--nv-font-mono)}
.obrazets h3:first-child{margin-top:0}
.obrazets p{margin:0}
.obrazets .cifry{display:grid;gap:4px 18px;margin:0}
.obrazets .cifry div{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dashed var(--nv-border);padding:3px 0}
.obrazets .cifry dt{color:var(--nv-text-muted)}
.obrazets .cifry dd{margin:0;font-weight:600;white-space:nowrap}
@media (max-width:860px){
  .vhod-set{grid-template-columns:1fr}
  .vhod-forma{position:static}
}
.komm .nv-pill{vertical-align:middle}
/* Города в списке менеджеров — группы внутри ОДНОЙ таблицы (по `tbody` на город), а не
   отдельная таблица на каждый: у независимых таблиц ширины колонок считаются порознь,
   и числа перестают стоять столбиком — видно глазами на четырёх группах (08.09.2026). */
.nv-table tr.gorod th{
  text-align:left;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  color:var(--nv-text-muted);padding-top:18px;border-bottom:none;white-space:nowrap;
  /* `height:auto` обязателен: Nova даёт КАЖДОЙ ячейке `height:var(--nv-row,44px)`, и
     подзаголовок группы вырастал до высоты полноценной строки — 44 px пустоты под
     названием города (замер 08.09.2026: th 52 px при строке текста 16 px). */
  height:auto;line-height:1.4;
}
.nv-table tbody:first-of-type tr.gorod th{padding-top:6px}
.tabl{overflow-x:auto}
/* Панель со списком не делит окно пополам: в сетке `.nv-dash` таблица получала 553px из
   1440 и прятала «Статус» с кнопкой за краем на ВСЕХ десктопных ширинах — форма подачи
   рядом того не стоит (замер судьи готовности, круг 2). Форма сверху, список во всю ширину. */
.nv-dash{grid-template-columns:1fr}
.nv-table td,.nv-table th{white-space:nowrap}
.nv-table td:nth-child(3){white-space:normal;min-width:180px}
.soobshcheniya{margin-bottom:14px}
.soobshchenie{padding:10px 14px;border-radius:12px;background:var(--nv-surface);border:1px solid var(--nv-border,rgba(0,0,0,.08));margin-bottom:8px}
/* Цвет сообщений выводится из токенов базы, а не подбирается на глаз: четыре хекса,
   стоявшие здесь до 07.09.2026, ни с чем в палитре Nova не были связаны. Проценты
   подобраны так, чтобы плашка осталась светлой подложкой, а не заливкой. */
.soobshchenie--success{
  border-color:color-mix(in srgb, var(--nv-success) 42%, transparent);
  background:color-mix(in srgb, var(--nv-success) 9%, var(--nv-surface))
}
.soobshchenie--error{
  border-color:color-mix(in srgb, var(--nv-danger) 38%, transparent);
  background:color-mix(in srgb, var(--nv-danger) 8%, var(--nv-surface))
}
.opisanie{display:grid;grid-template-columns:max-content 1fr;gap:8px 18px;margin:12px 0}
.opisanie dt{color:var(--nv-text-muted)}
.opisanie dd{margin:0}
.knopki{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:8px}
.komm{padding:10px 0;border-bottom:1px solid var(--nv-border,rgba(0,0,0,.08))}
.spisok{padding-left:18px}
.filtry{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
/* Поиск — короткая форма, а не полоса во всю панель: строка «ИНН или название» не бывает
   длиной 1100px, и растянутое поле выдаёт вёрстку по умолчанию. */
.poisk{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0;max-width:min(100%,520px)}
/* Ширина поля — резиновая: фиксированные 220px гнали документ вбок на 320–390px
   (замер судьи готовности, круг 3: 74/34/19/4 px). */
.poisk .nv-input--sm{flex:1 1 150px;min-width:0;max-width:100%;width:auto}
.stranicy{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px;font-size:13px}
.filtry a{text-decoration:none}
.otklonit{display:inline-flex;gap:6px;align-items:center;margin-top:4px}
.foot{font-size:12px;color:var(--nv-text-dim);padding-bottom:24px}
/* Таблица живёт в двух видах, и порог между ними — 720px, одним правилом на обе
   страницы (список менеджера и панель), чтобы фикс не применили к одной из двух.

   Узкий вид — карточки-строки. Без него на телефоне «Статус» и «Порог» уезжали на
   ~580px вправо во вложенной прокрутке (окно 297px, содержимое 879px), а на 641–880px
   «Статус» пропадал у списка (судья готовности, круги 3–4).

   ПОЧЕМУ 720, А НЕ 1400 (правка 07.09.2026 по замечанию человека). Порог 1400 стоял
   из-за колонки «Решение»: форма отклонения с полем причины занимала 398px из 958, и
   восемь колонок не влезали никуда — кнопка «Отклонить» читалась как «Откло». Лечили
   порогом, то есть на ЛЮБОМ экране уже 1400 показывали телефонный вид. На повёрнутом
   в книжную ориентацию мониторе (1067px) это выглядело нелепо: метка у левого края,
   значение у правого, между ними полэкрана пустоты — при том что таблица туда влезает
   целиком (замер: нужно 958, доступно 958).

   Теперь лечится причина, а не следствие: поле причины сужено и переносится под
   кнопку, а таблица прокручивается внутри своего контейнера, если колонок всё же
   больше, чем ширины. Прокрутка у таблицы, не у документа — тело страницы вбок
   не едет. */
@media (min-width:1400px){
  .wrap{max-width:1400px}
}

/* Средние экраны: таблица остаётся таблицей. Поле причины отклонения не должно
   раздувать колонку «Решение» — оно уходит под кнопки и занимает свою строку. */
@media (min-width:721px) and (max-width:1399px){
  .tabl{overflow-x:auto}
  .otklonit{flex-wrap:wrap;max-width:170px}
  .otklonit .nv-input--sm{flex:1 1 100%;width:100%;min-width:0}
  .nv-table td,.nv-table th{padding-left:6px;padding-right:6px}
  /* Комментарий менеджера под названием компании — самая «резиновая» ячейка; на
     средних ширинах он не должен растягивать колонку. */
  .nv-table td:nth-child(3){min-width:0;max-width:220px}
}

@media (max-width:720px){
  .tabl{overflow-x:visible}
  .tabl table{display:block;width:100%;max-width:100%;box-sizing:border-box}
  .tabl thead{display:none}
  .tabl tbody{display:block}
  .tabl tbody tr{display:block;padding:10px 0;border-bottom:1px solid var(--nv-border,rgba(0,0,0,.08))}
  /* Строка города — заголовок группы, а не карточка человека: без разделителя снизу,
     иначе на телефоне она читается как пустая учётка. */
  .tabl tbody tr.gorod{border-bottom:none;padding:0}
  .tabl tr.gorod th{display:block;padding:16px 0 2px}
  /* `flex-wrap` обязателен: метка колонки занимает 42%, а форма отклонения просит 100% —
     вместе 142%, и кнопка «Отклонить» вылезала за край карточки на телефоне (замер
     06.09.2026, круг 11: окно 390px, содержимое 334 при 308 видимых). */
  /* `height:auto` обязателен. База задаёт ячейке фиксированную высоту строки
     (`height:var(--nv-row,44px)`) — в таблице это ровный ритм, но в узком виде ячейка
     становится блоком с переносами, и всё, что выше 44 px, вылезает НАРУЖУ: подпись
     выручки «478 млн ₽, 2025» уезжала на следующую строку карточки и наезжала на
     «Статус» (снимок с телефона, 07.09.2026). Ни выравнивание, ни сетка этого не
     лечат — высота задана жёстко, и содержимое её просто не раздвигает. */
  /* Ячейка — СЕТКА, а не флекс: две колонки, метка и значение.

     На флексе значение, не влезшее рядом с меткой, переносилось на свою строку и
     вставало СЛЕВА, ломая колонку значений («ООО СТРОИТЕЛЬНЫЕ МАШИНЫ», снимок с
     телефона 07.09.2026). Починить выравниванием нельзя: текст в ячейке — анонимный
     элемент флекса, его не прижать ни `text-align`, ни `margin-left:auto`, потому что
     стилизовать анонимный элемент нечем. В сетке он занимает свою колонку целиком, и
     выравнивание наконец действует.

     `height:auto` обязателен и здесь: база задаёт ячейке фиксированную высоту строки
     (`height:var(--nv-row,44px)`), и содержимое выше неё вылезало наружу. */
  .tabl td{display:grid;grid-template-columns:minmax(0,40%) 1fr;gap:2px 10px;
           align-items:baseline;white-space:normal;border:0;padding:3px 0;
           height:auto;min-height:0}
  .tabl td>*{grid-column:2;justify-self:end;text-align:right;min-width:0}
  .tabl td::before{content:attr(data-st);color:var(--nv-text-dim);font-size:11px;
                   text-transform:uppercase;letter-spacing:.04em;
                   grid-column:1;text-align:left}
  /* Значение — в правой колонке и прижато к её правому краю; сюда же попадает голый
     текст ячейки (название компании, имя менеджера), для которого нет своего тега. */
  .tabl td{text-align:right}
  .tabl td:empty{display:none}
  /* «Решение» у закрытой заявки кнопок не содержит, но и пустой ячейкой не считается:
     внутри остаются пробелы шаблона, поэтому `:empty` её не ловит. На телефоне это
     давало голую строку «РЕШЕНИЕ» без значения под каждой отданной заявкой (снимок
     07.09.2026). Браузер без поддержки `:has` просто покажет её как раньше — хуже
     не станет. */
  .tabl td[data-st="Решение"]:not(:has(form)){display:none}
  /* Подпись под значением (выручка с годом, комментарий менеджера) в узком виде
     занимает свою строку и держится правого края — как само значение. Во флексе `<br>`
     не создаёт переноса, и подпись становилась ещё одним элементом строки: уезжала
     влево к метке и вылезала за нижнюю границу ячейки на 12 px, наезжая на следующую
     строку карточки (снимок с телефона, 07.09.2026). */
  .tabl td small{grid-column:2;justify-self:end;text-align:right;line-height:1.35}
  .tabl td br{display:none}
  /* Форма отклонения занимает всю правую колонку: поле причины во всю ширину, кнопки
     справа. Флекс внутри ячейки-сетки — здесь он уместен, речь про одну строку. */
  .tabl td form{grid-column:2;width:100%}
  .tabl .otklonit{display:flex;flex-wrap:wrap;justify-content:flex-end;width:100%}
  .tabl .nv-input--sm{width:100%;min-width:0}
  .nv-table td:nth-child(3){min-width:0}
}

@media (max-width:640px){
  .opisanie{grid-template-columns:1fr}
  .nv-card{padding:16px}
  .nv-dash{grid-template-columns:1fr}

  /* Шапка занимала 250px из 812 — треть экрана телефона: логотип строкой, меню в две
     строки, «Выйти» третьей. Ставим в одну строку: логотип сверху, под ним лента ссылок
     с горизонтальной прокруткой, если не помещается. Прокрутка — у ленты, не у документа
     (тело страницы вбок не ездит, правило отправляемого файла). */
  /* `flex-wrap:nowrap` здесь так же обязателен, как `min-width:0` у меню ниже. Базовое
     правило шапки разрешает перенос, а колоночный флекс С ПЕРЕНОСОМ меряет ширину
     колонки по самому широкому элементу — поэтому `align-items:stretch` не действует,
     и меню раздувало шапку до 417 px внутри контейнера 359. */
  .shapka__in{flex-direction:column;align-items:stretch;flex-wrap:nowrap;
              gap:6px;min-height:0;padding:8px 0}
  .logo{font-size:16px}
  /* Меню переносится на вторую строку, а не прокручивается лентой. Лента была бы
     компактнее, но о том, что её можно листать вбок, человек не догадывается: замер
     07.09.2026 — кнопка «Выйти» оказывалась за правым краем и не видна вовсе.
     Спрятанное действие хуже лишней строки в шапке.

     `min-width:0` всё равно обязателен: у элемента флекса минимальная ширина по
     умолчанию `auto`, он не сжимается ниже своего max-content, и меню раздувало шапку
     до 417 px внутри контейнера 359 (находка соседней сессии на нашей разметке). */
  .nav{gap:10px 12px;flex-wrap:wrap;font-size:14px;min-width:0}
  .nav>a,.nav>.inline{flex:0 0 auto;white-space:nowrap}

  /* Кнопка действия на телефоне — во всю ширину: там это не украшение, а размер цели
     под палец. На десктопе она остаётся по содержимому. */
  .stack>.nv-btn{align-self:stretch;width:100%}

  main.wrap{padding-top:14px}
  .nv-panel__head h1,.nv-panel__head h2{font-size:17px}

  /* Заголовок секции и поиск на телефоне не делят строку: «Мои заявки» ломалось на две
     строки и дралось с полем за ширину. Заголовок сверху, поиск под ним. */
  .nv-panel__head{flex-direction:column;align-items:stretch;gap:8px}
  .nv-panel__head .poisk{margin:0}

}

/* Поле ИНН: плейсхолдер занимает три строки, а поле высотой в две — человек видел
   обрубленный текст «через запятую или пробе…». Высоту задаём здесь, а не атрибутом
   `rows`, чтобы не трогать форму. */
.pole textarea[name="inn"]{min-height:76px}

/* Мера строки. Поле ввода во всю ширину панели (1140px) — признак вёрстки «по умолчанию»:
   в него никто не вводит строку такой длины, а взгляд теряет край. Форма подачи и
   пояснение под ней живут в колонке разумной меры, панель при этом остаётся широкой —
   таблице заявок ширина нужна (обоснование ниже, замер судьи готовности). */
.stack .pole,.stack .podpis{max-width:640px}

/* Узкий экран разворачивает плейсхолдер ИНН в три строки — поле обязано их вместить,
   иначе подсказка обрублена по нижнему краю. Блок стоит в конце файла намеренно: правило
   выше имеет ту же специфичность, и порядок здесь решает. */
@media (max-width:640px){
  .pole textarea[name="inn"]{min-height:108px}
}


/* Быстрая смена отметки в «Моих заявках» (21.09.2026): плашка под названием компании
   раскрывает список из шести отметок. Список — в потоке, а не всплывающим слоем: таблица
   на телефоне превращается в карточки, и слой поверх соседней строки там перекрывал бы
   чужую компанию. */
.metka-vybor{margin-top:4px}
.metka-vybor>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;
  min-height:32px;border-radius:6px}
.metka-vybor>summary::-webkit-details-marker{display:none}
.metka-vybor>summary:focus-visible{outline:2px solid var(--nv-accent);outline-offset:2px}
.metka-vybor__pusto{font-size:13px;color:var(--nv-text-muted);border:1px dashed var(--nv-border-strong);
  border-radius:999px;padding:2px 10px}
.metka-vybor__strelka{color:var(--nv-text-muted);font-size:12px;transition:transform .15s}
.metka-vybor[open] .metka-vybor__strelka{transform:rotate(180deg)}
.metka-vybor__spisok{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;max-width:420px}
.metka-vybor__spisok .nv-btn{border:1px solid var(--nv-border-strong);border-radius:999px}
.metka-vybor__spisok .nv-btn[disabled]{opacity:.55;cursor:default}
@media (hover:hover){.metka-vybor>summary:hover .metka-vybor__pusto{color:var(--nv-text)}}
@media (prefers-reduced-motion:reduce){.metka-vybor__strelka{transition:none}}
@media (max-width:640px){.metka-vybor__spisok .nv-btn{min-height:40px}}

/* Вкладка «Команда» (22.09.2026): плитки итога, блоки по городам, плашки давности. Цвета —
   только токены базы, как у соседних экранов. */
.kmd-plitki{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-top:14px}
.kmd-plitki>div{border:1px solid var(--nv-border);border-radius:10px;padding:10px 6px;text-align:center}
.kmd-plitki b{display:block;font-size:24px;line-height:1.1;font-variant-numeric:tabular-nums}
.kmd-plitki span{font-size:12px;color:var(--nv-text-muted)}
.kmd-plitki__akc{border-color:var(--nv-success)!important}
.kmd-plitki__akc b{color:var(--nv-success)}
.kmd-blok__head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.kmd-mini{font-size:11px;font-weight:600;padding:1px 7px;border-radius:99px;border:1px solid var(--nv-border-strong);color:var(--nv-text-muted);white-space:nowrap}
.kmd-tag{font-size:12px;font-weight:600;border-radius:99px;padding:2px 9px;white-space:nowrap}
.kmd-tag--ok{color:var(--nv-success);background:rgba(23,160,92,.12)}
.kmd-tag--mid,.kmd-tag--old{color:var(--nv-warning);background:rgba(232,114,12,.12)}
.kmd-tag--net{color:var(--nv-danger);background:rgba(228,58,93,.10)}
td.kmd-malo{color:var(--nv-danger);font-weight:700}
/* Одна сетка колонок во всех блоках: таблицы стоят друг под другом и читаются столбцом. */
@media (min-width:641px){.kmd-blok table{table-layout:fixed}.kmd-blok th:nth-child(1){width:34%}.kmd-blok th:nth-child(2){width:24%}}
@media (max-width:900px){.kmd-plitki{grid-template-columns:repeat(4,1fr)}}
@media (max-width:640px){.kmd-plitki{grid-template-columns:repeat(2,1fr)}}
