/* admin_s5.css — этап 5 админки «Загрузки, Ночь, Система» и «Кредиты» (docs/admin-redesign/README.md §4, §6; макеты
 * night-1440.png, night-375.png). Поверх style.css / vault.css / admin_*.css, те же токены, классы adm-*.
 * Итог — значком и словом, цвет только в помощь: готово — зелёный, частично — жёлтый, сбой — красный, пропущена — серый.
 * Телефон: одна колонка, таблицы — карточками, кнопки во всю ширину; под пальцем — 44 точки.
 */
.adm-bad { color: #ff7a7e; }
.adm-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 12px; }
.adm-s5-who { color: var(--text); text-decoration: none; font-weight: 600; }
.adm-s5-who:hover { color: var(--accent); }
.adm-s5-who:focus-visible, .adm-nt-all:focus-visible, .adm-cr-mk a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ── Полоска «из потолка» и маленькие столбики ── */
.adm-s5-meter { display: block; height: 4px; border-radius: 2px; background: var(--border-strong); overflow: hidden; margin: 2px 0 4px; }
.adm-s5-meter i { display: block; height: 100%; background: var(--success); border-radius: 2px; }
.adm-s5-meter.full i { background: var(--warning); }
.adm-s5-bars { display: inline-flex; align-items: flex-end; gap: 2px; height: 22px; width: 70px; vertical-align: middle; }
.adm-s5-bars i { flex: 1 1 0; min-width: 3px; background: var(--adm-c1, #3987e5); border-radius: 1px 1px 0 0; }
.adm-s5-bars i.z { background: var(--border-strong); opacity: .5; }
/* График с осью, подсказкой и «Таблицей» (ревью 19.10) */
.adm-s5-chart { margin: 0; display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.adm-s5-chart figcaption { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: 12px; color: var(--text-mid); }
.adm-s5-chart [hidden] { display: none !important; }
.adm-s5-cbody { display: flex; flex-direction: column; min-width: 0; }
.adm-s5-axis { display: flex; justify-content: space-between; gap: 6px; font: 10.5px var(--font-mono); color: var(--text-dim); margin-top: 3px; }
.adm-s5-ctable { font-size: 12px; } .adm-s5-ctable th, .adm-s5-ctable td { padding: 3px 6px; }
.adm-dl5-pchart { flex: 1 1 220px; max-width: 320px; }
.adm-dl5-pchart .adm-s5-bars { width: 100%; height: 28px; }
.adm-dl5-more { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 12px 0 0; font-size: 12.5px; }
.adm-nt-offline { margin: 10px 0 0; }
.adm-dl5-ov { color: var(--accent-text, var(--accent)); font-weight: 600; text-decoration: none; }
/* Плавающая «Загрузки ↓ N в очереди» (своя загрузка админа) ложилась на кнопки справа; в админке очередь видна в
   «Загрузки → Очередь» — плашку здесь не показываем (ревью 19.10). */
body:has(#page-admin:not(.hidden)) .dl-bg-indicator { display: none; }

/* ── «Загрузки»: с проблемами, очередь, ждут выхода ── */
.adm-dl5-sum { font-size: 13px; color: var(--text-mid); margin: 0 0 10px; }
.adm-dl5-list { list-style: none; margin: 0; padding: 0; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg);
  overflow: hidden; }
.adm-dl5-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 14px; border-top: 1px solid var(--border-soft);
  min-width: 0; }
.adm-dl5-row:first-child { border-top: 0; }
.adm-dl5-main { min-width: 0; flex: 1 1 auto; display: flex; flex-direction: column; gap: 4px; }
.adm-dl5-t { color: var(--text-strong); font-size: 13.5px; overflow-wrap: anywhere; }
.adm-dl5-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; font-size: 12.5px; color: var(--text-mid); }
.adm-dl5-detail { font-size: 11.5px; color: var(--text-dim); overflow-wrap: anywhere; }
.adm-dl5-acts { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 6px; flex: none; }
.adm-dl5-pool { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; font-size: 11.5px; color: var(--text-mid); margin-top: 4px; }
.adm-dl5-ren { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.adm-dl5-ren input { flex: 1 1 200px; min-width: 0; min-height: 34px; }

/* ── «Ночь» ── */
.adm-nt-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(300px, 400px); gap: 14px; align-items: start; }
.adm-nt-main, .adm-nt-side { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.adm-nt-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 14px; padding: 14px 16px; min-width: 0; }
.adm-nt-card > h3, .adm-nt-head h3 { margin: 0; font-size: 14px; font-weight: 700; color: var(--text-strong); }
.adm-nt-card > h3 { margin-bottom: 10px; }
.adm-nt-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.adm-nt-head .adm-dim { font-size: 12px; }
.adm-nt-h2 { font-size: 14px; font-weight: 700; color: var(--text-strong); margin: 22px 0 6px; }
.adm-nt-more { margin-top: 8px; }
.adm-nt-tiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; }
.adm-nt-tile { border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 12px; display: flex; flex-direction: column; gap: 2px;
  min-width: 0; }
