/* /Components/Connections/McpSourcesBlock.razor.rz.scp.css */
/* Компонент вынесен из Connections.razor (блок вырос слишком большим для
   одного файла) — стили изоляции Blazor не переходят между файлами, поэтому
   часть правил ниже сознательно повторяет Connections.razor.css: то же имя
   класса, тот же язык, свой файл (иначе, например, .conn-fail здесь остался
   бы совсем без стиля). */

.mcp-block[b-vo9bvw1507] {
    padding: var(--sp-5) var(--sp-6);
}

.conn-head[b-vo9bvw1507] {
    display: flex;
    align-items: center;
    gap: 16px;
}

.conn-mark[b-vo9bvw1507] {
    width: 36px;
    height: 36px;
    border-radius: var(--r-md);
    display: grid;
    place-items: center;
    flex-shrink: 0;
    font-size: var(--fs-13);
    font-weight: 600;
    background: var(--accent-quiet);
    color: var(--accent-text);
}

.conn-name[b-vo9bvw1507] {
    flex: 1;
    min-width: 0;
}

.conn-title[b-vo9bvw1507] {
    font-size: var(--fs-17);
    font-weight: 500;
}

.conn-sub[b-vo9bvw1507] {
    margin-top: 2px;
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

/* --- список источников --------------------------------------------------- */

.mcp-list[b-vo9bvw1507] {
    margin-top: 20px;
    display: flex;
    flex-direction: column;
}

.mcp-row[b-vo9bvw1507] {
    display: grid;
    grid-template-columns: 1fr 1.6fr 1fr 0.8fr 1.6fr 0.8fr;
    gap: var(--sp-3);
    align-items: center;
    padding: var(--sp-3);
    font-size: var(--fs-13);
    border-bottom: 1px solid var(--border-subtle);
    cursor: pointer;
}

.mcp-row:hover[b-vo9bvw1507] { background: var(--bg-hover); }

.mcp-row-head[b-vo9bvw1507] {
    cursor: default;
    font-size: var(--fs-12);
    letter-spacing: var(--tracking-wide);
    text-transform: uppercase;
    color: var(--fg-tertiary);
}

.mcp-row-head:hover[b-vo9bvw1507] { background: transparent; }

.mcp-row.is-open[b-vo9bvw1507] { background: var(--bg-hover); }

.mcp-truncate[b-vo9bvw1507] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.mcp-detail[b-vo9bvw1507] {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: var(--sp-5);
    background: var(--bg-canvas);
    border-bottom: 1px solid var(--border-subtle);
    cursor: default;
}

.mcp-detail-actions[b-vo9bvw1507] {
    display: flex;
    align-items: center;
    gap: var(--sp-2);
}

.mcp-sub-title[b-vo9bvw1507] {
    margin-top: var(--sp-2);
    font-size: var(--fs-13);
    font-weight: 500;
    color: var(--fg-secondary);
}

.mcp-note[b-vo9bvw1507] {
    padding: 10px 14px;
    border-radius: var(--r-md);
    background: var(--info-quiet);
    color: var(--info-text);
    font-size: var(--fs-13);
}

.mcp-col-access[b-vo9bvw1507] {
    width: 150px;
}

/* Имя монoширинное и без пробелов (mymeet_delete_meeting) — фиксированная
   ширина колонки плюс перенос внутри неё, иначе длинное имя наезжает на
   описание в соседней ячейке (table-layout: fixed у .table не разбивает
   слово без пробелов сам). */
/* Сумма фиксированных колонок обязана оставлять описанию место: при
   table-layout: fixed лишние пиксели отнимаются у колонки без ширины, и на
   живом экране 09.09 описание схлопнулось в ноль, а заголовки наехали друг
   на друга. Аннотации у реальных серверов почти всегда «нет» — им хватает
   узкой колонки. */
.mcp-col-name[b-vo9bvw1507] {
    width: 190px;
    overflow-wrap: anywhere;
}

.mcp-col-annotations[b-vo9bvw1507] {
    width: 90px;
}

.mcp-tool-gone[b-vo9bvw1507] {
    opacity: 0.55;
}

/* --- способ авторизации (карточка mind-mcp-oauth-org, спека §3.1, §5) --- */

.mcp-auth-switch[b-vo9bvw1507] {
    display: flex;
    gap: var(--sp-2);
}

.mcp-auth-chip[b-vo9bvw1507] {
    margin-left: var(--sp-1);
}

.mcp-oauth-row[b-vo9bvw1507] {
    display: flex;
    align-items: center;
    gap: var(--sp-3);
    flex-wrap: wrap;
}

/* --- роли записи (спека §2.1, §5) --------------------------------------- */

.mcp-roles-row[b-vo9bvw1507] {
    display: flex;
    gap: var(--sp-4);
    flex-wrap: wrap;
}

.mcp-role-check[b-vo9bvw1507] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: var(--fs-13);
    cursor: pointer;
}

/* --- промпт: то же устройство, что у mem-schema-shell в Memory.razor.css -- */

.mcp-prompt-shell[b-vo9bvw1507] {
    height: auto;
    align-items: stretch;
    padding: var(--sp-3);
}

.mcp-prompt-shell textarea[b-vo9bvw1507] {
    min-height: 220px;
    resize: vertical;
    font-family: var(--font-mono);
    line-height: var(--lh-14);
    white-space: pre-wrap;
}

/* Описание для агентов — короче промпта выкачки, тот же приём shell. */

.mcp-description-shell[b-vo9bvw1507] {
    height: auto;
    align-items: stretch;
    padding: var(--sp-3);
}

.mcp-description-shell textarea[b-vo9bvw1507] {
    min-height: 80px;
    resize: vertical;
    line-height: var(--lh-14);
    white-space: pre-wrap;
}

.mcp-form-row[b-vo9bvw1507] {
    display: flex;
    gap: var(--sp-4);
}

.mcp-form-row > .field[b-vo9bvw1507] { flex: 1; }

.mcp-field-model[b-vo9bvw1507] { min-width: 0; }

.mcp-field-interval[b-vo9bvw1507] { max-width: 220px; }

