/*
 * Стили раздела документации.
 *
 * Едет на сайт как /css/docs.css и подключается через SetAdditionalCSS().
 *
 * Здесь только то, чего на mrlexndr.com нет: дерево слева, крошки, блоки
 * кода, таблицы, врезки. Цвета, шрифт, размеры заголовков и вертикальный
 * ритм берутся у сайта — css/colors/, css/fonts.css, css/headings.css,
 * css/spacings.css. Дублировать их здесь значит завести вторую правду о
 * внешнем виде и разъехаться с сайтом на первой же его правке.
 *
 * Переменные ниже объявлены через var(--имя-сайта, запасное) именно поэтому:
 * если на сайте переменная есть, берётся она; если нет — работает запасное
 * значение, и раздел не разваливается.
 */

.docs {
    --docs-side: 260px;
    --docs-gap: 32px;
    --docs-rule: var(--color-border, #e4e7ec);
    --docs-muted: var(--color-text-secondary, #667085);
    --docs-accent: var(--color-accent, #2f6feb);
    --docs-code-bg: var(--color-surface-alt, #f6f7f9);

    display: grid;
    grid-template-columns: var(--docs-side) minmax(0, 1fr);
    gap: var(--docs-gap);
    align-items: start;
}

/* --- Дерево слева --------------------------------------------------------- */

.docs__side {
    position: sticky;
    top: 24px;
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    padding-right: 8px;
    border-right: 1px solid var(--docs-rule);
}

.docs-tree__group + .docs-tree__group { margin-top: 20px; }

.docs-tree__title {
    font-weight: 700;
    font-size: 0.9em;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    color: var(--docs-muted);
    margin-bottom: 8px;
}

.docs-tree__list {
    list-style: none;
    margin: 0;
    padding: 0;
}

.docs-tree__item {
    line-height: 1.4;
    margin: 0 0 6px;
}

.docs-tree__item a {
    text-decoration: none;
    border-bottom: 1px solid transparent;
}

.docs-tree__item a:hover { border-bottom-color: currentColor; }

.docs-tree__item.is-current > span {
    font-weight: 600;
    color: var(--docs-accent);
}

/*
 * Свёрнутая группа показывает только заголовок. Семьдесят с лишним пунктов
 * разом — это не навигация, а список: найти в нём глазами ничего нельзя.
 * Раскрыта только та группа, в которой читатель сейчас находится.
 */
.docs-tree__group:not(.is-open) .docs-tree__list { display: none; }

/* --- Крошки --------------------------------------------------------------- */

.docs-crumbs ol {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 24px;
    padding: 0;
    font-size: 0.9em;
    color: var(--docs-muted);
}

.docs-crumbs li + li::before {
    content: "→";
    margin-right: 8px;
    color: var(--docs-rule);
}

/* --- Текст ---------------------------------------------------------------- */

.docs__main { min-width: 0; }

.docs__main table {
    width: 100%;
    border-collapse: collapse;
    margin: 20px 0;
}

.docs__main th,
.docs__main td {
    text-align: left;
    vertical-align: top;
    padding: 8px 12px;
    border-bottom: 1px solid var(--docs-rule);
}

.docs__main th { font-weight: 600; }

.docs__main :not(pre) > code {
    padding: 2px 5px;
    border-radius: 4px;
    background: var(--docs-code-bg);
    font-size: 0.92em;
    white-space: nowrap;
}

.docs__main pre {
    overflow-x: auto;
    padding: 14px 16px;
    border-radius: 8px;
    background: var(--docs-code-bg);
    line-height: 1.5;
}

.docs__main pre code {
    background: none;
    padding: 0;
    white-space: pre;
}

/*
 * Врезка — цитата, первая строка которой начинается с «Важно.» или
 * «Осторожно.». Соглашение записано в плане группы 85: без него в markdown
 * нечего зацепить, а заводить свой синтаксис ради двух видов блоков дороже,
 * чем договориться о первом слове.
 */
.docs__main blockquote {
    margin: 20px 0;
    padding: 12px 16px;
    border-left: 3px solid var(--docs-rule);
    background: var(--docs-code-bg);
    border-radius: 0 8px 8px 0;
}

.docs__main blockquote p:first-child > strong:first-child { color: var(--docs-accent); }

/* --- Якоря заголовков ----------------------------------------------------- */

/*
 * Расширение HeadingPermalink рисует ссылку у каждого заголовка. Нужен от неё
 * только id, поэтому символ пустой, а сама ссылка не видна, пока на заголовок
 * не навели: тогда у читателя есть способ скопировать адрес абзаца, а в
 * оглавлении и во врезках нет лишнего значка.
 */
.docs-anchor {
    opacity: 0;
    margin-left: 8px;
    font-weight: 400;
    text-decoration: none;
    transition: opacity 0.12s;
}

.docs-anchor::after { content: "#"; }

:is(h2, h3, h4):hover .docs-anchor,
.docs-anchor:focus { opacity: 0.5; }

/* --- Телефон -------------------------------------------------------------- */

@media (max-width: 900px) {
    .docs {
        grid-template-columns: minmax(0, 1fr);
    }

    .docs__side {
        position: static;
        max-height: none;
        padding: 0 0 20px;
        border-right: 0;
        border-bottom: 1px solid var(--docs-rule);
    }

    /* На узком экране дерево целиком — это экран прокрутки до начала текста. */
    .docs-tree__group:not(.is-open) { display: none; }
}
