/*
 * supplement.css — стили для конструкций Sphinx, которых нет в теме VitePress.
 * Всё выражено через переменные VitePress (--vp-*), чтобы согласоваться со
 * светлой и тёмной темами и совпадать с видом openai-doc.ru.
 */

:root {
  --vp-header-anchor-symbol: "#";
  /* Палитра подсветки токенов сигнатур API (светлая тема). */
  --sig-keyword: #9333ea;    /* async / await / class */
  --sig-func: #2563eb;       /* имя функции/метода */
  --sig-namespace: #64748b;  /* asyncio. (пространство имён) */
  --sig-param: #0e7490;      /* имена параметров */
  --sig-operator: #64748b;   /* = ( ) , * / */
  --sig-default: #c2410c;    /* значения по умолчанию: None, 0 */
  --sig-type: #0f766e;       /* аннотации типов / возвращаемое значение */
}
html.dark {
  --sig-keyword: #c792ea;
  --sig-func: #82aaff;
  --sig-namespace: #9ca3af;
  --sig-param: #7dd3fc;
  --sig-operator: #9ca3af;
  --sig-default: #f78c6c;
  --sig-type: #5eead4;
}

/* ------------------------------------------------- переключатель версий --- */
.vp-version-switcher {
  display: flex;
  align-items: center;
  margin: 0 8px;
}
.vp-version-switcher select {
  appearance: none;
  -webkit-appearance: none;
  background: var(--vp-c-bg-alt);
  color: var(--vp-c-text-1);
  border: 1px solid var(--vp-c-divider);
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  font-family: var(--vp-font-family-base);
  padding: 5px 26px 5px 10px;
  cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, var(--vp-c-text-2) 50%),
    linear-gradient(135deg, var(--vp-c-text-2) 50%, transparent 50%);
  background-position: calc(100% - 14px) 52%, calc(100% - 9px) 52%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  transition: border-color .25s, background-color .25s;
}
.vp-version-switcher select:hover {
  border-color: var(--vp-c-brand-1);
}

/* --------------------------------------------- API-сигнатуры (dl Sphinx) --- */
/* Блок описания функции/класса/метода. */
.vp-doc dl.py,
.vp-doc dl.c,
.vp-doc dl.std {
  margin: 24px 0;
}
.vp-doc dl.py > dt,
.vp-doc dl.c > dt,
.vp-doc dl.std > dt {
  display: block;
  font-family: var(--vp-font-family-mono);
  font-size: 0.9em;
  line-height: 1.6;
  /* лёгкий акцент: полоска слева и едва заметная подложка, без «карточки» */
  padding: 8px 12px;
  background-color: var(--vp-c-bg-alt);
  border: none;
  border-left: 3px solid var(--vp-c-brand-1);
  border-radius: 0 6px 6px 0;
  color: var(--vp-c-text-1);
  /* длинные сигнатуры переносятся с «висячим» отступом: первая строка
     от края, строки-продолжения выровнены под началом параметров */
  padding-left: calc(12px + 2.5em);
  text-indent: -2.5em;
}
.vp-doc dl.py > dd,
.vp-doc dl.c > dd,
.vp-doc dl.std > dd {
  margin: 12px 0 0;
  padding: 0 0 0 18px;
  border-left: 1px solid var(--vp-c-divider);
}
/* ---- Подсветка токенов сигнатуры (как в код-блоках) ---- */
/* Ключевые слова: async / await / class / def. */
.vp-doc dl > dt em.property,
.vp-doc dl > dt em.property .k,
.vp-doc dl > dt .sig > .k {
  color: var(--sig-keyword);
  font-style: normal;
  font-weight: 600;
}
/* Пространство имён (asyncio.) */
.vp-doc dl > dt .sig-prename.descclassname,
.vp-doc dl > dt .descclassname {
  color: var(--sig-namespace);
}
/* Имя функции / метода / класса */
.vp-doc dl > dt .sig-name.descname,
.vp-doc dl > dt .descname,
.vp-doc dl > dt .sig-name {
  color: var(--sig-func);
  font-weight: 700;
}
/* Имена параметров */
.vp-doc dl > dt .sig-param .n,
.vp-doc dl > dt .sig-param .n .pre {
  color: var(--sig-param);
}
/* Операторы: = и скобки/запятые/звёздочка */
.vp-doc dl > dt .sig-paren,
.vp-doc dl > dt .sig-param .o,
.vp-doc dl > dt .keyword-only-separator,
.vp-doc dl > dt .keyword-only-separator .o {
  color: var(--sig-operator);
  font-weight: 400;
}
/* Значения по умолчанию: None, 0, строки */
.vp-doc dl > dt .default_value,
.vp-doc dl > dt .default_value .pre {
  color: var(--sig-default);
}
/* Аннотации типов и возвращаемое значение */
.vp-doc dl > dt .sig-return,
.vp-doc dl > dt .sig-return .pre,
.vp-doc dl > dt .annotation,
.vp-doc dl > dt .annotation .pre {
  color: var(--sig-type);
}
.vp-doc dl > dt .sig-param {
  font-weight: 400;
  font-style: normal;
}
/* Упоминания параметров в тексте описания — как токен параметра в сигнатуре. */
.vp-doc dl.py em.param-ref {
  font-family: var(--vp-font-family-mono);
  font-style: normal;
  font-size: 0.9em;
  color: var(--sig-param);
}
/* Кнопка-ссылка ¶ у сигнатур. */
.vp-doc dl > dt > a.headerlink,
.vp-doc dl > dt > a.header-anchor {
  color: var(--vp-c-text-3);
  text-decoration: none;
  opacity: 0;
  margin-left: 6px;
}
.vp-doc dl > dt:hover > a.header-anchor {
  opacity: 1;
}
/* Список параметров (field-list): «Параметры», «Возвращает» и т.п. */
.vp-doc dl.field-list {
  display: grid;
  grid-template-columns: max-content auto;
  gap: 4px 16px;
  margin: 12px 0;
}
.vp-doc dl.field-list > dt {
  font-weight: 600;
  color: var(--vp-c-text-1);
}
.vp-doc dl.field-list > dd {
  margin: 0;
}
/* Простые определения (в custom-block «Смотрите также» и пр.) */
.vp-doc dl.simple > dt {
  font-weight: 600;
  margin-top: 8px;
}
.vp-doc dl.simple > dd {
  margin: 0 0 0 16px;
}

