/* _content/Zeus.Admin/Components/Account/Shared/AccountLayout.razor.rz.scp.css */
/* AccountLayout.razor.css is COMPILED from this file. Edit here, never there:
   a hand-edit to the .css is silently reverted the next time anything compiles
   the SCSS, which is how the brand green below once turned back into Bootstrap
   blue. Keep this comment ASCII-only - a non-ASCII byte makes sass emit an
   @charset rule, which is invalid once the scoped css files are concatenated
   into Zeus.Admin.styles.css. */
.account-layout[b-g4ukdx3dvb] {
  height: 100vh;
  width: 100vw;
  background-color: #1F5533;
  display: flex;
  align-items: center;
  justify-content: center;
}
.account-layout__content[b-g4ukdx3dvb] {
  display: block;
  background-color: #fff;
  padding: 2.5rem;
  width: 100%;
  max-width: 450px;
  border-radius: 12px;
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);
}
@media (max-width: 640.98px) {
  .account-layout[b-g4ukdx3dvb] {
    height: 100dvh;
    background-color: #fff;
    align-items: flex-start;
    overflow-y: auto;
  }
  .account-layout__content[b-g4ukdx3dvb] {
    max-width: none;
    min-height: 100%;
    padding: 1.5rem;
    border-radius: 0;
    box-shadow: none;
    display: flex;
    flex-direction: column;
    justify-content: center;
  }
}

/*# sourceMappingURL=AccountLayout.razor.css.map */
/* _content/Zeus.Admin/Components/FileUploadComponent.razor.rz.scp.css */
.file-upload[b-w8fuf8j75t] {
    display: flex;
    max-width: 100%;
    border: solid var(--mud-palette-lines-inputs) 1px;
    border-radius: var(--mud-default-borderradius);
    padding: 0.7rem;
    gap: 1.4rem;
    flex-grow: 1;
    justify-content: space-between;
    position: relative;
}

.file-upload__texts[b-w8fuf8j75t] {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    max-width: 50%;
    margin-bottom: 0.5rem;
}

.file-upload__buttons[b-w8fuf8j75t] {
    display: flex;
    gap: 1rem;
    align-items: center;
}

.file-upload__name[b-w8fuf8j75t] {
    font-size: 1rem;
    text-wrap: wrap;
    max-width: 100%;
}

.file-upload__error[b-w8fuf8j75t] {
    font-size: 0.8rem;
    color: var(--mud-palette-error);
    position: absolute;
    bottom: 0.7rem;
    left: 0.7rem;
    margin: 0;
}

.file-upload__size[b-w8fuf8j75t] {
    font-size: 0.8rem;
    position: absolute;
    bottom: 0.7rem;
    left: 0.7rem;
    margin: 0;
}

/*# sourceMappingURL=FileUploadComponent.razor.css.map */
/* _content/Zeus.Admin/Components/Layout/EnvironmentMarker.razor.rz.scp.css */
.env-marker[b-inffxj3k06] {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    margin: 1rem 1rem 0;
    padding: 0.45rem 0.9rem;
    border-radius: 999px;
    border: 1px solid;
    user-select: none;
}

.env-dot[b-inffxj3k06] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex-shrink: 0;
    animation: env-breathe-b-inffxj3k06 2.4s ease-in-out infinite;
}