.mcp-advanced[b-vo9bvw1507] {
    border: 1px solid var(--border-subtle);
    border-radius: var(--r-md);
    padding: var(--sp-3) var(--sp-4);
}

.mcp-advanced summary[b-vo9bvw1507] {
    cursor: pointer;
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

.mcp-advanced .mcp-form-row[b-vo9bvw1507] {
    margin-top: var(--sp-3);
}

.mcp-form-actions[b-vo9bvw1507] {
    display: flex;
    justify-content: flex-end;
}

.mcp-runs-scroll[b-vo9bvw1507] {
    overflow-x: auto;
}

.mcp-runs-table[b-vo9bvw1507] {
    width: max-content;
    min-width: 100%;
    table-layout: auto;
}

/* --- отказ/успех формы добавления — копия Connections.razor.css ---------- */

/* Окно с таблицей из 11 инструментов выше экрана ноутбука, а страница под
   модальным окном не прокручивается. Прокручивается тело окна, шапка и кнопки
   остаются на месте — иначе «Сохранить» недосягаема (прод, 09.09). */
.conn-modal[b-vo9bvw1507] {
    max-height: calc(100vh - 2 * var(--sp-6));
    display: flex;
    flex-direction: column;
}

.conn-modal .modal-header[b-vo9bvw1507],
.conn-modal .modal-foot[b-vo9bvw1507] {
    flex: 0 0 auto;
}

.conn-modal .modal-body[b-vo9bvw1507] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
}

.conn-fail[b-vo9bvw1507] {
    display: flex;
    flex-direction: row;
    gap: 10px;
    align-items: flex-start;
    padding: 12px 16px;
    border-radius: var(--r-md);
    font-size: var(--fs-13);
    line-height: var(--lh-13);
}

.conn-fail.is-bad[b-vo9bvw1507] {
    background: var(--negative-quiet);
    color: var(--negative-text);
}

.conn-fail.is-warn[b-vo9bvw1507] {
    background: var(--warning-quiet);
    color: var(--warning-text);
}

.conn-fail-mark[b-vo9bvw1507] {
    flex-shrink: 0;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
    margin-top: 1px;
    color: var(--bg-elevated);
}

.conn-fail.is-bad .conn-fail-mark[b-vo9bvw1507] { background: var(--negative-text); }

.conn-fail.is-warn .conn-fail-mark[b-vo9bvw1507] { background: var(--warning-text); }

.conn-fail-text[b-vo9bvw1507] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.conn-done[b-vo9bvw1507] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 14px 16px;
    border-radius: var(--r-md);
    background: var(--positive-quiet);
    font-size: var(--fs-14);
    line-height: var(--lh-14);
}

.conn-done-head[b-vo9bvw1507] {
    font-weight: 500;
    color: var(--positive-text);
}

.conn-panel[b-vo9bvw1507] {
    padding: 14px 16px;
    border-radius: var(--r-md);
    background: var(--bg-surface);
    border: 1px solid var(--border-subtle);
    font-size: var(--fs-14);
    line-height: var(--lh-14);
}

.conn-panel-head[b-vo9bvw1507] {
    margin-bottom: 4px;
    font-size: var(--fs-13);
    font-weight: 500;
    color: var(--fg-primary);
}

.conn-token input[b-vo9bvw1507] {
    font-family: var(--font-mono);
}
/* /Components/Layout/AuthLayout.razor.rz.scp.css */
/* Экраны входа по эталонам 7c/7d/7e/7f. Значения — только через переменные
   из wwwroot/tokens.css. Всё, что уже есть в языке (.topbar, .btn, .field,
   .input-shell, .t-mono), здесь не повторяется.

   Общие для обеих страниц входа правила стоят здесь, а не в их собственных
   файлах: страницы делят одну колонку и одну сетку, и разъехаться им нельзя. */

.auth-shell[b-at3828dlq0] {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background: var(--bg-canvas);
}

/* Полоса без нижней границы: в эталоне шапка не отделена от поля страницы. */
.auth-topbar[b-at3828dlq0] {
    border-bottom-color: transparent;
}

.auth-mark[b-at3828dlq0] {
    width: 28px;
    height: 28px;
    border-radius: 8px;
    background: var(--brand-icon-bg);
    display: grid;
    place-items: center;
    flex-shrink: 0;
}

.auth-mark img[b-at3828dlq0] {
    display: block;
}

.auth-host[b-at3828dlq0] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.auth-main[b-at3828dlq0] {
    flex: 1;
    display: grid;
    place-items: center;
    padding: var(--sp-6);
}

/* Отступ снизу — центрирование оптическое, а не арифметическое: без него
   форма садится заметно ниже середины. Так в эталоне. */
.auth-column[b-at3828dlq0] {
    width: 400px;
    max-width: 100%;
    display: flex;
    flex-direction: column;
    gap: var(--sp-6);
    padding-bottom: 56px;
}

/* --- общее для 7c–7f ----------------------------------------------------- */

/* Форма держит тот же шаг, что колонка: обёртка не должна менять ритм. */
.auth-column[b-at3828dlq0]  .auth-form {
    display: flex;
    flex-direction: column;
    gap: var(--sp-6);
}

.auth-column[b-at3828dlq0]  .field-hint {
    line-height: 18px;
}

.auth-column[b-at3828dlq0]  .auth-head {
    display: flex;
    flex-direction: column;
    gap: var(--sp-2);
}

.auth-column[b-at3828dlq0]  .auth-title {
    font-size: var(--fs-24);
    line-height: var(--lh-24);
    font-weight: 500;
    letter-spacing: var(--tracking-snug);
    margin: 0;
}

.auth-column[b-at3828dlq0]  .auth-lead {
    font-size: var(--fs-14);
    line-height: var(--lh-14);
    color: var(--fg-secondary);
    margin: 0;
}

/* Почта внутри строки — цветом основного текста, как в эталоне. */
.auth-column[b-at3828dlq0]  .auth-lead .auth-address {
    color: var(--fg-primary);
}

.auth-column[b-at3828dlq0]  .btn-lg {
    justify-content: center;
}

