
/*Global variables and settings across modes*/

:root {
    --lpx-logo: url('/api/app/tenant-details/company-logo') !important;
    --lpx-logo-icon: url('/images/logo/mark.svg') !important;
    /* -- */
    --lpx-primary-rgb: var(--spw-midnight-blue-rgb);
    --lpx-secondary-rgb: 108,93,211;
    --lpx-brand-rgb: var(--spw-safety-orange-rbg) !important;
    --lpx-success-rgb: 79,191,103;
    --lpx-info-rgb: 67,138,167;
    --lpx-warning-rgb: 255,159,56;
    --lpx-danger-rgb: var(--spw-vivid-orange-rgb);
    --lpx-text-white-rgb: 255,255,255;
    --lpx-logo-reverse: var(--logo-reverse);
    /* -- */
    --lpx-primary: var(--spw-midnight-blue);
    --lpx-secondary: #6c5dd3;
    --lpx-success: #4fbf67;
    --lpx-info: #438aa7;
    --lpx-warning: #ff9f38;
    --lpx-danger: var(--spw-vivid-orange);
    --lpx-brand: var(--spw-safety-orange) !important;
    --lpx-brand-text: #fff;
    --lpx-container-active-text: #fff;
    --lpx-text-white: #fff;
    --lpx-radius: 0.5rem;
    /* -- */
    --lpx-shadow: 0 0 20px 0 rgba(76, 87, 125, 0.02);
    /* -- */
    --bs-blue: #0d6efd;
    --bs-indigo: #6610f2;
    --bs-purple: #6f42c1;
    --bs-pink: #d63384;
    --bs-red: #dc3545;
    --bs-orange: #fd7e14;
    --bs-yellow: #ffc107;
    --bs-green: #198754;
    --bs-teal: #20c997;
    --bs-cyan: #0dcaf0;
    --bs-black: #000;
    --bs-white: #fff;
    --bs-gray: #6c757d;
    --bs-gray-dark: #343a40;
    --bs-gray-100: #f8f9fa;
    --bs-gray-200: #e9ecef;
    --bs-gray-300: #dee2e6;
    --bs-gray-400: #ced4da;
    --bs-gray-500: #adb5bd;
    --bs-gray-600: #6c757d;
    --bs-gray-700: #495057;
    --bs-gray-800: #343a40;
    --bs-gray-900: #212529;
    --bs-primary: #355dff;
    --bs-secondary: #6c5dd3;
    --bs-success: #4fbf67;
    --bs-info: #438aa7;
    --bs-warning: #ff9f38;
    --bs-danger: var(--lpx-danger);
    /* -- */
    --bs-primary-rgb: 53, 93, 255;
    --bs-secondary-rgb: 108, 93, 211;
    --bs-success-rgb: 79, 191, 103;
    --bs-info-rgb: 67, 138, 167;
    --bs-warning-rgb: 255, 159, 56;
    --bs-danger-rgb: var(--lpx-danger-rgb);
    /* -- */
    --bs-white-rgb: 255, 255, 255;
    --bs-black-rgb: 0, 0, 0;
    /* -- */
    --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
    --bs-body-font-family: Inter, sans-serif;
    --bs-body-font-size: 0.875rem;
    --bs-body-font-weight: 400;
    --bs-body-line-height: 1.5;
    /* -- */
    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);
    --bs-border-radius: 0.5rem;
    --bs-border-radius-sm: 0.4375rem;
    --bs-border-radius-lg: 0.5625rem;
    --bs-border-radius-xl: 1rem;
    --bs-border-radius-2xl: 2rem;
    --bs-border-radius-pill: 50rem;
    --bs-link-color: #355dff;
    --bs-link-hover-color: #2a4acc;
    --bs-code-color: #d63384;
    --bs-highlight-bg: #fff3cd;
    /* -- */
    --spw-navy-blue: #092c44;
    --spw-midnight-blue: #1e3f64;
    --spw-vivid-orange: #e84a36;
    --spw-safety-orange: #fc8240;
    --spw-cedar: #675f5e;
    --spw-sand: #f2ecea;
    /* -- */
    --spw-navy-blue-rgb: 9,44,68;
    --spw-midnight-blue-rgb: 30,63,100;
    --spw-vivid-orange-rgb: 232,74,54;
    --spw-safety-orange-rgb: 252,130,64;
    --spw-cedar-rgb: 103,95,94;
    --spw-sand-rgb: 242,236,234;
}


