/* Общий вид поверхности — кабинета и админки (спека 007 §6.7, спека 009 §6.1; план 009, шаг 33; ревью шага 33, S33-S1).
   Внешний файл: CSP обеих поверхностей встроенных стилей не допускает. Правила переехали из стилей кабинета без смысловой
   правки: без них у админки подвал необработанной ошибки стоял бы на каждой странице, тело шло бы шрифтом браузера, а
   значки на миг проступали бы словами при смене темы. */

/* ТИПОГРАФИКА ТЕЛА (журнал 007, D-46). Тема подключается компонентом RadzenTheme — это базовый файл темы, и типографику
   тела он не задаёт. */
body {
    margin: 0;
    font-family: var(--rz-text-font-family);
    font-size: var(--rz-body-font-size);
    line-height: var(--rz-body-line-height);
    color: var(--rz-text-color);
    background-color: var(--rz-body-background-color);
    -webkit-font-smoothing: antialiased;
}

/* ШРИФТ ЗНАЧКОВ — ОБЪЯВЛЕН И ЗДЕСЬ. Значки Radzen нарисованы лигатурами: в разметке лежит слово «sim_card», а шрифт
   превращает его в картинку. Объявление живёт в файле темы, и при переключении светлой на тёмную Radzen подменяет
   файл целиком — на миг по экрану проступают слова. Этот файл не подменяется никогда; `font-display: block` держит
   место пустым, пока шрифт грузится. Файл тот же, лишней загрузки нет. Адрес — от ЭТОГО файла
   (`_content/Sms.Web.Shared/`), поэтому соседний каталог статики Radzen: он верен под любой базой поверхности. */
@font-face {
    font-family: "Material Symbols";
    src: url("../Radzen.Blazor/fonts/MaterialSymbolsOutlined.woff2") format("woff2 supports variations"),
         url("../Radzen.Blazor/fonts/MaterialSymbolsOutlined.woff2") format("woff2-variations");
    font-style: normal;
    font-weight: 100 700;
    font-display: block;
}

/* ПОДВАЛ НЕОБРАБОТАННОЙ ОШИБКИ. Скрыт, пока сценарий Blazor не покажет его сам. Фон сплошной: полупрозрачный пропускал
   бы сквозь себя содержимое экрана, и текст отказа читался бы поверх чужого. Цвета — из переменных темы, чтобы подвал не
   светил в тёмной. */
#blazor-error-ui {
    display: none;
    position: fixed;
    left: 0;
    bottom: 0;
    width: 100%;
    box-sizing: border-box;
    z-index: 1000;
    align-items: center;
    gap: 1rem;
    padding: 0.75rem 1.25rem;
    background: var(--rz-base-background-color);
    color: var(--rz-text-color);
    border-top: 3px solid var(--rz-danger);
    box-shadow: var(--rz-shadow-3);
}

/* Подвал показывает сценарий Blazor, выставляя display: block; раскладку строкой задаём мы. */
#blazor-error-ui[style*="display: block"],
#blazor-error-ui[style*="display:block"] {
    display: flex !important;
}

/* РАСКЛАДКА ПОВЕРХНОСТИ — КАБИНЕТА И АДМИНКИ (журнал 007, D-46; план 009, шаг 36). Стандартная раскладка Radzen: шапка,
   боковое меню, тело. Правила переехали из стилей кабинета без смысловой правки: раскладка админки носит те же классы, а
   стили кабинета она не грузит — без переезда ссылки статической шапки на цветной шапке не читались бы (журнал 007, D-53). */

.sms-cabinet-language {
    width: 8.5rem;
}

.sms-cabinet-header {
    padding: 0 0.5rem;
    min-height: 3.5rem;
}

/* ПЕРЕКЛЮЧАТЕЛИ СТАТИЧЕСКОЙ ШАПКИ — ССЫЛКАМИ (журнал 007, D-53). Цвет — от шапки, а не от ссылок темы: синяя ссылка
   на цветной шапке не читалась бы так же, как не читался заголовок до D-47. Текущий язык — не ссылка, а метка. */
.sms-cabinet-header-links {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0 0.5rem;
}

.sms-cabinet-header-links a,
.sms-cabinet-header-theme {
    color: var(--rz-header-color);
    text-decoration: none;
    opacity: 0.8;
}

.sms-cabinet-header-links a:hover,
.sms-cabinet-header-theme:hover {
    opacity: 1;
    text-decoration: underline;
}

.sms-cabinet-header-current {
    color: var(--rz-header-color);
    font-weight: 600;
}

.sms-cabinet-header-theme {
    display: inline-flex;
    align-items: center;
    padding: 0.5rem;
}

/* На статической шапке кнопки свёртки меню нет, и название вставало вплотную к краю: отступ ему даёт кнопка. */
.sms-cabinet-header .rz-label:first-child {
    margin-inline-start: 0.75rem;
}