/* ----------------------------------------- директивы изменения версий ----- */
/* Компактно: без фона и рамок-коробки — только тонкая левая полоска и текст.
   Внутренний <p> обнуляем, иначе .vp-doc даёт ему margin:16px сверху и снизу. */
.vp-doc div.versionadded,
.vp-doc div.versionchanged,
.vp-doc div.deprecated,
.vp-doc div.deprecated-removed,
.vp-doc div.versionremoved {
  margin: 6px 0;
  padding: 0 0 0 12px;
  border-left: 2px solid var(--vp-c-divider);
  background: none;
  border-radius: 0;
  font-size: 0.9em;
  line-height: 1.5;
}
.vp-doc div.versionadded > p,
.vp-doc div.versionchanged > p,
.vp-doc div.deprecated > p,
.vp-doc div.deprecated-removed > p,
.vp-doc div.versionremoved > p {
  margin: 0;
}
.vp-doc div.versionadded {
  border-left-color: var(--vp-c-green-1, #10b981);
}
.vp-doc div.versionchanged {
  border-left-color: var(--vp-c-yellow-1, #d97706);
}
.vp-doc div.deprecated,
.vp-doc div.deprecated-removed,
.vp-doc div.versionremoved {
  border-left-color: var(--vp-c-red-1, #f43f5e);
}
.vp-doc .versionmodified {
  font-weight: 600;
  color: var(--vp-c-text-2);
}

/* ---------------------------------------- пункты сайдбара: перевод снизу --- */
/* «English Title» основной строкой, «(перевод)» — мельче и приглушённо снизу. */
.VPSidebar .VPSidebarItem .text .sb-main {
  display: block;
  /* .text даёт line-height 24px — под текстом остаётся лишний «продох».
     Прижимаем строки, чтобы перевод шёл вплотную к оригиналу. */
  line-height: 1.3;
}
.VPSidebar .VPSidebarItem .text .sb-sub {
  display: block;
  margin-top: -1px;
  font-size: 12px;
  line-height: 1.2;
  color: var(--vp-c-text-3);
  font-weight: 400;
}

/* -------------------------------------------------- якоря: отступ под шапку -*/
/* Цель якоря (заголовок, сигнатура API) не должна прятаться под фиксированной
   шапкой высотой --vp-nav-height при переходе по #id. */
.vp-doc [id] {
  scroll-margin-top: calc(var(--vp-nav-height) + 24px);
}

/* ------------------------------- заголовки секций: перевод отдельной строкой */
.vp-doc h1 .hd-main,
.vp-doc h2 .hd-main,
.vp-doc h3 .hd-main,
.vp-doc h4 .hd-main {
  display: block;
}
.vp-doc h1 .hd-sub,
.vp-doc h2 .hd-sub,
.vp-doc h3 .hd-sub,
.vp-doc h4 .hd-sub {
  /* inline-block выводит span из-под text-decoration родительской ссылки
     (у блочного потомка подчёркивание предка снять нельзя) */
  display: inline-block;
  text-decoration: none;
  margin-top: 2px;
  font-size: 0.62em;
  font-weight: 500;
  line-height: 1.3;
  color: var(--vp-c-text-2);
}

/* --------------------------------- правое оглавление: перевод отдельно ----- */
.VPDocOutlineItem .outline-link .ol-main {
  display: block;
  /* .outline-link даёт line-height: 32px (высота одной строки VitePress);
     для двух строк это создаёт большой разрыв — прижимаем перевод к оригиналу. */
  line-height: 1.2;
}
.VPDocOutlineItem .outline-link .ol-sub {
  display: block;
  margin-top: -1px;  /* перевод вплотную к оригиналу — читается как одна пара */
  font-size: 11px;
  line-height: 1.15;
  color: var(--vp-c-text-3);
}
/* Пара «оригинал + перевод» плотная, а между разными пунктами — воздух,
   чтобы визуально отделить один пункт оглавления от другого. */
.VPDocOutlineItem li + li {
  margin-top: 8px;
}
/* Вложенный список — это <ul> внутри <li>, его первый пункт не имеет соседа
   сверху; отступ ставим на сам вложенный список. */
.VPDocOutlineItem .VPDocOutlineItem {
  margin-top: 8px;
}

/* --------------------------------- компактные «простые» списки Sphinx ------ */
/* Sphinx помечает списки с одним абзацем на пункт классом .simple. .vp-doc
   даёт таким <p> отступы, а li+li — промежуток; убираем, чтобы строки шли
   плотно (как в блоке «Содержание»). Сложные многоабзацные списки не трогаем. */
.vp-doc ul.simple li + li,
.vp-doc ol.simple li + li {
  margin-top: 0;
}
.vp-doc ul.simple li > p,
.vp-doc ol.simple li > p {
  margin: 0;
  line-height: 1.6;
}

/* -------------------------------------- локальное «Содержание» (contents) -- */
/* Пункты — это <li><p>…</p></li>; .vp-doc даёт <p> вертикальные отступы, а
   li+li — промежуток. Обнуляем, чтобы список был плотным. */
.vp-doc nav.contents li,
.vp-doc nav#contents li,
.vp-doc div.contents li,
.vp-doc nav.contents li + li,
.vp-doc nav#contents li + li,
.vp-doc div.contents li + li {
  margin-top: 0;
}
.vp-doc nav.contents li > p,
.vp-doc nav#contents li > p,
.vp-doc div.contents li > p {
  margin: 0;
  line-height: 1.5;
}

/* ------------------------------------------------- боковые врезки Sphinx --- */
.vp-doc aside.sidebar,
.vp-doc div.sidebar,
.vp-doc aside.topic,
.vp-doc div.topic {
  float: none;
  width: auto;
  margin: 20px 0;
  padding: 16px 20px;
  /* Основной фон (не -soft): вложенный блок кода имеет фон -soft и должен
     читаться как отдельная карточка, а не сливаться с врезкой. */
  background-color: var(--vp-c-bg);
  border: 1px solid var(--vp-c-divider);
  border-left: 3px solid var(--vp-c-brand-1);
  border-radius: 8px;
}
.vp-doc p.sidebar-title,
.vp-doc p.topic-title {
  font-weight: 600;
  margin-top: 0;
  margin-bottom: 12px;
}
/* Блок кода внутри врезки: убираем лишний внешний отступ, добавляем рамку,
   чтобы он читался как самостоятельная карточка на белом фоне врезки. */
.vp-doc aside.sidebar div[class*="language-"],
.vp-doc div.sidebar div[class*="language-"],
.vp-doc aside.topic div[class*="language-"],
.vp-doc div.topic div[class*="language-"] {
  margin: 0;
  border: 1px solid var(--vp-c-divider);
}
.vp-doc aside.sidebar > :last-child,
.vp-doc div.sidebar > :last-child,
.vp-doc aside.topic > :last-child,
.vp-doc div.topic > :last-child {
  margin-bottom: 0;
}

/* ---------------------------------------------------- подпись к коду ------- */
.vp-doc div.code-block-caption {
  font-size: 0.85em;
  color: var(--vp-c-text-2);
  margin-bottom: -8px;
  padding: 6px 12px;
}

/* ------------------------------------------------------------ код-блоки ---- */
/* Тот же акцент, что у API-сигнатур: полоска бренд-цвета слева,
   скругление только справа. Единый вид всех блоков с кодом. */
.vp-doc div[class*='language-'] {
  border-left: 3px solid var(--vp-c-brand-1);
  border-radius: 0 6px 6px 0;
}

/* -------------------------------------------------- разное из Sphinx ------- */
.vp-doc .clearer { clear: both; }
.vp-doc .headerlink { text-decoration: none; }
/* Ссылки-сноски. */
.vp-doc a.footnote-reference,
.vp-doc a.brackets { text-decoration: none; }
/* Убираем возможные плавающие остатки. */
.vp-doc .float-right { float: right; }
/* Метки availability / audit-event. */
.vp-doc .availability,
.vp-doc .audit-hook {
  font-size: 0.9em;
  color: var(--vp-c-text-2);
}

/* ------------------------------------------------ кнопка «копировать код» --- */
:root {
  --vp-code-copy-copied-text-content: "Скопировано";
}
.vp-doc [class*='language-'] > button.copy {
  top: 8px;
  right: 8px;
  width: 32px;
  height: 32px;
  border-radius: 6px;
  background-size: 16px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}
.vp-doc [class*='language-'] > button.copy:hover {
  border-color: var(--vp-c-brand-1);
}
/* Состояние «скопировано»: зелёный акцент успеха + подпись слева. */
.vp-doc [class*='language-'] > button.copy.copied,
.vp-doc [class*='language-'] > button.copy:hover.copied {
  border-radius: 0 6px 6px 0;
  border-color: var(--vp-c-green-2);
  background-color: var(--vp-c-green-soft);
}
.vp-doc [class*='language-'] > button.copy.copied:before,
.vp-doc [class*='language-'] > button.copy:hover.copied:before {
  height: 32px;
  border-radius: 6px 0 0 6px;
  border-color: var(--vp-c-green-2);
  color: var(--vp-c-green-1);
  background-color: var(--vp-c-green-soft);
}

/* --------------------------------------------- страницы исходников --------- */
/* Ссылка «Исходный код: …» ведёт на локальную копию — вид обычной ссылки. */
.vp-doc a.source-link {
  font-family: var(--vp-font-family-mono);
  font-size: 0.9em;
}
/* Кнопка «Назад» над заголовком исходника. */
.vp-doc .source-back {
  margin: 0 0 4px;
  line-height: 1;
}
.vp-doc .source-back a {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  font-weight: 500;
  color: var(--vp-c-text-2);
  text-decoration: none;
  transition: color .25s;
}
.vp-doc .source-back a:hover {
  color: var(--vp-c-brand-1);
}
.vp-doc .source-back .vpi-arrow-left {
  width: 16px;
  height: 16px;
}
/* Шапка страницы исходника: имя файла + путь-чип + бейдж версии. */
.vp-doc .source-head {
  margin: 0 0 20px;
}
.vp-doc h1.source-title {
  font-family: var(--vp-font-family-mono);
  letter-spacing: -0.02em;
  margin: 0;
}
.vp-doc .source-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
}
.vp-doc .source-path {
  font-family: var(--vp-font-family-mono);
  font-size: 12.5px;
  line-height: 22px;
  color: var(--vp-c-text-2);
  background-color: var(--vp-c-default-soft);
  border-radius: 6px;
  padding: 1px 10px;
}
.vp-doc .source-meta .VPBadge {
  margin-left: 0;
  transform: none;
}
/* Широкий режим (.vp-wide): код занимает и место правой колонки. */
.VPDoc.vp-wide .aside {
  display: none;
}
.VPDoc.vp-wide .content {
  max-width: none !important;
}
.VPDoc.vp-wide .content-container {
  max-width: 1104px !important;
  margin: 0 auto;
}

/* ------------------------------------------------ мобильный сайдбар -------- */
@media (max-width: 959px) {
  .VPSidebar {
    transform: translateX(-100%);
    transition: transform .25s ease;
  }
  .VPSidebar.open {
    transform: translateX(0);
  }
}
