@import '_content/Meshware.Admin.Components.Common/Meshware.Admin.Components.Common.s8egdqr14b.bundle.scp.css';
@import '_content/Meshware.Admin.Components.Hours/Meshware.Admin.Components.Hours.65trv70hyj.bundle.scp.css';
@import '_content/Meshware.Admin.Components.Incidents/Meshware.Admin.Components.Incidents.nhf9mbi3v2.bundle.scp.css';
@import '_content/Meshware.Admin.Components.Station/Meshware.Admin.Components.Station.njn2em6y7v.bundle.scp.css';
@import '_content/Meshware.ShredVault.Module/Meshware.ShredVault.Module.cwrbm5kdet.bundle.scp.css';
@import '_content/Microsoft.AspNetCore.Components.QuickGrid/Microsoft.AspNetCore.Components.QuickGrid.boiwgh0w5b.bundle.scp.css';

/* /Components/Layout/AssistantPaneHost.razor.rz.scp.css */
/* The docked operator-assistant pane (responsive-density ADR, Decision 5). A fixed panel on the right edge, below
   the sticky top row. Its 380px width matches DensityResolver.AssistantPaneWidth, so the width the layout reserves
   (MainLayout.razor.css) equals the width the density policy subtracts. Colors use brand tokens (no raw hex, per
   the StyleTokenConventionTests guardrail); layout properties are plain. */
.mw-assistant-pane[b-4bwkustq1l] {
    position: fixed;
    top: 3.5rem;
    right: 0;
    width: 380px;
    height: calc(100vh - 3.5rem);
    z-index: 2;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    background-color: var(--mw-mist);
    border-left: 1px solid var(--mw-border);
}

.mw-assistant-pane-header[b-4bwkustq1l] {
    display: flex;
    align-items: center;
    padding: 0.5rem 0.5rem 0.5rem 1rem;
    border-bottom: 1px solid var(--mw-border);
}

.mw-assistant-pane-body[b-4bwkustq1l] {
    padding: 1rem;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    /* Fill the remaining pane height below the header so the contributed chat can flex — its messages area scrolls
       and its input stays pinned. min-height: 0 lets the inner scroll container shrink instead of overflowing. */
    flex: 1 1 auto;
    min-height: 0;
}
/* /Components/Layout/LoginLayout.razor.rz.scp.css */
.login-page[b-ja63a12f2e] {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 100vh;
	background: linear-gradient(135deg, var(--mw-forest) 0%, var(--mw-forest-deep) 100%);
}

.login-container[b-ja63a12f2e] {
	width: 100%;
	max-width: 440px;
	padding: 2.5rem;
	background: var(--mw-white);
	border-radius: 0.75rem;
	box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25);
}

.login-brand[b-ja63a12f2e] {
	text-align: center;
	margin-bottom: 2rem;
}

.login-brand[b-ja63a12f2e]  svg {
	height: 3.5rem;
	width: auto;
}

#blazor-error-ui[b-ja63a12f2e] {
	color-scheme: light only;
	background: lightyellow;
	bottom: 0;
	box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
	box-sizing: border-box;
	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-ja63a12f2e] {
		cursor: pointer;
		position: absolute;
		right: 0.75rem;
		top: 0.5rem;
	}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-jq62aogwwu] {
    position: relative;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.page-body[b-jq62aogwwu] {
    display: flex;
    flex-direction: column;
    flex: 1;
}

main[b-jq62aogwwu] {
    flex: 1;
    /* min-width:0 lets the content column actually shrink to fill (viewport - sidebar). Without it, a flex item
       defaults to min-width:auto and won't shrink below its content's intrinsic width, so a wide child (a busy
       tab bar, a big table) pushes `main` past the viewport and the whole PAGE scrolls horizontally. With it,
       an over-wide child is contained here (the tab bar wraps; a data grid scrolls itself) instead. */
    min-width: 0;
    /* Soft green-cast canvas + a whisper-faint argyle-mesh watermark (the brand diamond lattice) so white
       cards float above it instead of vanishing into a white page. The tile is a 44px diamond at ~6% forest. */
    background-color: var(--mw-canvas);
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0NCcgaGVpZ2h0PSc0NCc+PHBhdGggZD0nTTAgMjIgTDIyIDAgTDQ0IDIyIEwyMiA0NCBaJyBmaWxsPSdub25lJyBzdHJva2U9JyMxQjQzMzInIHN0cm9rZS1vcGFjaXR5PScwLjA2JyBzdHJva2Utd2lkdGg9JzEnLz48L3N2Zz4=");
}

.sidebar[b-jq62aogwwu] {
    background-image: linear-gradient(180deg, var(--mw-forest) 0%, var(--mw-charcoal) 90%);
}

.top-row[b-jq62aogwwu] {
    background-color: var(--mw-mist);
    border-bottom: 1px solid var(--mw-border);
    justify-content: space-between;
    height: 3.5rem;
    display: flex;
    align-items: center;
    position: sticky;
    top: 0;
    z-index: 1;
}

.top-row-brand[b-jq62aogwwu] {
    display: flex;
    align-items: center;
}

.top-row-brand[b-jq62aogwwu]  svg {
    height: 3rem;
    width: auto;
}

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

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

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

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

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

    /* Below 960px the nav is collapsed and the hamburger occupies the top-left of the bar (NavMenu.razor.css);
       shift the brand logo right so the two don't overlap. */
    .top-row-brand[b-jq62aogwwu] {
        margin-left: 3.5rem;
    }
}