.env-label[b-inffxj3k06] {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.env-dev[b-inffxj3k06] {
    background-color: rgba(239, 68, 68, 0.08);
    border-color: rgba(239, 68, 68, 0.25);
    color: #b91c1c;
}

.env-dev .env-dot[b-inffxj3k06] {
    background-color: #ef4444;
    --env-glow: rgba(239, 68, 68, 0.2);
}

.env-staging[b-inffxj3k06] {
    background-color: rgba(245, 158, 11, 0.1);
    border-color: rgba(245, 158, 11, 0.3);
    color: #b45309;
}

.env-staging .env-dot[b-inffxj3k06] {
    background-color: #f59e0b;
    --env-glow: rgba(245, 158, 11, 0.2);
}

.env-prod[b-inffxj3k06] {
    background-color: rgba(34, 197, 94, 0.08);
    border-color: rgba(34, 197, 94, 0.25);
    color: #15803d;
}

.env-prod .env-dot[b-inffxj3k06] {
    background-color: #22c55e;
    --env-glow: rgba(34, 197, 94, 0.2);
}

.env-unknown[b-inffxj3k06] {
    background-color: #f1f5f9;
    border-color: #e2e8f0;
    color: #64748b;
}

.env-unknown .env-dot[b-inffxj3k06] {
    background-color: #94a3b8;
    --env-glow: rgba(148, 163, 184, 0.2);
}

@keyframes env-breathe-b-inffxj3k06 {
    0%, 100% {
        box-shadow: 0 0 0 0 var(--env-glow);
    }
    50% {
        box-shadow: 0 0 0 4px var(--env-glow);
    }
}

@media (prefers-reduced-motion: reduce) {
    .env-dot[b-inffxj3k06] {
        animation: none;
        box-shadow: 0 0 0 3px var(--env-glow);
    }
}
/* _content/Zeus.Admin/Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-h2nt0t521i] {
    position: relative;
    display: flex;
    flex-direction: column;
}

main[b-h2nt0t521i] {
    flex: 1;
    /* A flex item defaults to min-width:auto and grows to fit its widest table,
       overflowing the viewport; capping it lets .mud-table-container scroll instead. */
    min-width: 0;
}

.sidebar[b-h2nt0t521i] {
    background-color: #ffffff;
    border-right: 1px solid #e2e8f0;
}

.top-row[b-h2nt0t521i] {
    background-color: #ffffff;
    border-bottom: 1px solid #e2e8f0;
    justify-content: flex-end;
    height: 3.5rem;
    display: flex;
    align-items: center;
}

.top-row[b-h2nt0t521i]  a, .top-row[b-h2nt0t521i]  .btn-link {
    white-space: nowrap;
    margin-left: 1.5rem;
    text-decoration: none;
}

.top-row[b-h2nt0t521i]  a:hover, .top-row[b-h2nt0t521i]  .btn-link:hover {
    text-decoration: underline;
}

.top-row[b-h2nt0t521i]  a:first-child {
    overflow: hidden;
    text-overflow: ellipsis;
}

@media (max-width: 640.98px) {
    .top-row[b-h2nt0t521i] {
        justify-content: space-between;
    }

    .top-row[b-h2nt0t521i]  a, .top-row[b-h2nt0t521i]  .btn-link {
        margin-left: 0;
    }
}

@media (min-width: 641px) {
    .page[b-h2nt0t521i] {
        flex-direction: row;
    }

    .sidebar[b-h2nt0t521i] {
        width: 250px;
        height: 100vh;
        position: sticky;
        top: 0;
        display: flex;
        flex-direction: column;
    }

    .top-row[b-h2nt0t521i] {
        position: sticky;
        top: 0;
        z-index: 1;
    }

    .top-row.auth[b-h2nt0t521i]  a:first-child {
        flex: 1;
        text-align: right;
        width: 0;
    }

    .top-row[b-h2nt0t521i], article[b-h2nt0t521i] {
        padding-left: 2rem !important;
        padding-right: 1.5rem !important;
    }
}

#blazor-error-ui[b-h2nt0t521i] {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

#blazor-error-ui .dismiss[b-h2nt0t521i] {
    cursor: pointer;
    position: absolute;
    right: 0.75rem;
    top: 0.5rem;
}

/* Phones: the sidebar collapses to the top bar; keeping it sticky (and
   positioned — the toggler and the menu overlay anchor to it) means the
   hamburger never scrolls away. */
@media (max-width: 640.98px) {
    .sidebar[b-h2nt0t521i] {
        position: sticky;
        top: 0;
        z-index: 10;
    }
}
/* _content/Zeus.Admin/Components/Layout/NavMenu.razor.rz.scp.css */
.navbar-toggler[b-r3b31xa01j] {
    appearance: none;
    cursor: pointer;
    width: 3.5rem;
    height: 2.5rem;
    color: #1e293b;
    position: absolute;
    top: 0.5rem;
    right: 1rem;
    border: 1px solid #e2e8f0;
    background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2830, 41, 59, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(0, 0, 0, 0.03);
}

.navbar-toggler:checked[b-r3b31xa01j] {
    background-color: #f1f5f9;
}

.top-row[b-r3b31xa01j] {
    height: 3.5rem;
    background-color: rgba(0, 0, 0, 0.03);
}

.navbar-brand[b-r3b31xa01j] {
    font-size: 1.1rem;
}

