/* Панель витрины: один файл на все экраны, кроме правки на самой странице (edit.css).
   Цвета живут токенами на :root, тёмная тема переопределяет только токены. */

:root {
  color-scheme: light dark;
  /* палитра сайта (engine/assets/base.css): бумага, карточка, тёплые линии, терракота */
  --bg: #f1eee8; --card: #fffefc; --ink: #191817; --ink2: #5b5751; --muted: #716b64;
  --faint: #8b857d; --line: #e7e1d7; --line2: #d9d2c6; --link: #a8461a;
  --pri: #a8461a; --pri-ink: #fff; --soft: #f9ece2; --bar: #c26b33;
  --green: #1f6f3f; --red: #b3261e; --off: #d9d2c6;
  --amber: #f08c1a; --amber-ink: #1a1310; --amber-text: #a05700;
  --chip: #e9e3d9; --chip-ink: #5b5751;
  --chip-ok: #e2efe3; --chip-ok-ink: #1f6f3f;
  --chip-go: #f9ece2; --chip-go-ink: #a8461a;
  --chip-bad: #fbe3e1; --chip-bad-ink: #b3261e;
  --warn: #f9ece2; --warn-line: #ead0bb; --warn-ink: inherit;
  --old: #d9a3a0; --new: #8cc19f; --photo: #d9d2c6;
  --vis-bar: #e6c2a6; --vis-up: #1f6f3f; --vis-down: #b3261e;
  --cup: #b8860b;
  --shadow: 0 6px 24px -8px rgba(30,25,20,.35);
  --nav-h: 0px;
}
/* Тёмная тема: по системе, пока в меню не выбрана тема (Андрей 14.10, `data-theme` на <html>).
   Токены двумя одинаковыми блоками, как на сайте (engine/chrome.py), править их надо вместе. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme=light]) {
    --bg: #151210; --card: #201c19; --ink: #f2efe9; --ink2: #b0a9a0; --muted: #918a82;
    --faint: #918a82; --line: #2b2724; --line2: #3a3532; --link: #e58c53;
    --pri: #e58c53; --pri-ink: #1a1310; --soft: #2e2119; --bar: #b8672f;
    --chip: #292420; --chip-ink: #c9c2b8;
    --chip-ok: #1d3326; --chip-ok-ink: #8fd0a5;
    --chip-go: #2e2119; --chip-go-ink: #e58c53;
    --chip-bad: #3d1f1d; --chip-bad-ink: #f2a59f;
    --warn: #2e2119; --warn-line: #5a3b26; --warn-ink: #f2e3d6;
    --green: #6cc488; --off: #3a3532; --photo: #3a3532; --amber: #f0a24a; --amber-ink: #1a1310; --amber-text: #f0a24a;
    --vis-bar: #5e3c26; --vis-up: #6cc488; --vis-down: #f2a59f;
    --cup: #e3b341;
    --shadow: 0 6px 24px -6px rgba(0,0,0,.8);
  }
}
:root[data-theme=dark] {
  --bg: #151210; --card: #201c19; --ink: #f2efe9; --ink2: #b0a9a0; --muted: #918a82;
  --faint: #918a82; --line: #2b2724; --line2: #3a3532; --link: #e58c53;
  --pri: #e58c53; --pri-ink: #1a1310; --soft: #2e2119; --bar: #b8672f;
  --chip: #292420; --chip-ink: #c9c2b8;
  --chip-ok: #1d3326; --chip-ok-ink: #8fd0a5;
  --chip-go: #2e2119; --chip-go-ink: #e58c53;
  --chip-bad: #3d1f1d; --chip-bad-ink: #f2a59f;
  --warn: #2e2119; --warn-line: #5a3b26; --warn-ink: #f2e3d6;
  --green: #6cc488; --off: #3a3532; --photo: #3a3532; --amber: #f0a24a; --amber-ink: #1a1310; --amber-text: #f0a24a;
  --vis-bar: #5e3c26; --vis-up: #6cc488; --vis-down: #f2a59f;
  --cup: #e3b341;
  --shadow: 0 6px 24px -6px rgba(0,0,0,.8);
}
:root[data-theme=light] { color-scheme: light }
:root[data-theme=dark] { color-scheme: dark }

* { box-sizing: border-box }
body { margin: 0; font: 16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
       background: var(--bg); color: var(--ink); -webkit-font-smoothing: antialiased }
::selection { background: var(--soft); color: var(--ink) }
:focus-visible { outline: 2px solid var(--pri); outline-offset: 2px }
main { max-width: 880px; margin: 0 auto; padding: 18px 16px 80px }
a { color: var(--link) }
h1 { font-size: 22px; margin: 0 0 4px }
h2 { font-size: 17px; margin: 28px 0 6px; padding-top: 14px; border-top: 1px solid var(--line) }
code { font-size: .92em }
.muted { color: var(--muted); font-size: 13px }
.ok { color: var(--green); font-weight: 600 }
.bad { color: var(--red); font-weight: 600 }

/* ── меню ── */
.nav { position: sticky; top: 0; z-index: 10; background: var(--bg);
       border-bottom: 1px solid var(--line) }
.nav ul { display: flex; gap: 4px; max-width: 880px; margin: 0 auto; padding: 0 8px;
          list-style: none }
.nav a, .nav summary { display: block; padding: 12px 12px 10px; color: var(--muted); text-decoration: none;
         font-size: 15px; border-bottom: 2px solid transparent; cursor: pointer; list-style: none }
.nav summary::-webkit-details-marker { display: none }
.nav a:hover, .nav summary:hover { color: var(--ink) }
.nav a[aria-current], .nav summary.cur { color: var(--ink); font-weight: 600; border-bottom-color: var(--pri) }
/* на широком экране меню словами, значки только на телефоне */
.nav .ni { display: none }
/* число у пункта (задача 122): на широком после слова, на телефоне в углу значка;
   красное ждёт Андрея, точка это идущая выкладка; у «Сборки» ещё оранжевое (ждёт ответа)
   и зелёное (собрана новая страница, «Сборку» ещё не открывали) */
.nav .nb { display: inline-block; min-width: 18px; height: 18px; margin-left: 6px; padding: 0 5px;
           border-radius: 9px; background: var(--chip); color: var(--chip-ink); font-size: 11.5px;
           font-weight: 600; line-height: 18px; text-align: center; vertical-align: 1px }
.nav .nb[hidden] { display: none }
.nav .nb.bad { background: var(--red); color: #fff }
.nav .nb.wait { background: var(--amber); color: var(--amber-ink) }
.nav .nb.new { background: var(--green); color: var(--card) }
.nav .nb.run { min-width: 10px; width: 10px; height: 10px; padding: 0; background: var(--pri);
               animation: nbpulse 1.4s ease-in-out infinite }
@keyframes nbpulse { 50% { opacity: .35 } }
@media (prefers-reduced-motion: reduce) { .nav .nb.run { animation: none } }
/* «Ещё»: остальные экраны и выход листом под пунктом, на телефоне над полосой меню */
.nav .more { position: relative }
.sheet { position: absolute; left: 0; top: 100%; z-index: 11; min-width: 180px; background: var(--card);
         border: 1px solid var(--line); border-radius: 10px; overflow: hidden;
         box-shadow: var(--shadow) }
.sheet a, .sheet button { display: flex; align-items: center; width: 100%; height: 48px; padding: 0 16px;
         color: var(--ink); font-size: 16px; font-weight: normal; text-align: left; background: none;
         border: none; border-radius: 0; box-shadow: 0 -1px var(--line) }
.sheet a[aria-current] { font-weight: 600 }
.sheet form { margin: 0 }
.sheet form button { color: var(--muted) }
.sheet form button.pref { color: var(--ink) }
/* смена темы (Андрей 14.10): без JS кнопка ничего не сделает, поэтому её нет; значок той темы, в которую переключит */
.sheet .theme { display: none }
.js .sheet .theme { display: flex }
.nav .sheet .theme .i-sun, :root[data-theme=dark] .nav .sheet .theme .i-moon { display: none }
:root[data-theme=dark] .nav .sheet .theme .i-sun { display: block }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme=light]) .nav .sheet .theme .i-moon { display: none }
  :root:not([data-theme=light]) .nav .sheet .theme .i-sun { display: block }
}
/* значок у каждой строки «Ещё» на любой ширине (Андрей 09.10) */
.nav .sheet .ni { display: block; flex: none; width: 20px; height: 20px; margin-right: 12px; color: var(--muted) }
/* пункт полосы из УЗКО строкой «Ещё» только там, где полоса его не вмещает (ниже) */
.nav .sheet a.spare { display: none }
/* На телефоне меню внизу, под большим пальцем. Полосы сохранения и отката стоят
   над ним: их bottom считается от высоты меню. */
@media (max-width: 640px) {
  :root { --nav-h: calc(56px + env(safe-area-inset-bottom)) }
  .nav { position: fixed; top: auto; bottom: 0; left: 0; right: 0; border-bottom: none;
         border-top: 1px solid var(--line); padding-bottom: env(safe-area-inset-bottom) }
  .nav ul { padding: 0; gap: 0 }
  .nav li { flex: 1 }
  .nav ul > li > a, .nav summary { height: 56px; display: flex; align-items: center; justify-content: center;
           padding: 0 4px; font-size: 15px; border-bottom: none; border-top: 2px solid transparent }
  .nav a[aria-current], .nav summary.cur { border-top-color: var(--pri) }
  /* значок 24 px и подпись под ним (задача 110), у открытого пункта значок акцентом */
  .nav ul > li > a, .nav summary { flex-direction: column; gap: 3px; font-size: 11.5px; line-height: 1 }
  .nav .ni { display: block; width: 24px; height: 24px }
  .nav a[aria-current] .ni, .nav summary.cur .ni { color: var(--pri) }
  .nav ul > li > a { position: relative }
  .nav .nb { position: absolute; top: 4px; left: calc(50% + 5px); margin: 0; min-width: 17px; height: 17px;
             padding: 0 4px; font-size: 11px; line-height: 17px; box-shadow: 0 0 0 2px var(--bg) }
  .nav .nb.run { top: 6px; left: calc(50% + 8px); min-width: 9px; width: 9px; height: 9px }
  .nav .more { position: static }
  .sheet { position: fixed; left: auto; top: auto; right: 8px; bottom: calc(var(--nav-h) + 8px) }
  main { padding-bottom: calc(80px + var(--nav-h)) }
}
/* Семь пунктов с подписью вмещаются до 325 px (замер 24.10): уже 340 «Поиск» уходит строкой в «Ещё»,
   и «Ещё» отмечается, когда открыт он. */
@media (max-width: 339px) {
  .nav li.spare { display: none }
  .nav .sheet a.spare { display: flex }
  .nav summary.spare-cur { color: var(--ink); font-weight: 600; border-top-color: var(--pri) }
  .nav summary.spare-cur .ni { color: var(--pri) }
}

/* ── шапка экрана ── */
.top { display: flex; gap: 12px; align-items: baseline; flex-wrap: wrap; margin-bottom: 14px }
.top form { margin-left: auto }

.top .out { margin-left: auto; font-size: 14px; color: var(--muted); text-decoration: none }

/* ── очередь (главная) ── */
.plate { display: flex; gap: 12px; align-items: center; justify-content: space-between;
         padding: 11px 14px; margin: 0 0 10px; border-radius: 8px; text-decoration: none;
         border: 1px solid var(--warn-line); background: var(--warn); color: var(--warn-ink) }
.plate b { white-space: nowrap; color: var(--link) }
.plate.bad { border-color: var(--chip-bad-ink); background: var(--chip-bad); color: var(--chip-bad-ink) }
.plate.calm { border-color: var(--line); background: var(--card); color: var(--muted); font-size: 14px }
.plate.calm b { font-weight: normal }
/* Плашка после «Утверждаю», когда черновиков на утверждение не осталось (`_done.html`). */
.adm-done { padding: 11px 14px; margin: 0 0 10px; border-radius: 8px; border: 1px solid var(--chip-ok-ink);
            background: var(--chip-ok); color: var(--ink); font-size: 15px }
