/* /Components/Layout/HeaderMenu.razor.rz.scp.css */
/* Scoped styles for HeaderMenu.razor. */
/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* Scoped styles for MainLayout.razor */
/* /Components/Layout/NavMenu.razor.rz.scp.css */
/* Scoped styles for NavMenu.razor */
.nav-section-title[b-972732cjw3] {
    color: var(--mud-palette-text-secondary);
    opacity: 0.85;
}

/* Brand logo placed in the drawer in lieu of the first section title. */
.nav-brand-logo[b-972732cjw3] {
    display: block;
    height: 48px;
    width: auto;
    max-width: 100%;
    object-fit: contain;
}
/* /Components/Layout/UserInfoCard.razor.rz.scp.css */
/* Scoped styles for UserInfoCard.razor */
.user-info-card[b-nxeiqrn96c] {
    border-top: 1px solid var(--mud-palette-divider);
}
/* /Components/Localization/LanguageSelector.razor.rz.scp.css */
/* Scoped styles for LanguageSelector.razor */
/* /Components/Pages/Account/Login.razor.rz.scp.css */
/* Scoped styles for Login.razor */
.login-shell[b-46nhwfl26l] {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--mud-palette-background);
}

.login-card[b-46nhwfl26l] {
    width: 420px;
    border-radius: 16px;
}

.form-label[b-46nhwfl26l] {
    display: block;
    font-size: 0.85rem;
    margin-bottom: 4px;
    color: var(--mud-palette-text-secondary);
}

.form-input[b-46nhwfl26l] {
    width: 100%;
    padding: 10px;
    border: 1px solid var(--mud-palette-lines-inputs);
    border-radius: 6px;
    background: var(--mud-palette-surface);
    color: var(--mud-palette-text-primary);
}

/* Brand logo displayed on the login card (no accompanying text). */
.brand-logo[b-46nhwfl26l] {
    display: block;
    height: 72px;
    width: auto;
    max-width: 100%;
    object-fit: contain;
}
/* /Components/Pages/Logs/ProxyLogs.razor.rz.scp.css */
/* Scoped styles for ApiLogs.razor */

/* Table wrapper fills remaining viewport height */
[b-hl4nibxv89] .logs-table-wrapper {
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

/* Prompt column */
.prompt-text[b-hl4nibxv89] {
    max-width: 300px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    display: inline-block;
    vertical-align: middle;
}

[b-hl4nibxv89] .prompt-eye-btn {
    min-width: 28px;
    width: 28px;
    height: 28px;
    padding: 2px;
    flex-shrink: 0;
}

/* Full prompt dialog textarea */
[b-hl4nibxv89] .full-prompt-field textarea {
    font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;
    font-size: 0.85rem;
    line-height: 1.5;
    white-space: pre-wrap;
}

/* Key column: Name + masked suffix */
.proxy-logs__key-cell[b-hl4nibxv89] {
    display: inline-flex;
    align-items: center;
    gap: 0.15rem;
    max-width: 100%;
    overflow: hidden;
}

.proxy-logs__key-name[b-hl4nibxv89] {
    max-width: 7rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-weight: 500;
}

.proxy-logs__key-sep[b-hl4nibxv89] {
    color: rgba(0, 0, 0, 0.45);
    font-size: 0.85rem;
}

.proxy-logs__key-prefix[b-hl4nibxv89] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.78rem;
    padding: 1px 5px;
    background: rgba(0, 0, 0, 0.04);
    border-radius: 3px;
    color: rgba(0, 0, 0, 0.65);
    white-space: nowrap;
}
/* /Components/Pages/Models/ModelImportDialog.razor.rz.scp.css */
/* Ids are compared character by character when scanning the preview, so render
   them monospaced — proportional fonts hide the exact difference this dialog
   exists to surface (l vs 1, O vs 0, casing drift). */
.import-model-id[b-uq88ht0z5l]  input,
.import-upstream-id[b-uq88ht0z5l] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
}