/* ПОЛЕЗНОЕ СОДЕРЖИМОЕ — НА ВСЮ ШИРИНУ (журнал 007, D-52). Потолок в 90rem оставлял справа пустую полосу на
   любом экране шире 1440 px, а гриды при этом ужимали колонки до обрезанных «За…» и «ОЖИДАНИЕ К». */
.sms-cabinet-main {
    min-width: 0;
}

/* ССЫЛКА СО ЗНАЧКОМ: у Radzen значок и текст стоят вплотную — «documentДокументация API». */
.rz-link .rz-link-icon,
.rz-link i {
    margin-inline-end: 0.35rem;
}

/* ДЛИННОЕ ЧУЖОЕ ЗНАЧЕНИЕ АДМИНКИ (спека 009 §6.4, компонент `AdminLongValue`): перенос по любому месту — строка без пробелов не
   ломает сетку; кнопки — без фона, по краю значения. Значок копирования — лигатура шрифта значков в псевдоэлементе: в тексте
   элемента остаётся только само значение. */
.sms-long {
    overflow-wrap: anywhere;
    white-space: pre-wrap;
}

.sms-long-toggle,
.sms-long-copy {
    border: 0;
    background: none;
    padding: 0 0.25rem;
    cursor: pointer;
    color: var(--rz-link-color, inherit);
    font: inherit;
    vertical-align: baseline;
}

.sms-long-copy::before {
    font-family: "Material Symbols";
    content: "content_copy";
    font-size: 1rem;
    line-height: 1;
    vertical-align: middle;
}

/* ГРИДЫ АДМИНКИ — ПО СОДЕРЖИМОМУ И С ПЕРЕНОСОМ ВМЕСТО ОБРЕЗКИ (проход глазами 2026-09-25, V-09, V-11, V-15, V-20, V-23, V-27, V-30,
   V-31, V-37). У Radzen ячейка и заголовок режутся многоточием в одну строку, и при равных ширинах столбцов дата, вид операции и
   длинный заголовок обрезались, а почти пустые столбцы валюты и транзакции занимали ту же ширину. Раскладка таблицы — по содержимому,
   текст ячейки и заголовка переносится; кнопки строки текст не переносят и задают столбцу свою ширину. Только поверхность админки:
   раскладка кабинета класса `sms-admin-main` не несёт.

   СПЕЦИФИЧНОСТЬ — ВЫШЕ ПРАВИЛ ТЕМЫ, И ЭТО НЕСУЩЕЕ (проверка закрытия V-09, V-11): у Radzen 11 обрезку держат `.rz-grid-table td
   .rz-cell-data` (0,2,1), `.rz-grid-table thead th .rz-column-title` и `… .rz-column-title-content` (0,2,2), `.rz-grid-table th` и
   `td` (0,1,1), и правило `.sms-admin-main .rz-cell-data` (0,2,0) им проигрывало — перенос не включался вовсе, а многоточие уходило
   лишь за счёт ширины таблицы и прокрутки. Каждый селектор ниже — тот же путь темы с префиксом поверхности, то есть на класс
   сильнее своего соперника. */
.sms-admin-main .rz-grid-table {
    table-layout: auto;
}

.sms-admin-main .rz-grid-table th,
.sms-admin-main .rz-grid-table td,
.sms-admin-main .rz-grid-table thead th,
.sms-admin-main .rz-grid-table td .rz-cell-data,
.sms-admin-main .rz-grid-table thead th .rz-column-title,
.sms-admin-main .rz-grid-table thead th .rz-column-title-content {
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    overflow-wrap: break-word;
}

/* Действия строки (кнопки и ссылки с `data-sms-action`) и части момента (`AdminMoment`: дата и время со смещением) — одной строкой:
   столбец берёт их ширину, длинный текст соседних столбцов переносится, а момент ломается только между датой и временем. Код проекта
   в подписи «код — имя» (`AdminProjectLink`, N-02) — той же неразрывной частью и вне грида: в карточке заказа ссылка стоит в тексте;
   подпись проекта без ссылки (`AdminProjectName`: область стоп-фразы, заголовки форм замка пары и удаления стоп-элемента) — тоже. */
.sms-admin-main .rz-grid-table td .rz-cell-data .rz-button,
.sms-admin-main .rz-grid-table td .rz-cell-data [data-sms-action],
.sms-admin-main .rz-grid-table td .rz-cell-data .sms-nowrap,
.sms-admin-main .sms-nowrap {
    white-space: nowrap;
}

/* ПОЛЯ ЯЧЕЕК — ВДВОЕ УЖЕ ТЕМЫ ПО ГОРИЗОНТАЛИ: у material по 1rem с каждой стороны, и в гридах в десять–двенадцать столбцов (замки пары,
   споры, прогоны сверки) одни поля съедали треть ширины при 1424 — столбцы с датой и видом операции сжимались до переноса по слогам.
   Вертикальные поля и плотность строк — темы. */