.adm-done b { color: var(--chip-ok-ink) }
.adm-done .nx { color: var(--ink2) }
/* Очередь без плиток: блоки стоят на фоне страницы, строки делит тонкая линия.
   Заголовок блока, номер строки и поле поиска идут по одной левой кромке. */
.vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap }
/* Шапка главной (Андрей 09.10): ссылка на главную сайта, без слова «Панель»; с 14.10 имя «PROJECT AUTO». */
.brand { margin: 2px 0 12px; font-size: 18px; font-weight: 700; letter-spacing: .04em }
.brand a { color: var(--ink); text-decoration: none }
/* Цитата дня под шапкой главной (Андрей 10.10): мелкая тихая строка вплотную к шапке, автор следом. */
.quote { margin: 2px 0 10px; font-size: 12.5px; line-height: 1.35; color: var(--muted) }
.quote cite { font-style: normal; white-space: nowrap; color: var(--ink2) }
.quote.win { font-size: 14px; font-weight: 600; color: var(--cup) }
/* Шапка одной плашкой во всю ширину (Андрей 14.10, с 17.10 на всех экранах с меню): слева «PROJECT AUTO» текстом, справа
   визиты из поиска двумя ячейками без подписей, линия хода и число за 30 дней, число за сегодня
   с 00:00 МСК (Андрей 09.10 и 14.10). Тап по визитам открывает лист `.vis-dlg`, без JS экран /stats.
   Шапка липкая: на телефоне меню внизу, она встаёт к верхнему краю; на широком под верхним меню,
   его высоту `--head-top` ставит admin.js, здесь запас без скрипта. Линия под плашкой только
   когда под неё уехало содержимое (класс `stuck` из admin.js). */
.head { position: sticky; top: var(--head-top, 0px); z-index: 9; margin: -6px -16px 0; padding: 8px 16px 10px;
        background: var(--bg) }
@media (min-width: 641px) { .head { top: var(--head-top, 47px) } }
.hbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 12px; padding: 4px 4px 4px 14px;
        border-radius: 13px; background: var(--card); border: 1px solid var(--line) }
.head.stuck .hbar { box-shadow: 0 4px 14px -8px rgba(30,25,20,.35) }
.head .brand { margin: 0; min-width: 0; font-size: 13px; line-height: 1; letter-spacing: .08em; white-space: nowrap }
.vis { display: flex; align-items: stretch; gap: 3px; flex: none; color: var(--ink); text-decoration: none;
       -webkit-tap-highlight-color: transparent }
.vis .seg { display: flex; align-items: center; gap: 7px; padding: 5px 9px 5px 8px; border-radius: 9px;
       background: var(--bg) }
.vis:hover .seg { background: var(--chip) }
.vis .spark { width: 40px; height: 18px; overflow: visible }
.vis .spark polyline { fill: none; stroke: var(--pri); stroke-width: 1.75; stroke-linejoin: round; stroke-linecap: round;
       vector-effect: non-scaling-stroke }
.vis b { font-size: 15px; font-weight: 600; line-height: 1; font-variant-numeric: tabular-nums }
.vis.stale b { color: var(--muted) }
.vis .today { justify-content: center; min-width: 32px; padding: 5px 9px }
.vis .today b { color: var(--muted) }
.vis .today.up b { color: var(--vis-up) }
.vis.stale .today b { color: var(--muted) }
/* линия зелёная, если средняя за 7 дней выросла к прошлой неделе, красная, если упала (Андрей 09.10) */
.vis.up .spark polyline, .vis-sheet.up .avg { stroke: var(--vis-up) }
.vis.down .spark polyline, .vis-sheet.down .avg { stroke: var(--vis-down) }
.vis-sheet.up .legend .k-line { background: var(--vis-up) }
.vis-sheet.down .legend .k-line { background: var(--vis-down) }
/* Бэкапы (задача 128, Андрей 19.10): значок B слева от визитов, квадрат высотой с ячейку плашки.
   Цвет только у буквы, фон всегда как у плашки (Андрей 19.10: «буквы B надо цвет менять»); оранжевая
   и красная буквы темнее на бумаге и светлее в тёмной теме, контраст не ниже 4,5. Тап открывает
   лист `.bk-dlg`, без JS экран /backups. */
.bk { display: flex; align-items: center; justify-content: center; flex: none; width: 28px; height: 28px; margin-left: auto;
      border-radius: 9px; background: var(--bg); color: var(--vis-up); font-size: 15px; font-weight: 700; line-height: 1;
      text-decoration: none; -webkit-tap-highlight-color: transparent }
.bk:hover { background: var(--chip) }
.bk.bk-unk { color: var(--muted) }
.bk.bk-warn { color: var(--amber-text) }
.bk.bk-bad { color: var(--vis-down) }
.bk + .vis { margin-left: -6px }
/* С сторожа (задача 132 этап 4) вплотную справа от B, тем же квадратом */
.bk + .bk { margin-left: -10px }
/* Живая строка снизу островка (Андрей 18.10): что идёт сейчас, сборка и экспорт, по строке на каждое, во всю
   ширину под линией. Ничего не идёт, кусок пустой и полосы нет: островок плоский, как был. Строка в одну линию,
   имя и этап с шагом режутся многоточием, значок пункта меню пульсирует, пока идёт. */
.hlive { flex: 0 0 calc(100% - 10px); min-width: 0; margin: 4px 10px 0 0; padding: 3px 0 1px; border-top: 1px solid var(--line) }
.hlive:empty { display: none }
.hlive .lv { display: flex; align-items: center; gap: 7px; min-width: 0; padding: 4px 0; font-size: 13px; line-height: 1.3;
       color: var(--ink2); text-decoration: none; white-space: nowrap; -webkit-tap-highlight-color: transparent }
.hlive .lv .ni { flex: none; width: 15px; height: 15px; color: var(--pri); animation: lvpulse 1.6s ease-in-out infinite }
.hlive .lv.bad .ni { color: var(--red); animation: none }
.hlive .lv b { flex: 0 1 auto; min-width: 0; max-width: 55%; overflow: hidden; text-overflow: ellipsis; font-weight: 600; color: var(--ink) }
.hlive .lv .s { flex: 1 1 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--muted) }
.hlive .lv:hover b { text-decoration: underline }
@keyframes lvpulse { 50% { opacity: .35 } }
@media (prefers-reduced-motion: reduce) { .hlive .lv .ni { animation: none } }
@media (max-width: 380px) { .hbar { padding-left: 12px } .head .brand { font-size: 12px; letter-spacing: .05em } .vis .spark { width: 32px } .vis .seg { gap: 6px } }
/* лист: снизу во всю ширину на телефоне, по центру на широком */
.vis-dlg, .bk-dlg { width: min(560px, 100%); max-height: 92vh; padding: 0; border: 0; border-radius: 16px;
       background: var(--card); color: var(--ink); box-shadow: var(--shadow) }
.vis-dlg::backdrop, .bk-dlg::backdrop { background: rgba(20,15,10,.45) }
.vis-dlg .x, .bk-dlg .x { position: absolute; top: 8px; right: 8px; width: 44px; height: 44px; padding: 0; font-size: 26px;
       line-height: 1; background: none; border: 0; color: var(--muted); cursor: pointer }
@media (max-width: 640px) {
  .vis-dlg, .bk-dlg { margin: auto 0 0; max-width: 100%; border-radius: 16px 16px 0 0;
       padding-bottom: env(safe-area-inset-bottom) }
}
/* лист бэкапов: ряд на бэкап, цвет словами чипом, причины, строки снимка, состав мелко */
.bk-sheet { padding: 14px 16px 12px }
.bk-sheet h2 { margin: 2px 40px 8px 0; padding: 0; border: 0; font-size: 17px }
.bk-stale { margin: 0 0 8px; font-size: 13px; color: var(--red) }
.bk-row { padding: 10px 0; border-top: 1px solid var(--line) }
.bk-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px }
.bk-row h3 { margin: 0; font-size: 15px }
.bk-c { flex: none; padding: 1px 8px; border-radius: 99px; font-size: 12.5px; background: var(--chip-ok); color: var(--chip-ok-ink) }
.bk-row.bk-warn .bk-c { background: var(--amber); color: var(--amber-ink) }
.bk-row.bk-bad .bk-c { background: var(--chip-bad); color: var(--chip-bad-ink) }
.bk-row.bk-unk .bk-c { background: var(--chip); color: var(--chip-ink) }
.bk-where { margin: 0 0 4px; font-size: 12.5px }
.bk-why { margin: 4px 0 6px; padding-left: 18px; font-size: 13.5px; line-height: 1.4 }
.bk-row.bk-bad .bk-why { color: var(--red) }
.bk-dl { display: grid; grid-template-columns: max-content 1fr; gap: 2px 12px; margin: 4px 0 0; font-size: 13.5px;
       line-height: 1.4; font-variant-numeric: tabular-nums }
.bk-dl dt { color: var(--muted) }
.bk-dl dd { margin: 0; min-width: 0 }
.bk-dl small { font-size: 12px; color: var(--muted) }
.bk-err { max-height: 9em; margin: 6px 0 0; padding: 6px 8px; overflow: auto; border-radius: 8px; background: var(--chip-bad);
       color: var(--chip-bad-ink); font-size: 12px; white-space: pre-wrap; word-break: break-word }
.bk-what { margin: 6px 0 0; font-size: 12px; line-height: 1.4 }
.bk-foot { padding-top: 8px; border-top: 1px solid var(--line) }
.bk-foot p { margin: 0 0 2px; font-size: 12.5px }
.bk-foot p.bad { color: var(--red); font-weight: normal }
.vis-sheet { padding: 14px 16px 12px }
/* вкладки листа без JS (Андрей 10.10): «Визиты из поиска» и «Кубки», радио и подписи вместо заголовка */
.vis-sheet .vt { position: absolute; opacity: 0; pointer-events: none }
.vis-sheet .tabs { display: flex; gap: 18px; margin: 0 0 10px }
.vis-dlg .vis-sheet .tabs { padding-right: 40px }
.vis-sheet .tabs label { padding: 2px 0 4px; font-size: 17px; font-weight: 700; color: var(--muted); cursor: pointer;
       border-bottom: 2px solid transparent; white-space: nowrap; -webkit-tap-highlight-color: transparent }
.vis-sheet .tabs small { font-size: 12.5px; font-weight: 400 }
.vis-sheet .vt1:checked ~ .tabs label[for=vt1], .vis-sheet .vt2:checked ~ .tabs label[for=vt2] { color: var(--ink);
       border-bottom-color: var(--pri) }
.vis-sheet .vt1:focus-visible ~ .tabs label[for=vt1], .vis-sheet .vt2:focus-visible ~ .tabs label[for=vt2] {
       outline: 2px solid var(--pri); outline-offset: 2px }
.vis-sheet .pane { display: none }
.vis-sheet .vt1:checked ~ .p1, .vis-sheet .vt2:checked ~ .p2 { display: block }
.vis-sheet .next { cursor: pointer }
.vis-sheet .next h3 { color: var(--ink) }
.vis-sheet .p2 .when { margin: 0 0 8px }
/* компактно (Андрей 09.10): четыре плитки одним рядом на любой ширине, только имя и число */
.vis-sheet .tiles { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px }
.vis-sheet .tile { display: flex; flex-direction: column; padding: 7px 10px; border-radius: 10px; background: var(--bg);
       min-width: 0 }
