/* /Components/Controls/Devices/DeviceCard.razor.rz.scp.css */
/* Base positioning/sizing is set inline in DeviceCard.razor - a MudBlazor pa-* spacing utility
   on the header uses !important and would otherwise silently override any padding set here. */
.heartbeat.active[b-n9733zga2x] {
        background: #2ecc71;
        animation: pingPulse-b-n9733zga2x 1450ms ease-out;
    }

@keyframes pingPulse-b-n9733zga2x {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(46,204,113,.6);
    }

    30% {
        transform: scale(1.05);
    }

    100% {
        transform: scale(1);
        box-shadow: 0 0 0 8px rgba(46,204,113,0);
    }
}
/* /Components/Controls/Devices/DeviceUptimeStrip.razor.rz.scp.css */
/* Reserves the line the hover/tap readout is drawn into, so showing it never shifts the card. */
.uptime-strip-root[b-7dyvpxxzr4] {
    width: 100%;
    padding-top: 1.15rem;
}

/* Bars are flex-sized rather than fixed-width so the strip fits whatever the card gives it -
   nothing here has to know the container's pixel width. The strip is the readout's positioning
   context. */
.uptime-strip[b-7dyvpxxzr4] {
    position: relative;
    display: flex;
    align-items: stretch;
}

/* Each bar is a real button so that tapping one focuses it: a title attribute never appears on a
   touch device, and a Blazor Server mouse handler on every one of 60 bars per card would be a
   round trip each. Kept out of the tab order - 60 stops per card would make the page unusable to
   get past - but still focusable by pointer, which is what drives the readout below. */
/* The separation between bars is a transparent right border rather than a flex gap, so that every
   pixel of the strip belongs to a bar. With a gap, bars are about 5px wide and the 2px between them
   swallow a fair share of taps - and a tap that lands on nothing dismisses the readout instead of
   moving it. background-clip keeps the fill off the border, so it still looks like a gap. */
.uptime-bar[b-7dyvpxxzr4] {
    flex: 1 1 0;
    min-width: 0;
    /* MudBlazor's reset sets `button { position: relative }`. Left alone, each bar becomes the
       containing block for its own readout below, which then sizes to the bar - about 10px - and
       clips to a single character. */
    position: static;
    padding: 0;
    border: 0;
    border-right: 2px solid transparent;
    background-clip: padding-box;
    border-radius: 2px;
    appearance: none;
    cursor: pointer;
    background-color: var(--mud-palette-lines-default);
    -webkit-tap-highlight-color: transparent;
}

.uptime-bar:last-child[b-7dyvpxxzr4] {
    border-right: 0;
}

/* An inset shadow rather than filter: brightness() on purpose. A filter makes the element a
   containing block for its own absolutely positioned descendants, which would size the readout
   below to the 5px bar instead of to the strip. */
.uptime-bar:hover[b-7dyvpxxzr4],
.uptime-bar:focus[b-7dyvpxxzr4] {
    outline: none;
    box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.28);
}

/* Drawn into the reserved line above the strip and spanning its full width, so a bar at either end
   can't push its own readout off the edge of the card. */
.uptime-bar:hover[b-7dyvpxxzr4]::after,
.uptime-bar:focus[b-7dyvpxxzr4]::after {
    content: attr(data-tip);
    position: absolute;
    left: 0;
    right: 0;
    bottom: calc(100% + 4px);
    text-align: center;
    font-size: 0.65rem;
    line-height: 1.15rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: var(--mud-palette-text-primary);
    pointer-events: none;
}

/* A bar stays focused after it is tapped or clicked, so its readout is still up when the pointer
   moves to another bar - and both are drawn into the same reserved line spanning the whole strip,
   so the two texts land on top of each other. While the pointer is over the strip the hovered bar
   wins; the focused one returns once the pointer leaves, which is what keeps the readout on screen
   after a tap. Bars tile the strip with no gaps, so hovering it always means hovering a bar. */
.uptime-strip:hover .uptime-bar:focus:not(:hover)[b-7dyvpxxzr4]::after {
    content: none;
}

.uptime-bar--operational[b-7dyvpxxzr4] {
    background-color: var(--mud-palette-success);
}

.uptime-bar--degraded[b-7dyvpxxzr4] {
    background-color: var(--mud-palette-warning);
}

.uptime-bar--outage[b-7dyvpxxzr4] {
    background-color: var(--mud-palette-error);
}