.bi[b-r3b31xa01j] {
    display: inline-block;
    position: relative;
    width: 1.25rem;
    height: 1.25rem;
    margin-right: 0.75rem;
    top: -1px;
    background-size: cover;
}

.bi-house-door-fill-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
}

.bi-plus-square-fill-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
}

.bi-list-nested-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
}

.bi-lock-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath d='M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2zM5 8h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z'/%3E%3C/svg%3E");
}

.bi-person-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-person' viewBox='0 0 16 16'%3E%3Cpath d='M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4Zm-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10Z'/%3E%3C/svg%3E");
}

.bi-person-badge-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-person-badge' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 2a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1h-3zM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0z'/%3E%3Cpath d='M4.5 0A2.5 2.5 0 0 0 2 2.5V14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2.5A2.5 2.5 0 0 0 11.5 0h-7zM3 2.5A1.5 1.5 0 0 1 4.5 1h7A1.5 1.5 0 0 1 13 2.5v10.795a4.2 4.2 0 0 0-.776-.492C11.392 12.387 10.063 12 8 12s-3.392.387-4.224.803a4.2 4.2 0 0 0-.776.492V2.5z'/%3E%3C/svg%3E");
}

.bi-person-fill-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-person-fill' viewBox='0 0 16 16'%3E%3Cpath d='M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z'/%3E%3C/svg%3E");
}

.bi-arrow-bar-left-nav-menu[b-r3b31xa01j] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2364748b' class='bi bi-arrow-bar-left' viewBox='0 0 16 16'%3E%3Cpath d='M12.5 15a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5ZM10 8a.5.5 0 0 1-.5.5H3.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L3.707 7.5H9.5a.5.5 0 0 1 .5.5Z'/%3E%3C/svg%3E");
}

.nav-item[b-r3b31xa01j] {
    font-size: 0.9rem;
    padding-bottom: 0.5rem;
}

.nav-item:first-of-type[b-r3b31xa01j] {
    padding-top: 1rem;
}

.nav-item:last-of-type[b-r3b31xa01j] {
    padding-bottom: 1rem;
}

.nav-item[b-r3b31xa01j]  .nav-link {
    color: #64748b;
    background: none;
    border: none;
    border-radius: 8px;
    height: 3rem;
    display: flex;
    align-items: center;
    line-height: 3rem;
    width: 100%;
    transition: background-color 0.15s ease, color 0.15s ease;
}

.nav-item[b-r3b31xa01j]  a.active {
    background-color: #f1f5f9;
    color: #1F5533;
    font-weight: 500;
}

.nav-item[b-r3b31xa01j]  .nav-link:hover {
    background-color: #f8f9fa;
    color: #1e293b;
}

.nav-scrollable[b-r3b31xa01j] {
    display: none;
}

.navbar-toggler:checked ~ .nav-scrollable[b-r3b31xa01j] {
    display: flex;
    flex-direction: column;
}

@media (min-width: 641px) {
    .navbar-toggler[b-r3b31xa01j] {
        display: none;
    }

    .nav-scrollable[b-r3b31xa01j] {
        /* Never collapse the sidebar for wide screens. Flex column (was an
           inline style on the div, which silently overrode the phone
           display:none/checked toggle) keeps Logout pinned to the bottom. */
        display: flex;
        flex-direction: column;
        flex: 1;
        min-height: 0;

        /* Allow sidebar to scroll for tall menus */
        overflow-y: auto;
    }
}

/* ── Phone shell ─────────────────────────────────────────────────────────
   Desktop keeps the pill above the menu (.sidebar-marker) and hides the bar.
   Phones swap them: a 3.5rem white bar with brand + pill + hamburger, and the
   menu opens as a full-width overlay panel anchored under the sidebar. */
.navbar-mobile[b-r3b31xa01j] {
    display: none;
}