.vis-sheet .tile span { font-size: 12px; color: var(--muted); white-space: nowrap }
.vis-sheet .tile b { font-size: 22px; line-height: 1.15; font-variant-numeric: tabular-nums }
.vis-sheet .when { margin: 6px 0 0; font-size: 12.5px }
.vis-sheet .chart-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin: 12px 0 2px }
.vis-sheet h3 { margin: 0; font-size: 14px }
.vis-sheet .legend { display: flex; align-items: center; gap: 5px; margin: 0; font-size: 12px; color: var(--muted) }
.vis-sheet .legend .k-bar { width: 9px; height: 11px; border-radius: 2px; background: var(--vis-bar) }
.vis-sheet .legend .k-line { width: 14px; height: 2px; margin-left: 8px; border-radius: 1px; background: var(--pri) }
.vis-sheet .chart { position: relative }
.vis-sheet .chart svg { display: block; width: 100%; height: auto; overflow: visible }
.vis-sheet .grid { stroke: var(--line); stroke-width: 1 }
.vis-sheet .ax { fill: var(--muted); font-size: 10.5px; font-variant-numeric: tabular-nums }
.vis-sheet .bar { fill: var(--vis-bar) }
.vis-sheet .bar.log { opacity: .55 }   /* день добран из лога сайта, Метрика молчала */
.vis-sheet .bar.now { fill: none; stroke: var(--vis-bar); stroke-width: 1.5; stroke-dasharray: 3 2 }
.vis-sheet .avg { fill: none; stroke: var(--pri); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round }
.vis-sheet .hit { fill: transparent; cursor: pointer }
.vis-sheet .hit.on { fill: var(--ink); fill-opacity: .06 }
.vis-sheet .tip { position: absolute; top: -4px; transform: translateY(-100%); z-index: 2; max-width: 100%;
       padding: 5px 9px; border-radius: 8px; background: var(--ink); color: var(--bg); font-size: 12.5px;
       line-height: 1.35; pointer-events: none }
.vis-sheet .tip[hidden] { display: none }
/* кубки (Андрей 10.10), своей вкладкой: девять в три ряда по три, взятый золотой
   с днём взятия, остальные серые. На вкладке визитов только полоска к следующему. */
.vis-sheet .defs { position: absolute; width: 0; height: 0 }
.vis-sheet .cup-bar { display: block; width: 100%; height: 4px; margin: 4px 0 8px }
.vis-sheet .cup-bar .all { fill: var(--off) }
.vis-sheet .cup-bar .done { fill: var(--cup) }
.vis-sheet .cups { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 0; padding: 0; list-style: none }
.vis-sheet .cup { display: flex; flex-direction: column; align-items: center; min-width: 0; padding: 6px 2px 5px;
       border-radius: 10px; background: var(--bg); color: var(--off) }
.vis-sheet .cup svg { width: 26px; height: 26px }
.vis-sheet .cup b { font-size: 12.5px; line-height: 1.3; color: var(--muted); font-weight: 600; white-space: nowrap;
       font-variant-numeric: tabular-nums }
.vis-sheet .cup span { min-height: 14px; font-size: 11px; line-height: 14px; color: var(--muted) }
.vis-sheet .cup.got { color: var(--cup) }
.vis-sheet .cup.got b { color: var(--ink) }
.vis-sheet .cup.new { outline: 2px solid var(--cup); outline-offset: -2px }
.vis-sheet .cup.new span { color: var(--cup); font-weight: 600 }
/* подвал одной строкой: «Таблицей» слева, час цифр и Метрика справа; таблица раскрывается под ним */
.vis-sheet .foot { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
       gap: 4px 12px; margin: 8px 0 0; font-size: 12.5px }
.vis-sheet .foot p { margin: 0; font-size: 12.5px }
.vis-sheet .foot p.bad { color: var(--red); font-weight: normal }
.vis-sheet .tbl { order: 0 }
.vis-sheet .tbl summary { cursor: pointer; color: var(--link) }
.vis-sheet .tbl[open] { flex-basis: 100%; order: 1 }
.vis-sheet .tbl table { margin: 6px 0 0; border-collapse: collapse; font-size: 13px; font-variant-numeric: tabular-nums }
.vis-sheet .tbl td, .vis-sheet .tbl th { padding: 2px 16px 2px 0; text-align: left; font-weight: normal;
       color: var(--ink2); border-bottom: 1px solid var(--line) }
.vis-sheet .tbl th { color: var(--muted) }
form.find { display: block; margin: 0 0 10px }
form.find input { width: 100%; height: 44px; padding: 0 14px; font-size: 16px; border: 0; border-radius: 10px;
       background: var(--chip); color: inherit }
.none { margin: 14px 0 }
.none[hidden] { display: none }
/* пока ищем, числа блоков, подсказки и выбор молчат: они про весь список, а не про найденное */
.is-find .blk summary b, .is-find .blk .hint, .is-find .blk > summary::after, .is-find .ctl,
.is-find .tabs, .is-find .th b, .is-find .sub, .is-find .nil, .is-find section .plate { display: none }
/* Вкладки главной (Андрей 09.10): значок, имя и число, открытая подчёркнута акцентом.
   Пока ищем, вкладок нет, а у блоков с найденным виден свой заголовок `.th`. */
.tabs { display: flex; margin: 14px 0 0; border-bottom: 1px solid var(--line) }
.tabs a { flex: 1 1 auto; display: flex; align-items: center; justify-content: center; gap: 6px; min-width: 0;
       height: 46px; padding: 0 6px; color: var(--muted); text-decoration: none; font-size: 15px;
       border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap;
       -webkit-tap-highlight-color: transparent }
.tabs a svg { flex: none; width: 19px; height: 19px }
.tabs a b { color: var(--faint); font-weight: 500; font-size: 13px; font-variant-numeric: tabular-nums }
.tabs a[aria-selected="true"] { color: var(--ink); font-weight: 600; border-bottom-color: var(--pri) }
.tabs a[aria-selected="true"] svg { color: var(--pri) }
.tabs a:hover { color: var(--ink) }
.blk .th { display: none }
.is-find .blk .th { display: flex; margin: 14px 0 6px }
.tabbed > section.blk { margin: 0 }
.tabbed > section.blk > .rows > .r:first-child { border-top: none }
.sub { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 10px 0 6px;
       font-size: 13px }
.sub a { text-decoration: none; white-space: nowrap }
p.muted.sub { margin: 12px 0 0 }
.nil { margin: 16px 0 }
/* «Показать ещё» под длинным «Опубликовано»: строка во всю ширину, как сами строки */
.more-rows { display: block; width: 100%; height: 44px; margin: 0; padding: 0; border: 0;
       border-top: 1px solid var(--line); border-radius: 0; background: none; color: var(--link);
       font: inherit; font-size: 15px; cursor: pointer }
.more-rows[hidden] { display: none }
.blk { margin: 10px 0 0 }
.blk.empty { display: none }
.blk > summary { display: flex; align-items: baseline; gap: 8px; min-height: 44px; padding: 10px 0 6px;
       cursor: pointer; list-style: none; -webkit-tap-highlight-color: transparent }
.blk > summary::-webkit-details-marker { display: none }
.blk > summary::after { content: ""; flex: none; width: 7px; height: 7px; margin: 0 3px 0 6px; align-self: center;
       border-right: 1.5px solid var(--faint); border-bottom: 1.5px solid var(--faint);
       transform: rotate(-45deg); transition: transform .15s }
.blk[open] > summary::after { transform: translateY(-2px) rotate(45deg) }
.blk h2 { display: flex; align-items: baseline; gap: 8px; margin: 0 auto 0 0; padding: 0; border: none;
       font-size: 19px; font-weight: 650; letter-spacing: -.01em }
.blk h2 .hi { flex: none; width: 20px; height: 20px; align-self: center; fill: none; stroke: var(--muted);
       stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; margin-right: -2px }
.blk h2 b { color: var(--faint); font-weight: 500; font-size: 15px; font-variant-numeric: tabular-nums }
.blk .hint { color: var(--muted); font-size: 13px; white-space: nowrap; font-variant-numeric: tabular-nums }
.btn { display: inline-flex; align-items: center; height: 44px; padding: 0 20px; border-radius: 10px;
       font-size: 15px; font-weight: 600; background: var(--pri); color: var(--pri-ink); text-decoration: none;
       white-space: nowrap }
.why { margin: 0 0 8px; font-size: 13px; font-weight: normal }
.tabbed .plate { margin-top: 16px }
/* строка в одну линию: номер, короткое имя, справа срок или дата; метка только у исключения */
.r { display: flex; align-items: center; height: 44px; border-top: 1px solid var(--line) }
/* строка это две ссылки: вся ширина ведёт в правку, значок справа на саму страницу сайта */
.rl { flex: 1; min-width: 0; align-self: stretch; display: flex; gap: 10px; align-items: center;
     color: var(--ink); text-decoration: none }
.r .ext { flex: none; align-self: stretch; display: flex; align-items: center; justify-content: flex-end;
     width: 40px; color: var(--faint) }
.r .ext svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8;
     stroke-linecap: round; stroke-linejoin: round }
.r .ext:hover { color: var(--link) }
/* значок календаря (задача 110): у новой утверждённой поставить в план, с галкой и
   зелёный у стоящей в плане; открывает лист под строкой */
.r .cal { flex: none; align-self: stretch; display: flex; align-items: center; justify-content: flex-end;
     width: 44px; color: var(--faint) }
.r .cal svg { width: 19px; height: 19px }
.r .cal.on { color: var(--green) }
.r .cal:hover { color: var(--link) }
.r .when.plan { color: var(--green) }
.r[hidden] { display: none }
.r .num { flex: none; width: 2.3em; color: var(--faint); font-size: 13px; font-variant-numeric: tabular-nums }
.r .name { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.r .when { flex: none; color: var(--muted); font-size: 13px; font-weight: normal;
     font-variant-numeric: tabular-nums; white-space: nowrap }
.r .when.bad { color: var(--red) }
.r .go { flex: none; font-size: 12px; line-height: 1; padding: 4px 8px; border-radius: 999px;
     background: var(--chip-go); color: var(--chip-go-ink); white-space: nowrap }
.r .go.ok { background: var(--chip-ok); color: var(--chip-ok-ink) }
/* плашки модели и раздела под именем (задача 113): строка в две линии, ссылка строки
   по-прежнему на всю высоту, плашки лежат поверх её нижней части. Сама плашка мелкая,
   а нажимается полосой в 30px. Нажатая (по ней идёт отбор) подсвечена акцентом. */
.r.t { position: relative; height: 64px }
.r.t .rl, .r.t .ext, .r.t .cal { padding-bottom: 24px }
.r .tags { position: absolute; left: calc(2.3 * 13px + 10px); right: 0; bottom: 3px; height: 30px;
     display: flex; gap: 6px; overflow: hidden; pointer-events: none }
.r .tag { flex: 0 1 auto; min-width: 0; display: flex; align-items: center; text-decoration: none;
     pointer-events: auto; -webkit-tap-highlight-color: transparent }
.r .tag span { max-width: 100%; font-size: 11.5px; line-height: 1; padding: 4px 8px; border-radius: 999px;
     background: var(--chip); color: var(--chip-ink); white-space: nowrap; overflow: hidden;
     text-overflow: ellipsis }
.r .tag:hover span { color: var(--ink) }
.r .tag.on span { background: var(--chip-go); color: var(--chip-go-ink); font-weight: 600 }
.r.t .tag:first-child { flex-shrink: 0 }   /* плашка модели не сжимается, режется раздел */
/* дата «Опубликовано» нажимается на всю высоту строки и открывает обе даты */
.r .when[data-d-pub] { align-self: stretch; display: flex; align-items: center; padding-left: 12px;
     margin-left: -10px; cursor: pointer }
.r .when.upd::before { content: "↻"; margin-right: 4px; color: var(--faint) }
.dates { position: absolute; z-index: 20; background: var(--card); color: var(--ink); border: 1px solid var(--line2);
     border-radius: 10px; padding: 10px 14px; font-size: 14px; line-height: 1.6; white-space: nowrap;
     box-shadow: var(--shadow); font-variant-numeric: tabular-nums }
.dates span { color: var(--muted); display: inline-block; min-width: 7.2em }
/* под вкладками: раздел слева (один на все вкладки, рядом крестик сброса), порядок
   справа (только у «Опубликовано»), оба родными выпадашками */
.ctl { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin: 4px 0 2px }
.ctl .by { display: inline-flex; align-items: center; min-width: 0 }
/* отступы как у соседнего выбора (общий `label`), иначе крестик стоит выше его текста */
.ctl .clr { flex: none; display: flex; align-items: center; justify-content: center; width: 36px; height: 36px;
       margin: 12px 0 3px; color: var(--muted) }
.ctl .clr svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round }
.ctl .clr:hover { color: var(--link) }
.ctl .clr[hidden], .pick[hidden] { display: none }
.pick { position: relative; display: inline-flex; align-items: center; min-width: 0 }
.pick select { font: inherit; font-size: 13.5px; height: 36px; padding: 0 16px 0 0; border: 0; background: none;
       color: var(--ink2); appearance: none; -webkit-appearance: none; cursor: pointer; max-width: 100%;
       text-overflow: ellipsis; field-sizing: content }
