/* Общие стили страниц /docs и /docs/<раздел> (раньше один <style> в docs.html). */
.docs-head { padding-block: var(--s-7) var(--s-6); display: grid; gap: var(--s-4); }
/* Оглавление (0.3, Г3). На ≥1024 — колонка слева, липнет под шапкой, текущий раздел подсвечен,
   Ctrl K — фильтр по заголовкам на месте, без сервиса. Уже 1024 — полоса под шапкой, листается
   вбок: на телефоне страница в 15 000 px. Подчёркнутых ссылок подряд больше нет (0.3, «Убрать» 8). */
.docs-layout { display: grid; grid-template-columns: minmax(0, 1fr); }
.docs-body { min-width: 0; }
.docs-toc { position: sticky; top: var(--header-h); z-index: 30; display: grid; gap: var(--s-2); margin-bottom: var(--s-2); padding-block: var(--s-2); background: var(--bg); border-bottom: 1px solid var(--line-2); }
.docs-toc-list { overflow-x: auto; scrollbar-width: none; }
.docs-toc-list::-webkit-scrollbar { display: none; }
/* Поиск и на телефоне: строка над полосой разделов; результаты раскрываются под ней. */
.docs-find { display: flex; align-items: center; gap: var(--s-2); padding: 0 var(--s-3); min-height: 44px; border: 1px solid var(--line-2); border-radius: var(--r-2); background: var(--bg-2); }
.docs-find:focus-within { border-color: var(--acc); }
.docs-find input { flex: 1; width: 100%; min-width: 0; border: 0; background: transparent; color: var(--text); outline: none; }
.docs-find input::placeholder { color: var(--text-3); }
.docs-find kbd { display: none; }
.docs-results:not(.hidden) { display: grid; max-height: 55vh; overflow-y: auto; border: 1px solid var(--line-2); border-radius: var(--r-2); background: var(--bg-2); }
.kds main .docs-toc .docs-results a { display: grid; gap: 2px; min-height: 44px; padding: var(--s-3) var(--s-3); border-bottom: 1px solid var(--line); }
.kds main .docs-toc .docs-results a:last-child { border-bottom: 0; }
.docs-r-p { font-size: var(--t-0); color: var(--text-3); }
.docs-r-t { color: var(--text); font-size: var(--t-2); }
.docs-r-s { color: var(--text-3); font-size: var(--t-1); overflow-wrap: anywhere; }
.docs-toc-h, .docs-toc-none, .kds main .docs-toc a.is-sub { display: none; }
/* 16px, а не ступень шкалы: мельче iOS увеличивает страницу при фокусе (test_phone_fields_do_not_zoom). */
.docs-find input { font-size: 16px; min-height: 44px; }
.docs-toc-list { display: flex; gap: var(--s-1); white-space: nowrap; }
.kds main .docs-toc a { display: flex; flex: none; align-items: center; min-height: 44px; min-width: 44px; padding: var(--s-2) var(--s-3); border-radius: var(--r-2); color: var(--text-2); font-size: var(--t-2); text-decoration: none; }
.kds main .docs-toc a:hover { color: var(--text); background: var(--bg-3); }
.kds main .docs-toc a.is-here { color: var(--text); background: var(--bg-3); }
.kds .docs-body > .section:first-of-type { border-top: 0; padding-top: var(--s-8); }
@media (min-width: 1024px) {
  .docs-layout { grid-template-columns: 13rem minmax(0, 1fr); column-gap: var(--s-8); align-items: start; }
  .docs-side { grid-column: 1; grid-row: 1; position: sticky; top: calc(var(--header-h) + var(--s-7)); max-height: calc(100vh - var(--header-h) - var(--s-8)); overflow-y: auto; overflow-x: hidden; padding-bottom: var(--s-6); scrollbar-width: thin; }
  .docs-body { grid-column: 2; grid-row: 1; }
  .docs-find kbd { display: inline; }
  .docs-find input { min-height: 0; }
  .docs-toc-list { overflow: visible; }
  .docs-toc { position: static; display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--s-3); margin: 0; padding: 0; background: none; border: 0; overflow: visible; }
  .docs-toc-h { display: block; font-size: var(--t-1); color: var(--text-3); font-weight: var(--w-medium); }
  .docs-find { display: flex; align-items: center; gap: var(--s-2); padding: 0 var(--s-3); min-height: 32px; border: 1px solid var(--line-2); border-radius: var(--r-2); background: var(--bg-2); }
  .docs-find:focus-within { border-color: var(--acc); }
  .docs-find input { flex: 1; width: 100%; min-width: 0; border: 0; background: transparent; color: var(--text); outline: none; }
  .docs-find input::placeholder { color: var(--text-3); }
  .docs-find kbd { font-family: var(--mono); font-size: var(--t-0); color: var(--text-3); white-space: nowrap; }
  .docs-toc-list { display: grid; gap: 0; white-space: normal; border-left: 1px solid var(--line-2); }
  .kds main .docs-toc a { display: block; min-height: 0; min-width: 0; padding: var(--s-1) var(--s-4); border-radius: 0; margin-left: -1px; border-left: 1px solid transparent; font-size: var(--t-2); line-height: var(--lh-base); }
  .kds main .docs-toc a:hover { background: none; }
  .kds main .docs-toc a.is-here { background: none; border-left-color: var(--acc); }
  .kds main .docs-toc a.is-sub { display: block; padding-left: var(--s-6); font-size: var(--t-1); color: var(--text-3); }
  .kds main .docs-toc a.is-sub:hover, .kds main .docs-toc a.is-sub.is-here { color: var(--text); }
  .kds main .docs-toc a[hidden] { display: none; }
  .docs-toc-none:not(.hidden) { display: block; font-size: var(--t-2); color: var(--text-3); }
  .docs-head { padding-top: var(--s-7); }
}
.kds .section { scroll-margin-top: calc(var(--header-h) + var(--s-9)); }
#ci-check, #webhook { scroll-margin-top: calc(var(--header-h) + var(--s-9)); }