/* Collapse the fixed sidebar to the hamburger below the MudBlazor `md` breakpoint (960px), not just on phones:
   a 250px sidebar over a busy Admin surface (data grids, tab bars) crowds the content on narrow laptop windows
   and tablets. At/above 960px the sidebar sits fixed alongside the content. This is now STRICTLY width-based —
   the assistant pane no longer collapses the nav on its own; it only does so in the narrower band below, where
   there genuinely isn't room for both. */
@media (min-width: 960px) {
    .page-body[b-jq62aogwwu] {
        flex-direction: row;
    }

    .sidebar[b-jq62aogwwu] {
        width: 250px;
        height: calc(100vh - 3.5rem);
        position: sticky;
        top: 3.5rem;
    }

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

    article[b-jq62aogwwu] {
        padding-left: 2rem !important;
        padding-right: 1.5rem !important;
    }
}

/* The nav is now STRICTLY viewport-width based (responsive-density ADR, Decision 5 — amended 2026-07-16): docking
   the pane never collapses the nav. When the pane docks and space tightens, the INDEX gives way first (it goes
   compact — one stacked column — at effective width < 960, i.e. viewport < 1340 docked), which fits happily in a
   narrow content column; the nav only collapses on a genuinely small screen (< 960px, the block above). So the
   two are staged — index compact at ~1340 docked, nav at 960 — instead of firing together, and persistent
   navigation is preserved on any normal-width screen with the chat open. */

/* The content reflow that reserves the docked pane's width lives in app.css (global), keyed off the pane's
   PRESENCE via `.page:has(.mw-assistant-pane)` — a cross-component `:has()` that scoped CSS can't express, and
   which survives navigation without any JS (the pane element persists with the circuit). */

#blazor-error-ui[b-jq62aogwwu] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    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-jq62aogwwu] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/NavMenu.razor.rz.scp.css */
/* The collapsed-nav hamburger. It lives in the sidebar markup but is absolutely positioned into the TOP-LEFT of
   the sticky top bar (it used to sit top-right, hidden behind the top-row's tenant switcher / assistant button
   with no z-index — the "I don't see a hamburger" bug). z-index:3 lifts it above the top-row (z-index:1) so it's
   clickable, and it gets a dark forest chip so the white glyph is legible on the light top bar. Shown only below
   960px (the >=960 rule below hides it); the brand logo shifts right to make room (MainLayout.razor.css). */
.navbar-toggler[b-iwcdouqlhp] {
    appearance: none;
    cursor: pointer;
    width: 2.75rem;
    height: 2.75rem;   /* 44x44 — meets the WCAG touch-target minimum for the tablet/narrow case */
    color: white;
    position: absolute;
    top: 0.5rem;
    left: 0.75rem;
    z-index: 3;
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 4px;
    background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.5rem var(--mw-forest);
}

.navbar-toggler:checked[b-iwcdouqlhp] {
    background-color: var(--mw-charcoal);
}


/* Nav-item leading glyph: a MudBlazor <MudIcon> (Icons.Material.*). It inherits currentColor, so it
   tracks the link color (sage at rest, white on hover/active) instead of the old fixed-white bootstrap svg. */
.nav-item[b-iwcdouqlhp]  .nav-ico {
    margin-right: 0.75rem;
}