.pick select option, .pick select optgroup { background: var(--card); color: var(--ink) }
.pick::after { content: ""; position: absolute; right: 2px; top: 50%; width: 5px; height: 5px; margin-top: -5px;
       border-right: 1.5px solid var(--faint); border-bottom: 1.5px solid var(--faint);
       transform: rotate(45deg); pointer-events: none }
/* широкий экран: одна колонка, как на телефоне (вкладки с 09.10 вместо двух колонок) */
@media (min-width: 1000px) {
  .r:hover .name { text-decoration: underline; text-underline-offset: 3px }
}
.chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 6px }
.chip { font-size: 13px; line-height: 1.3; padding: 2px 9px; border-radius: 999px;
        background: var(--chip); color: var(--chip-ink) }
.chip.ok { background: var(--chip-ok); color: var(--chip-ok-ink) }
.chip.go { background: var(--chip-go); color: var(--chip-go-ink); font-weight: 600 }
.chip.bad { background: var(--chip-bad); color: var(--chip-bad-ink); font-weight: 600 }
.deploy { background: var(--card); border: 1px solid var(--line); border-radius: 8px;
          padding: 4px 14px 2px; margin-bottom: 6px }
.deploy .go { margin: 4px 0 8px; padding-left: 20px }
.deploy .go li { margin: 3px 0 }
.deploy details { margin: 4px 0 }
.deploy summary { cursor: pointer; color: var(--muted); font-size: 14px; padding: 6px 0 }
.warn { background: var(--warn); border: 1px solid var(--warn-line); color: var(--warn-ink);
        border-radius: 8px; padding: 10px 12px; margin: 12px 0 }
.warn.bad { border-color: var(--chip-bad-ink); background: var(--chip-bad); color: var(--chip-bad-ink);
            font-weight: normal }
.warn ul { margin: 4px 0 0; padding-left: 18px }
/* черновики у кнопки выкладки столбиком, номер отдельной колонкой (Андрей 09.10) */
.warn ul.names { list-style: none; padding: 0; margin: 6px 0 0 }
.warn .names li { display: flex; gap: 10px; padding: 3px 0 }
.warn .names .num { flex: none; min-width: 2.3em; opacity: .7; font-variant-numeric: tabular-nums }
.copy { background: var(--card); border: 1px solid var(--line2); border-radius: 8px;
        padding: 10px 12px; margin: 12px 0 }
.copy p { margin: 0 0 10px; user-select: all }
.copy button { min-height: 44px }
.out { padding: 4px 14px 12px; margin: 10px 0 }
.out p { margin: 8px 0 4px }
.urls { list-style: none; margin: 0 0 10px; padding: 0 }
.urls li { padding: 7px 0; border-bottom: 1px solid var(--line) }
.urls li:last-child { border-bottom: none }
.urls .u { display: block; font-size: 13px; color: var(--muted); overflow-wrap: anywhere;
           user-select: all; margin-top: 2px }
.out button { min-height: 44px }

/* ── доска сборки ── */
.stages { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px }
.stages li { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px }
.stages .st-name { font-weight: 600; line-height: 1.3 }
.stages .num { color: var(--muted); font-weight: normal; font-variant-numeric: tabular-nums }
.stages .st-when { font-size: 14px; color: var(--ink2) }
.stages p { margin: 4px 0 0; font-size: 14px; color: var(--muted) }
.stages a { display: inline-block; margin-top: 4px; font-size: 14px }
.stages-live summary { cursor: pointer }
.stages-live summary h2 { display: inline }

/* ── раздел «Сборка» (задача 120): пульт сборки страниц ── */
.back { margin: 0 0 4px; font-size: 14px }
.bstrip { display: flex; gap: 2px; margin: 8px 0 6px }
.bstrip i { flex: 1; height: 7px; border-radius: 2px; background: var(--line2) }
.bstrip i.done { background: var(--bar) }
.bstrip i.now { background: var(--pri); outline: 2px solid var(--soft); height: 9px; margin-top: -1px }
.stages.bl .st-name { display: block; color: inherit; text-decoration: none; margin: 0; font-size: 16px }
.stages.bl p.bad, .sess .bad, .st-when .bad { color: var(--red) }
/* Карточка страницы в работе: одна в списке и шапкой экрана страницы (Андрей 17.10) */
.bcards { display: grid; gap: 8px }
.bcard { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; margin: 8px 0 }
.bcards .bcard { margin: 0 }
.bcard.new { border: 1px dashed var(--pri) }
.bcard .st-name { display: block; color: inherit; text-decoration: none; margin: 0; font-size: 16px;
                  font-weight: 600; line-height: 1.3 }
.bcard h1.st-name { font-size: 22px }
.bcard .num { color: var(--muted); font-weight: normal; font-variant-numeric: tabular-nums }
.bcard .st-when { font-size: 14px; color: var(--ink2) }
.bcard p { margin: 4px 0 0; font-size: 14px; color: var(--muted) }
.bcard p.bad { color: var(--red) }
.bcard .last { color: var(--ink2) }
.bcard .sess { margin: 8px 0 0; padding-top: 8px; border-top: 1px solid var(--line) }
.bcard .allst { margin: 0 0 4px }
.bcard .act { margin: 8px 0 0 }
.bcmd { background: var(--soft); border-radius: 6px; padding: 6px 8px; margin: 8px 0 2px !important; color: var(--ink2) !important }
.bcmd .ci { color: var(--pri); font-weight: 600 }
.bcmd.done .ci { color: var(--green) }
.bcmd.refused, .bcmd.expired { background: var(--warn); border: 1px solid var(--warn-line) }
.bcmd.refused .ci, .bcmd.expired .ci { color: var(--red) }
.bcmd .cr { display: block; font-size: 13px; word-break: break-word }
.bcmd.pending .ci::before { content: ''; display: inline-block; width: 7px; height: 7px; border-radius: 50%;
                            background: var(--pri); margin: 0 6px 1px 0; animation: bpulse 1.2s ease-in-out infinite }
.bstrip i.wait { background: var(--pri); animation: bpulse 1.2s ease-in-out infinite }
@keyframes bpulse { 50% { opacity: .25 } }
@media (prefers-reduced-motion: reduce) { .bstrip i.wait, .bcmd.pending .ci::before { animation: none } }
button.sent { opacity: .6 }
.wait-you { margin: 8px 0 16px }
.wy { display: flex; gap: 12px; align-items: center; justify-content: space-between; text-decoration: none;
      color: inherit; background: var(--warn); border: 1px solid var(--warn-line); border-radius: 8px;
      padding: 10px 12px; margin-top: 8px; line-height: 1.35 }
.wy b { flex: none; color: var(--pri) }
.wy .num { color: var(--muted) }
.sess { font-size: 14px; color: var(--ink2); margin: 14px 0 6px }
/* Кнопки запуска на аккаунт (Андрей 19.10): кнопка, а не плашка. Рекомендуемая залита
   цветом, вторая контуром, без запаса серая; под надписью вердикт, докуда хватит. */
.runacc { flex: 1 1 100%; display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 8px }
.runf { display: flex; margin: 0 }
.act .runb { width: 100%; display: flex; flex-direction: column; align-items: flex-start; gap: 2px; text-align: left;
             min-height: 54px; padding: 8px 14px; border-radius: 10px; font-size: 15px; line-height: 1.25;
             background: var(--card); color: var(--ink); border: 1.5px solid var(--pri) }
.act .runb span { flex: none; font-size: 13px }
.runb .rh { display: flex; flex-wrap: wrap; gap: 2px 6px; align-items: center }
.runb .rh b { font-size: 15px }
.runb .rh b::before { content: '▶'; font-size: 11px; margin-right: 6px; vertical-align: 1px }
.runb .rnow { padding: 0 6px; border-radius: 99px; font-size: 11px !important; background: var(--chip); color: var(--chip-ink) }
.runb .rv { font-weight: 600 }
.runb.v-ok .rv { color: var(--green) }
.runb.v-go .rv { color: var(--amber-text) }
.runb.v-bad .rv { color: var(--red) }
.runb.v-off .rv { color: var(--muted); font-weight: 400 }
.act .runb.best { background: var(--pri); color: var(--pri-ink) }
.runb.best .rv { color: var(--pri-ink) !important; opacity: .85 }
.runb.best .rnow { background: rgba(0,0,0,.18); color: inherit }
.act .runb[disabled] { background: var(--bg); border: 1.5px dashed var(--line2); color: var(--muted) }
.runb[disabled] .rh b::before { content: none }
.newp { margin: 10px 0 0 }
.btn.plain { background: var(--card); color: var(--ink); border: 1px solid var(--line2) }
/* «Сессия и лимиты» одним блоком (Андрей 19.10): строка сессии, норма, карточка на аккаунт
   с полоской окна «сейчас → к концу сборки» (прогнозная часть бледнее, цвет по вердикту). */
.accs h2 .muted { font-weight: 400 }
.sessl { display: flex; gap: 8px; align-items: baseline; margin: 6px 0; font-size: 14px; color: var(--ink2) }
.sessl .dot { flex: none; width: 9px; height: 9px; border-radius: 50%; background: var(--muted) }
.sessl .dot.idle { background: var(--green) }
.sessl .dot.busy { background: var(--pri); animation: bpulse 1.6s ease-in-out infinite }
.sessl .dot.bad { background: var(--red) }
.norm { margin: 0 0 8px; font-size: 14px; color: var(--ink2) }
.lims { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 8px; margin: 10px 0 }
.lim.lead { border-color: var(--pri) }
.lim .lh .fc-chip { margin-left: auto }
.lw .lp small { font-size: inherit; font-weight: 400; color: var(--muted) }
.lw.past .lp small { color: var(--red); font-weight: 600 }
.meter u { position: absolute; top: 0; bottom: 0; border-radius: 0 4px 4px 0; background: var(--bar); opacity: .38 }
.lim.v-go .meter u { background: var(--amber); opacity: .7 }
.lim.v-bad .meter u { background: var(--red); opacity: .55 }
.fc-d { margin: 2px 0 0; font-size: 13px; color: var(--ink2) }
.fc-d.muted { color: var(--muted) }
.lim .tgl { min-height: 36px; padding: 0; border: 0; background: none; font-size: 14px }
.lim .bypf { gap: 0 8px }
.fc-chip { padding: 2px 10px; border-radius: 99px; font-size: 13px; font-weight: 600; white-space: nowrap;
           background: var(--chip); color: var(--chip-ink) }
.fc-chip.v-ok { background: var(--chip-ok); color: var(--chip-ok-ink) }
.fc-chip.v-go { background: var(--chip-go); color: var(--chip-go-ink) }
.fc-chip.v-bad { background: var(--chip-bad); color: var(--chip-bad-ink) }
.lim { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 8px 12px }
.lim.over { border-color: var(--chip-bad-ink) }
.lim .lh { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; margin-bottom: 2px }
.lim .lh .when { margin-left: auto; font-size: 13px }
.lim .lh .when.bad { color: var(--red) }
.lw { display: grid; grid-template-columns: 2em 1fr 4.6em; gap: 2px 8px; align-items: center; font-size: 14px;
      padding: 3px 0 }
