/* /Components/AdminToolbar.razor.rz.scp.css */
.admin-toolbar[b-2ndvunovmn]
{
	background: var(--background-color) !important;
}

[b-2ndvunovmn] .input-group-text
{
	border: 1px solid silver;
	border-radius: 0 5px 5px 0;
	cursor: pointer;
}
/* /Components/ClickableImage.razor.rz.scp.css */
.image-container[b-0yjckr195o]
{
	cursor: pointer;
	transition: transform 0.3s ease;
}

.image-container:hover[b-0yjckr195o]
{
	transform: scale(1.01);
}

@media (hover: hover)
{
	.image-container:hover[b-0yjckr195o]
	{
		transform: scale(1.01);
	}
}

@media (hover: none)
{
	.image-container[b-0yjckr195o]
	{
		transform: none;
	}
}

.fullscreen-dialog[b-0yjckr195o]
{
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	background-color: rgba(0, 0, 0, 0.8);
	z-index: 1000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 10px;
}

.fullscreen-dialog img[b-0yjckr195o]
{
	max-width: 100%;
	max-height: 80vh;
}

.close-btn[b-0yjckr195o]
{
	position: absolute;
	top: 20px;
	right: 20px;
	width: 44px;
	height: 44px;
	padding: 0;
	background-color: transparent;
	color: #fff;
	border: none;
	font-size: 28px;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
}

.close-btn span[b-0yjckr195o]
{
	line-height: 1;
}

@media (max-width: 768px)
{
	.close-btn[b-0yjckr195o]
	{
		font-size: 36px;
		top: 10px;
		right: 10px;
	}
}
/* /Components/CreateOrganizations/ChooseConnections.razor.rz.scp.css */
.connection-tables-container[b-in29bhzi08]
{
	align-items: normal;
	display: flex;
	flex-direction: row;
	justify-content: space-between;
}

[b-in29bhzi08] .pdpager
{
	padding: 0 !important;
}
/* /Components/CreateOrganizations/ChooseOrganizations.razor.rz.scp.css */
.organization-tables-container[b-c3why6j5o1]
{
	align-items: normal;
	display: flex;
	flex-direction: row;
	justify-content: space-between;
}
/* /Components/CreateOrganizations/StageIndicator.razor.rz.scp.css */
.stage-details[b-hf5sgysshp]
{
	align-items: center;
	display: flex;
	flex-direction: row;
	justify-content: space-between;
	width: 100%;
}
/* /Components/CreateOrganizations/StatusSplash.razor.rz.scp.css */
.splash-container[b-balsiyv8la]
{
	align-items: center;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-height: 500px;
	width: 100%;
}

.text-container[b-balsiyv8la]
{
	align-items: center;
	display: flex;
	flex-direction: row;
	justify-content: center;
}
/* /Components/Dashboards/DashboardCard.razor.rz.scp.css */
.dashboard-card[b-srzcq2vchh]
{
	border-radius: 0.5rem !important;
	flex: 1 1 0;
	min-width: 160px;
	transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.dashboard-card:hover[b-srzcq2vchh]
{
	box-shadow: 0 .4rem 1rem rgba(0, 0, 0, .08) !important;
	transform: translateY(-2px);
}

.dashboard-card-label[b-srzcq2vchh]
{
	font-size: .7rem;
	letter-spacing: .05em;
}

.dashboard-panel-bg-icon[b-srzcq2vchh]
{
	bottom: -0.5rem;
	font-size: 4rem;
	opacity: 0.05;
	pointer-events: none;
	right: -0.25rem;
}
/* /Components/Dashboards/EngineHealth/AutoRefreshControl.razor.rz.scp.css */
/* MS-18750: the auto-refresh countdown ring.

   Its own stylesheet because scoped CSS belongs to the DEFINING component - these rules placed in a parent's file
   are rewritten to demand the parent's scope attribute and match nothing at all. */

.ar-status[b-m4p00cssd6]
{
	white-space: nowrap;
}

/* The ring and its glyph occupy the same 1.5rem box, so the icon sits inside the countdown rather than beside it. */
.ar-toggle[b-m4p00cssd6]
{
	align-items: center;
	display: inline-flex;
	height: 1.5rem;
	justify-content: center;
	opacity: .65;
	position: relative;
	text-decoration: none;
	width: 1.5rem;
}

.ar-toggle:hover[b-m4p00cssd6]
{
	opacity: 1;
}

.ar-ring[b-m4p00cssd6]
{
	height: 100%;
	left: 0;
	position: absolute;
	top: 0;
	width: 100%;
}

.ar-ring-track[b-m4p00cssd6]
{
	fill: none;
	stroke: rgba(128, 128, 128, .3);
	stroke-width: 2.5;
}

/* Circumference of r=9 is 2 * pi * 9 = 56.55. The dash is the whole circle, so animating the offset from 0 to
   that value wipes the stroke away exactly once over the cycle.

   Rotated -90deg so it drains from twelve o'clock; without it the cycle starts at three o'clock and reads as
   though it is already part way through. */
.ar-ring-progress[b-m4p00cssd6]
{
	animation-fill-mode: forwards;
	animation-iteration-count: 1;
	animation-name: ar-drain-b-m4p00cssd6;
	animation-timing-function: linear;
	fill: none;
	stroke: var(--bs-primary);
	stroke-dasharray: 56.55;
	stroke-linecap: round;
	stroke-width: 2.5;
	transform: rotate(-90deg);
	transform-origin: 50% 50%;
}

@keyframes ar-drain-b-m4p00cssd6
{
	from
	{
		stroke-dashoffset: 0;
	}

	to
	{
		stroke-dashoffset: 56.55;
	}
}

/* Honours the OS "reduce motion" setting: the ring simply sits full rather than sweeping. The countdown is a
   nicety, and a continuously moving element is exactly what that setting exists to suppress. */
@media (prefers-reduced-motion: reduce)
{
	.ar-ring-progress[b-m4p00cssd6]
	{
		animation: none;
	}
}

.ar-glyph[b-m4p00cssd6]
{
	font-size: .5rem;
	pointer-events: none;
	position: relative;
}
/* /Components/Dashboards/EngineHealth/EngineHealthTable.razor.rz.scp.css */
/* MS-18750: the per-engine table's own styles.

   These live here rather than in EngineHealthView.razor.css because this is a separate component: scoped CSS is
   rewritten to demand the DEFINING component's scope attribute, so the parent's rules matched nothing at all and
   the engine tables silently rendered with default header casing while the organisations table above them was
   uppercase. That is the same ::deep trap that cost time on the dialog, in its other form - there, a parent
   selector needed ::deep to reach into a child; here, the rules simply belong to the child. */

.eh-engine-table[b-4ghjbxw4o8]
{
	user-select: none;
}

/* Percentage shares so slack distributes proportionally instead of pooling in the name column. They sum under
   100 to leave room for the optional Organization and Trend columns; the browser scales either way. */
.ehe-col-name[b-4ghjbxw4o8]
{
	width: 18%;
}

.ehe-col-org[b-4ghjbxw4o8]
{
	width: 12%;
}

.ehe-col-health[b-4ghjbxw4o8]
{
	width: 11%;
}

.ehe-col-num[b-4ghjbxw4o8]
{
	width: 9%;
}

.ehe-col-progress[b-4ghjbxw4o8]
{
	width: 16%;
}

.ehe-col-api[b-4ghjbxw4o8]
{
	width: 12%;
}

.eh-engine-table th[b-4ghjbxw4o8]
{
	font-size: .75rem;
	font-weight: 600;
	letter-spacing: .02em;
	text-transform: uppercase;
	white-space: nowrap;
}

.eh-engine-name[b-4ghjbxw4o8]
{
	font-weight: 600;
	line-height: 1.2;
}

/* Dimmed with opacity rather than a colour, matching .eng-category in the Organization Statistics dialog so the
   same line reads identically on both surfaces - and because it works in either theme without naming a colour. */
.eh-engine-category[b-4ghjbxw4o8]
{
	font-size: .75rem;
	line-height: 1.2;
	opacity: .55;
}

.eh-metric[b-4ghjbxw4o8]
{
	text-align: right;
	white-space: nowrap;
}

/* Right-aligned so the header sits over its own column rather than drifting left into the neighbouring one.
   Left padding for the same reason .eh-progress-cell has it: the sparkline spans its whole cell, so without it
   the line starts hard against the Duration value beside it and the two read as one run of content. */
.eh-trend-col[b-4ghjbxw4o8]
{
	padding-left: 2rem;
	width: 8rem;
	min-width: 6rem;
	text-align: right;
}

/* Deliberately full width beneath its row rather than a tooltip. The reason an engine is unhealthy is the entire
   value of recording that it is, so hiding it behind a hover defeats the point. */
.eh-reason-row > td[b-4ghjbxw4o8]
{
	border-top: 0;
	padding-top: 0;
	font-size: .8125rem;
}

/* The bar spans its whole cell, so without this it starts hard against the Next run value in the column to its
   left and the two read as one run of content. Padding rather than a margin on the bar itself, so the estimate
   and count on the line below start at the same place the bar does. */
.eh-progress-cell[b-4ghjbxw4o8]
{
	padding-left: 2rem;
}

/* Drawn as a SCALE, not a stripe.

   A rounded 4px bar with a faint track gave the eye nothing to measure against: at 12% the blue sliver read as a
   stray mark rather than as "one eighth of the way along", because where the journey ENDS was invisible. The end
   ticks supply that reference, and squaring the corners lets the fill start and finish exactly on them - with a
   radius, a full bar visibly falls short of its own end mark.

   Neutral overlays rather than named colours, so it works against either theme. */
.eh-progress[b-4ghjbxw4o8]
{
	background-color: rgba(128, 128, 128, .25);
	height: 6px;
	position: relative;
}

.eh-progress[b-4ghjbxw4o8]::before,
.eh-progress[b-4ghjbxw4o8]::after
{
	background-color: rgba(128, 128, 128, .6);
	bottom: -3px;
	content: "";
	position: absolute;
	top: -3px;
	width: 1px;
}

.eh-progress[b-4ghjbxw4o8]::before
{
	left: 0;
}

.eh-progress[b-4ghjbxw4o8]::after
{
	right: 0;
}

.eh-progress-bar[b-4ghjbxw4o8]
{
	background-color: var(--bs-primary);
	height: 100%;
}

/* A finished sweep's bar lingers on the row until the next loop's first write clears it, and a FULL bar in the
   working blue reads as "stuck at the end". Green says what is true: this sweep completed. In-flight sweeps stay
   blue even at 100% (finishing, not finished), and ended-short sweeps stay blue with the tooltip explaining. */
.eh-progress-bar-complete[b-4ghjbxw4o8]
{
	background-color: var(--bs-success);
}

.eh-progress-text[b-4ghjbxw4o8]
{
	font-size: .75rem;
	opacity: .75;
}

/* Estimate left, count right, on one line under the bar.

   flex-end plus an auto margin on the estimate rather than space-between, because the estimate is often absent:
   space-between would leave a lone count stranded on the LEFT, which is the one place a right-aligned metric
   column must never put it. */
.eh-progress-line[b-4ghjbxw4o8]
{
	align-items: baseline;
	display: flex;
	gap: .5rem;
	justify-content: flex-end;
}

/* Deliberately quieter than the count beside it: the count is measured, the estimate is extrapolated, and they
   should not carry equal weight. */
.eh-progress-eta[b-4ghjbxw4o8]
{
	font-size: .7rem;
	margin-right: auto;
	opacity: .6;
}

/* The item being worked on, sharing the count's line so rows do not grow. flex: 1 with min-width: 0 is what lets
   text-truncate actually truncate inside a flex row; without it the name refuses to shrink and shoves the count
   out of the cell. Left-aligned so it reads as a label, against the right-aligned measured count. */
.eh-progress-item[b-4ghjbxw4o8]
{
	flex: 1 1 auto;
	font-size: .7rem;
	min-width: 0;
	opacity: .6;
	text-align: left;
}

/* MS-24964: the phase pips live in StagePips.razor.css, not here. Scoped CSS only reaches a component's OWN
   markup, so styling a child component from its parent's stylesheet silently does nothing. */

/* A muted dot beside the next-run text rather than colouring the text itself. Colouring cells turns a table into
   a wall of red and green, and the eye stops reading any of it; a dot carries the same signal at a fraction of
   the visual weight. */
.eh-run-dot[b-4ghjbxw4o8]
{
	display: inline-block;
	width: .5rem;
	height: .5rem;
	border-radius: 50%;
	margin-right: .35rem;
	vertical-align: middle;
}
/* /Components/Dashboards/EngineHealth/EngineHealthView.razor.rz.scp.css */
/* MS-18750: layout for the SuperAdmin Engine Health page. Card, dot and sparkline styling all come from the
   components themselves, so what remains here is what those components cannot know about.

   Note these rules are scoped to this component, which is why the Wireless Health dashboard's equivalents could
   not simply be referenced: its layout classes are scoped to its own view and would silently do nothing here. */

/* Values below are taken from WirelessHealthDashboardView.razor.css rather than approximated, so the two dashboards
   sit at the same elevation, use the same background token and break at the same widths. Scoped CSS means they
   cannot be shared by reference - its classes are scoped to its own view and would silently do nothing here - so
   matching them by hand is the only option, and guessing produced visible drift. */
.eh-bar[b-sko2th81iz]
{
	position: sticky;
	top: 0;
	z-index: 1020;
	background: var(--background-color);
	padding-block: .5rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .2));
}