/* Код слева, его настоящий вывод справа (приём Resend из аудита 07). На телефоне
   одно под другим: сначала команда, потом что она напечатала. */
.pair { display: grid; gap: var(--s-4); grid-template-columns: minmax(0, 1fr); }
@media (min-width: 1024px) { .pair { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--s-5); } }
.pair + .pair, .pair + .sub, .sub + .pair, .sub + .sub { margin-top: var(--s-6); }
.pane-label .path { font-family: var(--mono); font-size: var(--t-1); overflow-wrap: anywhere; min-width: 0; }
/* Вывод терминала не переносится по символам: путь, рваный посреди строки, не прочитать и не
   скопировать. Строка идёт как есть, лишнее листается вбок внутри блока. Команды (curl, pip) переносятся. */
.kds pre.code--wrap:has(> samp) { white-space: pre-wrap; overflow-wrap: normal; overflow-x: auto; }
.code .ok { color: var(--ok); }
.code .bad { color: var(--bad); }
.code .warn { color: var(--warn); }
.copy-btn { flex: none; }
/* «Copy» прижат к своей коробке: строка подписи стоит вплотную над кодом, кнопка — у правого края
   коробки. Внутрь коробки не ставим: отступ под кнопку сужал команду, и та переносилась по-разному
   до и после загрузки моноширинного шрифта (сдвиг страницы). */
.pane-label:has(.copy-btn) { margin-bottom: calc(var(--s-2) * -1); }
.pane-label .copy-btn { margin-right: calc(var(--s-4) * -1); }
.exit { font-family: var(--mono); font-size: var(--t-1); color: var(--text-3); }

.sub { display: grid; gap: var(--s-4); }
.sub > .h3 { margin-top: var(--s-2); }
.kds .table td code, .kds .table th code { font-family: var(--mono); font-size: var(--t-1); color: var(--text); overflow-wrap: anywhere; }
.kds .table td:first-child { white-space: nowrap; }
@media (max-width: 767px) { .kds .table td:first-child { white-space: normal; } }
.cost { white-space: nowrap; }

/* Ячейка «настоящего» пулл-реквеста: то, что приходит после пуша. */
.pr { display: grid; gap: var(--s-3); padding: var(--s-5); border: 1px solid var(--line-2); border-radius: var(--r-2); background: var(--bg); }
.pr-title { font-size: var(--t-3); font-weight: var(--w-medium); color: var(--text); }
.pr-meta { font-family: var(--mono); font-size: var(--t-1); color: var(--text-3); overflow-wrap: anywhere; }
.pr-files { display: grid; gap: var(--s-1); font-family: var(--mono); font-size: var(--t-1); color: var(--text-2); }
.pr-files .add { color: var(--ok); }

.diff-del { display: block; background: var(--bad-bg); }
.diff-add { display: block; background: var(--ok-bg); }
.annot { display: block; margin-block: var(--s-3); padding: var(--s-3) var(--s-4); border: 1px solid var(--bad-line); border-radius: var(--r-2); background: var(--bad-bg); color: var(--text); font-family: var(--mono); font-size: var(--t-1); white-space: normal; }

