/* Здесь остаётся только то, что рисует сам Blazor, — заставка загрузки, плашка потерянного
   соединения и разметка валидации. Всё остальное живёт в css/: tokens (переменные), mud (скин
   компонентов), shell (каркас и шапка страницы), graph/timeline/voices (страницы).

   Раньше в этом файле лежали остатки шаблона проекта: правила Bootstrap для .form-floating и
   .form-check-input, которых в приложении нет вовсе (вёрстка целиком на MudBlazor), и англоязычная
   плашка ошибки. */

/* Blazor переводит фокус на заголовок страницы после навигации, чтобы её озвучил скринридер.
   Рамку фокуса при этом рисовать не надо: пользователь никуда не нажимал, а заголовок обводится
   белым прямоугольником на каждом переходе. Клавиатурная навигация не страдает — h1 не интерактивен,
   и до него не дойти табом. */
h1:focus, .fb-head-title:focus { outline: none; }

/* Заставка на время загрузки рантайма. Стиля у неё не было вовсе, и на тёмном фоне слово
   «Загрузка…» набиралось чёрным по чёрному: первые секунды приложения выглядели как пустой экран.
   Живёт в app.css, а не в shell.css: показывается она ДО того, как WebAssembly вообще запустился. */
.fb-boot {
    display: grid;
    place-items: center;
    min-height: 100vh;
    font-family: var(--fb-ui);
    font-size: var(--fb-fs-13);
    letter-spacing: var(--fb-tr-eyebrow);
    text-transform: uppercase;
    color: var(--fb-ink-faint);
}

/* Плашка потерянного соединения. Была `lightyellow` из шаблона проекта — единственное место, куда
   не дошла ни одна правка палитры. Жёлтый в системе означает «ждёт человека», а это отказ, поэтому
   плашка красная.

   Правило глобальное, а не scoped: элемент с этим id есть и в оболочке (index.html, до старта
   рантайма), и в разметке MainLayout, а scoped-стиль достаёт только до второго — то есть ровно до
   того, который при потере соединения может быть уже не отрисован. */
#blazor-error-ui {
    position: fixed;
    left: 0;
    bottom: 0;
    z-index: 1000;
    display: none;
    box-sizing: border-box;
    width: 100%;
    padding: 10px 20px 11px;
    border-top: 1px solid var(--fb-danger);
    background: var(--fb-danger-soft);
    backdrop-filter: blur(8px);
    color: var(--fb-ink);
    font-family: var(--fb-ui);
    font-size: var(--fb-fs-13);
}

#blazor-error-ui a.reload { color: var(--fb-danger); text-decoration: underline; }

#blazor-error-ui .dismiss {
    position: absolute;
    top: 8px;
    right: 12px;
    cursor: pointer;
    color: var(--fb-ink-dim);
}

.valid.modified:not([type=checkbox]) { outline: 1px solid var(--fb-ok); }

.invalid { outline: 1px solid var(--fb-danger); }

.validation-message { color: var(--fb-danger); font-size: var(--fb-fs-11); }

.blazor-error-boundary {
    padding: 12px 14px;
    border: 1px solid var(--fb-danger);
    border-radius: var(--fb-r-in);
    background: var(--fb-danger-soft);
    color: var(--fb-danger);
    font-family: var(--fb-ui);
    font-size: var(--fb-fs-12);
}

.blazor-error-boundary::after { content: "Ошибка на этом участке страницы."; }