.uptime-bar--nodata[b-7dyvpxxzr4] {
    background-color: var(--mud-palette-lines-default);
}

.uptime-legend[b-7dyvpxxzr4] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 8px;
    font-size: 0.65rem;
    line-height: 1;
    color: var(--mud-palette-text-secondary);
}

.uptime-rail[b-7dyvpxxzr4] {
    flex: 1 1 0;
    height: 1px;
    background-color: var(--mud-palette-lines-default);
}

.uptime-ratio[b-7dyvpxxzr4] {
    font-weight: 600;
    color: var(--mud-palette-text-primary);
}

/* Phones (below MudBlazor's sm breakpoint). */
@media (max-width: 599.98px) {
    .uptime-legend[b-7dyvpxxzr4] {
        gap: 6px;
        font-size: 0.6rem;
    }
}
/* /Components/Controls/Jobs/JobCard.razor.rz.scp.css */
/* /Components/Controls/Jobs/JobsStatusIndicator.razor.rz.scp.css */
.jobs-gear-icon[b-6f1ajgwv9o] {
    position: relative;
    display: inline-flex;
    width: 26px;
    height: 26px;
    align-items: center;
    justify-content: center;
}

.msym[b-6f1ajgwv9o] {
    font-family: 'Material Symbols Outlined';
    font-weight: normal;
    font-style: normal;
    line-height: 1;
    -webkit-font-smoothing: antialiased;
    display: inline-block;
}

.idle-icon[b-6f1ajgwv9o] {
    font-size: 22px;
    font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}

.gear-big[b-6f1ajgwv9o], .gear-small[b-6f1ajgwv9o] {
    position: absolute;
    display: none;
    color: var(--mud-palette-info);
    font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}

.gear-big[b-6f1ajgwv9o] {
    left: 0;
    bottom: 0;
    font-size: 18px;
}

.gear-small[b-6f1ajgwv9o] {
    right: -2px;
    top: -2px;
    font-size: 12px;
}

.jobs-gear-icon.running .idle-icon[b-6f1ajgwv9o] {
    display: none;
}

.jobs-gear-icon.running .gear-big[b-6f1ajgwv9o] {
    display: inline-block;
    animation: jobs-gear-spin-cw-b-6f1ajgwv9o 3.2s linear infinite;
}

.jobs-gear-icon.running .gear-small[b-6f1ajgwv9o] {
    display: inline-block;
    animation: jobs-gear-spin-ccw-b-6f1ajgwv9o 1.7s linear infinite;
}

@keyframes jobs-gear-spin-cw-b-6f1ajgwv9o {
    to {
        transform: rotate(360deg);
    }
}

@keyframes jobs-gear-spin-ccw-b-6f1ajgwv9o {
    to {
        transform: rotate(-360deg);
    }
}

.jobs-badge[b-6f1ajgwv9o] {
    position: absolute;
    top: -4px;
    right: -6px;
    font-size: 0.6rem;
    line-height: 1;
    padding: 0.2em 0.45em;
    border-radius: 999px;
    background-color: var(--mud-palette-primary);
    color: var(--mud-palette-primary-text);
}

.jobs-status-header[b-6f1ajgwv9o] {
    padding: 0.4rem 1rem 0.25rem;
    font-weight: 600;
    font-size: 0.85rem;
}

.jobs-status-empty[b-6f1ajgwv9o] {
    padding: 0.25rem 1rem 0.5rem;
    color: var(--mud-palette-text-secondary);
}

.jobs-status-muted[b-6f1ajgwv9o] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.78rem;
}

.jobs-status-error[b-6f1ajgwv9o] {
    color: var(--mud-palette-error);
    font-size: 0.8rem;
}