/* Нижняя строка: подсказка слева, ссылка справа. */
.auth-column[b-at3828dlq0]  .auth-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sp-4);
    font-size: var(--fs-13);
}

.auth-column[b-at3828dlq0]  .auth-foot .auth-note {
    color: var(--fg-tertiary);
}

/* Ссылка внутри формы не должна выглядеть кнопкой: в эталоне «Отправить
   новый код» — именно ссылка, а не вторая кнопка рядом с «Войти». */
.auth-column[b-at3828dlq0]  .auth-link {
    background: none;
    border: none;
    padding: 0;
    font: inherit;
    color: var(--accent-text);
    cursor: pointer;
}

.auth-column[b-at3828dlq0]  .auth-link:hover {
    color: var(--accent-hover);
}

/* --- ячейки кода (7d, 7e, 7f) -------------------------------------------- */

.auth-column[b-at3828dlq0]  .code-field {
    display: flex;
    flex-direction: column;
    gap: var(--sp-3);
    position: relative;
}

.auth-column[b-at3828dlq0]  .code-cells {
    display: flex;
    gap: var(--sp-2);
}

.auth-column[b-at3828dlq0]  .code-cell {
    flex: 1;
    height: 56px;
    background: var(--bg-input);
    border: 1px solid var(--border-default);
    border-radius: var(--r-md);
    display: grid;
    place-items: center;
    font-family: var(--font-mono);
    font-size: var(--fs-20);
    color: var(--fg-primary);
}

.auth-column[b-at3828dlq0]  .code-cell.is-filled {
    border-color: var(--border-strong);
}

/* Активная ячейка — это «курсор здесь», поэтому она зажигается только когда
   поле действительно в фокусе. Иначе экран показывал курсор там, где его
   нет: кликнул мимо — ячейка всё равно в лаванде. Найдено критиком. */
.auth-column[b-at3828dlq0]  .code-field:focus-within .code-cell.is-active {
    background: var(--bg-surface);
    border-color: var(--accent);
    box-shadow: var(--sh-focus);
}

.auth-column[b-at3828dlq0]  .code-caret {
    width: 1px;
    height: 24px;
    background: var(--accent);
    display: none;
}

.auth-column[b-at3828dlq0]  .code-field:focus-within .code-caret {
    display: block;
}

.auth-column[b-at3828dlq0]  .code-cell.is-wrong {
    border-color: var(--negative);
    color: var(--negative-text);
}

/* Исчерпанные попытки: ряд притушен целиком, а не каждая ячейка отдельно. */
.auth-column[b-at3828dlq0]  .code-cells.is-spent {
    opacity: 0.45;
}

/* Настоящее поле лежит поверх ячеек и невидимо: ячейки рисуют его значение,
   а браузер получает обычный input — с автоподстановкой кода из письма,
   вставкой и отправкой по Enter. */
.auth-column[b-at3828dlq0]  .code-input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 56px;
    opacity: 0;
    border: none;
    background: none;
    color: transparent;
    caret-color: transparent;
    cursor: default;
}

.auth-column[b-at3828dlq0]  .code-input:focus {
    outline: none;
}

/* --- плашка ошибки (7e) --------------------------------------------------- */

.auth-column[b-at3828dlq0]  .code-alert {
    display: flex;
    gap: 10px;
    padding: var(--sp-3) 14px;
    background: var(--negative-quiet);
    border-radius: var(--r-md);
    font-size: var(--fs-13);
    line-height: var(--lh-13);
    color: var(--negative-text);
}

.auth-column[b-at3828dlq0]  .code-alert .code-alert-sign {
    font-family: var(--font-mono);
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* Оболочка на языке Paviar по эталонам 7a–7j: боковой колонки нет, страницу
   держит верхняя полоса. Цвета и размеры полосы — в wwwroot/components.css
   (.topbar, .avatar); здесь раскладка страницы и то, чего в языке нет:
   знак в шапке, имя организации, меню под аватаром (значения — из макета
   final-30-07, кадры 7a/7j). */

/* Рамка страницы — ровно вьюпорт (height, а не min-height): при
   неопределённой высоте контейнера длинный документ распирал колонку ниже
   экрана, и скролл уезжал со страницы документа на весь html — шапка и
   подвал исчезали (поймано сверкой 7i). Прокрутка живёт внутри .doc-scroll. */
.page[b-ac2mwm4x4k] {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100vh;
    background: var(--bg-canvas);
}

main[b-ac2mwm4x4k] {
    flex: 1;
    min-height: 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.content[b-ac2mwm4x4k] {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.topbar-mark[b-ac2mwm4x4k] {
    width: 28px;
    height: 28px;
    border-radius: 8px;
    background: var(--brand-icon-bg);
    display: grid;
    place-items: center;
    flex-shrink: 0;
}

.topbar-org[b-ac2mwm4x4k] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.topbar-avatar[b-ac2mwm4x4k] {
    border: none;
    padding: 0;
    cursor: pointer;
}

.topbar-avatar.is-open[b-ac2mwm4x4k] {
    box-shadow: var(--sh-focus);
}

/* --- меню под аватаром (эталон 7j) --------------------------------------- */

.user-menu-backdrop[b-ac2mwm4x4k] {
    position: fixed;
    inset: 0;
    z-index: 19;
}

.user-menu[b-ac2mwm4x4k] {
    position: absolute;
    top: 52px;
    right: 24px;
    width: 260px;
    background: var(--bg-surface);
    border: 1px solid var(--border-default);
    border-radius: var(--r-lg);
    box-shadow: var(--sh-mid);
    overflow: hidden;
    z-index: 20;
}

.user-menu-head[b-ac2mwm4x4k] {
    padding: 14px 16px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    border-bottom: 1px solid var(--border-subtle);
}

.user-menu-email[b-ac2mwm4x4k] {
    font-size: var(--fs-14);
    color: var(--fg-primary);
}

.user-menu-org[b-ac2mwm4x4k] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.user-menu-body[b-ac2mwm4x4k] {
    padding: 6px;
}

.user-menu-item[b-ac2mwm4x4k] {
    /* display: block обязателен: MudBlazor делает <button> inline-flex с
       центровкой содержимого, и text-align на нём не работает — «Выйти»
       выходило по центру вместо левого края эталона 7j (вердикт критика). */
    display: block;
    width: 100%;
    text-align: left;
    padding: 9px 10px;
    border: none;
    border-radius: var(--r-md);
    background: none;
    font-family: var(--font-sans);
    font-size: var(--fs-14);
    color: var(--fg-primary);
    cursor: pointer;
}

.user-menu-item:hover[b-ac2mwm4x4k] {
    background: var(--bg-hover);
}

/* Плашка сбоя. Своя, не жёлтая шаблонная: цвет ошибки берётся из языка. */
#blazor-error-ui[b-ac2mwm4x4k] {
    background: var(--negative-quiet);
    color: var(--negative-text);
    border-top: 1px solid var(--negative);
    font-family: var(--font-sans);
    font-size: var(--fs-13);
    bottom: 0;
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: var(--sp-3) var(--sp-5);
    position: fixed;
    width: 100%;
    z-index: 1000;
}

#blazor-error-ui .dismiss[b-ac2mwm4x4k] {
    cursor: pointer;
    position: absolute;
    right: var(--sp-3);
    top: var(--sp-2);
}

#blazor-error-ui .reload[b-ac2mwm4x4k] {
    color: var(--negative-text);
    text-decoration: underline;
}

