/* ДИЗАЙН-КОД. Один файл на все разделы хозяйства — не только на Контур.

   Решение владельца 10.09.2026, после того как он прошёл по разделам и увидел
   Агента WB в прежнем оформлении: внешние программы (свой код, свой стек, свой
   сервер) Контур не переписывает, но лицо у хозяйства должно быть одно. Значит
   Контур отдаёт лицо файлом, а каждый раздел его подключает у себя одной строкой:

       <link rel="stylesheet"
             href="https://contur.wb68358.shotplanet.com/static/design.css">

   Файл отдаётся без входа и без билета — это оформление, а не данные. Подробности
   для соседей, что подхватится само и что нет: `docs/Дизайн-код для разделов.md`.

   **Копий этого файла быть не должно.** Скопированный к себе он замерзает в том
   виде, в каком его скопировали, и через месяц разделы снова разъедутся — ровно
   та беда, из-за которой файл и появился. Ссылка живая: правку цвета здесь
   назавтра видят все.

   Что внутри: переменные (цвет, радиус, размытие) и правила для голых тегов —
   тело страницы, заголовки, ссылки, таблица `.grid`, пометки `.ok/.bad/.warn`.
   Всё, что принадлежит одному Контуру — шапка-док, плитки главной, экраны ТСД,
   производственное задание, — лежит рядом в `style.css` и сюда не попадает.

   **Правило, которое держит это всё:** ни один цвет и ни один радиус не пишется
   в правиле компонента. Всё берётся из переменных, и тема меняет только их.
   Цвет, написанный прямо в компоненте, живёт ровно в одной теме, а во второй
   становится чёрным по чёрному — и заметит это не разработчик, а человек в цеху. */