@media (max-width: 640.98px) {
    .sidebar-marker[b-r3b31xa01j] {
        display: none;
    }

    /* Default-deny: only entries a mobile pass has signed off on survive on a
       phone. The rest are desktop-width data grids that are unusable here, so
       the menu doesn't advertise them. Nav-level only — a deep link still
       renders the page. */
    .nav-item:not(.zx-mobile-ready)[b-r3b31xa01j] {
        display: none;
    }

    .navbar-mobile[b-r3b31xa01j] {
        display: flex;
        align-items: center;
        height: 3.5rem;
        /* Right padding reserves the lane of the absolutely-positioned toggler. */
        padding: 0 4.75rem 0 1rem;
        background-color: #ffffff;
        border-bottom: 1px solid #e2e8f0;
    }

    .navbar-brand[b-r3b31xa01j] {
        font-weight: 600;
        color: #1e293b;
    }

    .navbar-mobile[b-r3b31xa01j]  .env-marker {
        margin: 0 0 0 auto;
        padding: 0.3rem 0.7rem;
    }

    .nav-scrollable[b-r3b31xa01j] {
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        background-color: #ffffff;
        border-bottom: 1px solid #e2e8f0;
        box-shadow: 0 12px 24px rgba(15, 23, 42, 0.12);
        max-height: calc(100dvh - 3.5rem);
        overflow-y: auto;
        z-index: 20;
    }
}
/* _content/Zeus.Admin/Components/Pages/HostDetail.razor.rz.scp.css */
/* Phone tier of the host card. The record and list tables restructure through
   the global .zx-def-table / .zx-card-table utilities; what's left here is the
   identity header, which is specific to this page. */

@media (max-width: 640.98px) {
    /* Back arrow, avatar, name and two labelled buttons don't fit on 375px.
       Letting the row wrap puts the actions on their own line, where they
       split the width instead of squeezing the name to nothing. */
    .host-header[b-7o1lzaq0h1] {
        flex-wrap: wrap;
    }

    .host-header__identity[b-7o1lzaq0h1] {
        /* Without this the name's intrinsic width keeps the flex item from
           ever shrinking, so the overflow moves instead of resolving. */
        min-width: 0;
        flex: 1;
    }

    .host-header__identity[b-7o1lzaq0h1]  .host-header__name {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .host-header__actions[b-7o1lzaq0h1] {
        flex: 1 0 100%;
        margin-top: 0.75rem;
    }

    /* Each button is wrapped by its MudTooltip, so the flex children here are
       the tooltip roots, not the buttons. Stretch both. */
    .host-header__actions[b-7o1lzaq0h1]  > * {
        flex: 1;
    }

    .host-header__actions[b-7o1lzaq0h1]  .mud-button-root {
        width: 100%;
    }
}
/* _content/Zeus.Admin/Components/Pages/Support/Chats.razor.rz.scp.css */
/* Phone tier of the support queue. The desktop table is hidden below 641px
   (.zx-hide-phone) and these touch rows take over (.zx-phone-only) — see the
   comment in Chats.razor. Everything here only ever renders on a phone, so no
   media query is needed: the visibility utilities are the gate. */

.chat-queue__bar[b-yi7xyyzy20] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.75rem 1rem;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.chat-queue__row[b-yi7xyyzy20] {
    /* A button, not a div: keyboard focus and Enter/Space come for free, and
       screen readers announce it as the actionable thing it is. */
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    /* 3.5rem clears the 44px minimum touch target with room for two text lines. */
    min-height: 3.5rem;
    padding: 0.625rem 1rem;
    border: 0;
    border-bottom: 1px solid var(--mud-palette-lines-default);
    background: none;
    font: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.chat-queue__row:active[b-yi7xyyzy20] {
    background-color: var(--mud-palette-action-default-hover);
}

.chat-queue__text[b-yi7xyyzy20] {
    display: flex;
    flex-direction: column;
    /* Lets the name ellipsize instead of pushing the chevron off-screen. */
    min-width: 0;
    flex: 1;
}

.chat-queue__name[b-yi7xyyzy20] {
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.chat-queue__meta[b-yi7xyyzy20] {
    font-size: 0.75rem;
    color: var(--mud-palette-text-secondary);
}
/* _content/Zeus.Admin/Components/Pages/Support/Index.razor.rz.scp.css */
.support[b-jjpw5b0eg6] {
  text-align: center;
  height: 100%;
  width: 100%;
  padding: 2rem;
  display: flex;
  flex-direction: column;
  gap: 2rem;
}
.support__container[b-jjpw5b0eg6] {
  width: 100%;
  height: calc(100vh - 2rem);
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
}
.support__pending[b-jjpw5b0eg6] {
  position: relative;
  height: 300px;
  align-items: center;
}
.support__spinner[b-jjpw5b0eg6] {
  position: absolute;
  left: 50%;
  top: calc(50% + 1rem);
  transform: translate(-50%, -50%);
}
.support__force[b-jjpw5b0eg6] {
  position: absolute;
  left: 1rem;
  bottom: 1rem;
}

/*# sourceMappingURL=Support.razor.css.map */
/* _content/Zeus.Admin/Components/Pages/VerificationReview.razor.rz.scp.css */
/* Desktop review console: header, stage+rail grid and decision bar sized to
   the viewport the same way .support-console is (see app.css) — the stage
   needs a definite height to fill (DocumentStage's own container-type:size
   sizing depends on it), and dvh gets that without depending on the .page /
   main / article ancestor chain having one. */
.review-console[b-ajmglehing] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    height: calc(100dvh - var(--zeus-review-reserve, 2.75rem));
    min-height: 0;
    /* Not a semantic control — a keyboard scope for ← → Esc ?. Its own box
       never shows a ring; every real control inside it carries its own. */
    outline: none;
}

.review-console__state[b-ajmglehing] {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    text-align: center;
    padding: 2rem;
}

.review-console__header[b-ajmglehing] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex: 0 0 auto;
    padding-bottom: 0.75rem;
    border-bottom: 1px solid var(--mud-palette-divider);
}

.review-console__identity[b-ajmglehing] {
    display: flex;
    flex-direction: column;
    min-width: 0;
    flex: 1 1 auto;
}

.review-console__name[b-ajmglehing] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.review-console__position[b-ajmglehing] {
    font-size: 0.75rem;
    color: var(--mud-palette-text-secondary);
}

.review-console__nav[b-ajmglehing] {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    flex: 0 0 auto;
}

.review-console__body[b-ajmglehing] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 320px;
    grid-template-rows: minmax(0, 1fr);
    gap: 1rem;
    flex: 1 1 auto;
    min-height: 0;
}

