/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
/* Окно разрыва связи. Имена классов и правила показа заданы каркасом Blazor —
   их менять нельзя. Оформление переведено на токены дизайн-системы: окно
   не должно выглядеть на странице чужим, особенно в тёмной теме, где белое
   окно бьёт по глазам. */

.components-reconnect-first-attempt-visible[b-g3ns9v88ql],
.components-reconnect-repeated-attempt-visible[b-g3ns9v88ql],
.components-reconnect-failed-visible[b-g3ns9v88ql],
.components-pause-visible[b-g3ns9v88ql],
.components-resume-failed-visible[b-g3ns9v88ql],
.components-rejoining-animation[b-g3ns9v88ql] {
    display: none;
}

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

#components-reconnect-modal[b-g3ns9v88ql] {
    width: min(22rem, calc(100vw - 2rem));
    margin: 20vh auto;
    padding: var(--s-6);
    background-color: var(--c-surface-raised);
    color: var(--c-text);
    border: 1px solid var(--c-border);
    border-radius: var(--r-lg);
    box-shadow: var(--sh-2);
    font-family: var(--font-sans);
    font-size: var(--fs-md);
}

#components-reconnect-modal[b-g3ns9v88ql]::backdrop {
    background-color: rgba(0, 0, 0, 0.45);
}

.components-reconnect-container[b-g3ns9v88ql] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--s-4);
}

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

#components-reconnect-modal button[b-g3ns9v88ql] {
    min-height: var(--tap);
    padding: var(--s-2) var(--s-5);
    border: 1px solid var(--c-accent-solid);
    border-radius: var(--r-md);
    background-color: var(--c-accent-solid);
    color: var(--c-on-accent);
    font: inherit;
    font-weight: var(--fw-medium);
    cursor: pointer;
}

#components-reconnect-modal button:hover[b-g3ns9v88ql] {
    background-color: var(--c-accent-solid-hover);
    border-color: var(--c-accent-solid-hover);
}

/* Круги расходятся от центра, пока идёт попытка соединения. Анимация помечена
   aria-hidden в разметке: смысл несёт текст рядом, а не движение. */
.components-rejoining-animation[b-g3ns9v88ql] {
    position: relative;
    width: 4rem;
    height: 4rem;
}

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

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

@keyframes components-rejoining-animation-b-g3ns9v88ql {
    0%,
    4.9% {
        top: 2rem;
        left: 2rem;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 2rem;
        left: 2rem;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0;
        left: 0;
        width: 4rem;
        height: 4rem;
        opacity: 0;
    }
}
/* /Components/Layout/StandStamp.razor.rz.scp.css */
/* Отпечаток сборки. Две громкости, и разница между ними — весь смысл полосы:
   воспроизводимая сборка показывается тихо, невоспроизводимая — во всю ширину.
   Значения берутся из общих лексем кабинетов (cabinet.tokens.css). */

.stand-stamp[b-3rtge3iwyv] {
    position: fixed;
    left: var(--s-2);
    bottom: var(--s-2);
    z-index: 1000;
    display: flex;
    gap: var(--s-2);
    align-items: baseline;
    padding: var(--s-1) var(--s-2);
    border: 1px solid var(--c-border);
    border-radius: var(--radius-sm, 4px);
    background: var(--c-surface);
    color: var(--c-text-muted);
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    line-height: var(--lh-tight);
    /* Полоса сообщает, а не участвует: она не должна перехватывать нажатия
       у того, что лежит под ней. */
    pointer-events: none;
    opacity: 0.9;
}

.stand-stamp__label[b-3rtge3iwyv] {
    color: var(--c-text-muted);
    font-family: var(--font-sans);
}

.stand-stamp__id[b-3rtge3iwyv] {
    color: var(--c-text);
    font-weight: var(--fw-semibold);
}

/* Невоспроизводимая сборка — цветом и в углу тоже: полоса тревоги может уехать
   при прокрутке, а этот знак стоит на месте. */
.stand-stamp--dirty[b-3rtge3iwyv],
.stand-stamp--unknown[b-3rtge3iwyv] {
    border-color: var(--c-danger);
    background: var(--c-danger-soft);
    color: var(--c-danger-on-soft);
}

.stand-stamp--dirty .stand-stamp__id[b-3rtge3iwyv],
.stand-stamp--unknown .stand-stamp__id[b-3rtge3iwyv] {
    color: var(--c-danger-on-soft);
}

.stand-stamp-alarm[b-3rtge3iwyv] {
    position: sticky;
    top: 0;
    z-index: 1001;
    display: flex;
    flex-wrap: wrap;
    gap: var(--s-2);
    align-items: baseline;
    padding: var(--s-2) var(--s-3);
    background: var(--c-danger-solid);
    color: var(--c-on-danger);
    font-size: var(--fs-sm);
    line-height: var(--lh-normal);
}

.stand-stamp-alarm__where[b-3rtge3iwyv] {
    font-family: var(--font-mono);
    opacity: 0.85;
}

@media print {
    .stand-stamp[b-3rtge3iwyv] {
        display: none;
    }
}
/* /Components/Pages/VerifyCredential.razor.rz.scp.css */
/* Состояние подписи. Цвет здесь — не украшение: проверяющий смотрит на эту строку
   первой и решает по ней, читать ли остальное. Пока браузер не ответил, состояние
   называется «неизвестно», а не «в порядке»: зелёное до проверки читалось бы как
   подтверждение того, чего ещё никто не проверял. */

.vc-status[b-tekrdstab3] {
    display: inline-block;
    padding: 0.2rem 0.6rem;
    border-radius: 0.4rem;
    border: 1px solid var(--color-border, #ccc);
}

.vc-status[data-state="pending"][b-tekrdstab3] {
    background: var(--color-surface-muted, #f2f2f2);
}

.vc-status[data-state="verified"][b-tekrdstab3] {
    background: var(--color-success-surface, #e6f4ea);
    border-color: var(--color-success, #1e7e34);
}

.vc-status[data-state="failed"][b-tekrdstab3] {
    background: var(--color-danger-surface, #fdecea);
    border-color: var(--color-danger, #b3261e);
}

.vc-status[data-state="unknown"][b-tekrdstab3] {
    background: var(--color-warning-surface, #fff4e5);
    border-color: var(--color-warning, #b26a00);
}

.pre-wrap[b-tekrdstab3] {
    white-space: pre-wrap;
    word-break: break-word;
}