/* Auto-sized to its widest option rather than a fixed 20rem, which left "All organizations" swimming in space.
   The cap guards against one absurdly named organization stretching the whole toolbar; the sub-lg media rule
   below still takes it full width. Scoped CSS rather than Bootstrap's w-auto, whose !important would defeat
   that mobile override. */
.eh-scope[b-sko2th81iz]
{
	max-width: 20rem;
	width: auto;
}

/* Bootstrap's .vr is align-self: stretch, which on this wrapping flex bar makes it as tall as the whole line -
   including the padding - so it reads as a rule through the toolbar rather than a separator between two groups.
   Pinned to roughly a button's height instead, and dropped when the bar wraps, where a divider mid-row would
   separate things that are no longer beside each other. */
.eh-divider[b-sko2th81iz]
{
	align-self: center;
	height: 1.5rem;
	min-height: 0;
}

@media (max-width: 991.98px)
{
	.eh-divider[b-sko2th81iz]
	{
		display: none;
	}
}

/* Pills. Copied rather than shared because TimeRangeSelector is hard-typed to DashboardTimeRange with a private
   option array, so it cannot be generalised without editing a shipped component. Same metrics as .wh-timerange so
   the two pill groups on the same bar are visually identical. */
.eh-pills[b-sko2th81iz]
{
	gap: .35rem;
}

.eh-pills .btn[b-sko2th81iz]
{
	border-radius: 999px;
	font-weight: 600;
	min-width: 3rem;
}

/* Kill the theme's green focus ring/border on click; keep a subtle primary ring for keyboard users only. */
.eh-pills .btn:focus[b-sko2th81iz],
.eh-pills .btn:active:focus[b-sko2th81iz]
{
	box-shadow: none !important;
	outline: none !important;
}

.eh-pills .btn-primary:focus[b-sko2th81iz]
{
	border-color: var(--bs-primary) !important;
}

.eh-pills .btn:focus-visible[b-sko2th81iz]
{
	box-shadow: 0 0 0 .2rem rgba(var(--bs-primary-rgb), .4) !important;
	outline: none !important;
}

.eh-hero-cards[b-sko2th81iz]
{
	display: grid;
	gap: 1rem;
	grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
}

@media (min-width: 1200px)
{
	.eh-hero-cards[b-sko2th81iz]
	{
		grid-template-columns: minmax(0, 1.6fr) repeat(4, minmax(0, 1fr));
	}
}

/* Native details/summary rather than a Bootstrap collapse: no JavaScript, and it keeps working without it.
   Metrics match .wh-section-* exactly, including the chevron's muted opacity and the info icon's help cursor. */
.eh-section-summary[b-sko2th81iz]
{
	cursor: pointer;
	list-style: none;
	display: flex;
	align-items: center;
	gap: .5rem;
	width: fit-content;
	user-select: none;
}

.eh-section-summary[b-sko2th81iz]::-webkit-details-marker
{
	display: none;
}

.eh-section-chevron[b-sko2th81iz]
{
	font-size: .7rem;
	opacity: .5;
	transition: transform .15s ease;
}

details:not([open]) > .eh-section-summary .eh-section-chevron[b-sko2th81iz]
{
	transform: rotate(-90deg);
}

.eh-section-info[b-sko2th81iz]
{
	font-size: .72rem;
	font-weight: 400;
	opacity: .35;
	cursor: help;
	position: relative;
	top: 2px;
}

.eh-section-summary:hover .eh-section-info[b-sko2th81iz]
{
	opacity: .7;
}

/* Was 24rem, which is far wider than any organization name needs and left the pager beside it stranded across
   the table. Roughly 60% of that, and it still holds a long name comfortably. */
.eh-search[b-sko2th81iz]
{
	max-width: 14rem;
}

/* A grid, not flex-with-spacers, because the pager must sit on the TRUE centre line of the table. Flex spacers
   centre the middle block in whatever space remains after the filter, which is off-centre by half the filter's
   width - visibly, on a wide table. Equal 1fr tracks either side of an auto middle centre it regardless of what
   the flanks hold, which is also why the empty third cell in the markup is load-bearing. */
.eh-table-bar[b-sko2th81iz]
{
	align-items: center;
	display: grid;
	gap: .5rem;
	grid-template-columns: 1fr auto 1fr;
}

/* The pager with its range readout stacked beneath, matching the wireless health dashboard's arrangement. */
.eh-table-bar-middle[b-sko2th81iz]
{
	align-items: center;
	display: flex;
	flex-direction: column;
	gap: .25rem;
}

.eh-empty[b-sko2th81iz]
{
	max-width: 32rem;
	margin-inline: auto;
}

/* Nothing in these tables is meant to be selected by dragging across it - the rows are click targets, and a
   text selection that appears every time you expand one is noise. Copyable values have their own PDClipboard. */
.eh-table[b-sko2th81iz]
{
	user-select: none;
}

.eh-table th[b-sko2th81iz]
{
	font-size: .75rem;
	font-weight: 600;
	letter-spacing: .02em;
	text-transform: uppercase;
	white-space: nowrap;
}

.eh-expand-col[b-sko2th81iz],
.eh-expand-cell[b-sko2th81iz]
{
	width: 2rem;
	padding-right: 0;
}

/* Percentage shares for the estate table, summing (with the fixed expand and trend columns) to roughly full
   width. The name gets a healthy share but no longer the whole surplus; the numbers get room to breathe. */
.eh-col-name[b-sko2th81iz]
{
	width: 24%;
}

.eh-col-health[b-sko2th81iz]
{
	width: 14%;
}

.eh-col-num[b-sko2th81iz]
{
	width: 11%;
}

.eh-col-api[b-sko2th81iz]
{
	width: 15%;
}

.eh-expand-button[b-sko2th81iz]
{
	opacity: .6;
	text-decoration: none;
}

.eh-expand-button:hover[b-sko2th81iz]
{
	opacity: 1;
}

.eh-row[b-sko2th81iz]
{
	cursor: pointer;
}

/* Neutral overlays, matching .wh-ap-table's hover in the Wireless Health dashboard. Expanded sits a shade
   stronger than hover so an open row stays distinguishable while the pointer is over a different one. */
.eh-row:hover[b-sko2th81iz]
{
	background-color: rgba(128, 128, 128, .08);
}

.eh-row-expanded[b-sko2th81iz]
{
	background-color: rgba(128, 128, 128, .12);
}

/* No border and no hover on the detail row: it belongs to the row above, and giving it its own affordances makes
   it read as a sibling rather than as a child. */
.eh-detail-row > td[b-sko2th81iz]
{
	background-color: rgba(128, 128, 128, .05);
	border-top: 0;
}

.eh-name[b-sko2th81iz]
{
	font-weight: 600;
}

/* Left padding matching the engine table's trend column, so the sparkline does not start hard against the API
   figure in the cell beside it. */
.eh-trend-col[b-sko2th81iz]
{
	padding-left: 2rem;
	width: 8rem;
	min-width: 6rem;
	text-align: right;
}

/* Below lg the estate table cannot align anything useful, so it scrolls inside its own container rather than
   pushing the page sideways. The hero cards reflow on their own via auto-fit above. */
@media (max-width: 991.98px)
{
	.eh-bar[b-sko2th81iz]
	{
		position: static;
	}

	.eh-scope[b-sko2th81iz],
	.eh-search[b-sko2th81iz]
	{
		max-width: none;
		width: 100%;
	}

	/* Below lg the three-track grid has no true centre worth defending - the full-width filter would crush the
	   pager into a sliver - so the bar stacks: filter above, pager centred beneath it. */
	.eh-table-bar[b-sko2th81iz]
	{
		grid-template-columns: 1fr;
	}
}
/* /Components/Dashboards/EngineHealth/EngineTrendSparkline.razor.rz.scp.css */
/* MS-18750: its own stylesheet because scoped CSS belongs to the DEFINING component - rules for .eh-spark placed
   in a parent's file are rewritten to demand the parent's scope attribute and match nothing at all. */

.eh-spark[b-gxvvalp66c]
{
	display: block;
	width: 100%;
	opacity: .9;
}

.eh-spark-empty[b-gxvvalp66c]
{
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: .8rem;
}
/* /Components/Dashboards/EngineHealth/StagePips.razor.rz.scp.css */
/* MS-24964: see StagePips.razor for why these are pips and not a bar. */

.stage-pips[b-5x1yj6iw18]
{
	display: inline-flex;
	gap: 2px;
	margin-right: .35rem;
	vertical-align: middle;
}

/* currentColor so the strip inherits whatever the line it sits on is using, rather than pinning a colour that
   would have to be maintained separately for light and dark. */