.sms-admin-main .rz-data-grid {
    --rz-grid-cell-padding: 0.625rem 0.5rem;
    --rz-grid-header-title-padding-inline: 0.5rem 0;
}

/* КНОПКИ — ПО ТЕКСТУ, А НЕ ВО ВСЮ ШИРИНУ (V-25, V-27, V-41): в вертикальной стопке Radzen растягивает элемент на ширину стопки. */
.sms-admin-main .rz-flex-column > .rz-button {
    align-self: flex-start;
}

/* ПОДСКАЗКИ ПОЛЕЙ — ОТДЕЛЬНЫМИ СТРОКАМИ (V-36): две подписи у поля не склеиваются в одну строку без разделителя. */
.sms-admin-main .sms-field-hint {
    display: block;
}

/* ВЛОЖЕННАЯ НАГРУЗКА АУДИТА — БЛОКАМИ С ОТСТУПОМ (ревизия спеки 009 2026-09-26, решение I): вложенный объект и список — блок под
   подписью своего ключа, со сдвигом и линией слева; элемент списка — нумерованный блок того же вида. */
.sms-admin-main .sms-payload-nested {
    margin-inline-start: 0.75rem;
    padding-inline-start: 0.5rem;
    border-inline-start: 1px solid var(--rz-base-300);
}

/* СЛУЖЕБНОЕ ИМЯ РЯДОМ С ПОДПИСЬЮ (V-28, V-29): мелко и приглушённо, с копированием. */
.sms-admin-main .sms-service-id {
    opacity: 0.75;
}

/* ВЫБОР ЯЗЫКА СТАТИЧЕСКОЙ ШАПКИ — ВИДОМ ВЫПАДАЮЩЕГО СПИСКА (V-41): у страницы без цепи выпадающего списка Radzen нет, и выбор —
   раскрывающимся элементом `details` со ссылками на конечную точку выбора; рамка, ширина и фон — как у поля выбора шапки. */
.sms-static-language {
    position: relative;
    width: 8.5rem;
}

.sms-static-language > summary {
    list-style: none;
    cursor: pointer;
    padding: 0.35rem 0.75rem;
    border: var(--rz-input-border, 1px solid currentColor);
    border-radius: var(--rz-input-border-radius, 4px);
    background: var(--rz-input-background-color, var(--rz-base-background-color));
    color: var(--rz-input-value-color, var(--rz-text-color));
}

.sms-static-language > summary::-webkit-details-marker {
    display: none;
}

.sms-static-language > summary::after {
    content: "\25BE";
    float: right;
}

.sms-static-language-menu {
    position: absolute;
    z-index: 10;
    inset-inline: 0;
    display: flex;
    flex-direction: column;
    background: var(--rz-base-background-color);
    border: var(--rz-input-border, 1px solid currentColor);
    border-radius: var(--rz-input-border-radius, 4px);
    box-shadow: var(--rz-shadow-3);
}

.sms-static-language-menu a {
    padding: 0.35rem 0.75rem;
    color: var(--rz-text-color);
    text-decoration: none;
}

.sms-static-language-menu a:hover {
    background: var(--rz-base-200, rgba(0, 0, 0, 0.06));
}

/* НАЗВАНИЕ ПОВЕРХНОСТИ В ШАПКЕ — ОДНОЙ СТРОКОЙ (проход глазами 2026-09-27, N-11): в китайском «管理后台» перенос возможен между любыми
   двумя знаками, и сжатая соседями шапки надпись вставала в две строки на каждом экране даже при ширине 1424; латинское и русское
   название — одно-два слова, и у них этого не было видно. Кабинет несёт тот же класс: его «个人中心» ломается так же на узком экране. */
.sms-app-title {
    white-space: nowrap;
}

/* ПОДСКАЗКА ПО НАЧАЛУ ЛОГИНА — ПОСТОЯННОЙ ШИРИНЫ (проход глазами 2026-09-27, N-01): у Radzen ширина выпадающего списка — по содержимому,
   и после выбора продавца список сужался с подсказки «Начните вводить логин продавца» до короткого логина, а кнопка «Показать» уезжала
   влево. Ширина — та, что у списка с подсказкой: замер в браузере стенда темой material — 325 px у русской «Начните вводить логин
   продавца», 267 у английской, 224 у китайской; 21rem вмещает самую длинную. На экране телефона (375 px и уже) список шире карточки
   отбора — у админки требования к ширине телефона нет, и её шапка там тоже не помещается (мобильный вид не проверялся). */
.sms-admin-main .sms-suggest {
    width: 21rem;
    max-width: 100%;
}