.lw .ls { grid-column: 2 / 4; font-size: 12px; margin-top: -3px }
.lw .lp { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600 }
.lw.over .lp { color: var(--red) }
.meter { position: relative; height: 8px; border-radius: 4px; background: var(--line) }
.meter i { display: block; height: 100%; border-radius: 4px; background: var(--bar) }
.lw.over .meter i { background: var(--red) }
.meter b { position: absolute; top: -3px; bottom: -3px; width: 2px; margin-left: -1px; background: var(--ink2) }
.lim .bf { margin-top: 6px }
.lim .bf button { width: 100% }
/* порог окна раскрывается рядом значений, обход галкой у аккаунта (задача 126) */
.thr summary { list-style: none; cursor: pointer; min-height: 24px; display: flex; align-items: center;
               flex-wrap: wrap; gap: 0 4px }
.thr summary::-webkit-details-marker { display: none }
.thr summary u { text-decoration: underline dotted; text-underline-offset: 3px; color: var(--ink) }
.thr summary .pend { color: var(--pri) }
.thrf { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 4px }
.thrf button { min-width: 44px; height: 36px; padding: 0 8px; background: var(--card); color: var(--ink);
               border: 1px solid var(--line2); font-variant-numeric: tabular-nums }
.thrf button.on { border-color: var(--pri); background: var(--pri); color: var(--pri-ink) }
.thr .lno { font-size: 12px }
.bypf { margin-top: 4px }
/* кружок аккаунта и галка автопереключения (задача 125) */
.accpickf { display: inline; margin: 0 }
.accpick { display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 6px 0 0;
        background: none; border: 0; border-radius: 6px; color: inherit; font-size: 16px; cursor: pointer }
button.accpick:hover b { text-decoration: underline }
.accpick i, .tgl i { flex: none; box-sizing: border-box; border: 2px solid var(--line2) }
.accpick i { width: 20px; height: 20px; border-radius: 50% }
.accpick.on i { border-color: var(--pri); background: radial-gradient(circle, var(--pri) 0 4px, transparent 5px) }
.accpick.off { cursor: default; color: var(--muted) }
.accpick.off i { border-style: dashed }
span.accpick { cursor: default }
.lno { margin: 0 0 4px; font-size: 13px }
.autof { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 13px; padding: 2px 0 }
.tgl { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; background: var(--card);
       color: var(--ink); border: 1px solid var(--line2) }
.tgl i { position: relative; width: 34px; height: 20px; border-radius: 10px; background: var(--line) }
.tgl i::after { content: ''; position: absolute; top: 2px; left: 2px; width: 12px; height: 12px;
                border-radius: 50%; background: var(--muted) }
.tgl.on i { border-color: var(--pri); background: var(--pri) }
.tgl.on i::after { left: 16px; background: var(--pri-ink) }
/* Ленты (нажатия, журнал автопилота, ход страницы, разговор сессии): время колонкой слева,
   дата мелко под ним, если не сегодня; итог команды цветом, ответ машины мелко ниже. */
.tl { list-style: none; margin: 8px 0; padding: 0; font-size: 14px; line-height: 1.4 }
.tl li { display: grid; grid-template-columns: 3.3em 1fr; gap: 10px; padding: 7px 0; border-top: 1px solid var(--line) }
.tl li:first-child { border-top: 0 }
.tl time { display: flex; flex-direction: column; color: var(--muted); font-size: 13px; font-variant-numeric: tabular-nums;
           line-height: 1.35 }
.tl time small { font-size: 11px; color: var(--faint) }
.tl li > div { min-width: 0; word-break: break-word }
.tl .ci { display: inline-block; margin-left: 4px; padding: 0 7px; border-radius: 99px; font-size: 12px;
          background: var(--chip); color: var(--chip-ink) }
.tl .done .ci { background: var(--chip-ok); color: var(--chip-ok-ink) }
.tl .refused .ci, .tl .expired .ci { background: var(--chip-bad); color: var(--chip-bad-ink); font-weight: 600 }
.tl .pending .ci { background: var(--chip-go); color: var(--chip-go-ink); font-weight: 600 }
.tl .cr { display: block; margin-top: 2px; color: var(--muted); font-size: 13px; line-height: 1.35 }
.tl li.ask > div { font-weight: 600; color: var(--pri) }
.tl li.answer > div { color: var(--ink2) }
.tl li.tool > div { color: var(--muted); font-size: 13px }
.tl li.human b { color: var(--pri) }
.tl li.tool { padding: 3px 0; border: 0 }
.bhist h2 .muted, .blog h2 .muted { font-weight: 400 }
.blog summary, .talk summary, .scr summary, .stop summary, .allst summary { cursor: pointer }
.blog summary h2 { display: inline }
.talk, .scr { margin: 10px 0; border-top: 1px solid var(--line); padding-top: 8px }
.talk summary, .scr summary { font-weight: 600 }
.scr pre { font-size: 11px; line-height: 1.3; white-space: pre; overflow-x: auto }
.allst { font-size: 13px; color: var(--muted) }
.allst .steps li { font-size: 14px; padding: 4px 0 }
.qcard { background: var(--card); border: 2px solid var(--pri); border-radius: 10px; padding: 10px 12px; margin: 14px 0 }
.qcard h2 { margin: 0 0 6px; font-size: 17px; line-height: 1.3 }
.qcard .qt { white-space: pre-wrap; margin: 0 0 8px }
.qcard .qr { font-size: 14px; margin: 0 0 8px }
.qcard textarea { min-height: 3.2em }
.opts { display: grid; gap: 8px; margin: 10px 0 }
.opts button { text-align: left; padding: 11px 14px; font-size: 15px; line-height: 1.3 }
.opts button small { opacity: .8 }
.secs { list-style: none; margin: 0; padding: 0 }
/* вопрос скелета (Андрей 18.10): кнопки «Как рекомендую» и «Разделы как есть» сверху, хотя
   в разметке последние (Enter в поле имени жмёт «Отправить правки»); списки по разделам и
   «Отправить правки» видны, только когда раскрыто «Поправить разделы по одному» */
form.sk { display: flex; flex-direction: column }
form.sk > .opts { order: -1; margin-top: 0 }
form.sk > label { margin-top: 10px }
.sedit { margin: 4px 0 6px; font-size: 14px; color: var(--ink2) }
.sedit summary { cursor: pointer }
.sedit:not([open]) ~ .secs .sa, .sedit:not([open]) ~ .sgo { display: none }
.sec { border-top: 1px solid var(--line); padding: 8px 0 }
.sec .sn { line-height: 1.35 }
.sec details { font-size: 13px; color: var(--ink2) }
.sec .quotes { margin: 4px 0; padding-left: 18px }
.sa { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px }
.sa select { font: inherit; font-size: 15px; padding: 6px 8px; border: 1px solid var(--line2); border-radius: 6px;
             background: var(--card); color: inherit }
.sa .nm { flex: 1 1 10em; width: auto }
.sa .into { flex: 1 1 8em; min-width: 0 }
/* Имя и раздел для слияния видны, только когда выбрано это действие. Без :has браузер
   отбросит правило целиком, и поля просто будут видны все. */
.sec:has(select option[value=rename]:not(:checked)) .nm { display: none }
.sec:has(select option[value=merge]:not(:checked)) .into { display: none }
.s8 { margin: 14px 0 }
.s8 .bf { display: inline }
form.note { margin: 14px 0 }
.stop { margin: 16px 0 24px; border-top: 1px solid var(--line); padding-top: 10px }
.stop summary { color: var(--red); font-weight: 600 }
.stop p { font-size: 14px; color: var(--ink2) }
.node h2 { font-size: 17px; margin: 18px 0 6px }
.rubs { list-style: none; margin: 0; padding: 0; background: var(--card); border: 1px solid var(--line); border-radius: 8px }
.rubs li { border-top: 1px solid var(--line) }
.rubs li:first-child { border-top: 0 }
.rubs summary { display: flex; gap: 8px; align-items: baseline; padding: 10px 12px; cursor: pointer; list-style: none }
.rubs summary::-webkit-details-marker { display: none }
.rubs .num { flex: none; min-width: 2.3em; color: var(--muted); font-variant-numeric: tabular-nums }
.rubs .rn { flex: 1 }
.rubs .rc { flex: none; font-variant-numeric: tabular-nums; color: var(--ink2) }
.rubs li.few summary { color: var(--faint) }
.rubs .rd { padding: 0 12px 10px; font-size: 14px }
.rubs .rd p { margin: 0 0 6px }
.rubs .bad { color: var(--red) }

/* ── кнопки и поля ── */
button { font-family: inherit; font-size: 15px; padding: 8px 16px; border-radius: 6px;
         border: 1px solid var(--pri); background: var(--pri); color: var(--pri-ink); cursor: pointer }