.stage-pip[b-5x1yj6iw18]
{
	background-color: currentColor;
	border-radius: 1px;
	height: 6px;
	opacity: .25;
	width: 4px;
}

/* Filled up to AND INCLUDING the phase currently running, so the strip says exactly what the number beside it
   says. Phases the engine SKIPPED are not distinguishable - nothing records which ran - and inventing a third
   state would claim knowledge the status row does not have. */
.stage-pip-done[b-5x1yj6iw18]
{
	opacity: .9;
}
/* /Components/Dashboards/WirelessHealth/ConnectionFunnel.razor.rz.scp.css */
.wh-funnel[b-5573w878ig] {
	display: flex;
	flex-direction: column;
	gap: .4rem;
}

.wh-funnel-row[b-5573w878ig] {
	position: relative;
	height: 1.9rem;
	border: 1px solid var(--bs-border-color, rgba(128, 128, 128, .3));
	border-radius: .4rem;
	overflow: hidden;
	background: rgba(128, 128, 128, .06);
}

.wh-funnel-fill[b-5573w878ig] {
	position: absolute;
	inset: 0 auto 0 0;
	background: rgba(var(--bs-success-rgb), .18);
}

.wh-funnel-flagged[b-5573w878ig] {
	border-color: var(--bs-danger);
}

.wh-funnel-clickable[b-5573w878ig] {
	cursor: pointer;
	transition: border-color .15s ease, background-color .15s ease;
}

.wh-funnel-clickable:hover[b-5573w878ig] {
	border-color: var(--bs-secondary, rgba(128, 128, 128, .6));
	background: rgba(128, 128, 128, .12);
}

.wh-funnel-flagged .wh-funnel-fill[b-5573w878ig] {
	background: rgba(var(--bs-danger-rgb), .16);
}

.wh-funnel-label[b-5573w878ig] {
	position: relative;
	display: flex;
	align-items: center;
	gap: .5rem;
	height: 100%;
	padding: 0 .7rem;
	font-weight: 600;
	font-size: .85rem;
}

.wh-funnel-pct[b-5573w878ig] {
	opacity: .7;
	font-weight: 400;
}
/* /Components/Dashboards/WirelessHealth/DetailPanel.razor.rz.scp.css */
.dp-backdrop[b-trf1pi3q14] {
	position: fixed;
	inset: 0;
	z-index: 1040;
	background: rgba(0, 0, 0, .35);
	opacity: 0;
	pointer-events: none;
	transition: opacity .2s ease;
}

.dp-backdrop.dp-open[b-trf1pi3q14] {
	opacity: 1;
	pointer-events: auto;
}

.dp-panel[b-trf1pi3q14] {
	position: fixed;
	top: 0;
	right: 0;
	height: 100%;
	width: min(460px, 92vw);
	z-index: 1045;
	display: flex;
	flex-direction: column;
	background: var(--background-color);
	border-left: 1px solid var(--bs-border-color, rgba(128, 128, 128, .2));
	box-shadow: -8px 0 24px rgba(0, 0, 0, .18);

	/* Off-screen and hidden when closed: visibility (delayed to the end of the slide) keeps the panel out of the
	   scrollable overflow region so it never adds a horizontal scrollbar - the same trick Bootstrap's offcanvas uses. */
	visibility: hidden;
	transform: translateX(100%);
	transition: transform .22s ease, visibility 0s linear .22s;
	outline: none;
}

.dp-panel.dp-open[b-trf1pi3q14] {
	visibility: visible;
	transform: translateX(0);
	transition: transform .22s ease, visibility 0s linear 0s;
}

.dp-head[b-trf1pi3q14] {
	flex: 0 0 auto;
	padding: .7rem .85rem .7rem 1rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .2));
}

.dp-title[b-trf1pi3q14] {
	font-size: 1rem;
	min-width: 0;
}

.dp-close[b-trf1pi3q14] {
	line-height: 1;
	opacity: .65;
	box-shadow: none;
}

.dp-close:hover[b-trf1pi3q14],
.dp-close:focus-visible[b-trf1pi3q14] {
	opacity: 1;
}

.dp-body[b-trf1pi3q14] {
	flex: 1 1 auto;
	padding: 1rem;
	overflow: auto;
}
/* /Components/Dashboards/WirelessHealth/HealthDot.razor.rz.scp.css */
.wh-dot[b-pagqo6ju4g] {
	display: inline-block;
	width: var(--wh-dot-size);
	height: var(--wh-dot-size);
	border-radius: 50%;
	flex: 0 0 auto;
	vertical-align: middle;
}
/* /Components/Dashboards/WirelessHealth/HealthGauge.razor.rz.scp.css */
.wh-gauge[b-xlbbz1lxit] {
	width: var(--wh-gauge-size);
	height: var(--wh-gauge-size);
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;

	--wh-gauge-track: rgba(108, 117, 125, .18);

	background: conic-gradient(var(--wh-gauge-colour) calc(var(--wh-gauge-pct) * 1%), var(--wh-gauge-track) 0);
}

.wh-gauge-success[b-xlbbz1lxit] {
	--wh-gauge-colour: var(--bs-success);
}

.wh-gauge-warning[b-xlbbz1lxit] {
	--wh-gauge-colour: var(--bs-warning);
}

.wh-gauge-danger[b-xlbbz1lxit] {
	--wh-gauge-colour: var(--bs-danger);
}

.wh-gauge-empty[b-xlbbz1lxit] {
	--wh-gauge-colour: var(--bs-secondary);
}

.wh-gauge-inner[b-xlbbz1lxit] {
	width: calc(var(--wh-gauge-size) - 18px);
	height: calc(var(--wh-gauge-size) - 18px);
	border-radius: 50%;
	background: var(--bs-body-bg, #fff);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	gap: 1px;
}

.wh-gauge-label[b-xlbbz1lxit] {
	font-size: .6rem;
	letter-spacing: .06em;
	text-transform: uppercase;
	opacity: .65;
}

.wh-gauge-value[b-xlbbz1lxit] {
	font-weight: 700;
	line-height: 1;
	font-size: calc(var(--wh-gauge-size) * .3);
}

.wh-gauge-caption[b-xlbbz1lxit] {
	font-size: .62rem;
	opacity: .6;
}
/* /Components/Dashboards/WirelessHealth/NetworkPicker.razor.rz.scp.css */
.wh-picker[b-9fnvxen1ax] {
	position: relative;
	display: inline-block;
}

.wh-picker-btn[b-9fnvxen1ax] {
	border: 1px solid transparent;
	background: transparent;
	color: inherit;
	font-size: 1rem;
	padding: .3rem .55rem;
	border-radius: .4rem;
	cursor: pointer;
	display: inline-flex;
	align-items: center;
}

.wh-picker-btn:hover[b-9fnvxen1ax] {
	background: rgba(128, 128, 128, .12);
}

.wh-picker-btn:focus[b-9fnvxen1ax] {
	outline: none;
	box-shadow: none;
}

.wh-picker-btn:focus-visible[b-9fnvxen1ax] {
	outline: 2px solid var(--bs-primary);
	outline-offset: 1px;
}

.wh-picker-up[b-9fnvxen1ax] {
	border: 1px solid transparent;
	background: transparent;
	color: inherit;
	padding: .3rem .5rem;
	margin-right: .1rem;
	border-radius: .4rem;
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	opacity: .7;
}

.wh-picker-up:hover[b-9fnvxen1ax] {
	background: rgba(128, 128, 128, .12);
	opacity: 1;
}

.wh-picker-up:focus[b-9fnvxen1ax] {
	outline: none;
	box-shadow: none;
}

.wh-picker-up:focus-visible[b-9fnvxen1ax] {
	outline: 2px solid var(--bs-primary);
	outline-offset: 1px;
}

.wh-picker-backdrop[b-9fnvxen1ax] {
	position: fixed;
	inset: 0;
	z-index: 1040;
}

.wh-picker-panel[b-9fnvxen1ax] {
	position: absolute;
	top: calc(100% + 4px);
	left: 0;
	z-index: 1050;
	min-width: 320px;
	width: max-content;
	max-width: min(90vw, 640px);
	max-height: 65vh;
	overflow: auto;
	padding: 0;
}

.wh-picker-tree[b-9fnvxen1ax] {
	padding: .35rem .5rem;
}
/* /Components/Dashboards/WirelessHealth/Pager.razor.rz.scp.css */
/* Segmented pager (MS-24736): subtle grey buttons that read in light and dark, curved outer ends, square middle,
   with the same rgba-grey hover as the estate chooser. */
.wh-pager[b-wpk8wp4c0d] {
	display: inline-flex;
}

.wh-pager-btn[b-wpk8wp4c0d] {
	border: 1px solid rgba(128, 128, 128, .3);
	background: rgba(128, 128, 128, .1);
	color: inherit;
	padding: .2rem .55rem;
	font-size: .75rem;
	line-height: 1;
	cursor: pointer;
	margin-left: -1px;
	transition: background-color .12s ease-in-out;
}

.wh-pager-btn:first-child[b-wpk8wp4c0d] {
	border-top-left-radius: .4rem;
	border-bottom-left-radius: .4rem;
	margin-left: 0;
}

.wh-pager-btn:last-child[b-wpk8wp4c0d] {
	border-top-right-radius: .4rem;
	border-bottom-right-radius: .4rem;
}

.wh-pager-btn:hover:not(:disabled)[b-wpk8wp4c0d] {
	background: rgba(128, 128, 128, .22);
}

.wh-pager-btn:focus[b-wpk8wp4c0d] {
	outline: none;
	box-shadow: none;
}

.wh-pager-btn:focus-visible[b-wpk8wp4c0d] {
	outline: 2px solid var(--bs-primary);
	outline-offset: 1px;
}

.wh-pager-btn:disabled[b-wpk8wp4c0d] {
	opacity: .4;
	cursor: default;
}
/* /Components/Dashboards/WirelessHealth/TimeRangeSelector.razor.rz.scp.css */
.wh-timerange[b-oec5z7ug6c] {
	gap: .35rem;
}

.wh-timerange .btn[b-oec5z7ug6c] {
	border-radius: 999px;
	font-weight: 600;
	min-width: 3rem;
}

/* Kill the theme's green focus ring/border on click; keep a subtle primary ring for keyboard users only. */
.wh-timerange .btn:focus[b-oec5z7ug6c],
.wh-timerange .btn:active:focus[b-oec5z7ug6c] {
	box-shadow: none !important;
	outline: none !important;
}

.wh-timerange .btn-primary:focus[b-oec5z7ug6c] {
	border-color: var(--bs-primary) !important;
}

.wh-timerange .btn:focus-visible[b-oec5z7ug6c] {
	box-shadow: 0 0 0 .2rem rgba(var(--bs-primary-rgb), .4) !important;
	outline: none !important;
}
/* /Components/Dashboards/WirelessHealth/TrendSparkline.razor.rz.scp.css */
.wh-spark[b-rckj58qmie] {
	display: block;
	width: 100%;
	opacity: .9;
}

.wh-spark-empty[b-rckj58qmie] {
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: .8rem;
}
/* /Components/Dashboards/WirelessHealth/WirelessHealthDashboardView.razor.rz.scp.css */
.wh-dash-bar[b-40p1oe4sdg] {
	position: sticky;
	top: 0;
	z-index: 1020;
	background: var(--background-color);
	padding-block: .5rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .2));
}