.nav-item[b-iwcdouqlhp] {
    font-size: 0.9rem;
    padding-bottom: 0.15rem;   /* tighter vertical rhythm between items (was 0.5rem — too spread out) */
}

    /* The item directly under a section header gets a little breathing room. (The old
       :first-of-type/:last-of-type rules no longer match - section headers and the
       .nav-account wrapper are also <div>s, so the first/last <div> is no longer a nav-item.) */
    .nav-section-header + .nav-item[b-iwcdouqlhp] {
        padding-top: 0.25rem;
    }

/* (The dashboard sub-row indent lives at the END of this file — see .nav-item.nav-subitem.) */

/* Section headers (#479): the tenant header (current tenant name / "All tenants") and the
   "Platform" header that groups the cross-tenant operator surfaces. */
.nav-section-header[b-iwcdouqlhp] {
    color: var(--mw-sage);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    padding: 0.85rem 1.5rem 0.35rem;
    opacity: 0.7;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* The first header (tenant) sits flush; any later header (Platform) gets a separating rule.
   (padding-top is already 0.85rem from the base rule, so only margin/border are added here.) */
.nav-section-header:not(:first-child)[b-iwcdouqlhp] {
    margin-top: 0.5rem;
    border-top: 1px solid rgba(255, 255, 255, 0.1);
}

/* Account actions, separated from the scoped sections above. margin-top: auto is the pin: .nav-account
   is a direct flex item of <nav class="d-flex flex-column">, so this pushes the whole block (links +
   the build watermark below) to the bottom of the column instead of sitting right under the last nav
   item whenever the menu is shorter than the viewport (the >=960px rule below gives nav the height to
   push against). */
.nav-account[b-iwcdouqlhp] {
    margin-top: auto;
    padding-top: 0.25rem;
    border-top: 1px solid rgba(255, 255, 255, 0.1);
}

/* Build watermark: which build is running. Full-opacity --mw-sage against the sidebar's forest/charcoal
   gradient clears WCAG AA (~5:1-6.5:1) - the earlier opacity:0.55 treatment dropped that below 3:1. */
.nav-build-version[b-iwcdouqlhp] {
    padding: 0.35rem 1.5rem 0.6rem;
    font-size: 0.72rem;
    color: var(--mw-sage);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

    .nav-item[b-iwcdouqlhp]  .nav-link {
        color: var(--mw-sage);
        background: none;
        border: none;
        border-radius: 4px;
        /* Compact by design (was 3rem): this is a desktop operator sidebar — rendered only at >=960px (narrow
           windows use the collapsible toggler above) — so the denser 2.35rem (~38px) row is intentional. It clears the
           WCAG 2.2 AA target-size minimum (24px); we deliberately don't chase the 44px AAA bar here. */
        height: 2.35rem;
        /* Interior padding so the icon sits INSIDE the hover/active highlight instead of flush against its
           left edge (Bootstrap's .nav-link padding isn't loaded here, so it was 0 → cramped). */
        padding: 0 0.85rem;
        display: flex;
        align-items: center;
        line-height: 2.35rem;
        width: 100%;
    }

.nav-item[b-iwcdouqlhp]  a.active {
    background-color: rgba(255, 255, 255, 0.37);
    color: var(--mw-white);
}

.nav-item[b-iwcdouqlhp]  .nav-link:hover {
    background-color: rgba(255, 255, 255, 0.1);
    color: var(--mw-white);
}

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

.navbar-toggler:checked ~ .nav-scrollable[b-iwcdouqlhp] {
    display: block;
}

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

    .nav-scrollable[b-iwcdouqlhp] {
        /* Never collapse the sidebar for wide screens */
        display: block;

        /* Allow sidebar to scroll for tall menus */
        height: calc(100vh - 3.5rem);
        overflow-y: auto;
    }

    /* Stretch the flex-column <nav> to fill the scrollable region so .nav-build-version's
       margin-top: auto has room to push it to the bottom instead of sitting right under
       the account links whenever the menu is shorter than the viewport. */
    .nav-scrollable > nav[b-iwcdouqlhp] {
        min-height: 100%;
    }
}

/* Responsive-density ADR, Decision 5 (amended 2026-07-16): the assistant pane no longer collapses the nav — the
   nav is strictly viewport-width based (hamburger only below 960px). When the pane docks and space tightens, the
   INDEX gives way first (goes compact), keeping the nav accessible. So there is no docked-pane nav override here. */

/* The dashboard's tabs, as rows beneath Dashboard. Indented so a child row's label starts where its parent's
   LABEL does rather than where its icon does — the offset is what says "inside Dashboard", and these rows
   carry no icon of their own (four icons stacked under one parent icon is noise, not structure).

   Placed at the END of this file on purpose. The base row rule is `.nav-item ::deep .nav-link`, which sets the
   whole padding shorthand at the same specificity as `.nav-subitem ::deep .nav-link` — so an earlier override
   loses to it on source order alone and silently does nothing. Both defences are applied: the extra
   `.nav-item` raises specificity, and being last settles any remaining tie. */
.nav-item.nav-subitem[b-iwcdouqlhp]  .nav-link {
    /* 2.85rem = the parent row's own 0.85rem padding + its 1.25rem icon + the 0.75rem gap after it, so a child
       label lands exactly on the parent's label (measured: both at x=58 in the rendered sidebar). */
    padding-left: 2.85rem;
    font-size: 0.85rem;
}
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-jxy35enr57],
.components-reconnect-repeated-attempt-visible[b-jxy35enr57],
.components-reconnect-failed-visible[b-jxy35enr57],
.components-pause-visible[b-jxy35enr57],
.components-resume-failed-visible[b-jxy35enr57],
.components-rejoining-animation[b-jxy35enr57] {
    display: none;
}

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