button.plain { background: var(--card); color: var(--ink); border-color: var(--line2) }
button.danger { background: var(--red); border-color: var(--red); color: #fff; white-space: nowrap }
button[disabled] { background: var(--off); border-color: var(--off); cursor: not-allowed }
.act { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin: 12px 0 }
.act button { font-size: 16px; padding: 11px 22px }
.act span { font-size: 13px; flex: 1 1 12em }
label { display: block; margin: 12px 0 3px; font-size: 13px; color: var(--ink2) }
label .note { color: var(--faint) }
input[type=text], input[type=password], input[type=search], textarea {
  width: 100%; font-family: inherit; font-size: 15px; line-height: 1.45; padding: 7px 9px;
  border: 1px solid var(--line2); border-radius: 6px; background: var(--card); color: inherit }
textarea { resize: vertical; overflow: hidden }
.cnt { float: right; font-size: 12px; color: var(--faint) }
.cnt.over { color: var(--red); font-weight: 600 }
.bar { position: sticky; bottom: var(--nav-h); background: var(--bg); border-top: 1px solid var(--line);
       padding: 10px 0; margin-top: 20px; display: flex; gap: 10px; align-items: center }

/* ── простой вид правки ── */
.cards { margin: 8px 0 4px; padding: 0; list-style: none }
.cards li { border-left: 3px solid var(--line); padding: 4px 0 4px 10px; margin: 6px 0; font-size: 14px }
.cards .q { color: var(--muted) }
.cards .who { color: var(--faint); font-size: 12px }
.cards input[type=text] { font-size: 13px; padding: 4px 7px; margin-top: 3px }
.cards label.flag { margin: 4px 0 0; cursor: pointer }
.cards li.off { border-left-color: var(--red) }
.cards li.off .q { text-decoration: line-through; opacity: .6 }
.photo { font-size: 13px; color: var(--faint); border-left: 3px dashed var(--photo);
         padding-left: 10px; margin: 6px 0 }

/* ── история правок ── */
.hist { margin: 8px 0; padding: 0; list-style: none }
.hist li { border-top: 1px solid var(--line); padding: 8px 0; font-size: 14px; display: grid;
           grid-template-columns: 1fr auto; gap: 2px 12px; align-items: center }
.hist li > div:first-child, .hist .subj { grid-column: 1 }
.hist form, .hist li > span.muted { grid-column: 2; grid-row: 1 / span 2 }
.hist li > span.muted { max-width: 14em; text-align: right }
.hist button { font-size: 13px; padding: 5px 10px }
.hist .chg { grid-column: 1 / -1; font-size: 13px }
.hist summary { cursor: pointer; color: var(--link) }
.hist details p { margin: 10px 0 2px; font-size: 13px }
.hist details div.muted { font-size: 12px; margin-top: 4px }
.hist pre { margin: 2px 0 }
.hist pre.old { border-left: 3px solid var(--old) }
.hist pre.new { border-left: 3px solid var(--new) }
.about summary { cursor: pointer; color: var(--muted); font-size: 14px; padding: 6px 0 }
.about p { margin: 2px 0 8px; font-size: 13px }

/* ── релизы ── */
.rels { list-style: none; margin: 12px 0; padding: 0 }
.rels li { margin-bottom: 8px }
.rels label, .rels .cur { display: flex; gap: 12px; align-items: center; margin: 0;
       padding: 12px 14px; font-size: 15px; color: inherit; background: var(--card);
       border: 1px solid var(--line); border-radius: 8px; cursor: pointer }
.rels label:has(input:checked) { border-color: var(--pri); box-shadow: inset 0 0 0 1px var(--pri) }
.rels input { flex: none; width: 20px; height: 20px; margin: 0; accent-color: var(--pri) }
.rels .cur { background: none; border-style: dashed; cursor: default; padding-left: 46px }
.rels .rn { display: flex; flex-wrap: wrap; gap: 2px 12px; align-items: baseline }
.rels code { font-size: 15px }

/* ── ход выкладки ── */
.quip { text-align: center; font-size: 14px; color: var(--faint); min-height: 1.5em;
        margin: 16px 0 4px; opacity: 1; transition: opacity .25s }
.pbar { height: 8px; border-radius: 5px; background: var(--line); overflow: hidden; margin: 14px 0 4px }
.pbar i { display: block; height: 100%; background: var(--bar); transition: width .3s }
.steps { list-style: none; margin: 10px 0 14px; padding: 0 }
.steps li { display: flex; gap: 10px; align-items: baseline; padding: 7px 0;
            border-bottom: 1px solid var(--line); font-size: 15px }
.steps li:last-child { border-bottom: none }
.steps .sg { flex: none; width: 1.2em; color: var(--green); font-weight: 600 }
.steps li.now { font-weight: 600 }
.steps li.now .sg { color: var(--faint) }
.steps li span.muted { margin-left: auto; white-space: nowrap }
pre { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px;
      overflow-x: auto; font-size: 13px; white-space: pre-wrap; word-break: break-word }

/* ── журнал ── */
.log { list-style: none; margin: 8px 0; padding: 0 }
.log li { border-top: 1px solid var(--line); padding: 8px 0; font-size: 14px }
.log .when { color: var(--muted); font-size: 13px; margin-right: 8px; font-variant-numeric: tabular-nums }
.log .what { font-weight: 600 }
.log .more { display: block; color: var(--muted); font-size: 12px; word-break: break-word }

/* ── вход и превью ── */
.login { max-width: 360px; margin: 10vh auto 0 }
.login input[type=text], .login input[type=password] { font-size: 17px; padding: 10px 12px }
.login .act button { width: 100% }
iframe { width: 390px; max-width: 100%; height: 78vh; border: 1px solid var(--line2);
         border-radius: 8px; background: #fff }

/* ── план выкладки (задача 110) ── */
.sh { margin: 0 0 8px; padding: 12px 14px 14px; border-radius: 12px; background: var(--card);
      border: 1px solid var(--line2) }
.sh[hidden] { display: none }
.sh p { margin: 0 0 8px; font-size: 14px; color: var(--ink2) }
.sh .row, .lay .row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap }
.sh input[type=date], .lay input[type=date], .lay select { font: inherit; font-size: 16px; height: 44px;
      padding: 0 10px; border: 1px solid var(--line2); border-radius: 10px; background: var(--bg); color: inherit }
.sh .free { display: flex; gap: 6px; flex-wrap: wrap; margin: 10px 0 0 }
.sh .free button { font-size: 13px; padding: 6px 11px; border-radius: 999px; border: 0;
      background: var(--chip); color: var(--chip-ink) }
.sh .free button.cur { background: var(--chip-ok); color: var(--chip-ok-ink); font-weight: 600 }
.sh .btns { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 12px 0 0 }
.sh .btns button { height: 44px; padding: 0 18px; font-size: 15px; border-radius: 10px }
.sh .cancel { display: inline-flex; align-items: center; height: 44px; padding: 0 12px; color: var(--muted) }
.hint2 { margin: 6px 0 8px; font-size: 13px; color: var(--muted) }
.lay { margin: 6px 0 4px; padding: 12px 14px; border-radius: 12px; background: var(--card); border: 1px solid var(--line) }
.lay .row { font-size: 15px }
.lay .row + .row { margin-top: 10px }
.lay label { display: inline; margin: 0; font-size: 15px; color: inherit }
.lay button.go2 { height: 44px; padding: 0 18px; border-radius: 10px; font-size: 15px; font-weight: 600 }
.day { display: flex; align-items: baseline; gap: 8px; padding: 14px 0 4px; font-size: 14px; font-weight: 600;
       color: var(--ink2); font-variant-numeric: tabular-nums }
.day .d2 { font-weight: normal; color: var(--muted) }
.day .chip { margin-left: auto; font-weight: normal }
.day.empty { font-weight: normal; color: var(--faint); padding-bottom: 10px; border-bottom: 1px dashed var(--line) }
.day.empty .d2 { margin-left: auto }
.with { margin: 2px 0 0; font-size: 13px; color: var(--muted) }
.past .r .when { color: var(--muted) }
/* выбор дня над «Утверждаю» в простом виде правки */
.when-pick { margin: 12px 0 0; display: grid; gap: 8px }
.when-pick label { display: flex; gap: 10px; align-items: center; margin: 0; padding: 10px 12px; font-size: 15px;
      color: var(--ink); border: 1px solid var(--line2); border-radius: 10px; min-height: 48px }
.when-pick label:has(input:checked) { border-color: var(--green); box-shadow: inset 0 0 0 1px var(--green) }
.when-pick input[type=radio] { width: 20px; height: 20px; margin: 0; accent-color: var(--green) }
.when-pick input[type=date] { margin-left: auto; font: inherit; font-size: 15px; height: 36px; padding: 0 8px;
      border: 1px solid var(--line2); border-radius: 8px; background: var(--bg); color: inherit }

/* ── экспорт TG-чатов (задача 123) ── */
.xwin { list-style: none; margin: 8px 0; padding: 0; font-size: 14px }
.xwin li { padding: 2px 0 }
.lim.off { opacity: .6 }
.lim .xacc { margin: 4px 0 0; font-size: 13px; word-break: break-word }
.xeta { font-size: 14px; color: var(--pri); margin: 4px 0 }
.xbusy { list-style: none; margin: 8px 0; padding: 0; font-size: 14px }
.xbusy li { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; margin: 6px 0 }
.xbusy .xbw { display: block; font-size: 13px; font-variant-numeric: tabular-nums }
.xbar { display: block; height: 6px; margin-top: 6px; border-radius: 3px; background: var(--line); overflow: hidden }
.xbar i { display: block; height: 100%; background: var(--bar) }
.xbar i.run { width: 30%; animation: xrun 1.4s ease-in-out infinite alternate }
@keyframes xrun { from { margin-left: 0 } to { margin-left: 70% } }
@media (prefers-reduced-motion: reduce) { .xbar i.run { animation: none; width: 100% ; opacity: .5 } }
.xerr1 { display: block; font-size: 12px; font-weight: normal; word-break: break-word; opacity: .85 }
.xf { margin: 8px 0 }
.xf input[type=search], .xf select { font: inherit; font-size: 16px; height: 44px; padding: 0 10px; border: 1px solid var(--line2);
      border-radius: 10px; background: var(--card); color: inherit; box-sizing: border-box }
.xf input[type=search] { width: 100% }
html:not(.js) .xf { display: none }
.xfound { font-size: 13px; margin: 6px 0 4px }
/* Страна карточкой, бренды строками внутри (Андрей 20.10: страна выделялась слабее бренда,
   всё шло вперемешку): заголовок крупнее бренда, цифры второй строкой. */
.xcn { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 0 14px 2px; margin: 14px 0 }
.xcn h3 { display: flex; flex-direction: column; gap: 2px; font-size: 20px; line-height: 1.2; margin: 0; padding: 14px 0 12px;
      color: var(--ink) }
.xcn h3 .muted, .xbr summary .muted { font-weight: normal; font-size: 13px }
.xbr { border-top: 1px solid var(--line) }
/* бренд строкой: имя, цифры, стрелка справа поворачивается при раскрытии */
.xbr > summary { cursor: pointer; display: flex; align-items: baseline; flex-wrap: wrap; gap: 2px 8px; padding: 11px 0;
      font-size: 15px; list-style: none; -webkit-tap-highlight-color: transparent }
.xbr > summary::-webkit-details-marker { display: none }
/* стрелка прибита к правому краю: в узкой карточке страны строка с плашкой «давно» переносится,
   и стрелка без этого уезжала на вторую строку */
.xbr > summary { position: relative; padding-right: 24px }
.xbr > summary .xchev { position: absolute; right: 2px; top: 50%; margin-top: -5px }
.xchev { align-self: center; margin-left: auto; width: 8px; height: 8px; border: solid var(--faint); border-width: 0 2px 2px 0;
      transform: rotate(45deg) translate(-2px, -2px); transition: transform .15s }
.xbr[open] > summary .xchev { transform: rotate(-135deg) translate(-2px, -2px) }
@media (prefers-reduced-motion: reduce) { .xchev { transition: none } }
/* Учётка на «Сейчас» (Андрей 20.10): «час» и «сутки» кнопками, лимит подчёркнут, под ними окна
   и пауза чипами; нажатие открывает правку во всю ширину карточки, тумблер учётки в шапке */
.xa .lh .bf { margin: 0 0 0 auto }
.xa .lh .when + .bf { margin-left: 0 }
.xa .lh .bf button.tgl.bare { width: auto; margin: -8px -4px -8px 0 }
button.xs { font: inherit; color: inherit; text-align: left; background: none; border: 0; border-radius: 6px;
      padding: 4px 6px; margin: -4px -6px; cursor: pointer; -webkit-tap-highlight-color: transparent }
button.xs:hover, button.xs[aria-expanded=true] { background: var(--bg) }
.xs .lp u, .xab b { text-decoration: underline dashed var(--faint); text-underline-offset: 3px }
.xam { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 0 }
.xab { font: inherit; font-size: 13px; color: var(--ink2); min-height: 36px; padding: 4px 12px; border-radius: 999px;
      border: 1px solid var(--line); background: none; cursor: pointer }
.xab[aria-expanded=true] { border-color: var(--pri) }
.xab b { color: var(--ink) }
.xed { margin: 8px 0 0; padding: 8px 0 0; border-top: 1px solid var(--line) }
.xli { display: flex; flex-wrap: wrap; align-items: end; gap: 8px }
.xli label { display: flex; flex-direction: column; gap: 2px; flex: 1 1 100%; min-width: 0; margin: 0; font-size: 12.5px; color: var(--muted) }
.xli input { font: inherit; font-size: 16px; height: 44px; width: 100%; padding: 0 10px; box-sizing: border-box;
      border: 1px solid var(--line2); border-radius: 8px; background: var(--bg); color: var(--ink); font-variant-numeric: tabular-nums }
.xli button { flex: 1 1 0; height: 44px }
@media (min-width: 480px) { .xli label { flex: 1 1 80px } .xli button { flex: none; padding: 0 16px } }
.xmd { display: flex; flex-wrap: wrap; gap: 6px }
.xmd .bf { flex: 1 1 30%; margin: 0 }
.xmd button { width: 100%; min-height: 44px; padding: 4px 8px; font-size: 14px }
.xmd button.on { border-color: var(--pri); color: var(--pri); font-weight: 600 }
.xlh { font-size: 13px; margin: 6px 0 0 }
.xchats { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 6px; margin: 0 0 12px }
/* Чат плашкой (Андрей 17.10): модель, цепочки и дата на виду, цвет по свежести экспорта;
   по нажатию плашка раскрывается на всю строку с именем чата и остальными цифрами. */
.xc { min-width: 0; border-radius: 14px; border: 1px solid transparent; font-size: 14px;
      background: var(--chip); color: var(--chip-ink) }
.xc > summary { list-style: none; cursor: pointer; display: flex; flex-direction: column; gap: 1px;
      padding: 7px 12px; -webkit-tap-highlight-color: transparent }
.xc > summary::-webkit-details-marker { display: none }
.xc .xl { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.xc .xn { font-size: 12.5px; opacity: .85; font-variant-numeric: tabular-nums; white-space: nowrap }
.xc[open] { grid-column: 1 / -1; background: var(--card); color: var(--ink); border-color: var(--line2) }
.xc[open] .xl { white-space: normal }
.xc[open] .xn { display: none }
.t-green { background: var(--chip-ok); color: var(--chip-ok-ink) }
.t-orange { background: var(--chip-go); color: var(--chip-go-ink) }
.t-yellow { background: var(--chip-bad); color: var(--chip-bad-ink) }
.t-red { background: var(--chip-bad); color: var(--chip-bad-ink); border-color: var(--chip-bad-ink) }
.xc.off { opacity: .55 }
.xc.busy { border-color: var(--pri); border-style: dashed }
.xd { padding: 0 12px 10px }
.xd .xt { font-weight: 600; word-break: break-word }
.xd .xt a { color: inherit }
.xd .xm { margin: 2px 0 0; font-size: 13px; color: var(--muted); font-variant-numeric: tabular-nums }
.xd .chip { display: inline-block; margin: 4px 0 0 }
/* страна и цвета одной лентой, лишнее уезжает вбок прокруткой, а не вторым рядом */
.xleg { display: flex; gap: 6px; margin: 8px -16px 0; padding: 0 16px 2px; overflow-x: auto; scrollbar-width: none }
.xleg::-webkit-scrollbar { display: none }
.xleg > * { flex: none }
.xf .xleg select { height: 32px; padding: 0 28px 0 12px; font-size: 13px; border-radius: 999px; -webkit-appearance: none;
      appearance: none; background: var(--card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23918a82' stroke-width='1.6'/%3E%3C/svg%3E") no-repeat right 11px center }
.xf .xleg select:has(option:checked:not([value=""])) { border-color: var(--pri); color: var(--pri); font-weight: 600 }
.xlg { font: inherit; font-size: 13px; height: 32px; padding: 0 12px; border-radius: 999px; border: 1px solid transparent; cursor: pointer; white-space: nowrap }
.xlg.t-grey { background: var(--chip); color: var(--chip-ink) }
.xlg[aria-pressed="true"] { border-color: currentColor; box-shadow: inset 0 0 0 1px currentColor; font-weight: 600 }
.xbr summary .chip { margin-left: 4px; vertical-align: 1px }
.xerr { margin: 4px 0 0; font-size: 13px; color: var(--muted) }
.xerr.bad { color: var(--red); font-weight: normal }
.xerr summary { cursor: pointer; word-break: break-word }
.xerr pre { white-space: pre-wrap; word-break: break-word; font-size: 12px; max-height: 240px; overflow: auto }
.xrun { display: block; font-size: 13px; color: var(--ink2); font-variant-numeric: tabular-nums }
.xr1 { display: flex; align-items: baseline; gap: 10px }
.xr1 b { flex: 1; min-width: 0; overflow-wrap: anywhere }
.xr1 .when { flex: none; margin: 0 }
.xdur { white-space: nowrap }
.xgo { color: var(--pri); font-weight: 600 }
.xgo::before { content: ''; display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 6px;
      vertical-align: 1px; background: currentColor; animation: lvpulse 1.6s ease-in-out infinite }
@media (prefers-reduced-motion: reduce) { .xgo::before { animation: none } }
.xtab { padding-top: 6px }
.xtab .log li:first-child { border-top: none }
/* сводка базы плитками (Андрей 17.10): по три в ряд на телефоне, число крупно, подпись под ним */
.xtiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); gap: 6px; margin: 8px 0 0 }
.xtile { display: flex; flex-direction: column; min-width: 0; padding: 6px 10px; border-radius: 10px;
      background: var(--card); border: 1px solid var(--line) }
.xtile span, .xtile small { font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.xtile b { font-size: 18px; line-height: 1.25; font-variant-numeric: tabular-nums; white-space: nowrap }
.xtile.bad { border-color: var(--chip-bad-ink); background: var(--chip-bad); color: var(--chip-bad-ink) }
.xtile.bad span, .xtile.bad small { color: inherit }
.xsumw { font-size: 12px; margin: 4px 0 8px }
/* кнопки экспорта (задача 123, часть 2): пауза и окна строкой с кнопкой справа, кнопки плашки
   рядом под цифрами, галка «в пачку» и липкая полоса «Обновить выбранные» */
.xctl { margin: 10px 0 4px; padding: 4px 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--card) }
.xctl .xwin { margin: 0 }
.xrow { display: flex; align-items: center; gap: 10px; padding: 6px 0; font-size: 14px }
.xctl .xwin li { border-top: 1px solid var(--line) }
.xrow > span { flex: 1; min-width: 0 }
.xrow .bf button { min-height: 40px; padding: 6px 14px; white-space: nowrap }
.xrow > span small { display: block; font-size: 13px; color: var(--muted) }
.xrow.off > span > b, .xrow.off > span { color: var(--muted) }
/* пауза и окна переключателем: голая дорожка без рамки кнопки, мимо неё в 44 px не промахнуться */
.tgl.bare { min-height: 44px; min-width: 52px; padding: 0 4px; justify-content: center; background: none; border: 0 }
.tgl.bare i { width: 40px; height: 24px; border-radius: 12px }
.tgl.bare i::after { top: 3px; left: 3px; width: 14px; height: 14px }
.tgl.bare.on i::after { left: 19px }
.tgl.bare.sent { opacity: .5 }
/* учётка: окна чипом, «час» и «сутки» рядом в две колонки */
.xa .xast { margin: 0 0 2px; font-size: 13px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.xsl { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 16px; margin: 6px 0 2px }
.xs { display: grid; grid-template-columns: 1fr auto; gap: 3px 8px; align-items: baseline; font-size: 13px; min-width: 0 }
.xs .ln { color: var(--muted) }
.xs .lp { font-weight: 600; font-variant-numeric: tabular-nums }
.xs .meter { grid-column: 1 / -1; height: 6px }
.xs small { grid-column: 1 / -1; font-size: 12px; color: var(--muted) }
.xs.over .lp { color: var(--red) }
.xs.over .meter i { background: var(--red) }
.xbusy .bf { float: right; margin: -4px -6px 0 8px }
.xbusy .xx { min-width: 40px; min-height: 40px; padding: 0; font-size: 16px; line-height: 1 }
.xact { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 8px 0 0 }
.xact button { min-height: 40px; padding: 6px 14px }
.xpk { display: inline-flex; align-items: center; gap: 6px; margin: 0 0 0 4px; min-height: 40px; font-size: 14px; color: var(--ink2) }
.xpk input { width: 20px; height: 20px; margin: 0; accent-color: var(--pri) }
.xc:has(input[name=chats]:checked) { box-shadow: inset 0 0 0 2px var(--pri) }
.xpick { font-size: 13px; padding: 3px 10px; margin-left: 6px; vertical-align: 1px }
.xsel { z-index: 5 }
.xsel[hidden] { display: none }
.xsel .xselw { font-size: 13px }
html:not(.js) .xpk, html:not(.js) .xsel { display: none }
/* якорь после кнопки (#ctl, #c<номер>) не уезжает под липкую шапку */
.xctl, .xc { scroll-margin-top: calc(var(--head-top, 0px) + 64px) }
/* «Сборка» → «Врезки» (задача 131, часть 4, макет v1 22.10). Всё под .vrez: .rows, .num,
   .go, .back и .small у панели уже заняты другим видом. Врезка повторяет вид 7а сайта. */
.btabs { margin: 0 0 12px }
.vrez .sum { display: flex; margin: 0 0 6px; padding: 0; gap: 6px }
.vrez .sum div { flex: 1 1 0; min-width: 0; background: var(--card); border: 1px solid var(--line); border-radius: 8px;
  padding: 6px 4px 5px; text-align: center }
.vrez .sum dt { font-size: 11.5px; line-height: 1.2; color: var(--muted); white-space: nowrap }
.vrez .sum dd { margin: 0; font-size: 20px; font-weight: 650; line-height: 1.25; font-variant-numeric: tabular-nums }
.vrez .sum .go { background: var(--chip-go); border-color: var(--chip-go); color: var(--chip-go-ink) }
.vrez .sum .go dt { color: inherit }
.vrez .sum .bad { background: var(--chip-bad); border-color: var(--chip-bad); color: var(--chip-bad-ink) }
.vrez .sum .bad dt { color: inherit }
.vrez .sum .zero dd { color: var(--faint) }
.vrez .small { font-size: 13px; margin: 0 0 8px }
.vrez .num { color: var(--muted); font-weight: normal; font-variant-numeric: tabular-nums }
.vrez .ofr p.pg { margin: 0 0 6px; font-size: 13px }
.vrez .ofr p.pg a { color: var(--muted); text-decoration: none }
.vrez .ofr { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px 12px; margin: 0 0 8px }
.vrez .ofr.red { border-color: var(--chip-bad-ink) }
.vrez .osec { margin: 0; font-weight: 600; line-height: 1.3; font-size: 15px }
.vrez .pl { display: block; font-weight: 400; font-size: 12px; color: var(--muted) }
.vrez .end { margin: 8px 0 0; padding: 0 0 0 10px; border-left: 2px solid var(--line2); font-size: 13.5px; line-height: 1.4;
  color: var(--ink2) }
.vrez .end span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden }
.vrez .end cite { display: block; font-style: normal; font-size: 12px; color: var(--faint) }
.vrez .ilw { margin: 6px -4px 0; padding: 0 4px 6px }
.vrez .il { display: grid; grid-template-columns: 52px 1fr; column-gap: 8px; align-items: start; color: var(--ink) }
.vrez .il svg.h { grid-column: 1; grid-row: 1/3; width: 52px; height: 56px; color: var(--pri); margin-top: 6px }
.vrez .il .k { grid-column: 2; font-size: 16px; line-height: 1.35; font-weight: 500; margin-bottom: 2px; overflow-wrap: anywhere }
.vrez .il .t { grid-column: 2; color: var(--pri); font-size: 16.5px; line-height: 1.35; font-weight: 650 }
.vrez .il .t .c { float: right; margin-left: 14px; font-size: 13px; line-height: 22.3px; font-weight: 400; color: var(--faint);
  white-space: nowrap; font-variant-numeric: tabular-nums }
.vrez .il .t .c .qic { width: 12px; height: 12px; margin-right: 4px; vertical-align: -1px }
.vrez .to { margin: 2px 0 0 60px; font-size: 12.5px; color: var(--muted) }
.vrez .to a { color: inherit }
.vrez .whyl { margin: 8px 0 0; font-size: 13.5px; line-height: 1.4; color: var(--ink2) }
.vrez .dec { display: flex; gap: 8px; margin: 12px 0 0; align-items: center }
.vrez .dec form { margin: 0; display: flex }
.vrez .dec .btn { height: 44px; padding: 0 14px; justify-content: center; border: 0; font: inherit; font-size: 15px; font-weight: 600;
  cursor: pointer; white-space: nowrap }
.vrez .dec .btn.plain { border: 1px solid var(--line2) }
.vrez .dec .btn.no { color: var(--muted) }
.vrez .dec > .small { flex: 1; margin: 0 }
.vrez .dec .btn[disabled] { background: var(--bg); border: 1.5px dashed var(--line2); color: var(--muted); cursor: default }
.vrez .verdict { margin: 6px 0 4px; font-size: 14px; line-height: 1.35 }
.vrez .bad { color: var(--chip-bad-ink); font-weight: 500 }
.vrez .ok { color: var(--chip-ok-ink); font-weight: 600 }
.vrez .go { color: var(--chip-go-ink); font-weight: 600 }
.vrez .sum .go, .vrez .sum .bad { font-weight: inherit }
.vrez .gone summary, .vrez .allp summary { cursor: pointer }
.vrez .gone summary h2, .vrez .allp summary h2 { display: inline }
.vrez .rows { list-style: none; margin: 6px 0 0; padding: 0; font-size: 14px; line-height: 1.4 }
.vrez .rows li { padding: 9px 0; border-top: 1px solid var(--line) }
.vrez .rows li:first-child { border-top: 0 }
.vrez .rows > li > a { color: inherit }
.vrez .rows.lnk a { display: flex; justify-content: space-between; gap: 10px; color: inherit; text-decoration: none; min-height: 26px;
  align-items: center }
.vrez .rows.lnk small { display: block; font-size: 12.5px; color: var(--muted) }
.vrez .rows.lnk b { flex: none; color: var(--pri); font-weight: 600 }
.vrez .rows .bad { font-size: 13px }
.vrez .back { margin: 4px 0 6px; font-size: 15px }
.vrez .back a { text-decoration: none }
.vrez h1.ph { font-size: 22px; line-height: 1.25; margin: 0 0 4px }
/* «Прочитать» на «Врезках» (задача 131, часть 5): выбор пачки пилюлями, плашки как у «Собрать» */
.vrez .lread { margin: 10px 0 4px; padding: 10px 12px; background: var(--card); border: 1px solid var(--line); border-radius: 8px }
.vrez .lread h2 { margin: 0 0 4px }
.vrez .lread > p { margin: 0 0 8px }
.vrez .npick { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0 0 8px }
.vrez .npick a { min-width: 40px; padding: 5px 10px; border: 1px solid var(--line); border-radius: 99px; text-align: center;
                 text-decoration: none; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--ink) }
.vrez .npick a[aria-current] { background: var(--pri); border-color: var(--pri); color: var(--pri-ink) }
.vrez .lread .runacc { margin: 0 0 4px }
.vrez .lread .lacc { margin: 2px 0 0 }
.vrez .lread .lpages { margin: 8px 0 0 }

/* Раздел «Поиск» (задача 134, макет v1 Андрея 24.10): поисковик сегментами, плитки, визиты по
   дням слоями Google и Яндекса с точками выхода страниц, строки страниц в две-три линии. */
.se { display: flex; gap: 4px; margin: 6px 0 0; padding: 3px; border-radius: 12px; background: var(--chip) }
.se a { flex: 1; text-align: center; padding: 8px 0; border-radius: 9px; font-size: 15px; color: var(--chip-ink); text-decoration: none }
.se a[aria-current] { background: var(--card); color: var(--ink); font-weight: 600; box-shadow: 0 1px 3px rgba(0,0,0,.18) }
.kt { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 14px 0 0 }
.kt div { display: flex; flex-direction: column; min-width: 0; padding: 8px 10px; border-radius: 10px; background: var(--card); border: 1px solid var(--line) }
.kt span { font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.kt b { font-size: 22px; line-height: 1.2; font-variant-numeric: tabular-nums; white-space: nowrap }
.kt b small { font-size: 13px; font-weight: 500; color: var(--muted) }
.kt i { font-style: normal; font-size: 12px; color: var(--faint); white-space: nowrap }
.kt i.up { color: var(--vis-up) } .kt i.down { color: var(--vis-down) }
.sx h2 { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin: 20px 0 6px; font-size: 16px }
.sx h2 a, .sx h2 small { font-size: 13px; font-weight: normal }
.sx h2 small { color: var(--muted) }
.lg { display: flex; flex-wrap: wrap; gap: 4px 12px; margin: 0 0 4px; font-size: 12px; color: var(--muted) }
.lg span { display: inline-flex; align-items: center; gap: 5px }
.lg span::before { content: ''; width: 9px; height: 11px; border-radius: 2px; background: var(--vis-bar) }
.lg .ky::before { background: var(--pri) }
.lg .kp::before { width: 7px; height: 7px; border-radius: 50%; background: var(--green) }
.ch svg { display: block; width: 100%; height: auto; overflow: visible }
.ch .grid { stroke: var(--line); stroke-width: 1 }
.ch .ax { fill: var(--muted); font-size: 10.5px; font-variant-numeric: tabular-nums }
.ch .google { fill: var(--vis-bar) } .ch .yandex { fill: var(--pri) }
.ch .pub { fill: var(--green) }
.sr { border-top: 1px solid var(--line) }
.sr > a { display: flex; align-items: center; gap: 10px; min-height: 30px; padding: 8px 0 0; color: inherit; text-decoration: none }
.sr .num { flex: none; width: 2.3em; color: var(--faint); font-size: 13px; font-variant-numeric: tabular-nums }
.sr .name { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.sr .big { flex: none; display: inline-flex; align-items: center; gap: 4px; font-size: 15px; font-weight: 600; font-variant-numeric: tabular-nums }
.sr .big svg { width: 14px; height: 14px; fill: none; stroke: var(--faint); stroke-width: 2.2; stroke-linecap: round }
.sr .big.zero { color: var(--faint); font-weight: normal }
.sr .fx { margin: 0; padding: 2px 0 8px calc(2.3 * 13px + 10px); font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums }
.sr .fx b { font-weight: 700; color: var(--faint) }
.sr .fx b.in { color: var(--green) }
.sr .fx .t10 { padding: 1px 5px; border-radius: 5px; background: var(--chip-ok); color: var(--chip-ok-ink) }
.sr .why { margin: -4px 0 0; padding: 0 0 8px calc(2.3 * 13px + 10px); font-size: 12.5px; color: var(--chip-go-ink) }
.fl { display: flex; gap: 6px; flex-wrap: wrap; margin: 12px 0 8px }
.fl a { font-size: 13px; padding: 6px 11px; border-radius: 999px; background: var(--chip); color: var(--chip-ink); text-decoration: none }
.fl a[aria-current] { background: var(--chip-go); color: var(--chip-go-ink); font-weight: 600 }
.fl select { margin-left: auto; font: inherit; font-size: 13px; padding: 5px 8px; border-radius: 999px; border: 1px solid var(--line2); background: var(--bg); color: inherit }
.src { margin: 22px 0 0; padding: 10px 12px; border-radius: 10px; background: var(--card); border: 1px solid var(--line); font-size: 12.5px; color: var(--muted) }
.src p { margin: 0 } .src p + p { margin-top: 4px }
.src .bad { color: var(--chip-bad-ink) }
.early { margin: 10px 0 0; font-size: 13px; color: var(--muted) }

/* «Поиск», этап 2 (задача 134, макет v2 Андрея 25.10): показы Google столбиками, клики их нижней
   частью нейтральным цветом (оранжевый занят Яндексом), средняя позиция линией того же цвета;
   карточка страницы с запросами GSC таблицей и роботами строками. */
.ch .kl { fill: var(--ink2) } .ch .pok { fill: var(--vis-bar) }
.lg .kk::before { background: var(--ink2) }
.ch .pl { fill: none; stroke: var(--ink2); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round }
.ch .pd { fill: var(--ink2); stroke: var(--bg); stroke-width: 1.5 }
.spg h1 { margin: 2px 0 0; font-size: 21px; line-height: 1.25 }
.spg .sub { margin: 4px 0 0; font-size: 13px; color: var(--muted) }
.spg .lnk { display: flex; flex-wrap: wrap; gap: 6px; margin: 18px 0 0 }
.spg .lnk a { padding: 6px 10px; border-radius: 9px; background: var(--chip); color: var(--chip-ink); font-size: 14px; text-decoration: none }
.spg > .why { margin: 10px 0 0; padding: 8px 10px; border-radius: 10px; background: var(--chip-go); color: var(--chip-go-ink); font-size: 13.5px }
.qt { width: 100%; border-collapse: collapse; font-size: 13.5px; font-variant-numeric: tabular-nums }
.qt th { font-weight: 500; font-size: 12px; color: var(--muted); text-align: right; padding: 0 0 4px 8px }
.qt th:first-child, .qt td:first-child { text-align: left; padding-left: 0 }
.qt td { padding: 6px 0 6px 8px; border-top: 1px solid var(--line); text-align: right; white-space: nowrap }
.qt td:first-child { white-space: normal; overflow-wrap: anywhere }
.bots { margin: 0; padding: 0; list-style: none }
.bots li { display: flex; justify-content: space-between; gap: 10px; padding: 7px 0; border-top: 1px solid var(--line); font-size: 14px }
.bots li span { color: var(--muted); font-size: 13px; text-align: right }
.bots li.old span { color: var(--chip-go-ink) }

/* «Поиск», этап 3 (задача 134, макет v3 Андрея 25.10): вкладка «Позиции» (место ядра в колонках G и Я
   со стрелкой сдвига), карточка замера, лист «Обновить позиции», ядро по замерам в карточке,
   доля в индексе линиями (Google нейтральным цветом, как средняя позиция). */
.sr.pz .pp { flex: none; display: grid; grid-template-columns: 12px 24px 26px; align-items: baseline; font-size: 15px; font-weight: 600; font-variant-numeric: tabular-nums }
.sr.pz .pp b { font-size: 12.5px; color: var(--faint) } .sr.pz .pp b.in { color: var(--green) }
.sr.pz .pp > span { text-align: right } .sr.pz .pp .t10 { padding: 0 4px; border-radius: 5px; background: var(--chip-ok); color: var(--chip-ok-ink) }
.sr.pz .pp i, .rks i, .rkt i { font-style: normal; font-size: 12.5px; font-weight: 600; padding-left: 3px }
i.up { color: var(--vis-up) } i.down { color: var(--vis-down) }
.rkb { margin: 14px 0 0; padding: 10px 12px; border-radius: 10px; background: var(--card); border: 1px solid var(--line) }
.rkb.bad { border-color: var(--chip-bad-ink) } .rkb.bad .rkh b { color: var(--chip-bad-ink) }
.rkh { margin: 0; font-size: 15px } .rkc { margin: 2px 0 0; font-size: 12.5px; color: var(--muted) }
.rkgo { margin: 10px 0 0; width: 100%; height: 44px; border: 0; border-radius: 10px; background: var(--pri); color: var(--pri-ink); font: inherit; font-size: 16px; font-weight: 600 }
.rkgo.sm { width: auto; height: 36px; margin: 0; padding: 0 14px; font-size: 14px }
.rkb .rkp { height: 6px; margin: 8px 0 4px; border-radius: 3px; background: var(--chip) } .rkb .rkp span { display: block; height: 100%; border-radius: 3px; background: var(--pri) }
.rks { display: flex; flex-wrap: wrap; gap: 2px 14px; margin: 12px 0 0; font-size: 13.5px } .rks small { flex-basis: 100%; font-size: 12px; color: var(--muted) }
.rksh { padding: 18px 16px 20px } .rksh h2 { margin: 0 40px 6px 0; font-size: 18px } .rksh > p { margin: 0 0 8px; font-size: 14px }
.rksh dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; margin: 10px 0 4px; font-size: 14px } .rksh dt { color: var(--muted) } .rksh dd { margin: 0 }
.spg .core { margin: -2px 0 6px; font-size: 13.5px; color: var(--muted) }
.rkt b { font-size: 12.5px; color: var(--faint) } .rkt b.in { color: var(--green) }
.rkt .t10 { padding: 0 4px; border-radius: 5px; background: var(--chip-ok); color: var(--chip-ok-ink) }
.rk1 { display: flex; align-items: center; gap: 10px; margin: 10px 0 0; font-size: 12.5px; color: var(--muted) }
.rkf { margin: 0 } .rkgo:disabled { opacity: .45 } .rkb.run .rkh b { color: var(--pri) }
.ch .pl.lg_g { stroke: var(--ink2) } .ch .pd.lg_g { fill: var(--ink2) } .ch .pl.lg_y { stroke: var(--pri) } .ch .pd.lg_y { fill: var(--pri) }
.ch .pv { font-size: 10.5px; font-weight: 600; font-variant-numeric: tabular-nums } .ch .pv.lg_g { fill: var(--ink2) } .ch .pv.lg_y { fill: var(--pri) }
.lg .lg_y::before { background: var(--pri); height: 3px } .lg .lg_g::before { background: var(--ink2); height: 3px }
.sr.pz .core { white-space: nowrap; overflow: hidden; text-overflow: ellipsis } .sr.pz .core em { font-style: normal; color: var(--muted) } .sr.pz .core em.up { color: var(--vis-up) } .sr.pz .core em.down { color: var(--vis-down) }
