/* /Components/AuthLoadingOverlay.razor.rz.scp.css */
/* Matches the initial WASM loading screen position exactly. */
.auth-loading-overlay[b-tkjrypaa94] {
    position: fixed;
    inset: 0;
    background: var(--mud-palette-background, #fff);
    z-index: 9999;
}

.auth-loading-overlay[b-tkjrypaa94]  .auth-loading-message {
    font-size: 1rem;
    font-weight: bold;
}
/* /Components/DashboardCard.razor.rz.scp.css */
.dashboard-host[b-xrsls5bimu] {
    display: block;
    height: 100%;
}

.dashboard-link[b-xrsls5bimu] {
    color: inherit;
    text-decoration: none;
}

/* Flat border replaces the elevation shadow. */
.dashboard-host[b-xrsls5bimu]  .dashboard-card {
    border: 1px solid var(--mud-palette-divider);
    border-radius: 10px;
    overflow: hidden;
    height: 100%;   /* fill the grid item so cards in a row share the tallest height */
}

.dashboard-host[b-xrsls5bimu]  .dashboard-card-active {
    transition: box-shadow 0.18s ease, transform 0.18s ease;
    cursor: default;
}

.dashboard-host[b-xrsls5bimu]  .dashboard-card-active:hover {
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.10) !important;
    transform: translateY(-2px);
}

.dashboard-link[b-xrsls5bimu]  .dashboard-card {
    cursor: pointer;
}

.dashboard-card-header[b-xrsls5bimu] {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 1rem;
}

/* Holds the title and description. Sits below the page title in the type scale so the
   heading order reads top-down; min-width lets long text wrap instead of stretching the row. */
.dashboard-card-heading[b-xrsls5bimu] {
    flex: 1 1 auto;
    min-width: 0;
}

.dashboard-card-heading[b-xrsls5bimu]  .dashboard-card-title {
    font-size: 0.9375rem;
    font-weight: 600;
    line-height: 1.3;
}

.dashboard-card-heading[b-xrsls5bimu]  .dashboard-card-desc {
    color: var(--mud-palette-text-secondary);
    font-size: 0.8125rem;
    line-height: 1.35;
    margin-top: 0.1rem;
}

/* 40 × 40 rounded icon tile — neutral slate tint */
.dashboard-icon-tile[b-xrsls5bimu] {
    width: 40px;
    height: 40px;
    min-width: 40px;
    border-radius: 8px;
    background: rgba(100, 116, 139, 0.10);
    color: var(--mud-palette-primary);
    display: flex;
    align-items: center;
    justify-content: center;
}

/* A card with an accent trades the neutral slate tint for the accent color so cards read as
   distinct destinations. */
.dashboard-area-tile[b-xrsls5bimu] {
    width: 48px;
    height: 48px;
    min-width: 48px;
    border-radius: 10px;
    background: color-mix(in srgb, var(--area-accent, var(--mud-palette-primary)) 12%, transparent);
    color: var(--area-accent, var(--mud-palette-primary));
}

.dashboard-area-tile[b-xrsls5bimu]  .mud-icon-root {
    font-size: 1.625rem;
}

/* Echoes the drawer's drill-in chevron so both affordances read the same. */
.dashboard-card-header[b-xrsls5bimu]  .dashboard-area-chevron {
    flex: 0 0 auto;
    color: var(--mud-palette-text-secondary);
    opacity: 0.65;
    transition: color 0.18s ease, opacity 0.18s ease;
}

/* Thin rule separating the header from the content below it. */
.dashboard-card-rule[b-xrsls5bimu] {
    height: 1px;
    background: var(--mud-palette-divider);
}

.dashboard-host[b-xrsls5bimu]  .dashboard-actions {
    padding: 0.5rem;
}

.dashboard-host[b-xrsls5bimu]  .dashboard-action {
    justify-content: flex-start !important;
}

.dashboard-host[b-xrsls5bimu]  .dashboard-area-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    padding: 0.875rem 1rem;
}

.dashboard-host[b-xrsls5bimu]  .dashboard-area-chip {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.25rem 0.625rem;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 999px;
    font-size: 0.75rem;
    line-height: 1.5;
    color: var(--mud-palette-text-secondary);
}

.dashboard-host[b-xrsls5bimu]  .dashboard-area-chip .mud-icon-root {
    font-size: 1rem;
}

/* Hovering a linked card leans its edge and chevron toward the accent — the lift alone
   doesn't say which destination is about to open. */
.dashboard-link:hover[b-xrsls5bimu]  .dashboard-card {
    border-color: color-mix(in srgb, var(--area-accent, var(--mud-palette-primary)) 45%, var(--mud-palette-divider));
}