/* The editable id sits in a dense table row; strip the input's default vertical
   padding so an editable row keeps the same height as a read-only one and the
   table does not visibly jump between Create and Update rows. */
.import-model-id[b-uq88ht0z5l]  .mud-input-root {
    margin-top: 0;
}
/* /Components/Pages/Models/ModelTestAllDialog.razor.rz.scp.css */
/* Ids are scanned character by character when comparing a row against the
   provider's catalogue, so render the upstream id monospaced — proportional
   fonts hide exactly the differences this dialog exists to surface. */
.test-all__upstream[b-9yplnl8hp9] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.8125rem;
}
/* /Components/Pages/Profile/ChangePasswordTab.razor.rz.scp.css */
/* Scoped styles for ChangePasswordTab.razor */
/* /Components/Pages/Profile/Profile.razor.rz.scp.css */
/* Scoped styles for Profile.razor */
/* /Components/Pages/Profile/ProfileInformationTab.razor.rz.scp.css */
/* Scoped styles for ProfileInformationTab.razor */
/* /Components/Pages/Users/ResetQuotaButton.razor.rz.scp.css */
/* Button spacing and busy indicator use the shared MudBlazor utilities. */
/* /Components/Pages/Users/UserDetail.razor.rz.scp.css */
/* Scoped styles for UserDetail page (transaction key cell). */

.user-detail__key-cell[b-k9geargukk] {
    display: inline-flex;
    align-items: center;
    gap: 0.15rem;
    max-width: 100%;
    overflow: hidden;
}

.user-detail__key-name[b-k9geargukk] {
    max-width: 8rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-weight: 500;
}

.user-detail__key-sep[b-k9geargukk] {
    color: rgba(0, 0, 0, 0.45);
    font-size: 0.85rem;
}

.user-detail__key-prefix[b-k9geargukk] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.78rem;
    padding: 1px 5px;
    background: rgba(0, 0, 0, 0.04);
    border-radius: 3px;
    color: rgba(0, 0, 0, 0.65);
    white-space: nowrap;
}

.user-detail__muted[b-k9geargukk] {
    color: rgba(0, 0, 0, 0.45);
}

/* Authentication card — compact single-row layout. Label fixed width so the
   three rows align vertically, status chip next, spacer pushes the action
   buttons to the right. `flex-wrap: nowrap` keeps everything on ONE line;
   on very narrow viewports the row scrolls horizontally rather than
   breaking the chip/buttons onto a second line (matches the design intent
   of "compact one-line auth status"). */
.user-detail__auth-row[b-k9geargukk] {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: nowrap;
    padding: 4px 0;
    min-height: 40px;
}

.user-detail__auth-label[b-k9geargukk] {
    min-width: 140px;
    flex-shrink: 0;
    font-weight: 500;
}

/* Usage card header — title on the left, TZ dropdown anchored to the right
   on desktop. On small viewports the dropdown wraps to its own line so the
   title doesn't get clipped. */
.usage-card__header[b-k9geargukk] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}

.usage-card__title[b-k9geargukk] {
    flex: 0 1 auto;
}

.usage-card__tz-select[b-k9geargukk] {
    max-width: 200px;
    flex: 0 0 auto;
}

/* Nothing else is on screen while the user record loads, so the spinner claims
   the viewport height and sits in the middle of it. Subtracting the app bar and
   the layout's own padding keeps it optically centred rather than pushed low. */
.user-detail__loading[b-k9geargukk] {
    min-height: calc(100vh - 180px);
}
/* /Components/Pages/Users/UserSubscriptionCard.razor.rz.scp.css */
.user-subscription__code[b-q1te7a18wh] {
    font-size: 0.75em;
    opacity: 0.7;
    margin-left: 6px;
}

.user-subscription__window[b-q1te7a18wh] {
    margin-bottom: 12px;
}

.user-subscription__window:last-of-type[b-q1te7a18wh] {
    margin-bottom: 0;
}