.review-console__stage[b-ajmglehing] {
    min-width: 0;
    min-height: 0;
}

.review-console__rail[b-ajmglehing] {
    min-width: 0;
}

/* Stacked document-attested fields (no separate label markup in the ASCII
   mock, but an unlabeled "non fornito" is ambiguous — which field is it? —
   so each value gets a small muted caption above it. */
.review-console__field[b-ajmglehing] {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
    margin-bottom: 0.75rem;
}

.review-console__field:last-child[b-ajmglehing] {
    margin-bottom: 0;
}

.review-console__field-label[b-ajmglehing] {
    font-size: 0.75rem;
    color: var(--mud-palette-text-secondary);
}

.review-console__field-value[b-ajmglehing] {
    overflow-wrap: anywhere;
}

.review-console__decision[b-ajmglehing],
.review-console__outcome[b-ajmglehing] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex: 0 0 auto;
    padding-top: 0.75rem;
    border-top: 1px solid var(--mud-palette-divider);
}

.review-console__decision[b-ajmglehing] {
    justify-content: flex-end;
}

.review-console__outcome[b-ajmglehing] {
    flex-wrap: wrap;
}

.review-console__shortcuts-backdrop[b-ajmglehing] {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: rgba(15, 23, 42, 0.45);
    z-index: 1300;
    padding: 1rem;
}

.review-console__shortcuts[b-ajmglehing] {
    width: 100%;
    max-width: 26rem;
    max-height: 85dvh;
    overflow-y: auto;
    background-color: var(--mud-palette-surface);
    border-radius: 12px;
    padding: 1.25rem;
    box-shadow: 0 12px 32px rgba(15, 23, 42, 0.24);
}

.review-console__shortcuts-list[b-ajmglehing] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.625rem;
}

.review-console__shortcuts-list li[b-ajmglehing] {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    font-size: 0.8125rem;
}

.review-console__shortcuts-list li span[b-ajmglehing] {
    color: var(--mud-palette-text-secondary);
    margin-left: 0.25rem;
}

.review-console__shortcuts-list kbd[b-ajmglehing] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.5rem;
    height: 1.5rem;
    padding: 0 0.375rem;
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
    font-size: 0.75rem;
    color: var(--mud-palette-text-primary);
    background-color: var(--mud-palette-background-gray);
    border: 1px solid var(--mud-palette-divider);
    border-radius: 6px;
}

/* Phone: a stack, not a squeezed desktop. The console gives up its fixed
   viewport-height box and becomes a normal scrolling page — the stage keeps
   a tall-but-fixed dvh slice (still a definite height to fill), the dossier
   falls below the fold, and the decision bar sticks to the bottom of the
   viewport as the operator scrolls past it. */
