/* OpenHub — лист инсталляции: то, чего нет и не может быть в UI-ките.
 *
 * ВТОРОЙ В КАСКАДЕ. Базовый лист кита (oscript-ui.css) приезжает первым тегом <link>,
 * этот — вторым, поэтому правило отсюда перебивает китовое той же специфичностью.
 * Всё, что рисует примитивы кита, живёт в его листе; сюда попадает только то, чей
 * печатающий живёт в хабе.
 *
 * ХЕШ СОДЕРЖИМОГО В АДРЕСЕ. Файл лежит на диске БЕЗ версии в имени, а отдаётся по адресу
 * /static/openhub-<хеш>.css, где хеш — префикс SHA-256 этого файла (считает
 * ОтпечаткиСтатики кита). Любая правка сама меняет адрес.
 *
 * НИ ОДНОГО ЦВЕТА. Значения берутся из CSS-переменных, которые сервер печатает инлайном
 * в <head> (ТокеныТемы кита).
 */

/* --- требования к паролю рядом с полем ввода -------------------------------------
   Список печатает сервер, спросив политику; скрипт лишь помечает выполненные по мере
   набора. Состояние несёт СИМВОЛ отметки, а не только цвет: без цвета список читается
   так же, и без скрипта остаётся обычным списком требований.

   Блок собран элементами кита, поэтому своих имён классов у него нет: и оформление,
   и скрипт находят его по тем же признакам (data-pwreq, data-pwrule, data-pwmark),
   а не по второму, параллельному адресу. Классы состояния добавляет скрипт. */

[data-pwreq] { margin: var(--space-2) 0 0; font-size: var(--font-size-small); color: var(--color-text-muted); }
[data-pwreq] > p { margin: 0 0 var(--space-1); }
[data-pwreq] > ul { list-style: none; margin: 0; padding: 0; }
[data-pwrule] { display: flex; gap: var(--space-2); align-items: baseline; }
[data-pwmark] { flex: 0 0 1em; text-align: center; }
.pwreq__item--ok { color: var(--color-success); }
.pwreq__item--fail { color: var(--color-danger); }

/* --- панель сохранения: «есть несохранённое» ------------------------------------
   Сама панель — компонент кита, а вот состояние «форма тронута» навешивает скрипт
   ЭТОЙ инсталляции (openhub.js, раздел «панель сохранения»). Кит скриптов не везёт
   и такого класса никогда не создаёт, поэтому правило состояния живёт здесь — рядом
   с тем, кто его ставит. */

.savebar--dirty { box-shadow: var(--shadow-lg); }
