:root{
  --ground:#f4f6f8; --panel:#fff; --panel-2:#eef1f5;
  --ink:#141920; --ink-2:#4a5361; --ink-3:#78828f;
  --line:#d6dce4; --line-2:#c0c8d3;
  --accent:#1f4b74; --accent-ink:#fff;
  --ok:#1c6b46; --ok-bg:#dff2e7;
  --warn:#8a5a10; --warn-bg:#fbf0d8;
  --err:#8f2222; --err-bg:#fbe2e2;
}
@media (prefers-color-scheme: dark){
  :root{
    --ground:#12151a; --panel:#191d24; --panel-2:#232830;
    --ink:#e7eaef; --ink-2:#aab2bf; --ink-3:#7c8593;
    --line:#2c323b; --line-2:#3a424d;
    --accent:#5b93c9; --accent-ink:#0d1116;
    --ok:#7fd1a6; --ok-bg:#16301f;
    --warn:#e0b567; --warn-bg:#332711;
    --err:#f0a1a1; --err-bg:#3a1a1a;
  }
}
*{box-sizing:border-box}
body{
  margin:0; background:var(--ground); color:var(--ink);
  font:15px/1.55 -apple-system,"Segoe UI",Roboto,Arial,sans-serif;
}
.top{
  display:flex; justify-content:space-between; align-items:center; gap:16px;
  padding:14px 24px; background:var(--panel); border-bottom:1px solid var(--line);
}
.brand{font-weight:700; font-size:17px; color:var(--ink); text-decoration:none; letter-spacing:.02em}
.brand span{font-weight:400; color:var(--ink-3)}
.top nav{display:flex; gap:16px; align-items:center; font-size:14px}
.top nav a{color:var(--accent); text-decoration:none}
.top nav a:hover{text-decoration:underline}
.who{color:var(--ink-3)}
main{max-width:1000px; margin:0 auto; padding:24px; display:flex; flex-direction:column; gap:20px}
.card{background:var(--panel); border:1px solid var(--line); border-radius:6px; padding:22px 24px}
.card.narrow{max-width:400px; margin:60px auto 0}
h1{font-size:22px; margin:0 0 6px}
h2{font-size:17px; margin:24px 0 10px}
h3{font-size:13px; margin:0 0 6px; color:var(--ink-3); text-transform:uppercase; letter-spacing:.06em}
.hint{color:var(--ink-2); font-size:14px; margin:0 0 16px}
.dim{color:var(--ink-3); font-size:13px; margin:0}
form{display:flex; flex-direction:column; gap:14px}
label{display:flex; flex-direction:column; gap:5px; font-size:14px; font-weight:500}
.req,.opt{font-weight:400; font-size:12px; color:var(--ink-3)}
input,textarea,select{
  font:inherit; padding:9px 11px; border:1px solid var(--line-2); border-radius:4px;
  background:var(--ground); color:var(--ink); width:100%;
}
input:focus,textarea:focus{outline:2px solid var(--accent); outline-offset:1px; border-color:transparent}
textarea{resize:vertical}
button,.btn{
  font:inherit; font-weight:600; padding:10px 18px; border:1px solid transparent; border-radius:4px;
  background:var(--accent); color:var(--accent-ink); cursor:pointer; text-decoration:none;
  display:inline-block; text-align:center;
}
button:disabled{opacity:.55; cursor:progress}
.btn.ghost{background:transparent; color:var(--accent); border-color:var(--line-2)}
.actions{display:flex; gap:10px; flex-wrap:wrap; margin:16px 0 0}
.flashes{display:flex; flex-direction:column; gap:8px}
.flash{padding:11px 14px; border-radius:5px; font-size:14px; border:1px solid transparent}
.flash.error{background:var(--err-bg); color:var(--err); border-color:var(--err)}
.flash.warn{background:var(--warn-bg); color:var(--warn); border-color:var(--warn)}
.flash.ok{background:var(--ok-bg); color:var(--ok); border-color:var(--ok)}
.flash ul{margin:8px 0 0; padding-left:20px}
.flash li{margin:4px 0}
.tablewrap{overflow-x:auto}
table{border-collapse:collapse; width:100%; font-size:14px}
th,td{text-align:left; padding:9px 12px; border-bottom:1px solid var(--line)}
th{font-size:12px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-3); font-weight:600}
td.num{text-align:right; font-variant-numeric:tabular-nums}
td.mono,.mono{font-family:ui-monospace,Consolas,monospace; font-size:13px}
tbody tr:last-child td{border-bottom:0}
.pill{
  display:inline-block; padding:2px 9px; border-radius:20px; font-size:12px; font-weight:600;
  background:var(--panel-2); color:var(--ink-2); white-space:nowrap;
}
.pill.big{font-size:14px; padding:5px 14px}
.pill.done{background:var(--ok-bg); color:var(--ok)}
.pill.failed{background:var(--err-bg); color:var(--err)}
.pill.running,.pill.queued{background:var(--warn-bg); color:var(--warn)}
.jobhead{display:flex; justify-content:space-between; align-items:flex-start; gap:16px; margin-bottom:14px}
.stats{display:flex; flex-wrap:wrap; gap:10px; margin-top:8px}
.stat{
  background:var(--panel-2); border-radius:5px; padding:10px 14px; min-width:110px;
  display:flex; flex-direction:column; gap:2px;
}
.stat.wide{flex:1 1 100%}
.stat span{font-size:12px; color:var(--ink-3)}
.stat b{font-size:18px; font-variant-numeric:tabular-nums}
.stat.wide b{font-size:14px; font-weight:500}
.log{
  background:var(--panel-2); border:1px solid var(--line); border-radius:5px;
  padding:12px 14px; font-family:ui-monospace,Consolas,monospace; font-size:12.5px;
  max-height:340px; overflow:auto; white-space:pre-wrap; word-break:break-word; margin:0;
}
details summary{cursor:pointer; color:var(--accent); font-size:14px}
.lists{display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:18px; margin-top:14px}
.lists ul{margin:0; padding-left:18px; font-size:13.5px; color:var(--ink-2)}
.lists li{margin:2px 0}
/* ─────────────────────────────────────────── проверка реестра */