@media (max-width: 640.98px) {
    .review-console[b-ajmglehing] {
        height: auto;
        gap: 1rem;
    }

    .review-console__body[b-ajmglehing] {
        display: flex;
        flex-direction: column;
        gap: 1rem;
    }

    /* The stage sizes itself on a phone (see DocumentStage.razor.css): pinning
       a height here shrinks the compare panes below their minimum and the
       overflow paints over the control bar and the dossier. */
    .review-console__stage[b-ajmglehing] {
        height: auto;
        flex: 0 0 auto;
        min-height: 0;
    }

    .review-console__rail[b-ajmglehing] {
        width: 100%;
    }

    .review-console__decision[b-ajmglehing],
    .review-console__outcome[b-ajmglehing] {
        position: sticky;
        bottom: 0;
        /* Literal fallback: this bar floats over the document, so it must never
           resolve to transparent if the theme variable is missing. */
        background-color: var(--mud-palette-surface, #ffffff);
        padding-bottom: max(0.5rem, env(safe-area-inset-bottom));
        z-index: 5;
    }
}
/* _content/Zeus.Admin/Components/Pages/Verifications.razor.rz.scp.css */
/* Desktop toolbar. MudToolBar lays its content out as one non-wrapping row, so
   the title and search get an explicit flex row of their own rather than being
   left to squeeze each other. The phone never sees this: the whole grid is
   hidden below 641px and .verif-queue takes over. */

.verif-toolbar[b-fxabbyxhhl] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    width: 100%;
    min-width: 0;
}

.verif-toolbar__title[b-fxabbyxhhl] {
    white-space: nowrap;
    flex: 0 0 auto;
}

/* Desktop: the search sits beside the title and grows to a comfortable cap;
   the refresh button takes the remaining slack so it stays pinned to the far
   end, where it was before this toolbar grew a search field. */
.verif-toolbar__search[b-fxabbyxhhl] {
    flex: 1 1 auto;
    min-width: 0;
    max-width: 24rem;
}

.verif-toolbar__refresh[b-fxabbyxhhl] {
    flex: 0 0 auto;
    order: 3;
    margin-left: auto;
}

/* ── Phone tier ──────────────────────────────────────────────────────────
   Touch rows that replace the table below 641px, matching the support queue
   (.chat-queue in Chats.razor.css). Everything here only ever renders on a
   phone, so no media query is needed: .zx-phone-only is the gate. */

.verif-queue__bar[b-fxabbyxhhl] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.75rem 1rem;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.verif-queue__search[b-fxabbyxhhl] {
    padding: 0.5rem 1rem 0.75rem;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.verif-queue__row[b-fxabbyxhhl] {
    /* A button, not a div: keyboard focus and Enter/Space come for free, and
       screen readers announce it as the actionable thing it is. */
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    /* 3.5rem clears the 44px minimum touch target with room for two text lines. */
    min-height: 3.5rem;
    padding: 0.625rem 1rem;
    border: 0;
    border-bottom: 1px solid var(--mud-palette-lines-default);
    background: none;
    font: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.verif-queue__row:active[b-fxabbyxhhl] {
    background-color: var(--mud-palette-action-default-hover);
}

.verif-queue__row:focus-visible[b-fxabbyxhhl] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: -2px;
}

.verif-queue__text[b-fxabbyxhhl] {
    display: flex;
    flex-direction: column;
    /* Lets the name ellipsize instead of pushing the chevron off-screen. */
    min-width: 0;
    flex: 1;
}

.verif-queue__name[b-fxabbyxhhl] {
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.verif-queue__meta[b-fxabbyxhhl] {
    font-size: 0.75rem;
    color: var(--mud-palette-text-secondary);
}
/* _content/Zeus.Admin/Components/Verification/DocumentStage.razor.rz.scp.css */
/* Verification review console — image stage.
   The dark stage is a deliberate departure from the light backoffice: see
   docs/superpowers/specs/2026-07-28-verification-console-design.md
   ("The stage" / "Why pan is native scroll"). Panning is native scroll on
   an overflow:auto container — there is no drag handler, because this is
   Blazor Server and a per-pointer-move round trip would be sluggish. */

.vs-console[b-jaw9on2it7] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    width: 100%;
    /* Fills whatever box the page gives it, so the stage grows with the
       viewport instead of sitting at a fixed slice of it. Falls back to the
       stage's own min-height when an ancestor has no definite height. */
    height: 100%;
    min-height: 0;
}

/* ── Evidence strip ────────────────────────────────────────────────────── */

.vs-evidence[b-jaw9on2it7] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.vs-evidence__item[b-jaw9on2it7] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.375rem 0.75rem 0.375rem 0.375rem;
    border: 1px solid #e2e8f0;
    border-radius: 12px;
    background-color: #ffffff;
    font: inherit;
    font-size: 0.8125rem;
    color: #1e293b;
    cursor: pointer;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}