#blazor-error-ui {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }

/* 
    blazorise picker workaround for https://github.com/Megabit/Blazorise/issues/4917
*/
.flatpickr-calendar.static {
    top: unset !important;
}

.login-brand-logo {
    background-image: url('/api/app/tenant-details/company-logo');
    background-repeat: no-repeat;
    height: 80px;
    width: 250px;
    background-size: cover;
}

:root .lpx-theme-dark .login-brand-logo {
    background-image: url('/api/app/tenant-details/company-logo');
    background-repeat: no-repeat;
    height: 80px;
    width: 250px;
    background-size: cover;
}

:root .lpx-theme-dim .login-brand-logo, :root .lpx-theme-light .login-brand-logo {
    background-image: url('/api/app/tenant-details/company-logo');
    background-repeat: no-repeat;
    height: 80px;
    width: 250px;
    background-size: cover;
}

/* Your Global Styles */

/************* CUSTOM CODE ********************/

.lpx-logo-container {
    padding: 10px !important;
}

.lpx-brand-logo {
    background-image: var(--lpx-logo) !important;
    background-repeat: no-repeat;
    background-size: 150px 48px !important;
    background-position: left 0px;
    display: block;
    height: 48px !important;
}

#lpx-sidebar .lpx-brand-logo {
    background-size: contain !important;
    height: auto !important;
    min-height: 48px !important;
}

.lpx-theme-dark .modal-footer .btn-outline-primary {
    color: var(--bs-btn-border-color) !important;
}

/*.lpx-sidebar-container .lpx-brand-logo {
    background-image: var(--lpx-logo-icon);
}

#lpx-wrapper.hover-trigger .lpx-brand-logo, .lpx-sidebar-container:hover .lpx-brand-logo {
    background-image: var(--lpx-logo);
    background-size: 150px 48px !important;
}*/
:root {
    --lpx-logo: url('/api/app/tenant-details/company-logo') !important;
    --lpx-logo-icon: url('/images/logo/mark.svg') !important;
    --bs-nav-tabs-link-active-color: var(--spw-safety-orange) !important;
    --bs-nav-tabs-link-active-border-color: var(--spw-safety-orange) !important;
    --bs-nav-tabs-link-active-color: var(--spw-safety-orange) !important;
}

.nav-tabs .nav-item .nav-link.active {
    border-color: var(--spw-safety-orange) !important;
    border-bottom-color: var(--spw-safety-orange) !important;
    color: var(--spw-safety-orange) !important;
}

.lpx-content .pagination .page-item.active .page-link {
    background-color: var(--spw-safety-orange) !important;
    border-color: var(--spw-safety-orange) !important;
}

.dropdown-item.active, .dropdown-item:active {
    background-color: var(--spw-safety-orange) !important;
}

/* Enhanced checkbox contrast - Higher specificity to override LeptonX theme */
.form-check .form-check-input,
.dropdown-item .form-check-input,
input.form-check-input {
    border-width: 1px !important;
    border-color: #495057 !important;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.1) !important;
}

form .form-check-input:checked,
.dropdown-item .form-check-input:checked {
    background-color: var(--spw-safety-orange) !important;
    border-color: var(--spw-safety-orange) !important;
    box-shadow: 0 2px 4px rgba(252, 130, 64, 0.3), 0 1px 3px rgba(0, 0, 0, 0.15) !important;
}

form select.form-select option:checked,
form select.form-select option:focus,
form select.form-select option:active {
    background: var(--spw-safety-orange) !important;
}

.hover-trigger .lpx-sidebar-container:not(:hover) .lpx-brand-logo {
    width: 82px !important;
}

.lpx-theme-dark input[type^=date],
.lpx-theme-dark input[type="time"] {
    color-scheme: dark;
}