.wh-crumb[b-40p1oe4sdg] {
	font-size: 1rem;
}

.wh-hero-cards[b-40p1oe4sdg] {
	/* Sit beside the gauge and reflow the four cards as a grid (4 -> 3 -> 2 columns) as width tightens, so the
	   gauge keeps their company instead of being stranded on its own row. Only fully stacks when genuinely narrow. */
	flex: 1 1 340px;
	min-width: 0;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
	gap: 1rem;
}

.wh-todo[b-40p1oe4sdg] {
	opacity: .85;
}

.wh-spark-card[b-40p1oe4sdg] {
	flex: 1 1 0;
	min-width: 150px;
}

.wh-spark-label[b-40p1oe4sdg] {
	font-size: .65rem;
	letter-spacing: .05em;
	margin-bottom: .35rem;
}

.wh-section-summary[b-40p1oe4sdg] {
	cursor: pointer;
	list-style: none;
	display: flex;
	align-items: center;
	gap: .5rem;
	width: fit-content;
}

.wh-section-summary[b-40p1oe4sdg]::-webkit-details-marker {
	display: none;
}

.wh-section-chevron[b-40p1oe4sdg] {
	font-size: .7rem;
	opacity: .5;
	transition: transform .15s ease;
}

.wh-section-info[b-40p1oe4sdg] {
	font-size: .72rem;
	font-weight: 400;
	opacity: .35;
	cursor: help;
	position: relative;
	top: 2px;
	transition: opacity .15s ease;
}

.wh-section-summary:hover .wh-section-info[b-40p1oe4sdg] {
	opacity: .7;
}

details:not([open]) > .wh-section-summary .wh-section-chevron[b-40p1oe4sdg] {
	transform: rotate(-90deg);
}

/* Estate rollup totals strip (MS-24804): a plain count-by-band summary, shown instead of a blended gauge. */
.wh-rollup-total[b-40p1oe4sdg] {
	text-align: center;
	min-width: 60px;
}

.wh-rollup-total-n[b-40p1oe4sdg] {
	font-size: 1.5rem;
	font-weight: 600;
	line-height: 1.1;
}

.wh-rollup-total-l[b-40p1oe4sdg] {
	font-size: .7rem;
	letter-spacing: .03em;
}

.wh-ap-wrap[b-40p1oe4sdg] {
	max-height: 420px;
	overflow: auto;
	border: 1px solid var(--bs-border-color, rgba(128, 128, 128, .2));
	border-radius: .375rem;
}

/* The rollup's network ranking is the main content, so on a tall screen it gets far more height than the
   per-network AP table before it scrolls (MS-24804). */
.wh-net-wrap[b-40p1oe4sdg] {
	max-height: min(72vh, 820px);
}

.wh-net-search[b-40p1oe4sdg] {
	max-width: 250px;
}

/* Fill layout (MS-24736): at the estate root the networks table is the main content, so grow it to the bottom of the
   page (.dashboards-layout is a fixed-height scroll box) and let it scroll internally only when the rows exceed the
   space. The view adds .wh-dashboard-fill only for the root rollup, where no hero sits above the table. */
.wh-dashboard-fill[b-40p1oe4sdg] {
	display: flex;
	flex-direction: column;
	height: 100%;
}

.wh-dashboard-fill > .wh-dash-bar[b-40p1oe4sdg] {
	flex: 0 0 auto;
}

.wh-dashboard-fill > details.wh-section[b-40p1oe4sdg] {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	min-height: 0;
}

.wh-dashboard-fill > details.wh-section > .wh-net-wrap[b-40p1oe4sdg] {
	flex: 1 1 auto;
	min-height: 0;

	/* Explicit viewport cap (the shell article is 100vh) so the table scrolls internally rather than the page, even
	   if the details flex bound does not hold. The offset is roughly the height above the table (bar + summary +
	   controls); nudge it if the table overshoots the bottom (increase) or stops short (decrease). */
	max-height: calc(100vh - 11rem);
}

/* Constrain the empty-state text so a sentence wraps to a readable column instead of spanning the whole page. */
.wh-empty[b-40p1oe4sdg] {
	max-width: 32rem;
	margin-inline: auto;
}

.wh-ap-table[b-40p1oe4sdg] {
	width: 100%;
	border-collapse: separate;
	border-spacing: 0;
	font-size: .85rem;
}

.wh-ap-table th[b-40p1oe4sdg] {
	position: sticky;
	top: 0;
	z-index: 2;
	background: var(--background-color);
	text-align: left;
	font-size: .62rem;
	text-transform: uppercase;
	letter-spacing: .04em;

	/* Dim the header text via colour, not element opacity - opacity would make the sticky background
	   translucent and let the scrolling rows bleed through it. */
	color: rgba(128, 128, 128, .95);
	font-weight: 600;
	padding: .4rem .6rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .3));
	white-space: nowrap;
}

.wh-ap-table td[b-40p1oe4sdg] {
	padding: .35rem .6rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .12));
}

.wh-ap-table tbody tr:hover[b-40p1oe4sdg] {
	background: rgba(128, 128, 128, .08);
}

.wh-ap-name[b-40p1oe4sdg] {
	max-width: 220px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.wh-ap-row[b-40p1oe4sdg] {
	cursor: pointer;
}

.wh-ap-detail-h[b-40p1oe4sdg] {
	font-size: .62rem;
	text-transform: uppercase;
	letter-spacing: .04em;
	opacity: .6;
	font-weight: 600;
	margin-bottom: .35rem;
}

.wh-ap-detail-k[b-40p1oe4sdg] {
	font-size: .7rem;
	opacity: .7;
}

.wh-ap-radio-table[b-40p1oe4sdg] {
	width: 100%;
	font-size: .82rem;
	border-collapse: collapse;
}

.wh-ap-radio-table th[b-40p1oe4sdg] {
	text-align: left;
	font-size: .6rem;
	text-transform: uppercase;
	letter-spacing: .04em;
	opacity: .55;
	font-weight: 600;
	padding: .25rem .4rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .3));
}

.wh-ap-radio-table td[b-40p1oe4sdg] {
	padding: .3rem .4rem;
	border-bottom: 1px solid var(--bs-border-color, rgba(128, 128, 128, .12));
}