.vs-evidence__item:hover:not(:disabled)[b-jaw9on2it7] {
    background-color: #f8f9fa;
}

.vs-evidence__item--selected[b-jaw9on2it7] {
    border-color: #1F5533;
    background-color: #f1f5f9;
    font-weight: 500;
}

.vs-evidence__item--missing[b-jaw9on2it7] {
    border-style: dashed;
    color: #64748b;
}

.vs-evidence__item:disabled[b-jaw9on2it7] {
    cursor: not-allowed;
    opacity: 0.85;
}

.vs-evidence__thumb[b-jaw9on2it7] {
    width: 2rem;
    height: 2rem;
    border-radius: 8px;
    object-fit: cover;
    background-color: #0f1512;
    flex-shrink: 0;
}

.vs-evidence__thumb--missing[b-jaw9on2it7] {
    display: flex;
    align-items: center;
    justify-content: center;
    color: #94a3b8;
    border: 1px dashed #cbd5e1;
    background-color: transparent;
}

.vs-evidence__label[b-jaw9on2it7] {
    display: flex;
    flex-direction: column;
    line-height: 1.2;
}

.vs-evidence__missing-tag[b-jaw9on2it7] {
    font-size: 0.6875rem;
    color: #94a3b8;
    font-weight: 400;
}

.vs-compare-toggle[b-jaw9on2it7] {
    margin-left: auto;
}

/* ── Stage ─────────────────────────────────────────────────────────────── */

.vs-stage[b-jaw9on2it7] {
    /* Near-black shifted toward the brand green: on a light backoffice
       page the chrome competes with the document for "brightest object"
       and the eye loses the ID; on a dark stage the document is the
       light source. */
    --zv-stage: #0f1512;
    container-type: size;
    position: relative;
    display: flex;
    overflow: auto;
    background-color: var(--zv-stage);
    border-radius: 12px;
    /* Takes the height the console has left after the strip and control bar,
       rather than a fixed dvh slice — on a tall desktop that is most of the
       column, which is the point of a full-page console. The flex base stays
       definite, so container-type:size still resolves cqh. */
    flex: 1 1 auto;
    min-height: 320px;
    outline: none;
}

.vs-compare[b-jaw9on2it7] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: minmax(0, 1fr);
    gap: 0.5rem;
    flex: 1 1 auto;
    min-height: 0;
}

/* Grid items, not flex items: the row track sizes them, so the flex shorthand
   above does nothing here and min-height must be released explicitly. */
.vs-compare > .vs-stage[b-jaw9on2it7] {
    min-height: 0;
}

/* In compare mode the control bar drives one pane at a time; this ring is the
   other half of that statement (see .vs-controlbar__target). */
.vs-stage--active[b-jaw9on2it7] {
    box-shadow: 0 0 0 2px #4a8a65;
}

/* The frame is a plain (non-container) box, so cqw/cqh inside it — and
   inside the image — always resolve against the .vs-stage container,
   never against the frame's own (possibly zoomed/rotated) size.
   margin:auto is what lets a flex item center itself while remaining
   fully scrollable once it overflows the container; justify/align-
   content:center would clip the overflowing part instead. */
.vs-frame[b-jaw9on2it7] {
    position: relative;
    margin: auto;
    width: calc(100cqw * var(--zv-zoom, 1));
    height: calc(100cqh * var(--zv-zoom, 1));
    flex-shrink: 0;
    transition: width 0.2s ease, height 0.2s ease;
}

