/* ui/components.css — общие компоненты инструментов ОКО (визуальная волна сведения поверхностей).
 *
 * Зачем: семейства .lic-* (лицензии) и .acc-* (допуски и списки) были СКОПИРОВАНЫ между
 * operator.html и system_configurator.html и разошлись — из 42 общих селекторов у 36 разъехались
 * тела: другие размеры (имя 19px против 16px, значок 34px против 30px) и другие имена токенов
 * (--green/--amber/--secondary против --ok-chip-fg/--warn/--fg-muted). Из-за этого одна и та же
 * лицензия и один и тот же статус выглядели разными элементами в двух окнах.
 *
 * Комментарий самого конфигуратора при этом гласил: «Вид тот же, что в пульте — экран один и тот
 * же, разница ровно в одном: здесь состав ПРАВЯТ». То есть расхождение — это дрейф копий, а не
 * замысел. Канон взят из operator.html (там канонические токены), имена токенов нормализованы.
 *
 * Инжектируется сервером (_serve_html) в <head> ПЕРЕД собственным <style> страницы: страница при
 * необходимости может доопределить своё, но базовый вид один.
 */

/* ——— Лицензия: карточка, панели групп, типы, строки сценариев (DS-14 /api/licenses) ———
   Пульт ТОЛЬКО ЧИТАЕТ конфигурацию, переключателей там нет намеренно: состав меняют в системном
   конфигураторе. Разница поверхностей — в наличии органов правки, а не в облике. */
.lic-card{border:1px solid var(--divider);border-radius:var(--radius);background:var(--card);padding:12px;margin:2px 0 10px}
.lic-hd{display:flex;gap:10px;align-items:flex-start}
.lic-ico{width:30px;height:30px;border-radius:8px;background:var(--chip-bg);color:var(--fg-muted);
  display:flex;align-items:center;justify-content:center;flex:none;font-size:15px}
.lic-nm{font-family:var(--font-head);font-size:16px;font-weight:700;color:var(--fg);line-height:1.2}
.lic-sub{color:var(--fg-muted);font-size:10.5px;margin-top:1px}
.lic-stats{display:flex;gap:26px;margin-top:11px;padding-top:10px;border-top:1px solid var(--divider);flex-wrap:wrap}
.lic-stats .k{color:var(--fg-muted);font-size:9px;text-transform:uppercase;letter-spacing:.04em}
.lic-stats .v{color:var(--fg);font-size:12.5px;font-weight:700;margin-top:2px}
.lic-stats .v.ok{color:var(--ok)}
.lic-stats .v.bad{color:var(--danger)}
.lic-sect{display:flex;align-items:flex-end;gap:12px;margin:12px 0 8px}
.lic-sect-t{font-family:var(--font-head);font-size:13.5px;font-weight:700;color:var(--fg)}
.lic-sect-s{color:var(--fg-muted);font-size:10px;margin-top:1px}
.lic-sect-c{margin-left:auto;color:var(--ok);font-size:11px;font-weight:700;white-space:nowrap}
.lic-grp{border:1px solid var(--divider);border-radius:var(--radius);overflow:hidden;margin-bottom:8px}
.lic-grp-h{display:flex;align-items:center;gap:6px;padding:8px 10px;background:var(--chip-bg);cursor:pointer}
.lic-grp-h b{font-size:12px;color:var(--fg)}
.lic-grp-h .cnt{margin-left:auto;color:var(--fg-muted);font-size:10px;font-weight:600;white-space:nowrap}
.lic-type{padding:9px 10px 3px;color:var(--fg-muted);font-size:9px;font-weight:700;
  text-transform:uppercase;letter-spacing:.06em;cursor:pointer;display:flex;gap:5px;align-items:center}
.lic-type .cnt{margin-left:auto;letter-spacing:0}
.lic-row{display:flex;align-items:center;gap:8px;padding:5px 10px 5px 14px;border-top:1px solid var(--divider)}
.lic-row:first-of-type{border-top:none}
.lic-chk{width:15px;height:15px;border-radius:50%;flex:none;display:flex;align-items:center;
  justify-content:center;font-size:9px;font-weight:700;color:var(--on-ok);background:var(--ok)}