/* Пункты меню — ссылки и кнопка вперемешку, поэтому вид задаётся одним
   классом, а не элементом (эталоны 7j, 8a). */
.user-menu-item[b-ac2mwm4x4k] {
    text-decoration: none;
    box-sizing: border-box;
}

.user-menu-item.is-current[b-ac2mwm4x4k] {
    background: var(--bg-hover);
}

.user-menu-sep[b-ac2mwm4x4k] {
    height: 1px;
    margin: 6px 4px;
    background: var(--border-subtle);
}
/* /Components/Layout/PublicLayout.razor.rz.scp.css */
/* Страницы без входа (карточка mind-zoom-publish-pages). Значения — только
   через переменные из wwwroot/tokens.css, как в AuthLayout.razor.css; здесь
   своя копия полосы и своя — читаемая, а не форменная — колонка. */

.public-shell[b-6qw4by7cma] {
    /* Ширина читаемой колонки публичных страниц — единственное число этого
       layout'а, оно же фигурирует в медиа-запросах. Именовано, чтобы не
       искать магическое значение по файлу (находка Greptile, PR #260). */
    --public-content-width: 720px;

    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background: var(--bg-canvas);
}

.public-topbar[b-6qw4by7cma] {
    border-bottom-color: transparent;
}

.public-mark[b-6qw4by7cma] {
    width: 28px;
    height: 28px;
    border-radius: 8px;
    background: var(--brand-icon-bg);
    display: grid;
    place-items: center;
    flex-shrink: 0;
}

.public-mark img[b-6qw4by7cma] {
    display: block;
}

.public-host[b-6qw4by7cma] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.public-main[b-6qw4by7cma] {
    flex: 1;
    display: flex;
    justify-content: center;
    padding: var(--sp-10) var(--sp-6) var(--sp-20);
}

.public-column[b-6qw4by7cma] {
    width: var(--public-content-width);
    max-width: 100%;
    display: flex;
    flex-direction: column;
}

.public-column[b-6qw4by7cma]  h1 {
    font-size: var(--fs-32);
    line-height: var(--lh-32);
    font-weight: 500;
    letter-spacing: var(--tracking-tight);
    margin: 0 0 var(--sp-2);
}

.public-column[b-6qw4by7cma]  h2 {
    font-size: var(--fs-20);
    line-height: var(--lh-20);
    font-weight: 500;
    letter-spacing: var(--tracking-snug);
    margin: var(--sp-8) 0 var(--sp-2);
}

.public-column[b-6qw4by7cma]  p,
.public-column[b-6qw4by7cma]  li {
    font-size: var(--fs-15);
    line-height: var(--lh-15);
    color: var(--fg-secondary);
}

.public-column[b-6qw4by7cma]  p {
    margin: 0 0 var(--sp-4);
}

.public-column[b-6qw4by7cma]  ul,
.public-column[b-6qw4by7cma]  ol {
    margin: 0 0 var(--sp-4);
    padding-left: var(--sp-6);
    display: flex;
    flex-direction: column;
    gap: var(--sp-2);
}

.public-column[b-6qw4by7cma]  a {
    color: var(--accent-text);
}

.public-column[b-6qw4by7cma]  code {
    font-family: var(--font-mono);
    font-size: var(--fs-13);
    background: var(--bg-input);
    border-radius: var(--r-sm);
    padding: 2px 6px;
}

.public-column[b-6qw4by7cma]  table {
    width: 100%;
    border-collapse: collapse;
    margin: 0 0 var(--sp-4);
}

.public-column[b-6qw4by7cma]  th,
.public-column[b-6qw4by7cma]  td {
    text-align: left;
    padding: var(--sp-2) var(--sp-3);
    border-bottom: 1px solid var(--border-subtle);
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

.public-column[b-6qw4by7cma]  .public-updated {
    color: var(--fg-tertiary);
    font-size: var(--fs-13);
    margin: 0 0 var(--sp-6);
}
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-nn8k30fho5],
.components-reconnect-repeated-attempt-visible[b-nn8k30fho5],
.components-reconnect-failed-visible[b-nn8k30fho5],
.components-pause-visible[b-nn8k30fho5],
.components-resume-failed-visible[b-nn8k30fho5],
.components-rejoining-animation[b-nn8k30fho5] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-retrying[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-failed[b-nn8k30fho5],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-nn8k30fho5] {
    display: block;
}