.lpx-theme-dark select.form-select {
    color-scheme: dark;
}

input[type^=date]::-webkit-calendar-picker-indicator,
input[type="time"]::-webkit-calendar-picker-indicator {
    font-size: 1.25em;
}

.lpx-theme-dark input[type="datetime-local"]::-webkit-calendar-picker-indicator  {
    color-scheme: light;
    filter: invert(1) !important;
}

.row {
    --bs-gutter-x: 0rem !important;
}

.advanced-analytics-container {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: end;
    margin-bottom: 10px;
}

.advanced-analytics-container > div {
    margin-right: 10px;
}

input::-webkit-date-and-time-value {
    text-align: left;
}

.page-item .form-select {
    padding: 4px 30px;
}

@media (max-width: 600px) {
     /* Styles for mobile devices */ 
    .dt-container, .tab-content {
        padding: 1rem !important;
    }

    .dropdown-toggle::after {
        display: none !important;
    }

    .dashboard-data-card {
        border-radius: 10px !important;
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1), /* subtle shadow */
        0 2px 4px rgba(125, 125, 125, 0.25) !important; /* inner glow for depth */
        transition: transform 0.3s ease, box-shadow 0.3s ease;
    }

    .link-container {
        display: table-row-group !important;
        font-weight: bold !important;
    }
    .offcanvas {
        width: 100% !important;
    }

    .title-text {
        font-size: 24px !important;
        letter-spacing: -2.1px;
        text-align: center;
    }

    .login-form-container {
        overflow-y: scroll !important;
        max-height: 90vmin !important;
    }

    .dropdown > div.dropdown-menu {
        z-index: 900 !important;
    }

    .offcanvas-body {
        height: 70vh;
        padding-top: 0 !important;
    }

    .offcanvas-footer {
        position: initial;
    }

    .desktop-only {
        display: none !important;
    }

    .pagination select {
        display: none;
    }

    html, body {
        overscroll-behavior-x: none;
    }

    /* iOS will automatically zoom in on focus for input fields less than 18px. */
    input[type=text],
    input[type=password]{
        font-size: 18px;
    }
}

@media (min-width: 601px) and (max-width: 1680px) {
    /* Styles for tablets and small laptops */
    .login-container {
        height: 100vh;
    }

    .login-image {
        display: none;
    }

    .offcanvas {
        width: 50% !important;
    }

    .offcanvas-body {
        height: 70vh;
        padding-top: 0 !important;
    }

    .title-container-div {
        width: 100% !important;
        display: flex;
        flex-direction: row;
        justify-content: center;
    }

    .title-text {
        font-size: 32px !important;
        letter-spacing: -2.1px;
        text-align: center;
    }
}

@media (min-width: 1681px) {
    /* Styles for large screens */
    .offcanvas {
        width: 33% !important;
    }

    .offcanvas-body {
        height: 85vh;
        padding-top: 0 !important;
    }
}

/* Hide home icon from breadcrumb. */
.lpx-breadcrumb .lpx-breadcrumb-item:nth-child(1) {
    display: none !important;
}

/* Hide home separator from breadcrumb. */
.lpx-breadcrumb .lpx-breadcrumb-separator:nth-child(1) {
    display: none !important;
}

/* Make tenant name bold. */
.lpx-breadcrumb .lpx-breadcrumb-item:nth-child(3) {
    font-weight: bolder !important;
    color: var(--spw-safety-orange) !important;
}

/* Hide icons for third-level menu items and below */
.lpx-inner-menu-item .lpx-inner-menu-item .lpx-menu-item-icon {
    display: none;
}

/* Padding for advanced filters */
div.col-3 > div.form-group,
div.col-md-3 > div.form-group {
    padding: 0 0.25rem;
}

