/* /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/DeviceCardAdd.razor.rz.scp.css */
/* /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;
}

.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 */