#components-reconnect-modal[b-jxy35enr57] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-jxy35enr57 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-jxy35enr57 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-jxy35enr57 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-jxy35enr57]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-jxy35enr57 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-jxy35enr57 {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-jxy35enr57 {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-jxy35enr57 {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-jxy35enr57] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

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

#components-reconnect-modal button[b-jxy35enr57] {
    border: 0;
    background-color: var(--mw-fern);
    color: var(--mw-white);
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-jxy35enr57] {
        background-color: var(--mw-forest);
    }

    #components-reconnect-modal button:active[b-jxy35enr57] {
        background-color: var(--mw-fern);
    }

.components-rejoining-animation[b-jxy35enr57] {
    position: relative;
    width: 80px;
    height: 80px;
}

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

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

@keyframes components-rejoining-animation-b-jxy35enr57 {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Layout/TenantSwitcher.razor.rz.scp.css */
.tenant-switcher[b-5mgo2o59z3] {
    position: relative;
    display: inline-block;
    font-size: .9rem;
}

/* Native <details> disclosure: hide the default marker, style the summary as a control. */
.tenant-switcher > summary[b-5mgo2o59z3] {
    list-style: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    padding: .3rem .7rem;
    border: 1px solid var(--mw-border);
    border-radius: .375rem;
    background: var(--mw-white);
    white-space: nowrap;
    user-select: none;
}

.tenant-switcher > summary[b-5mgo2o59z3]::-webkit-details-marker {
    display: none;
}

.ts-label[b-5mgo2o59z3] {
    color: var(--mw-stone);
    font-size: .8rem;
}

.ts-current[b-5mgo2o59z3] {
    font-weight: 600;
}

.ts-caret[b-5mgo2o59z3] {
    color: var(--mw-stone);
    font-size: .7rem;
}

.ts-menu[b-5mgo2o59z3] {
    position: absolute;
    right: 0;
    top: calc(100% + .35rem);
    min-width: 14rem;
    max-height: 70vh;
    overflow-y: auto;
    background: var(--mw-white);
    border: 1px solid var(--mw-border);
    border-radius: .375rem;
    box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);
    z-index: 1050;
    padding: .25rem 0;
}

.ts-menu form[b-5mgo2o59z3] {
    margin: 0;
}

.ts-item[b-5mgo2o59z3] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    width: 100%;
    text-align: left;
    background: none;
    border: 0;
    padding: .4rem 1rem;
    cursor: pointer;
}

.ts-item:hover[b-5mgo2o59z3] {
    background: var(--mw-mist);
}

.ts-item.active[b-5mgo2o59z3] {
    background: var(--mw-mint-wash);
    font-weight: 600;
}

.ts-item-id[b-5mgo2o59z3] {
    color: var(--mw-stone);
    font-size: .75rem;
    font-family: var(--mw-font-mono);
}
/* /Components/Pages/EventViewer/Index.razor.rz.scp.css */
.ev-payload[b-noi8lwatgc] {
    max-height: 300px;
    overflow: auto;
}