.jobs-status-row[b-6f1ajgwv9o] {
    /* 380px content + padding on desktop, but never wider than the viewport minus a margin on phones. */
    width: min(calc(380px + 2rem), calc(100vw - 32px));
    box-sizing: border-box;
    padding: 0.5rem 1rem;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.jobs-status-row:last-child[b-6f1ajgwv9o] {
    border-bottom: none;
}

.jobs-status-grid[b-6f1ajgwv9o] {
    display: grid;
    grid-template-columns: 1fr auto;
    column-gap: 0.75rem;
    align-items: start;
}

.jobs-status-info[b-6f1ajgwv9o] {
    min-width: 0;
}

.jobs-status-info > div[b-6f1ajgwv9o] {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Job name and trigger wrap in full rather than truncating - only the group/fire-id/error lines clip. */
.jobs-status-info > .jobs-status-wrap[b-6f1ajgwv9o] {
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    overflow-wrap: break-word;
}

.jobs-status-badge[b-6f1ajgwv9o] {
    white-space: nowrap;
}
/* /Components/Controls/ModalHeaderImage.razor.rz.scp.css */
.imageheader-userselect[b-4qqapcwe75] {
    background-image: url("../img/settings.jpg");
}

.imageheader-api-error[b-4qqapcwe75] {
    background-image: url("../img/api-error.jpg");
}

.imageheader-delete[b-4qqapcwe75] {
    background-image: url("../img/delete.jpg");
}

.imageheader-edit[b-4qqapcwe75] {
    background-image: url("../img/edit.jpg");
}

.imageheader-add[b-4qqapcwe75] {
    background-image: url("../img/add.jpg");
}

.imageheader-profilepicture[b-4qqapcwe75] {
    background-image: url("../img/defaultprofilepicture.png");
}
/* /Components/Controls/PageHeaderImage.razor.rz.scp.css */
.imageheader-logs[b-krixigma5v] {
    background-image: url("../img/register.jpg");
}

.imageheader-methods[b-krixigma5v] {
    background-image: url("../img/register.jpg");
}

.imageheader-audit[b-krixigma5v] {
    background-image: url("../img/register.jpg");
}

.imageheader-authproviders[b-krixigma5v] {
    background-image: url("../img/settings.jpg");
}

.imageheader-forgotpassword[b-krixigma5v] {
    background-image: url("../img/forgotpassword.jpg");
}

.imageheader-login[b-krixigma5v] {
    background-image: url("../img/login.jpg");
}

.imageheader-notificationchannels[b-krixigma5v] {
    background-image: url("../img/settings.jpg");
}

.imageheader-register[b-krixigma5v] {
    background-image: url("../img/register.jpg");
}

.imageheader-resetpassword[b-krixigma5v] {
    background-image: url("../img/forgotpassword.jpg");
}

.imageheader-settings[b-krixigma5v] {
    background-image: url("../img/settings.jpg");
}

.imageheader-profilepicture[b-krixigma5v] {
    background-image: url("../img/defaultprofilepicture.png");
}

.imageheader-404[b-krixigma5v] {
    background-image: url("../img/404.jpg");
    background-repeat: no-repeat;
    background-position: center;
}
/* /Components/Controls/StackedDateTime.razor.rz.scp.css */
.stacked-datetime-part[b-88cmcw96lq] {
    white-space: nowrap;
}

/* Phones (below MudBlazor's sm breakpoint): date and time above each other. */
@media (max-width: 599.98px) {
    .stacked-datetime-part[b-88cmcw96lq] {
        display: block;
    }
}
/* /Components/Controls/User/AuthProviderIcon.razor.rz.scp.css */
.auth-provider-icon[b-7v9xudhvhm] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1rem;
    height: 1rem;
    font-size: 1rem;
    line-height: 1;
    margin-right: 0.375rem;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
.howl-footer[b-eke9ap8ix4] {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1000;
    min-height: var(--howl-footer-height);
    box-sizing: border-box;
    padding: 2px 0;
    background-color: var(--mud-palette-surface);
    border-top: 1px solid var(--mud-palette-lines-default);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
}
/* /Components/Layout/NavMenu.razor.rz.scp.css */
/*.navbar-toggler {
    appearance: none;
    cursor: pointer;
    width: 3.5rem;
    height: 2.5rem;
    color: white;
    position: absolute;
    top: 0.5rem;
    right: 1rem;
    border: 1px solid rgba(255, 255, 255, 0.1);
    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.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
}

.navbar-toggler:checked {
    background-color: rgba(255, 255, 255, 0.5);
}

.top-row {
    height: 3.5rem;
    background-color: rgba(0,0,0,0.4);
}

.navbar-brand {
    font-size: 1.1rem;
}

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

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

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

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

.nav-item {
    font-size: 0.9rem;
    padding-bottom: 0.5rem;
}

    .nav-item:first-of-type {
        padding-top: 1rem;
    }

    .nav-item:last-of-type {
        padding-bottom: 1rem;
    }

    .nav-item ::deep .nav-link {
        color: #d7d7d7;
        background: none;
        border: none;
        border-radius: 4px;
        height: 3rem;
        display: flex;
        align-items: center;
        line-height: 3rem;
        width: 100%;
    }

.nav-item ::deep a.active {
    background-color: rgba(255,255,255,0.37);
    color: white;
}

.nav-item ::deep .nav-link:hover {
    background-color: rgba(255,255,255,0.1);
    color: white;
}

.nav-scrollable {
    display: none;
}

.navbar-toggler:checked ~ .nav-scrollable {
    display: block;
}

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

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

        /* Allow sidebar to scroll for tall menus */
        /*height: calc(100vh - 3.5rem);
        overflow-y: auto;
    }
}*/
/* /Components/Pages/Api/ApiDashboard.razor.rz.scp.css */
.api-dashboard-table[b-498xb5573e] {
    table-layout: fixed;
    width: 100%;
}

.api-col-started[b-498xb5573e] {
    width: 200px;
    max-width: 200px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.api-col-action[b-498xb5573e] {
    min-width: 260px;
    max-width: 520px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.api-col-small[b-498xb5573e] {
    width: 120px;
    max-width: 120px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.api-col-tiny[b-498xb5573e] {
    width: 60px;
    max-width: 60px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* /Components/Pages/Api/ApiLogs.razor.rz.scp.css */
.api-dashboard-table[b-4kmwcebxne] {
    table-layout: fixed;
    width: 100%;
}

.api-col-started[b-4kmwcebxne] {
    width: 220px;
    max-width: 220px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.api-col-action[b-4kmwcebxne] {
    min-width: 260px;
    max-width: 520px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.api-col-small[b-4kmwcebxne] {
    width: 120px;
    max-width: 120px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.api-col-tiny[b-4kmwcebxne] {
    width: 60px;
    max-width: 60px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* /Components/Pages/Audit/AuditUser.razor.rz.scp.css */
/* /Components/Pages/ChargeSessions/EnergyPrices.razor.rz.scp.css */
.energy-day-group[b-rnyshnxvq8]  input[type="date"] {
    height: calc(2.25rem + 2px);
    min-height: calc(2.25rem + 2px);
}

.energy-day-group[b-rnyshnxvq8]  .form-control {
    height: calc(2.25rem + 2px);
}
/* /Components/Pages/Devices/Devices.razor.rz.scp.css */
/* /Components/Pages/User/AuthenticationProviders.razor.rz.scp.css */
.auth-provider-list-icon[b-2tio0p0ly6] {
    width: 1.5rem;
    margin-left: 0.375rem;
    display: flex;
    align-items: center;
    justify-content: left;
}
/* /Components/Pages/User/ForgotPassword.razor.rz.scp.css */
/* /Components/Pages/User/Login.razor.rz.scp.css */
/* /Components/Pages/User/NotificationChannels.razor.rz.scp.css */
/* /Components/Pages/User/Register.razor.rz.scp.css */
/* /Components/Pages/User/ResetPassword.razor.rz.scp.css */
/* /Components/Pages/User/Settings.razor.rz.scp.css */
.profilepicture-wrapper[b-s809c13ocb] {
    position: relative;
    width: 125px;
    height: 125px;
    margin-bottom: 12px;
}

.profilepicture-wrapper[b-s809c13ocb]  .imageheader {
    width: 125px;
    height: 125px;
    margin: 0;
    border-radius: 50%;
    overflow: hidden;
}

.profilepicture-wrapper[b-s809c13ocb]  .imageheader-circleborder-page {
    width: 125px;
    height: 125px;
    margin: 0;
}

.profilepicture-edit-overlay[b-s809c13ocb] {
    position: absolute;
    inset: 0;
    z-index: 10;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 125px;
    height: 125px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background-color: rgba(0, 0, 0, 0.45);
    color: #fff;
    font-size: 1.75rem;
    opacity: 0;
    cursor: pointer;
    transition: opacity .18s ease-in-out;
}

.profilepicture-wrapper:hover .profilepicture-edit-overlay[b-s809c13ocb],
.profilepicture-wrapper:focus-within .profilepicture-edit-overlay[b-s809c13ocb] {
    opacity: 1;
}

/* Touch devices have no hover, so show the pencil as a small badge in the corner instead of
   dimming the whole picture. */
@media (hover: none) {
    .profilepicture-edit-overlay[b-s809c13ocb] {
        inset: auto 4px 4px auto;
        width: 36px;
        height: 36px;
        font-size: 1.1rem;
        opacity: 1;
    }
}
/* /Components/Pages/_404.razor.rz.scp.css */