/* WHY: `Class="sticky-tabs"` is applied to the outer Blazorise <Tabs> wrapper, which
   contains BOTH the nav strip and every TabPanel. Setting position+bg on the wrapper
   itself paints the entire form area with the same colour as the nav, so scrolling
   field values (e.g. AssignmentStatus "Not Started" in the audit New Assignment
   offcanvas) appear to pass through the strip instead of being clipped behind it.
   Target the inner `.nav-tabs` UL instead — that's the element that should actually
   stick at top: 0 while the rest of the form scrolls past it.

   `--lpx-bg` is the LeptonX-resolved offcanvas/page background so the strip matches
   the parent in both light and dark themes; `--bs-body-bg` and `#fff` are progressive
   fallbacks. See bug #9276 (originally fixed in PR 5487 — that fix was incomplete
   because the bg was painted on the wrapper, not the nav). */
.sticky-tabs > .nav,
.sticky-tabs > .nav-tabs {
    position: sticky;
    top: 0;
    z-index: 10;
    background-color: var(--lpx-bg, var(--bs-body-bg, #fff));
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}

/* 
    Bug 3846: Mobile | Pop up to switch between accounts is not optimized on mobile devices
*/
ul.lpx-nav-menu[data-lpx-mobile-menu="user"] .b-table th:nth-child(3),
ul.lpx-nav-menu[data-lpx-mobile-menu="user"] .b-table td:nth-child(3) {
    display: none;
}


/************* SIDEBAR LOGO *************/
@media only screen and (min-width: 1200px) {

    .lpx-sidebar-container:hover .lpx-brand-logo {
        background-image: var(--lpx-logo) !important;
        background-size: contain !important;
    }

    .hover-trigger > .lpx-sidebar-container:not(:hover) .lpx-brand-logo {
        background-image: var(--lpx-logo-icon) !important;
        background-size: 36px !important;
        background-position-x: center !important;
        background-position-y: top !important;
        width: 36px !important;
        margin: 0 auto;
    }

    .hover-trigger > .lpx-sidebar-container:not(:hover) #lpx-sidebar .lpx-logo-container {
        width: 72px !important;
        overflow: hidden;
        background-color: transparent;
    }
}

@media only screen and (min-width: 768px) and (max-width: 1199px) {
    .lpx-sidebar-container:not(:hover) .lpx-brand-logo {
        background-image: var(--lpx-logo-icon) !important;
        background-size: 36px !important;
        background-position-x: center !important;
        background-position-y: top !important;
        width: 36px !important;
        margin: 0 auto;
    }

    .hover-trigger .lpx-sidebar-container:not(:hover) .lpx-brand-logo {
        width: 36px !important;
    }

    .lpx-sidebar-container:hover .lpx-brand-logo {
        background-image: var(--lpx-logo) !important;
        background-size: contain !important;
    }

    .lpx-sidebar-container:not(:hover) #lpx-sidebar .lpx-logo-container {
        width: 72px !important;
        overflow:hidden;
        background-color: transparent;
    }
}

.btn-secondary {
    --bs-btn-color: #355dff !important;
    --bs-btn-bg: #fff !important;
    --bs-btn-hover-color: #355dff !important;
    --bs-btn-hover-bg: #e6f0ff !important;
    --bs-btn-hover-border-color: #355dff !important;
    --bs-btn-active-color: #355dff !important;
    --bs-btn-active-bg: #fff !important;
    --bs-btn-active-border-color: #355dff !important;
    --bs-btn-disabled-color: #355dff;
    --bs-btn-disabled-bg: #fff;
    --bs-btn-disabled-border-color: #355dff;
}

input[type="date"] .was-validated .form-control:valid, .form-control.is-valid {
    padding-right: 1.5em !important
}

input[type="date"] .was-validated .form-control:invalid, .form-control.is-invalid {
    padding-right: 1.5em !important
}    

.dropdown-remove-toggle {
    font-size: 0.875rem !important;
    white-space: nowrap !important;
    text-overflow: ellipsis !important;
    font-weight: normal !important;
    overflow: hidden !important;
    text-align: start !important;
}

.dropdown-remove-toggle::after {
    border-left: none !important;
    border-right: none !important;
}

/*Fix for Bug 3873: Modal width on User Account Switcher*/
/* Keep mobile behavior; only widen at lg and up */
@media (min-width: 992px) {
    .account_link_users_modals .modal {
        --bs-modal-width: 800px; /* pick your larger-than-500px value */
    }
}