.wh-fd-name[b-40p1oe4sdg] {
	max-width: 320px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
/* /Components/Dialogs/BulkEditOrganizationsDialog.razor.rz.scp.css */
/* MS-23276: Styles for Bulk Edit Organizations Dialog */

.bulk-edit-summary-banner[b-4lauxb85f9]
{
	display: flex;
	flex-wrap: wrap;
	gap: 1rem;
	padding: 0.75rem 1rem;
	background-color: var(--background-color-2);
	border: 1px solid var(--bs-border-color);
	border-radius: 0.375rem;
}

.bulk-edit-summary-banner .summary-item[b-4lauxb85f9]
{
	display: flex;
	align-items: center;
	gap: 0.25rem;
	font-size: 0.9rem;
}

.bulk-edit-section[b-4lauxb85f9]
{
	padding: 0.75rem 0.75rem 0.5rem 0.75rem;
	margin-bottom: 0.5rem;
	border-radius: 0.375rem;
}

.bulk-edit-section h6[b-4lauxb85f9]
{
	font-weight: 600;
	margin-bottom: 0;
}

.bulk-edit-summary-result .col[b-4lauxb85f9]
{
	min-width: 100px;
}

.bulk-edit-stat-card[b-4lauxb85f9]
{
	transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.bulk-edit-stat-card:hover[b-4lauxb85f9]
{
	box-shadow: 0 .4rem 1rem rgba(0, 0, 0, .08) !important;
	transform: translateY(-3px);
}

.bulk-edit-stat-bg-icon[b-4lauxb85f9]
{
	bottom: -0.5rem;
	font-size: 4rem;
	opacity: 0.05;
	pointer-events: none;
	right: -0.25rem;
}

/* Table styling */
.table-responsive[b-4lauxb85f9]
{
	border: 1px solid var(--bs-border-color);
	border-radius: 0.25rem;
}

.table-responsive .table[b-4lauxb85f9]
{
	margin-bottom: 0;
}

.table-responsive thead.sticky-top[b-4lauxb85f9]
{
	z-index: 1;
}

/* Field group styling */
.field-group[b-4lauxb85f9]
{
	padding: 0.5rem 0.75rem;
	border-radius: 0.25rem;
	border: 1px solid var(--bs-border-color);
	transition: border-color 0.15s ease, opacity 0.15s ease;
}

.field-group:not(.field-disabled)[b-4lauxb85f9]
{
	border-color: var(--bs-primary);
}

.field-disabled[b-4lauxb85f9]
{
	opacity: 0.6;
}

.cursor-pointer[b-4lauxb85f9]
{
	cursor: pointer;
}

/* Override magicsuite theme .badge { color: var(--black-or-white)!important } */
.badge[b-4lauxb85f9]
{
	color: #fff !important;
}
/* /Components/Dialogs/MacVendorImportDialog.razor.rz.scp.css */
/* MS-23042: Styles for MAC Vendor Import Dialog */

[b-6lo5reo3aq] input[type="file"]
{
	display: none;
}

.preview-summary[b-6lo5reo3aq]
{
	padding: 0.25rem;
	border: 1px solid var(--bs-border-color);
	border-radius: 0.375rem;
}

.import-section[b-6lo5reo3aq]
{
	padding: 0.5rem 0.5rem 0.25rem 0.5rem;
	margin-bottom: 0.5rem;
	border-radius: 0.375rem;
}

.import-section h6[b-6lo5reo3aq]
{
	font-weight: 600;
	margin-bottom: 0;
}

.cursor-pointer[b-6lo5reo3aq]
{
	cursor: pointer;
}
/* /Components/Dialogs/OrganizationStatisticsDialog.razor.rz.scp.css */
/* MS-18750: the card rules that used to live here are gone. Cards are now DashboardCard, which carries its own
   scoped CSS for the rounded border, hover lift, accent edge and watermark icon. What remains is layout that
   DashboardCard cannot know about, plus the engine list.

   Note these rules are scoped to this component, which is why the Wireless Health dashboard's equivalents could not
   simply be referenced: its layout classes are scoped to its own view and would silently do nothing here. */

.stat-hero-grid[b-fduwpent5c]
{
	display: grid;

	/* auto-fit rather than breakpoints: the row reflows five across down to one on its own. */
	gap: 1rem;
	grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
}

/* Once all five fit on one row, they must NOT be equal. The first two carry sentences - "17 engines, 17 unknown"
   and "88 of 11,652 requests, 2 of 17 not counted" - while the other three carry a single number. Under an even
   split the two that say something truncated to an ellipsis while three cards sat half empty, which is the worst
   possible allocation: the detail that was cut is exactly the detail that changes what you do next.

   1200px, not 992px, because the constraint is the MODAL's width and this query can only see the viewport's. An
   extra-large modal is capped at a fixed width only above 1200px; between 992 and 1199 it shrinks with the window
   while fixed columns below would not, which overflowed the grid and put a horizontal scrollbar across the whole
   dialog. Below this the auto-fit reflow above owns every size, unchanged. */
@media (min-width: 1200px)
{
	.stat-hero-grid[b-fduwpent5c]
	{
		/* The three counts get a FIXED width rather than a share, because a share is the wrong model for them:
		   "1,622" needs no more room at 1900px than at 1200px, so every pixel a proportional split handed them was
		   taken from the two cards that could use it. The other two absorb all remaining width.

		   minmax(0, 1fr) rather than a bare 1fr, and this is not decoration: 1fr means minmax(auto, 1fr), and auto
		   refuses to shrink below min-content. DashboardCard wraps its footer in text-truncate, which sets
		   white-space: nowrap, so min-content is the FULL untruncated footer - and the column therefore would not
		   shrink to let it truncate. It overflowed the container instead. The 0 minimum is what lets the ellipsis
		   do its job. */
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 10rem 10rem 10rem;
	}
}

.eng-list[b-fduwpent5c]
{
	display: flex;
	flex-direction: column;
	gap: .35rem;
}

.eng-head[b-fduwpent5c],
.eng-row[b-fduwpent5c]
{
	align-items: center;
	display: grid;
	gap: .5rem 1rem;
	grid-template-columns: minmax(170px, 1.7fr) minmax(92px, .9fr) minmax(110px, 1fr)
						   minmax(104px, 1fr) minmax(104px, 1fr) minmax(72px, .7fr);
}

.eng-head[b-fduwpent5c]
{
	border-bottom: 1px solid var(--border);
	color: rgba(128, 128, 128, .95);
	font-size: .7rem;
	letter-spacing: .05em;
	padding: .25rem .5rem;
	text-transform: uppercase;
}

.eng-row[b-fduwpent5c]
{
	/* Transparent by default so a healthy row has no accent, and the coloured edge appears only where the inline
	   style sets a colour. Same language as DashboardCard's accent. */
	border-left: 3px solid transparent;
	border-radius: .375rem;
	padding: .4rem .5rem;
}

.eng-row:nth-child(odd)[b-fduwpent5c]
{
	/* Neutral grey at low alpha reads correctly on both light and dark backgrounds without a theme query. */
	background: rgba(128, 128, 128, .05);
}

.eng-row:hover[b-fduwpent5c]
{
	background: rgba(128, 128, 128, .10);
}

.eng-name[b-fduwpent5c]
{
	font-weight: 600;
}

.eng-category[b-fduwpent5c]
{
	font-size: .7rem;
	opacity: .55;
}

.eng-metric[b-fduwpent5c]
{
	font-variant-numeric: tabular-nums;
	text-align: right;
}

/* A muted dot beside the next-run text rather than colouring the text itself. Same metrics as the Engine Health
   page's .eh-run-dot; scoped CSS means the rule cannot be shared, only matched. */
.eng-run-dot[b-fduwpent5c]
{
	border-radius: 50%;
	display: inline-block;
	height: .5rem;
	margin-right: .35rem;
	vertical-align: middle;
	width: .5rem;
}

/* Spans the full row so a long message wraps under the engine rather than widening a column.
   Needs breathing room on both sides: without it the message sits equally close to its own metrics above and to the
   next engine below, so it reads as belonging to both rows rather than to the one it explains. */
.eng-reason[b-fduwpent5c]
{
	font-size: .8rem;
	grid-column: 1 / -1;
	margin-top: .2rem;
}

/* Extra room underneath, but only on rows that actually carry a message, so healthy rows stay compact. */
.eng-row:has(.eng-reason)[b-fduwpent5c]
{
	padding-bottom: .6rem;
}

/* Drawn as a scale rather than a stripe, matching .eh-progress on the Engine Health table - see the note there
   for why the end ticks and the squared corners matter. */
.eng-progress[b-fduwpent5c]
{
	background: rgba(128, 128, 128, .25);
	display: block;
	height: 6px;
	position: relative;
	width: 100%;
}

.eng-progress[b-fduwpent5c]::before,
.eng-progress[b-fduwpent5c]::after
{
	background: rgba(128, 128, 128, .6);
	bottom: -3px;
	content: "";
	position: absolute;
	top: -3px;
	width: 1px;
}

.eng-progress[b-fduwpent5c]::before
{
	left: 0;
}

.eng-progress[b-fduwpent5c]::after
{
	right: 0;
}

.eng-progress-bar[b-fduwpent5c]
{
	background: var(--bs-primary);
	display: block;
	height: 100%;
}

/* Green = this sweep finished and reached its end - the completed bar lingers until the next loop's first write
   clears it, and full-but-blue read as "stuck at the end". Same rule as the Engine Health table. */
.eng-progress-bar-complete[b-fduwpent5c]
{
	background: var(--bs-success);
}

/* nowrap is load-bearing on this span and the eta below, not tidiness. All three spans on the progress line
   share flex shrinkage; without nowrap the count's minimum width is its widest WORD, so a long item name pushes
   "1,234 of 4,347" into wrapping across lines and the row grows - the exact effect the item span's min-width: 0
   exists to prevent. With nowrap the measured figures hold their full width and the truncating name absorbs all
   of the deficit, which is the intended order of sacrifice. The Engine Health table gets this for free from its
   cell's inherited white-space; this dialog's spans do not inherit one. */
.eng-progress-text[b-fduwpent5c]
{
	font-size: .7rem;
	opacity: .75;
	white-space: nowrap;
}

/* Estimate left, count right, on one line under the bar - see .eh-progress-line on the Engine Health table for
   why flex-end plus an auto margin rather than space-between. */
.eng-progress-line[b-fduwpent5c]
{
	align-items: baseline;
	display: flex;
	gap: .5rem;
	justify-content: flex-end;
}

/* Quieter than the count beside it: the count is measured, the estimate is extrapolated. nowrap for the same
   reason as .eng-progress-text above - "~12m left" must never fold into two lines to make room for a name. */
.eng-progress-eta[b-fduwpent5c]
{
	font-size: .65rem;
	margin-right: auto;
	opacity: .6;
	white-space: nowrap;
}

/* The item being worked on - see .eh-progress-item on the Engine Health table for why flex: 1 + min-width: 0. */
.eng-progress-item[b-fduwpent5c]
{
	flex: 1 1 auto;
	font-size: .65rem;
	min-width: 0;
	opacity: .6;
	text-align: left;
}

.eng-empty[b-fduwpent5c]
{
	border-style: dashed !important;
}

/* Below lg the shared header strip cannot align anything, so each row becomes its own self-labelling block. Same
   markup, no horizontal scroll, and nothing hidden - which is what the old seven-column table could not manage. */
@media (max-width: 991.98px)
{
	/* Five cards into two columns always leaves an odd one out. Putting it at the top rather than the bottom gives
	   1 / 2 / 2 instead of 2 / 2 / 1, which reads as deliberate rather than as a card that failed to pair - and it
	   puts the one card answering "do I need to care about this organization" at full width, which is where it
	   earns the space.

	   ::deep is required, not optional. The children here are DashboardCard components, whose root div carries
	   DashboardCard's OWN scope attribute rather than this component's, so a plain child selector is rewritten to
	   demand an attribute that element will never have and silently matches nothing. */
	.stat-hero-grid[b-fduwpent5c]  .dashboard-card:first-child
	{
		grid-column: 1 / -1;
	}

	.eng-head[b-fduwpent5c]
	{
		display: none;
	}

	.eng-row[b-fduwpent5c]
	{
		border: 1px solid var(--border);
		border-left-width: 3px;
		gap: .35rem .75rem;
		grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
		padding: .6rem .5rem;
	}

	.eng-name-cell[b-fduwpent5c]
	{
		grid-column: 1 / -1;
	}

	.eng-metric[b-fduwpent5c]
	{
		text-align: left;
	}

	/* Restores the column meaning that the hidden header strip used to carry. */
	.eng-metric[b-fduwpent5c]::before
	{
		content: attr(data-label);
		display: block;
		font-size: .65rem;
		letter-spacing: .05em;
		opacity: .55;
		text-transform: uppercase;
	}
}
/* /Components/FloorPlanEditDialog.razor.rz.scp.css */
/* FloorPlanEditDialog Styles */
.floor-plan-dialog-header[b-qo6p1pc8q0] {
	background: linear-gradient(135deg, #6c757d, #495057);
	color: white;
	border-bottom: none;
	padding: 1rem 1.5rem;
}

.floor-plan-dialog-header h5[b-qo6p1pc8q0] {
	color: white;
	margin: 0;
}

.floor-plan-dialog-header .text-muted[b-qo6p1pc8q0] {
	color: rgba(255, 255, 255, 0.8) !important;
}

/* Enhanced close button styling for better visibility */
.btn-close-white[b-qo6p1pc8q0] {
	filter: invert(1) grayscale(100%) brightness(200%);
	background: rgba(255, 255, 255, 0.1);
	border-radius: 50%;
	padding: 0.5rem;
	transition: all 0.2s ease;
}

.btn-close-white:hover[b-qo6p1pc8q0] {
	background: rgba(255, 255, 255, 0.2);
	transform: scale(1.1);
}

/* Dark mode support */
@media (prefers-color-scheme: dark) {
	.floor-plan-dialog-header[b-qo6p1pc8q0] {
		background: linear-gradient(135deg, #343a40, #212529);
	}
	
	.btn-close-white[b-qo6p1pc8q0] {
		filter: invert(1) grayscale(100%) brightness(200%);
		background: rgba(255, 255, 255, 0.15);
	}
	
	.btn-close-white:hover[b-qo6p1pc8q0] {
		background: rgba(255, 255, 255, 0.25);
	}
}

/* Card improvements */
.floor-plan-dialog .card[b-qo6p1pc8q0] {
	border-radius: 0.5rem;
	overflow: hidden;
}

.floor-plan-dialog .card-header[b-qo6p1pc8q0] {
	background: linear-gradient(90deg, #f8f9fa, #e9ecef);
	border-bottom: 1px solid #dee2e6;
}

@media (prefers-color-scheme: dark) {
	.floor-plan-dialog .card[b-qo6p1pc8q0] {
		background: #343a40;
		border-color: #495057;
	}
	
	.floor-plan-dialog .card-header[b-qo6p1pc8q0] {
		background: linear-gradient(90deg, #495057, #343a40);
		border-bottom-color: #6c757d;
		color: #f8f9fa;
	}
	
	.floor-plan-dialog .card-body[b-qo6p1pc8q0] {
		background: #343a40;
		color: #f8f9fa;
	}
}
/* /Components/FloorPlanViewer.razor.rz.scp.css */
/* Floor Plan Viewer Styles */
.floor-plan-viewer[b-0t37plvscd] {
	width: 100%;
}

.floor-plan-container[b-0t37plvscd] {
	position: relative;
	width: 100%;
	background: #f8f9fa;
	border: 1px solid #dee2e6;
	border-radius: 0.375rem;
	overflow: hidden;
}

.floor-plan-image-wrapper[b-0t37plvscd] {
	position: relative;
	width: 100%;
	overflow: hidden;
	background: #f8f9fa;
}

.floor-plan-viewport[b-0t37plvscd] {
	position: relative;
	width: 100%;
	height: 100%;
}

.floor-plan-image[b-0t37plvscd] {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	object-fit: contain;
	display: block;
	z-index: 1; /* Ensure image is visible */
	pointer-events: none;
	user-select: none;
	background: transparent;
}

.device-markers-container[b-0t37plvscd] {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	z-index: 10; /* Ensure markers are above image */
	pointer-events: none; /* Allow clicks to pass through container */
}

.floor-plan-zoom-controls[b-0t37plvscd] {
	position: absolute;
	bottom: 15px;
	right: 15px;
	display: flex;
	flex-direction: column;
	gap: 3px;
	z-index: 20;
}

.zoom-btn[b-0t37plvscd] {
	width: 40px;
	height: 40px;
	background: rgba(255, 255, 255, 0.95);
	border: 1px solid #dee2e6;
	border-radius: 6px;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	font-size: 16px;
	transition: all 0.2s ease;
	backdrop-filter: blur(4px);
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
	color: #495057;
}

.zoom-btn:hover[b-0t37plvscd] {
	background: rgba(255, 255, 255, 1);
	transform: scale(1.05);
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
	color: #007bff;
}

.zoom-btn:active[b-0t37plvscd] {
	transform: scale(0.95);
}

/* Device Marker Styles - Enhanced for better visibility */
.device-marker[b-0t37plvscd] {
	position: absolute;
	z-index: 15;
	cursor: pointer;
	font-size: 24px !important; /* 3x bigger - was 8px default, now 24px */
	text-shadow: 0 0 4px rgba(255, 255, 255, 0.9), 0 0 8px rgba(255, 255, 255, 0.6);
	transition: all 0.2s ease;
	padding: 8px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.95);
	border: 2px solid rgba(0, 0, 0, 0.2);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px !important; /* 3x bigger - was 16px, now 48px */
	height: 48px !important; /* 3x bigger - was 16px, now 48px */
	transform: translate(-50%, -50%); /* Center the marker on coordinates */
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
	pointer-events: auto; /* Re-enable pointer events for markers */
}

.device-marker:hover[b-0t37plvscd] {
	font-size: 28px !important; /* 3x bigger hover state */
	background: rgba(255, 255, 255, 1);
	border-width: 3px;
	box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
	width: 56px !important; /* 3x bigger hover */
	height: 56px !important; /* 3x bigger hover */
	z-index: 25;
	transform: translate(-50%, -50%) scale(1.1);
}

.device-marker.selected[b-0t37plvscd] {
	border-width: 3px;
	box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3);
	z-index: 20;
	animation: pulse-selected-b-0t37plvscd 2s infinite;
}

@keyframes pulse-selected-b-0t37plvscd {
	0%, 100% { 
		box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3);
	}

	50% { 
		box-shadow: 0 0 0 6px rgba(0, 123, 255, 0.2), 0 4px 12px rgba(0, 0, 0, 0.3);
	}
}

.device-marker.fallback-position[b-0t37plvscd] {
	border-color: #ffc107;
	background: rgba(255, 193, 7, 0.1);
	box-shadow: 0 0 0 2px rgba(255, 193, 7, 0.3);
}

/* Device Info Panel Styles */
.device-info-panel[b-0t37plvscd] {
	backdrop-filter: blur(8px);
	border: 1px solid rgba(255, 255, 255, 0.1);
	pointer-events: auto; /* Allow clicking links in the panel */
}

.device-info-panel a[b-0t37plvscd] {
	transition: color 0.2s ease;
}

.device-info-panel a:hover[b-0t37plvscd] {
	opacity: 0.8;
}

/* Dark mode support for floor plan background */
@media (prefers-color-scheme: dark) {
	.floor-plan-container[b-0t37plvscd] {
		background: #212529;
		border-color: #495057;
	}
	
	.floor-plan-image-wrapper[b-0t37plvscd] {
		background: linear-gradient(45deg, #495057 25%, transparent 25%), 
		            linear-gradient(-45deg, #495057 25%, transparent 25%), 
		            linear-gradient(45deg, transparent 75%, #495057 75%), 
		            linear-gradient(-45deg, transparent 75%, #495057 75%);
		background-color: #343a40;
	}

	.zoom-btn[b-0t37plvscd] {
		background: rgba(33, 37, 41, 0.95);
		border-color: #6c757d;
		color: #f8f9fa;
	}

	.zoom-btn:hover[b-0t37plvscd] {
		background: rgba(33, 37, 41, 1);
	}
}

.floor-plan-image[b-0t37plvscd] {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	object-fit: contain;
	display: block;
	z-index: 1; /* Ensure image is visible */
	pointer-events: none;
	user-select: none;
	background: transparent;
}

.device-markers-container[b-0t37plvscd] {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	z-index: 10; /* Ensure markers are above image */
	pointer-events: none; /* Allow clicks to pass through container */
}

.floor-plan-loading[b-0t37plvscd] {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	min-height: 200px;
	color: #6c757d;
	background: #f8f9fa;
	border: 1px solid #dee2e6;
	border-radius: 0.375rem;
}

.no-devices-message[b-0t37plvscd] {
	padding: 2rem;
	text-align: center;
}

/* Device Marker Styles - Enhanced for better visibility - 3x bigger icons */
.device-marker[b-0t37plvscd] {
	position: absolute;
	z-index: 15;
	cursor: pointer;
	font-size: 24px !important; /* 3x bigger - was 8px default, now 24px */
	text-shadow: 0 0 4px rgba(255, 255, 255, 0.9), 0 0 8px rgba(255, 255, 255, 0.6);
	transition: all 0.2s ease;
	padding: 8px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.95);
	border: 2px solid rgba(0, 0, 0, 0.2);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px !important; /* 3x bigger - was 16px, now 48px */
	height: 48px !important; /* 3x bigger - was 16px, now 48px */
	transform: translate(-50%, -50%); /* Center the marker on coordinates */
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
	pointer-events: auto; /* Re-enable pointer events for markers */
}

.device-marker:hover[b-0t37plvscd] {
	font-size: 28px !important; /* 3x bigger hover state */
	background: rgba(255, 255, 255, 1);
	border-width: 3px;
	box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
	width: 56px !important; /* 3x bigger hover */
	height: 56px !important; /* 3x bigger hover */
	z-index: 25;
	transform: translate(-50%, -50%) scale(1.1);
}

/* Status color styles for device markers - Enhanced contrast */
.device-marker.text-success[b-0t37plvscd] {
	color: #198754;
	border-color: #198754;
}

.device-marker.text-danger[b-0t37plvscd] {
	color: #dc3545;
	border-color: #dc3545;
}

.device-marker.text-warning[b-0t37plvscd] {
	color: #fd7e14;
	border-color: #fd7e14;
}

.device-marker.text-black[b-0t37plvscd] {
	color: #000;
	border-color: #000;
}

.device-marker.text-muted[b-0t37plvscd] {
	color: #6c757d;
	border-color: #6c757d;
}

.device-marker.text-info[b-0t37plvscd] {
	color: #0dcaf0;
	border-color: #0dcaf0;
}

/* Dark mode support for device markers */
@media (prefers-color-scheme: dark) {
	.device-marker[b-0t37plvscd] {
		background: rgba(33, 37, 41, 0.95);
		border-color: rgba(255, 255, 255, 0.3);
		text-shadow: 0 0 4px rgba(0, 0, 0, 0.9), 0 0 8px rgba(0, 0, 0, 0.6);
	}

	.device-marker:hover[b-0t37plvscd] {
		background: rgba(33, 37, 41, 1);
		border-color: rgba(255, 255, 255, 0.5);
	}
}

/* Legend Styles */
.device-legend[b-0t37plvscd] {
	position: absolute;
	top: 15px;
	right: 15px;
	background: rgba(255, 255, 255, 0.95);
	border: 1px solid #dee2e6;
	border-radius: 0.5rem;
	padding: 12px;
	min-width: 180px;
	max-width: 250px;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
	font-size: 0.875rem;
	backdrop-filter: blur(8px);
	z-index: 10;
}

/* Dark mode support for legend */
@media (prefers-color-scheme: dark) {
	.device-legend[b-0t37plvscd] {
		background: rgba(33, 37, 41, 0.95);
		border-color: #495057;
		color: #f8f9fa;
	}
}

.legend-header[b-0t37plvscd] {
	margin-bottom: 8px;
	font-weight: 600;
	color: #495057;
	border-bottom: 1px solid #dee2e6;
	padding-bottom: 6px;
	display: flex;
	align-items: center;
}

@media (prefers-color-scheme: dark) {
	.legend-header[b-0t37plvscd] {
		color: #f8f9fa;
		border-bottom-color: #495057;
	}
}

.legend-content[b-0t37plvscd] {
	display: flex;
	flex-direction: column;
	gap: 6px;
}

.legend-type-group[b-0t37plvscd] {
	margin-bottom: 4px;
}

.legend-type-header[b-0t37plvscd] {
	display: flex;
	align-items: center;
	margin-bottom: 2px;
	color: #495057;
}

@media (prefers-color-scheme: dark) {
	.legend-type-header[b-0t37plvscd] {
		color: #f8f9fa;
	}
}

.legend-status-list[b-0t37plvscd] {
	margin-left: 16px;
	display: flex;
	flex-direction: column;
	gap: 1px;
}

.legend-status-item[b-0t37plvscd] {
	display: flex;
	align-items: center;
	gap: 6px;
}

.legend-status-dot[b-0t37plvscd] {
	font-size: 0.8em;
	width: 12px;
	text-align: center;
	line-height: 1;
}

.legend-status-text[b-0t37plvscd] {
	font-size: 0.75em;
	color: #6c757d;
	line-height: 1.2;
}

@media (prefers-color-scheme: dark) {
	.legend-status-text[b-0t37plvscd] {
		color: #adb5bd;
	}
}

/* Responsive adjustments */
@media (max-width: 992px) {
	.device-legend[b-0t37plvscd] {
		position: static;
		margin: 15px auto 0;
		max-width: 100%;
	}

	.floor-plan-zoom-controls[b-0t37plvscd] {
		bottom: 10px;
		right: 10px;
		gap: 2px;
	}

	.zoom-btn[b-0t37plvscd] {
		width: 36px;
		height: 36px;
		font-size: 14px;
	}
}

@media (max-width: 768px) {
	.floor-plan-container[b-0t37plvscd] {
		margin: 0 -15px;
		border-left: none;
		border-right: none;
		border-radius: 0;
	}

	.floor-plan-image-wrapper[b-0t37plvscd] {
		min-height: 250px;
	}

	.device-marker[b-0t37plvscd] {
		font-size: 14px;
		width: 28px;
		height: 28px;
		padding: 4px;
	}

	.device-marker:hover[b-0t37plvscd] {
		font-size: 16px;
		width: 32px;
		height: 32px;
	}

	.device-legend[b-0t37plvscd] {
		margin: 10px;
		padding: 10px;
		min-width: auto;
	}

	.legend-content[b-0t37plvscd] {
		gap: 4px;
	}

	.legend-type-group[b-0t37plvscd] {
		margin-bottom: 2px;
	}

	.legend-status-list[b-0t37plvscd] {
		margin-left: 12px;
	}

	.floor-plan-zoom-controls[b-0t37plvscd] {
		bottom: 8px;
		right: 8px;
	}
}

@media (max-width: 480px) {
	.device-marker[b-0t37plvscd] {
		font-size: 12px;
		width: 24px;
		height: 24px;
	}

	.device-marker:hover[b-0t37plvscd] {
		font-size: 14px;
		width: 28px;
		height: 28px;
	}

	.device-legend[b-0t37plvscd] {
		font-size: 0.8rem;
	}

	.floor-plan-zoom-controls[b-0t37plvscd] {
		bottom: 5px;
		right: 5px;
	}

	.zoom-btn[b-0t37plvscd] {
		width: 28px;
		height: 28px;
		font-size: 11px;
	}
}

/* CSS for floor plan image placeholder when loading fails */
.floor-plan-placeholder[b-0t37plvscd] {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 400px;
	background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
	border: 2px dashed #dee2e6;
	border-radius: 8px;
	width: 100%;
	height: 100%;
}

/* Debug overlay styles */
.debug-info[b-0t37plvscd] {
	position: absolute !important;
	top: 60px !important;
	left: 10px !important;
	background: rgba(0,0,0,0.85) !important;
	color: white !important;
	padding: 10px !important;
	font-size: 11px !important;
	border-radius: 6px !important;
	z-index: 100 !important; /* Ensure debug is always on top */
	max-width: 350px !important;
	font-family: 'Courier New', monospace !important;
	pointer-events: none !important; /* Don't block clicks */
}
/* /Components/SearchBarWithRefresh.razor.rz.scp.css */
.admin-toolbar[b-zbcnk3c8ay]
{
	background: var(--background-color) !important;
}

[b-zbcnk3c8ay] .no-common-ligatures
{
	font-variant-ligatures: no-common-ligatures;
}
/* /Components/Toolbar.razor.rz.scp.css */
.admin-toolbar[b-hdhudxd75u] {
	margin-bottom: 0.5rem;
}

[b-hdhudxd75u] .input-group-text {
	border: 1px solid silver;
	border-radius: 0 5px 5px 0;
	cursor: pointer;
}
/* /Dialogs/CreateOrganizationsDialog.razor.rz.scp.css */
.create-container[b-6ufput9cx9]
{
	min-height: 500px;
}
/* /Dialogs/DifferenceDialog.razor.rz.scp.css */
.title-bar[b-jnjju91aok]
{
    display: flex;
    justify-content: space-around;
}

[b-jnjju91aok] .h-dialog-max
{
    height: calc(100vh - 510px);
}
/* /Layouts/AdminLayout.razor.rz.scp.css */
/* Flex column, bounded to the viewport, so sticky descendants (breadcrumb/toolbar) stick for the
   full scrollable height instead of running out of room after the first viewport-height of scroll
   (see EstateLayout.razor.css for the same pattern). */
.admin-layout[b-9pn4nhx4r6] {
	display: flex;
	flex-direction: column;
	height: 100vh;
	overflow: hidden;
}

.admin-content[b-9pn4nhx4r6] {
	flex: 1;
	min-height: 0;
	overflow: auto;
}
/* /Layouts/DashboardsLayout.razor.rz.scp.css */
.dashboards-layout[b-w8frc05qn7] {
	height: 100%;
	overflow: auto;

	/* No top padding: lets the sticky toolbar sit flush at the very top with no content bleeding above it. */
	padding: 0 1.25rem 1rem;
}
/* /Layouts/EstateLayout.razor.rz.scp.css */
/* Flex column: breadcrumb on top, splitter fills the rest */
.estate-layout[b-30qovlxy7e] {
	display: flex;
	flex-direction: column;
	height: 100vh;
	overflow: hidden;
}

.estate-content[b-30qovlxy7e] {
	flex: 1;
	min-height: 0;
	overflow: hidden;
}

[b-30qovlxy7e] .pdsplitter {
	height: 100%;
	width: 100%;
}

/* Shared timeline styles for all Estate pages */
[b-30qovlxy7e] .timeline .tl-plot-area {
	height: 80px;
}

[b-30qovlxy7e] .admin-toolbar .pd-timeline-toolbar {
	min-width: 150px;
}

[b-30qovlxy7e] .table-panel
{
	height: 100%;
	overflow: auto;
}

[b-30qovlxy7e] .tree-panel
{
	height: 100%;
	overflow-y: auto;
}

[b-30qovlxy7e] .pd-dragitem
{
	background-color: var(--light);
}

[b-30qovlxy7e] .pd-dragpanel {
	background-color: var(--background-color-1);
}

@media (min-width: 641px) {
	article[b-30qovlxy7e] {
		padding-left: 1.5rem !important;
		padding-right: 1.5rem !important;
	}
}
/* /Layouts/FullScreenLayout.razor.rz.scp.css */
.no-overflow[b-ai71emn94w] {
	overflow: hidden;
}

.sidebar[b-ai71emn94w] {
	background-color: #343434;
}

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

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

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

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

@media (max-width: 640.98px) {
	.top-row:not(.auth)[b-ai71emn94w] {
		display: none;
	}

	.top-row.auth[b-ai71emn94w] {
		justify-content: space-between;
	}

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

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

	.sidebar[b-ai71emn94w] {
		width: 250px;
		min-height: 100vh;
		position: sticky;
		top: 0;
	}

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

	.top-row[b-ai71emn94w], article[b-ai71emn94w] {
		padding-left: 2rem !important;
		padding-right: 1.5rem !important;
	}
}
/* /Pages/Admin/MacVendors.razor.rz.scp.css */
[b-ls1et1vz69] input[type="file"]
{
	display: none;
}
/* /Pages/Estate/ConfigChangeHistory.razor.rz.scp.css */
/* moved to shared: DataMagic.Web/Client/Shared/EstateLayout.razor.css */
/* /Pages/Estate/NetworkEvents.razor.rz.scp.css */
.network-events-chart-container[b-jh0tj4zgt9] {
	height: 40vh;
}

[b-jh0tj4zgt9] .pdtoolbarseparator {
	height: 45px;
}

[b-jh0tj4zgt9] #eventTypesDropDown .dropdown-menu {
	width: 350px;
}

[b-jh0tj4zgt9] #eventTypesDropDown ul {
	height: 350px;
}
/* /Pages/Estate/SensorData.razor.rz.scp.css */
.sensor-metric-value[b-gk0knc61v1] {
	width: 50px;
	margin: auto;
	text-align: center;
	padding: 3px;
	border-radius: 5px;
}
/* /Pages/Estate/WanInterfaceUsage.razor.rz.scp.css */
/* moved to shared: DataMagic.Web/Client/Shared/EstateLayout.razor.css */
/* /Pages/Estate/WirelessHealth.razor.rz.scp.css */
.wh-metric-dd .dropdown-toggle[b-n9xuvqeyjm]::after {
	margin-left: 0.6em;
}

.wh-metric-dd .dropdown-menu[b-n9xuvqeyjm] {
	min-width: 240px;
	padding: 6px;
}

.wh-metric-dd .dropdown-item[b-n9xuvqeyjm] {
	padding: 6px 12px;
	border-radius: 6px;
}

.wh-metric-dd .dropdown-item:not(:last-child)[b-n9xuvqeyjm] {
	margin-bottom: 3px;
}

.wh-metric-dd .dropdown-item:not(.active):hover[b-n9xuvqeyjm] {
	background-color: rgba(128, 128, 128, 0.18);
}

/* The option text and icons otherwise fall to a hard-to-read grey in dark mode. Force the theme's
   black-or-white (black in light, white in dark) so they stay legible in both; the active item keeps its
   Bootstrap styling (white on the primary background), so it is excluded. */
.wh-metric-dd .dropdown-item:not(.active)[b-n9xuvqeyjm],
.wh-metric-dd .dropdown-item:not(.active) i[b-n9xuvqeyjm] {
	color: var(--black-or-white) !important;
}

/* The selected option sits on the primary-blue background, so its text and icons must always be white. */
.wh-metric-dd .dropdown-item.active[b-n9xuvqeyjm],
.wh-metric-dd .dropdown-item.active i[b-n9xuvqeyjm] {
	color: #fff !important;
}

.wh-chart-summary[b-n9xuvqeyjm] {
	cursor: pointer;
	font-weight: 500;
}
/* /Pages/FloorPlan.razor.rz.scp.css */
/* Floor Plan Component Scoped Styles */

/* Navigation header with proper dark mode support */
[b-y5tjca7w8p] .floor-plan-header {
    background-color: var(--bs-body-bg, #fff) !important;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
}

/* Dark mode support for header */
@media (prefers-color-scheme: dark) {
    [b-y5tjca7w8p] .floor-plan-header {
        background-color: var(--bs-dark, #212529) !important;
        border-bottom-color: var(--bs-border-color-translucent, rgba(255, 255, 255, 0.125)) !important;
    }
}

/* Toolbar styling with proper background that respects theme */
[b-y5tjca7w8p] .floor-plan-toolbar {
    overflow-x: auto;
    white-space: nowrap;
    min-height: 50px;
    background-color: var(--bs-light, #f8f9fa) !important;
}

/* Dark mode support for toolbar */
@media (prefers-color-scheme: dark) {
    [b-y5tjca7w8p] .floor-plan-toolbar {
        background-color: var(--bs-gray-800, #343a40) !important;
        border-bottom-color: var(--bs-border-color-translucent, rgba(255, 255, 255, 0.125)) !important;
    }
}

[b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar {
    height: 4px;
}

[b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar-track {
    background: var(--bs-gray-200, #f1f1f1);
}

[b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar-thumb {
    background: var(--bs-gray-400, #c1c1c1);
    border-radius: 2px;
}

[b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar-thumb:hover {
    background: var(--bs-gray-500, #a8a8a8);
}

/* Dark mode scrollbar */
@media (prefers-color-scheme: dark) {
    [b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar-track {
        background: var(--bs-gray-700, #495057);
    }
    
    [b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar-thumb {
        background: var(--bs-gray-500, #6c757d);
    }
    
    [b-y5tjca7w8p] .floor-plan-toolbar::-webkit-scrollbar-thumb:hover {
        background: var(--bs-gray-400, #adb5bd);
    }
}

/* Make device icons 3x bigger - Enhanced for better visibility with dark mode support */
[b-y5tjca7w8p] .device-marker {
    font-size: 24px !important; /* 3x bigger - was 8px default, now 24px */
    width: 48px !important; /* 3x bigger - was 16px, now 48px */
    height: 48px !important; /* 3x bigger - was 16px, now 48px */
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    border-radius: 50% !important;
    position: absolute !important;
    transform: translate(-50%, -50%) !important;
    cursor: pointer !important;
    transition: all 0.2s ease !important;
    z-index: 100 !important;
    background: rgba(var(--bs-body-bg-rgb, 255, 255, 255), 0.95) !important;
    border: 2px solid rgba(var(--bs-border-color-rgb, 0, 0, 0), 0.2) !important;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2) !important;
    text-shadow: 0 0 4px rgba(var(--bs-body-bg-rgb, 255, 255, 255), 0.9), 0 0 8px rgba(var(--bs-body-bg-rgb, 255, 255, 255), 0.6) !important;
}

/* Dark mode device markers */
@media (prefers-color-scheme: dark) {
    [b-y5tjca7w8p] .device-marker {
        background: rgba(var(--bs-dark-rgb, 33, 37, 41), 0.95) !important;
        border: 2px solid rgba(var(--bs-border-color-rgb, 255, 255, 255), 0.3) !important;
        text-shadow: 0 0 4px rgba(0, 0, 0, 0.9), 0 0 8px rgba(0, 0, 0, 0.6) !important;
    }
}

[b-y5tjca7w8p] .device-marker:hover {
    font-size: 28px !important; /* 3x bigger hover state */
    width: 56px !important; /* 3x bigger hover */
    height: 56px !important; /* 3x bigger hover */
    transform: translate(-50%, -50%) scale(1.1) !important;
    z-index: 101 !important;
    background: rgba(var(--bs-body-bg-rgb, 255, 255, 255), 1) !important;
    border-width: 3px !important;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4) !important;
}

/* Dark mode hover */
@media (prefers-color-scheme: dark) {
    [b-y5tjca7w8p] .device-marker:hover {
        background: rgba(var(--bs-dark-rgb, 33, 37, 41), 1) !important;
        border-color: rgba(var(--bs-border-color-rgb, 255, 255, 255), 0.5) !important;
    }
}

[b-y5tjca7w8p] .device-marker.selected {
    border: 3px solid var(--bs-primary, #0d6efd) !important;
    box-shadow: 0 0 0 2px var(--bs-primary, #0d6efd), 0 4px 12px rgba(0, 0, 0, 0.3) !important;
    z-index: 102 !important;
    animation: pulse-selected-b-y5tjca7w8p 2s infinite !important;
}

@keyframes pulse-selected-b-y5tjca7w8p {
    0%, 100% { 
        box-shadow: 0 0 0 2px var(--bs-primary, #0d6efd), 0 4px 12px rgba(0, 0, 0, 0.3);
    }

    50% { 
        box-shadow: 0 0 0 4px rgba(var(--bs-primary-rgb, 13, 110, 253), 0.5), 0 4px 12px rgba(0, 0, 0, 0.3);
    }
}

/* Ensure buttons have proper pointer cursor */
[b-y5tjca7w8p] .floor-plan-toolbar .btn,
[b-y5tjca7w8p] .floor-plan-toolbar button,
[b-y5tjca7w8p] .floor-plan-toolbar a {
    cursor: pointer !important;
    user-select: none;
}

[b-y5tjca7w8p] .floor-plan-toolbar .btn:disabled,
[b-y5tjca7w8p] .floor-plan-toolbar button:disabled {
    cursor: not-allowed !important;
}

/* Prevent toolbar text selection */
[b-y5tjca7w8p] .floor-plan-toolbar {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

/* Ensure proper button spacing and alignment */
[b-y5tjca7w8p] .floor-plan-toolbar .btn {
    margin-right: 4px;
}

[b-y5tjca7w8p] .floor-plan-toolbar .btn:last-child {
    margin-right: 0;
}

/* Ensure main container has transparent background to respect theme */
.position-relative[b-y5tjca7w8p] {
    background: transparent !important;
}

/* Ensure proper theme support for main content area */
div[style*="height: 100vh; width: 100vw"][b-y5tjca7w8p] {
    background: transparent !important;
}
/* /Pages/SqlStudio.razor.rz.scp.css */
.ncalc-results[b-6as6lfzteq] {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    line-height: 1.5;
}

.ncalc-results .success[b-6as6lfzteq] {
    color: #155724;
    background-color: #d4edda;
    border: 1px solid #c3e6cb;
    padding: 8px 12px;
    border-radius: 4px;
    margin-bottom: 12px;
    font-weight: 500;
}

.ncalc-results .error[b-6as6lfzteq] {
    color: #721c24;
    background-color: #f8d7da;
    border: 1px solid #f5c6cb;
    padding: 8px 12px;
    border-radius: 4px;
    margin-bottom: 12px;
    font-weight: 500;
}

.ncalc-results .error-detail[b-6as6lfzteq] {
    color: #721c24;
    background-color: #f8d7da;
    border: 1px solid #f5c6cb;
    padding: 6px 10px;
    border-radius: 4px;
    margin-bottom: 8px;
    font-size: 0.9em;
    font-style: italic;
}

.ncalc-results .info[b-6as6lfzteq] {
    color: #0c5460;
    background-color: #d1ecf1;
    border: 1px solid #bee5eb;
    padding: 6px 10px;
    border-radius: 4px;
    margin-bottom: 8px;
    font-size: 0.85em;
}

.ncalc-results .result-section[b-6as6lfzteq] {
    background-color: #f8f9fa;
    border: 1px solid #dee2e6;
    border-radius: 6px;
    padding: 16px;
    margin-bottom: 16px;
}

.ncalc-results .result-section h4[b-6as6lfzteq] {
    margin: 0 0 12px 0;
    color: #495057;
    font-size: 1.1em;
    font-weight: 600;
}

.ncalc-results .result-value[b-6as6lfzteq] {
    font-family: 'Courier New', Consolas, monospace;
    font-size: 1.2em;
    font-weight: bold;
    color: #007bff;
    background-color: #fff;
    border: 1px solid #ced4da;
    border-radius: 4px;
    padding: 12px;
    margin-bottom: 8px;
    word-break: break-all;
}

.ncalc-results .result-type[b-6as6lfzteq] {
    font-size: 0.85em;
    color: #6c757d;
    font-style: italic;
}

.ncalc-results .expression-info[b-6as6lfzteq] {
    border-top: 1px solid #dee2e6;
    padding-top: 12px;
    margin-top: 16px;
}

.ncalc-results .error-results[b-6as6lfzteq] {
    border-left: 4px solid #dc3545;
    padding-left: 16px;
}

/* Specific styling for different error types */
.ncalc-results .error-results .error:has-text("Invalid Code")[b-6as6lfzteq] {
    border-left-color: #fd7e14; /* Orange for invalid code */
}

.ncalc-results .error-results .error:has-text("Runtime Error")[b-6as6lfzteq] {
    border-left-color: #dc3545; /* Red for runtime errors */
}

.ncalc-results .error-results .error:has-text("Timed Out")[b-6as6lfzteq] {
    border-left-color: #ffc107; /* Yellow for timeouts */
    background-color: #fff3cd;
    color: #856404;
    border-color: #ffeaa7;
}

.ncalc-results .error-help[b-6as6lfzteq] {
    background-color: #f8f9fa;
    border: 1px solid #dee2e6;
    border-radius: 4px;
    padding: 16px;
    margin-top: 16px;
}

.ncalc-results .error-help h5[b-6as6lfzteq] {
    color: #495057;
    font-size: 1em;
    margin: 0 0 8px 0;
    font-weight: 600;
}

.ncalc-results .error-help ul[b-6as6lfzteq] {
    margin: 0 0 16px 0;
    padding-left: 20px;
}

.ncalc-results .error-help li[b-6as6lfzteq] {
    margin-bottom: 4px;
}

.ncalc-results .error-help code[b-6as6lfzteq] {
    background-color: #e9ecef;
    color: #495057;
    padding: 2px 4px;
    border-radius: 3px;
    font-family: 'Courier New', Consolas, monospace;
    font-size: 0.9em;
}

/* Special styling for timeout errors */
.ncalc-results .timeout-error[b-6as6lfzteq] {
    background-color: #fff3cd;
    border-color: #ffeaa7;
    color: #856404;
}

.ncalc-results .timeout-error .error[b-6as6lfzteq] {
    background-color: #fff3cd;
    border-color: #ffeaa7;
    color: #856404;
}

/* Invalid code styling */
.ncalc-results .invalid-code-error[b-6as6lfzteq] {
    background-color: #ffeaa0;
    border-color: #fd7e14;
}

.ncalc-results .invalid-code-error .error[b-6as6lfzteq] {
    background-color: #ffeaa0;
    border-color: #fd7e14;
    color: #8a4a00;
}

/* Runtime error styling */
.ncalc-results .runtime-error[b-6as6lfzteq] {
    background-color: #f8d7da;
    border-color: #dc3545;
}

.ncalc-results .runtime-error .error[b-6as6lfzteq] {
    background-color: #f8d7da;
    border-color: #dc3545;
    color: #721c24;
}

/* PDStudio Demo Page Styling */

/* Demo container for PDStudio */
.pd-studio-demo-container[b-6as6lfzteq] {
    height: 70vh;
    min-height: 500px; /* Minimum height for usability */
    border: 1px solid var(--bs-border-color);
    border-radius: 0.375rem;
    overflow: hidden;
    position: relative;
    display: flex;
    flex-direction: column;
}

/* Ensure PDStudio fills the demo container */
.pd-studio-demo-container .pd-studio[b-6as6lfzteq] {
    height: 100%;
    width: 100%;
    flex: 1;
}

/* Fix any splitter issues within the demo container */
.pd-studio-demo-container .pd-splitter[b-6as6lfzteq] {
    height: 100%;
    flex: 1;
}

.pd-studio-demo-container .pd-split-panel[b-6as6lfzteq] {
    min-height: 0;
    overflow: hidden;
}

[b-6as6lfzteq] .pd-studio-results
{
	border-radius: 0!important;
}

/* Enhanced responsive design for demo */
@media (max-width: 992px)
{
	.pd-studio-demo-container[b-6as6lfzteq]
	{
		height: 60vh;
		min-height: 450px;
	}
}

@media (max-width: 768px) {
    .pd-studio-demo-container[b-6as6lfzteq] {
        height: 55vh;
        min-height: 400px;
    }
}

@media (max-width: 576px) {
    .pd-studio-demo-container[b-6as6lfzteq] {
        height: 50vh;
        min-height: 350px;
    }
}

/* Demo page specific overrides */
.container-fluid .row .col-12 .pd-studio-demo-container[b-6as6lfzteq] {
    margin: 0; /* Remove any unwanted margins */
    padding: 0; /* Remove any unwanted padding */
}
/* /Pages/Widgets/NetworkEventsWidget.razor.rz.scp.css */
.widget-error-title[b-353ejjgoj9] {
	text-align: center;
}

.widget-error-message[b-353ejjgoj9] {
	text-align: center;
}
