/* --- Inter, локально --------------------------------------------------
   Раньше шрифт грузился с Google Fonts. В клинике без интернета — а это
   норма для районной больницы — запрос висел до таймаута, а экраны
   откатывались на Segoe UI. Теперь файлы лежат рядом с приложением.

   Переменный шрифт, четыре поднабора с unicode-range: браузер скачивает
   только те, символы из которых встретил. Казахские буквы (Ә Ғ Қ Ң Ө Ұ Ү Һ)
   лежат в cyrillic-ext, І — в cyrillic; оба поднабора обязательны.
   Источник: пакет @fontsource-variable/inter 5.3.0 (Inter 4.x), лицензия
   OFL 1.1 — файл LICENSE рядом со шрифтами. */
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('fonts/inter/inter-cyrillic-ext-wght-normal.woff2') format('woff2');
    unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('fonts/inter/inter-cyrillic-wght-normal.woff2') format('woff2');
    unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('fonts/inter/inter-latin-ext-wght-normal.woff2') format('woff2');
    unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('fonts/inter/inter-latin-wght-normal.woff2') format('woff2');
    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

html, body {
    font-family: 'Inter', 'Segoe UI', sans-serif;
}

.blazor-error-boundary {
    background: #b32121;
    padding: 1rem 1rem 1rem 1rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "Произошла ошибка."
    }

.cursor-pointer { cursor: pointer; }

/* Стили этикеток пробирок живут в OrderCard.razor (инлайн <style>):
   они обязаны работать даже при недоступной статике сервера. */

/* --- Фирменная шапка SARAP LAB --------------------------------------- */
.brand { gap: .55rem; margin-right: .5rem; }
.brand-plate {
    display: inline-flex; align-items: center; justify-content: center;
    width: 38px; height: 38px; border-radius: 50%;
    background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25);
    overflow: hidden;
}
.brand-plate img { width: 34px; height: 34px; display: block; }
.brand-word {
    font-family: 'Inter', 'Segoe UI', sans-serif;
    font-weight: 700; font-size: 1.15rem; letter-spacing: .06em; line-height: 1;
    color: #fff;
}
.brand-word-lab { color: #D9B77E; margin-left: .35em; }

/* --- Пустое состояние --------------------------------------------------- */
.empty-state {
    display: flex; flex-direction: column; align-items: center; text-align: center;
    padding: 3rem 1.5rem; color: var(--mud-palette-text-secondary);
}
.empty-state-icon {
    width: 72px; height: 72px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: #E6F2ED; color: #0B6B4F;
}
.empty-state .mud-typography-h6 { color: var(--mud-palette-text-primary); }
.empty-state-hint { max-width: 460px; margin-top: .25rem; opacity: .8; }

/* --- Таблицы: широкие уходят в горизонтальную прокрутку, а не за край --- */
.table-scroll { overflow-x: auto; }
.nowrap { white-space: nowrap; }
.barcode-chips { display: flex; flex-wrap: wrap; gap: .25rem .4rem; }
.barcode-chips span {
    font-family: ui-monospace, Consolas, monospace; font-size: .78rem;
    padding: .1rem .4rem; border-radius: 6px;
    background: var(--mud-palette-background); border: 1px solid var(--mud-palette-lines-default);
}
.empty-state-compact { padding: 1.5rem 1rem; }
.empty-state-compact .empty-state-icon { width: 48px; height: 48px; }

/* --- Строки результатов с отклонением ----------------------------------
   Классы вместо зашитых цветов: светлый персиковый фон в тёмной теме
   слепил бы, а тёмная тема переключается на лету. */
.row-abnormal { background: #FFF7ED; }
.row-critical { background: #FDECEC; }

/* --- Тёмная тема --------------------------------------------------------
   Переключается классом на корне макета; переменные MudBlazor меняет сам
   провайдер, здесь — только то, что задано своими цветами. */
.theme-dark .empty-state-icon { background: #1F3A31; color: #5CBFA0; }
.theme-dark .barcode-chips span { background: #1A2220; border-color: #2A3430; }
.theme-dark .row-abnormal { background: #3A2E1A; }
.theme-dark .row-critical { background: #3F1F1F; }
.theme-dark .login-card { background: #161D1A; }

/* --- Переподключение circuit (О2) -------------------------------------
   Блок скрыт, пока blazor.web.js не навесит класс состояния; внутри три
   варианта текста, показывается один. Цвета — как у входа. */
#components-reconnect-modal { display: none; }
#components-reconnect-modal.components-reconnect-show,
#components-reconnect-modal.components-reconnect-failed,
#components-reconnect-modal.components-reconnect-rejected {
    display: flex; position: fixed; inset: 0; z-index: 3000;
    align-items: center; justify-content: center;
    background: rgba(22, 26, 29, 0.55); backdrop-filter: blur(2px);
}
.reconnect-card { background: #fff; color: #161A1D; border-radius: 16px; padding: 28px 32px;
    width: 420px; max-width: 92vw; text-align: center; border-bottom: 3px solid #A8804F;
    box-shadow: 0 12px 40px rgba(0,0,0,.35); }
.reconnect-title { font-size: 18px; font-weight: 600; margin-bottom: 8px; }
.reconnect-text { font-size: 14px; opacity: .8; }
.reconnect-card button { margin-top: 18px; padding: 10px 22px; border: 0; border-radius: 8px;
    background: #0B6B4F; color: #fff; font-size: 14px; cursor: pointer; }
.reconnect-show, .reconnect-failed, .reconnect-rejected { display: none; }
#components-reconnect-modal.components-reconnect-show .reconnect-show,
#components-reconnect-modal.components-reconnect-failed .reconnect-failed,
#components-reconnect-modal.components-reconnect-rejected .reconnect-rejected { display: block; }
.theme-dark .reconnect-card { background: #161D1A; color: #E6EDEA; }