.lic-chk.off{background:var(--chip-bg);color:var(--fg-muted)}
.lic-row .t{font-size:11.5px;color:var(--fg);flex:1}
.lic-row.off .t{color:var(--fg-muted)}
.lic-sev{width:6px;height:6px;border-radius:50%;flex:none}
.lic-foot{color:var(--fg-muted);font-size:9.5px;padding:2px 0 4px}

/* Готовность сценария — ВТОРОЙ признак рядом с «активен». Активен значит «куплено», готов —
   «требования выполнены»: без второго признака экран отвечал бы на вопрос, которого не задавали. */
.lic-rd{font-size:9px;font-weight:700;padding:1px 6px;border-radius:9px;white-space:nowrap;flex:none}
.lic-rd.ready{background:var(--ok-chip-bg);color:var(--ok-chip-fg)}
.lic-rd.blocked{background:var(--danger-chip-bg);color:var(--danger)}
.lic-rd.unknown{background:var(--chip-bg);color:var(--fg-muted)}

/* Приёмочная метка НЕ заливается цветом, а обводится: две одинаково залитые плашки рядом
   читались бы как одна оценка в двух экземплярах, а это ответы на разные вопросы. */
.lic-acc{font-size:9px;font-weight:700;padding:0 5px;border-radius:9px;white-space:nowrap;
  flex:none;background:transparent;border:1px solid var(--fg-muted);color:var(--fg-muted);
  margin-left:4px;opacity:.85}
.lic-acc.ready{border-color:var(--ok-chip-fg);color:var(--ok-chip-fg);opacity:1}
.lic-acc.blocked{border-color:var(--danger);color:var(--danger)}

/* ——— Допуски и списки ———
   Эффект подписан у СПИСКА, а не у записи: если бы он жил у записи, один список содержал бы
   строки с противоположным смыслом и его имя перестало бы что-либо значить. */
.acc-eff{font-size:9px;font-weight:700;padding:1px 7px;border-radius:9px;white-space:nowrap;flex:none}
.acc-eff.allow{background:var(--ok-chip-bg);color:var(--ok-chip-fg)}
.acc-eff.allow_notify{background:var(--chip-bg);color:var(--warn)}
.acc-eff.deny,.acc-eff.deny_alarm{background:var(--danger-chip-bg);color:var(--danger)}
.acc-st{font-size:9px;font-weight:700;padding:1px 6px;border-radius:9px;white-space:nowrap;flex:none}
.acc-st.active{background:var(--ok-chip-bg);color:var(--ok-chip-fg)}
.acc-st.pending{background:var(--chip-bg);color:var(--warn)}
.acc-st.expired,.acc-st.revoked{background:var(--chip-bg);color:var(--fg-muted)}
.acc-form{border:1px solid var(--divider);border-radius:var(--radius);background:var(--card);
  padding:10px;margin:6px 0 4px}
.acc-form label{display:inline-flex;flex-direction:column;gap:2px;font-size:9px;color:var(--fg-muted);
  text-transform:uppercase;letter-spacing:.04em;margin:0 10px 8px 0}
.acc-form input,.acc-form select{font-size:11px;padding:3px 5px;min-width:110px;
  background:var(--card);color:var(--fg);border:1px solid var(--divider);border-radius:4px}
.acc-form .fr{display:flex;flex-wrap:wrap;align-items:flex-end}
/* Строка списка допусков — была только в конфигураторе; имена токенов приведены к каноническим
   (--primary→--brand, --secondary→--fg-muted), чтобы правило работало на обеих поверхностях. */
.acc-li{display:flex;gap:8px;align-items:center;padding:7px 2px;border-top:1px solid var(--divider);cursor:pointer}
.acc-li:first-child{border-top:none}
.acc-nm{font-size:12px;font-weight:600;color:var(--brand)}
.acc-sub{font-size:10.5px;color:var(--fg-muted)}
.acc-dot{width:8px;height:8px;border-radius:50%;flex:none}