#components-reconnect-modal[b-nn8k30fho5] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-nn8k30fho5 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-nn8k30fho5 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-nn8k30fho5 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-nn8k30fho5]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-nn8k30fho5 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-nn8k30fho5 {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-nn8k30fho5 {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-nn8k30fho5 {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-nn8k30fho5] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-nn8k30fho5] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-nn8k30fho5] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-nn8k30fho5] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-nn8k30fho5] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-nn8k30fho5] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-nn8k30fho5] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-nn8k30fho5 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-nn8k30fho5] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-nn8k30fho5 {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/Connections.razor.rz.scp.css */
/* Экран подключений по эталонам 8a–8j. Цвета, кнопки, поля, таблица и
   модалка — из языка (wwwroot/components.css); здесь только раскладка
   страницы и то, чего в языке нет. */

/* Числа взяты из разметки холста, а не подобраны на глаз: колонка 720,
   поля 48 сверху и снизу, промежуток между карточками 12. */
.conn-page[b-6lilknyo66] {
    width: 720px;
    max-width: 100%;
    margin: 0 auto;
    padding: 48px 0;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.conn-intro[b-6lilknyo66] {
    margin: 0 0 8px;
    font-size: var(--fs-15);
    line-height: var(--lh-15);
    color: var(--fg-secondary);
}

.conn-skel[b-6lilknyo66] {
    height: 96px;
}

/* Сама карточка — класс языка .card (так в разметке холста). Здесь только
   то, чего в нём нет. */
.conn-card[b-6lilknyo66] {
    padding: var(--sp-5) var(--sp-6);
}

.conn-head[b-6lilknyo66] {
    display: flex;
    align-items: center;
    gap: 16px;
}

.conn-mark[b-6lilknyo66] {
    width: 36px;
    height: 36px;
    border-radius: var(--r-md);
    display: grid;
    place-items: center;
    flex-shrink: 0;
    font-size: var(--fs-13);
    font-weight: 600;
    background: var(--accent-quiet);
    color: var(--accent-text);
}

.conn-name[b-6lilknyo66] {
    flex: 1;
    min-width: 0;
}

.conn-title[b-6lilknyo66] {
    font-size: var(--fs-17);
    font-weight: 500;
}

.conn-handle[b-6lilknyo66] {
    margin-left: 6px;
    font-size: var(--fs-14);
    color: var(--fg-secondary);
}

.conn-sub[b-6lilknyo66] {
    margin-top: 2px;
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

.conn-more[b-6lilknyo66] {
    font-size: 18px;
    color: var(--fg-tertiary);
}

/* Требование переввода: подключение работает и собирает, но заведено вне
   продукта. Полоса — предупреждение, не ошибка (кадр 8g). */
.conn-demand[b-6lilknyo66] {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-top: 16px;
    padding: 12px 16px;
    border-radius: var(--r-md);
    background: var(--warning-quiet);
    color: var(--warning-text);
    font-size: var(--fs-13);
    line-height: var(--lh-13);
}

.conn-demand > div[b-6lilknyo66] {
    flex: 1;
}

.conn-streams[b-6lilknyo66] {
    margin-top: 20px;
}

.conn-col-state[b-6lilknyo66] {
    width: 160px;
}

.conn-col-read[b-6lilknyo66] {
    width: 140px;
}

/* Метка пропуска стоит у названия потока, а не в колонке состояния: пропуск —
   не состояние потока и не дело человека, mind доберёт сам. */
.conn-gap[b-6lilknyo66] {
    margin-left: 10px;
    vertical-align: middle;
}

.conn-facts[b-6lilknyo66] {
    margin-top: 16px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    font-size: var(--fs-14);
    line-height: var(--lh-14);
}

/* --- Google Drive ---------------------------------------------------------- */

/* Ссылка «открыть в Drive» у корня — акцент языка. */
.conn-gdrive-link[b-6lilknyo66] {
    color: var(--accent-text);
    text-decoration: none;
}

.conn-gdrive-link:hover[b-6lilknyo66] {
    text-decoration: underline;
}

.conn-gdrive-tools[b-6lilknyo66] {
    margin-top: 4px;
}

.conn-gdrive-actions[b-6lilknyo66] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 16px;
}

/* Форма подключения — те же поля и плотность, что в модалке подключения
   (conn-modal .modal-body: колонка с промежутком 16). */
.conn-gdrive-form[b-6lilknyo66] {
    margin-top: 16px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* Email учётки — копируемое поле: моноширинный шрифт, как любой адресный
   ввод, чтобы длинный service account email не «плыл». */
.conn-email-row[b-6lilknyo66] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.conn-email-row .input-shell[b-6lilknyo66] {
    flex: 1;
    min-width: 0;
}

.conn-email input[b-6lilknyo66] {
    font-family: var(--font-mono);
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

.conn-gdrive-soon[b-6lilknyo66] {
    margin-top: 16px;
}

/* --- модалка подключения ------------------------------------------------- */

.conn-modal .modal-body[b-6lilknyo66] {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.conn-hint[b-6lilknyo66] {
    padding: 14px 16px;
    border-radius: var(--r-md);
    background: var(--bg-hover);
    font-size: var(--fs-13);
    line-height: var(--lh-13);
    color: var(--fg-secondary);
}

.conn-hint-title[b-6lilknyo66] {
    margin-bottom: 6px;
    font-size: var(--fs-14);
    font-weight: 500;
    color: var(--fg-primary);
}

.conn-warn[b-6lilknyo66] {
    padding: 14px 16px;
    border-radius: var(--r-md);
    background: var(--warning-quiet);
    color: var(--warning-text);
    font-size: var(--fs-13);
    line-height: var(--lh-13);
}



.conn-note[b-6lilknyo66] {
    font-size: var(--fs-13);
    line-height: var(--lh-13);
}

/* Два разных отказа — два разных цвета. Красный: поставщик ответил «нет».
   Жёлтый: поставщик не ответил вовсе, и токен, скорее всего, исправен. */
.conn-fail[b-6lilknyo66] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px 16px;
    border-radius: var(--r-md);
    font-size: var(--fs-13);
    line-height: var(--lh-13);
}

.conn-fail.is-bad[b-6lilknyo66] {
    background: var(--negative-quiet);
    color: var(--negative-text);
}

.conn-fail.is-warn[b-6lilknyo66] {
    background: var(--warning-quiet);
    color: var(--warning-text);
}

/* Поле токена: моноширинный, как в эталоне 8c; красная рамка — только когда
   отказал поставщик (8e), не когда отказали мы. */
.conn-token input[b-6lilknyo66] {
    font-family: var(--font-mono);
}

.conn-token.is-bad[b-6lilknyo66] {
    border-color: var(--negative);
}

.conn-fail[b-6lilknyo66] {
    flex-direction: row;
    gap: 10px;
    align-items: flex-start;
}

/* Глиф «!» в кружке (эталоны 8e, 8j). Кружок красится цветом состояния, сам
   знак — фоном окна: красная «!» на красном кружке пропала бы. */
.conn-fail-mark[b-6lilknyo66] {
    flex-shrink: 0;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
    margin-top: 1px;
    color: var(--bg-elevated);
}

.conn-fail.is-bad .conn-fail-mark[b-6lilknyo66] { background: var(--negative-text); }
.conn-fail.is-warn .conn-fail-mark[b-6lilknyo66] { background: var(--warning-text); }

.conn-fail-text[b-6lilknyo66] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

/* Исход подключения прямо в окне (эталон 8i). */
.conn-done[b-6lilknyo66] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 14px 16px;
    border-radius: var(--r-md);
    background: var(--positive-quiet);
    font-size: var(--fs-14);
    line-height: var(--lh-14);
}

.conn-done-head[b-6lilknyo66] {
    font-weight: 500;
    color: var(--positive-text);
}

/* Блоки подтверждения отзыва (эталон 8h) — панели, а не плоский список. */
.conn-panel[b-6lilknyo66] {
    padding: 14px 16px;
    border-radius: var(--r-md);
    background: var(--bg-surface);
    border: 1px solid var(--border-subtle);
    font-size: var(--fs-14);
    line-height: var(--lh-14);
}

.conn-panel-head[b-6lilknyo66] {
    margin-bottom: 4px;
    font-size: var(--fs-13);
    font-weight: 500;
    color: var(--fg-primary);
}
/* /Components/Pages/Knowledge.razor.rz.scp.css */
/* Страница-документ по эталонам 7a/7b/7h/7i. Значения — из макета
   final-30-07 (кадры «Документ · …»): колонка 640 по центру, поля 56,
   абзацы 15/26 с промежутком 16, подвал 12px за чертой border-subtle.
   Всё, что уже есть в языке (.t-mono, .empty), здесь не повторяется. */

.knowledge-message[b-8q1n5q2688] {
    display: flex;
    justify-content: center;
    padding: 56px 24px;
}

.knowledge-message .skel[b-8q1n5q2688] {
    width: min(640px, 100%);
    height: 120px;
    border-radius: var(--r-lg);
}

.doc-scroll[b-8q1n5q2688] {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    justify-content: center;
}

.doc[b-8q1n5q2688] {
    width: 640px;
    max-width: 100%;
    min-height: 100%;
    padding: 56px 0;
    display: flex;
    flex-direction: column;
    gap: 22px;
}

@media (max-width: 700px) {
    .doc[b-8q1n5q2688] {
        padding: 40px 20px;
    }
}

.doc-intro[b-8q1n5q2688] {
    font-size: var(--fs-15);
    line-height: 24px;
    color: var(--fg-secondary);
    text-wrap: pretty;
}

/* --- документ ------------------------------------------------------------ */

.doc-edit[b-8q1n5q2688] {
    flex: 1;
    outline: none;
    font-size: var(--fs-15);
    line-height: 26px;
    color: var(--fg-primary);
    white-space: pre-wrap;
    text-wrap: pretty;
    overflow-wrap: break-word;
    caret-color: var(--accent);
}

/* Абзац = блок-потомок; промежуток 16 как в эталоне 7b. ::deep обязателен:
   блоки создаёт Knowledge.razor.js, у них нет атрибута области видимости,
   и обычный селектор до них не достаёт (поймано сверкой — абзацы слиплись). */
.doc-edit[b-8q1n5q2688]  > * {
    margin: 0 0 16px;
}

.doc-edit[b-8q1n5q2688]  > *:last-child {
    margin-bottom: 0;
}

.doc-edit:empty[b-8q1n5q2688]::before {
    content: attr(data-placeholder);
    color: var(--fg-disabled);
}

/* --- потолок (эталон 7i) ------------------------------------------------- */

.doc-ceiling[b-8q1n5q2688] {
    display: flex;
    gap: 10px;
    padding: 12px 14px;
    background: var(--warning-quiet);
    border-radius: var(--r-md);
    font-size: var(--fs-13);
    line-height: 20px;
    color: var(--warning-text);
}

/* --- подвал -------------------------------------------------------------- */

.doc-foot[b-8q1n5q2688] {
    padding: 12px 32px;
    border-top: 1px solid var(--border-subtle);
    display: flex;
    justify-content: center;
}

.doc-foot-inner[b-8q1n5q2688] {
    width: 640px;
    max-width: 100%;
    display: flex;
    align-items: center;
    gap: 4px;
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.doc-foot-inner .is-warning[b-8q1n5q2688] {
    color: var(--warning-text);
}

.doc-foot-inner .is-negative[b-8q1n5q2688] {
    color: var(--negative-text);
}

.doc-sep.is-dim[b-8q1n5q2688] {
    color: var(--fg-disabled);
}

/* --- статус в шапке (7b/7h) ---------------------------------------------- */

.save-status[b-8q1n5q2688] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.save-status.is-negative[b-8q1n5q2688] {
    color: var(--negative-text);
}
/* /Components/Pages/Memory.razor.rz.scp.css */
/* Экран «Память»: четыре вкладки поверх вики (страницы, источники, схема,
   журнал). Цвета, чипы, вкладки и карточка — из языка (wwwroot/components.css);
   здесь только раскладка страницы и сетки таблиц, которых в языке нет. */

/* Колонка 720, поля 48 — те же числа холста, что у .conn-page. */
.mem-page[b-jehewn8ugy] {
    width: 720px;
    max-width: 100%;
    margin: 0 auto;
    padding: 40px 0 48px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.mem-skel[b-jehewn8ugy] {
    height: 96px;
}

/* Ни страниц, ни источников — вкладки на месте (Схема и Журнал не зависят от
   источников), фраза занимает место списка внутри своей вкладки, а не всю
   страницу целиком. */
.mem-empty-tab[b-jehewn8ugy] {
    min-height: 40vh;
    display: flex;
    align-items: center;
    justify-content: center;
}

.mem-empty[b-jehewn8ugy] {
    max-width: 440px;
    text-align: center;
    font-size: var(--fs-15);
    line-height: var(--lh-15);
    color: var(--fg-secondary);
}

.mem-empty a[b-jehewn8ugy] {
    color: var(--accent-text);
}

/* Источники прочитаны, страниц ещё нет — и общая заготовка для пустого
   журнала («разбор ещё не проходил»). */
.mem-note[b-jehewn8ugy] {
    padding: 14px 16px;
    background: var(--bg-surface);
    border: 1px solid var(--border-subtle);
    border-radius: var(--r-md);
    font-size: var(--fs-14);
    line-height: var(--lh-14);
    color: var(--fg-secondary);
}

/* Строка перечтения над списком источников: кнопка, оценка, подтверждение. */
.mem-reread[b-jehewn8ugy] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
    font-size: var(--fs-13);
}

/* --- сводка вкладки «Источники» (9d) ------------------------------------- */

.mem-summary[b-jehewn8ugy] {
    padding: 0;
    display: flex;
    flex-direction: column;
}

.mem-summary-row[b-jehewn8ugy] {
    display: grid;
    grid-template-columns: 170px 1fr 190px;
    gap: 12px;
    align-items: center;
    padding: 12px 16px;
    border-top: 1px solid var(--border-subtle);
}

.mem-summary-row:first-child[b-jehewn8ugy] {
    border-top: none;
}

.mem-summary-kind[b-jehewn8ugy] {
    font-size: var(--fs-14);
    font-weight: 500;
}

.mem-summary-mid[b-jehewn8ugy] {
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

.mem-summary-read[b-jehewn8ugy] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
    text-align: right;
}

.mem-summary-total[b-jehewn8ugy] {
    border-top: 1px solid var(--border-default);
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

/* --- списки: страницы (9b) и источники (9d) ------------------------------ */

.mem-list[b-jehewn8ugy] {
    display: flex;
    flex-direction: column;
}

.mem-row-head[b-jehewn8ugy] {
    padding: 0 0 8px;
    font-size: var(--fs-12);
    letter-spacing: var(--tracking-wide);
    text-transform: uppercase;
    color: var(--fg-tertiary);
    font-weight: 500;
}

.mem-page-row[b-jehewn8ugy] {
    display: grid;
    grid-template-columns: 250px 1fr 70px 110px;
    gap: 12px;
    align-items: center;
    padding: 9px 0;
    border-top: 1px solid var(--border-subtle);
    font-size: var(--fs-14);
}

.mem-page-row.mem-row-head[b-jehewn8ugy] {
    border-top: none;
    padding: 0 0 8px;
}

.mem-source-row[b-jehewn8ugy] {
    display: grid;
    grid-template-columns: 100px 90px 1fr 70px 90px;
    gap: 12px;
    align-items: center;
    padding: 10px 0;
    border-top: 1px solid var(--border-subtle);
    font-size: var(--fs-14);
}

.mem-source-row.mem-row-head[b-jehewn8ugy] {
    border-top: none;
    padding: 0 0 8px;
}

.mem-group-head[b-jehewn8ugy] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 14px 0 6px;
}

.mem-group-count[b-jehewn8ugy] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.mem-col-right[b-jehewn8ugy] {
    text-align: right;
    color: var(--fg-secondary);
}

.mem-kind[b-jehewn8ugy] {
    font-size: var(--fs-13);
    color: var(--fg-tertiary);
}

.mem-truncate[b-jehewn8ugy] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: var(--fs-13);
    color: var(--fg-secondary);
}

/* «Ещё нет» разбора — предупреждение, а не ошибка (то же слово, что у
   вытесненного куска источника). */
.mem-warn[b-jehewn8ugy] {
    color: var(--warning-text);
    white-space: nowrap;
}

.mem-privacy[b-jehewn8ugy] {
    font-size: var(--fs-12);
    line-height: var(--lh-12);
    color: var(--fg-tertiary);
    padding-top: 4px;
}

/* Хвост сводки «· 4 потока» приглушён, как на холсте: жирным — только имя. */
.mem-summary-tail[b-jehewn8ugy] {
    color: var(--fg-secondary);
    font-weight: 400;
}

/* Названия в списках — обычным цветом текста (9b, 9d); акцент — при наведении. */
.mem-page-row a[b-jehewn8ugy],
.mem-source-row a[b-jehewn8ugy] {
    color: inherit;
}

.mem-page-row a:hover[b-jehewn8ugy],
.mem-source-row a:hover[b-jehewn8ugy] {
    color: var(--accent-text);
}

/* --- вкладка «Схема»: единственное место экрана, где человек пишет ------- */

.mem-schema[b-jehewn8ugy] {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.mem-schema-shell[b-jehewn8ugy] {
    height: auto;
    align-items: stretch;
    padding: var(--sp-3);
}

.mem-schema-shell textarea[b-jehewn8ugy] {
    min-height: 420px;
    resize: vertical;
    font-family: var(--font-mono);
    line-height: var(--lh-14);

    /* Перенос по словам с сохранением отступов. Было `pre` — без переноса
       вовсе: замер на стартовой схеме дал поле 694 px при содержимом 3752 px,
       самая длинная строка — 469 знаков обычной прозы. Читать схему значило
       протаскивать полосу через пять экранов на каждый абзац, а этот экран
       ровно для того и есть, чтобы человек схему читал и правил.
       `pre-wrap`, а не `normal`: ведущие пробелы держат блок с устройством
       вики, где строки выровнены по стрелкам. */
    white-space: pre-wrap;
}

.mem-schema-actions[b-jehewn8ugy] {
    display: flex;
    align-items: center;
    gap: 12px;
}

.mem-schema-status[b-jehewn8ugy] {
    font-size: var(--fs-13);
    color: var(--positive-text);
}

/* --- вкладка «Журнал» ---------------------------------------------------- */

.mem-journal-row[b-jehewn8ugy] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 12px 0;
    border-top: 1px solid var(--border-subtle);
}

.mem-journal-row:first-child[b-jehewn8ugy] {
    border-top: none;
}

.mem-journal-meta[b-jehewn8ugy] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.mem-journal-text[b-jehewn8ugy] {
    font-size: var(--fs-14);
    line-height: var(--lh-14);
    color: var(--fg-secondary);
    white-space: pre-wrap;
}
/* /Components/Pages/MemoryPage.razor.rz.scp.css */
/* Страница вики: шапка/тело как текст и список версий. .mem-page/.mem-skel
   продублированы из Memory.razor.css: изоляция CSS в Blazor скопирована на
   компонент, чужой .razor.css сюда не долетит (та же причина, что у
   .mem-head в MemorySource.razor.css). Колонка 720, поля 48 — числа холста. */

.mem-page[b-1iqjogjsys] {
    width: 720px;
    max-width: 100%;
    margin: 0 auto;
    padding: 40px 0 48px;
    display: flex;
    flex-direction: column;
    gap: 24px;
}

.mem-skel[b-1iqjogjsys] {
    height: 96px;
}

.mem-head[b-1iqjogjsys] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.mem-head-row[b-1iqjogjsys] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.mem-head-count[b-1iqjogjsys] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.mem-title[b-1iqjogjsys] {
    font-size: var(--fs-24);
    line-height: var(--lh-24);
    font-weight: 500;
    letter-spacing: -0.005em;
}

.mem-head-line[b-1iqjogjsys] {
    font-size: var(--fs-14);
    line-height: var(--lh-14);
    color: var(--fg-secondary);
}

.mem-block[b-1iqjogjsys] {
    display: flex;
    flex-direction: column;
}

.mem-block-head[b-1iqjogjsys] {
    padding: 0 0 8px;
}

/* Шапка и тело — текст ровно как его написал агент: перенос строк сохраняем
   через white-space, markdown в HTML не рендерим (в проекте нет разборщика
   markdown, а заводить его ради одной карточки — за рамками задания). */
.mem-markdown[b-1iqjogjsys] {
    padding: 14px 16px;
    background: var(--bg-surface);
    border: 1px solid var(--border-subtle);
    border-radius: var(--r-md);
    font-size: var(--fs-14);
    line-height: var(--lh-14);
    color: var(--fg-primary);
    white-space: pre-wrap;
    word-break: break-word;
}

.mem-revisions[b-1iqjogjsys] {
    display: flex;
    flex-direction: column;
}

.mem-revision-row[b-1iqjogjsys] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 0;
    border-top: 1px solid var(--border-subtle);
    font-size: var(--fs-13);
}

.mem-revision-row:first-child[b-1iqjogjsys] {
    border-top: none;
}

.mem-revision-action[b-1iqjogjsys] {
    color: var(--fg-secondary);
}

.mem-revision-date[b-1iqjogjsys] {
    margin-left: auto;
    color: var(--fg-tertiary);
}
/* /Components/Pages/MemorySource.razor.rz.scp.css */
/* Источник: куски по порядку, с местом и говорящим, где они есть.
   .mem-page/.mem-skel и шапка (.mem-head*, .mem-title) продублированы из
   Memory.razor.css/MemoryPage.razor.css: изоляция CSS в Blazor скопирована
   на компонент, чужой .razor.css сюда не долетит. */

.mem-page[b-eu82hp7pbc] {
    width: 720px;
    max-width: 100%;
    margin: 0 auto;
    padding: 40px 0 48px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.mem-skel[b-eu82hp7pbc] {
    height: 96px;
}

.mem-head[b-eu82hp7pbc] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.mem-head-row[b-eu82hp7pbc] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.mem-head-count[b-eu82hp7pbc] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.mem-title[b-eu82hp7pbc] {
    font-size: var(--fs-24);
    line-height: var(--lh-24);
    font-weight: 500;
    letter-spacing: -0.005em;
}

.mem-title-tail[b-eu82hp7pbc] {
    margin-left: 6px;
    color: var(--fg-tertiary);
    font-weight: 400;
}

.mem-fragments[b-eu82hp7pbc] {
    padding: var(--sp-2);
    display: flex;
    flex-direction: column;
}

/* Без метки места (документ Notion) — колонки метки нет вовсе, не пустая
   ячейка: у документа нет ни говорящего, ни места (спека §7). */
.mem-fragment[b-eu82hp7pbc] {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 12px;
    padding: 12px 14px;
    border-top: 1px solid var(--border-subtle);
}

.mem-fragment.mem-fragment-marked[b-eu82hp7pbc] {
    grid-template-columns: 72px 1fr auto;
}

.mem-fragment:first-child[b-eu82hp7pbc] {
    border-top: none;
}

.mem-fragment-mark[b-eu82hp7pbc] {
    color: var(--fg-tertiary);
    font-size: var(--fs-12);
    padding-top: 3px;
}

.mem-fragment-body[b-eu82hp7pbc] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.mem-fragment-speaker[b-eu82hp7pbc] {
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
}

.mem-fragment-text[b-eu82hp7pbc] {
    font-size: var(--fs-14);
    line-height: var(--lh-14);
}

.mem-fragment-note[b-eu82hp7pbc] {
    flex-shrink: 0;
    align-self: flex-start;
    font-size: var(--fs-12);
    color: var(--fg-tertiary);
    padding-top: 3px;
}

/* Вытесненный правкой кусок — приглушён, но остаётся на своём месте:
   порядок документа не меняется отзывом. */
.mem-fragment-dead .mem-fragment-text[b-eu82hp7pbc],
.mem-fragment-dead .mem-fragment-speaker[b-eu82hp7pbc] {
    color: var(--fg-disabled);
}