.adm-nt-tile span { font-size: 12px; color: var(--text-mid); }
.adm-nt-tile b { font: 600 22px var(--font-mono); color: var(--text-strong); }
.adm-nt-tile small { font-size: 11.5px; color: var(--text-dim); overflow-wrap: anywhere; }
.adm-nt-tile.ok b { color: var(--success); } .adm-nt-tile.warn b { color: var(--warning); } .adm-nt-tile.bad b { color: #ff7a7e; }
.adm-nt-note { font-size: 12px; color: var(--text-dim); margin: 10px 0 0; }
/* Дорожки */
.adm-nt-lanes { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.adm-nt-lane, .adm-nt-axis { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 10px; align-items: center; }
.adm-nt-lname { font-size: 12.5px; color: var(--text-mid); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adm-nt-track { position: relative; height: 18px; background: rgba(255, 255, 255, .03); border-radius: 3px; }
.adm-nt-win { position: absolute; top: 0; bottom: 0; background: rgba(255, 255, 255, .06); border-radius: 3px; }
.adm-nt-bar { position: absolute; top: 3px; bottom: 3px; border-radius: 3px; background: var(--border-strong); overflow: hidden; display: flex; }
.adm-nt-bar.s-done, .adm-nt-stages i.s-done { background: var(--success); }
.adm-nt-bar.s-partial, .adm-nt-stages i.s-partial { background: var(--warning); }
.adm-nt-bar.s-failed, .adm-nt-stages i.s-failed { background: var(--danger); }
.adm-nt-bar.s-skipped, .adm-nt-stages i.s-skipped { background: var(--border-strong); }
.adm-nt-stages { display: flex; width: 100%; height: 100%; gap: 1px; }
.adm-nt-stages i { height: 100%; min-width: 2px; }
.adm-nt-axis { margin-top: 6px; }
.adm-nt-ticks { position: relative; height: 14px; }
.adm-nt-ticks span { position: absolute; transform: translateX(-50%); font: 10.5px var(--font-mono); color: var(--text-dim); white-space: nowrap; }
.adm-nt-ticks span:first-child { transform: none; }
/* Задачи */
.adm-nt-tasks { width: 100%; border-collapse: collapse; font-size: 13px; }
.adm-nt-tasks th, .adm-nt-tasks td { text-align: left; padding: 9px 8px; border-top: 1px solid var(--border-soft); vertical-align: middle; }
.adm-nt-tasks thead th { font: 600 10.5px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; color: var(--text-dim); border-top: 0; }
.adm-nt-tasks tbody th { color: var(--text-strong); font-weight: 600; width: 22%; }
.adm-nt-res { width: 40%; }
.adm-nt-said { display: block; font-size: 12px; color: var(--text-dim); margin-top: 4px; overflow-wrap: anywhere; }
.adm-nt-time { font: 12.5px var(--font-mono); color: var(--text-mid); white-space: nowrap; }
.adm-nt-cap { width: 22%; min-width: 120px; }
.adm-nt-capt { font-size: 11.5px; color: var(--text-dim); }
.adm-nt-task.s-none th { color: var(--text-mid); }
/* 14 ночей */
.adm-nt-gwrap { max-width: 100%; }
.adm-nt-g14 { width: 100%; border-collapse: separate; border-spacing: 3px; table-layout: fixed; font-size: 12px; }
.adm-nt-g14 thead th { font: 10.5px var(--font-mono); color: var(--text-dim); font-weight: 400; text-align: center; }
.adm-nt-g14 thead th:first-child, .adm-nt-g14 tbody th { width: 120px; }
.adm-nt-g14 tbody th { text-align: left; font-weight: 400; color: var(--text-mid); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adm-nt-g14 td { height: 22px; border-radius: 3px; text-align: center; font: 700 11px/1 var(--font-mono); color: #0b0c0f; padding: 0; }
.adm-nt-g14 td.c-done, .adm-nt-lg.c-done i { background: #1d7a4a; color: #e7fff2; }
.adm-nt-g14 td.c-partial, .adm-nt-lg.c-partial i { background: var(--warning); }
.adm-nt-g14 td.c-failed, .adm-nt-lg.c-failed i { background: var(--danger); color: #fff; }
.adm-nt-g14 td.c-skipped, .adm-nt-lg.c-skipped i { background: var(--border-strong); color: var(--text); }
.adm-nt-g14 td.c-none, .adm-nt-lg.c-none i { background: transparent; border: 1px dashed var(--border-strong); color: var(--text-dim); }
/* «Таблицей»: ночь — строкой словами (слова не рвутся по буквам) */
.adm-nt-gwords td .adm-state { white-space: normal; text-align: left; line-height: 1.35; }
.adm-nt-gwords tbody th { white-space: nowrap; width: 1%; }
.adm-nt-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12px; color: var(--text-mid); margin: 10px 0 0; }
.adm-nt-lg { display: inline-flex; align-items: center; gap: 6px; }
.adm-nt-lg i { display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 14px; border-radius: 3px; font: 700 9px/1 var(--font-mono);
  font-style: normal; box-sizing: border-box; }
.adm-nt-streak { margin: 0 0 10px; }
/* Запуск, выключатели, очередь MB */
.adm-nt-kv { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--border-soft); }
.adm-nt-kv div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.adm-nt-kv b { font-size: 13px; color: var(--text-strong); }
.adm-nt-kv small, .adm-nt-sw small, .adm-nt-q small { font-size: 11.5px; color: var(--text-dim); }
.adm-nt-big { font: 600 22px var(--font-mono); color: var(--text-strong); white-space: nowrap; }
.adm-nt-mono { font: 12.5px var(--font-mono); color: var(--text); text-align: right; }
.adm-nt-last { font-size: 12.5px; color: var(--text-mid); margin: 10px 0; }
.adm-nt-run { width: 100%; min-height: 40px; }
.adm-nt-sws, .adm-nt-qs { list-style: none; margin: 0; padding: 0; }
.adm-nt-sw, .adm-nt-q { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 9px 0; border-bottom: 1px solid var(--border-soft); }
.adm-nt-sw div, .adm-nt-q > div:first-child { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.adm-nt-sw b, .adm-nt-q b { font-size: 13px; color: var(--text-strong); }
.adm-nt-stg summary { cursor: pointer; font-size: 13px; font-weight: 600; padding: 10px 0; color: var(--text-mid); }
.adm-nt-all { display: inline-block; margin-top: 10px; color: var(--accent-text, var(--accent)); font-weight: 600; font-size: 13px; text-decoration: none; }
.adm-nt-qacts { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; align-items: center; flex: none; }

/* ── «Система» и «Кредиты» ── */
.adm-sy-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; align-items: start; }
.adm-sy-wide { grid-column: 1 / -1; }
#adm-sy-mail .adm-sy-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.adm-sy-card p { margin: 0 0 8px; }
.adm-sy-line { font-size: 12.5px; color: var(--text-mid); }
.adm-sy-figs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin: 12px 0; }
.adm-sy-fig { margin: 0; display: flex; flex-direction: column; gap: 6px; font-size: 12px; color: var(--text-mid); }
.adm-sy-fig .adm-s5-bars { width: 100%; height: 48px; }
.adm-sy-err i { background: var(--danger); } .adm-sy-warn i { background: var(--warning); }
.adm-sy-kh { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin: 8px 0; }
.adm-sy-kh h4 { margin: 0; font: 700 11px var(--font-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--text-mid); }
.adm-sy-kh .adm-chips { margin: 0; }
.adm-sy-t { width: 100%; border-collapse: collapse; font-size: 13px; }
.adm-sy-t th, .adm-sy-t td { padding: 7px 6px; border-top: 1px solid var(--border-soft); text-align: left; }
.adm-sy-t thead th { font: 600 10.5px var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--text-dim); border-top: 0; }
.adm-sy-t tbody th { font-weight: 400; color: var(--text); overflow-wrap: anywhere; }
.adm-sy-t .num { text-align: right; font-family: var(--font-mono); white-space: nowrap; }
.adm-sy-tailbox { margin-top: 12px; }
.adm-sy-tail { white-space: pre-wrap; overflow-wrap: anywhere; font: 11.5px/1.5 var(--font-mono); background: var(--bg-input); border-radius: var(--radius);
  padding: 10px; max-height: 360px; overflow-y: auto; margin: 8px 0 0; }
.adm-sy-caps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.adm-sy-caps li { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.adm-sy-caps small { font-size: 11.5px; color: var(--text-dim); }
.adm-cr { display: flex; flex-direction: column; gap: 14px; }
.adm-cr-tiles { grid-template-columns: repeat(5, minmax(0, 1fr)); margin: 0; }
.adm-cr-mk { font-size: 13px; color: var(--text-mid); margin: 0; }
.adm-cr-mk a { color: var(--accent-text, var(--accent)); font-weight: 600; text-decoration: none; }
.adm-cr-t td .adm-state { margin-left: 6px; }

/* ── iPad и узкий компьютер: «Ночь» в одну колонку ── */
@media (max-width: 1180px) {
  .adm-nt-cols { grid-template-columns: minmax(0, 1fr); }
  .adm-nt-side { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; align-items: start; }
  .adm-sy-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .adm-cr-tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ── Телефон: одна колонка, таблицы — карточками ── */
@media (max-width: 767px) {
  .adm-nt-side, .adm-sy-grid, #adm-sy-mail .adm-sy-grid, .adm-sy-figs { grid-template-columns: minmax(0, 1fr); }
  .adm-nt-card { padding: 12px; }
  .adm-nt-tiles { gap: 6px; }
  .adm-nt-tile { padding: 8px; }
  .adm-nt-tile b { font-size: 18px; }
  .adm-cr-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .adm-nt-lane, .adm-nt-axis { grid-template-columns: 84px minmax(0, 1fr); gap: 6px; }
  .adm-nt-lname { font-size: 11.5px; }
  .adm-nt-tasks thead { display: none; }
  .adm-nt-tasks, .adm-nt-tasks tbody, .adm-nt-tasks tr, .adm-nt-tasks th, .adm-nt-tasks td { display: block; width: auto; }
  .adm-nt-tasks tr { border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 12px; margin-bottom: 8px; position: relative; }
  .adm-nt-tasks tbody th, .adm-nt-tasks td { border: 0; padding: 2px 0; }
  .adm-nt-tasks tbody th { padding-right: 96px; width: auto; }
  .adm-nt-res, .adm-nt-cap { width: auto; }
  .adm-nt-ticks span:nth-child(even) { display: none; }       /* подписи оси через одну: на телефоне они слипались */
  .adm-nt-time { position: absolute; top: 10px; right: 12px; font-size: 11.5px; }
  .adm-nt-cap { min-width: 0; }
  .adm-nt-g14 { border-spacing: 2px; }
  .adm-nt-g14 thead th:first-child, .adm-nt-g14 tbody th { width: 70px; font-size: 10.5px; }
  .adm-nt-g14 td { height: 16px; font-size: 8px; }
  .adm-nt-g14 thead th { font-size: 8.5px; }
  .adm-nt-qacts, .adm-dl5-acts { width: 100%; justify-content: stretch; }
  .adm-nt-qacts .btn, .adm-dl5-acts .btn { flex: 1 1 0; }
  .adm-nt-q { flex-wrap: wrap; }
  .adm-dl5-row { flex-direction: column; align-items: stretch; }
  .adm-sy-t { font-size: 12.5px; }
  /* Журнал и «Люди» — карточками: «Люди» в четыре столбца были шире телефона (432 при 320–390), а
     «Списано, 30 дн» — за краем, и вбок не листалось (смоук 19.10). */
  .adm-cr-j thead, .adm-cr-t thead { display: none; }
  .adm-cr-j, .adm-cr-j tbody, .adm-cr-j tr, .adm-cr-j td, .adm-cr-j th,
  .adm-cr-t, .adm-cr-t tbody, .adm-cr-t tr, .adm-cr-t td, .adm-cr-t th { display: block; width: auto; }
  .adm-cr-j tr, .adm-cr-t tr { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 10px; border-top: 1px solid var(--border-soft); padding: 8px 0; }
  .adm-cr-j td, .adm-cr-j th, .adm-cr-t td, .adm-cr-t th { border: 0; padding: 0; }
  .adm-cr-j td.num, .adm-cr-t td.num { text-align: left; }
  .adm-cr-t tbody th { flex-basis: 100%; font-weight: 600; }
  /* Подпись ячейки — шапки на телефоне нет: «остаток 1 940», «кто пополнил: Владелец». */
  .adm-cr-j [data-label]::before, .adm-cr-t [data-label]::before { content: attr(data-label) ': '; color: var(--text-dim); font: 11.5px var(--font-ui); }
  /* Пул: кнопки строки переносятся и тогда, когда под ними открыта форма «Переименовать» (vault.css ждал последний span). */
  #admin-pool .pool-row > span { flex-wrap: wrap; }
  /* «Ключи и правила»: подпись политики под кнопками, а не за краем. */
  #admin-ai-pool .settings-section > div { flex-wrap: wrap; }
  #ai-policy-meta { flex-basis: 100%; margin-left: 0 !important; }
}

/* ── Пул и «Ключи Anthropic» на узком экране (iPhone боком 844, iPad боком 1180, SE) — смоук 19.10 ──
   Кнопки строки пула не переносились: «Выключить» срезана, «×» и «Сбросить кулдаун» за краем. У ключа столбец
   действий был 120 при трёх кнопках — они ложились на «✓ активен», на SE «Снять паузу» уходила за левый край. */
#admin-pool .pool-row > div { min-width: 0; overflow-wrap: anywhere; }
#admin-pool .pool-row > span:last-child { flex-wrap: wrap; justify-content: flex-end; }
#admin-ai-pool .ai-pool-row { grid-template-columns: minmax(0, 1fr) 100px 110px 110px auto; }
#admin-ai-pool .ai-pool-row .apr-actions { flex-wrap: wrap; }
@media (max-width: 767px) {
  #admin-ai-pool .ai-pool-row .apr-actions { justify-content: flex-start; }
}

/* ── Под пальцем — 44 точки ── */
@media (pointer: coarse) {
  .adm-dl5-acts .btn, .adm-nt-qacts .btn, .adm-nt-run, .adm-sy-tailbox .btn, .adm-cr .btn, .adm-dl5-ren .btn, .adm-dl5-ren input,
  [data-adm-pool-ren], [data-adm-key-unpause], .adm-nt-stg summary, .adm-nt-all, .adm-cr-mk a, .adm-dl5-more .btn { min-height: 44px; }
  [data-adm-s5-tbl] { min-height: 44px; min-width: 44px; }
  .adm-dl5-ov { display: inline-flex; align-items: center; min-height: 44px; min-width: 44px; }
  .adm-nt-sw .adm-toggle { min-height: 44px; min-width: 44px; }
  .adm-s5-who { display: inline-flex; align-items: center; min-height: 44px; min-width: 44px; }
  .adm-nt-all, .adm-cr-mk a { display: inline-flex; align-items: center; }
  [data-adm-nt-words] { min-height: 44px; min-width: 44px; }
  /* Блоки разделов этапа 5, перенесённые как есть: пул, плитки ночи, бэкапы, хранилище, оповещения, ключи ИИ. */
  #admin-pool .btn, #admin-pool input[type="number"], #admin-night .adm-night-grid .btn, #admin-backup .btn, #admin-backup select,
  #admin-backup input[type="time"], #admin-backup input[type="number"], #admin-storage .btn, #admin-ai-pool .btn, #admin-ai-pool input,
  #admin-alerts .btn, #admin-alerts input[type="text"], #admin-alerts input[type="email"], #admin-alerts input[type="number"],
  .aa-seg-btn { min-height: 44px; }
  #admin-pool .btn-danger { min-width: 44px; }
  #admin-backup .adm-lead a { display: inline-flex; align-items: center; min-height: 44px; }
  /* Политика ИИ — 12 в разметке (style): iOS приближал страницу при фокусе (смоук 19.10). */
  #ai-policy-text { font-size: 16px !important; }
}