/* SweetAlert2 cancel button: ensure text stays readable on hover */
.swal2-cancel.swal2-styled:hover {
    color: #fff !important;
}

/* ---------------------------------------------------------------------------
   Body-level top banners: <HostImpersonationBanner /> + <AuthenticatorSetupBanner />
   (both rendered by App.razor above <Routes>).

   IMPORTANT: these rules MUST live in blazor-global-styles.css (the server-mode
   Global bundle via SafetyPlusWebStyleBundleContributor). In InteractiveServer
   render mode — the app default — the page links ONLY blazor-global-styles.css +
   main.css; Blazor.Client/wwwroot/global.css is the WebAssembly-mode bundle and
   is never linked, so rules placed only there render the banners unstyled
   (Bug 10010). The copy in global.css is kept in sync for WASM parity.

   Layout model: each banner is fixed top chrome with a deterministic height
   (like the environment banner in App.razor), and the :has() rules below push
   the fixed LeptonX containers down while a banner is visible — mirroring the
   environment-banner offset block in App.razor, composed via --spw-env-offset
   (that block sets it to 28px when the env banner shows; defaults to 0 in prod). */
:root {
    --spw-env-offset: 0px;
    --spw-top-banner-height: 50px;
}

.host-impersonation-banner,
.authenticator-setup-banner {
    position: fixed;
    top: var(--spw-env-offset);
    left: 0;
    right: 0;
    height: var(--spw-top-banner-height);
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.5rem 1rem;
    font-size: 0.95rem;
}

/* WHY: both sit under the environment banner (z-index 1022) so the env label always
   keeps the top slot; impersonation outranks the authenticator nudge when both show. */
.host-impersonation-banner {
    z-index: 1021;
    background-color: #fff3cd;
    border-bottom: 2px solid #dc3545;
    color: #842029;
}
.authenticator-setup-banner {
    z-index: 1020;
    background-color: #cff4fc;
    border-bottom: 2px solid #0dcaf0;
    color: #055160;
}
/* Stack the nudge below an active impersonation banner (host admin impersonating
   into a 2FA tenant with no authenticator enrolled). */
body:has(.host-impersonation-banner) .authenticator-setup-banner {
    top: calc(var(--spw-env-offset) + var(--spw-top-banner-height));
}