.vs-image[b-jaw9on2it7] {
    position: absolute;
    top: 50%;
    left: 50%;
    width: calc(100cqw * var(--zv-zoom, 1));
    height: calc(100cqh * var(--zv-zoom, 1));
    object-fit: contain;
    transform-origin: center;
    transform: translate(-50%, -50%) rotate(var(--zv-rot, 0deg));
    transition: transform 0.2s ease, width 0.2s ease, height 0.2s ease;
}

/* The IMAGE box swaps at 90°/270°, not the frame. Rotating swaps an element's
   visual extent, so a box of H×W renders as W×H once turned — which is exactly
   the frame it has to fill. Swapping the frame instead (the intuitive reading)
   overflows the stage by the difference between the two axes and clips the
   document at fit, which is the one thing fit must never do. */
.vs-frame[data-rotated="true"] .vs-image[b-jaw9on2it7] {
    width: calc(100cqh * var(--zv-zoom, 1));
    height: calc(100cqw * var(--zv-zoom, 1));
}

.vs-empty[b-jaw9on2it7] {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.5rem;
    color: #94a3b8;
    font-size: 0.8125rem;
    white-space: nowrap;
}

.vs-pane-toggle[b-jaw9on2it7] {
    position: absolute;
    top: 0.5rem;
    left: 0.5rem;
    z-index: 1;
    display: flex;
    gap: 0.25rem;
    padding: 0.25rem;
    border-radius: 8px;
    background-color: rgba(15, 21, 18, 0.65);
}

/* ── Control bar ───────────────────────────────────────────────────────── */

.vs-controlbar[b-jaw9on2it7] {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    flex-wrap: wrap;
    padding: 0.375rem 0.5rem;
    border: 1px solid #e2e8f0;
    border-radius: 12px;
    /* Opaque on purpose: a transparent bar over a document reads as part of
       the image, and the controls stop looking like controls. */
    background-color: #ffffff;
    flex: 0 0 auto;
}

.vs-controlbar__sep[b-jaw9on2it7] {
    width: 1px;
    height: 1.5rem;
    background-color: #e2e8f0;
    margin: 0 0.25rem;
    flex-shrink: 0;
}

.vs-zoom-readout[b-jaw9on2it7] {
    min-width: 4.5rem;
}

/* Names the pane the controls act on, in compare mode only. */
.vs-controlbar__target[b-jaw9on2it7] {
    padding-left: 0.25rem;
    font-size: 0.6875rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #1F5533;
    white-space: nowrap;
}

/* ── Focus & motion ────────────────────────────────────────────────────── */

.vs-stage:focus-visible[b-jaw9on2it7],
.vs-evidence__item:focus-visible[b-jaw9on2it7] {
    outline: 2px solid #1F5533;
    outline-offset: 2px;
}

.vs-console[b-jaw9on2it7]  .mud-button-root:focus-visible,
.vs-console[b-jaw9on2it7]  .mud-icon-button:focus-visible {
    outline: 2px solid #1F5533;
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    .vs-evidence__item[b-jaw9on2it7],
    .vs-frame[b-jaw9on2it7],
    .vs-image[b-jaw9on2it7] {
        transition: none;
    }
}

/* ── Phone ─────────────────────────────────────────────────────────────── */

@media (max-width: 640.98px) {
    /* The phone console is a scrolling page, not a viewport-fitted box: the
       console sizes to its content and each stage takes a fixed slice of the
       viewport. Fitting two compare panes plus the strip and the control bar
       into one screen only shrinks the flex box below what the panes need,
       and the overflow then paints over the control bar and the dossier. */
    .vs-console[b-jaw9on2it7] {
        height: auto;
    }

    .vs-stage[b-jaw9on2it7] {
        flex: none;
        height: 46dvh;
        min-height: 200px;
    }

    /* Side by side at 375px helps nobody: the two panes stack, each keeps a
       readable slice, and the pair scrolls as part of the page. */
    .vs-compare[b-jaw9on2it7] {
        display: flex;
        flex-direction: column;
        flex: none;
    }

    .vs-compare > .vs-stage[b-jaw9on2it7] {
        height: 38dvh;
    }

    .vs-controlbar[b-jaw9on2it7] {
        justify-content: space-between;
    }

    .vs-evidence__label[b-jaw9on2it7] {
        display: none;
    }

    .vs-evidence__missing-tag[b-jaw9on2it7] {
        display: none;
    }

    .vs-evidence__item[b-jaw9on2it7] {
        padding: 0.375rem;
    }
}