.dashboard-link:hover[b-xrsls5bimu]  .dashboard-area-chevron {
    color: var(--area-accent, var(--mud-palette-primary));
    opacity: 1;
}
/* /Components/DashboardGrid.razor.rz.scp.css */
/* Caps the card grids on wide monitors — uncapped, a two-up row stretches each card
   past 1000px. Left-aligned with the page title rather than centered. */
.dashboard-launcher[b-5nygps53ug] {
    max-width: 1200px;
}
/* /Components/DashboardHeader.razor.rz.scp.css */
/* Every dashboard covers exactly one area — or, at the root, the list of areas — so the
   page title carries the heading and nothing sits between it and the cards. */
.dashboard-header[b-24cwk5zcr9] {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-bottom: 1.75rem;
}

/* Both margins are pinned to zero and the gap owned by the header, because MudBlazor's
   typography gives headings and paragraphs margins of their own that would stack on top of it. */
.dashboard-header[b-24cwk5zcr9]  .dashboard-page-title {
    margin: 0;
    font-size: 1.75rem;
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1.2;
}

.dashboard-header[b-24cwk5zcr9]  .dashboard-page-subtitle {
    margin: 0;
    max-width: 60ch;   /* keeps the line from running the full width of a wide window */
    color: var(--mud-palette-text-secondary);
    line-height: 1.45;
}
/* /Components/JsonEditorField.razor.rz.scp.css */
/* Anchors the floating state tags. */
.json-editor-frame[b-cq3fupfpww] {
    position: relative;
}

/* Corner pills naming editor state. They float over the canvas instead of occupying a row,
   so they never change the editor's height. The inset keeps them clear of Monaco's scrollbar. */
.json-editor-readonly-tag[b-cq3fupfpww],
.json-editor-error-tag[b-cq3fupfpww] {
    position: absolute;
    top: 4px;
    right: 16px;
    z-index: 10;
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.125rem 0.375rem;
    border-radius: 4px;
    font-size: 0.6875rem;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

/* Mouse-transparent so the text beneath stays selectable. */
.json-editor-readonly-tag[b-cq3fupfpww] {
    pointer-events: none;
    background-color: var(--mud-palette-background-grey);
    color: var(--mud-palette-text-secondary);
}

/* Hoverable, unlike the read-only tag: its title carries the parser's full message. */
.json-editor-error-tag[b-cq3fupfpww] {
    cursor: help;
    background-color: var(--mud-palette-error);
    color: var(--mud-palette-error-text);
}

.json-editor-readonly-tag[b-cq3fupfpww]  .mud-icon-root,
.json-editor-error-tag[b-cq3fupfpww]  .mud-icon-root {
    font-size: 0.875rem;
}

/* Mutes the canvas the way disabled inputs are muted. Targets Monaco's rendered DOM
   because its themes are global — every editor on the page shares one — so a read-only
   instance cannot differ by theme alone. The translucent disabled-background token layers
   over the theme's own canvas, so it reads correctly in both light and dark mode; it is
   set only on the two child layers (code area and gutter), not the root, because stacking
   a translucent color twice would double its strength. */
.json-editor-readonly[b-cq3fupfpww]  .monaco-editor .monaco-editor-background,
.json-editor-readonly[b-cq3fupfpww]  .monaco-editor .margin {
    background-color: var(--mud-palette-action-disabled-background) !important;
}

/* Monaco outlines the editor root in focus-border blue whenever it has focus. On an
   editable editor that is a meaningful input affordance; on a read-only viewer it reads
   as a broken highlight, so it is suppressed — focus still works for select-and-copy. */
.json-editor-readonly[b-cq3fupfpww]  .monaco-editor {
    outline: none !important;
}
/* /Layout/NavBreadcrumb.razor.rz.scp.css */
/* Names the open area on pages inside it. The root and the area dashboards carry the name as
   their page title instead, so the trail is not rendered there. */
.page-breadcrumb[b-1saov88oh6] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 1.25rem;
    font-size: 0.8125rem;
}

.page-breadcrumb-link[b-1saov88oh6] {
    color: var(--mud-palette-text-secondary);
    text-decoration: none;
}

.page-breadcrumb-link:hover[b-1saov88oh6] {
    color: var(--mud-palette-primary);
    text-decoration: underline;
}

.page-breadcrumb-separator[b-1saov88oh6] {
    color: var(--mud-palette-text-disabled);
}

.page-breadcrumb-current[b-1saov88oh6] {
    color: var(--mud-palette-text-primary);
    font-weight: 500;
}