.host-impersonation-banner .banner-icon {
    font-size: 1.25rem;
    color: #dc3545;
}
.authenticator-setup-banner .banner-icon {
    font-size: 1.25rem;
}
.host-impersonation-banner .banner-text,
.authenticator-setup-banner .banner-text {
    flex: 1;
    /* WHY: deterministic single-line height — the :has() chrome offsets below assume it. */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.host-impersonation-banner .banner-return-btn {
    display: inline-block;
    padding: 0.25rem 0.75rem;
    background-color: #dc3545;
    color: #fff;
    text-decoration: none;
    border-radius: 0.25rem;
    font-weight: 600;
    white-space: nowrap;
}
.host-impersonation-banner .banner-return-btn:hover {
    background-color: #b02a37;
}
.authenticator-setup-banner .banner-setup-btn {
    display: inline-block;
    padding: 0.25rem 0.75rem;
    background-color: #0dcaf0;
    color: #055160;
    text-decoration: none;
    border-radius: 0.25rem;
    font-weight: 600;
    white-space: nowrap;
}
.authenticator-setup-banner .banner-setup-btn:hover {
    background-color: #0aa8c7;
}
.authenticator-setup-banner .banner-dismiss-btn {
    background: transparent;
    border: 1px solid #0dcaf0;
    color: #055160;
    border-radius: 0.25rem;
    padding: 0.25rem 0.75rem;
    cursor: pointer;
    white-space: nowrap;
}
.authenticator-setup-banner .banner-dismiss-btn:hover {
    background-color: #b6effb;
}

/* Push the fixed/absolute LeptonX chrome down while a banner is visible; snaps back
   when the banner dismisses (the element leaves the DOM, so :has() stops matching).
   !important is required to out-rank the env-banner offset block in App.razor
   (these selectors are more specific, so they win when both are !important). */
body:has(:is(.host-impersonation-banner, .authenticator-setup-banner)) :is(.lpx-sidebar-container, .lpx-topbar-container, .lpx-mobile-navbar-container, .lpx-logo-container, .lpx-toolbar, .lpx-toolbar-container) {
    top: calc(var(--spw-env-offset) + var(--spw-top-banner-height)) !important;
}
body:has(:is(.host-impersonation-banner, .authenticator-setup-banner)) .lpx-sidebar-container {
    height: calc(100vh - var(--spw-env-offset) - var(--spw-top-banner-height)) !important;
}
/* WHY: LeptonX hard-sizes the sidebar's INNER scroll chain to the full viewport
   (.lpx-sidebar min-height:100vh, .lpx-nav height:100vh; .lpx-scroll-container is 100%
   of .lpx-nav). Shrinking only .lpx-sidebar-container leaves the scroll viewport
   extending past the container bottom, so the LAST menu items (Administration, feature
   settings) become unreachable while a banner shows. Size the inner chain to match. */
body:has(:is(.host-impersonation-banner, .authenticator-setup-banner)) .lpx-sidebar-container :is(.lpx-sidebar, .lpx-nav) {
    height: calc(100vh - var(--spw-env-offset) - var(--spw-top-banner-height)) !important;
    min-height: 0 !important;
}
body:has(:is(.host-impersonation-banner, .authenticator-setup-banner)) .lpx-content-container {
    padding-top: calc(var(--spw-env-offset) + var(--spw-top-banner-height));
}
body:has(:is(.host-impersonation-banner, .authenticator-setup-banner)) .chat-expanded {
    top: calc(var(--spw-env-offset) + var(--spw-top-banner-height)) !important;
}
/* WHY: .lpx-toolbar-container is document-anchored (position:absolute, spans the full
   page height) at z-index 1021 - above the fixed banners (1020 / 1021-tied-but-earlier
   in DOM order) - so once the page scrolls, its background paints over the banner's
   right edge (clips the Remind Me Later button). Drop it below the banners while one
   is visible; it still outranks the sidebar (1000) and topbar (101). The env banner
   never needed this because it sits at z-index 1022. */
body:has(:is(.host-impersonation-banner, .authenticator-setup-banner)) .lpx-toolbar-container {
    z-index: 1019 !important;
}
/* Both banners at once: double offset. */
body:has(.host-impersonation-banner):has(.authenticator-setup-banner) :is(.lpx-sidebar-container, .lpx-topbar-container, .lpx-mobile-navbar-container, .lpx-logo-container, .lpx-toolbar, .lpx-toolbar-container) {
    top: calc(var(--spw-env-offset) + 2 * var(--spw-top-banner-height)) !important;
}
body:has(.host-impersonation-banner):has(.authenticator-setup-banner) .lpx-sidebar-container {
    height: calc(100vh - var(--spw-env-offset) - 2 * var(--spw-top-banner-height)) !important;
}
body:has(.host-impersonation-banner):has(.authenticator-setup-banner) .lpx-sidebar-container :is(.lpx-sidebar, .lpx-nav) {
    height: calc(100vh - var(--spw-env-offset) - 2 * var(--spw-top-banner-height)) !important;
}
body:has(.host-impersonation-banner):has(.authenticator-setup-banner) .lpx-content-container {
    padding-top: calc(var(--spw-env-offset) + 2 * var(--spw-top-banner-height));
}
body:has(.host-impersonation-banner):has(.authenticator-setup-banner) .chat-expanded {
    top: calc(var(--spw-env-offset) + 2 * var(--spw-top-banner-height)) !important;
}
/* --------------------------------------------------------------------------- */
/* PBI 9400: Active/Scheduled Assignments grids — top-align cells so a Description
   expanded via Show more grows the row DOWNWARD instead of centering the other
   cells in a tall row. Scoped to these grids via the spw-assignment-grid marker
   class on the DataGrid; !important overrides the LeptonX default of middle. */
.spw-assignment-grid td {
    vertical-align: top !important;
}
/* --------------------------------------------------------------------------- */

/************* CUSTOM CODE ENDS ********************/