:root {
  color-scheme: light;
  /* — светлая: системная — */
  --bg: #eef0f5;
  /* Бледные обои и в светлой теме: без цвета под стеклом насыщать нечего, и док
     днём выглядел плоским. Пятна взяты предельно слабыми — панели белые, и главным
     на экране должны остаться числа, а не фон. Тот же рисунок, что в тёмной теме,
     только светлее: синее слева сверху, розовое справа, мятное снизу. */
  --bg-image:
    radial-gradient(1100px 700px at 8% -12%, #dfe8ff 0%, rgba(223, 232, 255, 0) 62%),
    radial-gradient(900px 620px at 94% 0%, #ffe9f1 0%, rgba(255, 233, 241, 0) 58%),
    radial-gradient(950px 720px at 58% 108%, #e2f5ec 0%, rgba(226, 245, 236, 0) 62%);
  --card: #ffffff;
  --card-2: #f7f7fa;               /* шапка таблицы, подложка итогов */
  /* Всплывающее меню. **Отдельно от `--card`, и вот почему:** карточка лежит в потоке
     страницы, а меню висит **над** текстом. Полупрозрачная карточка ночью пропускала
     сквозь себя заголовок и абзац под ней, и пункты читались поверх чужих строк. */
  --popover: #ffffff;
  --ink: #1c1c1e;
  /* Приглушённые и сигнальные тона светлой темы — по замеру контраста на всех экранах,
     а не по красоте в палитре: на подложках своего же оттенка (жёлтой, красной) они
     проседали до 3,9–4,4 при норме 4,5. */
  --dim: #62626a;
  --faint: #86868b;
  --line: rgba(60, 60, 67, .16);
  --line-soft: rgba(60, 60, 67, .09);
  /* Кант материала. Ровный и по всему периметру: полоса только сверху — это веб-приём,
     а не системное стекло. Полупиксель, чтобы на ретине читался как волосок. */
  --edge: none;
  --accent: #007aff;
  /* Цвет **текста** акцентом отдельно от цвета заливки: системный голубой на белом
     даёт 3,8 при норме 4,5, а пункты дока набраны в 12,5 пункта. Заливке это не мешает
     (на ней белым), поэтому у неё свой тон. Замерено на всех экранах, а не на глаз. */
  --accent-ink: #0063cc;
  --accent-solid: #0068d6;
  --th-ink: var(--dim);
  --ok: #1f7a35;
  --bad: #c8000f;
  --warn: #9a4a00;
  /* Заливка кнопки — отдельным тоном от текста. Сигнальные цвета тёмной темы светлые
     (иначе их не видно на тёмном), и белая надпись на такой заливке даёт контраст 2,0.
     Днём тон совпадает, ночью — свой. */
  --ok-solid: #1f7a35;
  --bad-solid: #c8000f;
  --fill: rgba(120, 120, 128, .16);      /* вторичная кнопка */
  --fill-hi: rgba(120, 120, 128, .26);
  --tint-accent: rgba(0, 122, 255, .12);
  --tint-ok: rgba(36, 138, 61, .12);
  --tint-bad: rgba(200, 0, 15, .09);
  --tint-warn: rgba(154, 74, 0, .10);
  --tint-row: rgba(120, 120, 128, .08);  /* наведение на строку таблицы */
  /* Радиусы одни на обе темы. Сперва они были разными — 12 днём и 20 ночью, каждый
     из своего варианта, — и разница читалась глазом при переключении: форма прыгала,
     хотя менялся только материал. Форма — это язык, и он не меняется от времени суток. */
  --radius: 16px;
  --radius-ctl: 12px;
  --radius-dock: 26px;
  --blur: none;
  --shadow: none;
  /* Подложка дока. **Чем меньше доля белого, тем сильнее сквозь неё видно** то,
     что проезжает под шапкой. .60 → .50 → .25 за 13.09.2026, последнее — вслед
     за ночной темой, чтобы доля была одна на обе (владелец).

     **Днём это работает не так, как ночью.** Ночью док темнее фона, и белое его
     оттуда вытягивает; днём панель и так почти в цвет фона, а вся разница — в том,
     что проезжает под стеклом. Поэтому здесь .25 — не «плотнее», а «сквозь док
     заметнее содержимое»: под ним едут чёрный текст таблицы и красные строки,
     и синие ссылки дока стоят уже не на ровном белом.

     `tests/test_палитра.py` этого не поймает: он считает пару «ссылка на подложке»
     по ровному фону, а не по случайной картинке под стеклом. Если днём ссылки в шапке
     начнут спотыкаться о проезжающие строки — поднимать сюда, а не трогать `--accent-ink`.

     **.25 → .55 (17.09.2026, вечер)** — единственное, что переносится из замера
     нативной панели iOS: у неё днём белого ровно .55 (`решения/шапка-и-док.md`).
     **Размытие при этом не трогали.** Первый заход в тот же вечер ставил вместе
     с тинтом и нативный `blur(1px)` — и док стал стеклянным ровно в дурном смысле:
     сквозь него читался заголовок страницы. В вебе тинт и размытие — не замена
     друг другу: нативный материал душит мелкую деталь отдельно от общего тона,
     а плоская заливка так не умеет, и деталь гасит только размытие.

     **Ночью .55 недостижимо** — не по вкусу, а по читаемости: синие ссылки дока
     лежат на этой же подложке и дают 1,43 при норме 4,5 (при .22 — 4,55). Поэтому
     правило «доля белого одна на обе темы» (владелец, 13.09) здесь нарушено
     намеренно: день .55, ночь .22. Вернуть единство можно, только осветлив
     `--accent-ink`, а это цвет ссылок на всех ночных экранах. */
  --bar: rgba(255, 255, 255, .55);
  /* Док и подсветка курсором.

     **Материал ровный.** Никакого градиента сверху вниз и никакой яркой полосы по
     верхней кромке: и то и другое — веб-приём, по которому «стекло» сразу видно как
     нарисованное. Системный материал — это равномерная полупрозрачная заливка плюс
     размытие с подъёмом насыщенности; всё, что отличает его от плоского цвета, —
     то, что сквозь него видно.

     **Кант — волосок по всему периметру**, полупиксель, слабый. Он очерчивает форму,
     а не бликует. */
  /* Насыщенность выше обычной вдвое с лишним — так у системных материалов: цвет,
     проходящий под панелью, не сереет от размытия, а наливается. На ровном сером
     фоне этого не видно вовсе; видно там, где под доком проезжает содержимое. */
  --dock-blur: saturate(250%) blur(30px);
  --dock-edge: inset 0 0 0 .5px rgba(255, 255, 255, .55);
  --dock-shadow: 0 8px 28px rgba(20, 25, 45, .14), 0 1px 2px rgba(20, 25, 45, .08);
  /* Сколько места занимает плавающая шапка сверху — под ней прилипают шапки длинных
     таблиц, иначе они липнут к верху окна и уезжают ей под низ. Здесь стоит обычная
     высота; страница, которой важно попасть точно, меряет свою шапку и переписывает
     эту переменную у себя. */
  --dock-height: 84px;
  /* Линза днём — **чуть темнее** поверхности, а не светлее: панели белые, и белым
     по белому подсветки не видно вовсе. Стеклом её делает яркий кант по периметру
     и холодный оттенок заливки, а не осветление. */
  --lens: rgba(118, 132, 160, .18);
  --lens-edge: inset 0 0 0 .5px rgba(255, 255, 255, .95);
  --lens-shadow: 0 3px 10px rgba(20, 25, 45, .14);
  --lens-blur: saturate(210%) blur(14px);
  --sheen: rgba(255, 255, 255, .30);
}

/* Тёмная приходит по системе; явный выбор темы перебивает её в обе стороны. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --bg: #0d0f14;
    /* Обои под стеклом: без них стекло — просто тёмно-серый. Пятна приглушены
       13.09.2026 по просьбе владельца — на 40% к фону, рисунок и места те же.
       Ночью панели полупрозрачные, и всё, что налито в обои, всходит сквозь них:
       плитка берёт цвет пятна под собой, а док с его `saturate(280%)` наливается
       вдвое сильнее. Поэтому «убавить подсветку» — это про обои, а не про панели. */
    --bg-image:
      radial-gradient(1100px 700px at 10% -10%, #15203c 0%, rgba(21, 32, 60, 0) 60%),
      radial-gradient(900px 600px at 92% 4%, #281728 0%, rgba(40, 23, 40, 0) 58%),
      radial-gradient(900px 700px at 62% 100%, #0f2422 0%, rgba(15, 36, 34, 0) 62%);
    --card: rgba(255, 255, 255, .10);
    --popover: rgba(30, 33, 42, .97);
    /* Шапка таблицы — единственная подложка, которая ночью **не** стеклянная (владелец,
       13.09.2026: «сделать как в дневной теме»). Она липкая: под ней едут строки,
       а размытие её не спасает — `backdrop-filter` не применяется к ячейкам таблицы
       (на заголовке группы его нет вовсе, и именно он на снимке владельца наложился
       на строку «Вешалка ВШ-1 белый»). Днём подложка сплошная — и потому дефекта нет;
       ночью теперь так же. Цвет подобран по композиту прежнего стекла: панель `.10`
       плюс шапка `.14` поверх обоев давали примерно этот тон. */
    --card-2: #383c45;
    --ink: #f2f2f7;
    /* Приглушённые тона тёмной темы подняты по замеру: на полупрозрачной панели поверх
       светлого пятна обоев прежние давали 4,0 при норме 4,5. «Приглушённый» — это
       второстепенный, а не нечитаемый. */
    --dim: #b6b6bd;
    --faint: #9a9aa2;
    --line: rgba(255, 255, 255, .18);
    --line-soft: rgba(255, 255, 255, .10);
    --edge: inset 0 0 0 .5px rgba(255, 255, 255, .08);
    --accent: #0a84ff;
    --accent-ink: #a2d1ff;  /* было #6cb6ff: осветлено 17.09.2026 под белый док .30; с 25.09 док тёмный — см. --bar ниже */
    --accent-solid: #0a6fe0;
    /* Шапка таблицы на светлой подложке тёмной темы давала 4,0 — здесь свой тон. */
    --th-ink: #c9c9cf;
    --ok: #30d158;
    --ok-solid: #1d7a3a;
    --bad-solid: #c4162a;
    --bad: #ff7b7b;
    --warn: #ffb340;
    --fill: rgba(255, 255, 255, .14);
    --fill-hi: rgba(255, 255, 255, .22);
    --tint-accent: rgba(10, 132, 255, .22);
    --tint-ok: rgba(48, 209, 88, .18);
    --tint-bad: rgba(255, 69, 58, .20);
    --tint-warn: rgba(255, 159, 10, .20);
    --tint-row: rgba(255, 255, 255, .07);
    /* Радиусы не переопределяем: см. светлую тему — форма одна на обе. */
    --blur: saturate(260%) blur(24px);
    --shadow: 0 8px 28px rgba(0, 0, 0, .35);
    /* Доля белого в доке. За 13.09.2026 прошла .11 → .08 → .10 → .15 → .25, и последний
       шаг сделан не на глаз, а по замеру пикселей: док сравнивался с фоном рядом с ним
       в двух точках, слева (синее пятно обоев) и справа (малиновое).

       **Заметность дока — это разрыв с фоном, а не яркость панели.** Слева док темнее
       того, что лежит под ним, и подъём белого сперва подтягивает его к фону, а не
       отдаляет. Контраст левой половины по замеру: .08 → 1,11; .10 → 1,09; .15 → 1,03
       (почти слияние — владелец увидел это как «стало прозрачнее», хотя белого добавили);
       .20 → 1,18; .25 → 1,37. Справа монотонно: 1,27 / 1,28 / 1,45 / 1,67 / 1,92.
       Просилось .25, стоит .22 — и упёрлось это не в красоту, а в читаемость: синие
       ссылки дока ночью лежат на этой же подложке, и чем больше в ней белого, тем
       ближе они к ней по светлоте. .25 даёт 4,06 при норме 4,5 (`test_палитра.py`
       ловит это сразу), .22 — 4,55, последнее проходящее. Кромка при .22 держится:
       слева 1,30 вместо 1,37 у .25. Поднять выше можно, только осветлив `--accent-ink`,
       а это цвет ссылок на всех ночных экранах, не только в шапке.

       Замер повторяется так: снять главную в тёмной теме, взять средний цвет дока
       (y 45–85) и фона под ним (y 140–175) слева и справа, посчитать контраст. */
    /* **.22 → .30 (17.09.2026, вечер).** Потолок 13.09 был не в красоте, а в паре
       «синяя ссылка на этой подложке»: .25 давало 4,06 при норме 4,5. Потолок снят
       не подъёмом белого, а осветлением самой ссылки — `--accent-ink` ниже ушёл
       с `#6cb6ff` на `#a2d1ff`, и .30 проходит.

       **Выше .30 хода нет.** Считано: .40 требует почти белой ссылки (`#e9f4ff`),
       а она перестаёт читаться как ссылка; нативные .55 не берутся **даже чистым
       белым** — контраст физически не набирается. То есть у дневного нативного
       тинта (.55) ночного близнеца не существует, и правило «доля белого одна
       на обе темы» здесь нарушено не по недосмотру. */
    /* **Белое .30 → тёмное стекло (25.09.2026, решение Андрея «делай для всех»).**
       Белое сквозь тёмный фон даёт серое: ночью док висел серой полосой над тёмными
       панелями «Чата правления», который по просьбе заказчика сделал ночь «как в
       Safari». У системы ночное стекло само тёмное, светлеет только кромка — так и
       здесь. Значение — то, что чат кладёт у себя: `--popover` с прозрачностью 62 %
       плюс `--tint-row`, сведённые в одно (их записка 25.09).
       Тупик выше («выше .30 хода нет») был тупиком белого: тёмная подложка
       отодвигает светлый текст, а не приближает. Ссылка дока 4,51 → 8,96, над
       розовым пятном обоев (#281728) 3,91 → 8,38; `--ink` 12,9, `--dim` 7,1.
       `--bar` общий: ночью темнеют все панели на нём, у нас и у разделов.
       Кромка .14 → .22: на тёмном волосок .14 терялся; .22 — ещё волосок, не блик. */
    --bar: rgba(55, 58, 66, .63);
    --dock-blur: saturate(280%) blur(30px);
    --dock-edge: inset 0 0 0 .5px rgba(255, 255, 255, .22);
    --dock-shadow: 0 12px 36px rgba(0, 0, 0, .5), 0 1px 2px rgba(0, 0, 0, .35);
    /* Ночью наоборот: поверхность тёмная, и линза осветляет. */
    --lens: rgba(255, 255, 255, .26);
    --lens-edge: inset 0 0 0 .5px rgba(255, 255, 255, .38);
    --lens-shadow: 0 3px 12px rgba(0, 0, 0, .45);
    --lens-blur: saturate(220%) blur(12px);
    --sheen: rgba(255, 255, 255, .16);
  }
}

* { box-sizing: border-box; }
/* Скрытое должно быть скрыто. `.row { display: flex }` перебивает браузерное
   `[hidden] { display: none }` — правило автора старше правила браузера, — и кнопка
   «Отправить в производство» показывалась над пустым набором. Поймано на стенде. */
[hidden] { display: none !important; }
/* SF Pro Rounded — просьба владельца. `ui-rounded` это та же гарнитура, но названная
   так, как её понимает браузер; имя «SF Pro Rounded» рядом — для тех, у кого она
   поставлена отдельным шрифтом. Дальше обычная лесенка: на цеховом мини-ПК и на ТСД
   скруглённой системной может не быть вовсе, и там встанет привычный системный шрифт. */
body { margin: 0; background-color: var(--bg); background-image: var(--bg-image);
  background-attachment: fixed; color: var(--ink);
  font: 16px/1.5 ui-rounded, "SF Pro Rounded", -apple-system, "Segoe UI",
        Roboto, sans-serif; -webkit-font-smoothing: antialiased; }
/* Поля и кнопки своей гарнитуры не наследуют — им надо сказать отдельно, иначе
   в форме будет один шрифт, а вокруг другой. */
button, input, select, textarea { font-family: inherit; }
/* Заголовки набраны SF Pro Display: на крупных кеглях у неё плотнее межбуквенное,
   и «Производственное задание» перестаёт выглядеть разъехавшимся. */
h1, h2, h3, .brand { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display",
  "Segoe UI", Roboto, sans-serif; letter-spacing: -.015em; }
h1 { font-size: 25px; margin: 0 0 4px; font-weight: 600; }
h2 { font-size: 18px; margin: 28px 0 8px; font-weight: 600; }
h3 { font-size: 16px; margin: 20px 0 6px; font-weight: 600; }
/* Ссылка в тексте — акцентом и без подчёркивания; подчёркиваются только те, что стоят
   среди слов: в списке и в таблице их иначе не отличить от обычного текста.
   Плитки и кнопки-ссылки сюда не попадают — у них свои правила ниже. */
a { color: var(--accent-ink); text-decoration: none; }
p a, li a { text-decoration: underline; text-underline-offset: .18em; }
/* Номер билета, имя команды, путь к файлу — набираются моноширинным, иначе среди
   обычного текста они читаются как опечатка. */
code { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: .88em;
  background: var(--fill); padding: 1px 6px; border-radius: 6px; }
::selection { background: var(--tint-accent); }
::placeholder { color: var(--faint); }
input[type=checkbox], input[type=radio] { accent-color: var(--accent); }