.lang-list { display: grid; gap: var(--s-1) var(--s-5); grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); font-size: var(--t-2); color: var(--text-2); }
.lang-list li { display: flex; gap: var(--s-3); align-items: baseline; min-width: 0; overflow-wrap: anywhere; }
.lang-list code { flex: none; min-width: 3.5rem; font-family: var(--mono); font-size: var(--t-1); color: var(--text-3); }

.key-box { font-family: var(--mono); font-size: var(--t-3); color: var(--text); background: var(--bg); border: 1px solid var(--acc-line); border-radius: var(--r-2); padding: var(--s-4) var(--s-5); overflow-wrap: anywhere; }
#key-panel { display: grid; gap: var(--s-4); }
#key-panel .btn { justify-self: start; }
@media (max-width: 767px) { #key-panel .btn { justify-self: stretch; } }
/* Боковое меню по страницам (docs-split, 27.10): группы, текущая страница, поиск по тексту, «Назад/Далее». */
.docs-nav-h { display: none; }
.docs-results { display: none; }
.docs-pn { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--s-4); margin-top: calc(var(--s-9) + var(--s-7)); padding-bottom: var(--s-8); }
.kds main .docs-pn a { display: grid; gap: var(--s-1); padding: var(--s-4) var(--s-5); border: 1px solid var(--line-2); border-radius: var(--r-2); color: var(--text); text-decoration: none; }
.kds main .docs-pn a:hover { border-color: var(--acc-line); }
.docs-pn-next { text-align: right; grid-column: 2; }
.docs-pn-l { font-size: var(--t-1); color: var(--text-3); }
.docs-cards { display: grid; gap: var(--s-4); grid-template-columns: minmax(0, 1fr); list-style: none; padding: 0; margin: 0; }
@media (min-width: 768px) { .docs-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.kds main a.docs-card { display: grid; gap: var(--s-2); align-content: start; height: 100%; padding: var(--s-5); border: 1px solid var(--line-2); border-radius: var(--r-2); text-decoration: none; color: var(--text-2); }
.kds main a.docs-card:hover { border-color: var(--acc-line); }
.kds main a.docs-card p { margin: 0; }
.docs-card-t { color: var(--text); font-weight: var(--w-medium); font-size: var(--t-3); }
.docs-card-d { font-size: var(--t-2); }
.kds .docs-cards-sec { padding-top: 0; border-top: 0; }
@media (min-width: 1024px) {
  .docs-nav-h { display: block; margin-top: var(--s-4); font-size: var(--t-0); font-weight: var(--w-medium); letter-spacing: .08em; text-transform: uppercase; color: var(--text-3); padding-left: var(--s-4); }
  .docs-toc { max-height: calc(100vh - var(--header-h) - var(--s-6)); overflow-y: auto; }
  .docs-results:not(.hidden) { display: grid; gap: 0; border: 1px solid var(--line-2); border-radius: var(--r-2); background: var(--bg-2); }
  .kds main .docs-toc .docs-results a { display: grid; gap: 2px; min-height: 0; padding: var(--s-2) var(--s-3); border-left: 0; margin: 0; border-bottom: 1px solid var(--line); }
  .kds main .docs-toc .docs-results a:last-child { border-bottom: 0; }
  .kds main .docs-toc .docs-results a.is-active, .kds main .docs-results a:hover { background: var(--bg-3); }
  .docs-r-p { font-size: var(--t-0); color: var(--text-3); }
  .docs-r-t { color: var(--text); font-size: var(--t-2); }
  .docs-r-s { color: var(--text-3); font-size: var(--t-1); overflow-wrap: anywhere; }
}

.docs-toc-none:not(.hidden) { display: block; font-size: var(--t-2); color: var(--text-3); }
.docs-plans { padding-bottom: var(--s-8); }

/* «К тексту страницы» стоит в меню сразу после поиска (поиск — 7-я остановка Tab, был 8-й), но выглядит
   как ссылка-прыжок из tokens.css (.skip-link), а не как пункт меню: правила пунктов выше её не трогают. */
.kds main .docs-toc a.docs-skip {
  display: flex; min-height: 44px; min-width: 0; margin: 0; padding: var(--s-3) var(--s-5);
  border: 1px solid var(--line-2); border-radius: var(--r-1); background: var(--bg); color: var(--acc);
  text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; font-size: inherit; line-height: inherit;
}
.kds main .docs-toc a.docs-skip:hover { background: var(--bg); color: var(--acc-hover); }