.grouptools{display:flex; flex-wrap:wrap; gap:14px 22px; align-items:flex-start}
.grouptools .gform{flex-wrap:wrap}
.filters{display:flex; flex-wrap:wrap; gap:14px; align-items:flex-end; margin-bottom:12px}
.filters label{flex-direction:column; gap:4px}
.filters select,.filters input{min-width:180px}
.bulk{
  display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin:0 0 12px;
  padding:10px 12px; background:var(--panel-2); border:1px solid var(--line); border-radius:5px;
}
.check{flex-direction:row; align-items:center; gap:7px; font-weight:400}
.check input{width:auto}

/* Реестр — тысячи строк: ужимаем всё, что можно, и держим шапку на виду. */
table.reg{font-size:13px}
table.reg th{position:sticky; top:0; background:var(--panel); z-index:2}
table.reg th,table.reg td{padding:5px 8px}
table.reg td.ed{cursor:text; border-bottom:1px solid var(--line)}
table.reg td.ed:hover{background:var(--panel-2)}
table.reg td.ed input,table.reg td.ed select{width:100%; padding:3px 6px; font-size:13px}
.dot{color:var(--warn); font-size:18px; line-height:0}
.warnmark{color:var(--warn); font-size:13px; font-weight:600}

.savebar{
  position:sticky; bottom:0; display:flex; gap:14px; align-items:center; justify-content:flex-end;
  padding:12px 16px; margin-top:18px;
  background:var(--panel); border:1px solid var(--line); border-radius:6px;
}

fieldset.acc{border:1px solid var(--line); border-radius:5px; padding:10px 14px 12px; margin:0}
fieldset.acc legend{font-weight:600; font-size:14px; padding:0 6px}
.secs{display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:4px 14px; margin-top:6px}

/* Форма внутри ячейки таблицы: общий form{flex-direction:column} растянул бы
   поле и кнопку в столбик и разорвал строку. */
.rowform{flex-direction:row; align-items:center; gap:6px; margin:0}
.rowform input{min-width:150px}
button.mini{padding:5px 10px; font-size:12.5px; font-weight:500}
button.mini.danger{background:transparent; color:var(--err); border:1px solid var(--line-2)}
button.mini.danger:hover{background:var(--err-bg)}

@media (max-width:640px){
  main{padding:14px}
  .card{padding:16px}
  .jobhead{flex-direction:column}
}
