@import '_content/Microsoft.FluentUI.AspNetCore.Components/Microsoft.FluentUI.AspNetCore.Components.lcdo7z9xd2.bundle.scp.css';
@import '_content/Pulse.Components/Pulse.Components.joj7oi975s.bundle.scp.css';
@import '_content/Shared.Components/Shared.Components.8kcrwmdllo.bundle.scp.css';

/* /Pages/DemoSignIn.razor.rz.scp.css */
.demo-page[b-9fmwfpfjq0] {
    --header-height: 117px;
    --demo-content-width: 672px;

    --demo-bg-color: #F6FAFF;
    --demo-color-navy: #00375B;
    --demo-color-primary: #00658D;
    --demo-color-body: #3E4850;
    --demo-color-muted: rgba(62, 72, 80, 0.60);
    --demo-card-border: rgba(189, 200, 209, 0.10);
    --demo-card-icon-bg: #E9EEF4;
    --demo-shadow-active: 0 4px 12px rgba(18, 46, 94, 0.12);
    --demo-error-bg: #FFF1F0;
    --demo-error-border: #FFCCC7;
    --demo-error-color: #CF1322;

    display: flex;
    flex-direction: column;
    height: 100vh;
    font-family: Asap, serif;
    background: var(--demo-bg-color);
}

.decorative-element[b-9fmwfpfjq0] {
    background: linear-gradient(135deg, #BCDCBC 0%, #A8D8C2 25%, #75CCD1 50%, #24BAEA 75%, #01B2F2 100%);
    opacity: 0.1;
    border-radius: 12px;
    position: absolute;
    z-index: 0;
}

.top-decorative-element[b-9fmwfpfjq0] {
    width: 600px;
    height: 600px;
    right: 0;
    transform: translate(21.34%, calc(var(--header-height) - 27.2%));
}

.bottom-decorative-element[b-9fmwfpfjq0] {
    width: 400px;
    height: 400px;
    bottom: 0;
    left: 0;
    transform: translate(-32%, calc(-81px + 40.84%));
}


/* ----------------------- Header ----------------------- */

.demo-header[b-9fmwfpfjq0] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 40px 32px;
    color: var(--demo-color-navy);
    background-color: var(--demo-bg-color);
    z-index: 0;
}

.demo-logo[b-9fmwfpfjq0] {
    width: 122px;
    height: 37px;
}

.demo-back-link[b-9fmwfpfjq0] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    color: var(--demo-color-navy);
}

    .demo-back-link:hover[b-9fmwfpfjq0] {
        color: var(--pl-semantic-primary-color-primary-hover);
    }

/* Base icon box mirrors the replaced medium MudIcon rendering (MudBlazor 8.15.0). */
.demo-svg-icon[b-9fmwfpfjq0] {
    width: 1em;
    height: 1em;
    display: inline-block;
    flex-shrink: 0;
    fill: currentColor;
    user-select: none;
    font-size: 1.5rem;
}

[b-9fmwfpfjq0] .demo-back-icon {
    font-size: 18px !important;
}

/* -------------------------Main----------------------------- */

.demo-main[b-9fmwfpfjq0] {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 42px 0;
    backdrop-filter: blur(64px);
    overflow: hidden;
}

.demo-title[b-9fmwfpfjq0] {
    margin: 0 0 16px;
    color: var(--color-primary-dark-blue);
    font-size: 48px;
    font-weight: 700;
    line-height: 48px;
    letter-spacing: -1.2px;
    text-align: center;
}

.demo-subtitle[b-9fmwfpfjq0] {
    font-weight: 500;
    font-size: 18px;
    line-height: 28px;
    letter-spacing: 0;
    text-align: center;
    vertical-align: middle;
}

/* ------------------------- Error message ----------------------- */

.demo-error[b-9fmwfpfjq0] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 24px;
    padding: 12px 16px;
    background: var(--demo-error-bg);
    border: 1px solid var(--demo-error-border);
    border-radius: 8px;
    color: var(--demo-error-color);
    font-size: 14px;
    font-weight: 500;
    width: 100%;
    max-width: var(--demo-content-width);
}

[b-9fmwfpfjq0] .demo-error-icon {
    font-size: 18px !important;
    flex-shrink: 0;
}

/* ------------------------- Cards ---------------------------- */

.demo-cards[b-9fmwfpfjq0] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    width: 100%;
    max-width: var(--demo-content-width);
    margin-top: 48px;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding-bottom: 8px;
}

.demo-card:focus[b-9fmwfpfjq0] {
    outline: none;
}

.demo-card[b-9fmwfpfjq0] {
    display: flex;
    align-items: center;
    gap: 24px;
    padding: 26px 24px;
    background: var(--pl-neutral-bg-color-bg-container);
    border: 1px solid var(--demo-card-border);
    border-radius: 8px;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
    cursor: pointer;
    text-align: left;
    transition: box-shadow 0.15s ease, border-color 0.15s ease;
    width: 100%;
}

    .demo-card:hover:not(:disabled)[b-9fmwfpfjq0] {
        border-color: var(--pl-semantic-primary-color-primary-border);
        box-shadow: var(--demo-shadow-active);
    }

.demo-card--signing-in[b-9fmwfpfjq0] {
    border-color: var(--pl-semantic-primary-color-primary-border);
    box-shadow: var(--demo-shadow-active);
}

.demo-card--disabled[b-9fmwfpfjq0] {
    opacity: 0.45;
    cursor: default;
}

/* ------------------------ Card icon ----------------------  */

.demo-card-icon-wrapper[b-9fmwfpfjq0] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    border-radius: 8px;
    background: var(--demo-card-icon-bg);
}

[b-9fmwfpfjq0] .demo-card-icon {
    color: var(--demo-color-primary) !important;
    font-size: 25px !important;
}

/* ------------------------- Card text ----------------------- */

.demo-card-text[b-9fmwfpfjq0] {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.demo-card-role[b-9fmwfpfjq0] {
    color: var(--demo-color-navy);
    font-size: 18px;
    font-weight: 600;
    line-height: 28px;
}

.demo-card-description[b-9fmwfpfjq0] {
    color: var(--demo-color-body);
    font-size: 14px;
    line-height: 20px;
}

.demo-card-chevron[b-9fmwfpfjq0] {
    color: #BDC8D1;
    flex-shrink: 0;
    width: 9px;
    height: 12px;
    opacity: 0.4;
}

[b-9fmwfpfjq0] .demo-card-spinner {
    color: var(--demo-color-primary);
    flex-shrink: 0;
    /* Match the 24px footprint of the replaced small MudProgressCircular. */
    font-size: 24px;
}

/* ------------------- Footer --------------------------------- */

.demo-footer[b-9fmwfpfjq0] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 32px 32px;
    flex-wrap: wrap;
    gap: 8px;
    background-color: var(--demo-bg-color);
    z-index: 0;
}

.demo-footer-copyright[b-9fmwfpfjq0] {
    color: var(--demo-color-muted);
    font-size: 12px;
}

.demo-footer-links[b-9fmwfpfjq0] {
    display: flex;
    gap: 24px;
}

    .demo-footer-links a[b-9fmwfpfjq0] {
        color: var(--demo-color-muted);
        font-size: 12px;
        text-decoration: none;
    }

        .demo-footer-links a:hover[b-9fmwfpfjq0] {
            color: var(--pl-semantic-primary-color-primary-hover);
        }
/* /Pages/SignedOut.razor.rz.scp.css */
.logout-page[b-fn37nlkhz5] {
    width: 100vw;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
}

.message[b-fn37nlkhz5] {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 20px;
    margin: auto;
}

.logout-title[b-fn37nlkhz5] {
    color: var(--color-primary-dark-blue, #00375B);
    font-family: Asap;
    font-size: 32px;
    font-weight: 600;
    line-height: 40px;
    letter-spacing: -0.96px;
    margin: 0;
}

.logout-button[b-fn37nlkhz5] {
    display: flex;
    justify-content: center;
    align-items: center;
}

[b-fn37nlkhz5] .e-logout-btn {
    width: 200px;
    height: auto;
    margin-top: 10px;
    font-weight: 500;
    font-size: 20px;
    border-radius: 7px;
    padding: 10px 0;
}
/* /Pages/SignIn.razor.rz.scp.css */
.login-page[b-cxesdcxjws] {
    width: 100vw;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
}

.connecting-state[b-cxesdcxjws] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    min-height: 400px;
}

.waiting-text[b-cxesdcxjws] {
    margin-top: 20px;
    font-family: Asap, serif;
    font-size: 16px;
}

.login-corner-link[b-cxesdcxjws] {
    position: fixed;
    bottom: 24px;
    color: var(--color-primary-dark-blue, #00375B);
    font-family: Asap, serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 20px;
    letter-spacing: -0.05px;
    text-decoration: none;
}

.login-corner-link:hover[b-cxesdcxjws] {
    text-decoration: underline;
}

.login-corner-link-left[b-cxesdcxjws] {
    left: 24px;
}

.login-corner-link-right[b-cxesdcxjws] {
    right: 24px;
}
/* /View/Components/BlockComponents/DagComponents/PlDagButtonBar.razor.rz.scp.css */
.dag-button-bar[b-jtajj3he9i] {
    display: flex;
    flex-direction: row;
    gap: 1px;
    padding: 0;
    width: 100%;
    height: 100%;
    align-items: stretch;
    justify-content: flex-end;
}

.dag-button[b-jtajj3he9i] {
    aspect-ratio: 1;
    height: 100%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: bold;
    border: none;
    outline: none;
    border-radius: 2px;
    transition: all 0.2s ease;
    background: transparent;
    padding: 0;
}

.dag-button:hover[b-jtajj3he9i] {
    background: var(--color-neutral-lighter, #e1dfdd);
}


.dag-button-delete .pl-icon-awesome[b-jtajj3he9i] {
    font-size: 10px;
}

.dag-button:disabled[b-jtajj3he9i] {
    opacity: 0.4;
    cursor: not-allowed;
}
/* /View/Components/BlockComponents/DagComponents/PlDagDragBar.razor.rz.scp.css */
.dag-drag-bar[b-2h2ghjkllw] {
    width: 100%;
    height: 100%;
    background: var(--color-neutral-light, #f3f2f1);
    border: none;
    border-right: var(--dag-border-width, 1px) solid var(--color-border, #ccc);
    border-radius: 1px 0 0 1px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
}

.dag-drag-bar-movable[b-2h2ghjkllw] {
    width: 100%;
    height: 100%;
    background: var(--color-neutral-light, #f3f2f1);
    border: none;
    border-right: var(--dag-border-width, 1px) solid var(--color-border, #ccc);
    border-radius: 1px 0 0 1px;
    cursor: url('icons/cursors/hand.png') 2 2, grab;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
}

.dag-drag-bar-movable:active[b-2h2ghjkllw] {
    cursor: url('icons/cursors/hand-back-fist.png'), grabbing;
}

.dag-drag-dots[b-2h2ghjkllw] {
    display: flex;
    flex-direction: column;
    gap: 3px;
    align-items: center;
}

.drag-dot[b-2h2ghjkllw] {
    width: 3px;
    height: 3px;
    background: var(--color-neutral-dark, #aaa);
    border-radius: 50%;
    display: block;
}

.dag-drag-bar-movable:hover[b-2h2ghjkllw] {
    background: var(--color-neutral-lighter, #e1dfdd);
}
/* /View/Components/BlockComponents/DagComponents/PlDagLink.razor.rz.scp.css */
.dag-link[b-ewdyk30xh0] {
    position: absolute;
    background-color: var(--color-neutral-dark, gray);
    pointer-events: none;
    z-index: 0;
}

.dag-link-vertical[b-ewdyk30xh0] {
    width: 1px;
}

.dag-link-horizontal[b-ewdyk30xh0] {
    height: 1px;
}
/* /View/Components/BlockComponents/DagComponents/PlDagMenu.razor.rz.scp.css */
.pl-dag-drag-bar[b-41oh1ozfur] {
    background: var(--color-neutral-light, #f3f2f1);
    border-right: 1px solid var(--color-border, #ccc);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    z-index: 2; /* Ensure drag bar renders above data fields */
}

.pl-dag-drag-bar.movable[b-41oh1ozfur] {
    cursor: move;
    cursor: grab;
}

.pl-dag-drag-bar.movable:active[b-41oh1ozfur] {
    cursor: grabbing;
}

.pl-dag-drag-bar.movable:hover[b-41oh1ozfur] {
    background: var(--color-neutral-lighter, #e1dfdd);
}

.dag-drag-dots[b-41oh1ozfur] {
    display: flex;
    flex-direction: column;
    gap: 3px;
    align-items: center;
}

.drag-dot[b-41oh1ozfur] {
    width: 3px;
    height: 3px;
    background: var(--color-neutral-dark, #666);
    border-radius: 50%;
    display: block;
}

.pl-dag-buttons-bar[b-41oh1ozfur] {
    display: flex;
    flex-direction: row;
    gap: 1px;
    margin: 0;
    align-items: center;
    justify-content: flex-end;
    flex-shrink: 0;
    flex-grow: 0;
    box-sizing: border-box;
    border: 1px solid var(--color-border, #ccc);
    border-radius: 2px;
    padding: 1px;
    z-index: 2;
}

.pl-dag-button:hover[b-41oh1ozfur] {
    background: var(--color-neutral-light, #f3f2f1);
    border-color: var(--color-primary, #0078d4);
    transform: scale(1.05);
}

.pl-dag-button:active[b-41oh1ozfur] {
    background: var(--color-neutral-lighter, #e1dfdd);
    transform: scale(0.95);
}


.pl-dag-button:disabled[b-41oh1ozfur] {
    opacity: 0.4;
    cursor: not-allowed;
}

.pl-dag-button:disabled:hover[b-41oh1ozfur] {
    background: var(--color-background, white);
    border-color: var(--color-border, #ccc);
    transform: none;
}
/* /View/Components/BlockComponents/DagComponents/PlDagNode.razor.rz.scp.css */
.dag-node-container[b-b87595ed23] {
    position: absolute;
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
}

.dag-node-row[b-b87595ed23] {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    border: 1px solid var(--color-border, #ccc);
    background: var(--color-background, white);
    box-sizing: border-box;
}

.dag-node-row.dag-node-marked[b-b87595ed23] {
    border: 2px solid var(--color-primary, #0078d4);
    border-color: var(--color-highlight, #0078d4);
}

.dag-node-content[b-b87595ed23] {
    flex: 1;
    display: flex;
    align-items: stretch;
    min-width: 0; /* Allow flexbox to shrink */
}

.dag-collapse-container[b-b87595ed23] {
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 5px;
    margin-bottom: 5px;
}
/* /View/Components/BlockComponents/MatrixComponents/PlMatrixBlock.razor.rz.scp.css */
/* Configuration Matrix: a grid of member headers and their crossings.

   The grid reads as a table - one header row, one leading column, horizontal rules
   between the rows and a single rule after the leading column.

   Every track size and every bit of spacing arrives from the layout as an inline
   figure (see MatrixGeometry): the columns were measured from the labels they carry,
   and the spacing below is the spacing that went into that measurement. That is what
   keeps the box the module reserves close to the box the browser renders - a grid that
   sized itself alone would leave the module scrolling into empty space.

   The two axes take that figure differently. A column gets it as a floor and may grow
   past it, because the measurement is an estimate and a column short of its label would
   cut the label; what it may not do is grow without end, which is what the max-widths
   below are for, and a label that does not fit its ceiling is cut with an ellipsis and
   stays complete in the tooltip. A row gets it as its height, full stop: the layout
   works out which rows the scroll window reaches and puts a spacer in for the rest, and
   both count in that figure - a row that rendered taller would shift every row below it
   out of the place its index gives it.

   Column labels stay horizontal. Rotating them only pays off once the columns are
   narrower than their text.

   Every colour comes from the design tokens (pl-variables.css), so the grid follows the
   product's palette rather than one of its own. */

.pl-matrixblock[b-gusp3d5hlp] {
    /* anchored to the block's layout slot (inline top/left), like every sibling
       block component - in flow it would render at the window origin instead */
    position: absolute;
    border: 1px solid var(--pl-neutral-border-color-border-secondary);
    border-radius: 8px;
    background: var(--pl-neutral-bg-color-bg-container);
    /* the grid is as wide as its tracks want to be: an absolutely positioned box without
       a width shrinks to fit its containing block instead, and the tracks are then squeezed
       to whatever room is left */
    width: max-content;
    overflow: hidden;
}

/* Header row: the corner and the column members */
.pl-matrix-corner[b-gusp3d5hlp],
.pl-matrix-column-head[b-gusp3d5hlp] {
    background: var(--pl-color-neutral-1);
    border-bottom: 1px solid var(--pl-neutral-border-color-border-secondary);
    color: var(--pl-neutral-text-color-text);
    padding: var(--pl-matrix-header-pad-y) var(--pl-matrix-pad-x);
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.pl-matrix-corner[b-gusp3d5hlp] {
    text-align: left;
    border-right: 1px solid var(--pl-neutral-border-color-border-secondary);
    max-width: var(--pl-matrix-max-row-head);
}

.pl-matrix-column-head[b-gusp3d5hlp] {
    text-align: center;
    max-width: var(--pl-matrix-max-column);
}

/* A row member: the leading column, a label rather than a cell */
.pl-matrix-row-head[b-gusp3d5hlp] {
    border-right: 1px solid var(--pl-neutral-border-color-border-secondary);
    border-bottom: 1px solid var(--pl-color-neutral-2);
    padding: var(--pl-matrix-pad-y) var(--pl-matrix-pad-x);
    color: var(--pl-neutral-text-color-text);
    /* the ceiling of the leading column: a track grows to what its widest cell asks for,
       and a cell asks for no more than this - beyond it the label is cut and the tooltip
       carries the full text */
    max-width: var(--pl-matrix-max-row-head);
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

/* Two label fields of one member read as one label, kept apart by the gap their
   measurement allowed for */
.pl-matrix-member-text + .pl-matrix-member-text[b-gusp3d5hlp] {
    margin-left: var(--pl-matrix-label-gap);
}

.pl-matrix-cell[b-gusp3d5hlp] {
    border-bottom: 1px solid var(--pl-color-neutral-2);
    padding: var(--pl-matrix-pad-y) var(--pl-matrix-pad-x);
    text-align: center;
    /* the row track is a fixed height, measured from the checkbox and the label line; a cell
       that came out a pixel taller would spill over the row below rather than move it */
    overflow: hidden;
    /* the cell is the control - the click is taken on it, so it is the cell that offers
       itself to the pointer */
    cursor: pointer;
}

.pl-matrix-cell input[type="checkbox"][b-gusp3d5hlp] {
    width: var(--pl-matrix-checkbox);
    height: var(--pl-matrix-checkbox);
    /* the same accent a checkbox data field takes (PlCheckBox) */
    accent-color: var(--pl-semantic-primary-color-primary);
    margin: 0;
    vertical-align: middle;
    /* the pointer passes through to the cell, so the click is counted once wherever in the
       cell it lands; the keyboard still reaches the box, which is why the handler cancels
       the event rather than relying on the pointer never getting here */
    pointer-events: none;
}

/* Under the pointer the box takes the design system's checkbox hover colour, the same one a
   checkbox data field takes. The hover is read off the cell rather than off the box: the box is
   pointer-inert, so nothing ever hovers it directly. accent-color reaches the checked fill, so
   this is the crossing that is set showing that it is about to be unset. */
.pl-matrix-cell:hover input[type="checkbox"]:not(:disabled)[b-gusp3d5hlp] {
    accent-color: var(--pl-semantic-primary-color-primary-hover);
}

/* More than one record in one cell - legal, and not something to hide */
.pl-matrix-cell-multi input[type="checkbox"][b-gusp3d5hlp] {
    outline: 2px solid var(--pl-semantic-warning-color-warning);
    outline-offset: 2px;
}

/* The member rows outside the scroll window: one element spans the whole run of them and
   holds their place, so the grid keeps the height the module reserved for it while their
   markup stays out of the DOM. It draws nothing - the rows it stands for are far outside
   the viewport, an overscan away.

   It holds exactly the right place because the row tracks are a fixed height rather than a
   floor: an empty spacer spanning n of them is n rows tall, the same n rows the drawn markup
   would have been. */
.pl-matrix-row-gap[b-gusp3d5hlp] {
    grid-column: 1 / -1;
}

/* Frozen heading bands (fixed_hdg on the host area).

   Both offsets come from the module's scroll pipeline, which writes them onto this element
   as two custom properties - two style writes per grid, whatever the member count, instead
   of one per band cell. The bands then move by CSS: the column heads follow the vertical
   scroll, the row heads the horizontal one, the corner both. Zero means "sitting where the
   grid put them", so an unscrolled grid looks untouched.

   The bands now pass over cells, so they need a ground of their own - the row heads had
   none - and an order among themselves, which the two named layers give them (z-indexes.css:
   the grid itself carries no z-index, so its bands stack among the module's blocks).
   z-index needs no positioning here: it applies to grid items as they are.

   No will-change on the band cells. It would ask for one compositing layer per cell, and a
   band has as many cells as the matrix has members - the column heads are not windowed, so
   that count has no ceiling and the layers are held for as long as the module is open. The
   bands are repainted per scroll tick instead. If that ever shows up in a profile, the hint
   belongs on the corner, which is one element, rather than on a band of unknown length. */
.pl-matrix-pinned[b-gusp3d5hlp] {
    --pl-matrix-pin-x: 0px;
    --pl-matrix-pin-y: 0px;
    /* the edge a band draws while it is away from the grid's frame, and the rounding the corner
       takes over with it - nothing until the scroll pipeline says otherwise, so an unscrolled
       grid is framed once and not twice */
    --pl-matrix-edge-x: 0px;
    --pl-matrix-edge-y: 0px;
    --pl-matrix-corner-radius: 0;
}

/* The edge is a border rather than something painted over the cell: the cells are border-box, so
   a border takes the width the grid's frame took and the text lands where it landed before. An
   inset shadow would draw the same line and let the text slide the frame's width to the left. */
.pl-matrix-pinned .pl-matrix-column-head[b-gusp3d5hlp] {
    transform: translateY(var(--pl-matrix-pin-y));
    z-index: var(--z-index-matrix-band);
    border-top: var(--pl-matrix-edge-y, 0) solid var(--pl-neutral-border-color-border-secondary);
}

.pl-matrix-pinned .pl-matrix-row-head[b-gusp3d5hlp] {
    transform: translateX(var(--pl-matrix-pin-x));
    background: var(--pl-neutral-bg-color-bg-container);
    z-index: var(--z-index-matrix-band);
    border-left: var(--pl-matrix-edge-x, 0) solid var(--pl-neutral-border-color-border-secondary);
}

/* The corner carries the grid's rounded edge while it stands in for it, so a matrix scrolled away
   from its own frame still reads as the card it is rather than one sliced off at the window.

   The rounding is cut, so that the edge the corner draws is cut with it: an arc painted into the
   background alone leaves the border running square around it, and a square border with a rounded
   colour inside reads as a chip out of the corner rather than a corner.

   What border-radius does not do is take the frame away. The frame is one border around the whole
   grid, so where a band is pinned it runs straight on past the arc and out to the window's edge,
   and a card cannot both turn its corner and carry on - the straight stub reads as the frame
   sticking through the rounding. Nor does border-radius fill what it cuts: outside the arc the
   corner's own background is clipped off and whatever it sits on top of shows through, a row
   heading scrolled under reading out of the corner of the card.

   The plate below does all three. It reaches out over the frame's own border, paints the ground
   the card stands on outside the arc, and draws the arc itself in the frame's colour and width -
   so the line the frame was drawing straight carries on round the corner instead. It collapses to
   nothing on its own: at a radius of zero it has no size and there is nothing to paint. */
.pl-matrix-pinned .pl-matrix-corner[b-gusp3d5hlp] {
    position: relative;
    transform: translate(var(--pl-matrix-pin-x), var(--pl-matrix-pin-y));
    z-index: var(--z-index-matrix-corner);
    border-left: var(--pl-matrix-edge-x, 0) solid var(--pl-neutral-border-color-border-secondary);
    border-top: var(--pl-matrix-edge-y, 0) solid var(--pl-neutral-border-color-border-secondary);
    border-top-left-radius: var(--pl-matrix-corner-radius, 0);
}

.pl-matrix-pinned .pl-matrix-corner[b-gusp3d5hlp]::before {
    content: '';
    position: absolute;
    z-index: -1;
    pointer-events: none;
    top: calc(-1 * var(--pl-matrix-frame-y, 0px));
    left: calc(-1 * var(--pl-matrix-frame-x, 0px));
    right: 0;
    bottom: 0;
    background: radial-gradient(circle at var(--pl-matrix-corner-radius, 0px) var(--pl-matrix-corner-radius, 0px),
            transparent 0 calc(var(--pl-matrix-corner-radius, 0px) - var(--pl-matrix-frame-x, 0px)),
            var(--pl-neutral-border-color-border-secondary)
                calc(var(--pl-matrix-corner-radius, 0px) - var(--pl-matrix-frame-x, 0px))
                var(--pl-matrix-corner-radius, 0px),
            var(--pl-neutral-bg-color-bg-container) var(--pl-matrix-corner-radius, 0px))
        no-repeat 0 0 / var(--pl-matrix-corner-plate, 0px) var(--pl-matrix-corner-plate, 0px);
}

/* The other end of the same edge. A leading column drawing the card's left side has to stop the
   way the card stops, or the side it draws runs into a square corner where the grid's own is
   rounded - and the grid's own is off screen, which is why the column is drawing the side at all.
   Only the grid's final row carries it: when the row window stops short of that row the card's
   bottom is below the window anyway, and there is no corner in view to round. */
.pl-matrix-pinned .pl-matrix-row-head-last[b-gusp3d5hlp] {
    position: relative;
    border-bottom-left-radius: var(--pl-matrix-foot-radius, 0);
}

.pl-matrix-pinned .pl-matrix-row-head-last[b-gusp3d5hlp]::before {
    content: '';
    position: absolute;
    z-index: -1;
    pointer-events: none;
    top: 0;
    left: calc(-1 * var(--pl-matrix-frame-x, 0px));
    right: 0;
    bottom: calc(-1 * var(--pl-matrix-frame-bottom, 0px));
    background: radial-gradient(circle at var(--pl-matrix-foot-radius, 0px)
                calc(var(--pl-matrix-foot-plate, 0px) - var(--pl-matrix-foot-radius, 0px)),
            transparent 0 calc(var(--pl-matrix-foot-radius, 0px) - var(--pl-matrix-frame-x, 0px)),
            var(--pl-neutral-border-color-border-secondary)
                calc(var(--pl-matrix-foot-radius, 0px) - var(--pl-matrix-frame-x, 0px))
                var(--pl-matrix-foot-radius, 0px),
            var(--pl-neutral-bg-color-bg-container) var(--pl-matrix-foot-radius, 0px))
        no-repeat 0 100% / var(--pl-matrix-foot-plate, 0px) var(--pl-matrix-foot-plate, 0px);
}
/* /View/Components/BlockComponents/PlCollapseExpand.razor.rz.scp.css */
/* Standard collapse/expand using Font Awesome */
.pl-expanded[b-5sdnfqurp2]::before {
    content: '\f107';
}

.pl-collapsed[b-5sdnfqurp2]::before {
    content: '\f105';
}

.pl-expanded[b-5sdnfqurp2], .pl-collapsed[b-5sdnfqurp2] {
    cursor: pointer;
    color: black;
    font-size: 10px;
    font-family: 'Font Awesome 6 Pro';
}

/* DAG-specific styling - pill-shaped button matching desktop GDI+ rendering */
.pl-collapse-expand-dag[b-5sdnfqurp2] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    background: white;
    border: 1px solid var(--color-neutral-dark, gray);
    border-radius: 999px;
    cursor: pointer;
    box-sizing: border-box;
    user-select: none;
    -webkit-user-select: none;
    width: 100%;
    height: 100%;
}

/* Plus/minus symbol using CSS - replaces Font Awesome for DAG */
.pl-collapse-expand-dag[b-5sdnfqurp2]::before {
    content: '';
    display: inline-block;
    width: 14px;
    height: 14px;
    flex-shrink: 0;
}

/* Plus sign when collapsed (vertical + horizontal lines) */
.pl-collapse-expand-dag.pl-collapsed[b-5sdnfqurp2]::before {
    background: linear-gradient(var(--color-neutral-dark, gray), var(--color-neutral-dark, gray)) center/2px 12px no-repeat,
                linear-gradient(var(--color-neutral-dark, gray), var(--color-neutral-dark, gray)) center/12px 2px no-repeat;
}

/* Minus sign when expanded (horizontal line only) */
.pl-collapse-expand-dag.pl-expanded[b-5sdnfqurp2]::before {
    background: linear-gradient(var(--color-neutral-dark, gray), var(--color-neutral-dark, gray)) center/12px 2px no-repeat;
}

.pl-collapse-expand-count[b-5sdnfqurp2] {
    font-family: 'Arial', sans-serif;
    font-weight: bold;
    font-size: 14px;
    color: var(--color-neutral-dark, gray);
    line-height: 1;
}

.pl-collapse-expand-dag:hover[b-5sdnfqurp2] {
    background: var(--color-neutral-lightest, #f5f5f5);
    border-color: var(--color-primary, #0078d4);
}

.pl-collapse-expand-dag:hover .pl-collapse-expand-count[b-5sdnfqurp2] {
    color: var(--color-primary, #0078d4);
}

.pl-collapse-expand-dag.pl-collapsed:hover[b-5sdnfqurp2]::before {
    background: linear-gradient(var(--color-primary, #0078d4), var(--color-primary, #0078d4)) center/2px 12px no-repeat,
                linear-gradient(var(--color-primary, #0078d4), var(--color-primary, #0078d4)) center/12px 2px no-repeat;
}

.pl-collapse-expand-dag.pl-expanded:hover[b-5sdnfqurp2]::before {
    background: linear-gradient(var(--color-primary, #0078d4), var(--color-primary, #0078d4)) center/12px 2px no-repeat;
}
/* /View/Components/BlockComponents/PlDataAreaBlock.razor.rz.scp.css */
/* Status Indicator — Context B (inline data-area row, no surrounding tile chrome).
   Documented in docs/client_functionality/module_layout/status_indicator.md.
   The customizing model is semantic (`StatusIndicator`); the current visual treatment is a
   coloured left-edge bar, but the indication strategy is decided here on the client and may
   evolve without changing the customizing.
   Width and radius are theme-driven; colour comes from --pl-status-indicator-color set
   inline on the element from the resolved data field's symbol border colour.
   The element's height excludes the area-end / record-separator gap (PlDataAreaBlock.razor
   moves that contribution into margin-bottom), so the border-left does not bleed across the
   inter-row gap.
   Context A (dashboard tile leaf) is handled in PlTileContainer.razor.css, where the same
   class lives on a leaf already chromed by the tile container — there the bar overlays the
   chrome's left edge instead of standing alone. */
.pl-dataareablock.pl-status-indicator[b-6bu03q3xyt] {
    border-left: var(--pl-status-indicator-width, 4px) solid var(--pl-status-indicator-color, transparent);
    border-radius: var(--pl-status-indicator-radius, 4px);
}

/* Treatment = Outline / Fill. Both replace the leading bar with an all-sides accent
   border; Fill additionally paints the surface tint resolved from the same symbol's background.
   .pl-status-indicator is emitted for every treatment so the existing Context A tile rules keep
   applying, which means the bar rule above still matches — the `border` shorthand here overrides
   its `border-left`, and these rules must stay after it since the specificity is equal. */
.pl-dataareablock.pl-status-indicator-outline[b-6bu03q3xyt],
.pl-dataareablock.pl-status-indicator-fill[b-6bu03q3xyt] {
    border: var(--pl-status-indicator-border-width, 1px) solid var(--pl-status-indicator-color, transparent);
    border-radius: var(--pl-status-indicator-radius, 4px);
}

/* Keyed on the surface modifier, not on the treatment: a "no tint" Fill (white symbol background)
   resolves no surface, and a fallback here would blank the background the element would otherwise
   have — the opposite of what white means. */
.pl-dataareablock.pl-status-indicator-surface[b-6bu03q3xyt] {
    background-color: var(--pl-status-indicator-surface);
}

/* Customizing-error indicator — only emitted by the renderer when Session.IsCustomizer = true
   AND DataAreaCustomizing.ConfigurationError is populated by DataAreaCustomizingMapper. End
   users never see this; it's a customizer-only signal so a broken JSON / rejected combo
   surfaces visually instead of looking like a layout regression. The hover tooltip on the
   wrapper carries the parser's error message. */
.pl-customizing-error[b-6bu03q3xyt] {
    outline: 2px dashed var(--pl-semantic-error-color-error, #C22704);
    outline-offset: -2px;
    min-height: 24px;
    position: relative;
}

.pl-customizing-error-badge[b-6bu03q3xyt] {
    position: absolute;
    top: 2px;
    right: 4px;
    z-index: 1000;
    padding: 1px 6px;
    border-radius: 3px;
    background: var(--pl-semantic-error-color-error, #C22704);
    color: #FFFFFF;
    font-size: 11px;
    font-weight: 600;
    line-height: 14px;
    pointer-events: none;
}
/* /View/Components/BlockComponents/PlDfBlock.razor.rz.scp.css */
.pl-block[b-de5f3rqdca] {
    position: absolute;
}

.mask-title-rect[b-de5f3rqdca] {
    position: absolute;
    pointer-events: none;
}

/* Record-level D&D highlight styles (dd-source, dd-target, dd-target-ahead/behind)
   live in wwwroot/css/ddstyles.css next to the other drag-and-drop styles. */

/* DAG-specific styling */
.pl-dag-datafield-block[b-de5f3rqdca] {
    border: none !important;
    box-sizing: border-box;
}

/* Data fields styling for DAG blocks */
.pl-dag-datafield-block .pl-df[b-de5f3rqdca] {
    box-sizing: border-box;
}

.pl-dag-datafield-block[b-de5f3rqdca]::before {
    /* Border that wraps around the entire DAG node */
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    border-style: solid;
    border-color: var(--color-border, #ccc);
    border-width: var(--dag-border-width, 1px);
    border-radius: 2px;
    pointer-events: none;
    box-sizing: border-box;
}

/* Marked DAG blocks have thicker border */
.pl-dag-datafield-block[data-marked="true"][b-de5f3rqdca]::before {
    border-color: var(--color-primary, #0078d4);
}

/* DAG content area wrapper - fixed height to prevent button bar overlap */
.pl-dag-content-area[b-de5f3rqdca] {
    position: relative;
    margin: 0;
    padding: 0;
    overflow: hidden; /* Clip content to bounds */
    flex-shrink: 0; /* Don't shrink the content area */
    flex-grow: 0; /* Don't grow the content area */
}
/* /View/Components/BlockComponents/PlFlexDataAreaBlock.razor.rz.scp.css */
/* Flex DA layout. Documented in docs/client_functionality/module_layout/flex_layout.md.
   The body's flex-direction comes from the DAC Layout (Horizontal/Vertical) and is set as an
   inline style on .pl-flex-da-body. The title-area direction is decided by Position
   (Top/Bottom -> row, Start/End -> column) and is also set inline.
   Per-child Alignment is realised with margin-auto on the leading/trailing axis: the first
   End-aligned child gets margin-{leading}: auto so all start-aligned items stay packed at the
   start and the end-aligned items flow to the end. Center alignment uses auto-margins on both
   sides of the centered child. */

.pl-flex-da[b-xw8x3etdeb] {
    display: flex;
    box-sizing: border-box;
    width: 100%;
    /* Padding defaults to the previous hardcoded 4 px 8 px so existing customizings without
       Items.Padding render identically. An inline `padding: …;` emitted by
       PlFlexDataAreaBlock.BuildPaddingStyle from the DAC's `Items.Padding` JSON overrides this
       variable (inline style beats variable substitution under CSS cascade rules). */
    padding: var(--pl-flex-da-padding, 4px 8px);
    /* Soft 4 px corner matching the figma "Frame 31" card (898:15004). Safe to emit on every
       flex DA — the radius is only visible when the area has a non-transparent background or
       a non-zero border, both of which come from the customizing's frame symbol via the
       .pl-symbol-{uid} class, or from JSON Items.Border. A DA without a configured frame
       paints nothing here. */
    border-radius: var(--pl-flex-da-radius, 4px);
}

/* Without a title area the outer wrapper IS the body container; flex-direction is on the body. */
.pl-flex-da:not(.pl-flex-da-with-title)[b-xw8x3etdeb] {
    /* The wrapper has no internal layout role; the body sub-container does the work. */
    flex-direction: column;
}

/* Per-row chrome for flex DAs that are themselves rendered as a row inside *another* flex
   DA's body — i.e. nested rows in the "Zuletzt angesehen" widget figma. The .pl-flex-da-row
   class is emitted by PlFlexDataAreaBlock when the block's parent is a FlexDataAreaBlock.
   A module-root or tile-leaf flex DA does not carry the class — its surrounding chrome
   (module wrapper or tile padding) already supplies the outer padding and the title-area
   negative margins assume an unpadded root.

   Geometry only (padding, corner radius, sibling gap) lives here. The card's
   background-color, border-color, border-width and border-pattern come from the row DAC's
   FrameSymbols[W1] via the .pl-symbol-{uid} class that PlFlexDataAreaBlock co-emits on the
   same root — same source DfBlock.PaintDaFrame uses for the classic absolute-position DA
   frame. A row with the default (transparent/0-width) frame symbol therefore looks like an
   unstyled stack; a customizer dresses the row card by assigning a frame symbol with the
   wanted background + border to the row DAC. */
.pl-flex-da-row[b-xw8x3etdeb] {
    padding: var(--pl-flex-da-row-padding-y, 4px) var(--pl-flex-da-row-padding-x, 8px);
    border-radius: var(--pl-flex-da-row-radius, 4px);
}

/* A structural tree wrapper (tree node with no fields and no chrome of its own) only groups
   its children — the base breathing-room padding would stack dead space once per nesting
   level, so it is dropped. An authored Items.Padding still wins via the inline style. */
.pl-flex-da.pl-flex-da-structural[b-xw8x3etdeb] {
    padding: 0;
}

/* Inter-row spacing between nested flex DAs is now JSON-driven: the row DAC declares
   `Items.Margin` to open a gap on the matching edge. The previous hardcoded `margin-top: 4px`
   rule (and the corresponding `RecordSeparatorSymbols`-suppression rule) were removed so the
   customizing fully owns spacing — a flex DA without `Items.Margin` produces no gap and packs
   right against its sibling, which matches the JSON-only model. The parent's `Items.Gap` (on
   .pl-flex-da-body) handles the body's gap; here we only governed extra spacing between row
   *cards* and that is now `Items.Margin` on each card. */

/* Title-area positioning: outer wrapper is a flex container; title and body are siblings. */
.pl-flex-da-with-title[b-xw8x3etdeb] {
    flex-direction: column;
}

.pl-flex-da-title-top[b-xw8x3etdeb]    { flex-direction: column; }
.pl-flex-da-title-bottom[b-xw8x3etdeb] { flex-direction: column-reverse; }
.pl-flex-da-title-start[b-xw8x3etdeb]  { flex-direction: row; }
.pl-flex-da-title-end[b-xw8x3etdeb]    { flex-direction: row-reverse; }

.pl-flex-da-title[b-xw8x3etdeb],
.pl-flex-da-body[b-xw8x3etdeb] {
    display: flex;
    box-sizing: border-box;
}

.pl-flex-da-body[b-xw8x3etdeb] {
    flex: 1 1 auto;
    /* flex-direction / gap / align-items come from the inline style emitted by the renderer. */
}

.pl-flex-da-title[b-xw8x3etdeb] {
    flex: 0 0 auto;
    /* Default spacing between title items when TitleArea.Gap is not authored (authored values come as inline style). */
    gap: var(--pl-flex-da-title-gap, 8px);
    /* Match the figma's 49 px title bar height with content offset toward the bottom edge so
       the heading sits just above the separator. align-items (cross axis) is set inline from
       the customizing CrossAlignment; padding here only adjusts main-axis breathing room. */
    padding-bottom: var(--pl-flex-da-title-padding-bottom, 8px);
    min-height: var(--pl-flex-da-title-min-height, 33px);
}

/* Extend the title past the surrounding tile padding so the separator line spans the full
   widget width edge-to-edge, matching the figma design. The cross-axis padding on the title
   restores the inner content position so headings stay aligned with body content. The
   --pl-tile-padding fallback mirrors the default in PlTileContainer.razor.css. */
.pl-flex-da-title-top    > .pl-flex-da-title[b-xw8x3etdeb],
.pl-flex-da-title-bottom > .pl-flex-da-title[b-xw8x3etdeb] {
    margin-left: calc(-1 * var(--pl-tile-padding, 16px));
    margin-right: calc(-1 * var(--pl-tile-padding, 16px));
    padding-left: var(--pl-tile-padding, 16px);
    padding-right: var(--pl-tile-padding, 16px);
}

.pl-flex-da-title-start > .pl-flex-da-title[b-xw8x3etdeb],
.pl-flex-da-title-end   > .pl-flex-da-title[b-xw8x3etdeb] {
    margin-top: calc(-1 * var(--pl-tile-padding, 16px));
    margin-bottom: calc(-1 * var(--pl-tile-padding, 16px));
    padding-top: var(--pl-tile-padding, 16px);
}

/* Title chrome: spacing between the title and the body, plus the theme-driven 1px separator
   line that matches the Figma widget chrome. Both live on the title (not the body) so they
   apply once per widget regardless of how many nested flex DAs the body contains, and so the
   direction follows the title's position automatically: Top -> bottom edge, Bottom -> top edge,
   Start -> right edge, End -> left edge. The separator colour comes from the same chrome
   variable as the tile's inset border, so themes that re-skin tile chrome get it for free. */
.pl-flex-da-title-top    > .pl-flex-da-title[b-xw8x3etdeb] { margin-bottom: var(--pl-flex-da-title-spacing, 12px); border-bottom: var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }
.pl-flex-da-title-bottom > .pl-flex-da-title[b-xw8x3etdeb] { margin-top:    var(--pl-flex-da-title-spacing, 12px); border-top:    var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }
.pl-flex-da-title-start  > .pl-flex-da-title[b-xw8x3etdeb] { margin-right:  var(--pl-flex-da-title-spacing, 12px); border-right:  var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }
.pl-flex-da-title-end    > .pl-flex-da-title[b-xw8x3etdeb] { margin-left:   var(--pl-flex-da-title-spacing, 12px); border-left:   var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }

/* Per-child wrapper. Defaults to start alignment with intrinsic size. */
.pl-flex-item[b-xw8x3etdeb] {
    display: flex;
    box-sizing: border-box;
    flex: 0 0 auto;
    min-width: 0;
    min-height: 0;
}

/* Inherited var: widens hug-by-default controls (PlButton) to fill a stretched cell; both size
   classes declare it so the nearest cell wins on nesting. Weight/percent-sized items also carry
   this class (for the var and the inner-fill rule below) but override the flex shorthand inline
   (`flex: {n} 1 0%` / `flex: 0 1 {p}%`) — inline beats the class. */
.pl-flex-size-stretch[b-xw8x3etdeb] {
    flex: 1 1 auto;
    --pl-flex-btn-width: 100%;
}

/* When the wrapper is stretching to fill its share of the outer flex DA, its single inner
   element (PlDataField, PlEmbeddedModule, nested PlFlexDataAreaBlock, …) must also fill the
   wrapper on the main axis. Otherwise the wrapper grows but the field stays at content width
   and the user-visible cell sits inside a mostly-empty stretched cell. .pl-flex-item is a flex
   container (row direction), so the child claims main-axis space via flex-grow; min-width: 0
   keeps single-line content ellipsifying instead of forcing the wrapper open past its share.
   No effect in the Auto-size case — the wrapper is content-sized so there's nothing to
   distribute. ::deep is required because the child belongs to another component's scope. */
.pl-flex-item.pl-flex-size-stretch[b-xw8x3etdeb]  > * {
    flex: 1 1 auto;
    min-width: 0;
}

/* An imposed-size cell (Stretch, weight, or percent) must never paint past its share: clip the
   wrapper, re-close the overflow that .pl-df-flow reopens for intrinsic sizing (see
   PlDataField.razor.css), and restore the classic single-line ellipsis. Auto cells keep the
   open overflow — they are content-sized, so nothing protrudes and the intrinsic-size chain
   must keep working. */
.pl-flex-item.pl-flex-size-stretch[b-xw8x3etdeb] {
    overflow: hidden;
}

.pl-flex-item.pl-flex-size-stretch[b-xw8x3etdeb]  .pl-df-flow .pl-datafield-content {
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-flex-size-auto[b-xw8x3etdeb] {
    flex: 0 0 auto;
    --pl-flex-btn-width: fit-content;
}

/* End group: only the first item gets the auto margin; the rest reset it, else flex splits the free space and spreads them. */
.pl-flex-da-body[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]              { margin-left: auto; }
.pl-flex-da-body[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-left: 0; }
.pl-flex-da-body[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]              { margin-top:  auto; }
.pl-flex-da-body[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-top:  0; }

/* Center alignment uses auto-margins on both sides of the centered cluster. */
.pl-flex-da-body[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-left: auto; margin-right: auto; }
.pl-flex-da-body[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-top:  auto; margin-bottom: auto; }

/* Multi-line body (per-item Flex.Line): the body/self-fields container becomes a stretch
   column and each authored line renders as one of these horizontal rows. Items are then
   direct children of the line, not the body, so the row-direction alignment scheme is
   mirrored here (a line is always a row — no column variant needed). */
.pl-flex-da-line[b-xw8x3etdeb] {
    display: flex;
    box-sizing: border-box;
    min-width: 0;
}

.pl-flex-da-line > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]              { margin-left: auto; }
.pl-flex-da-line > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-left: 0; }
.pl-flex-da-line > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-left: auto; margin-right: auto; }

/* Same alignment scheme inside the title area. */
.pl-flex-da-title[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]              { margin-left: auto; }
.pl-flex-da-title[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-left: 0; }
.pl-flex-da-title[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]              { margin-top:  auto; }
.pl-flex-da-title[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-top:  0; }
.pl-flex-da-title[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-left: auto; margin-right: auto; }
.pl-flex-da-title[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-top:  auto; margin-bottom: auto; }

/* Tree / recursive data area: self-field row + chevron above an indented column of child areas.
   See flex_layout.md "Tree / recursive data area". */

/* Self row: chevron on the left, the node's own field cluster on the right. */
.pl-flex-da-tree-self[b-xw8x3etdeb] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--pl-flex-da-tree-chevron-gap, 4px);
}

/* Field cluster: flows in the DAC Layout direction (set inline). */
.pl-flex-da-tree-self-fields[b-xw8x3etdeb] {
    display: flex;
    flex: 1 1 auto;
    min-width: 0;
    box-sizing: border-box;
}

/* Collapse chevron — the design-system chevron SVG (figma "chevron-down" 1787:738), masked so
   --pl-flex-da-tree-chevron-color drives the colour. Collapsed points right; expanded rotates down. */
.pl-flex-da-tree-chevron[b-xw8x3etdeb] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pl-flex-da-tree-chevron-size, 14px);
    height: var(--pl-flex-da-tree-chevron-size, 14px);
    cursor: pointer;
    user-select: none;
    -webkit-user-select: none;
}

.pl-flex-da-tree-chevron[b-xw8x3etdeb]::before {
    content: "";
    width: var(--pl-flex-da-tree-chevron-size, 14px);
    height: var(--pl-flex-da-tree-chevron-size, 14px);
    background-color: var(--pl-flex-da-tree-chevron-color, #6A778B);
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M13.0594 7.99995L12.5281 7.4687L6.53125 1.4687L6 0.937451L4.94063 1.99995L5.47188 2.5312L10.9406 7.99995L5.46875 13.4687L4.9375 14L6 15.0593L6.53125 14.5281L12.5312 8.5312L13.0625 7.99995H13.0594Z' fill='%23000'/%3E%3C/svg%3E") center / var(--pl-flex-da-tree-chevron-size, 14px) var(--pl-flex-da-tree-chevron-size, 14px) no-repeat;
            mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M13.0594 7.99995L12.5281 7.4687L6.53125 1.4687L6 0.937451L4.94063 1.99995L5.47188 2.5312L10.9406 7.99995L5.46875 13.4687L4.9375 14L6 15.0593L6.53125 14.5281L12.5312 8.5312L13.0625 7.99995H13.0594Z' fill='%23000'/%3E%3C/svg%3E") center / var(--pl-flex-da-tree-chevron-size, 14px) var(--pl-flex-da-tree-chevron-size, 14px) no-repeat;
    transition: transform 0.15s ease;
}

.pl-flex-da-tree-chevron.pl-expanded[b-xw8x3etdeb]::before { transform: rotate(90deg); }

/* Children column: nested child areas stacked and indented one level. */
.pl-flex-da-tree-children[b-xw8x3etdeb] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--pl-flex-da-tree-row-gap, 0px);
    padding-left: var(--pl-flex-da-tree-indent, 20px);
}

/* An empty (fieldless) tree node renders no chevron/self-row, so its children stay flush. */
.pl-flex-da-tree-children-flush[b-xw8x3etdeb] {
    padding-left: 0;
}

/* Per-child alignment inside the self-field row uses the same auto-margin buckets as the body. */
.pl-flex-da-tree-self-fields[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]    { margin-left: auto; }
.pl-flex-da-tree-self-fields[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-left: 0; }
.pl-flex-da-tree-self-fields[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb]    { margin-top:  auto; }
.pl-flex-da-tree-self-fields[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xw8x3etdeb] { margin-top: 0; }
.pl-flex-da-tree-self-fields[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-left: auto; margin-right: auto; }
.pl-flex-da-tree-self-fields[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-center[b-xw8x3etdeb] { margin-top:  auto; margin-bottom: auto; }

/* PlDataField's flex-flow reset flattens the inner datafield-customizing div to static/auto, which
   collapses a listbox (it needs that div to fill the .pl-df cell and anchor the dropdown icon).
   Restore the fill/anchor for listbox items. */
.pl-flex-item-listbox[b-xw8x3etdeb]  .pl-df > div[class*="datafield-customizing-"] {
    position: absolute !important;
    inset: 0 !important;
}

/* Title-area listboxes render with the figma select chrome (Redesign file node 1186:6198); main-axis sizing stays customizing-driven (Flex.Size), min-width is the floor for Auto cells whose absolute input has no intrinsic width. Mirrored in PlTileEmbeddedCell.razor.css for lifted titles. */
.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb] {
    align-self: center;
    height: 32px;
    min-width: 117px;
}

/* The dropdown's Adaptive width measures .pl-df (the MudPopover anchor); flow mode collapses it to 0, so pin it to the wrapper — !important beats PlDataField's inline width: auto. */
.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb]  .pl-df {
    width: 100% !important;
}

/* !important beats the symbol-driven chrome (SymbolCssGenerator emits border/background with !important). */
.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb]  .pl-input-popover-container {
    box-sizing: border-box;
    background-color: #FFFFFF !important;
    border: 1px solid var(--pl-flex-title-select-border, #C4CBDA) !important;
    border-radius: 4px;
    padding-left: 12px;
    padding-right: 30px;
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb]  .pl-input-field {
    font-size: 14px;
    line-height: 22px;
    color: var(--pl-flex-title-select-color, #0D1A26);
}

/* The ddl icon is the popover's only open trigger — stretch it over the whole select (native-select click behaviour) and repaint its FA caret as the figma chevron. z-index beats the input's 1. */
.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb]  .pl-popover-icon.ddl-icon {
    position: absolute;
    inset: 0;
    z-index: 2;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1.5 3.75l4.5 4.5 4.5-4.5' fill='none' stroke='%238A95A8' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 12px center / 12px 12px;
    cursor: pointer;
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb]  .pl-popover-icon.ddl-icon::before {
    content: none;
}

/* Neutralize the sheet listbox's hover fill — it would flood the whole stretched select. */
.pl-flex-da-title > .pl-flex-item-listbox[b-xw8x3etdeb]  .pl-popover-icon.ddl-icon:hover {
    background-color: transparent;
}

/* Static text label — emitted by the body when a DF carries Flex.ShowTitle = true together
   with the default RenderStyle.
   The wrapper is just a span whose font / colour come from the field's symbol class
   (pl-symbol-{uid}); this rule supplies the same symmetric horizontal padding the regular
   flex DF chain gets via .pl-df-flow .pl-datafield-content, so a TitleText label visually
   aligns with neighbouring fields in the row. The flex-item participation comes from the
   wrapping .pl-flex-item div emitted by the renderer around it. */
.pl-flex-da-static-label[b-xw8x3etdeb] {
    padding-left: var(--spacing-field-padding, 3px);
    padding-right: var(--spacing-field-padding, 3px);
}

/* Fallback title — rendered as a synthetic flex item when the host DAC has a TitleArea but no
   Flex.InTitle DFs and the body hosts an embedded module. Picks up the heading typography from
   theme variables; alignment / size buckets come from the regular .pl-flex-align-* /
   .pl-flex-size-* classes already on the wrapper. Documented in
   docs/client_functionality/module_layout/embedded_module.md#default-title-text--module-name. */
.pl-flex-da-title-fallback[b-xw8x3etdeb] {
    align-self: center;
    font-family: var(--pl-flex-da-title-fallback-font-family, 'Asap', sans-serif);
    font-size: var(--pl-flex-da-title-fallback-font-size, 20px);
    font-weight: var(--pl-flex-da-title-fallback-font-weight, 600);
    line-height: var(--pl-flex-da-title-fallback-line-height, 28px);
    color: var(--pl-flex-da-title-fallback-color, #0d1a26);
}

/* Status Indicator — Context B (inline flex DA, no surrounding tile chrome).
   Mirrors the rule on .pl-dataareablock in PlDataAreaBlock.razor.css. The same custom
   property `--pl-status-indicator-color` is set inline on the root .pl-flex-da element by
   PlFlexDataAreaBlock.razor when DataArea.Customizing.StatusIndicator resolves to a colour.
   Width and radius come from the same theme variables as the regular DA renderer.
   Context A (flex DA used as a dashboard tile leaf) is still picked up by the existing
   `::deep > .pl-block.pl-status-indicator` rules in PlTileContainer.razor.css because the
   root .pl-flex-da carries the .pl-block class. */
.pl-flex-da.pl-status-indicator[b-xw8x3etdeb] {
    border-left: var(--pl-status-indicator-width, 4px) solid var(--pl-status-indicator-color, transparent);
    border-radius: var(--pl-status-indicator-radius, 4px);
}

/* Treatment = Outline / Fill. Both replace the leading bar with an all-sides accent
   border; Fill additionally paints the surface tint resolved from the same symbol's background.
   .pl-status-indicator is emitted for every treatment so the existing Context A tile rules keep
   applying, which means the bar rule above still matches — the `border` shorthand here overrides
   its `border-left`, and these rules must stay after it since the specificity is equal.
   The border/background carry !important for the same reason the .pl-flex-da-listbox rule below
   does: SymbolCssGenerator emits border-color/-width and background-color with !important on the
   .pl-symbol-{uid} class this element always carries, so specificity alone would not win. */
.pl-flex-da.pl-status-indicator-outline[b-xw8x3etdeb],
.pl-flex-da.pl-status-indicator-fill[b-xw8x3etdeb] {
    border: var(--pl-status-indicator-border-width, 1px) solid var(--pl-status-indicator-color, transparent) !important;
    border-radius: var(--pl-status-indicator-radius, 4px);
}

/* Keyed on the surface modifier, not on the treatment: a "no tint" Fill (white symbol background)
   resolves no surface, and an !important fallback here would beat the element's own
   .pl-symbol-{uid} background — the opposite of what white means. */
.pl-flex-da.pl-status-indicator-surface[b-xw8x3etdeb] {
    background-color: var(--pl-status-indicator-surface) !important;
}

/* Action affordance — applied when FlexLayoutInfo.Action resolves to a child DF's CU_Name.
   Emits a click target across the whole area (handler bound in PlFlexDataAreaBlock.razor),
   paints a grey hover background to signal interactability, and switches text-based child DFs
   (TextInput / TextOutput / Hyperlink, marked .pl-flex-item-text by the renderer) to the
   primary text colour on hover. The .pl-flex-item-no-action-hover opt-out (from
   FlexItemInfo.IgnoreActionHover) lets individual fields keep their own symbol colour — e.g. a
   muted "2 hours ago" caption inside an actionable row.

   The colour override carries !important because .pl-symbol-{uid}, generated by
   SymbolCssGenerator, already sets `color` with !important; specificity alone won't win. The
   ::deep combinator reaches across Blazor's scoped-CSS isolation into the child DataField
   component subtree where .pl-datafield-content lives. */
.pl-flex-da.pl-flex-da-action[b-xw8x3etdeb] {
    cursor: pointer;
    border-radius: var(--pl-flex-da-radius, 4px);
}

.pl-flex-da.pl-flex-da-action:hover[b-xw8x3etdeb] {
    background-color: var(--pl-flex-da-action-hover-bg, var(--pl-neutral-bg-color-bg-text-hover, #DCE0EA));
}

.pl-flex-da.pl-flex-da-action:hover .pl-flex-item-text:not(.pl-flex-item-no-action-hover)[b-xw8x3etdeb],
.pl-flex-da.pl-flex-da-action:hover .pl-flex-item-text:not(.pl-flex-item-no-action-hover)[b-xw8x3etdeb]  .pl-datafield-content,
.pl-flex-da.pl-flex-da-action:hover .pl-flex-item-text:not(.pl-flex-item-no-action-hover)[b-xw8x3etdeb]  .pl-datafield-content > * {
    color: var(--pl-flex-da-action-hover-fg, var(--pl-semantic-primary-color-primary-text, #0070B5)) !important;
}

/* General DF radius inside flex layouts — every <see cref="PlDataField"/> wrapper picks up the
   design-system 4 px corner so any field that paints its own background (via the
   pl-symbol-{uid} class generated by SymbolCssGenerator or the inline background-color from
   GetBackgroundColor on PlDataField) renders as a soft-cornered rectangle instead of a sharp
   one. Matches the figma row chrome (898:14861). Has no visible effect on text-only fields
   that don't paint a background, which is fine — the rule is cheap and keeps the radius
   uniform for any future bg-painting field. */
.pl-flex-da[b-xw8x3etdeb]  .pl-df {
    border-radius: var(--pl-flex-df-radius, 4px);
}

/* Icon tile chrome — figma "Group10 / Icon Project". Triggered by the .pl-flex-bg-tile marker
   emitted on the wrapping .pl-flex-item by the renderer when the item is a Background DF
   carrying a DataFieldBackgroundValue.BinaryUid OR an ImageButton DF carrying a
   DataFieldButtonValue.BinaryUid. Both render the same way visually; the difference is only
   that ImageButton fires a click action. The marker is the only way to identify these cases
   from the wrapper without :has(), which would otherwise need to peek across the Blazor scope
   boundary into the inner PlBackground / PlImageButton components.

   Inflate-outward sizing: the chrome auto-sizes to (icon natural size + 8 px inset on every
   side) so the figma proportions hold regardless of how the customizer authored the rect.
   The authored df_width/df_height is preserved as a *minimum* by DfItemStyle emitting
   min-width/min-height (see PlFlexDataAreaBlock.razor) — a customizer wanting a larger tile
   can still force one, but a small authored rect won't crush the icon. We therefore drop the
   inline width/height pinned by DfItemStyle and PlDataField's PositionStyle on .pl-flex-item
   and .pl-df by overriding back to auto, then let .pl-background-df / .pl-image-button-df
   reach their natural sizes through the chain. The .pl-flex-item / .pl-df relaxation only
   fires for bg-tile items, so every other DF keeps the absolute-positioning contract
   unchanged.

   Structural difference between the two render paths: PlBackground wraps its <img> in a
   <div> that carries the .pl-background-df class — the chrome (padding + radius) lives on that
   wrapper and the inner img stays at intrinsic size. PlImageButton renders the <img> directly
   as the DF root with the .pl-image-button-df class on the img — the chrome lives on the img
   itself, and the inline width/height (no !important when FlowLayout cascades in, see
   PlImageButton.razor) gets overridden by `width: auto` from this rule so the img can grow to
   (intrinsic icon + padding). */
.pl-flex-item.pl-flex-bg-tile[b-xw8x3etdeb] {
    width: auto !important;
    height: auto !important;
    /* An icon cell never shrinks below its content: in a weight/percent-sized row the flexible
       text/tag/bar cells absorb the squeeze (they ellipsify), the icon keeps its full size. */
    min-width: fit-content;
}

.pl-flex-item.pl-flex-bg-tile[b-xw8x3etdeb]  .pl-df {
    position: static !important;
    width: auto !important;
    height: auto !important;
    top: auto !important;
    left: auto !important;
}

.pl-flex-item.pl-flex-bg-tile[b-xw8x3etdeb]  .pl-background-df,
.pl-flex-item.pl-flex-bg-tile[b-xw8x3etdeb]  .pl-image-button-df {
    width: auto;
    height: auto;
    box-sizing: border-box;
    border-radius: var(--pl-flex-bg-tile-radius, 4px);
    padding: var(--pl-flex-bg-tile-padding, 8px);
}

.pl-flex-item.pl-flex-bg-tile[b-xw8x3etdeb]  .pl-background-df {
    display: flex;
    align-items: center;
    justify-content: center;
}

/* !important: PlBackground pins max-width/max-height: 100% as inline style on the img, which
   would otherwise win and scale the icon down with a shrinking tile. */
.pl-flex-item.pl-flex-bg-tile[b-xw8x3etdeb]  .pl-background-df > img {
    max-width: none !important;
    max-height: none !important;
    width: auto;
    height: auto;
    flex: 0 0 auto;
}

/* Tag pills: geometry, centering, and truncation live in PlFlexTagItem.razor.css — its
   .pl-flex-tag-host root span carries that component's scope, so the rules apply from there. */

/* Round effect — matches the non-flex .pl-effect-round behaviour from pl-site.css for fields
   inside flex DAs. The marker class .pl-flex-item-round is emitted on the wrapping
   .pl-flex-item by PlFlexDataAreaBlock.RoundEffectClass when the DF declares an
   EffectType.Round entry in its EffectsManager. Without this rule the flex-specific 4 px
   radii defined above (`.pl-flex-da ::deep .pl-df` and the icon-tile chrome) win on
   specificity over the global single-class .pl-effect-round and the Round effect appears
   inert in flex layouts.

   Placed at the end of the file so the source-order tie-break wins against the equal-
   specificity icon-tile rule on .pl-background-df / .pl-image-button-df. */
.pl-flex-item.pl-flex-item-round[b-xw8x3etdeb]  .pl-df,
.pl-flex-item.pl-flex-item-round[b-xw8x3etdeb]  .pl-background-df,
.pl-flex-item.pl-flex-item-round[b-xw8x3etdeb]  .pl-image-button-df {
    border-radius: 50%;
}
/* /View/Components/BlockComponents/PlRootBlock.razor.rz.scp.css */
.pl-root[b-x1q6e85wz1] {
    position: relative;
    overflow: hidden;
    min-width: 100%;
}

.pl-root.pl-main[b-x1q6e85wz1] {
    overflow: visible !important;
    z-index: var(--z-index-main-root);
}

.pl-root.pl-fixed-top[b-x1q6e85wz1],
.pl-root.pl-fixed-bottom[b-x1q6e85wz1],
.pl-root.pl-main-fixed-headers[b-x1q6e85wz1] {
    background: white;
    z-index: var(--z-index-fixed-root);
    min-width: 100%;
    width: fit-content;
}

.pl-root.pl-main-fixed-headers[b-x1q6e85wz1] {
    background: #F3F4F5;
}

.pl-root.pl-fixed-bottom[b-x1q6e85wz1] {
    margin-top: auto;
}
/* /View/Components/BlockComponents/PlRowHoverActions.razor.rz.scp.css */
.pl-row-hover-actions[b-y44zb0zx3a] {
    position: absolute;
    display: flex;
    gap: 4px;
    z-index: calc(var(--z-index-focus-field) + 1);
    pointer-events: auto;
    animation: pl-row-hover-fade-in-b-y44zb0zx3a 0.5s ease;
}

@keyframes pl-row-hover-fade-in-b-y44zb0zx3a {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

.pl-row-hover-btn[b-y44zb0zx3a] {
    width: 20px;
    height: 20px;
    box-sizing: border-box;
    border: 1px solid var(--color-neutral-light, #d2d0ce);
    border-radius: 3px;
    background: var(--color-background, #fff);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    color: var(--color-base-black, #0A090B);
    opacity: 0.8;
    transition: opacity 0.15s ease, transform 0.15s ease;
}

.pl-row-hover-btn:hover[b-y44zb0zx3a] {
    opacity: 1;
    transform: scale(1.1);
}

/* Drop the outline on mouse-click focus, but keep the keyboard :focus-visible ring. */
.pl-row-hover-btn:focus:not(:focus-visible)[b-y44zb0zx3a] {
    outline: none;
    box-shadow: none;
}

.pl-row-hover-btn[b-y44zb0zx3a]  .anticon {
    color: var(--color-base-black, #0A090B);
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 0;
    padding: 0;
    margin: 0;
}

    .pl-row-hover-btn[b-y44zb0zx3a]  .anticon svg {
        width: 14px;
        height: 14px;
        display: block;
        shape-rendering: geometricPrecision;
    }

/* Bolder strokes for the "+" glyph. */
.pl-row-hover-insert[b-y44zb0zx3a]  .anticon svg path {
    stroke: currentColor;
    stroke-width: 60;
    stroke-linecap: round;
    stroke-linejoin: round;
    paint-order: stroke fill;
}
/* /View/Components/BlockComponents/PlScaleTitleBlock.razor.rz.scp.css */
.pl-scale-title-block[b-nhy20a0lf1] {
    position: absolute;
    overflow: hidden;
    cursor: default;
}
/* /View/Components/BlockComponents/PlTitleBlock.razor.rz.scp.css */
.pl-titleblock[b-hczf3j2ypy],
.pl-titleblock > div[b-hczf3j2ypy] {
    position: absolute;
}
/* /View/Components/BlockComponents/PlWindow.razor.rz.scp.css */
.pl-window[b-lm9wwcz6h1] {
    display: flex;
    flex-direction: column;
    min-height: 100%;
    width: fit-content;
}

.pl-window.pl-window-stretch[b-lm9wwcz6h1] {
    width: auto;
}

.pl-window-content[b-lm9wwcz6h1] {
    width: fit-content;
    flex: 1 1 auto;
    overflow: hidden;
    min-height: 0;
}

.pl-window-content.pl-window-content-stretch[b-lm9wwcz6h1] {
    width: auto;
}
/* /View/Components/ChartComponents/PlChartWrapper.razor.rz.scp.css */
.pl-chart-wrapper[b-y5imycoxw7] {
    width: 100%;
    height: 100%
}

/* PlChart's root .pl-chart-holder is styled as `display: inline-block !important` in
   PlChart.razor.css, which crushes it to ApexCharts' content size (300×150 fallback) and
   ignores the wrapper's full 100%×100% box. Reaching across the component boundary with
   ::deep flips it to a block that fills both axes — the wrapper itself is already 100% of
   the .pl-df cell, and the chart-specific width:100% branch in PlDataField.PositionStyle
   keeps that cell from collapsing to the same 300 px fallback. The !important is required
   to outrank the inline-block !important in PlChart.razor.css. */
[b-y5imycoxw7] .pl-chart-holder {
    display: block !important;
    height: 100% !important;
}
/* /View/Components/DashboardComponents/Customize/PlDashboardLeafProperties.razor.rz.scp.css */
.pl-dashboard-property-group[b-ni7olq9tj4] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-bottom: 12px;
}

.pl-dashboard-property-label[b-ni7olq9tj4] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: 12px;
    color: #444;
}

.pl-dashboard-property-label-text[b-ni7olq9tj4] {
    font-size: 12px;
    color: #444;
}

.pl-dashboard-property-label input[type="text"][b-ni7olq9tj4],
.pl-dashboard-property-label input[type="number"][b-ni7olq9tj4],
.pl-dashboard-property-label select[b-ni7olq9tj4] {
    padding: 6px 8px;
    border: 1px solid rgba(0, 0, 0, 0.18);
    border-radius: 4px;
    font-size: 13px;
}

.pl-dashboard-width-options[b-ni7olq9tj4] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: 13px;
}

.pl-dashboard-width-options input[type="number"][b-ni7olq9tj4] {
    width: 56px;
    margin-left: 6px;
    padding: 3px 6px;
    border: 1px solid rgba(0, 0, 0, 0.18);
    border-radius: 3px;
}
/* /View/Components/DashboardComponents/Customize/PlDashboardSidebar.razor.rz.scp.css */
.pl-dashboard-sidebar[b-9zg9ixduaz] {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    width: 320px;
    background: white;
    border-left: 1px solid rgba(0, 0, 0, 0.12);
    box-shadow: -2px 0 8px rgba(0, 0, 0, 0.06);
    display: flex;
    flex-direction: column;
    z-index: 10;
}

.pl-dashboard-sidebar-header[b-9zg9ixduaz] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
    font-weight: 600;
}

.pl-dashboard-sidebar-title[b-9zg9ixduaz] {
    font-size: 14px;
}

.pl-dashboard-sidebar-close[b-9zg9ixduaz] {
    width: 24px;
    height: 24px;
    border: none;
    background: transparent;
    cursor: pointer;
    font-size: 18px;
    color: #666;
    border-radius: 4px;
}

.pl-dashboard-sidebar-close:hover[b-9zg9ixduaz] {
    background: rgba(0, 0, 0, 0.06);
}

.pl-dashboard-sidebar-body[b-9zg9ixduaz] {
    flex: 1 1 auto;
    overflow: auto;
    padding: 12px 14px;
}

.pl-dashboard-sidebar-footer[b-9zg9ixduaz] {
    padding: 10px 14px;
    border-top: 1px solid rgba(0, 0, 0, 0.08);
}

.pl-dashboard-sidebar-delete[b-9zg9ixduaz] {
    width: 100%;
    height: 32px;
    border: 1px solid rgba(180, 0, 0, 0.4);
    background: rgba(180, 0, 0, 0.05);
    color: rgb(140, 0, 0);
    border-radius: 4px;
    cursor: pointer;
    font-size: 13px;
}

.pl-dashboard-sidebar-delete:hover[b-9zg9ixduaz] {
    background: rgba(180, 0, 0, 0.12);
}
/* /View/Components/DashboardComponents/Customize/PlTileEditOverlay.razor.rz.scp.css */
/* Customize-mode chrome on dashboard tiles. Mirrors the design system's
   Dashboard.jsx WidgetChrome: 1.5px dashed light-blue outline, faint blue
   tint, "Verschieben" drag pill, size segmented control, square red X. */

.pl-tile-edit-overlay[b-o1hawvuar1] {
    position: relative;
    cursor: default;
    outline: 1.5px dashed #9BD1EE;
    outline-offset: -2px;
    transition: outline-color 120ms ease-in-out;
    min-width: 0;
    box-sizing: border-box;
    border-radius: 5px;
}

.pl-tile-edit-overlay.is-selected[b-o1hawvuar1] {
    outline: 2px solid var(--pl-color-primary, #0070B5);
}

.pl-tile-edit-overlay-tint[b-o1hawvuar1] {
    position: absolute;
    inset: 0;
    background: rgba(230, 244, 251, 0.15);
    border-radius: 5px;
    pointer-events: none;
    z-index: 1;
}

.pl-tile-edit-overlay-toolbar[b-o1hawvuar1] {
    position: absolute;
    top: 6px;
    z-index: 6;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.pl-tile-edit-overlay-toolbar-left[b-o1hawvuar1] {
    left: 6px;
}

.pl-tile-edit-overlay-toolbar-right[b-o1hawvuar1] {
    right: 6px;
}

/* Drag handle pill. Only this element is draggable — the rest of the tile is
   selectable but inert for drag, matching the design's "Ziehen zum Verschieben"
   affordance. */
.pl-tile-edit-overlay-drag[b-o1hawvuar1] {
    height: 24px;
    padding: 0 8px;
    background: #fff;
    border: 1px solid #9BD1EE;
    border-radius: 3px;
    color: #0161B8;
    font-family: Asap, Roboto, sans-serif;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    cursor: grab;
    user-select: none;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.pl-tile-edit-overlay-drag:hover[b-o1hawvuar1] {
    background: #FAFAFC;
}

.pl-tile-edit-overlay-drag:active[b-o1hawvuar1] {
    cursor: grabbing;
}

/* Inline size segmented control. */
.pl-tile-edit-overlay-size[b-o1hawvuar1] {
    height: 24px;
    display: inline-flex;
    background: #fff;
    border: 1px solid #C4CBDA;
    border-radius: 3px;
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

.pl-tile-edit-overlay-size button[b-o1hawvuar1] {
    min-width: 28px;
    height: 100%;
    border: 0;
    border-left: 1px solid #E5E8ED;
    background: #fff;
    color: #495769;
    font-family: Asap, Roboto, sans-serif;
    font-size: 11px;
    font-weight: 500;
    cursor: pointer;
    padding: 0 4px;
    line-height: 1;
}

.pl-tile-edit-overlay-size button:first-child[b-o1hawvuar1] {
    border-left: 0;
}

.pl-tile-edit-overlay-size button.is-active[b-o1hawvuar1] {
    background: #E6F4FB;
    color: #0161B8;
}

.pl-tile-edit-overlay-size button:hover:not(.is-active)[b-o1hawvuar1] {
    background: #FAFAFC;
}

/* Remove button — square, white background, light-red border, red glyph. */
.pl-tile-edit-overlay-remove[b-o1hawvuar1] {
    width: 24px;
    height: 24px;
    padding: 0;
    border: 1px solid #F7B1B1;
    border-radius: 3px;
    background: #fff;
    color: #C22704;
    cursor: pointer;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.pl-tile-edit-overlay-remove:hover[b-o1hawvuar1] {
    background: #FFEDE6;
}

/* Drop indicators — solid blue 4 px bars rendered OUTSIDE the tile so they
   don't bleed across the tile's chrome. */
.pl-tile-drop-indicator[b-o1hawvuar1] {
    position: absolute;
    background: #009FE3;
    border-radius: 2px;
    pointer-events: none;
    z-index: 7;
    box-shadow: 0 0 8px rgba(0, 159, 227, 0.4);
}

.pl-tile-drop-indicator.left-edge[b-o1hawvuar1] {
    left: -10px;
    top: 0;
    bottom: 0;
    width: 4px;
}

.pl-tile-drop-indicator.right-edge[b-o1hawvuar1] {
    right: -10px;
    top: 0;
    bottom: 0;
    width: 4px;
}

.pl-tile-drop-indicator.top-edge[b-o1hawvuar1] {
    top: -10px;
    left: 0;
    right: 0;
    height: 4px;
}

.pl-tile-drop-indicator.bottom-edge[b-o1hawvuar1] {
    bottom: -10px;
    left: 0;
    right: 0;
    height: 4px;
}

/* Ambiguous-below: two stacked indicators below the tile. Primary (blue, new
   Container) on top, accent (orange, new ColumnSet column) below. Active branch
   has full opacity + brighter shadow; inactive branch is dimmed. */
.pl-tile-drop-indicator.ambiguous-primary[b-o1hawvuar1],
.pl-tile-drop-indicator.ambiguous-primary-active[b-o1hawvuar1] {
    left: 0;
    right: 0;
    bottom: -16px;
    height: 4px;
    background: #009FE3;
}

.pl-tile-drop-indicator.ambiguous-primary[b-o1hawvuar1] {
    opacity: 0.35;
    box-shadow: none;
}

.pl-tile-drop-indicator.ambiguous-primary-active[b-o1hawvuar1] {
    box-shadow: 0 0 10px rgba(0, 159, 227, 0.6);
}

.pl-tile-drop-indicator.ambiguous-accent[b-o1hawvuar1],
.pl-tile-drop-indicator.ambiguous-accent-active[b-o1hawvuar1] {
    left: 0;
    right: 0;
    bottom: -28px;
    height: 4px;
    background: #F19822;
}

.pl-tile-drop-indicator.ambiguous-accent[b-o1hawvuar1] {
    opacity: 0.35;
    box-shadow: none;
}

.pl-tile-drop-indicator.ambiguous-accent-active[b-o1hawvuar1] {
    box-shadow: 0 0 10px rgba(241, 152, 34, 0.6);
}
/* /View/Components/DashboardComponents/PlEmbeddedModule.razor.rz.scp.css */
/* Embedded modules whose internals are flex-layouted report DocumentSize 0 (their content sizes
   itself to the parent rather than to authored pixels). The default `width: fit-content` on
   .pl-window-content then evaluates to 0 because the flex chain has no definite anchor. Force
   `min-width: 100%` here so when the host cell stretches (PlFlexDataAreaBlock detects flex-
   layouted embedded modules and switches the wrapper from pl-flex-size-auto to
   pl-flex-size-stretch), pl-window-content fills the cell and pl-main has a definite parent to
   size against. Pixel-layouted modules carry their DocumentSize as inline width on pl-main, so
   pl-window-content's fit-content still anchors there — min-width: 100% never exceeds the
   pixel anchor in that case. */
[b-tp4tv8n7yd] .pl-window-content {
    min-width: 100%;
}

/* PlModule's .pl-module-container no longer carries an inline height (the height: 100% used to be
   inline; it has moved to a `.pl-module-container-standalone` CSS class that we deliberately do
   not emit for embedded use). Re-establish the fill behaviour here so the wrapper's height: 100%
   propagates into the module container. */
[b-tp4tv8n7yd] .pl-module-container {
    height: 100%;
}
/* /View/Components/DashboardComponents/PlPersonalDashboard.razor.rz.scp.css */
/* Personal demo dashboard. Self-contained scoped CSS — disclaimer, alert, KPI cards,
   sections, watchlist rows, plus the chart widgets specific to this layout (donut,
   horizontal bar list, vertical bar chart). */

.pl-personal-dashboard[b-869mfecerq] {
    height: 100%;
    overflow: auto;
    background-color: var(--pl-neutral-bg-color-bg-layout, #F2F4F7);
    font-family: var(--pl-font-family-base, 'Asap', sans-serif);
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-personal-dashboard .pl-demo-dashboard__body[b-869mfecerq] {
    padding: 16px 24px 24px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* ---- shared card / typography ---- */

.pl-personal-dashboard .pl-demo-card[b-869mfecerq] {
    background-color: var(--pl-neutral-bg-color-bg-container, #FFFFFF);
    border: 1px solid var(--pl-neutral-border-color-border, #C4CBDA);
    border-radius: 4px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px rgba(0, 0, 0, 0.02);
}

.pl-personal-dashboard .pl-text--success[b-869mfecerq] { color: var(--pl-semantic-success-color-success-active, #21945E); }
.pl-personal-dashboard .pl-text--error[b-869mfecerq] { color: var(--pl-semantic-error-color-error, #C22704); }
.pl-personal-dashboard .pl-text--warning[b-869mfecerq] { color: var(--pl-semantic-warning-color-warning, #F19822); }
.pl-personal-dashboard .pl-text--info[b-869mfecerq] { color: var(--pl-semantic-info-color-info, #0070B5); }
.pl-personal-dashboard .pl-text--link[b-869mfecerq] { color: var(--pl-semantic-info-color-info, #0070B5); }
.pl-personal-dashboard .pl-text--secondary[b-869mfecerq] { color: var(--pl-neutral-text-color-text-secondary, #495769); }
.pl-personal-dashboard .pl-text--tertiary[b-869mfecerq] { color: var(--pl-neutral-text-color-text-tertiary, #6A778B); }

/* ---- alert banner ---- */

.pl-personal-dashboard .pl-demo-alert[b-869mfecerq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: 9px 16px;
    background-color: var(--pl-semantic-warning-color-warning-bg, #FFFBF0);
    border: 1px solid var(--pl-semantic-warning-color-warning-border, #FFDF9E);
    border-radius: 4px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03), 0 1px 6px rgba(0, 0, 0, 0.02), 0 2px 4px rgba(0, 0, 0, 0.02);
    font: inherit;
    font-size: 14px;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.pl-personal-dashboard .pl-demo-alert:disabled[b-869mfecerq] {
    cursor: default;
}

.pl-personal-dashboard .pl-demo-alert__lead[b-869mfecerq] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.pl-personal-dashboard .pl-demo-alert__lead i[b-869mfecerq] {
    color: var(--pl-semantic-warning-color-warning, #F19822);
}

.pl-personal-dashboard .pl-demo-alert__chevron[b-869mfecerq] {
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
    font-size: 12px;
}

/* ---- KPI row ---- */

.pl-personal-dashboard .pl-demo-kpis[b-869mfecerq] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
}

.pl-personal-dashboard .pl-demo-kpi[b-869mfecerq] {
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    cursor: pointer;
}

.pl-personal-dashboard .pl-demo-kpi:focus[b-869mfecerq] {
    border-color: var(--pl-semantic-info-color-info-border-hover, #0DB5F2);
    outline: none;
}

.pl-personal-dashboard .pl-demo-kpi__label[b-869mfecerq],
.pl-personal-dashboard .pl-demo-kpi__label-row[b-869mfecerq] {
    font-size: 14px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
}

.pl-personal-dashboard .pl-demo-kpi__label-row[b-869mfecerq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.pl-personal-dashboard .pl-demo-kpi__value-row[b-869mfecerq] {
    display: flex;
    align-items: baseline;
    gap: 8px;
}

.pl-personal-dashboard .pl-demo-kpi__value[b-869mfecerq] {
    font-size: 28px;
    line-height: 32px;
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-personal-dashboard .pl-demo-kpi__hint[b-869mfecerq] {
    font-size: 14px;
}

/* ---- 2-col grid ---- */

.pl-personal-dashboard .pl-demo-grid[b-869mfecerq] {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    align-items: start;
}

.pl-personal-dashboard .pl-demo-stack[b-869mfecerq] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    min-width: 0;
}

/* ---- generic section ---- */

.pl-personal-dashboard .pl-demo-section[b-869mfecerq] {
    display: flex;
    flex-direction: column;
}

.pl-personal-dashboard .pl-demo-section__header[b-869mfecerq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 16px 24px;
    border-bottom: 1px solid var(--pl-neutral-border-color-border-secondary, #DCE0EA);
}

.pl-personal-dashboard .pl-demo-section__title[b-869mfecerq] {
    margin: 0;
    font-size: 20px;
    line-height: 28px;
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-personal-dashboard .pl-demo-section__body[b-869mfecerq] {
    flex: 1;
    padding: 8px;
}

.pl-personal-dashboard .pl-demo-section__body--padded[b-869mfecerq] {
    padding: 16px 24px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.pl-personal-dashboard .pl-demo-section__footer[b-869mfecerq] {
    padding: 0 24px 16px;
}

/* ---- recent rows (same look as variant 1) ---- */

.pl-personal-dashboard .pl-demo-row[b-869mfecerq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 4px 8px;
    border-radius: 4px;
    cursor: pointer;
}

.pl-personal-dashboard .pl-demo-row:focus[b-869mfecerq] {
    background: linear-gradient(99deg, #F2F4F7 21%, #E2E7EE 47%);
    outline: none;
}

.pl-personal-dashboard .pl-demo-row:focus .pl-demo-row__title[b-869mfecerq] {
    color: var(--pl-semantic-info-color-info, #0070B5);
}

.pl-personal-dashboard .pl-demo-row__main[b-869mfecerq] {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

.pl-personal-dashboard .pl-demo-row__title[b-869mfecerq] {
    font-size: 16px;
    line-height: 24px;
    font-weight: 500;
    color: var(--pl-neutral-text-color-text, #0D1A26);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-personal-dashboard .pl-demo-row__meta[b-869mfecerq] {
    font-size: 14px;
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
    white-space: nowrap;
}

.pl-personal-dashboard .pl-demo-icon-tile[b-869mfecerq] {
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--pl-neutral-fill-color-fill-tertiary, #E9ECF1);
    border-radius: 4px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
    font-size: 14px;
}

/* ---- tag / select / button ---- */

.pl-personal-dashboard .pl-demo-tag[b-869mfecerq] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 0 8px;
    height: 20px;
    background-color: var(--pl-neutral-fill-color-fill-quaternary, #F2F4F7);
    border: 1px solid var(--pl-neutral-border-color-border, #C4CBDA);
    border-radius: 3px;
    font-size: 12px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
    white-space: nowrap;
}

.pl-personal-dashboard .pl-demo-tag--success[b-869mfecerq] {
    background-color: var(--pl-semantic-success-color-success-bg, #EBFAEB);
    border-color: var(--pl-semantic-success-color-success-border, #A8E0AF);
    color: var(--pl-semantic-success-color-success, #32B968);
    font-weight: 600;
}

.pl-personal-dashboard .pl-demo-tag--error[b-869mfecerq] {
    background-color: var(--pl-semantic-error-color-error-bg, #FFEDE6);
    border-color: var(--pl-semantic-error-color-error-border, #FF9063);
    color: var(--pl-semantic-error-color-error, #C22704);
}

.pl-personal-dashboard .pl-demo-select[b-869mfecerq] {
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 4px 12px;
    height: 32px;
    min-width: 100px;
    background-color: var(--pl-neutral-bg-color-bg-container, #FFFFFF);
    border: 1px solid var(--pl-neutral-border-color-border, #C4CBDA);
    border-radius: 4px;
    font-size: 14px;
    color: var(--pl-neutral-text-color-text, #0D1A26);
    cursor: not-allowed;
}

.pl-personal-dashboard .pl-demo-select i[b-869mfecerq] {
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
    font-size: 12px;
}

.pl-personal-dashboard .pl-demo-button[b-869mfecerq] {
    margin-top: 8px;
    padding: 8px 15px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    height: 40px;
    background-color: var(--pl-neutral-bg-color-bg-container, #FFFFFF);
    border: 1px solid var(--pl-neutral-border-color-border, #C4CBDA);
    border-radius: 4px;
    box-shadow: 0 2px 0 rgba(18, 46, 94, 0.07);
    font-size: 16px;
    color: var(--pl-neutral-text-color-text, #0D1A26);
    cursor: pointer;
}

.pl-personal-dashboard .pl-demo-button:disabled[b-869mfecerq] {
    cursor: not-allowed;
}

.pl-personal-dashboard .pl-demo-button__arrow[b-869mfecerq] {
    transform: rotate(45deg);
    font-size: 12px;
}

/* ---- watchlist entries (taller list) ---- */

.pl-personal-dashboard .pl-demo-watch[b-869mfecerq] {
    border: 1px solid #E5E8ED;
    border-radius: 4px;
    padding: 12px 16px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.pl-personal-dashboard .pl-demo-watch__head[b-869mfecerq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.pl-personal-dashboard .pl-demo-watch__title[b-869mfecerq] {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

.pl-personal-dashboard .pl-demo-watch__name[b-869mfecerq] {
    font-size: 16px;
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-personal-dashboard .pl-demo-watch__meta[b-869mfecerq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    font-size: 14px;
}

.pl-personal-dashboard .pl-demo-progress[b-869mfecerq] {
    height: 6px;
    background-color: var(--pl-neutral-fill-color-fill-quaternary, #F2F4F7);
    border-radius: 9999px;
    overflow: hidden;
}

.pl-personal-dashboard .pl-demo-progress__fill[b-869mfecerq] {
    height: 100%;
    background-color: var(--pl-semantic-primary-color-primary, #0070B5);
    border-radius: 9999px;
}

/* ---- horizontal bar list (Manager) — labels rendered in HTML next to the
       ApexChart so the avatar circles + names line up with each bar ---- */

.pl-demo-hbar-list[b-869mfecerq] {
    display: grid;
    grid-template-rows: repeat(5, 1fr);
    gap: 0;
    height: 220px;
    padding: 6px 0;
    box-sizing: border-box;
}

.pl-demo-hbar-row[b-869mfecerq] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
    min-width: 0;
    white-space: nowrap;
}

.pl-demo-hbar-row__name[b-869mfecerq] {
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-demo-hbar-chart[b-869mfecerq] {
    width: 100%;
}

.pl-demo-hbar-chart[b-869mfecerq]  .apexcharts-canvas {
    margin-left: -10px; /* trim Apex's default left padding so bars start near the labels */
}

.pl-demo-avatar[b-869mfecerq] {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    object-fit: cover;
    background-color: var(--pl-neutral-fill-color-fill-tertiary, #E9ECF1);
    flex-shrink: 0;
}

/* The Manager card body is a vertical stack — labels grid on top of bars chart */
.pl-demo-card .pl-demo-section__body--padded:has(.pl-demo-hbar-list)[b-869mfecerq] {
    display: grid;
    grid-template-columns: 180px 1fr;
    grid-template-rows: 1fr auto;
    gap: 12px;
    align-items: stretch;
}

.pl-demo-card .pl-demo-section__body--padded:has(.pl-demo-hbar-list) .pl-demo-hbar-list[b-869mfecerq] {
    grid-column: 1;
    grid-row: 1;
}

.pl-demo-card .pl-demo-section__body--padded:has(.pl-demo-hbar-list) .pl-demo-hbar-chart[b-869mfecerq] {
    grid-column: 2;
    grid-row: 1;
}

.pl-demo-card .pl-demo-section__body--padded:has(.pl-demo-hbar-list) .pl-demo-button[b-869mfecerq] {
    grid-column: 1 / -1;
    grid-row: 2;
}

/* ---- donut chart (ApexChart) + center labels + side legend ---- */

.pl-demo-chart-row[b-869mfecerq] {
    flex-direction: row !important;
    align-items: center;
    gap: 24px !important;
}

.pl-demo-donut-host[b-869mfecerq] {
    position: relative;
    width: 200px;
    height: 200px;
    flex-shrink: 0;
}

.pl-demo-donut-host__center[b-869mfecerq] {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    pointer-events: none;
}

.pl-demo-donut__label[b-869mfecerq] {
    font-size: 14px;
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
}

.pl-demo-donut__value[b-869mfecerq] {
    font-size: 28px;
    font-weight: 600;
    line-height: 32px;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-demo-legend[b-869mfecerq] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: 14px;
    flex: 1;
    min-width: 0;
}

.pl-demo-legend__title[b-869mfecerq] {
    font-weight: 600;
    margin-bottom: 4px;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-demo-legend__row[b-869mfecerq] {
    display: grid;
    grid-template-columns: 12px 1fr auto;
    align-items: center;
    gap: 8px;
}

.pl-demo-legend__dot[b-869mfecerq] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    display: inline-block;
}

.pl-demo-legend__label[b-869mfecerq] {
    color: var(--pl-neutral-text-color-text-secondary, #495769);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-demo-legend__value[b-869mfecerq] {
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

/* ---- responsive collapse ---- */

@media (max-width: 1100px) {
    .pl-personal-dashboard .pl-demo-kpis[b-869mfecerq] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .pl-personal-dashboard .pl-demo-grid[b-869mfecerq] {
        grid-template-columns: minmax(0, 1fr);
    }
    .pl-demo-chart-row[b-869mfecerq] {
        flex-direction: column !important;
    }
    .pl-demo-hbar[b-869mfecerq] {
        grid-template-columns: 140px 1fr auto;
    }
}
/* /View/Components/DashboardComponents/PlPortfolioDashboard.razor.rz.scp.css */
/* Portfolio demo dashboard. Self-contained scoped CSS — disclaimer, KPI cards,
   sections, plus the portfolio-specific widgets (overview cards, radar legend,
   risks, governance rows, watchlist). */

.pl-portfolio-dashboard[b-cr7slcry48] {
    height: 100%;
    overflow: auto;
    background-color: var(--pl-neutral-bg-color-bg-layout, #F2F4F7);
    font-family: var(--pl-font-family-base, 'Asap', sans-serif);
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-dashboard .pl-demo-dashboard__body[b-cr7slcry48] {
    padding: 16px 24px 24px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* ---- shared card / typography ---- */

.pl-portfolio-dashboard .pl-demo-card[b-cr7slcry48] {
    background-color: var(--pl-neutral-bg-color-bg-container, #FFFFFF);
    border: 1px solid #E5E8ED;
    border-radius: 10px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
    overflow: clip;
}

.pl-portfolio-dashboard .pl-text--success[b-cr7slcry48] { color: var(--pl-semantic-success-color-success-active, #21945E); }
.pl-portfolio-dashboard .pl-text--error[b-cr7slcry48] { color: var(--pl-semantic-error-color-error, #C22704); }
.pl-portfolio-dashboard .pl-text--warning[b-cr7slcry48] { color: var(--pl-semantic-warning-color-warning, #F19822); }
.pl-portfolio-dashboard .pl-text--info[b-cr7slcry48] { color: var(--pl-semantic-info-color-info, #0070B5); }
.pl-portfolio-dashboard .pl-text--secondary[b-cr7slcry48] { color: var(--pl-neutral-text-color-text-secondary, #495769); }

/* ---- KPI row ---- */

.pl-portfolio-dashboard .pl-demo-kpis[b-cr7slcry48] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
}

.pl-portfolio-dashboard .pl-demo-kpi[b-cr7slcry48] {
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    cursor: pointer;
}

.pl-portfolio-dashboard .pl-demo-kpi:focus[b-cr7slcry48] {
    border-color: var(--pl-semantic-info-color-info-border-hover, #0DB5F2);
    outline: none;
}

.pl-portfolio-dashboard .pl-demo-kpi__label[b-cr7slcry48] {
    font-size: 14px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
}

.pl-portfolio-dashboard .pl-demo-kpi__value-row[b-cr7slcry48] {
    display: flex;
    align-items: baseline;
    gap: 8px;
}

.pl-portfolio-dashboard .pl-demo-kpi__value[b-cr7slcry48] {
    font-size: 28px;
    line-height: 32px;
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-dashboard .pl-demo-kpi__delta[b-cr7slcry48] {
    font-size: 13px;
    font-weight: 600;
}

/* ---- two-column grid (left wide, right narrow) ---- */

.pl-portfolio-dashboard .pl-demo-grid[b-cr7slcry48] {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
    gap: 16px;
    align-items: start;
}

.pl-portfolio-dashboard .pl-portfolio-main[b-cr7slcry48],
.pl-portfolio-dashboard .pl-portfolio-side[b-cr7slcry48] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    min-width: 0;
}

/* ---- section ---- */

.pl-portfolio-dashboard .pl-demo-section[b-cr7slcry48] {
    display: flex;
    flex-direction: column;
}

.pl-portfolio-dashboard .pl-demo-section__header[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    height: 49px;
    padding: 0 16px;
    border-bottom: 1px solid #E5E8ED;
}

.pl-portfolio-dashboard .pl-demo-section__title[b-cr7slcry48] {
    margin: 0;
    font-size: 16px;
    line-height: 24px;
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-dashboard .pl-portfolio-section__icon[b-cr7slcry48] {
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
    font-size: 14px;
}

.pl-portfolio-dashboard .pl-portfolio-section__icon--star[b-cr7slcry48] {
    color: var(--pl-semantic-warning-color-warning, #F19822);
}

.pl-portfolio-dashboard .pl-demo-section__body[b-cr7slcry48] {
    flex: 1;
    padding: 8px;
}

.pl-portfolio-dashboard .pl-demo-section__body--padded[b-cr7slcry48] {
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* ---- portfolio cards (Figma node 870:21406) ---- */

.pl-portfolio-card[b-cr7slcry48] {
    border: 1px solid rgba(0, 159, 227, 0.2);
    border-radius: 10px;
    padding: 17px;
    background: linear-gradient(90deg, rgba(0, 159, 227, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.pl-portfolio-card__head[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.pl-portfolio-card__title-block[b-cr7slcry48] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}

.pl-portfolio-card__title[b-cr7slcry48] {
    font-size: 18px;
    line-height: 28px;
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-card__meta[b-cr7slcry48] {
    font-size: 14px;
    line-height: 20px;
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
}

.pl-portfolio-card__budget-block[b-cr7slcry48] {
    text-align: right;
    flex-shrink: 0;
}

.pl-portfolio-card__budget[b-cr7slcry48] {
    font-size: 24px;
    line-height: 32px;
    font-weight: 700;
    color: #009FE3;
}

.pl-portfolio-card__budget-label[b-cr7slcry48] {
    font-size: 12px;
    line-height: 16px;
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
}

.pl-portfolio-card__progress-row[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 14px;
}

.pl-portfolio-card__progress-row > :first-child[b-cr7slcry48] {
    color: var(--pl-neutral-text-color-text-tertiary, #6A778B);
}

.pl-portfolio-card__progress-value[b-cr7slcry48] {
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

/* ---- progress bar (card progress) ---- */

.pl-portfolio-card .pl-demo-progress[b-cr7slcry48] {
    height: 12px;
    background-color: #E5E8ED;
    border-radius: 9999px;
    overflow: hidden;
}

.pl-portfolio-card .pl-demo-progress__fill[b-cr7slcry48] {
    height: 100%;
    background: linear-gradient(90deg, #009FE3 0%, #00375B 100%);
    border-radius: 9999px;
}

/* ---- radar chart ---- */

.pl-portfolio-radar[b-cr7slcry48] {
    align-items: center;
}

.pl-portfolio-radar-legend[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 20px;
    flex-wrap: wrap;
    font-size: 13px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
}

.pl-portfolio-radar-legend__row[b-cr7slcry48] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.pl-portfolio-dashboard .pl-demo-legend__dot[b-cr7slcry48] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    display: inline-block;
}

/* ---- side column: recent + watchlist list rows ---- */

.pl-portfolio-side__list[b-cr7slcry48] {
    gap: 8px;
}

.pl-portfolio-recent[b-cr7slcry48] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 8px;
    border-radius: 4px;
}

.pl-portfolio-recent__title[b-cr7slcry48] {
    font-size: 14px;
    line-height: 20px;
    font-weight: 500;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-recent__kind[b-cr7slcry48] {
    font-size: 12px;
    line-height: 16px;
}

.pl-portfolio-watch[b-cr7slcry48] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 0;
    font-size: 14px;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-watch__star[b-cr7slcry48] {
    color: var(--pl-semantic-warning-color-warning, #F19822);
    font-size: 12px;
}

/* ---- risks (Figma node 870:21734) ---- */

.pl-portfolio-risk[b-cr7slcry48] {
    background-color: #FEF2F2;
    border: 1px solid #FFC9C9;
    border-radius: 4px;
    padding: 12px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.pl-portfolio-risk__title[b-cr7slcry48] {
    font-size: 14px;
    line-height: 20px;
    font-weight: 500;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

.pl-portfolio-risk__desc[b-cr7slcry48] {
    font-size: 12px;
    line-height: 16px;
    color: var(--pl-neutral-text-color-text-secondary, #495769);
}

.pl-portfolio-risk__footer[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: 4px;
}

.pl-portfolio-risk-tag[b-cr7slcry48] {
    display: inline-flex;
    align-items: center;
    height: 24px;
    padding: 0 8px;
    border-radius: 4px;
    font-size: 12px;
    line-height: 16px;
    white-space: nowrap;
}

.pl-portfolio-risk-tag--high[b-cr7slcry48] {
    background-color: #FFE2E2;
    color: #9F0712;
}

.pl-portfolio-risk-tag--medium[b-cr7slcry48] {
    background-color: #FEF9C2;
    color: #894B00;
}

.pl-portfolio-risk__trend[b-cr7slcry48] {
    font-size: 12px;
    line-height: 16px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.pl-portfolio-risk__trend--up[b-cr7slcry48] {
    color: #E7000B;
}

.pl-portfolio-risk__trend--stable[b-cr7slcry48] {
    color: #6A778B;
}

/* ---- Portfolio-Wert ---- */

.pl-portfolio-value__total[b-cr7slcry48] {
    text-align: center;
    padding: 12px 0 8px;
    border-bottom: 1px solid var(--pl-neutral-border-color-border-secondary, #DCE0EA);
}

.pl-portfolio-value__total-amount[b-cr7slcry48] {
    font-size: 28px;
    font-weight: 600;
    color: var(--pl-semantic-info-color-info, #0070B5);
}

.pl-portfolio-value__total-label[b-cr7slcry48] {
    font-size: 13px;
    margin-top: 2px;
}

.pl-portfolio-value__rows[b-cr7slcry48] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding-top: 4px;
}

.pl-portfolio-value__row[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 13px;
}

.pl-portfolio-value__amount[b-cr7slcry48] {
    font-weight: 600;
    color: var(--pl-neutral-text-color-text, #0D1A26);
}

/* ---- Governance rows ---- */

.pl-portfolio-governance[b-cr7slcry48] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 8px 12px;
    border-radius: 4px;
    font-size: 13px;
}

.pl-portfolio-governance--success[b-cr7slcry48] {
    background-color: var(--pl-semantic-success-color-success-bg, #EBFAEB);
}

.pl-portfolio-governance--success .pl-portfolio-governance__value[b-cr7slcry48] {
    color: var(--pl-semantic-success-color-success-active, #21945E);
}

.pl-portfolio-governance--warning[b-cr7slcry48] {
    background-color: var(--pl-semantic-warning-color-warning-bg, #FFFBF0);
}

.pl-portfolio-governance--warning .pl-portfolio-governance__value[b-cr7slcry48] {
    color: var(--pl-semantic-warning-color-warning, #F19822);
}

.pl-portfolio-governance--info[b-cr7slcry48] {
    background-color: #F1ECFB;
}

.pl-portfolio-governance--info .pl-portfolio-governance__value[b-cr7slcry48] {
    color: #6E3FC0;
}

.pl-portfolio-governance__value[b-cr7slcry48] {
    font-weight: 600;
}

/* ---- responsive ---- */

@media (max-width: 1100px) {
    .pl-portfolio-dashboard .pl-demo-kpis[b-cr7slcry48] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .pl-portfolio-dashboard .pl-demo-grid[b-cr7slcry48] {
        grid-template-columns: minmax(0, 1fr);
    }
}
/* /View/Components/DashboardComponents/PlTileColumn.razor.rz.scp.css */
.pl-tile-column[b-5opmrjh735] {
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
}
/* /View/Components/DashboardComponents/PlTileColumnSet.razor.rz.scp.css */
.pl-tile-column-set[b-t1ezpdy3ao] {
    box-sizing: border-box;
    display: flex;
    flex-direction: row;
    align-items: stretch;
    width: 100%;
}

/* Non-root tiles fill their flex cell vertically. Root tiles size to content so the dashboard
   surface (grey background applied one level up) determines the outer height. */
.pl-tile-column-set:not(.is-dashboard-root)[b-t1ezpdy3ao] {
    height: 100%;
}

/* Dashboard root: 1px right gutter so cell chrome (border / shadow) doesn't sit exactly on
   .pl-window-content's overflow:hidden clip and lose its rightmost pixel. */
.pl-tile-column-set.is-dashboard-root[b-t1ezpdy3ao] {
    padding-right: 1px;
}
/* /View/Components/DashboardComponents/PlTileContainer.razor.rz.scp.css */
.pl-tile-container[b-l47ouz1lw0] {
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    width: 100%;
}

/* Non-root tiles fill their flex cell vertically. Root tiles size to content so the dashboard
   surface (grey background applied one level up) determines the outer height. */
.pl-tile-container:not(.is-dashboard-root)[b-l47ouz1lw0] {
    height: 100%;
}

/* Dashboard root: 1px right gutter so the rightmost cell's chrome doesn't sit exactly on
   .pl-window-content's overflow:hidden clip and lose its rightmost pixel. The grey surface and
   the matching top inset live one level up on .pl-module-content-area.is-dashboard-module so
   they cover the .pl-module-padded gutter too. */
.pl-tile-container.is-dashboard-root[b-l47ouz1lw0] {
    padding-right: 1px;
}

/* Minimum visual chrome for dashboard tile leaves. Theme-driven; not customizing-driven.
   The 1px border is rendered as an inset box-shadow so it draws inside the cell's border-box —
   a real border at width:100% would be clipped where a row's rightmost cell touches the ancestor's
   right edge (overflow boundary).
   `overflow: hidden` keeps absolute-positioned DataFields (which still carry their authored
   pixel widths) from escaping the cell when the column is narrower than the field's natural width.
   The inset border-shadow renders before clipping, so the border itself is preserved. */
/* `::deep > .pl-block` rewrites to `[scope] > .pl-block` and matches direct .pl-block
   children of every PlTileContainer instance (dashboard root AND nested ones inside Container
   columns). Without this, leaves placed directly under the dashboard root get no chrome.
   `::deep .pl-tile-column > .pl-block` covers leaves inside ColumnSet columns.
   `::deep > .pl-tile-edit-overlay > .pl-block` (and the column variant) keeps chrome on tiles
   that are wrapped in the customize-mode overlay — the overlay sits between the tile container
   and the leaf's .pl-block, so the un-wrapped selectors would otherwise miss them.
   Leaves nested deeper than direct children (e.g., child DAs of a leaf rendered recursively
   via PlTileChildren) are NOT direct children of the column/root and therefore do not get
   chrome — that's intentional, so a tile leaf can hold multiple sub-DAs as one chromed card. */
[b-l47ouz1lw0] > .pl-block,
[b-l47ouz1lw0] .pl-tile-column > .pl-block,
[b-l47ouz1lw0] > .pl-tile-edit-overlay > .pl-block,
[b-l47ouz1lw0] .pl-tile-column > .pl-tile-edit-overlay > .pl-block {
    box-sizing: border-box;
    overflow: hidden;
    background-color: var(--pl-tile-background, #ffffff);
    border-radius: var(--pl-tile-border-radius, 8px);
    box-shadow:
        var(--pl-tile-border-shadow, inset 0 0 0 1px #E5E8ED),
        var(--pl-tile-shadow, 0 1px 2px rgba(0, 0, 0, 0.06));
    padding: var(--pl-tile-padding, 16px);
}

/* DataFields inside a tile cell: anchor to the DfBlock's right edge instead of using the
   customizing-authored pixel width. Otherwise df_width values larger than the (responsive) cell
   would overflow into the chrome's right padding and the overflow:hidden above would clip them
   flush with the cell border, eating the visible right padding. The !important is needed to win
   over the inline width style emitted by PlDataField.
   The :not(.pl-embedded-module *) guard keeps the rule from cascading into DataFields rendered
   inside an embedded module — those carry the embedded module's own authored pixel positions and
   widths, and stretching them to the cell's right edge would overlap titles and shift content. */
[b-l47ouz1lw0] .pl-tile-column .pl-datafield-block:not(.pl-embedded-module *) > .pl-df,
[b-l47ouz1lw0] .pl-tile-container .pl-datafield-block:not(.pl-embedded-module *) > .pl-df {
    right: 0;
    width: auto !important;
    max-width: 100%;
}

/* Status Indicator — Context A (dashboard tile leaf).
   Documented in docs/client_functionality/module_layout/status_indicator.md.
   The customizing model is semantic (`StatusIndicator`); the current visual treatment is a
   coloured left-edge bar, but the indication strategy is decided here on the client and may
   evolve without changing the customizing.
   The leaf already gets tile chrome (background, inset 1 px border via box-shadow, drop shadow,
   16 px padding, border-radius) from the rule above. When `.pl-status-indicator` is present we
   replace the chrome's 1 px inset border with a 4 px coloured bar on the LEFT side only by
   re-emitting the box-shadow stack with an asymmetric inset shadow.
   The inset border-color stays `#E5E8ED` (the tile-chrome colour) on top, right, bottom; the
   left side becomes `var(--pl-status-indicator-color)` at the indicator width. The drop shadow
   underneath is preserved unchanged.
   The `border-left: 0` reset suppresses the bar that PlDataAreaBlock.razor.css applies for
   Context B — inside a tile, the chrome's 16 px padding would otherwise place that border
   inside the chrome rather than at the chrome's outer left edge.
   Only direct children of the dashboard root or a column hit this rule. Inner DAs nested
   inside a tile leaf (rendered recursively by PlTileChildren) are not direct children and
   stay on Context B's plain border-left + radius. */
[b-l47ouz1lw0] > .pl-block.pl-status-indicator,
[b-l47ouz1lw0] .pl-tile-column > .pl-block.pl-status-indicator {
    border-left: 0;
    box-shadow:
        inset 0 1px 0 0 #E5E8ED,
        inset -1px 0 0 0 #E5E8ED,
        inset 0 -1px 0 0 #E5E8ED,
        inset var(--pl-status-indicator-width, 4px) 0 0 0 var(--pl-status-indicator-color, transparent),
        var(--pl-tile-shadow, 0 1px 2px rgba(0, 0, 0, 0.06));
}

/* Status Indicator — Treatment = Outline / Fill on a tile leaf.
   Documented in docs/client_functionality/module_layout/status_indicator.md.
   These treatments dress the chrome itself rather than overlaying a bar on it, so the asymmetric
   bar shadow above is replaced by the chrome's normal stack with the inset border recoloured to
   the accent. Scope: Cell supplies the whole shadow via --pl-tile-border-shadow
   (StatusIndicatorVisual.CellStyle); the fallback rebuilds the same shadow from
   --pl-status-indicator-color so an area-scoped Outline / Fill leaf keeps its accent instead of
   dropping to the grey chrome colour — `border: 0` below has already removed the real border the
   area-scope stylesheets would otherwise have drawn it with.
   Fill's surface tint is painted by the rule below. Because a background covers the padding box,
   the tint reaches the chrome's outer edge and the leaf renders as one solid banner instead of a
   white card framing a smaller tinted area — the shape the Figma alert banner needs.
   `border: 0` drops the area-scope border rules from the two data-area stylesheets: on a tile leaf
   the accent is drawn by the chrome's inset shadow, and a real border would double it up. */
[b-l47ouz1lw0] > .pl-block.pl-status-indicator-outline,
[b-l47ouz1lw0] > .pl-block.pl-status-indicator-fill,
[b-l47ouz1lw0] .pl-tile-column > .pl-block.pl-status-indicator-outline,
[b-l47ouz1lw0] .pl-tile-column > .pl-block.pl-status-indicator-fill,
[b-l47ouz1lw0] > .pl-tile-edit-overlay > .pl-block.pl-status-indicator-outline,
[b-l47ouz1lw0] > .pl-tile-edit-overlay > .pl-block.pl-status-indicator-fill,
[b-l47ouz1lw0] .pl-tile-column > .pl-tile-edit-overlay > .pl-block.pl-status-indicator-outline,
[b-l47ouz1lw0] .pl-tile-column > .pl-tile-edit-overlay > .pl-block.pl-status-indicator-fill {
    border: 0 !important;
    box-shadow:
        var(--pl-tile-border-shadow, inset 0 0 0 var(--pl-status-indicator-border-width, 1px) var(--pl-status-indicator-color, #E5E8ED)),
        var(--pl-tile-shadow, 0 1px 2px rgba(0, 0, 0, 0.06));
}

/* Keyed on the surface modifier, not on the treatment: a "no tint" Fill (white symbol background)
   resolves no surface, and an !important fallback here would then beat both the chrome's own
   --pl-tile-background and the .pl-symbol-{uid} background a flex-DA leaf carries — the opposite
   of what white means. The !important is needed when a surface *does* resolve, for that same
   symbol class; an embedded-module leaf (PlTileEmbeddedCell) carries no symbol class and is
   unaffected either way. */
[b-l47ouz1lw0] > .pl-block.pl-status-indicator-surface,
[b-l47ouz1lw0] .pl-tile-column > .pl-block.pl-status-indicator-surface,
[b-l47ouz1lw0] > .pl-tile-edit-overlay > .pl-block.pl-status-indicator-surface,
[b-l47ouz1lw0] .pl-tile-column > .pl-tile-edit-overlay > .pl-block.pl-status-indicator-surface {
    background-color: var(--pl-status-indicator-surface) !important;
}
/* /View/Components/DashboardComponents/PlTileEmbeddedCell.razor.rz.scp.css */
/* The tile cell is a flex item in a dashboard column / column-set chain that has no definite
   height (the dashboard root sizes to content). PlModule's `pl-module-container` carries an
   inline `height: 100%` for the standalone case where its parent fills the viewport — inside
   a tile that 100% resolves to 0 and the whole chain (.pl-module-content-area, splitter,
   scrollbar, pl-scroll) collapses to zero. We rebuild the chain inside the cell to size to the
   embedded module's intrinsic content height (driven by pl-main's inline DocumentSize) and
   set the cell's `min-height` to that intrinsic content so the `flex: 1 1 0` from the
   FlexStyle (Stretch / Weight) does not collapse it to chrome-only. */

.pl-tile-embedded-cell[b-xmnfgrhjsy] {
    display: flex;
    flex-direction: column;
    min-height: max-content;
}

[b-xmnfgrhjsy] .pl-module-container {
    height: auto;
    flex: 1 1 auto;
    min-height: 0;
    width: 100%;
}

/* Flex-column the body chain from the content area down to the scroll viewport so the viewport
   fills the cell: the content-sized module body sits at the top and the horizontal scrollbar
   lands at the cell's bottom edge instead of hugging the content. The cell's min-height:
   max-content still floors the chain at the intrinsic content height, so a content-sized cell
   (no extra space) renders unchanged. */
[b-xmnfgrhjsy] .pl-module-content-area,
[b-xmnfgrhjsy] .fluent-multi-splitter-pane,
[b-xmnfgrhjsy] .scrollbar-container {
    display: flex !important;
    flex-direction: column !important;
}

[b-xmnfgrhjsy] .pl-module-content-area,
[b-xmnfgrhjsy] .fluent-multi-splitter,
[b-xmnfgrhjsy] .fluent-multi-splitter-pane,
[b-xmnfgrhjsy] .scrollbar-container,
[b-xmnfgrhjsy] .pl-scroll-window {
    flex: 1 1 auto !important;
    min-height: 0;
    height: auto !important;
}

/* ─── Lifted title-area chrome ───────────────────────────────────────────────────────────────
   When the embedded module exposes a liftable TitleArea (a DA with FlexLayout.TitleArea and at
   least one DF marked Flex.InTitle), PlTileEmbeddedCell renders a title bar above the module
   body using the same class names as PlFlexDataAreaBlock so the visual result is identical.

   Blazor scoped CSS does not let rules in PlFlexDataAreaBlock.razor.css reach elements
   rendered here, so the title-area chrome is duplicated below. Keep the two files in sync —
   PlFlexDataAreaBlock.razor.css is the source of truth and any visual change there should be
   mirrored here.
   See docs/client_functionality/module_layout/embedded_module.md#widget-title. */

.pl-tile-embedded-cell.pl-flex-da-title-top[b-xmnfgrhjsy]    { flex-direction: column; }
.pl-tile-embedded-cell.pl-flex-da-title-bottom[b-xmnfgrhjsy] { flex-direction: column-reverse; }
.pl-tile-embedded-cell.pl-flex-da-title-start[b-xmnfgrhjsy]  { flex-direction: row; }
.pl-tile-embedded-cell.pl-flex-da-title-end[b-xmnfgrhjsy]    { flex-direction: row-reverse; }

.pl-flex-da-title[b-xmnfgrhjsy],
.pl-flex-da-body[b-xmnfgrhjsy] {
    display: flex;
    box-sizing: border-box;
}

.pl-flex-da-body[b-xmnfgrhjsy] {
    flex: 1 1 auto;
    flex-direction: column;
    min-height: 0;
}

.pl-flex-da-title[b-xmnfgrhjsy] {
    flex: 0 0 auto;
    gap: var(--pl-flex-da-title-gap, 8px);
    /* Match PlFlexDataAreaBlock's title height: 33 px min with an 8 px content offset toward
       the bottom edge so the heading sits just above the separator. */
    padding-bottom: var(--pl-flex-da-title-padding-bottom, 8px);
    min-height: var(--pl-flex-da-title-min-height, 33px);
}

/* Extend the title past the surrounding tile padding so the separator line spans the full
   widget width edge-to-edge. The --pl-tile-padding fallback mirrors the default in
   PlTileContainer.razor.css. */
.pl-tile-embedded-cell.pl-flex-da-title-top    > .pl-flex-da-title[b-xmnfgrhjsy],
.pl-tile-embedded-cell.pl-flex-da-title-bottom > .pl-flex-da-title[b-xmnfgrhjsy] {
    margin-left: calc(-1 * var(--pl-tile-padding, 16px));
    margin-right: calc(-1 * var(--pl-tile-padding, 16px));
    padding-left: var(--pl-tile-padding, 16px);
    padding-right: var(--pl-tile-padding, 16px);
}

.pl-tile-embedded-cell.pl-flex-da-title-start > .pl-flex-da-title[b-xmnfgrhjsy],
.pl-tile-embedded-cell.pl-flex-da-title-end   > .pl-flex-da-title[b-xmnfgrhjsy] {
    margin-top: calc(-1 * var(--pl-tile-padding, 16px));
    margin-bottom: calc(-1 * var(--pl-tile-padding, 16px));
    padding-top: var(--pl-tile-padding, 16px);
}

/* Title chrome: spacing between the title and the body plus the theme-driven 1px separator —
   direction depends on title position. */
.pl-tile-embedded-cell.pl-flex-da-title-top    > .pl-flex-da-title[b-xmnfgrhjsy] { margin-bottom: var(--pl-flex-da-title-spacing, 12px); border-bottom: var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }
.pl-tile-embedded-cell.pl-flex-da-title-bottom > .pl-flex-da-title[b-xmnfgrhjsy] { margin-top:    var(--pl-flex-da-title-spacing, 12px); border-top:    var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }
.pl-tile-embedded-cell.pl-flex-da-title-start  > .pl-flex-da-title[b-xmnfgrhjsy] { margin-right:  var(--pl-flex-da-title-spacing, 12px); border-right:  var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }
.pl-tile-embedded-cell.pl-flex-da-title-end    > .pl-flex-da-title[b-xmnfgrhjsy] { margin-left:   var(--pl-flex-da-title-spacing, 12px); border-left:   var(--pl-flex-da-title-separator, 1px solid #E5E8ED); }

/* Per-child wrapper in the title area. */
.pl-flex-item[b-xmnfgrhjsy] {
    display: flex;
    box-sizing: border-box;
    flex: 0 0 auto;
    min-width: 0;
    min-height: 0;
}

.pl-flex-size-stretch[b-xmnfgrhjsy] { flex: 1 1 auto; --pl-flex-btn-width: 100%; }
.pl-flex-size-auto[b-xmnfgrhjsy]    { flex: 0 0 auto; --pl-flex-btn-width: fit-content; }

/* Mirror of PlFlexDataAreaBlock.razor.css: a stretched or weight/percent-sized title item's
   single inner element must also fill the wrapper on the main axis, else the wrapper grows but
   the field hugs its content inside a mostly-empty cell. min-width: 0 keeps single-line content
   ellipsifying instead of forcing the wrapper open past its share. */
.pl-flex-item.pl-flex-size-stretch[b-xmnfgrhjsy]  > * {
    flex: 1 1 auto;
    min-width: 0;
}

/* Mirror of PlFlexDataAreaBlock.razor.css: an imposed-size cell must never paint past its
   share — clip the wrapper and restore the classic ellipsis on the field text. */
.pl-flex-item.pl-flex-size-stretch[b-xmnfgrhjsy] {
    overflow: hidden;
}

.pl-flex-item.pl-flex-size-stretch[b-xmnfgrhjsy]  .pl-df-flow .pl-datafield-content {
    overflow: hidden;
    text-overflow: ellipsis;
}

/* End group: only the first item keeps the auto margin, the rest reset it so they stay together. Mirror of PlFlexDataAreaBlock.razor.css. */
.pl-flex-da-title[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end[b-xmnfgrhjsy]    { margin-left: auto; }
.pl-flex-da-title[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xmnfgrhjsy] { margin-left: 0; }
.pl-flex-da-title[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end[b-xmnfgrhjsy]    { margin-top:  auto; }
.pl-flex-da-title[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-end ~ .pl-flex-item.pl-flex-align-end[b-xmnfgrhjsy] { margin-top:  0; }
.pl-flex-da-title[style*="flex-direction: row"]    > .pl-flex-item.pl-flex-align-center[b-xmnfgrhjsy] { margin-left: auto; margin-right: auto; }
.pl-flex-da-title[style*="flex-direction: column"] > .pl-flex-item.pl-flex-align-center[b-xmnfgrhjsy] { margin-top:  auto; margin-bottom: auto; }

/* Figma select chrome for title-area listboxes — mirror of PlFlexDataAreaBlock.razor.css (the source of truth), needed here for lifted titles. */
.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy] {
    align-self: center;
    height: 32px;
    min-width: 117px;
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-df {
    width: 100% !important;
}

/* PlDataField's flex-flow reset flattens the inner datafield-customizing div to static/auto, which
   collapses a listbox (it needs that div to fill the .pl-df cell and anchor the dropdown icon).
   Restore the fill/anchor for listbox items. Mirror of PlFlexDataAreaBlock.razor.css. */
.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-df > div[class*="datafield-customizing-"] {
    position: absolute !important;
    inset: 0 !important;
}

/* !important beats the symbol-driven chrome (SymbolCssGenerator emits border/background with !important). */
.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-input-popover-container {
    box-sizing: border-box;
    background-color: #FFFFFF !important;
    border: 1px solid var(--pl-flex-title-select-border, #C4CBDA) !important;
    border-radius: 4px;
    padding-left: 12px;
    padding-right: 30px;
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-input-field {
    font-size: 14px;
    line-height: 22px;
    color: var(--pl-flex-title-select-color, #0D1A26);
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-popover-icon.ddl-icon {
    position: absolute;
    inset: 0;
    z-index: 2;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1.5 3.75l4.5 4.5 4.5-4.5' fill='none' stroke='%238A95A8' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 12px center / 12px 12px;
    cursor: pointer;
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-popover-icon.ddl-icon::before {
    content: none;
}

.pl-flex-da-title > .pl-flex-item-listbox[b-xmnfgrhjsy]  .pl-popover-icon.ddl-icon:hover {
    background-color: transparent;
}

/* InTitle DFs are rendered as their df_hdg (Customizing.Title) text when set — that's the
   PLANTA-wide convention for labels. Mirrors .pl-flex-da-title-fallback in
   PlFlexDataAreaBlock.razor.css; keep the typography variables in sync. */
.pl-flex-da-title-fallback[b-xmnfgrhjsy] {
    align-self: center;
    font-family: var(--pl-flex-da-title-fallback-font-family, 'Asap', sans-serif);
    font-size: var(--pl-flex-da-title-fallback-font-size, 20px);
    font-weight: var(--pl-flex-da-title-fallback-font-weight, 600);
    line-height: var(--pl-flex-da-title-fallback-line-height, 28px);
    color: var(--pl-flex-da-title-fallback-color, #0d1a26);
}
/* /View/Components/DashboardComponents/PlTileFallbackCell.razor.rz.scp.css */
/* The outer `.pl-tile-fallback-cell` (also carrying `pl-block`) picks up the standard tile
   chrome from PlTileContainer.razor.css (white background, inset border, drop shadow, padding,
   border-radius). We just center the message inside that chrome. */
.pl-tile-fallback-cell[b-ryow5dioix] {
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
}

.pl-tile-fallback-cell-message[b-ryow5dioix] {
    color: var(--pl-color-warning, #c97b00);
    font-size: 13px;
    word-break: break-word;
}
/* /View/Components/DataFieldComponents/PlBackground.razor.rz.scp.css */
.pl-effect-blank[b-rnh1b5dreo] {
    background-color: white !important;
}
/* /View/Components/DataFieldComponents/PlButton.razor.rz.scp.css */
[b-fpt00e590y] .e-btn .e-btn-icon {
    display: unset;
    font-size: unset;
    margin-top: unset;
    vertical-align: unset;
    width: auto;
    margin: 0;
    padding: 0;
}

.pl-datafield-content[b-fpt00e590y] {
    overflow: unset !important;
    text-overflow: unset !important;
}

.pl-button[b-fpt00e590y] {
    width: 100%;
    height: 100%;
}

/* Shared layout for all buttons */
.pl-button[b-fpt00e590y]  .ant-btn {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    overflow: hidden;
}

/* Unconfigured buttons: AntDesign shape (rounded corners from the global .ant-btn
   rule), but classic content layout — padding, margins and sizing stay as before
   so existing mask CUs keep their dimensions. */
.pl-button:not(.pl-button-configured)[b-fpt00e590y]  .ant-btn {
    min-width: unset;
    background-color: var(--pl-neutral-bg-color-bg-container, white) !important;
    padding: 3px 3px !important;
    letter-spacing: unset;
    text-transform: unset;
}

/* Hover/active feedback matching .ant-btn-default (pl-component-overrides.css).
   Repeated here with !important because the symbol CSS (SymbolCssGenerator) sets
   color and border with !important, which would otherwise swallow the effect. */
.pl-button:not(.pl-button-configured)[b-fpt00e590y]  .ant-btn:not([disabled]):hover {
    border-color: var(--pl-semantic-primary-color-primary-hover) !important;
    color: var(--pl-semantic-primary-color-primary-hover) !important;
}

.pl-button:not(.pl-button-configured)[b-fpt00e590y]  .ant-btn:not([disabled]):active {
    border-color: var(--pl-semantic-primary-color-primary-active) !important;
    color: var(--pl-semantic-primary-color-primary-active) !important;
}

/* --pl-flex-btn-width comes from the flex cell wrapper (PlFlexDataAreaBlock.razor.css); the fallbacks keep the classic hug-the-caption sizing.
   border-box is what makes the configured spacing (SpacingStyle, applied as padding) safe under
   Size: Stretch — as margin on a width:100% box it added to the cell width and the button was
   clipped at the right edge of the data area. */
.pl-button.pl-button-configured[b-fpt00e590y] {
    box-sizing: border-box;
    width: var(--pl-flex-btn-width, fit-content);
    height: fit-content;
}

/* Configured buttons: ignore parent DataField size, let AntDesign handle sizing.
   The min-height keeps the AntDesign standard height as a floor: the flex span
   wrapper suppresses the line-height strut, so buttons whose only content is a
   small icon img would otherwise collapse to the icon height. */
.pl-button.pl-button-configured[b-fpt00e590y]  .ant-btn {
    display: inline-flex;
    position: static !important;
    width: var(--pl-flex-btn-width, auto) !important;
    height: auto !important;
    min-height: 32px;
    justify-content: center;
}

.pl-button.pl-button-configured[b-fpt00e590y]  .ant-btn.ant-btn-sm {
    min-height: 24px;
}

.pl-button.pl-button-configured[b-fpt00e590y]  .ant-btn.ant-btn-lg {
    min-height: 40px;
}

/* ::deep is mandatory for every icon rule here: the icon is built with RenderTreeBuilder
   (RenderButtonContent), and only markup written in a .razor file gets the b-* scope attribute
   that a plain scoped selector requires. Without ::deep the rule silently never matches.
   Icon/label spacing comes from the flex `gap` on .ant-btn > span below, not from icon margins. */
.pl-button[b-fpt00e590y]  .pl-button-icon {
    display: inline-block;
    vertical-align: middle;
}


.pl-button .e-btn-content[b-fpt00e590y] {
    display: inline-block;
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: clip;
}

.pl-button[b-fpt00e590y]  .ant-btn > span {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 5px;
}

/* Configured buttons: use flex gap for icon-text spacing */
.pl-button.pl-button-configured[b-fpt00e590y]  .ant-btn > span {
    gap: 8px;
}

/* Configured buttons: zero out icon margins (gap handles spacing) */
.pl-button.pl-button-configured[b-fpt00e590y]  .pl-button-icon {
    margin: 0;
}

/* Icon-only configured buttons: square shape matching AntDesign standard sizes */
.pl-button.pl-button-configured.pl-button-icon-only[b-fpt00e590y]  .ant-btn {
    width: 32px !important;
    height: 32px !important;
    min-width: 32px !important;
    padding: 0 !important;
}

.pl-button.pl-button-configured.pl-button-icon-only[b-fpt00e590y]  .ant-btn.ant-btn-lg {
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
}

.pl-button.pl-button-configured.pl-button-icon-only[b-fpt00e590y]  .ant-btn.ant-btn-sm {
    width: 24px !important;
    height: 24px !important;
    min-width: 24px !important;
}

.pl-button[b-fpt00e590y]  i.pl-button-icon {
    display: inline-flex;
    align-items: center;
    vertical-align: middle;
    font-size: 1.1em;
}

/* Outlook subscription button: drop AntDesign's default bottom shadow so it
   matches the borderless look of regular ImageButtons. */
.pl-button[b-fpt00e590y]  .ant-btn.pl-outlook-subscription-button {
    box-shadow: none !important;
}
/* /View/Components/DataFieldComponents/PlCheckBox.razor.rz.scp.css */
.e-icons.e-frame > input[type='checkbox'][b-qxol4qb5np] {
    height: 14px !important;
    /* Unify the browser-default accent (Chrome #0075FF vs Firefox #0060DF) on the Figma checkbox colorPrimary. */
    accent-color: var(--pl-semantic-primary-color-primary, #0070B5);
}

.e-icons.e-frame > input[type='checkbox']:hover:not(:disabled)[b-qxol4qb5np] {
    accent-color: var(--pl-semantic-primary-color-primary-hover, #009ADB);
}
/* /View/Components/DataFieldComponents/PlDataField.razor.rz.scp.css */
.pl-df[b-0tzc8vr7pr] {
    width: 100%;
    height: 100%;
    position: absolute;
}

    /* Lifts a cell whose editor is open above its neighbours. :not(:focus) keeps the mirrored
       container out of it (ADR-0020) — that focus opens nothing, and the lift outranks the pinned
       matrix bands, the fixed roots and the scrollbar, which would then paint under the marker. */
    .pl-df:focus-within:not(:focus)[b-0tzc8vr7pr] {
        z-index: var(--z-index-focus-field) !important;
    }

    /* The container only takes focus so the move is announced (ADR-0020); the visible marker is the
       skin's focus symbol applied through .pl-focused-df, so a UA ring here would only double it. */
    .pl-df:focus[b-0tzc8vr7pr] {
        outline: none;
    }

    /* A skin whose focus symbol is transparent or borderless would otherwise leave a
       keyboard-reached cell with no focus indicator at all (WCAG 2.4.7). :focus-visible stays off
       for pointer interaction, so this never doubles the symbol for a mouse user. */
    .pl-df:focus-visible[b-0tzc8vr7pr] {
        outline: 2px solid var(--color-primary-light-blue, Highlight);
        outline-offset: -2px;
    }


.pl-datafield-icon[b-0tzc8vr7pr] {
    object-fit: contain;
    padding-left: var(--spacing-field-padding, 3px);
    padding-right: var(--spacing-field-padding, 3px);
}

[b-0tzc8vr7pr] input:not(:focus) {
    color: inherit;
}

[b-0tzc8vr7pr] .pl-horizontaly-centered {
    margin-left: auto;
    margin-right: auto;
    width: fit-content;
}

[b-0tzc8vr7pr] .pl-datafield-content {
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}

/* Flex-DA-hosted fields (FlowLayout cascade is true). Opening up overflow restores the
   intrinsic-size chain — without it .pl-datafield-content's overflow:hidden reports a
   max-content of 0 to its ancestors, pinning the wrapping .pl-flex-item to the declared
   df_width and never letting content grow the cell. Keep white-space: nowrap so the row
   layout stays single-line; the wrapper grows horizontally instead of wrapping. */
/* In flex flow the field's generated classic-layout rule (position: absolute; width/height: 100%)
   still hits the inner component root and collapses it to 0 when the outer .pl-df is width:auto.
   Reset the inner root to flow so it sizes to content (icon div excluded — no datafield-customizing class). */
.pl-df-flow[b-0tzc8vr7pr]  > div[class*="datafield-customizing-"] {
    position: static !important;
    top: auto !important;
    left: auto !important;
    width: auto !important;
    height: auto !important;
}

.pl-df-flow[b-0tzc8vr7pr]  .pl-datafield-content {
    overflow: visible;
    text-overflow: clip;
    /* In a flex DA the field always carries symmetric horizontal breathing room regardless
       of text alignment — otherwise a right- or center-aligned cell would visibly hug one
       edge of its .pl-flex-item / row background while a left-aligned neighbour does not.
       The classic absolute-position layout still gates the padding on alignment via the
       .left-padding / .right-padding classes below, so this override is scoped to flow. */
    padding-left: var(--spacing-field-padding, 3px);
    padding-right: var(--spacing-field-padding, 3px);
}

    [b-0tzc8vr7pr] .pl-datafield-content.right-padding {
        padding-right: var(--spacing-field-padding, 3px);
    }

    [b-0tzc8vr7pr] .pl-datafield-content.left-padding {
        padding-left: var(--spacing-field-padding, 3px);
    }

[b-0tzc8vr7pr] .pl-text-align-right {
    text-align: right;
    justify-content: flex-end !important;
}

[b-0tzc8vr7pr] .pl-text-align-center {
    text-align: center;
    justify-content: center !important;
}

[b-0tzc8vr7pr] .pl-text-align-left {
    text-align: left;
    justify-content: flex-start !important;
}
/* /View/Components/DataFieldComponents/PlFileUpload.razor.rz.scp.css */
.upload-forbidden[b-0part6x82d] {
    cursor: not-allowed;
}

/* Values mirror the replaced MudPaper/MudText/MudToolBar/MudProgressLinear rendering (MudBlazor 8.15.0). */
.file-upload__dropzone-box[b-0part6x82d] {
    position: relative;
    box-sizing: border-box;
    width: 100%;
    height: 100px;
    margin-top: 16px;
    padding: 10px;
    border: 2px dashed rgba(0, 0, 0, 0.12);
    border-radius: 8px;
    background-color: #fff;
    color: rgba(66, 66, 66, 1);
}

.file-upload__dropzone-box--drag[b-0part6x82d] {
    border-color: #005794;
}

.file-upload__dropzone-title[b-0part6x82d] {
    margin: 0;
    font-family: Roboto, Helvetica, Arial, sans-serif;
    font-size: 1.25rem;
    font-weight: 500;
    line-height: 1.6;
    letter-spacing: .0075em;
}

.file-upload__progress[b-0part6x82d] {
    position: relative;
    height: 4px;
    margin: 28px 0;
    overflow: hidden;
    background-color: rgba(0, 87, 148, 0.2);
}

.file-upload__progress-bar[b-0part6x82d] {
    height: 100%;
    background-color: #005794;
    transition: width .2s linear;
}

.file-upload__toolbar[b-0part6x82d] {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 16px;
    height: 64px;
}

.error-message[b-0part6x82d] {
    padding: 1.5rem 1.5rem 0;
    margin: 0;
    color: red;
}
/* /View/Components/DataFieldComponents/PlFlexTagItem.razor.rz.scp.css */
/* The .pl-flex-tag-host span is rendered by this component, so it carries the CSS-isolation
   scope attribute — without it the Ant <Tag> child component would leave the ::deep rule
   below with no scoped ancestor and it would never match. Colours intentionally absent: the
   cascaded pl-symbol-{uid} rules from SymbolCssGenerator (border-color, background-color,
   color) carry !important and win against Ant's defaults. */

/* Centered in the .pl-flex-item wrapper (whose default cross-axis alignment would stretch the
   pill to the full row height) and capped at the wrapper's share so the text inside
   ellipsifies instead of painting past the cell. */
.pl-flex-tag-host[b-ls6ij1rmgf] {
    display: inline-flex;
    align-items: center;
    align-self: center;
    max-width: 100%;
    min-width: 0;
}

/* Geometry mirrors the panel-header badge (.pl-badge.ant-tag in pl-component-overrides.css)
   so both tag renderings look identical. */
.pl-flex-tag-host[b-ls6ij1rmgf]  .pl-flex-tag.ant-tag {
    height: 20px;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    line-height: 20px;
    font-family: Asap, sans-serif;
    font-weight: 400;
    font-size: 14px;
    padding: 1px 8px;
    margin: 0;
    border-radius: 3px;
    border-width: 1px;
    border-style: solid;
    white-space: nowrap;
    max-width: 100%;
}

/* No size overrides here: the icon keeps the intrinsic size of its icon class and, thanks to
   flex-shrink 0, never shrinks when the cell gets narrow — only the text span gives way. */
.pl-flex-tag-icon[b-ls6ij1rmgf] {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
}

/* Clipping happens inside the tag's padding box, so the 8px side paddings survive truncation. */
.pl-flex-tag-text[b-ls6ij1rmgf] {
    line-height: 20px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /View/Components/DataFieldComponents/PlImageButton.razor.rz.scp.css */
img[b-q6sft94f2z] {
    position: relative !important;
    top: 50% !important;
    left: 50% !important;
    transform: translate(-50%, -50%);
}
/* /View/Components/DataFieldComponents/PlImageEditable.razor.rz.scp.css */
.image-editable-uploader:hover .image-editable img[b-myrt55luop] {
    outline: 1px solid #00a9ff;
}

.image-editable-uploader:hover .remove-img-btn[b-myrt55luop] {
    display: block;
}

.image-editable[b-myrt55luop] {
    position: absolute;
}

.remove-img-btn[b-myrt55luop] {
    display: none;
    position: absolute;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.5);
    top: 3px;
    left: unset;
    right: 3px;
    transform: unset;
    z-index: 11;
}

    .remove-img-btn[b-myrt55luop]::before,
    .remove-img-btn[b-myrt55luop]::after {
        content: '';
        display: block;
        height: 1px;
        width: 15px;
        background-color: #1b1b1b;
        position: absolute;
        top: 50%;
        left: 50%;
    }

    .remove-img-btn[b-myrt55luop]::before {
        transform: translate(-50%, 0) rotate(45deg) !important;
    }
    
    .remove-img-btn[b-myrt55luop]::after {
        transform: translate(-50%, 0) rotate(-45deg) !important;
    }
/* /View/Components/DataFieldComponents/PlImageFallback.razor.rz.scp.css */
/* Avatar matches Figma User Avatar (Sidebar / User Dropdown):
   - 1px gradient stroke (full-opacity #0DB5F2 -> #0070B5)
   - Light gradient fill (same gradient at ~30% alpha, on white)
   - Dark blue text #0070B5
   The gradient border is achieved by stacking three background layers:
   the light tint and a white base both clipped to padding-box, and the
   full gradient clipped to border-box showing through a transparent border. */
/* Values mirror the replaced outlined MudPaper + h6 MudText rendering (MudBlazor 8.15.0). */
.pl-image-fallback-default[b-t9mw17gx8x] {
    position: relative;
    box-sizing: border-box;
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 18px;
    border: 2px dashed rgba(0, 0, 0, 0.12);
    border-radius: 8px;
    background-color: #fff;
    color: rgba(66, 66, 66, 1);
}

.pl-image-fallback-default-text[b-t9mw17gx8x] {
    margin: 0;
    font-family: Roboto, Helvetica, Arial, sans-serif;
    font-size: 1.25rem;
    font-weight: 500;
    line-height: 1.6;
    letter-spacing: .0075em;
    text-align: center;
}

.pl-image-fallback-initials[b-t9mw17gx8x] {
    width: 100%;
    height: 100%;
    min-width: 28px;
    min-height: 28px;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    background:
        var(--pl-avatar-tint, linear-gradient(147deg, rgba(13, 181, 242, 0.3) 11%, rgba(0, 112, 181, 0.3) 100%)) padding-box,
        linear-gradient(#FFFFFF, #FFFFFF) padding-box,
        var(--pl-avatar-stroke, linear-gradient(147deg, #0DB5F2 11%, #0070B5 100%)) border-box;
    border: 1px solid transparent;
    color: var(--pl-avatar-text, #0070B5);
    font-family: Asap, sans-serif;
    font-size: 12px;
    font-weight: 400;
    line-height: 1;
    border-radius: 50%;
    text-transform: uppercase;
    user-select: none;
    overflow: hidden;
    flex-shrink: 0;
}
/* /View/Components/DataFieldComponents/PlInlineBar.razor.rz.scp.css */
.pl-inline-bar-wrapper[b-9c0c64nxsf] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    width: 100%;
    align-self: center;
}

/* Top/bottom lines hold optional label + value pairs. justify-content: space-between
   produces the figma "label on the left, value on the right" alignment without forcing
   the customizer to pick a separate alignment knob — a single item on the line falls
   back to its natural edge via the auto-margin trick. */
.pl-inline-bar-line-top[b-9c0c64nxsf],
.pl-inline-bar-line-bottom[b-9c0c64nxsf] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 8px;
}

/* Middle line wraps the bar so Start/End label / value slots can sit beside it. The
   bar itself takes flex: 1 to consume remaining space — a Start label + bar + End value
   row therefore shrinks the bar by exactly the labels' widths, matching the figma
   "Budget … 85%" layout. */
.pl-inline-bar-line-mid[b-9c0c64nxsf] {
    display: flex;
    align-items: center;
    gap: 6px;
    width: 100%;
}

.pl-inline-bar-line-mid > .pl-inline-bar[b-9c0c64nxsf] {
    flex: 1 1 auto;
    min-width: 0;
}

/* A standalone Top/Bottom value (no label on that line) should still hug the trailing
   edge so the figma "65%" / "85%" alignment holds. Putting the value alone on a
   space-between line lands it at the start by default — push it to the end with margin
   so the single-element case visually matches the two-element case. */
.pl-inline-bar-line-top > .pl-inline-bar-value:only-child[b-9c0c64nxsf],
.pl-inline-bar-line-bottom > .pl-inline-bar-value:only-child[b-9c0c64nxsf] {
    margin-left: auto;
}

.pl-inline-bar[b-9c0c64nxsf] {
    position: relative;
    display: block;
    width: 100%;
    height: 8px;
    background-color: var(--pl-inline-bar-track, rgba(0, 0, 0, 0.06));
    border-radius: 4px;
    overflow: hidden;
    align-self: center;
}

.pl-inline-bar-fill[b-9c0c64nxsf] {
    display: block;
    height: 100%;
    border-radius: inherit;
    transition: width 120ms ease-out;
}

/* Label & value typography. Kept intentionally lean — colour / weight match the
   secondary text token used elsewhere in dashboard tiles, so a customizer doesn't need
   to wire up a symbol for a one-off bar caption. */
.pl-inline-bar-label[b-9c0c64nxsf] {
    font-size: 12px;
    line-height: 16px;
    color: var(--pl-text-secondary, #6e6e6e);
    white-space: nowrap;
}

.pl-inline-bar-value[b-9c0c64nxsf] {
    font-size: 12px;
    line-height: 16px;
    font-weight: 600;
    color: var(--pl-text-primary, #1f1f1f);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

/* Inside variant — overlay the value on the bar's track. The bar is already
   position: relative; this centres the value over the full width so it doesn't drift
   with the fill. Mix-blend-mode keeps the digits readable over both the filled (left)
   and unfilled (right) portions of the track. */
.pl-inline-bar-value-inside[b-9c0c64nxsf] {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;
    color: var(--pl-text-on-bar, #ffffff);
    mix-blend-mode: difference;
    font-size: 10px;
    line-height: 1;
}
/* /View/Components/DataFieldComponents/PlMarkdown.razor.rz.scp.css */
/* Editing: fixed slot size, no grow. White card beats the skin's transparent bg.
   Inner fill+scroll is in PlsMilkdownEditor.razor.css. */
.pl-markdown-wrapper.is-editing[b-55nnw8u097] {
    height: 100% !important;
    overflow: visible !important; /* don't clip the floating toolbar above the field */
    position: relative;
    background: var(--base-white, #fff) !important;
    outline: 1px solid var(--color-primary-light-blue, #00B2F5);
    outline-offset: -1px;
    box-shadow: 0 2px 10px rgba(0, 178, 245, 0.18), 0 1px 3px rgba(0, 0, 0, 0.08);
    z-index: 1;
}
/* /View/Components/DataFieldComponents/PlMultilineTextbox.razor.rz.scp.css */
.pl-multiline-wrapper[b-f2kzzjhm7d] {
    height: 100%;
    width: 100%;
    overflow-y: auto !important;
    box-sizing: border-box;
    position: relative;
}

.pl-multiline[b-f2kzzjhm7d] {
    width: 100%;
    min-height: 100%;
    box-sizing: border-box;
    text-overflow: ellipsis;
    border: none;
    outline: none;
    resize: none;
    line-height: 1.5em !important;
    background: inherit;
    overflow: auto !important;
    padding: 3px;
    white-space: pre-wrap;
    word-wrap: break-word;
}

    .pl-multiline:focus[b-f2kzzjhm7d] {
        outline: none;
        border: none;
    }

/* Re-inherit font/spacing so the edit textarea matches the read-only div (form controls reset letter-spacing → ~1px "shrink" on focus). */
.pl-multiline-editor[b-f2kzzjhm7d] {
    margin: 0;
    font-family: inherit;
    font-size: inherit;
    color: inherit;
    letter-spacing: inherit;
    word-spacing: inherit;
}

/* Editing: stay within the field's slot and scroll, like the desktop client — no escape/grow.
   The wrapper keeps its slot height (base rule) so the field bounds don't change on activation;
   the textarea fills the slot and scrolls its overflow. Visual edit affordance lives on the textarea. */
.pl-multiline-wrapper.is-editing[b-f2kzzjhm7d] {
    position: relative;
    z-index: 1;
}

.pl-multiline-wrapper.is-editing .pl-multiline-editor[b-f2kzzjhm7d] {
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    resize: none;
    overflow-y: auto;
    background: var(--base-white, #fff);
    /* Outline (not border) so the frame doesn't take layout space — a border with
       box-sizing: border-box would shift the content ~1px on click→edit. */
    outline: 1px solid var(--color-primary-light-blue, #00B2F5);
    outline-offset: -1px;
    box-shadow: 0 2px 10px rgba(0, 178, 245, 0.18), 0 1px 3px rgba(0, 0, 0, 0.08);
}

[b-f2kzzjhm7d] .e-float-input textarea, [b-f2kzzjhm7d] .e-float-input.e-control-wrapper textarea {
    min-height: 0px !important;
}
/* /View/Components/DataFieldComponents/PlOutlookSubscriptionImageButton.razor.rz.scp.css */
i[b-g6nmyw4ysm] {
    position: relative !important;
    margin: auto !important;
    cursor: pointer;
    text-align: center;
    font-size: 14px;
}
/* /View/Components/DataFieldComponents/PlTextBox.razor.rz.scp.css */
.pl-datafield-input-placeholder[b-ncf3tjm0im] {
    cursor: text;
}
/* /View/Components/DataFieldComponents/WebEmbeddedComponents/PlEmbeddedWebpage.razor.rz.scp.css */
.pl-popup-button[b-8ym9m3tuz6] {
    position: absolute;
    width: 50px;
    height: 50px;
    border: none;
    background: lightgrey;
    transition: visibility 0s, opacity 0.5s linear;
}

.pl-iframe-container[b-8ym9m3tuz6] {
    position: relative;
}

.pl-iframe-container iframe[b-8ym9m3tuz6] {
    border: none;
    display: block;
}

.pl-iframe-container .pl-popup-button[b-8ym9m3tuz6] {
    visibility: hidden;
    opacity: 0;
}

.pl-iframe-container:hover .pl-popup-button[b-8ym9m3tuz6] {
    visibility: visible;
    opacity: 0.5;
}

.pl-popup-button-top-left[b-8ym9m3tuz6] {
    left: 0;
    top: 0;
}

.pl-popup-button-top-right[b-8ym9m3tuz6] {
    right: 0;
    top: 0;
}

.pl-popup-button-bottom-left[b-8ym9m3tuz6] {
    left: 0;
    bottom: 0;
}

.pl-popup-button-bottom-right[b-8ym9m3tuz6] {
    right: 0;
    bottom: 0;
}
/* /View/Components/DialogComponents/PlDialogModule.razor.rz.scp.css */
.dialog-header[b-nwxvvhk5nk] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
    font-size: 18px;
}

    .dialog-header .dialog-title[b-nwxvvhk5nk] {

        font-weight: 600;
    }

.close-button[b-nwxvvhk5nk] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    padding: 0;
    border: none;
    outline: none;
    background: none;
    cursor: pointer;
    flex-shrink: 0;
    opacity: 0.7;
    border-radius: 3px;
}

    .close-button img[b-nwxvvhk5nk] {
        width: 22px;
        height: 22px;
    }

    .close-button:hover[b-nwxvvhk5nk] {
        opacity: 1;
    }

    .close-button:focus-visible[b-nwxvvhk5nk] {
        opacity: 1;
        outline: 2px solid var(--pl-neutral-border-color-border);
        outline-offset: 2px;
    }
    
.pl-dialog-module-content-wrapper[b-nwxvvhk5nk]{
    flex: 1 1 0;
    min-height: 0;
}    
/* /View/Components/DialogComponents/PlMessageBox.razor.rz.scp.css */
.pl-msgbox-text-container[b-v7rf94pa6d] {
    display: flex;
    align-items: center;
    gap: 20px;
}

.pl-msgbox-inputs[b-v7rf94pa6d] {
    margin-top: 10px;
}

.pl-msgbox-actions[b-v7rf94pa6d] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    margin-top: 24px;
}
/* /View/Components/DialogComponents/PlPasswordChange.razor.rz.scp.css */
.password-title[b-y0fr2px9ij] {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--mud-palette-primary);
    letter-spacing: 0.5px;
    margin: 4px 0;
}

.change-password-content[b-y0fr2px9ij] {
    width: 100%;
}

.password-field-container[b-y0fr2px9ij] {
    margin-bottom: 10px;
}

.password-label[b-y0fr2px9ij] {
    display: block;
    margin-bottom: 6px;
    font-size: 1rem;
    font-weight: 600;
    color: var(--mud-palette-primary-darken);
    letter-spacing: 0.3px;
}

.password-input[b-y0fr2px9ij] {
    width: 100%;
    padding: 10px;
    border: 1px solid rgba(0, 0, 0, 0.23);
    border-radius: 4px;
    font-size: 1rem;
    line-height: 1;
    transition: border-color 0.2s ease;
}

    .password-input:focus[b-y0fr2px9ij] {
        outline: none;
        border-color: var(--mud-palette-primary);
        box-shadow: 0 0 0 2px rgba(var(--mud-palette-primary-rgb), 0.2);
    }

.error-message[b-y0fr2px9ij] {
    color: var(--mud-palette-error);
    font-size: 0.875rem;
    margin-top: 8px;
    font-weight: 500;
}
/* /View/Components/DialogComponents/ScheduleGenerationComponents/PlCreateScheduleMessageBox.razor.rz.scp.css */
[b-aq1xegcslg] .mud-button {
    padding: 10px 20px;
    border-radius: 4px;
    background: #F3F4F5;
    box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.08);

    text-transform: none !important;

    font-size: 16px;
    text-align: center;
    line-height: var(--font-line-height-caption, 19.02px); /* 118.875% */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}
[b-aq1xegcslg] .mud-button:hover {
    background: #E3E5E8;
    box-shadow: 0 5px 6px 0 rgba(0, 0, 0, 0.12);
}
[b-aq1xegcslg] .mud-button-filled.mud-button-filled-primary {
    color: #FFF;
    background-color: var(--mud-palette-primary);
}
[b-aq1xegcslg] .mud-button-filled.mud-button-filled-primary:hover {
    background-color: #004575;
    box-shadow: 0 5px 6px 0 rgba(0, 0, 0, 0.12);
}
.ai-button-content[b-aq1xegcslg] {
    display: flex;
    align-items: center;
}

.text-14px[b-aq1xegcslg] {
    color: #3C3F43;
    font-family: Asap, serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 100%; /* 14px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}

.pl-title-text[b-aq1xegcslg] {
    align-self: stretch;

    color: #000;
    font-family: Asap, serif;
    font-size: 20px;
    font-style: normal;
    font-weight: 600;
    line-height: 100%; /* 20px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}
/* /View/Components/DialogComponents/ScheduleGenerationComponents/PlGeneratedScheduleDialog.razor.rz.scp.css */
[b-iqhynrwdnj] .mud-button {
    padding: 10px 20px;
    border-radius: 4px;
    background: #F3F4F5;
    box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.08);

    text-transform: none !important;

    font-size: 16px;
    text-align: center;
    line-height: var(--font-line-height-caption, 19.02px); /* 118.875% */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}
[b-iqhynrwdnj] .mud-button:hover {
    background: #E3E5E8;
    box-shadow: 0 5px 6px 0 rgba(0, 0, 0, 0.12);
}
[b-iqhynrwdnj] .mud-button-filled.mud-button-filled-primary {
    color: #FFF;
    background-color: var(--mud-palette-primary);
}
[b-iqhynrwdnj] .mud-button-filled.mud-button-filled-primary:hover {
    background-color: #004575;
    box-shadow: 0 5px 6px 0 rgba(0, 0, 0, 0.12);
}
.ai-button-content[b-iqhynrwdnj] {
    display: flex;
    align-items: center;
}

.custom-dialog-container[b-iqhynrwdnj] {
    position: fixed;
    display: flex;
    padding: 10px 16px;
    bottom: 55px;
    left: 50%;
    transform: translateX(-50%);
    z-index: var(--z-index-custom-dialog-container);
    width: auto;
    border-radius: 8px;
    background: white;
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12);
    gap: 10px;
}

.custom-dialog-container[b-iqhynrwdnj]::after {
    content: '';
    position: absolute;
    inset: 0;
    padding: 1px; /* Border width */
    border-radius: 8px;
    background: linear-gradient(to right, #01B0F3 0%, #016AB4 100%);
    -webkit-mask:
            linear-gradient(#fff 0 0) content-box,
            linear-gradient(#fff 0 0);
    -webkit-mask-composite: xor;
    mask-composite: exclude;
    pointer-events: none;
}

.generated-schedule-text[b-iqhynrwdnj] {
    color: #000;
    font-family: Asap, serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 500;
    line-height: 38px;
    letter-spacing: 0.4px;
}
/* /View/Components/DialogComponents/ScheduleGenerationComponents/PlGenerateScheduleDialog.razor.rz.scp.css */
[b-cnz4kd2u8n] .ant-input,
.df-container[b-cnz4kd2u8n]  .pl-popover-input {
    background-color: white;
    border: 1px solid var(--mud-palette-lines-inputs) !important;
    border-radius: var(--mud-default-borderradius);
    box-shadow: none !important;
    color: #000;
    font-family: Asap, serif !important;
    font-size: var(--font-size-body, 16px) !important;
    font-style: normal !important;
    font-weight: 400 !important;
    line-height: 20px; /* 125% */
    letter-spacing: var(--Font-Spacing-spacing-input, 0.15px);
    padding: 10px 8px !important;
    margin: 0;
}

.date-input-container .df-container[b-cnz4kd2u8n]  .pl-popover-input {
    border: none !important;
    background-color: transparent;
}

[b-cnz4kd2u8n] .ant-input:hover {
    border-color: rgba(0, 0, 0, 0.87) !important;
}

[b-cnz4kd2u8n] .ant-input:focus {
    border-color: var(--mud-palette-primary) !important;
    border-width: 2px !important;
    box-shadow: none !important;
    outline: none;
}

[b-cnz4kd2u8n] textarea.ant-input {
    resize: none;
}

.pl-dialog-title-text[b-cnz4kd2u8n] {
    color: #000;
    font-family: Asap, serif;
    font-size: 24px;
    font-style: normal;
    font-weight: 500;
    line-height: 19.02px; /* 79.25% */
    letter-spacing: 0.4px;
}

[b-cnz4kd2u8n] .pl-popover-icon {
    padding-right: 8px;
}

.text-14px[b-cnz4kd2u8n] {
    color: #3C3F43;
    font-family: Asap, serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 100%; /* 14px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}

.input-container[b-cnz4kd2u8n] {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    flex-shrink: 0;
    width: 100%;
}

[b-cnz4kd2u8n] .ant-tag {
    background-color: white;
    margin: 4px;
    height: 24px;
    padding: 0 8px;
    border-radius: var(--mud-default-borderradius);
    border-color: var(--mud-palette-lines-inputs);
}

[b-cnz4kd2u8n] .ant-tag:hover {
    background-color: var(--mud-palette-action-default-hover);
}

/* Projektsteckbrief expansion panel — match the MudExpansionPanel look (grey card with rounded corners). */
[b-cnz4kd2u8n] .ant-collapse {
    background: #F4F6F8;
    border: none;
    border-radius: 4px;
    margin-top: 16px;
    width: 100%;
}

[b-cnz4kd2u8n] .ant-collapse > .ant-collapse-item {
    border: none;
}

[b-cnz4kd2u8n] .ant-collapse-content {
    background: transparent;
    border-top: none !important;
}

/* AntDesign also draws a bottom border on the header itself — disable it so we don't get a double line. */
[b-cnz4kd2u8n] .ant-collapse-item > .ant-collapse-header,
[b-cnz4kd2u8n] .ant-collapse-item > .ant-collapse-header::after {
    border-bottom: none !important;
    padding: 16px 24px;
}

/* Collapse with the expand icon on the right side — flip header layout and tweak arrow spacing. */
[b-cnz4kd2u8n] .ant-collapse-icon-position-right .ant-collapse-header {
    display: flex;
    flex-direction: row-reverse;
}

[b-cnz4kd2u8n] .ant-collapse-arrow {
    margin-left: 0 !important;
    margin-right: 5px !important;
}

[b-cnz4kd2u8n] .ant-collapse-expand-icon {
    margin: auto 0 !important;
}

[b-cnz4kd2u8n] .ant-collapse-content-box {
    padding: 0 24px 16px !important;
}

/*
 * NOTE: AntDesign Modal's header / body / footer wrap our ChildContent from the OUTSIDE,
 * and the portal lives in <body> after AntDesign moves it via JS. Those wrappers have no
 * scoped ancestor, so ::deep cannot reach them — those rules live in the <style> block
 * inside PlGenerateScheduleDialog.razor (global, scoped via WrapClassName).
 */

[b-cnz4kd2u8n] .anticon svg {
    max-height: 19px;
}

.mud-dialog .mud-dialog-title[b-cnz4kd2u8n] {
    padding: 24px 24px 20px;
    border-bottom: 1px solid #DEE2E6;
}

.pl-tipcontainer[b-cnz4kd2u8n] {
    display: flex;
    padding: 3px 6px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    border-radius: 2px;
    background: linear-gradient(116deg, #A4DBF2 17.06%, #40B0E3 94.37%);
}

.pl-tip-text[b-cnz4kd2u8n] {
    color: #3C3F43;
    font-family: Asap, serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 400;
    line-height: 100%; /* 16px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}

.pl-tip-heading[b-cnz4kd2u8n] {
    color: #0D1A26;
    font-family: Asap, serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 100%; /* 14px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}

.pl-title-text[b-cnz4kd2u8n] {
    align-self: stretch;

    color: #000;
    font-family: Asap, serif;
    font-size: 20px;
    font-style: normal;
    font-weight: 600;
    line-height: 100%; /* 20px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}

.pl-expansion-title[b-cnz4kd2u8n] {
    min-width: 420px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
}

.expansion-content[b-cnz4kd2u8n] {
    border-top: 1px solid #DEE2E6;
    display: flex;
    padding-top: 16px;
    flex-direction: column;
    align-items: flex-start;
    gap: 24px;
    align-self: stretch;
}

.pl-title-content[b-cnz4kd2u8n] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.pl-content-container[b-cnz4kd2u8n] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
    align-self: stretch;
}

.pl-tooltip-container[b-cnz4kd2u8n] {
    display: contents;
}

.date-input-container[b-cnz4kd2u8n] {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    align-self: stretch;
}

.df-container[b-cnz4kd2u8n] {
    background: white;
}

.df-container[b-cnz4kd2u8n]  > .pl-df {
    width: 100% !important;
    height: 100% !important;
    position: relative !important;
}

.df-container[b-cnz4kd2u8n]  > .pl-df > div {
    border-radius: var(--mud-default-borderradius);
    border-color: var(--mud-palette-lines-inputs) !important;
    border-width: 1px !important;
    border-style: solid !important;
    transition: border-width,border-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;

    box-shadow: none !important;
}

.df-container[b-cnz4kd2u8n]  > .pl-df > div.pl-focused-df:focus-within {
    border-color: var(--mud-palette-primary) !important;
    border-width: 2px !important;
}

.pl-generating-container[b-cnz4kd2u8n] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 20px;
    padding: 40px 0;
}

.pl-generating-text[b-cnz4kd2u8n] {
    font-size: 14px;
    color: #495057;
}

/* /View/Components/ExcelExport/PlExcelExportDialog.razor.rz.scp.css */
.pl-excel-export-title[b-rliro9xs0e] {
    color: #000;
    font-family: Asap, serif;
    font-size: 24px;
    font-style: normal;
    font-weight: 500;
    line-height: 19.02px; /* 79.25% */
    letter-spacing: 0.4px;
}

.pl-dialog-actions[b-rliro9xs0e] {
    display: inline-flex;
    gap: 12px;
}

/* === Standard / bulk export switch === */

.pl-excel-export-tabs[b-rliro9xs0e] {
    margin-bottom: 8px;
}

.pl-excel-export-tabs[b-rliro9xs0e]  .ant-radio-group {
    display: flex;
}

.pl-excel-export-content[b-rliro9xs0e]  .pl-default-export-tab,
.pl-excel-export-content[b-rliro9xs0e]  .pl-bulk-export-tab {
    height: auto;
    padding: 6px 14px;
    color: #3C3F43;
    font-family: Asap, serif;
    font-size: 16px;
    font-weight: 500;
    line-height: var(--font-line-height-caption, 19.02px); /* 118.875% */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
    text-align: center;
    text-transform: none;
    border: 1px solid #DEE2E6;
    background: transparent;
    box-shadow: none;
}

.pl-excel-export-content[b-rliro9xs0e]  .pl-default-export-tab {
    border-radius: 4px 0 0 4px;
}

.pl-excel-export-content[b-rliro9xs0e]  .pl-bulk-export-tab {
    border-radius: 0 4px 4px 0;
}

/* The full border on both halves replaces AntDesign's shared 1px divider. */
.pl-excel-export-content[b-rliro9xs0e]  .ant-radio-button-wrapper::before {
    display: none;
}

.pl-excel-export-content[b-rliro9xs0e]  .ant-radio-button-wrapper-checked {
    color: #005794 !important;
    border-color: #005794 !important;
    background: #EFF8FF !important;
    box-shadow: none !important;
}

/* === Tab panel === */

.pl-panel-content[b-rliro9xs0e] {
    padding: 16px;
    height: 216px;
    overflow: hidden;
    border-radius: 4px;
    background: #F3F4F5;
    text-align: left;
}

.pl-layout-group-label[b-rliro9xs0e] {
    display: block;
    color: #3C3F43;
    font-family: Asap, serif;
    font-size: 14px;
    font-weight: 400;
    line-height: 100%; /* 14px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
    margin: 0 0 12px;
}

.pl-layout-group-label.pl-top-gap[b-rliro9xs0e] {
    margin-top: 24px;
}

/* === Checkboxes === */

.pl-excel-export-content[b-rliro9xs0e]  .ant-checkbox-wrapper {
    display: flex;
    align-items: center;
    color: #000;
    font-family: Asap, serif;
    font-size: 16px;
    font-weight: 400;
    line-height: 19px; /* 118.75% */
    letter-spacing: 0.15px;
}

/* Stacked, not inline: AntDesign indents a checkbox that follows another one. */
.pl-excel-export-content[b-rliro9xs0e]  .ant-checkbox-wrapper + .ant-checkbox-wrapper {
    margin-left: 0;
    margin-top: 13px;
}

.pl-excel-export-content[b-rliro9xs0e]  .ant-checkbox-wrapper > span:not(.ant-checkbox) {
    padding-left: 8px;
    padding-right: 0;
}

/* === File name === */

.pl-excel-export-content[b-rliro9xs0e]  .pl-excel-export-filename {
    height: var(--spacing-field-height-dense, 40px);
    padding: 10.5px 14px;
    border-radius: var(--border-radius-default, 4px);
    border: 1px solid var(--color-theme-lines-inputs, #BDBDBD);
    color: #000;
    font-family: Asap, serif;
    font-size: 16px;
    line-height: 19px;
    letter-spacing: 0.15px;
}

/* === Data area dropdown === */

/* A button, not a div, so the dropdown is reachable by keyboard — hence the UA styling reset. */
.pl-excel-export-select[b-rliro9xs0e] {
    display: flex;
    box-sizing: border-box;
    width: 100%;
    height: var(--spacing-field-height-dense, 40px);
    margin: 0;
    padding: var(--spacing-padding-md, 16px) var(--spacing-padding-sm, 14px);
    align-items: center;
    gap: var(--spacing-padding-xs, 8px);
    border-radius: var(--border-radius-default, 4px);
    border: 1px solid var(--color-theme-lines-inputs, #BDBDBD);
    background: var(--color-theme-white, #FFF);
    font: inherit;
    text-align: left;
    cursor: pointer;
}

.pl-excel-export-select:hover[b-rliro9xs0e] {
    border-color: rgba(0, 0, 0, 0.54);
}

.pl-excel-export-select:focus-visible[b-rliro9xs0e] {
    outline: 2px solid var(--color-theme-primary, #0070B5);
    outline-offset: 1px;
}

.pl-excel-export-select-text[b-rliro9xs0e] {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    color: #000;
    font-family: Asap, serif;
    font-size: var(--font-size-body, 16px);
    font-weight: 400;
    line-height: var(--font-line-height-input, 19px); /* 118.75% */
    letter-spacing: 0.15px;
}

.pl-excel-export-select-placeholder[b-rliro9xs0e] {
    color: var(--color-theme-gray-default, #9E9E9E);
}

/* The whole field opens the popup, so the caret must not light up on its own. */
.pl-excel-export-select .pl-popover-icon.ddl-icon:hover[b-rliro9xs0e] {
    background-color: transparent;
}

.pl-excel-export-select .pl-popover-icon.ddl-icon:hover[b-rliro9xs0e]::before {
    color: var(--color-popover-icon);
}

.pl-excel-export-tree-panel[b-rliro9xs0e] {
    min-width: 384px;
    max-height: 288px;
    overflow: auto;
    padding: 4px 0;
    border-radius: 4px;
    background: #FFF;
    box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
}

.pl-excel-export-tree-panel[b-rliro9xs0e]  .ant-tree-title {
    color: #000;
    font-family: Asap, serif;
    font-size: 16px;
    font-weight: 400;
    line-height: 19px;
    letter-spacing: 0.15px;
}

/* === No-data warning === */

.pl-excel-export-warning-text[b-rliro9xs0e] {
    color: #000;
    font-family: Asap, serif;
    font-size: 16px;
    font-weight: 400;
    line-height: 19px;
    letter-spacing: 0.15px;
}
/* /View/Components/GlobalOverlay/PlProgressOverlayProvider.razor.rz.scp.css */
.progress-overlay[b-z34r4bckko] {
    position: absolute;
    inset: 0;
    /* Must sit above the toolbar (--z-index-top-element) so it dims and blocks it. */
    z-index: calc(var(--z-index-top-element) + 1000);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 16px;
    background-color: rgba(255, 255, 255, 0.5);
}

.progress-message[b-z34r4bckko] {
    margin: 0;
    font-size: 1.5rem;
    font-weight: 500;
}
/* /View/Components/HeaderComponents/PlBusyIndicator.razor.rz.scp.css */
.busymode-animation-container[b-hwcbnvpebm] {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 4px;
    z-index: calc(var(--z-index-top-element) + 5);
}

/* Track, timings and keyframes mirror the replaced indeterminate MudProgressLinear (MudBlazor 8.15.0). */
.busymode-progress[b-hwcbnvpebm] {
    position: relative;
    width: 100%;
    height: 4px;
    overflow: hidden;
}

.busymode-progress[b-hwcbnvpebm]::before {
    content: "";
    position: absolute;
    inset: 0;
    background-color: #424242;
    opacity: 0.2;
}

.busymode-progress-bar[b-hwcbnvpebm] {
    position: absolute;
    top: 0;
    bottom: 0;
    background-color: #009dd9;
}

.busymode-progress-bar--1[b-hwcbnvpebm] {
    animation: busymode-indeterminate-1-b-hwcbnvpebm 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
}

.busymode-progress-bar--2[b-hwcbnvpebm] {
    animation: busymode-indeterminate-2-b-hwcbnvpebm 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;
}

@keyframes busymode-indeterminate-1-b-hwcbnvpebm {
    0% {
        left: -35%;
        right: 100%;
    }

    60% {
        left: 100%;
        right: -90%;
    }

    100% {
        left: 100%;
        right: -90%;
    }
}

@keyframes busymode-indeterminate-2-b-hwcbnvpebm {
    0% {
        left: -200%;
        right: 100%;
    }

    60% {
        left: 107%;
        right: -8%;
    }

    100% {
        left: 107%;
        right: -8%;
    }
}
/* /View/Components/HeaderComponents/PlColumnChooser.razor.rz.scp.css */
.text[b-5xblphg7cv], input.checkbox[b-5xblphg7cv] {
    vertical-align: middle;
}

.context-menu-item[b-5xblphg7cv] {
    font-size: 11px;
    display: flex;
    gap: 5px;
    align-items: center;
}
/* /View/Components/HeaderComponents/PlTitleTemplate.razor.rz.scp.css */
.title[b-ye7ag7kt5v] {
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    width: 100%;
    height: 100%;
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-between;
}

    .title > .title-text[b-ye7ag7kt5v] {
        flex-shrink: 1;
        flex-grow: 1;
        flex-basis: 0;
        overflow: hidden;
        text-overflow: ellipsis;
    }

.title-text.left[b-ye7ag7kt5v] {
    padding-left: var(--spacing-field-padding, 3px);
}

.title-text.right[b-ye7ag7kt5v] {
    padding-right: var(--spacing-field-padding, 3px);
}

/* Ensure drag cursor is not overridden during title drag operations */
body.dragging-title[b-ye7ag7kt5v], body.dragging-title *[b-ye7ag7kt5v] {
    cursor: url("icons/cursors/hand-back-fist.png"), grabbing !important;
}

/* Prevent pointer events on other elements during drag to avoid cursor conflicts */
body.dragging-title *:not(.title)[b-ye7ag7kt5v] {
    pointer-events: none;
}

/* Keep pointer events on dragged title for smooth interaction */
body.dragging-title .title[b-ye7ag7kt5v] {
    pointer-events: auto;
}

/* Plus icon styling */
.pl-title-plus-icon[b-ye7ag7kt5v] {
    cursor: pointer;
    margin: auto 3px;
    display: inline-flex;
    align-items: center;
}

    .pl-title-plus-icon[b-ye7ag7kt5v]  .anticon {
        color: #28a745;
        font-size: 15px;
        line-height: 0;
        pointer-events: none;
    }

        .pl-title-plus-icon[b-ye7ag7kt5v]  .anticon svg {
            shape-rendering: geometricPrecision;
        }

            .pl-title-plus-icon[b-ye7ag7kt5v]  .anticon svg path {
                stroke: currentColor;
                stroke-width: 60;
                stroke-linecap: round;
                stroke-linejoin: round;
                paint-order: stroke fill;
            }

    .pl-title-plus-icon:hover[b-ye7ag7kt5v]  .anticon {
        color: #34ce57;
    }

    .pl-title-plus-icon:active[b-ye7ag7kt5v]  .anticon {
        color: #1e7e34;
    }
/* /View/Components/HelpDeskComponents/PlFeedback.razor.rz.scp.css */
.feedback-container[b-2e06xknvua] {
    font-family: Asap, sans-serif;
    width: 100%;
    height: 100%;
    margin: auto;
    overflow: hidden;
}

.feedback-header[b-2e06xknvua] {
    display: flex;
    width: 100%;
    padding: 16px 24px;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    background: linear-gradient(285deg, #132836 6.92%, #263C4A 96.33%);
}

.feedback-title[b-2e06xknvua] {
    align-self: stretch;
    color: #FFF;
    font-family: Asap, sans-serif;
    font-size: 20px;
    font-style: normal;
    font-weight: 600;
    line-height: 19px;
    letter-spacing: 0.15px;
}

.feedback-header p[b-2e06xknvua] {
    color: #FFF;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%; /* 22.4px */
    letter-spacing: 0.15px;
    margin-bottom: 0;
}

.feedback-body[b-2e06xknvua] {
    height: 100%;
    padding: 16px 24px;
    display: flex;
    flex-flow: column;
    justify-content: stretch;
    gap: 16px;
}

.sentiment-selector[b-2e06xknvua] {
    display: flex;
    width: 100%;
    align-items: center;
    gap: 16px;
}

.sentiment-btn[b-2e06xknvua] {
    display: flex;
    height: 55px;
    font-size: 2.5em;
    padding: 12px 16px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    flex: 1 0 0;
    border: 1px solid transparent;
    border-radius: 4px;
    background: #FFF;
    color: #8A95A8;
    box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.08);
    outline: none;
}

    .sentiment-btn.active[b-2e06xknvua] {
        border: 1px solid #005794;
        color: #005794;
        background: #EFF8FF;
        box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.08);
    }

.category-selector[b-2e06xknvua] {
    display: inline-flex;
    align-items: flex-start;
    align-content: flex-start;
    gap: 8px;
    flex-wrap: wrap;
}

    .category-selector button[b-2e06xknvua] {
        display: flex;
        padding: 6px 12px;
        justify-content: center;
        align-items: center;
        gap: 10px;
        border-radius: 4px;
        border: 1px solid #DEE2E6;
        color: #3C3F43;
        text-align: center;
        font-family: Asap, sans-serif;
        font-size: 16px;
        font-style: normal;
        font-weight: 500;
        line-height: var(--font-line-height-caption, 19.02px); /* 118.875% */
        letter-spacing: var(--font-letter-spacing-caption, 0.4px);
        outline: none;
    }

        .category-selector button.active[b-2e06xknvua] {
            border: 1px solid #005794;
            color: #005794;
            background: #EFF8FF;
            box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.08);
        }

.form-group[b-2e06xknvua] {
    margin-bottom: 0;
}

    .form-group label[b-2e06xknvua] {
        display: flex;
        align-items: flex-start;
        gap: 8px;
        color: #344D5F;
        font-family: Asap, sans-serif;
        font-size: 16px;
        font-style: normal;
        font-weight: 600;
        line-height: 140%; /* 22.4px */
        letter-spacing: 0.15px;
        margin-bottom: 0;
    }

    .form-group.email-group[b-2e06xknvua] {
        display: flex;
        width: 100%;
        flex-direction: column;
        align-items: flex-start;
        gap: 8px;
    }

        .form-group.email-group input[b-2e06xknvua] {
            display: flex;
            font-size: 14px;
            height: var(--spacing-field-height-dense, 40px);
            padding: var(--spacing-padding-md, 12px) var(--spacing-padding-sm, 10px);
            align-items: center;
            gap: var(--spacing-padding-xs, 8px);
            align-self: stretch;
            border-radius: var(--border-radius-default, 4px);
            border: 1px solid #DEE2E6;
            background: var(--color-theme-white, #FFF);
            outline: none;
        }

            .form-group.email-group input:focus[b-2e06xknvua] {
                outline: 1px solid #005794;
            }

            .form-group.email-group input.invalid[b-2e06xknvua] {
                border: 1px solid #dc3545;
            }

            .form-group.email-group input.invalid:focus[b-2e06xknvua] {
                outline: 1px solid #dc3545;
            }

        .form-group.email-group .form-text[b-2e06xknvua] {
            color: #3C3F43;
            font-family: Asap, sans-serif;
            font-size: 14px;
            font-style: normal;
            font-weight: 400;
            line-height: 130%; /* 18.2px */
            letter-spacing: var(--font-letter-spacing-caption, 0.4px);
        }

    .form-group.feedback-group .textarea-container[b-2e06xknvua] {
        position: relative;
        width: 100%;
    }

    .form-group.feedback-group textarea[b-2e06xknvua] {
        display: flex;
        font-size: 14px;
        width: 100%;
        height: 180px;
        padding: var(--spacing-padding-md, 12px) var(--spacing-padding-sm, 10px);
        padding-bottom: 30px;
        align-items: flex-start;
        gap: var(--spacing-padding-xs, 8px);
        flex-shrink: 0;
        border-radius: var(--border-radius-default, 4px);
        border: 1px solid #DEE2E6;
        background: var(--color-theme-white, #FFF);
        box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.06);
        resize: none;
        outline: none;
        box-sizing: border-box;
    }

        .form-group.feedback-group textarea:focus[b-2e06xknvua] {
            outline: 1px solid #005794;
        }

    .form-group.feedback-group .character-count[b-2e06xknvua] {
        position: absolute;
        bottom: 8px;
        right: 12px;
        color: #8A95A8;
        font-family: Asap, sans-serif;
        font-size: 12px;
        font-style: normal;
        font-weight: 400;
        line-height: 100%;
        letter-spacing: 0.4px;
        pointer-events: none;
    }

.feedback-send-btn[b-2e06xknvua] {
    width: 100%;
    display: inline-flex;
    padding: 10px 16px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    border-radius: 4px;
    background: #005794;
    box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.08);
    outline: none;
}

.optional-tag[b-2e06xknvua] {
    display: flex;
    padding: 2px 4px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    border-radius: 4px;
    background: #DEDEE4;
    color: #3C3F43;
    font-family: Asap, sans-serif;
    font-size: 12px;
    font-style: normal;
    font-weight: 400;
    line-height: 100%; /* 12px */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
}

[b-2e06xknvua] .feedback-send-btn {
    width: 100%;
    display: inline-flex;
    padding: 10px 16px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    border-radius: 4px;
    background: #005794;
    box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.08);
    color: #FFF;
    text-align: center;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 500;
    line-height: var(--font-line-height-caption, 19.02px); /* 118.875% */
    letter-spacing: var(--font-letter-spacing-caption, 0.4px);
    text-transform: none;
    outline: none;
}

    [b-2e06xknvua] .feedback-send-btn:hover {
        background: #004b7f;
    }

    [b-2e06xknvua] .feedback-send-btn:disabled {
        background: lightgray !important;
    }


[b-2e06xknvua] .feedback-send-btn .button-text {
    margin-left: 8px;
}

.feedback-footer[b-2e06xknvua] {
    color: #344D5F;
    font-family: Asap, sans-serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%;
    letter-spacing: 0.15px;
}

.feedback-confirmation[b-2e06xknvua] {
    display: flex;
    flex-flow: column;
    padding: 40px 24px;
    justify-content: center;
    align-items: center;
    gap: 10px;
}

.feedback-confirmation-check[b-2e06xknvua] {
    color: #018E88;
    width: 58px;
    height: 58px;
    flex-shrink: 0;
    font-size: 55px;
}

.feedback-confirmation-title[b-2e06xknvua] {
    color: #00847F;
    text-align: center;
    font-family: Asap, sans-serif;
    font-size: 20px;
    font-style: normal;
    font-weight: 600;
    line-height: 19px; /* 95% */
    letter-spacing: 0.15px;
    margin-top: 10px;
}

.feedback-confirmation-text[b-2e06xknvua] {
    color: #132836;
    text-align: center;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%; /* 22.4px */
    letter-spacing: 0.15px;
    margin-bottom: 20px;
}

.feedback-error-icon[b-2e06xknvua] {
    color: #dc3545;
    width: 58px;
    height: 58px;
    flex-shrink: 0;
    font-size: 55px;
}

.feedback-error-title[b-2e06xknvua] {
    color: #dc3545;
    text-align: center;
    font-family: Asap, sans-serif;
    font-size: 20px;
    font-style: normal;
    font-weight: 600;
    line-height: 19px;
    letter-spacing: 0.15px;
    margin-top: 10px;
}

.feedback-error-text[b-2e06xknvua] {
    color: #132836;
    text-align: center;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%;
    letter-spacing: 0.15px;
    margin-bottom: 20px;
}
/* /View/Components/HelpDeskComponents/PlFeedbackItem.razor.rz.scp.css */
.feedback-footer[b-7go5zql797] {
    color: #344D5F;
    font-family: Asap, sans-serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 140%;
    letter-spacing: 0.15px;
    word-wrap: break-word;
    overflow-wrap: break-word;
    max-width: 100%;
    padding: 0 24px 16px 24px;
}
/* /View/Components/HelpDeskComponents/PlHelpDesk.razor.rz.scp.css */
.help-desk-container[b-y73mv9yykv] {
    display: flex;
    flex-direction: column;
    height: 100%;
    width: 100%;
    color: #132836;
}

.help-desk-header[b-y73mv9yykv] {
    width: 100%;
    height: auto;
    min-height: 60px;
    padding: 16px 20px;
    border-bottom: 1px solid #e9ecef;
    display: flex;
    justify-content: space-between;
    align-items: center;
    align-self: stretch
}

    .help-desk-header .close-button[b-y73mv9yykv] {
        max-width: 25px;
        max-height: 25px;
        min-width: 25px;
        min-height: 25px;
        font-size: 20px;
        border: none;
        outline: none;
    }

        .help-desk-header .close-button:focus[b-y73mv9yykv],
        .help-desk-header .close-button:active[b-y73mv9yykv] {
            border: none;
            outline: none;
            box-shadow: none;
        }

        .help-desk-header .close-button:hover[b-y73mv9yykv] {
            color: #ff3300;
        }

.help-desk-title[b-y73mv9yykv] {
    display: flex;
    flex-direction: row;
    gap: 6px;
}

    .help-desk-title .title-text[b-y73mv9yykv] {
        color: inherit;
        leading-trim: both;
        text-edge: cap;
        font-family: Asap;
        font-size: 20px;
        font-style: normal;
        font-weight: 500;
        line-height: normal;
    }

    .help-desk-title .title-icon[b-y73mv9yykv] {
        display: flex;
        width: 24px;
        height: 24px;
        justify-content: center;
        align-items: center;
        background-color: #455A6B;
        -webkit-mask: url(icons/accordionIcon.svg) no-repeat center;
        mask: url(icons/accordionIcon.svg) no-repeat center;
    }

.help-desk-content[b-y73mv9yykv] {
    width: 100%;
    flex: 1;
    overflow-y: auto;
    max-height: 785px;
    min-height: 650px;
}

.back-button[b-y73mv9yykv] {
    font-size: 1.3em;
    padding-top: 3px;
    width: 1em;
    outline: none;
}

.help-desk-items-list[b-y73mv9yykv] {
    width: 100%;
    padding: 16px 24px 24px 24px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.help-desk-footer[b-y73mv9yykv] {
    width: 100%;
    height: auto;
}

.help-desk-footer-content[b-y73mv9yykv] {
    padding: 20px;
    height: 60px;
    text-align: center;
    vertical-align: middle;
}

.help-desk-help-link[b-y73mv9yykv] {
    color: #005794;
    font-family: Asap;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: normal;
    text-decoration-line: underline;
    text-decoration-style: solid;
    text-decoration-skip-ink: none;
    text-decoration-thickness: auto;
    text-underline-offset: auto;
    text-underline-position: from-font;
}

.ai-footer-content[b-y73mv9yykv] {
    color: #5B687B;
    text-align: center;
    font-family: Asap;
    font-size: 12px;
    font-style: normal;
    font-weight: 400;
    line-height: normal;
    padding: 16px;
}
/* /View/Components/HelpDeskComponents/PlHelpDeskItem.razor.rz.scp.css */
.help-desk-item[b-ef6460usoj] {
    width: 100%;
    display: flex;
    height: 60px;
    padding: 8px 12px;
    align-items: center;
    gap: 16px;
    border-radius: 4px;
    border: 1px solid #DEE2E6;
    font-family: Asap, sans-serif;
    color: #132836;
    cursor: pointer;
}

    .help-desk-item.disabled[b-ef6460usoj] {
        user-select: none;
        pointer-events: none;
        cursor: not-allowed;
        opacity: 0.4;
        background-color: #fafafa;
    }

    .help-desk-item.disabled[b-ef6460usoj]  a {
        pointer-events: auto !important;
        cursor: pointer !important;
    }

    .help-desk-item:hover:not(.disabled)[b-ef6460usoj] {
        background: #00b2f50f;
        box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.08) !important;
    }

    .help-desk-separator[b-ef6460usoj] {
        width: 382px;
        height: 1px;
        background: #DEE2E6;
        margin: 12px 0;
    }

.help-desk-item-title[b-ef6460usoj] {
    color: #132836;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 600;
    line-height: normal;
}

.help-desk-item-icon[b-ef6460usoj] {
    width: 25px;
    height: 30px;
    font-size: 22px;
}

.help-desk-item-content[b-ef6460usoj] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    flex: 1 0 0;
}

.help-desk-item-description[b-ef6460usoj] {
    color: #132836;
    font-family: Asap, sans-serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: normal;
    user-select: none;
    white-space: nowrap;  
}

.help-desk-nav-icon[b-ef6460usoj] {
    font-size: 16px;
    padding: 12px 5px;
}

.item-label[b-ef6460usoj] {
    padding: 3px 6px;
    justify-content: center;
    align-items: center;
    border-radius: 2px;
    font-family: Asap, sans-serif;
    font-size: 14px;
    font-style: normal;
    font-weight: 400;
    line-height: 100%;
}

    .item-label.doku[b-ef6460usoj] {
        background: #D6DAE6;
    }

    .item-label.tipp[b-ef6460usoj] {
        background: #018E88;
        color: #FFF;
    }

    .item-label.video[b-ef6460usoj] {
        background: #F3A945;
        color: #FFF;
    }

    .item-label.tutorial[b-ef6460usoj] {
        background: #A4DBF2;
        color: #FFF;
    }
/* /View/Components/HelperComponents/PlAnimateAutoHeight.razor.rz.scp.css */
.collapsed[b-hrlo0a9rv0] {
    height: 0;
}

.expanded[b-hrlo0a9rv0] {
    height: auto;
}
/* /View/Components/HelperComponents/PlDotSpinner.razor.rz.scp.css */
.pl-dot-spinner[b-z1nvxvgpga] {
    --radius: 16px;
    --dot: 6px;
    position: relative;
    width: calc(var(--radius) * 2);
    height: calc(var(--radius) * 2);
}

.pl-dot-spinner__dot[b-z1nvxvgpga] {
    position: absolute;
    width: var(--dot);
    height: var(--dot);
    border-radius: 50%;
    background: #1890ff;
    top: 50%;
    left: 50%;
    translate: -50% -50%;
    animation: pl-dot-pulse-b-z1nvxvgpga 1s linear infinite;
    animation-delay: calc((var(--i) - 9) * 0.125s);
}

.pl-dot-spinner__dot:nth-child(1)[b-z1nvxvgpga] { --angle:   0deg; --i: 1; }
.pl-dot-spinner__dot:nth-child(2)[b-z1nvxvgpga] { --angle:  45deg; --i: 2; }
.pl-dot-spinner__dot:nth-child(3)[b-z1nvxvgpga] { --angle:  90deg; --i: 3; }
.pl-dot-spinner__dot:nth-child(4)[b-z1nvxvgpga] { --angle: 135deg; --i: 4; }
.pl-dot-spinner__dot:nth-child(5)[b-z1nvxvgpga] { --angle: 180deg; --i: 5; }
.pl-dot-spinner__dot:nth-child(6)[b-z1nvxvgpga] { --angle: 225deg; --i: 6; }
.pl-dot-spinner__dot:nth-child(7)[b-z1nvxvgpga] { --angle: 270deg; --i: 7; }
.pl-dot-spinner__dot:nth-child(8)[b-z1nvxvgpga] { --angle: 315deg; --i: 8; }

@keyframes pl-dot-pulse-b-z1nvxvgpga {
    0% {
        transform: rotate(var(--angle)) translateY(calc(-1 * var(--radius))) scale(1.1);
        opacity: 1;
    }
    100% {
        transform: rotate(var(--angle)) translateY(calc(-1 * var(--radius))) scale(0.5);
        opacity: 0.3;
    }
}
/* /View/Components/HelperComponents/PlInput.razor.rz.scp.css */
.pl-input-wrapper[b-qoc4wgm7o5] {
    position: relative;
    width: 100%;
    height: 100%;
}

.pl-input-container[b-qoc4wgm7o5] {
    position: relative;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
}

.pl-input-base[b-qoc4wgm7o5] {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
    border: none;
    font-family: inherit;
    font-size: inherit;
    font-weight: inherit;
    line-height: inherit;
    letter-spacing: inherit;
    word-spacing: inherit;
    text-indent: 0;
    box-sizing: border-box;
    text-align: inherit;
    vertical-align: top;
}

.pl-input-backdrop[b-qoc4wgm7o5] {
    /* pre, not nowrap: runs of spaces must render exactly like the input's own text */
    white-space: pre;
    overflow: hidden;
    text-overflow: ellipsis;
    color: transparent;
    pointer-events: none;
    align-content: center;
    /* Inputs ignore an inherited line-height taller than the field; centering that oversized line box would shift the text ~1px against the input's (focus jump). */
    line-height: normal;
}

.pl-input-field[b-qoc4wgm7o5] {
    background: transparent;
    color: inherit;
    caret-color: currentColor;
    z-index: 1;
    outline: none;
}

/* Firefox never renders text-overflow on <input>, so while unfocused the backdrop is the visible text. */
.pl-input-wrapper:not(:focus-within) .pl-input-backdrop[b-qoc4wgm7o5] {
    color: inherit;
}

.pl-input-wrapper:not(:focus-within) .pl-input-field[b-qoc4wgm7o5] {
    color: transparent;
}

.pl-input-field[b-qoc4wgm7o5]::placeholder {
    color: var(--placeholder-color, #999);
    opacity: 1;
}
/* /View/Components/HelperComponents/PlModal.razor.rz.scp.css */
/* Custom close button styling */
[b-jxg632l421] .pl-custom-close-button {
    position: relative;
    padding: 4px;
    color: rgba(0, 0, 0, 0.45);
    font-weight: 700;
    line-height: 1;
    text-decoration: none;
    background: transparent;
    border: 0;
    outline: 0;
    cursor: pointer;
    transition: all 0.3s;
    border-radius: 4px;
}

[b-jxg632l421] .pl-custom-close-button:hover {
    color: rgba(0, 0, 0, 0.88);
    background-color: rgba(0, 0, 0, 0.06);
}

[b-jxg632l421] .pl-custom-close-button .ant-modal-close-x {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    font-size: 16px;
    font-style: normal;
    line-height: 22px;
    text-align: center;
    text-transform: none;
    text-rendering: auto;
}

/* Fullscreen button styling */
[b-jxg632l421] .pl-modal-fullscreen-button {
    color: rgba(0, 0, 0, 0.55);
    transition: all 0.3s;
    background: transparent;
    border-radius: 4px;
    padding: 4px;
}

[b-jxg632l421] .pl-modal-fullscreen-button:hover {
    color: rgba(0, 0, 0, 0.88) !important;
    background-color: rgba(0, 0, 0, 0.06);
}
/* /View/Components/HelperComponents/PlPopover.razor.rz.scp.css */
.pl-popover-owner[b-kck6k2h8z9] {
    width: auto;
    height: auto;
}

.pl-tooltip-module-owner[b-kck6k2h8z9] {
    height: 100%;
    width: 100%;
}

.pl-tooltip-module-owner:has(.pl-button-configured)[b-kck6k2h8z9] {
    width: fit-content;
    height: fit-content;
}

[b-kck6k2h8z9] .e-ddl-icon {
    border: none !important;
}

.pl-popover-content[b-kck6k2h8z9] {
    background-color: white;
    display: flex;
    max-height: 500px;
    -webkit-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

[b-kck6k2h8z9] .pl-scroll {
    overflow-x: hidden !important;
}

.pl-popup-module[b-kck6k2h8z9] {
    overflow: hidden;
    flex: 1 1 auto;
    min-width: 0;
}
/* /View/Components/LoginComponents/PlLoginForm.razor.rz.scp.css */
.login-form[b-4f8qebc46l] {
    display: flex;
    flex-direction: column;
    align-items: center;
    position: relative;
}

.login-form-content[b-4f8qebc46l] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    margin: 0 40px;
    max-width: calc(100vw - 80px);
}

.login-logo[b-4f8qebc46l] {
    height: 128px;
    width: auto;
    margin-bottom: 16px;
}

.login-button[b-4f8qebc46l] {
    margin-top:10px;
}

.login-title[b-4f8qebc46l] {
    color: var(--color-primary-dark-blue, #00375B);
    font-family: Asap, serif;
    font-size: 28px;
    font-style: normal;
    font-weight: 600;
    line-height: 36px;
    letter-spacing: -0.84px;
    text-align: center;
}

.login-username[b-4f8qebc46l], .login-password[b-4f8qebc46l], .login-button[b-4f8qebc46l] {
    width: 300px;
    max-width: 100%;
}

.login-form-footer[b-4f8qebc46l] {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    display: flex;
    padding: 24px 0px;
    justify-content: center;
    align-items: center;
}

.login-alert[b-4f8qebc46l] {
    text-align: center;
    margin-top: 20px;
    color: darkred;
    font-size: 16px;
    font-family: inherit;
}

[b-4f8qebc46l] .ant-input-lg {
    height: 40px;
    font-size: 14px;
    border-radius: 4px;
}

[b-4f8qebc46l] .ant-input-affix-wrapper-lg {
    height: 40px;
    padding-top: 0;
    padding-bottom: 0;
    border-radius: 4px;
    align-items: center;
}

[b-4f8qebc46l] .ant-input-affix-wrapper-lg > input.ant-input {
    font-size: 14px;
    line-height: 1.5;
    height: auto;
}

[b-4f8qebc46l] .e-login-btn {
    width: 100%;
    height: auto;
    font-weight: 500;
    font-size: 20px;
    border-radius: 7px;
    padding: 10px 0;
}

/* /View/Components/LoginComponents/PlMessageContainer.razor.rz.scp.css */
.message-text[b-j1d0fyv7ro] {
    text-align: center;
    margin-top: 20px;
    font-size: 20px;
}

    .message-text .info[b-j1d0fyv7ro] {
        color: rgb(0,72,111);
    }

.form-holder[b-j1d0fyv7ro] {
    width: max(350px, 70%);
    height: auto;
    margin: auto;
    padding: 30px;
    background: inherit;
    background-color: rgba(255, 255, 255, .15);
    backdrop-filter: blur(5px);
    border-radius: 5px;
    font-family: Arial, Helvetica, sans-serif;
    overflow: auto;
}

/* The timeout button was previously a MudButton Color.Warning. AntDesign renders it as a
   primary (blue) button, so restore the original warning (orange) fill using the PLANTA
   warning design tokens. */
[b-j1d0fyv7ro] .pl-btn-warning.ant-btn-primary {
    background-color: var(--pl-semantic-warning-color-warning) !important;
    border-color: var(--pl-semantic-warning-color-warning) !important;
}

[b-j1d0fyv7ro] .pl-btn-warning.ant-btn-primary:hover,
[b-j1d0fyv7ro] .pl-btn-warning.ant-btn-primary:active {
    background-color: var(--pl-semantic-warning-color-warning-active) !important;
    border-color: var(--pl-semantic-warning-color-warning-active) !important;
}
/* /View/Components/MenuComponents/PlMenuNode.razor.rz.scp.css */
/* Checkmark shown inside the icon slot for checked menu items */
.pl-logo-menu-icon[b-ux5gcp8sgy] {
    color: var(--color-primary, #1890ff);
    font-weight: bold;
}

/* Subtle indicator on checked items */
.pl-logo-menu-item-checked .pl-logo-menu-label[b-ux5gcp8sgy] {
    font-weight: 600;
}
/* /View/Components/ModuleComponents/PlAgileModuleTabItem.razor.rz.scp.css */
.pulse-board-loading-state[b-97xxytm4m6] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    min-height: 240px;
    gap: 16px;
    color: var(--mud-palette-text-secondary, #5e6c84);
}

.pulse-board-loading-spinner[b-97xxytm4m6] {
    width: 32px;
    height: 32px;
    border: 3px solid #dfe1e6;
    border-top-color: #0078d4;
    border-radius: 50%;
    animation: pulse-board-spin-b-97xxytm4m6 1s linear infinite;
}

@keyframes pulse-board-spin-b-97xxytm4m6 {
    to {
        transform: rotate(360deg);
    }
}

.pulse-project-settings-placeholder[b-97xxytm4m6] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 12px;
    height: 100%;
    padding: 24px;
    text-align: center;
}

.pulse-project-settings-placeholder h3[b-97xxytm4m6] {
    margin: 0;
}
/* /View/Components/ModuleComponents/PlDockedModule.razor.rz.scp.css */
.pl-docked-module[b-6qw69ndn9t] {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
    min-height: 0;
    overflow: hidden;
}

/* The vertical padding matches the centre's page title exactly, so a docked module's header is as
   tall as the centre's and the two titles share a baseline. No rule underneath it either, for the
   same reason: the centre draws none between its title and the tabs, and the first line below a
   header belongs to the action bar in both places. Right padding stays tighter than the left,
   keeping the header buttons near the edge. */
.pl-docked-module-header[b-6qw69ndn9t] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 16px 8px 24px;
    flex-shrink: 0;
}

.pl-docked-module-title[b-6qw69ndn9t] {
    font-family: Asap, sans-serif;
    font-weight: 600;
    font-size: 24px;
    line-height: 1.33;
    color: var(--pl-neutral-text-color-text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
    flex: 1;
}

/* A pane the user is not working in sets its title back in both colour and weight, so exactly one
   title in the panel reads at full strength and the eye finds the active pane without any added
   chrome. No border here — nothing that could double against the lines the panel frame and the
   zones already draw. The weight is also the non-colour half of the cue, for anyone who cannot
   perceive the colour step; aria-current on the title carries the same state semantically. */
.pl-docked-module-title.is-inactive[b-6qw69ndn9t] {
    color: var(--pl-neutral-text-color-text-tertiary);
    font-weight: 400;
}

.pl-docked-module-header-actions[b-6qw69ndn9t] {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}

/* AntDesign wraps a Dropdown trigger in an inline-block of its own, whose line box adds a
   descender below the button — 23px against its 22px siblings, which left the move trigger
   sitting a pixel lower than the pin and close buttons. */
.pl-docked-module-header-actions[b-6qw69ndn9t]  .antblazor-overlay-trigger-wrapper {
    line-height: 0;
}

/* The ::deep variants also reach the move-menu trigger, which the PlDockModuleMenu child
   component renders and therefore carries no scope attribute of this file. */
.pl-docked-module-header-btn[b-6qw69ndn9t],
[b-6qw69ndn9t] .pl-docked-module-header-btn {
    width: 22px;
    height: 22px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    outline: none;
    padding: 0;
    cursor: pointer;
    border-radius: 3px;
    color: var(--pl-neutral-text-color-text-heading);
    transition: background 0.15s;
}

.pl-docked-module-header-btn:hover[b-6qw69ndn9t],
[b-6qw69ndn9t] .pl-docked-module-header-btn:hover {
    background: rgba(0, 0, 0, 0.06);
}

.pl-docked-module-header-btn:focus-visible[b-6qw69ndn9t],
[b-6qw69ndn9t] .pl-docked-module-header-btn:focus-visible {
    outline: 2px solid var(--pl-neutral-border-color-border);
    outline-offset: 2px;
}

/* Matches the optical size of the neighbouring icon-font glyphs (14px) inside the same 22px
   button box. At the button's own size the cross read as heavier than its siblings and covered
   the hover background completely. */
.pl-docked-module-close-btn img[b-6qw69ndn9t] {
    width: 16px;
    height: 16px;
}

.pl-docked-module-body[b-6qw69ndn9t] {
    flex: 1;
    min-height: 0;
    overflow: hidden;
}
/* /View/Components/ModuleComponents/PlDockLayout.razor.rz.scp.css */
.pl-dock-layout-root[b-7m24qva9r0] {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

/* The auto-hide flyout floats over the center next to its zone's 32px strip. One elevation
   step above the zones and the resize-handle tracks, but below every popup layer
   (--z-index-overlay and up), so a flyout can never cover a dialog, listbox, or tooltip. */
.pl-dock-flyout[b-7m24qva9r0] {
    position: absolute;
    /* Distance from the panel edge: the auto-hide strip's width, or nothing at all when the
       overlay is permanent (docking feature off) and there is no strip to sit beside. */
    --pl-dock-flyout-inset: 32px;
    z-index: calc(var(--z-index-docked-panel) + 3);
    background: var(--pl-neutral-bg-color-bg-container);
    overflow: hidden;
    box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.08),
                0px 3px 6px 0px rgba(0, 0, 0, 0.12),
                0px 9px 28px 0px rgba(0, 0, 0, 0.05);
    animation: pl-dock-flyout-in-b-7m24qva9r0 180ms cubic-bezier(0.16, 1, 0.3, 1);
}

/* The slide-out runs while the component keeps the overlay mounted for exactly this long
   (PlDockLayout.FlyoutCloseAnimationMs) — the two durations must stay in step. */
.pl-dock-flyout.is-closing[b-7m24qva9r0] {
    animation: pl-dock-flyout-out-b-7m24qva9r0 150ms ease-in forwards;
    pointer-events: none;
}

/* A permanent overlay sits flush with the panel edge and never animates: it is not a transient
   reveal of a hidden zone but the zone itself, present from the moment its module docks. */
.pl-dock-flyout-permanent[b-7m24qva9r0] {
    --pl-dock-flyout-inset: 0px;
    animation: none;
}

/* Two permanent overlays reach into the same corner, so the one the user last focused is raised
   over the other — without this, DOM order alone would give that corner to the bottom edge for
   the whole session. */
.pl-dock-flyout-permanent.is-on-top[b-7m24qva9r0] {
    z-index: calc(var(--z-index-docked-panel) + 4);
}

/* Each edge slides along its own axis; the offset is the only thing that differs, so the
   keyframes read it from the edge class instead of being written out four times. */
.pl-dock-flyout-left[b-7m24qva9r0] {
    top: 0;
    bottom: 0;
    left: var(--pl-dock-flyout-inset);
    border-right: 1px solid var(--pl-neutral-border-color-border);
    --pl-dock-flyout-offset: translateX(-100%);
}

.pl-dock-flyout-right[b-7m24qva9r0] {
    top: 0;
    bottom: 0;
    right: var(--pl-dock-flyout-inset);
    border-left: 1px solid var(--pl-neutral-border-color-border);
    --pl-dock-flyout-offset: translateX(100%);
}

.pl-dock-flyout-top[b-7m24qva9r0] {
    left: 0;
    right: 0;
    top: var(--pl-dock-flyout-inset);
    border-bottom: 1px solid var(--pl-neutral-border-color-border);
    --pl-dock-flyout-offset: translateY(-100%);
}

.pl-dock-flyout-bottom[b-7m24qva9r0] {
    left: 0;
    right: 0;
    bottom: var(--pl-dock-flyout-inset);
    border-top: 1px solid var(--pl-neutral-border-color-border);
    --pl-dock-flyout-offset: translateY(100%);
}

@keyframes pl-dock-flyout-in-b-7m24qva9r0 {
    from {
        transform: var(--pl-dock-flyout-offset);
        opacity: 0;
    }

    to {
        transform: none;
        opacity: 1;
    }
}

@keyframes pl-dock-flyout-out-b-7m24qva9r0 {
    from {
        transform: none;
        opacity: 1;
    }

    to {
        transform: var(--pl-dock-flyout-offset);
        opacity: 0;
    }
}

/* Kept at a non-zero duration rather than "none" so the closing state still ends up hidden
   (animation-fill-mode) instead of sitting fully visible until the component unmounts it. */
@media (prefers-reduced-motion: reduce) {
    .pl-dock-flyout[b-7m24qva9r0],
    .pl-dock-flyout.is-closing[b-7m24qva9r0] {
        animation-duration: 1ms;
    }
}

/* The flyout's own resize handle, on the inner edge facing the center. Inset rather than
   straddling the border: the flyout clips its overflow, so a negative offset would be cut. */
.pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    position: absolute;
}

.pl-dock-flyout-resize-handle[b-7m24qva9r0]  .pl-dock-resize-handle {
    margin: 0;
}

.pl-dock-flyout-left .pl-dock-flyout-resize-handle[b-7m24qva9r0],
.pl-dock-flyout-right .pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    top: 0;
    bottom: 0;
    width: 6px;
}

.pl-dock-flyout-right .pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    left: 0;
    bottom: var(--pl-dock-flyout-cross-inset, 0px);
}

.pl-dock-flyout-left .pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    right: 0;
}

.pl-dock-flyout-top .pl-dock-flyout-resize-handle[b-7m24qva9r0],
.pl-dock-flyout-bottom .pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    left: 0;
    right: 0;
    height: 6px;
}

.pl-dock-flyout-bottom .pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    top: 0;
    right: var(--pl-dock-flyout-cross-inset, 0px);
}

.pl-dock-flyout-top .pl-dock-flyout-resize-handle[b-7m24qva9r0] {
    bottom: 0;
}

/* While a module is being dragged the flyout stops taking pointer events, so a flown-out
   module can be dropped onto the layout it currently covers — the native "dock a flown-out
   window by dragging it" behaviour. */
.pl-dock-layout-root.is-dragging .pl-dock-flyout[b-7m24qva9r0] {
    pointer-events: none;
}

/* Drag affordances. One elevation step above the flyout (+3) so they are never hidden by it,
   and still far below every popup layer (--z-index-overlay 1000 and up). All three are
   pointer-transparent: the hit test runs on elementFromPoint and must see the layout, not the
   overlay drawn on top of it. */
.pl-dock-drop-preview[b-7m24qva9r0] {
    position: absolute;
    z-index: calc(var(--z-index-docked-panel) + 4);
    pointer-events: none;
    background: var(--pl-semantic-primary-color-primary-bg);
    border: 2px solid var(--pl-semantic-primary-color-primary);
    border-radius: 2px;
    /* The fill token is opaque, so a full-strength preview hides the content it is aiming at —
       the user has to keep seeing what the module would land on top of. */
    opacity: 0.5;
    transition: left 90ms ease-out, top 90ms ease-out, width 90ms ease-out, height 90ms ease-out;
}

/* A refused drop still shows where it was aimed — hiding the indicator would read as "nothing
   here" rather than "not allowed here". It carries no fill, so its dashed outline needs more
   than the accepted state's half strength to stay readable. */
.pl-dock-drop-preview.is-rejected[b-7m24qva9r0] {
    background: transparent;
    border-style: dashed;
    border-color: var(--pl-neutral-border-color-border);
    opacity: 0.7;
}

.pl-dock-drop-cross[b-7m24qva9r0] {
    position: absolute;
    z-index: calc(var(--z-index-docked-panel) + 4);
    pointer-events: none;
    display: flex;
    align-items: center;
    justify-content: center;
}

.pl-dock-drop-cross-grid[b-7m24qva9r0] {
    display: grid;
    grid-template-columns: repeat(3, 28px);
    grid-template-rows: repeat(3, 28px);
    gap: 2px;
}

.pl-dock-drop-cross-cell[b-7m24qva9r0] {
    background: var(--pl-neutral-bg-color-bg-container);
    border: 1px solid var(--pl-neutral-border-color-border);
    border-radius: 2px;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
}

.pl-dock-drop-cross-cell.is-top[b-7m24qva9r0] {
    grid-column: 2;
    grid-row: 1;
}

.pl-dock-drop-cross-cell.is-left[b-7m24qva9r0] {
    grid-column: 1;
    grid-row: 2;
}

.pl-dock-drop-cross-cell.is-center[b-7m24qva9r0] {
    grid-column: 2;
    grid-row: 2;
}

.pl-dock-drop-cross-cell.is-right[b-7m24qva9r0] {
    grid-column: 3;
    grid-row: 2;
}

.pl-dock-drop-cross-cell.is-bottom[b-7m24qva9r0] {
    grid-column: 2;
    grid-row: 3;
}

.pl-dock-drop-cross-cell.is-active[b-7m24qva9r0] {
    background: var(--pl-semantic-primary-color-primary);
    border-color: var(--pl-semantic-primary-color-primary);
}

/* Fixed, not absolute: JS translates it in viewport coordinates on every pointer tick. */
.pl-dock-drag-proxy[b-7m24qva9r0] {
    position: fixed;
    top: 0;
    left: 0;
    z-index: calc(var(--z-index-docked-panel) + 5);
    pointer-events: none;
    max-width: 240px;
    padding: 4px 10px;
    border-radius: 3px;
    background: var(--pl-neutral-bg-color-bg-container);
    border: 1px solid var(--pl-neutral-border-color-border);
    color: var(--pl-neutral-text-color-text);
    font-size: 13px;
    line-height: 20px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.08), 0px 3px 6px 0px rgba(0, 0, 0, 0.12);
    opacity: 0.9;
}

@media (prefers-reduced-motion: reduce) {
    .pl-dock-drop-preview[b-7m24qva9r0] {
        transition: none;
    }
}
/* /View/Components/ModuleComponents/PlDockResizeHandle.razor.rz.scp.css */
/* The handle lives in a zero-size grid track between two split cells; the 6px hit strip
   straddles the boundary via a negative margin so both neighbours stay adjacent. */
.pl-dock-resize-handle[b-wo3ii7gn0k] {
    position: relative;
    z-index: calc(var(--z-index-docked-panel) + 2);
    background: transparent;
    user-select: none;
    touch-action: none;
}

.pl-dock-resize-handle-right[b-wo3ii7gn0k] {
    width: 6px;
    height: 100%;
    margin-left: -3px;
    cursor: col-resize;
}

.pl-dock-resize-handle-bottom[b-wo3ii7gn0k] {
    width: 100%;
    height: 6px;
    margin-top: -3px;
    cursor: row-resize;
}

.pl-dock-resize-handle-indicator[b-wo3ii7gn0k] {
    position: absolute;
    background: var(--pl-neutral-border-color-border);
    opacity: 0;
    transition: opacity 0.15s ease;
    pointer-events: none;
}

.pl-dock-resize-handle-right .pl-dock-resize-handle-indicator[b-wo3ii7gn0k] {
    top: 0;
    bottom: 0;
    left: 50%;
    width: 2px;
    transform: translateX(-50%);
}

.pl-dock-resize-handle-bottom .pl-dock-resize-handle-indicator[b-wo3ii7gn0k] {
    left: 0;
    right: 0;
    top: 50%;
    height: 2px;
    transform: translateY(-50%);
}

    .pl-dock-resize-handle:hover .pl-dock-resize-handle-indicator[b-wo3ii7gn0k],
    .pl-dock-resize-handle.is-dragging .pl-dock-resize-handle-indicator[b-wo3ii7gn0k],
    .pl-dock-resize-handle:focus-visible .pl-dock-resize-handle-indicator[b-wo3ii7gn0k] {
        opacity: 1;
    }

/* Keyboard operability: the separator is in the tab order, so its focus must be visible.
   The indicator doubles as the focus marker; the outline makes it unambiguous. */
.pl-dock-resize-handle:focus-visible[b-wo3ii7gn0k] {
    outline: 2px solid var(--pl-semantic-primary-color-primary);
    outline-offset: -1px;
}
/* /View/Components/ModuleComponents/PlDockSplit.razor.rz.scp.css */
.pl-dock-split[b-k9na9914ci] {
    display: grid;
    width: 100%;
    height: 100%;
    min-width: 0;
    min-height: 0;
}

.pl-dock-split-cell[b-k9na9914ci] {
    position: relative;
    overflow: hidden;
    min-width: 0;
    min-height: 0;
}

/* Zero-width/height grid track between two cells. The handle inside straddles the boundary
   (6px hit strip via negative margin), so the track must not clip. */
.pl-dock-split-handle-track[b-k9na9914ci] {
    position: relative;
    overflow: visible;
    z-index: calc(var(--z-index-docked-panel) + 2);
}
/* /View/Components/ModuleComponents/PlDockStack.razor.rz.scp.css */
/* Fills its grid cell (or the layout root, when the tree is the bare center) without adding a
   box of its own: the zone chrome and the tab strip inside already size to 100%. */
.pl-dock-stack[b-jrjzzy3wei] {
    position: relative;
    width: 100%;
    height: 100%;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
}
/* /View/Components/ModuleComponents/PlDockZone.razor.rz.scp.css */
.pl-dock-zone[b-atqx1i3hgs] {
    display: flex;
    flex-direction: column;
    position: relative;
    width: 100%;
    height: 100%;
    z-index: var(--z-index-docked-panel);
    background: var(--pl-neutral-bg-color-bg-container);
    overflow: hidden;
    box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.08),
                0px 3px 6px 0px rgba(0, 0, 0, 0.12),
                0px 9px 28px 0px rgba(0, 0, 0, 0.05);
}

.pl-dock-zone-right[b-atqx1i3hgs] {
    border-left: 1px solid var(--pl-neutral-border-color-border);
    border-bottom-right-radius: var(--border-radius-default, 4px);
}

.pl-dock-zone-left[b-atqx1i3hgs] {
    border-right: 1px solid var(--pl-neutral-border-color-border);
    border-bottom-left-radius: var(--border-radius-default, 4px);
}

.pl-dock-zone-bottom[b-atqx1i3hgs] {
    border-top: 1px solid var(--pl-neutral-border-color-border);
    border-bottom-right-radius: var(--border-radius-default, 4px);
    border-bottom-left-radius: var(--border-radius-default, 4px);
}

.pl-dock-zone-top[b-atqx1i3hgs] {
    border-bottom: 1px solid var(--pl-neutral-border-color-border);
    border-top-right-radius: var(--border-radius-default, 4px);
    border-top-left-radius: var(--border-radius-default, 4px);
}

/* An inner pane (module-to-module split) is peer content beside its target, not a panel edge:
   same surface and border token as the zones, but no edge radius and no elevation — nothing
   floats over the center here. */
.pl-dock-zone-pane[b-atqx1i3hgs] {
    border: 1px solid var(--pl-neutral-border-color-border);
    box-shadow: none;
}

/* An auto-hidden zone is a flat strip, not an elevated panel. */
.pl-dock-zone.is-auto-hidden[b-atqx1i3hgs] {
    box-shadow: none;
}

.pl-dock-zone-body[b-atqx1i3hgs] {
    flex: 1 1 auto;
    min-height: 0;
    overflow: hidden;
}

.pl-dock-zone-strip[b-atqx1i3hgs] {
    flex: 1 1 auto;
    min-height: 0;
    overflow: hidden;
}

/* Auto-hide strip: replaces the body while the zone is auto-hidden. Lists the docked modules'
   names as buttons; clicking a name flies that module out over the center. The strip markup is
   built imperatively in PlDockStack so its elements don't carry this component's scope
   attribute — selectors must use ::deep to match. */
[b-atqx1i3hgs] .pl-dock-autohide-strip {
    display: flex;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-vertical {
    flex-direction: column;
    align-items: stretch;
    padding: 8px 0;
    gap: 4px;
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-horizontal {
    flex-direction: row;
    align-items: stretch;
    padding: 0 8px;
    gap: 4px;
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-item {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 6px 4px;
    background: transparent;
    border: none;
    outline: none;
    cursor: pointer;
    color: var(--pl-neutral-text-color-text-heading);
    font-family: inherit;
    font-size: 13px;
    border-radius: 3px;
    min-width: 0;
    overflow: hidden;
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-item:hover {
    background: rgba(0, 0, 0, 0.06);
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-item:focus-visible {
    outline: 2px solid var(--pl-neutral-border-color-border);
    outline-offset: -2px;
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-item.is-selected {
    color: var(--pl-neutral-text-color-text-heading);
    font-weight: 600;
}

[b-atqx1i3hgs] .pl-dock-autohide-strip-item-label {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

/* Left/right (vertical) strips: rotate labels so they read along the strip. */
[b-atqx1i3hgs] .pl-dock-autohide-strip-vertical .pl-dock-autohide-strip-item-label {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
}
/* /View/Components/ModuleComponents/PlModule.razor.rz.scp.css */
.pl-module-container[b-2gcrqs2199] {
    display: flex;
    flex-direction: column;
}

/* Standalone callers (panel-hosted modules, tooltip popups, module tabs) live inside a parent
   with a definite height and rely on the container filling it. Embedded callers (PlEmbeddedModule,
   PlTileEmbeddedCell) opt out by not emitting this class so their own scoped CSS can govern
   sizing without fighting an inline style. */
.pl-module-container.pl-module-container-standalone[b-2gcrqs2199] {
    height: 100%;
}

.pl-module-content-area[b-2gcrqs2199] {
    position: relative;
    flex: 1;
    min-height: 0;
    overflow: hidden;
}

.pl-module-content-area.pl-module-padded[b-2gcrqs2199] {
    padding: 0 24px;
    background-color: var(--pl-neutral-bg-color-bg-container);
}

/* Demo-dashboard sketch (DemoDashboardSettings) — full-bleed surface, the demo component
   owns its own padding/background and sticky disclaimer, so we drop the standard padded
   chrome here. */
.pl-module-content-area.pl-module-demo-dashboard[b-2gcrqs2199] {
    padding: 0;
    background-color: var(--pl-neutral-bg-color-bg-layout, #F2F4F7);
}

/* Dashboard-module surface: grey "layout" background extending edge-to-edge across the module
   wrapper (including the .pl-module-padded gutter), with matching 24px top and bottom insets so
   the spacing matches the existing left/right gutter. The grey makes the white tiles stand out. */
.pl-module-content-area.is-dashboard-module[b-2gcrqs2199] {
    background-color: var(--pl-tile-dashboard-bg, var(--pl-neutral-bg-color-bg-layout, #F2F4F7));
}

.pl-module-content-area.is-dashboard-module.pl-module-padded[b-2gcrqs2199] {
    padding-top: 24px;
    padding-bottom: 24px;
}

/* Dashboard scroll/root chain: stretch every layer to the available width so the dashboard
   becomes a flex viewport. Outside dashboards the chain uses customizing-derived widths
   (.pl-window-content: fit-content, .pl-root: min-width 100% + inline width=DocumentSize.Width)
   to support horizontal scroll for sheet-style modules; inside a dashboard we want the tile
   flex layout to drive sizing instead. !important is needed on .pl-root because PlRootBlock
   emits an inline pixel width/height from the layout calculation.
   The `:not(.pl-embedded-module *)` guard keeps these rules from cascading into nested embedded
   modules' window chain — those need their default `fit-content` + `overflow: hidden` so the
   embedded module clips collapsed child rows the same way it does when shown standalone. */
.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .pl-window:not(.pl-embedded-module *),
.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .scrollbar-container:not(.pl-embedded-module *) {
    width: 100%;
}

.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .pl-window-content:not(.pl-embedded-module *) {
    width: 100%;
    overflow: visible;
}

.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .pl-root.pl-main:not(.pl-embedded-module *) {
    width: 100% !important;
    height: auto !important;
}

/* Flex-module scroll/root chain: same width-fill goal as the dashboard rules, but without the
   `:not(.pl-embedded-module *)` guard. A flex module is often itself the body of a dashboard
   tile (the host's `PlEmbeddedModule` wraps it), so the inner `.pl-window-content` etc. sit
   *inside* a `.pl-embedded-module` ancestor — the guard would exclude them and the inner
   widget would stay at `fit-content`, never spanning the tile. The trade-off: a flex module
   that itself hosts another embedded module via a ModuleControl DF will also have that
   grandchild stretched, but `PlEmbeddedModule.razor.css` already pins
   `.pl-window-content { min-width: 100% }` for the embedded case, so the additional
   `width: 100%` is consistent rather than conflicting. */
.pl-module-content-area.is-flex-module[b-2gcrqs2199]  .pl-window,
.pl-module-content-area.is-flex-module[b-2gcrqs2199]  .scrollbar-container {
    width: 100%;
}

.pl-module-content-area.is-flex-module[b-2gcrqs2199]  .pl-window-content {
    width: 100%;
    overflow: visible;
}

.pl-module-content-area.is-flex-module[b-2gcrqs2199]  .pl-root.pl-main {
    width: 100% !important;
    height: auto !important;
}

/* StretchToFill scroll/root chain. Such a field is authored at a placeholder size and takes its
   real size from the module viewport at runtime (resize-module.js sizes .auto-resized-container),
   so the default `fit-content` chain collapses onto the placeholder and .pl-window-content's
   `overflow: hidden` clips the control away — the module then looks empty.

   A floor (`min-width`), never a fixed width: raising the chain to the viewport is all the
   stretched field needs, and anything wider in the module keeps its own size. A wide pixel-laid-out
   sheet sharing the module therefore still overflows .pl-scroll and stays horizontally scrollable,
   and a module embedded through a ModuleControl DF is never collapsed below its authored width —
   the same floor semantics PlEmbeddedModule.razor.css already relies on. That is also why
   these rules need no `:not(.pl-embedded-module *)` guard, which the flex rules above had to drop
   outright: a module with a stretched field is often itself a dashboard tile's body, so its own
   chain sits inside a .pl-embedded-module ancestor and the guard would exclude what must stretch.

   Width only: the field's height comes from the same JS, measured off the scroll viewport. */
.pl-module-content-area.has-stretch-to-fill-field[b-2gcrqs2199]  .pl-window,
.pl-module-content-area.has-stretch-to-fill-field[b-2gcrqs2199]  .pl-window-content {
    min-width: 100%;
}

/* A floor outranks the inline `width` on its own, so !important is here for the one case that
   also emits an inline `min-width`: a stretch-to-container root (PlRootBlock.GetWidthStyle),
   whose floor is the same placeholder pixel width. */
.pl-module-content-area.has-stretch-to-fill-field[b-2gcrqs2199]  .pl-root.pl-main {
    min-width: 100% !important;
}

/* The .pl-scroll wrapper has the native horizontal scrollbar suppressed by
   .pl-hidden-horizontal-scrollbars (a custom scrollbar widget is created by JS for
   sheet-style modules). Dashboards don't use that widget — re-enable the native scrollbar so
   horizontal overflow caused by column min-widths exceeding the viewport stays reachable. */
.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .pl-hidden-horizontal-scrollbars {
    scrollbar-width: auto;
    -ms-overflow-style: auto;
}
.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .pl-hidden-horizontal-scrollbars::-webkit-scrollbar:horizontal {
    height: 8px !important;
}
.pl-module-content-area.is-dashboard-module[b-2gcrqs2199]  .pl-hidden-horizontal-scrollbars::-webkit-scrollbar:horizontal * {
    display: revert !important;
}

/* Embedded modules still get the JS-created custom scrollbar widget, which would overlap the
   re-enabled native scrollbar above. Suppress the custom widget so the native scrollbar is the
   single source of truth inside embedded modules. */
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-custom-scrollbar,
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-custom-horizontal-scrollbar {
    display: none !important;
}

/* Custom widget suppressed above, so restore the native horizontal scrollbar. !important beats
   the inline overflow-x/scrollbar-width that PlModule.razor.js sets to hide it. */
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-hidden-horizontal-scrollbars {
    overflow-x: auto !important;
    scrollbar-width: thin !important;
    -ms-overflow-style: auto !important;
}
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-hidden-horizontal-scrollbars::-webkit-scrollbar:horizontal {
    height: 8px !important;
}
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-hidden-horizontal-scrollbars::-webkit-scrollbar:horizontal * {
    display: revert !important;
}
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-hidden-horizontal-scrollbars::-webkit-scrollbar-thumb:horizontal {
    background-color: var(--pl-neutral-fill-color-fill-secondary);
    border-radius: 4px;
}
.pl-module-content-area[b-2gcrqs2199]  .pl-embedded-module .pl-hidden-horizontal-scrollbars::-webkit-scrollbar-track:horizontal {
    background: transparent;
}

[b-2gcrqs2199] .fluent-multi-splitter {
    height: 100%;
    min-height: 0;
}

.pl-hidden-scrollbars[b-2gcrqs2199]::-webkit-scrollbar {
    width: 0;
}

.pl-hidden-scrollbars[b-2gcrqs2199] {
    -ms-overflow-style: none;
}

.pl-overflow-hidden[b-2gcrqs2199] {
    overflow: hidden;
}

.pl-scroll[b-2gcrqs2199] {
    height: 100%;
    overflow: auto;
    position: relative;
}

.scrollbar-container[b-2gcrqs2199] {
    position: relative;
    overflow: hidden;
    height: 100%;
    width: 100%;
}

/* Custom Scrollbars */
.pl-custom-scrollbar[b-2gcrqs2199] {
    position: absolute;
    opacity: 0;
    transition: opacity 0.3s;
    z-index: var(--z-index-scrollbar);
    border-radius: 4px;
    background-color: transparent;
    right: 9px;
    top: 4px;
    bottom: 4px;
    height: auto;
    width: 7px;
}

.pl-scrollbar-thumb[b-2gcrqs2199] {
    position: absolute;
    background-color: var(--pl-neutral-fill-color-fill-secondary);
    cursor: pointer;
    border-radius: 4px;
    top: 0;
    right: 0;
    width: 100%;
    min-height: 30px;
    transition: background-color 0.2s;
}

.pl-scrollbar-thumb:hover[b-2gcrqs2199] {
    background-color: var(--pl-neutral-fill-color-fill-content-hover);
}

.pl-custom-horizontal-scrollbar[b-2gcrqs2199] {
    position: absolute;
    opacity: 0;
    transition: opacity 0.3s;
    z-index: var(--z-index-scrollbar);
    border-radius: 4px;
    background-color: transparent;
    scrollbar-width: thin;
    scrollbar-color: #666 transparent;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 8px;
}

.pl-horizontal-scrollbar-thumb[b-2gcrqs2199] {
    position: absolute;
    background-color: var(--pl-neutral-fill-color-fill-secondary);
    cursor: pointer;
    border-radius: 4px;
    left: 0;
    bottom: 0;
    height: 100%;
    min-width: 30px;
    transition: background-color 0.2s;
}

.pl-horizontal-scrollbar-thumb:hover[b-2gcrqs2199] {
    background-color: var(--pl-neutral-fill-color-fill-content-hover);
}

/* Hide native horizontal scrollbars */
.pl-hidden-horizontal-scrollbars[b-2gcrqs2199] {
    scrollbar-width: none; /* Firefox */
    -ms-overflow-style: none; /* IE/Edge */
}

.pl-hidden-horizontal-scrollbars[b-2gcrqs2199]::-webkit-scrollbar:horizontal {
    height: 0 !important;
}

.pl-hidden-horizontal-scrollbars::-webkit-scrollbar:horizontal *[b-2gcrqs2199] {
    display: none !important;
}

/* Auto-scroll icon */
.pl-autoscroll-icon[b-2gcrqs2199] {
    position: fixed;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background-color: rgba(0,0,0,0.3);
    border: 2px solid rgba(255,255,255,0.5);
    z-index: var(--z-index-top-element);
    pointer-events: none;
}

/* Scroll content positioning */
.scroll-content[b-2gcrqs2199] {
    position: relative;
}
/* /View/Components/ModuleComponents/PlModuleLayoutWarning.razor.rz.scp.css */
/* Sits between the module action bar and .pl-module-content-area in PlModule's flex column, so
   it stays outside the scroll boundary and needs no sticky positioning to remain visible.
   Deliberately compact — a dashboard can host eight of these modules in small tiles. Shares
   --pl-semantic-error-color-error with the per-DAC indicator in dac_configuration_error.md so
   the two diagnostics read as one family. */
.pl-module-layout-warning[b-2blvi3qqiz] {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    min-height: 24px;
    padding: 2px 8px;
    box-sizing: border-box;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #FFFFFF;
    background-color: var(--pl-semantic-error-color-error, #C22704);
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
/* /View/Components/ModuleComponents/PlModuleSearchBar.razor.rz.scp.css */
.pl-module-search-bar[b-lrcr0084ml] {
    position: relative;
    flex-shrink: 0;
    flex-grow: 0;

    white-space: nowrap;
    overflow-x: auto;
    overflow-y: hidden;

    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    background-color: #f5f5f5;
    border-top: 1px solid #ddd;
    font-size: 12px;
    height: var(--searchbar-height, 36px);
    z-index: var(--z-index-top-element) !important;
}

.pl-module-search-bar.hidden[b-lrcr0084ml] {
    display: none;
}

.pl-search-close-btn[b-lrcr0084ml] {
    background: none;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    padding: 4px 8px;
    color: #666;
    font-size: 16px;
    line-height: 1;
}

.pl-search-close-btn:hover[b-lrcr0084ml] {
    color: #333;
    background-color: #e0e0e0;
}

.pl-search-input-container[b-lrcr0084ml] {
    position: relative;
    flex: 1;
    max-width: 300px;
    min-width: 100px;
}

.pl-search-input[b-lrcr0084ml] {
    width: 100%;
    padding: 4px 8px;
    border: 1px solid #ccc;
    border-radius: 3px;
    font-size: 12px;
}

.pl-search-input:focus[b-lrcr0084ml] {
    outline: none;
    border-color: #0078d4;
}

.pl-search-counter[b-lrcr0084ml] {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    color: #999;
    font-size: 11px;
    pointer-events: none;
    background-color: transparent;
    padding: 0 4px;
}

.pl-search-counter.no-results[b-lrcr0084ml] {
    color: #d32f2f;
}

.pl-search-buttons[b-lrcr0084ml] {
    display: flex;
    gap: 2px;
}

.pl-search-btn[b-lrcr0084ml] {
    background: none;
    border: none;
    cursor: pointer;
    padding: 4px 8px;
    font-size: 12px;
    line-height: 1;
    min-width: 28px;
    outline: none;
    border-radius: 3px;
}

.pl-search-btn:hover:not(:disabled)[b-lrcr0084ml] {
    background-color: #e0e0e0;
}

.pl-search-btn:disabled[b-lrcr0084ml] {
    opacity: 0.5;
    cursor: not-allowed;
}

.pl-icon-chevron-up[b-lrcr0084ml]::before {
    content: "\f077";
}

.pl-icon-chevron-down[b-lrcr0084ml]::before {
    content: "\f078";
}

.pl-icon-xmark[b-lrcr0084ml]::before {
    content: "\f00d";
}

.pl-search-status[b-lrcr0084ml] {
    color: #666;
    font-size: 12px;
    margin-left: auto;
}

.pl-icon-close[b-lrcr0084ml] {
    display: inline-block;
}

.pl-search-switch-label[b-lrcr0084ml] {
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    font-size: 12px;
    margin-left: 10px;
    margin-top: auto;
    margin-bottom: auto;
}

.pl-search-switch-label span[b-lrcr0084ml] {
    user-select: none;
}

[b-lrcr0084ml] .ant-switch {
    min-width: 32px;
    height: 16px;
    line-height: 16px;
}

[b-lrcr0084ml] .ant-switch-handle {
    width: 12px;
    height: 12px;
    top: 2px;
    left: 2px;
}

[b-lrcr0084ml] .ant-switch-checked .ant-switch-handle {
    left: calc(100% - 14px);
}

[b-lrcr0084ml] .ant-checkbox-wrapper > span {
    font-size: 12px;
}
/* /View/Components/ModuleComponents/PlModulesHolder.razor.rz.scp.css */
.pl-modules-holder-root[b-ppibmh8s9z] {
    display: flex;
    flex-direction: column;
    height: 100%;
    width: 100%;
}

.pl-modules-holder-body[b-ppibmh8s9z] {
    flex: 1 1 auto;
    min-height: 0;
    position: relative;
}
/* /View/Components/ModuleComponents/PlModuleTabs.razor.rz.scp.css */
/* Wrapper layout — scoped to this component */
.pl-module-tabs-wrapper[b-64krwg8uqd] {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border-radius: 4px;
    isolation: isolate;
}

/* The centre sets its title back in colour and weight while the focus sits in a docked pane,
   matching what a docked pane does with its own title (PlDockedModule.razor.css): one title at full
   strength says where the user is working. Two classes plus the scope attribute, so this beats the
   global .pl-page-title-text rule in pl-component-overrides.css. */
.pl-page-title-text.is-inactive[b-64krwg8uqd] {
    color: var(--pl-neutral-text-color-text-tertiary);
    font-weight: 400;
}
/* /View/Components/ModuleVariantComponents/PlModuleVariantsHolder.razor.rz.scp.css */
.pl-mv-container[b-dqkg1cc40s] {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    min-width: 315px;
    border: 1px solid var(--color-black-100, #E7E7E7);
    background: #FFF;
    box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.10);
}

.pl-mv-items-wrapper[b-dqkg1cc40s] {
    overflow-y: auto;
    display: flex;
    width: 100%;
    padding: 8px 8px;
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
}

.pl-mv-items-collection[b-dqkg1cc40s] {
    display: flex;
    width: 100%;
    flex-direction: column;
    align-items: flex-start;
}

.pl-mv-item[b-dqkg1cc40s] {
    display: flex;
    padding: 8px 8px;
    justify-content: space-between;
    align-items: center;
    align-self: stretch;
    cursor: pointer;
    color: var(--color-base-black, #0A090B);
    text-align: center;
    font-family: Asap;
    font-size: 16px;
    font-style: normal;
    font-weight: 400;
    line-height: normal;
    gap: 10px;
}

    .pl-mv-item:hover[b-dqkg1cc40s] {
        border-radius: 12px;
        background: var(--color-base-background, #F0F8FF);
    }

    .pl-mv-item:hover:has(input)[b-dqkg1cc40s]{
        background: unset;
    }

    .pl-mv-item label[b-dqkg1cc40s] {
        cursor: pointer;
    }

    .pl-mv-item label.selected[b-dqkg1cc40s] {
        cursor: pointer;
        font-weight: 600;
    }

    .pl-mv-item input[b-dqkg1cc40s] {
        padding: 5px 5px;
        height: 35px;
        width: 100%;
    }

.pl-mv-item-actions[b-dqkg1cc40s] {
    display: flex;
    align-items: flex-start;
    gap: 5px;
}

.pl-mv-separator[b-dqkg1cc40s] {
    width: 315px;
    height: 1px;
    background: #D1D1D1;
}

.pl-module-variant-btn[b-dqkg1cc40s] {
    color: var(--color-primary-light-blue, #00B2F5);
    width: 18px;
    height: 18px;
    font-size: 16px;
    font-weight: 500;
}

.pl-module-variant-btn:hover[b-dqkg1cc40s] {
    filter: brightness(1.1);
}

.favorite-btn[b-dqkg1cc40s]::before {
    content: "\f005";
    color: var(--color-mv-favorite, #F1D70F);
 }

.favorite-set-btn[b-dqkg1cc40s]::before {
    content: "\f005";
    font-weight: 900;
    color: var(--color-mv-favorite, #F1D70F);
}


.pl-icon-delete[b-dqkg1cc40s]::before {
    color: var(--color-mv-remove, #E7481D);
}

.save-btn[b-dqkg1cc40s]::before {
    content: "\f0c7";
    font-size: 17px;
    color: var(--color-mv-modified, #23960B);
}

.pl-mv-create-container[b-dqkg1cc40s] {
    display: flex;
    padding: 12px 16px;
    height: 66px;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    align-self: stretch;
}

.pl-mv-create-button[b-dqkg1cc40s] {
    display: flex;
    padding: 10px 16px;
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
    border-radius: 4px;
    background: var(--color-primary-light-blue, #00B2F5);
    color: var(--color-theme-white, #FFF);
    text-align: center;
    font-family: Asap;
    font-size: 14px;
    font-style: normal;
    font-weight: 500;
    line-height: normal;
}

.pl-mv-create-button:hover[b-dqkg1cc40s] {
    filter: brightness(1.05);
}
/* /View/Components/PanelComponents/PlPanel.razor.rz.scp.css */
.pl-panel[b-p7k4plm0z0] {
    position: relative;
    height: 100%;
}
/* /View/Components/PanelComponents/PlPanelTabHeader.razor.rz.scp.css */
.pl-panel-tab-header[b-utvknmlgd5] {
    display: flex;
    width: 170px;
    padding: 8px;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}

.pl-panel-tab-header:hover[b-utvknmlgd5] {
}

.pl-panel-tab-header-icon[b-utvknmlgd5] {
    width: 16px;
    height: 16px;
    flex-shrink: 0;
    border-radius: 32px;
    background: #005794;
}

.pl-panel-tab-header-text[b-utvknmlgd5] {
    overflow: hidden;
    text-overflow: ellipsis;
    color: black;
    color: var(--color-base-black, #0A090B);
    font-family: Asap;
    font-size: 14px;
    font-style: normal;
    font-weight: 500;
    line-height: normal;
}
/* /View/Components/PanelComponents/PlPanelTabs.razor.rz.scp.css */
.pl-panels-container[b-2xdhhev6xe] {
    height: 100%;
    border-radius: 4px;
    border: 1px solid var(--pl-neutral-border-color-border);
    background: var(--pl-neutral-bg-color-bg-container);
}

/* Only target the panel-level Tabs, not nested module Tabs */
[b-2xdhhev6xe] .pl-panel-tabs {
    height: 100%;
    display: flex;
    flex-direction: column;
}

/* Content area fills remaining space above tab bar */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-content-holder {
    flex: 1;
    min-height: 0;
    overflow: auto;
    border-radius: 4px 4px 0 0;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-content-holder > .ant-tabs-content {
    height: 100%;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {
    height: 100%;
}

/* Tab bar at bottom */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav {
    margin: 0;
    border-radius: 0 0 4px 4px;
    border-top: 1px solid var(--pl-neutral-border-color-border);
    min-height: 36px;
}

/* Hide AntDesign default bottom border */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav::before {
    display: none;
}

/* Tab list spacing and vertical centering */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-nav-list {
    gap: var(--spacing-field-padding, 3px);
    padding-left: var(--spacing-field-padding, 3px);
    align-items: center;
}

/* Individual tab buttons — override Card defaults */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-nav-list > .ant-tabs-tab {
    white-space: nowrap;
    text-transform: none;
    height: 32px;
    letter-spacing: normal;
    padding: 0 6px !important;
    border-radius: 0 !important;
    border: none !important;
    background: transparent !important;
    margin: 0 !important;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-nav-list > .ant-tabs-tab:hover {
    background: #F0F8FF !important;
    border-radius: 5px !important;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-nav-list > .ant-tabs-tab-active {
    background: #F0F8FF !important;
    border-radius: 5px !important;
}

/* Hide close button until tab is hovered or active */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-tab .pl-tab-close-btn {
    opacity: 0;
    transition: opacity 0.2s;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-tab:hover .pl-tab-close-btn,
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-tab-active .pl-tab-close-btn {
    opacity: 0.7;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-tab .pl-tab-close-btn {
    width: 24px;
    height: 24px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-tab .pl-tab-close-btn:hover {
    opacity: 1;
    background: rgba(0, 0, 0, 0.06);
    border-radius: 50%;
}

/* Dialog-only panels: panel body hidden, but the modal still shows via the global MudDialogProvider */
.pl-hidden-dialog-panels[b-2xdhhev6xe] {
    display: none;
}

/* Hide ink bar */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-ink-bar {
    display: none;
}

/* Hide "add" button */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-nav-add {
    display: none;
}

/* Scroll/overflow buttons */
[b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav .ant-tabs-nav-operations {
    display: flex;
}

/* Hide tab bar in single-panel mode */
[b-2xdhhev6xe] .pl-panel-tabs.pl-panel-tabs--single > .ant-tabs-nav {
    display: none;
}

[b-2xdhhev6xe] .pl-panel-tabs.pl-panel-tabs--single > .ant-tabs-content-holder {
    border-radius: 4px;
}

/* PWA adjustments when window controls overlay is active */
@media (display-mode: window-controls-overlay) {
    [b-2xdhhev6xe] .pl-panel-tabs > .ant-tabs-nav {
        margin-bottom: 8px;
    }
}
/* /View/Components/PdfPreview/PlPdfPreviewDialog.razor.rz.scp.css */
.pl-pdf-preview-container[b-4us9fot5za] {
    display: flex;
    flex-direction: row;
    min-height: 500px;
    max-height: 70vh;
    gap: 16px;
    overflow: hidden;
}

.pl-pdf-preview-content[b-4us9fot5za] {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
}

.pl-pdf-preview-options[b-4us9fot5za] {
    width: 220px;
    flex-shrink: 0;
    border-left: 1px solid var(--pl-border-color, #d9d9d9);
    padding-left: 16px;
    display: flex;
    flex-direction: column;
}

.pl-pdf-preview-options-header[b-4us9fot5za] {
    font-weight: 600;
    font-size: 14px;
    color: var(--pl-text-primary, #333);
    margin-bottom: 16px;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--pl-border-color, #d9d9d9);
}

.pl-pdf-preview-options-content[b-4us9fot5za] {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.pl-pdf-preview-option-group[b-4us9fot5za] {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.pl-pdf-preview-option-label[b-4us9fot5za] {
    font-size: 13px;
    color: var(--pl-text-secondary, #666);
    font-weight: 500;
}

.pl-pdf-preview-loading[b-4us9fot5za] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 16px;
    height: 400px;
    color: var(--pl-text-secondary, #666);
}

.pl-pdf-preview-empty[b-4us9fot5za] {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 400px;
    color: var(--pl-text-secondary, #999);
    font-size: 14px;
}

.pl-pdf-preview-footer[b-4us9fot5za] {
    display: flex;
    gap: 8px;
    justify-content: flex-end;
}

/* Grid layout styles */
.pl-pdf-preview-grid[b-4us9fot5za] {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 30px; /* Leave space for grid-info */
    overflow: auto;
    padding: 8px;
    background: #f5f5f5;
    border: 1px solid var(--pl-border-color, #d9d9d9);
}

.pl-pdf-preview-grid.pl-pdf-preview-grid-single[b-4us9fot5za] {
    bottom: 0; /* No space needed for grid-info on single page */
}

.pl-pdf-preview-row[b-4us9fot5za] {
    display: flex;
    flex-direction: row;
    gap: 16px;
    justify-content: center;
    width: fit-content;
    min-width: 100%;
    margin-bottom: 16px;
}

.pl-pdf-preview-row:last-child[b-4us9fot5za] {
    margin-bottom: 0;
}

.pl-pdf-preview-cell[b-4us9fot5za] {
    position: relative;
    border: 1px solid var(--pl-border-color, #d9d9d9);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
    background: white;
}

.pl-pdf-preview-grid-image[b-4us9fot5za] {
    display: block;
    max-height: 550px;
    width: auto;
}

.pl-pdf-preview-page-label[b-4us9fot5za] {
    position: absolute;
    bottom: 4px;
    right: 4px;
    background: rgba(0, 0, 0, 0.6);
    color: white;
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 12px;
}

.pl-pdf-preview-grid-info[b-4us9fot5za] {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    text-align: center;
    font-size: 14px;
    color: var(--pl-text-secondary, #666);
    height: 22px;
}
/* /View/Components/PlErrorBoundary.razor.rz.scp.css */
.pl-error-diagnostics[b-c7skfo1wdf] {
    margin-top: 16px;
    padding-top: 12px;
    border-top: 1px solid var(--border-color, #d9d9d9);
}

.pl-error-diagnostics-text[b-c7skfo1wdf] {
    font-size: 12px;
    margin-bottom: 8px;
}

/* Side by side while there is room, stacked once the crash screen is narrower than the two buttons. */
.pl-error-diagnostics > button[b-c7skfo1wdf] {
    margin-right: 8px;
    margin-bottom: 4px;
}

.pl-error-diagnostics-failed[b-c7skfo1wdf] {
    font-size: 12px;
    margin-top: 8px;
    margin-bottom: 0;
    color: var(--error-color, #cf1322);
}

.kill-session-text[b-c7skfo1wdf] {
    font-size: 12px;
    z-index: var(--z-index-global-error);
}

    .kill-session-text > p[b-c7skfo1wdf] {
        display: inline-block;
        padding-right: 10px;
    }
/* /View/Components/PlGlobalReconnectMessage.razor.rz.scp.css */
#components-reconnect-modal.pl-reconnect-modal[b-ygx9p2ferh] {
    position: fixed;
    inset: 0;
    z-index: var(--z-index-global-error) !important;
    overflow: hidden;
    background-color: rgba(255, 255, 255, 0.8) !important;
    text-align: center;
    font-weight: bold;
    transition: visibility linear 500ms;
}

.components-reconnect-hide[b-ygx9p2ferh]
{
    visibility: hidden;
    display: none;
}

.pl-reconnect-modal > div > div[b-ygx9p2ferh] {
    display: none;
}

.pl-components-reconnect-show[b-ygx9p2ferh], .pl-components-reconnect-show > div > .pl-components-reconnect-show[b-ygx9p2ferh],
.components-reconnect-show[b-ygx9p2ferh], .components-reconnect-show > div > .components-reconnect-show[b-ygx9p2ferh],
.components-reconnect-failed[b-ygx9p2ferh], .components-reconnect-failed > div > .components-reconnect-failed[b-ygx9p2ferh], 
.components-reconnect-rejected[b-ygx9p2ferh], .components-reconnect-rejected > div > .components-reconnect-rejected[b-ygx9p2ferh]
{
    visibility: visible;
    display: block;
}

.components-reconnect-show > div > .pl-components-reconnect-show[b-ygx9p2ferh],
.components-reconnect-failed > div > .pl-components-reconnect-show[b-ygx9p2ferh],
.components-reconnect-rejected > div > .pl-components-reconnect-show[b-ygx9p2ferh]
{
    display: none !important;
}
/* /View/Components/PlGlobalSearchBar.razor.rz.scp.css */
.pl-toolbar-search[b-gz5971iii2] {
    display: flex;
    width: 30%;
    min-width: 400px;
    padding: 8px 20px;
    align-items: center;
    gap: 4px;
    border-radius: 8px;
    background: rgba(248, 248, 248, 0.24);
    cursor: pointer;
}

.pl-toolbar-search.disabled[b-gz5971iii2] {
    opacity: 0.5;
    pointer-events: none;
}

.pl-toolbar-search-placeholder[b-gz5971iii2] {
    color: #fff;
    opacity: .5;
    font-weight: 100;
    font-family: Asap, sans-serif;
    font-size: 16px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-toolbar-search-shortcut[b-gz5971iii2] {
    color: #fff;
    opacity: .35;
    font-weight: 100;
    font-family: Asap, sans-serif;
    font-size: 13px;
    margin-left: auto;
    white-space: nowrap;
}

.pl-toolbar-search-icon[b-gz5971iii2]::before {
    font-size: 14px;
    content: "\f002";
    opacity: .7;
}

/* Overlay backdrop */
.pl-search-overlay-backdrop[b-gz5971iii2] {
    position: fixed;
    inset: 0;
    background: rgba(0, 55, 91, 0.20);
    z-index: var(--z-index-global-overlay-element);
    display: flex;
    justify-content: center;
    align-items: flex-start;
    padding-top: 60px;
}

/* Dialog card */
.pl-search-dialog[b-gz5971iii2] {
    width: 785px;
    max-width: 90vw;
    max-height: 70vh;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

/* Dialog header */
.pl-search-dialog-header[b-gz5971iii2] {
    display: flex;
    align-items: center;
    padding: 14px 18px;
    gap: 10px;
    border-bottom: 1px solid #eee;
}

.pl-search-dialog-icon[b-gz5971iii2]::before {
    font-size: 16px;
    content: "\f002";
    color: #999;
}

.pl-search-dialog-input-wrapper[b-gz5971iii2] {
    flex: 1;
    position: relative;
    display: flex;
    align-items: center;
}

.pl-search-dialog-input[b-gz5971iii2] {
    width: 100%;
    border: none;
    outline: none;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-weight: 400;
    line-height: normal;
    background: transparent;
    color: #333;
    padding: 0;
    margin: 0;
}

.pl-search-dialog-placeholder[b-gz5971iii2] {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    pointer-events: none;
    color: #999;
    font-family: Asap, sans-serif;
    font-size: 16px;
    gap: 8px;
}

.pl-search-shortcut[b-gz5971iii2] {
    font-size: 13px;
    opacity: .6;
}

.pl-search-dialog-close[b-gz5971iii2] {
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 4px 6px;
    border-radius: 4px;
    color: #999;
    display: flex;
    align-items: center;
    justify-content: center;
}

.pl-search-dialog-close:hover[b-gz5971iii2] {
    background: #f0f0f0;
    color: #555;
}

.pl-icon-xmark[b-gz5971iii2]::before {
    content: "\f00d";
}

/* Results area */
.pl-search-dialog-results[b-gz5971iii2] {
    flex: 1;
    min-height: 0;
    padding: 18px 24px;
    display: flex;
    flex-direction: column;
}

.pl-search-dialog-results:not(:has(*))[b-gz5971iii2] {
    padding: 0;
}

/* Loading indicator */
.pl-search-loading[b-gz5971iii2] {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 32px;
}


[b-gz5971iii2] .pl-module-container {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

[b-gz5971iii2] .pl-module-content-area {
    display: flex;
    flex-direction: column;
}

[b-gz5971iii2] .fluent-multi-splitter {
    flex: 1;
    min-height: 0;
}

[b-gz5971iii2] .pl-scroll {
    overflow-x: hidden !important;
}

.center-content[b-gz5971iii2]  div[data-role="module-content"] {
    width: fit-content;
    margin: auto;
}
/* /View/Components/PlMainViewHolder.razor.rz.scp.css */
.main[b-t0i2y20o7z] {
    background-color: white;
    display: flex;
    flex-direction: column;
    overflow-y: hidden;
    flex-basis: 100%;
    flex-shrink: 1;
    flex-grow: 1;
}

[b-t0i2y20o7z] .pl-main-layout {
    height: calc(100vh - var(--static-elements-height, 0px));
}

[b-t0i2y20o7z] .pl-sidebar {
    background: var(--pl-neutral-bg-color-bg-layout, #F2F4F7) !important;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    /* Stay above docked panels (z=600) so bottom-docked modules don't overlap us. */
    position: relative;
    z-index: 700;
}

[b-t0i2y20o7z] .pl-sidebar--overlay {
    overflow: visible !important;
}

[b-t0i2y20o7z] .pl-sidebar--no-transition {
    transition: none !important;
}

[b-t0i2y20o7z] .pl-sidebar > * {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

[b-t0i2y20o7z] .pl-sidebar .ant-layout-sider-trigger {
    display: none;
}

[b-t0i2y20o7z] .pl-sidebar.ant-layout-sider-has-trigger {
    padding-bottom: 0;
}

[b-t0i2y20o7z] .pl-content {
    overflow: hidden;
    flex: 1;
}
/* /View/Components/PlSessionDumpIndicator.razor.rz.scp.css */
.pl-session-dump-indicator[b-ki0q9d8eic] {
    position: fixed;
    bottom: 12px;
    right: 16px;
    z-index: 2000;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    border-radius: 16px;
    background: rgba(0, 0, 0, 0.75);
    color: #fff;
    font-size: 12px;
}

.pl-session-dump-indicator .dump-dot[b-ki0q9d8eic] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #ff4d4f;
    animation: pl-dump-pulse-b-ki0q9d8eic 1.5s infinite;
}

.pl-session-dump-indicator.truncated .dump-dot[b-ki0q9d8eic] {
    background: #faad14;
    animation: none;
}

.pl-session-dump-indicator.stopped .dump-dot[b-ki0q9d8eic] {
    background: #8c8c8c;
    animation: none;
}

.pl-session-dump-indicator .dump-download[b-ki0q9d8eic],
.pl-session-dump-indicator .dump-stop[b-ki0q9d8eic] {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 12px;
    padding: 0;
    text-decoration: underline;
}

.pl-session-dump-indicator .dump-download[b-ki0q9d8eic] {
    color: #69b1ff;
}

.pl-session-dump-indicator .dump-stop[b-ki0q9d8eic] {
    color: #ffa39e;
}

@keyframes pl-dump-pulse-b-ki0q9d8eic {
    0% { opacity: 1; }
    50% { opacity: 0.3; }
    100% { opacity: 1; }
}
/* /View/Components/ScaleChartComponents/ContextMenuButtons/PlContextMenuCheckBox.razor.rz.scp.css */
.ctxt-menu-checkbox[b-t4780scwz9] {
    display: flex;
    gap: 10px;
    align-items: center;
}
/* /View/Components/ScaleChartComponents/ContextMenuButtons/PlScaleContextMenuButton.razor.rz.scp.css */
.scale-btn[b-7h53zjtb9p] {
    background-color: rgb(0, 105, 155) !important;
    border: 1px solid rgb(0, 105, 155) !important;
    border-radius: 4px;
    color: #fff;
    font-size: 11px;
    height: fit-content;
    line-height: 21px;
    margin: 2px 0;
    padding: 1px 7px;
    min-height: 28px;
    min-width: 50px;
    width: 100%;
}

    .scale-btn:hover[b-7h53zjtb9p] {
        background-color: rgb(0, 82, 124) !important;
    }
    
    .scale-btn.not-active[b-7h53zjtb9p] {
        background-color: #6d8ba9;
    }
/* /View/Components/ScaleChartComponents/ContextMenuButtons/PlScaleContextMenuButtonsGroup.razor.rz.scp.css */
.scale-btn-group[b-n2af8mr0gp] {
    display: flex;
    gap: 5px;
    justify-content: space-between;
    min-width: 120px;
}
/* /View/Components/ScaleChartComponents/PlBarLine.razor.rz.scp.css */
span.bar-line[b-kzweu54r5f],
span.bar-line-connector[b-kzweu54r5f] {
    position: absolute;
    z-index: var(--z-index-bar-lines);
}

span.bar-line[b-kzweu54r5f] {
    height: 1px;
}

span.bar-line-connector[b-kzweu54r5f] {
    width: 1px;
}
/* /View/Components/ScaleChartComponents/PlScaleChart.razor.rz.scp.css */
.scale[b-c3u92ij0x5] {
    position: absolute;
    width: fit-content;
    display: flex;
}

.scale-options[b-c3u92ij0x5] {
    position: sticky;
    width: fit-content;
    height: 100%;
    left:  0;
}

#scale-chart-container.not-expanded[b-c3u92ij0x5] {
    overflow-x: auto;
    overflow-y: hidden;
}

#scale-chart-container[b-c3u92ij0x5] {
    display: flex;
    flex-direction: column;
    position: relative;
    height: 100%;
    width: 100%;
}

#scale-chart-container.page-scroll[b-c3u92ij0x5] {
    cursor: url('icons/cursors/up-down-left-right.svg') 2 2, auto !important;
}

.overflow-wrapper[b-c3u92ij0x5] {
    min-width: 100%;
    position: absolute;
}

.scale-container[b-c3u92ij0x5] {
    position: absolute;
    height: 100%;
    width: 100%;
    overflow: hidden;
}

.scale-container span[b-c3u92ij0x5] {
    border-right: none !important;
    border-bottom: none !important;
    border-top: none !important;
    position: absolute;
    height: 100%;
    z-index: var(--z-index-scale-chart);
}

.vertical-title-scale-grid[b-c3u92ij0x5] {
    width: 100%;
    position: absolute;
}

.vertical-header-row[b-c3u92ij0x5] {
    border: 1px dotted #bababa;
    border-collapse: collapse;
}

.scale-chart-bar-links-container[b-c3u92ij0x5] {
    position: relative;
}

/* Toggled directly by PlModule.razor.js (updateFastScrollHide/clearFastScrollHide) while a
   scroll step outruns the virtualization's overscan buffer, so links cannot outlive their bars
   during the round trip that re-renders them. A single class on this element, not an ancestor
   + descendant selector, so it can't be affected by Blazor CSS isolation scoping. */
.scale-chart-bar-links-container.pl-fast-scrolling[b-c3u92ij0x5] {
    visibility: hidden;
}
/* /View/Components/ScaleChartComponents/PlScaleChartBarLink.razor.rz.scp.css */
div[id*='bar-link-'][b-epnw44vx9a] {
    width: 1px;
    height: 1px;
    z-index: var(--z-index-bar-links);
}

.link-line[b-epnw44vx9a] {
    border-left: 1px solid #0000cc;
    border-top: 1px solid #0000cc;
    width: 0;
    height: 0;
    cursor: pointer;
    position: absolute;
}

.link-line.connector.target[b-epnw44vx9a]::after {
    content: '';
    background: #0000cc;
    display: block;
    position: absolute;
    width: 4px;
    height: 4px;
    transform: translate(-50%, -50%);
    top: 50%;
    left: 100%;
    border: 1px solid #0000cc;
    border-radius: 50%;
}

.link-line[b-epnw44vx9a],
.link-line.connector.target[b-epnw44vx9a]::after {
    outline: 0 solid #0000cc;
}

div[id*='bar-link-']:hover .link-line[b-epnw44vx9a],
div[id*='bar-link-']:hover .link-line.connector[b-epnw44vx9a]::after,
div[id*='bar-link-']:has(:hover) .link-line[b-epnw44vx9a],
div[id*='bar-link-']:has(:hover) .link-line.connector[b-epnw44vx9a]::after,
div[id*='bar-link-']:focus-within .link-line[b-epnw44vx9a],
div[id*='bar-link-']:focus-within .link-line.connector[b-epnw44vx9a]::after {
    outline-width: 1px;
    transition-delay: 0.5s;
}

.barlink-in-highlight[b-epnw44vx9a],
.barlink-in-highlight > .link-line[b-epnw44vx9a],
.barlink-out-highlight[b-epnw44vx9a],
.barlink-out-highlight > .link-line[b-epnw44vx9a] {
    z-index: var(--z-index-bar-links-highlight) !important;
}

.barlink-in-highlight .link-line[b-epnw44vx9a],
.barlink-in-highlight .link-line.connector[b-epnw44vx9a]::after {
    background: #ff6819 !important;
    border-color: #ff6819 !important;
    outline: 1px solid #ff6819 !important;
}

.barlink-out-highlight .link-line[b-epnw44vx9a],
.barlink-out-highlight .link-line.connector[b-epnw44vx9a]::after {
    background: #008000 !important;
    border-color: #008000 !important;
    outline: 1px solid #008000 !important;
}
/* /View/Components/ScaleChartComponents/PlScaleChartGrid.razor.rz.scp.css */
#chart-timeline-header-table-container[b-n2ufql8c3r] {
    height: 100%;
}

.chart-timeline-split-lines-table[b-n2ufql8c3r] {
    height: 100%;
}

td.chart-timeline-splitter-cell[b-n2ufql8c3r] {
    border-left: 1px dotted #d1d1d1;
    padding: 0;
    height: 100%;
}

/* /View/Components/ScaleComponents/PlBar.razor.rz.scp.css */
.pl-bar[b-c8gnfkscmb] {
    position: absolute;
    height: 100%;
    min-width: 100%;
    width: fit-content;
    cursor: default;
    display: flex;
}

.pl-bar:focus .bar-rectangle[b-c8gnfkscmb], .pl-bar:has(*:focus) .bar-rectangle[b-c8gnfkscmb] {
    outline: 1px dashed rgba(0, 0, 0, 0.5);
}

.pl-bar .barlink-radio[b-c8gnfkscmb] {
    position: absolute;
    z-index: var(--z-index-bar-radio);
    cursor: pointer;
    height: 15px;
    width: 15px;
    visibility: hidden;
    opacity: 0;
    transition: opacity 0.2s ease-in;
    transform: translateY(-50%);
    -webkit-transition-delay: 0.3s;
    -moz-transition-delay: 0.3s;
    -o-transition-delay: 0.3s;
    transition-delay: 0.3s;
    transition-property: opacity, visibility;
}

.pl-bar:hover .barlink-radio[b-c8gnfkscmb],
.pl-datafield-block:has(.non-linkable-bar:hover) .barlink-radio[b-c8gnfkscmb],
.barlink-radio:checked[b-c8gnfkscmb] {
    visibility: visible !important;
    opacity: 1 !important;
    -webkit-transition-delay: 0.2s;
    -moz-transition-delay: 0.2s;
    -o-transition-delay: 0.2s;
    transition-delay: 0.2s;
    transition-property: opacity, visibility;
}

.left-barlink-radio-btn[b-c8gnfkscmb] {
    left: calc(0px - 15px - 5px);
}
.right-barlink-radio-btn[b-c8gnfkscmb] {
    left: calc(100% + 5px);
}

.bar-wrapper[b-c8gnfkscmb] {
    height: 100%;
    width: 100%;
    display: flex;
    position: relative;
    z-index: var(--z-index-bar-wrapper);
}

.bar-tag[b-c8gnfkscmb] {
    font-size: 1rem;
    height: fit-content;
    line-height: 0.875rem;
    margin: 0;
    top: 50%;
    position: absolute;
    white-space: nowrap;
}

.bar-rectangle[b-c8gnfkscmb] {
    display: block;
    height: 100%;
    width: 100%;
    margin: 0;
    position: relative;
}

    .bar-rectangle.solid-bar[b-c8gnfkscmb]::before,
    .bar-rectangle.solid-bar[b-c8gnfkscmb]::after {
        font-family: 'Font Awesome 6 Pro';
        font-size: 15px;
        line-height: 13px;
        position: absolute;
        display: none;
    }
    .bar-rectangle.solid-bar[b-c8gnfkscmb]::before {
        content: "\f100";
        left: 0;
    }
    .bar-rectangle.solid-bar[b-c8gnfkscmb]::after {
        content: "\f101";
        right: 0;
    }
    
    .bar-rectangle .bar-rect-effect[b-c8gnfkscmb] {
        width: 100%;
        height: 100%;
    }
    
.solid-bar[b-c8gnfkscmb] {
    overflow: hidden;
}

.dotted-bar[b-c8gnfkscmb] {
    background-color: transparent !important;
    background-repeat: repeat-x;
    background-size: 6px !important;
    border-color: transparent !important;
    height: 11px;
}

.transparent-bar[b-c8gnfkscmb] {
    background-color: transparent !important;
    border: none;
    color: #000;
}

.transparent-bar[b-c8gnfkscmb]::before,
.transparent-bar[b-c8gnfkscmb]::after {
    content: "";
    position: absolute;
    top: 0;
    width: 9px;
    min-height: 7px;
    height: 7.8px;
    pointer-events: all;
    background-repeat: no-repeat !important;
}

.transparent-bar[b-c8gnfkscmb]::before {
    left: 0;
    transform: translateX(-50%);
}

.transparent-bar[b-c8gnfkscmb]::after {
    right: 0;
    transform: translateX(50%);
}

.transparent-bar + .bar-text[b-c8gnfkscmb] {
    color: #000;
}

body:not(:has(.moving)) .active-bar[b-c8gnfkscmb] {
    cursor: url('icons/cursors/hand.png') 2 2, auto;
}

/*body:not(:has(.resizing)) .active-bar .resize-handle {*/
/*    cursor: col-resize !important;*/
/*}*/

.moving:not(.resizing)[b-c8gnfkscmb] {
    cursor: url('icons/cursors/hand-back-fist.png') 2 2, auto;
    user-select: none;
}

.resizing:not(.moving)[b-c8gnfkscmb] {
    user-select: none;
}

.resize-handle[b-c8gnfkscmb] {
    cursor: col-resize !important;
    height: 100%;
    position: absolute;
    top: 0;
    width: 8px;
}

.bar-rectangle.transparent-bar .resize-handle[b-c8gnfkscmb] {
    pointer-events: all;
}

.resize-handle-left[b-c8gnfkscmb] {
    left: -5px;
}

.resize-handle-right[b-c8gnfkscmb] {
    right: -5px;
}

.bar-rectangle.transparent-bar .resize-handle-left[b-c8gnfkscmb] {
    left: -9px;
    z-index: var(--z-index-behind);
}
.bar-rectangle.transparent-bar .resize-handle-right[b-c8gnfkscmb] {
    right: -9px;
}
/* /View/Components/ScaleComponents/PlScaleTitleLine.razor.rz.scp.css */
.title[b-cph8z5vbdr] {
    position: absolute;
    background-color: #F3F4F5;
    text-align: center;
    cursor: default;
}
/* /View/Components/SessionLog/PlSessionLogDialog.razor.rz.scp.css */
.pl-session-log-heading[b-mv1y8wx0mm] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.pl-session-log-title[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-heading);
    font-size: 18px;
    font-weight: 600;
    line-height: 26px;
}

.pl-session-log-subtitle[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-description);
    font-size: 13px;
    font-weight: 400;
    line-height: 20px;
}

/* Bands: the modal body carries no padding of its own, so each one spans the dialog edge to edge. */
.pl-session-log-toolbar[b-mv1y8wx0mm] {
    display: flex;
    flex: none;
    align-items: center;
    gap: 12px;
    padding: 12px 24px;
    border-bottom: 1px solid var(--pl-neutral-border-color-border-secondary);
    background: var(--pl-neutral-fill-color-fill-quaternary);
}

.pl-session-log-search[b-mv1y8wx0mm] {
    flex: 1 1 auto;
    min-width: 160px;
    max-width: 320px;
}

.pl-session-log-search[b-mv1y8wx0mm]  .ant-input-affix-wrapper {
    width: 100%;
}

.pl-session-log-toolbar[b-mv1y8wx0mm]  .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
    background: var(--pl-semantic-primary-color-primary-bg);
    color: var(--pl-semantic-primary-color-primary-text);
}

.pl-session-log-count[b-mv1y8wx0mm] {
    margin-left: auto;
    color: var(--pl-neutral-text-color-text-description);
    font-size: 12px;
    white-space: nowrap;
}

.pl-session-log-hint[b-mv1y8wx0mm] {
    display: flex;
    flex: none;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 24px;
    border-bottom: 1px solid var(--pl-color-seablue-2);
    background: var(--pl-semantic-info-color-info-bg);
    color: var(--pl-semantic-info-color-info-active);
    font-size: 13px;
    line-height: 20px;
}

.pl-session-log-hint[b-mv1y8wx0mm]  .anticon {
    flex: none;
    margin-top: 3px;
    color: var(--pl-semantic-info-color-info-text);
}

/* Sits above the rows it failed to replace, so it is a band like the hint rather than a full-height state. */
.pl-session-log-failed[b-mv1y8wx0mm] {
    display: flex;
    flex: none;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 24px;
    border-bottom: 1px solid var(--pl-color-red-3);
    background: var(--pl-semantic-error-color-error-bg);
    color: var(--pl-semantic-error-color-error-text);
    font-size: 13px;
    line-height: 20px;
}

.pl-session-log-failed[b-mv1y8wx0mm]  .anticon {
    flex: none;
    margin-top: 3px;
}

.pl-session-log-state[b-mv1y8wx0mm] {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    min-height: 160px;
    padding: 48px 24px;
    text-align: center;
}

.pl-session-log-empty-title[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-secondary);
    font-size: 14px;
    font-weight: 600;
}

.pl-session-log-empty-hint[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-quaternary);
    font-size: 13px;
}

.pl-session-log-table-host[b-mv1y8wx0mm] {
    flex: 1 1 auto;
    min-height: 0;
    overflow: auto;
}

/* The rows scroll, the column names do not - a long list otherwise loses what its columns mean. */
.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-table-thead > tr > th {
    position: sticky;
    top: 0;
    z-index: 2;
    border-bottom: 1px solid var(--pl-neutral-border-color-border);
    background: var(--pl-neutral-fill-color-fill-quaternary);
    color: var(--pl-neutral-text-color-text-label);
    font-size: 12px;
    font-weight: 600;
    white-space: nowrap;
}

.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-table-tbody > tr > td {
    height: 44px;
    white-space: nowrap;
}

.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-table-thead > tr > th:first-child,
.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-table-tbody > tr > td:first-child {
    padding-left: 24px;
}

.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-table-thead > tr > th:last-child,
.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-table-tbody > tr > td:last-child {
    padding-right: 24px;
}

.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-pagination {
    padding-right: 24px;
}

.pl-session-log-table-host[b-mv1y8wx0mm]  tr.pl-session-log-row--own > td {
    background: var(--pl-semantic-primary-color-primary-bg);
}

.pl-session-log-table-host[b-mv1y8wx0mm]  tr.pl-session-log-row--own > td:first-child {
    box-shadow: inset 3px 0 0 0 var(--pl-semantic-primary-color-primary);
}

/* The box carries the whole cell: a 44px column of checkbox is a large enough target without extra padding. */
.pl-session-log-table-host[b-mv1y8wx0mm]  .ant-checkbox-wrapper {
    margin: 0;
}

.pl-session-log-user[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text);
    font-weight: 500;
}

.pl-session-log-user--none[b-mv1y8wx0mm] {
    color: var(--pl-color-neutral-5);
}

.pl-session-log-id[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-secondary);
    font-family: "Cascadia Mono", Consolas, monospace;
    font-size: 12px;
    letter-spacing: -0.01em;
}

.pl-session-log-when[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-secondary);
}

.pl-session-log-when-time[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text-quaternary);
}

.pl-session-log-size[b-mv1y8wx0mm] {
    color: var(--pl-neutral-text-color-text);
    font-variant-numeric: tabular-nums;
}

.pl-session-log-badge[b-mv1y8wx0mm] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 1px 8px;
    border: 1px solid var(--pl-neutral-border-color-border-secondary);
    border-radius: 3px;
    background: var(--pl-neutral-fill-color-fill-quaternary);
    color: var(--pl-neutral-text-color-text-description);
    font-size: 12px;
    font-weight: 500;
    line-height: 20px;
}

.pl-session-log-badge[b-mv1y8wx0mm]::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--pl-color-neutral-5);
}

.pl-session-log-badge--active[b-mv1y8wx0mm] {
    border-color: var(--pl-semantic-success-color-success-border);
    background: var(--pl-semantic-success-color-success-bg);
    color: var(--pl-color-green-7);
}

.pl-session-log-badge--active[b-mv1y8wx0mm]::before {
    background: var(--pl-semantic-success-color-success);
}

.pl-session-log-badge--truncated[b-mv1y8wx0mm] {
    border-color: var(--pl-color-red-3);
    background: var(--pl-semantic-error-color-error-bg);
    color: var(--pl-semantic-error-color-error-text);
}

.pl-session-log-badge--truncated[b-mv1y8wx0mm]::before {
    background: var(--pl-semantic-error-color-error-hover);
}

.pl-session-log-actions[b-mv1y8wx0mm] {
    display: inline-flex;
    justify-content: flex-end;
    gap: 6px;
}

.pl-session-log-footer[b-mv1y8wx0mm] {
    display: flex;
    align-items: center;
    gap: 8px;
}

/* The footer is a flex row now, so AntDesign's button spacing would double up on the gap. */
.pl-session-log-footer[b-mv1y8wx0mm]  .ant-btn + .ant-btn {
    margin-left: 0;
}

.pl-session-log-refreshed[b-mv1y8wx0mm] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin-right: auto;
    color: var(--pl-neutral-text-color-text-description);
    font-size: 12px;
}

.pl-session-log-selection[b-mv1y8wx0mm] {
    margin-right: 8px;
    color: var(--pl-neutral-text-color-text-secondary);
    font-size: 13px;
    font-weight: 500;
    white-space: nowrap;
}

.pl-session-log-start-recording-host[b-mv1y8wx0mm] {
    display: inline-flex;
    flex: none;
    white-space: nowrap;
}

/* Only when it stands alone: a second auto margin would split the free space and unpin the count from the right. */
.pl-session-log-toolbar > .pl-session-log-start-recording-host:first-child[b-mv1y8wx0mm] {
    margin-left: auto;
}

.pl-session-log-toolbar-divider[b-mv1y8wx0mm] {
    flex: none;
    width: 1px;
    height: 20px;
    background: var(--pl-neutral-border-color-border-secondary);
}

/* Inline rather than a flex item: AntDesign wraps a button's content in a span of its own. */
.pl-session-log-record-dot[b-mv1y8wx0mm] {
    display: inline-block;
    width: 8px;
    height: 8px;
    margin-right: 8px;
    border-radius: 50%;
    background: var(--pl-semantic-error-color-error);
    vertical-align: middle;
}
/* /View/Components/StatusbarComponents/PlStatusbar.razor.rz.scp.css */
.pl-status-bar[b-hu5s33tqyn] {
    position: fixed;
    left: 0;
    bottom: 0;
    max-width: 800px;
    min-width: 100px;
    background-color: deepskyblue;
    color: white;
    text-align: left;
    padding-left: 10px;
    padding-right: 10px;
    font-size: 12px;
    z-index: var(--z-index-top-element);
}
/* /View/Components/UserMenuComponents/Legacy/PlLegacyUserMenuContent.razor.rz.scp.css */
/* Top-level wrapper for the legacy single-root renderer.
   Uses ::deep to reach child leaf/group/chevron elements that live in
   separate scoped components. */

.pl-legacy-usermenu-wrapper[b-nb5xd33w4m] {
    display: flex;
    flex-direction: column;
}

.pl-legacy-usermenu-item-wrapper[b-nb5xd33w4m] {
    padding: 0;
    width: 100%;
}

.pl-legacy-usermenu-group-wrapper[b-nb5xd33w4m] {
    width: 100%;
}

/* Collapsed sidebar: hide labels, chevrons and group titles so only icons
   remain. Group children stay hidden via DataArea.Collapsed (set by
   PlUserMenu.CollapseAllChildren) — no extra CSS needed for that. */

.pl-legacy-usermenu-wrapper.collapsed[b-nb5xd33w4m]  .pl-legacy-usermenu-group-title-slot,
.pl-legacy-usermenu-wrapper.collapsed[b-nb5xd33w4m]  .pl-legacy-usermenu-group-chevron,
.pl-legacy-usermenu-wrapper.collapsed[b-nb5xd33w4m]  .pl-legacy-usermenu-item-labels {
    display: none !important;
}

.pl-legacy-usermenu-wrapper.collapsed[b-nb5xd33w4m]  .pl-legacy-usermenu-item,
.pl-legacy-usermenu-wrapper.collapsed[b-nb5xd33w4m]  .pl-legacy-usermenu-group-header {
    padding: 0 8px !important;
    justify-content: flex-start !important;
}
/* /View/Components/UserMenuComponents/Legacy/PlLegacyUserMenuFooter.razor.rz.scp.css */
/* Fixed footer for legacy single-root user menus.
   Matches leaf-row sizing so it sits flush under the scrollable content.
   Hover gradient mirrors the original PlSidebarFooter (166deg). */

.pl-legacy-usermenu-footer[b-5tg7fss41v] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 4px 0;
    flex-shrink: 0;
}

.pl-legacy-usermenu-footer-item[b-5tg7fss41v] {
    display: flex;
    align-items: center;
    gap: 8px;
    height: 32px;
    padding: 0 8px;
    cursor: pointer;
    border-radius: 4px;
    color: #0d1a26;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-weight: 500;
    user-select: none;
    -webkit-user-select: none;
    overflow: hidden;
    white-space: nowrap;
    transition: background 0.2s ease;
}

.pl-legacy-usermenu-footer-item:hover[b-5tg7fss41v] {
    background: linear-gradient(166deg, #f2f4f7 0%, #e2e7ee 100%);
}

.pl-legacy-usermenu-footer-killswitch:hover[b-5tg7fss41v] {
    color: #c4262e;
}

.pl-legacy-usermenu-footer-icon[b-5tg7fss41v] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: #6a778b;
}

.pl-legacy-usermenu-footer-icon[b-5tg7fss41v]  .anticon,
.pl-legacy-usermenu-footer-icon[b-5tg7fss41v]  .anticon svg {
    width: 16px;
    height: 16px;
    font-size: 16px;
    line-height: 1;
}

.pl-legacy-usermenu-footer-label[b-5tg7fss41v] {
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pl-legacy-usermenu-footer.collapsed .pl-legacy-usermenu-footer-item[b-5tg7fss41v] {
    justify-content: flex-start;
}
/* /View/Components/UserMenuComponents/Legacy/PlLegacyUserMenuGroup.razor.rz.scp.css */
/* Legacy collapsible group header. Mirrors pre-#2209 PlUserMenuGroup:
   16 px icon, recursive item-typography title, 12 px chevron at #6A778B,
   smooth height-tween for children via PlAnimateAutoHeight. */

.pl-legacy-usermenu-group[b-yhmw2iru6z] {
    margin: 0;
    padding: 0;
}

.pl-legacy-usermenu-group-header[b-yhmw2iru6z] {
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    white-space: nowrap;
    gap: 8px;
    padding: 0 8px;
    width: 100%;
    height: 24px;
}

.pl-legacy-usermenu-group-header:hover[b-yhmw2iru6z] {
    background: linear-gradient(166deg, #f2f4f7 0%, #e2e7ee 100%);
    border-radius: 2px;
}

.pl-legacy-usermenu-group-icon[b-yhmw2iru6z] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: #6a778b;
}

.pl-legacy-usermenu-group-icon img[b-yhmw2iru6z] {
    width: 16px;
    height: 16px;
    object-fit: contain;
    display: block;
}

.pl-legacy-placeholder-icon[b-yhmw2iru6z] {
    color: #6a778b;
    font-size: 16px;
    width: 16px;
    text-align: center;
}

.pl-legacy-usermenu-group-title-slot[b-yhmw2iru6z] {
    overflow: hidden;
    text-overflow: ellipsis;
    flex: 1;
    min-width: 0;
    height: 100%;
}

/* The nested title item must not exceed the 24px header row nor stack its own hover on the header's. */
.pl-legacy-usermenu-group-title-slot[b-yhmw2iru6z]  .pl-legacy-usermenu-item {
    padding-left: 0;
    height: 100%;
}

.pl-legacy-usermenu-group-title-slot[b-yhmw2iru6z]  .pl-legacy-usermenu-item:hover {
    background: none;
}

.pl-legacy-usermenu-group-chevron[b-yhmw2iru6z] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 12px;
    height: 12px;
    flex: 0 0 12px;
    color: #6a778b;
    transition: transform 0.3s ease;
}

.pl-legacy-usermenu-group-chevron svg[b-yhmw2iru6z] {
    width: 12px;
    height: 12px;
    fill: currentColor;
}

.pl-legacy-usermenu-group.expanded > .pl-legacy-usermenu-group-header > .pl-legacy-usermenu-group-chevron[b-yhmw2iru6z] {
    transform: rotate(90deg);
}

[b-yhmw2iru6z] .pl-legacy-usermenu-child-content {
    overflow: hidden;
    padding-left: 20px;
}
/* /View/Components/UserMenuComponents/Legacy/PlLegacyUserMenuItem.razor.rz.scp.css */
/* Legacy leaf row — mirrors pre-#2209 PlUserMenuItem + PlUserMenuToolbarItem.
   Default typography is the top-level look (16 px / #0d1a26 / weight 500).
   Last-level rows downshift to 14 px / #495769 / weight 400 via the
   .last-level modifier. */

.pl-legacy-usermenu-item[b-hzhlinltke] {
    cursor: pointer;
    display: flex;
    flex-direction: row;
    align-items: center;
    overflow: hidden;
    flex-grow: 1;
    flex-wrap: nowrap;
    column-gap: 8px;
    padding: 0 8px;
    border-radius: 4px;
    color: #0d1a26;
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-style: normal;
    font-weight: 500;
    line-height: 1em;
    height: 32px;
    user-select: none;
    -webkit-user-select: none;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.pl-legacy-usermenu-item.top-level[b-hzhlinltke] {
    font-size: 16px;
    font-weight: 500;
}

.pl-legacy-usermenu-item.last-level[b-hzhlinltke] {
    color: #495769;
    font-size: 14px;
    font-weight: 400;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

.pl-legacy-usermenu-item.no-gap[b-hzhlinltke] {
    column-gap: 0 !important;
}

.pl-legacy-usermenu-item.flex-grow-shrink[b-hzhlinltke] {
    flex: 1;
}

.pl-legacy-usermenu-item:hover[b-hzhlinltke] {
    background: linear-gradient(153deg, #f2f4f7 0%, #e2e7ee 100%);
}

.pl-legacy-usermenu-item-icon[b-hzhlinltke] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: #6a778b;
    font-size: 16px;
}

.pl-legacy-usermenu-item-img[b-hzhlinltke] {
    position: relative;
    color: #6a778b;
    width: 16px;
    height: 16px;
    display: block;
}

.pl-legacy-usermenu-item-icon .pl-usermenu-icon[b-hzhlinltke] {
    width: 16px;
    height: 16px;
    display: block;
}

.pl-legacy-usermenu-item-labels[b-hzhlinltke] {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 5px;
    min-width: 0;
}

.pl-legacy-usermenu-item-label[b-hzhlinltke] {
    display: block;
    align-items: center;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    line-height: normal;
}

.pl-legacy-usermenu-item-label.accented[b-hzhlinltke] {
    font-weight: 600;
}

.pl-legacy-usermenu-item-label.flex-grow-shrink[b-hzhlinltke] {
    flex: 1;
}
/* /View/Components/UserMenuComponents/PlDropdownDataArea.razor.rz.scp.css */
.pl-user-dropdown-trigger[b-p5g0hrzej5] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 0 12px;
    background: #FFFFFF;
    border: 1px solid #C4CBDA;
    border-radius: 4px;
    box-shadow: 0px 2px 0px 0px rgba(18, 46, 94, 0.07);
    cursor: pointer;
    transition: border-color 0.2s ease;
    height: 40px;
    width: 100%;
    box-sizing: border-box;
}

    /* border-image strips border-radius in every browser; use a solid primary-hover
       color instead so the 4px corners stay rounded on hover. */
    .pl-user-dropdown-trigger:hover[b-p5g0hrzej5] {
        border-color: var(--pl-semantic-primary-color-primary-hover, #009ADB);
    }

.pl-user-avatar[b-p5g0hrzej5] {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: linear-gradient(170deg, #0DB5F2, #0070B5);
    color: #FFFFFF;
    font-family: Asap, sans-serif;
    font-size: 12px;
    font-weight: 500;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    position: relative;
    overflow: hidden;
}

    /* The rendered datafield wrapper sits inside the round avatar.
       The dynamic symbol CSS (.pl-symbol-XXXXXX) gives every datafield a
       1px gray border with !important. At the same 28x28 size as the
       round parent that border bleeds inside the circle, so strip it.
       ::deep is required because the wrapper is rendered by a child
       component and !important is required to beat the symbol rule. */
    .pl-user-avatar[b-p5g0hrzej5]  [id^="datafield-"] {
        display: flex;
        align-items: center;
        justify-content: center;
        border: none !important;
        background: transparent !important;
    }

    .pl-user-avatar > [id^="datafield-"] > img[b-p5g0hrzej5] {
        width: 100% !important;
        height: 100% !important;
        object-fit: cover;
    }

.pl-user-name[b-p5g0hrzej5] {
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-weight: 500;
    color: #0D1A26;
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

[b-p5g0hrzej5] .pl-user-chevron {
    font-size: 14px;
    color: #6A778B;
    flex-shrink: 0;
}

.pl-user-dropdown-collapsed[b-p5g0hrzej5] {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 40px;
}
/* /View/Components/UserMenuComponents/PlLogo.razor.rz.scp.css */
.logo-container[b-51dx6amg3j] {
    display: flex;
    align-items: center;
    align-self: center;
    cursor: pointer;
}

    .logo-container.disabled[b-51dx6amg3j] {
        pointer-events: none;
        cursor: default;
        opacity: 0.03;
    }

.pl-usermenu-logo[b-51dx6amg3j] {
    position: relative;
}

.pl-usermenu-logo img[b-51dx6amg3j] {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    object-fit: contain;
    transition: opacity 500ms ease;
    display: block;
}

.pl-usermenu-logo--collapsed[b-51dx6amg3j] {
    filter: invert(18%) sepia(57%) saturate(2594%) hue-rotate(179deg) brightness(99%) contrast(101%);
}

.pl-usermenu-logo.is-open .pl-usermenu-logo--collapsed[b-51dx6amg3j],
.pl-usermenu-logo.is-collapsed .pl-usermenu-logo--opened[b-51dx6amg3j] {
    opacity: 0;
}
/* /View/Components/UserMenuComponents/PlSidebarHeader.razor.rz.scp.css */
.pl-sidebar-header[b-n6z0vtdna5] {
    flex: 0 0 auto;
}

.pl-sidebar-header-row[b-n6z0vtdna5] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 40px;
    overflow: visible;
}

/* AntDesign Dropdown wraps trigger in an extra div */
[b-n6z0vtdna5] .pl-sidebar-header-row > div:first-child {
    min-width: 0;
}

.pl-sidebar-logo-button[b-n6z0vtdna5] {
    display: flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
    padding: 4px 8px;
    border-radius: 4px;
    transition: background 0.2s ease;
    position: relative;
}

    .pl-sidebar-logo-button:hover[b-n6z0vtdna5] {
        background: linear-gradient(166deg, var(--pl-semantic-contrast-color-gradient-bg-hover-from) 0%, var(--pl-semantic-contrast-color-gradient-bg-hover-to) 100%);
    }

    /* Single-stop gradient so hover→active interpolates; a solid color would blink. */
    .pl-sidebar-logo-button.active[b-n6z0vtdna5] {
        background: linear-gradient(166deg, var(--pl-semantic-contrast-color-gradient-bg-active) 0%, var(--pl-semantic-contrast-color-gradient-bg-active) 100%);
    }

.pl-sidebar-logo-full[b-n6z0vtdna5] {
    height: 28px;
    width: 93px;
    object-fit: contain;
    flex-shrink: 0;
}

.pl-sidebar-chevron[b-n6z0vtdna5] {
    width: 14px;
    height: 14px;
    font-size: 14px;
    line-height: 1;
    color: #0D1A26;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.pl-sidebar-actions[b-n6z0vtdna5] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}

.pl-header-btn[b-n6z0vtdna5] {
    width: 32px;
    height: 32px;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 0;
    border-radius: 4px;
    cursor: pointer;
    transition: background 0.2s ease, border-color 0.2s ease;
}

.pl-header-btn-text[b-n6z0vtdna5] {
    background: none;
    border: none;
}

    .pl-header-btn-text:hover[b-n6z0vtdna5] {
        background: linear-gradient(166deg, var(--pl-semantic-contrast-color-gradient-bg-hover-from) 0%, var(--pl-semantic-contrast-color-gradient-bg-hover-to) 100%);
    }

.pl-header-btn-default[b-n6z0vtdna5] {
    background: #FFFFFF;
    border: 1px solid #C4CBDA;
    box-shadow: 0px 2px 0px 0px rgba(18, 46, 94, 0.07);
}

    .pl-header-btn-default:hover[b-n6z0vtdna5] {
        border-color: var(--pl-semantic-primary-color-primary-hover, #009ADB);
    }

    .pl-header-btn-default:disabled[b-n6z0vtdna5] {
        opacity: 0.5;
        cursor: not-allowed;
    }

.pl-header-btn-icon[b-n6z0vtdna5] {
    width: 14px;
    height: 14px;
    display: block;
}

.pl-sidebar-header-collapsed[b-n6z0vtdna5] {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 40px;
}

.pl-sidebar-logo-icon[b-n6z0vtdna5] {
    width: 28px;
    height: 28px;
    object-fit: contain;
}

[b-n6z0vtdna5] .pl-sidebar-divider.ant-divider {
    margin: 0;
    border-color: #C4CBDA;
}
/* /View/Components/UserMenuComponents/PlUserDropdown.razor.rz.scp.css */
.pl-user-dropdown-root[b-32litjrqgj] {
    width: 100%;
}

.pl-user-dropdown-trigger[b-32litjrqgj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 0 12px;
    background: #FFFFFF;
    border: 1px solid #C4CBDA;
    border-radius: 4px;
    box-shadow: 0px 2px 0px 0px rgba(18, 46, 94, 0.07);
    cursor: pointer;
    transition: border-color 0.2s ease;
    height: 40px;
    width: 100%;
    box-sizing: border-box;
}

    /* border-image strips border-radius in every browser; use a solid primary-hover
       color instead so the 4px corners stay rounded on hover. */
    .pl-user-dropdown-trigger:hover[b-32litjrqgj] {
        border-color: var(--pl-semantic-primary-color-primary-hover, #009ADB);
    }

.pl-user-avatar[b-32litjrqgj] {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: linear-gradient(170deg, #0DB5F2, #0070B5);
    color: #FFFFFF;
    font-family: Asap, sans-serif;
    font-size: 12px;
    font-weight: 500;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.pl-user-name[b-32litjrqgj] {
    font-family: Asap, sans-serif;
    font-size: 16px;
    font-weight: 500;
    color: #0D1A26;
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

[b-32litjrqgj] .pl-user-chevron {
    font-size: 14px;
    color: #6A778B;
    flex-shrink: 0;
}

.pl-user-dropdown-collapsed[b-32litjrqgj] {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 40px;
}
/* /View/Components/UserMenuComponents/PlUserMenu.razor.rz.scp.css */
.pl-sidebar-inner[b-ur0au54j9l] {
    height: 100%;
    padding: 8px 16px 16px;
}

.pl-sidebar-inner--overlay[b-ur0au54j9l] {
    position: absolute;
    top: 0;
    left: 0;
    width: 280px;
    height: 100%;
    z-index: 100;
    background: var(--pl-neutral-bg-color-bg-layout, #F2F4F7);
    box-shadow: 4px 0 16px rgba(0, 0, 0, 0.12);
    border-right: 1px solid #C4CBDA;
    /* GPU-composited translate avoids the double-paint that clip-path + Sider width caused. */
    animation: sidebar-slide-in-b-ur0au54j9l 160ms ease-out;
    will-change: transform;
}

@keyframes sidebar-slide-in-b-ur0au54j9l {
    /* (64px - 100%) leaves the 64px collapsed slice visible at frame 0
       and survives changes to either width without manual math. */
    from {
        transform: translateX(calc(64px - 100%));
    }
    to {
        transform: translateX(0);
    }
}

.pl-sidebar-inner--overlay-closing[b-ur0au54j9l] {
    position: absolute;
    top: 0;
    left: 0;
    width: 280px;
    height: 100%;
    z-index: 100;
    background: var(--pl-neutral-bg-color-bg-layout, #F2F4F7);
    border-right: 1px solid #C4CBDA;
    animation: sidebar-slide-out-b-ur0au54j9l 140ms ease-in forwards;
    will-change: transform;
    pointer-events: none;
    overflow: hidden;
}

@keyframes sidebar-slide-out-b-ur0au54j9l {
    from {
        transform: translateX(0);
    }
    to {
        transform: translateX(calc(64px - 100%));
    }
}

.pl-sidebar-layout[b-ur0au54j9l] {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
    /* Figma: 16px between sections; explicit <Divider>s sit in the middle with 0 margin. */
    gap: 16px;
}

/* Between-section dividers use Figma's border color #c4cbda, no extra margin. */
[b-ur0au54j9l] .pl-sidebar-divider.ant-divider-horizontal {
    margin: 0 !important;
    border-block-start: 1px solid #c4cbda !important;
    border-top: 1px solid #c4cbda !important;
    min-width: 0 !important;
}

[b-ur0au54j9l] .pl-sidebar-divider.pl-content-divider {
    margin: 16px 0 !important;
}

.pl-sidebar-content[b-ur0au54j9l] {
    flex: 1 1 auto;
    overflow-y: auto;
    overflow-x: hidden;
    /* Figma: thin right-edge scrollbar. Gutter is not reserved; the 32 px
       collapsed-sidebar content area must fit a 16 px icon + 2×8 px padding,
       which leaves no room for a 6 px reserved gutter. */
    scrollbar-width: thin;
    scrollbar-color: #c4cbda transparent;
}

.pl-sidebar-content[b-ur0au54j9l]::-webkit-scrollbar {
    width: 6px;
}

.pl-sidebar-content[b-ur0au54j9l]::-webkit-scrollbar-track {
    background: transparent;
}

.pl-sidebar-content[b-ur0au54j9l]::-webkit-scrollbar-thumb {
    background: #c4cbda;
    border-radius: 3px;
}

.pl-sidebar-content[b-ur0au54j9l]::-webkit-scrollbar-thumb:hover {
    background: #6a778b;
}

/* Hide scrollbar in collapsed (icon-only) mode — there's no room and it distracts. */
.pl-sidebar-content.collapsed[b-ur0au54j9l] {
    scrollbar-width: none;
}

.pl-sidebar-content.collapsed[b-ur0au54j9l]::-webkit-scrollbar {
    display: none;
}

/* /View/Components/UserMenuComponents/PlUserMenuContent.razor.rz.scp.css */
/* ===== PLANTA sidebar — Main root renderer =====
   Design tokens from Figma node 26637:43271
     --typography/font-size/fontsize      : 14px
     --typography/font-size/fontsizelg    : 16px
     --colors/neutral/text/colortext       : #0d1a26  (default label)
     --colors/neutral/text/colortextlabel  : #495769  (group header)
     --colors/neutral/text/colortexttertiary : #6a778b (suffix, icons)
     --colors/semantic/primary/colorprimarytext     : #0070b5 (selected text)
     --colors/semantic/primary/gradientprimaryfrom  : #0db5f2 (selected border)
     --colors/neutral/bg/colorbglayout     : #f2f4f7
     --colors/neutral/colorbgbase          : #ffffff
     --colors/neutral/border/colorborder   : #c4cbda
     --components/button/global/controloutlinewidth : 2px (selected border width)
     --border-radius/borderradius          : 4px
     --border-radius/borderradiusxs        : 2px
     --space/padding/paddingxs             : 8px
     --space/margin/marginxs               : 8px
     --space/margin/marginxxs              : 4px
   ======================================================== */

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-content,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-content .ant-menu-sub {
    background: transparent !important;
    border-inline-end: none !important;
    font-family: Asap, sans-serif;
    user-select: none;
    -webkit-user-select: none;
}

/* Figma: sidebar root uses flex-column; each menu itself has no padding. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu {
    padding: 0 !important;
    line-height: 1;
}

/* ----- Leaf items (Meine Tätigkeiten, Elektrohängebahn, ...) ----- */

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-action {
    height: 32px !important;
    line-height: 32px !important;
    margin: 0 !important;
    padding: 0 8px !important;
    color: #0d1a26 !important;
    font-size: 16px !important;
    font-weight: 500 !important;
    border-radius: 4px !important;
    display: flex !important;
    align-items: center !important;
    width: 100% !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item > .ant-menu-title-content,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-action > .ant-menu-title-content {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    min-width: 0;
    overflow: hidden;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: #6a778b;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-icon .anticon,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-icon .anticon svg {
    font-size: 16px;
    width: 16px;
    height: 16px;
    line-height: 1;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-icon img {
    width: 16px;
    height: 16px;
    object-fit: contain;
}

/* FontAwesome chevron on the "Weniger anzeigen" toggle: slimmer than the 16px anticon glyphs. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-icon .fa {
    font-size: 12px;
    line-height: 1;
}

/* Wraps the primary label + optional suffix so they flow as a single block:
   the suffix sits directly after the primary (no flex gap between them), and
   the whole block can shrink so the primary ellipsizes while the suffix stays
   visible. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-labels {
    display: inline-flex;
    align-items: baseline;
    min-width: 0;
    flex: 0 1 auto;
    overflow: hidden;
    white-space: nowrap;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-label {
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #0d1a26;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item-suffix {
    /* Figma: the suffix flows right after the primary label with a tiny 4 px gap
       before the "-" so the two values don't touch. When the primary overflows,
       it ellipsizes first and the suffix always stays visible. */
    color: #6a778b;
    font-weight: 400;
    font-size: 14px;
    flex: 0 0 auto;
    white-space: nowrap;
    margin-left: 4px;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-item:hover,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-action:hover {
    background: linear-gradient(153deg, #f2f4f7 0%, #e2e7ee 100%) !important;
}

/* ----- Selected state (Home in Figma) ----- */

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-item-selected.pl-user-menu-item,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-item-selected.pl-user-menu-action {
    background: #ffffff !important;
    border: 2px solid #0db5f2 !important;
    color: #0070b5 !important;
    /* Compensate for 2px border so label doesn't shift by 2px. */
    padding: 0 6px !important;
    height: 32px !important;
    line-height: 28px !important;
    font-weight: 500 !important;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-item-selected .pl-user-menu-item-icon,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-item-selected .pl-user-menu-item-label {
    color: #0070b5 !important;
}

/* ----- Group header (SubMenu title: Favoriten, Planung, ...) ----- */

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group {
    margin: 0 !important;
    padding: 0 !important;
}

/* Figma: the sidebar column separates top-level groups by 16px; rows inside a group stay flush. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-content > li + .pl-user-menu-group,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-content > .pl-user-menu-group + li {
    margin-top: 16px !important;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title {
    height: 28px !important;
    line-height: 28px !important;
    padding: 0 4px !important;
    margin: 0 !important;
    color: #495769 !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    border-radius: 2px !important;
    display: flex !important;
    align-items: center !important;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title > .ant-menu-title-content {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    width: 100%;
    min-width: 0;
}

/* Group title label inherits the muted group-header color, not the default leaf color. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title .pl-user-menu-item-label {
    color: #495769 !important;
    font-size: 14px !important;
    font-weight: 400 !important;
}

/* Group header icon: smaller (inherits 16px but in group context is muted). */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title .pl-user-menu-item-icon {
    color: #495769;
    width: 14px;
    height: 14px;
    flex: 0 0 14px;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title .pl-user-menu-item-icon .anticon,
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title .pl-user-menu-item-icon .anticon svg {
    font-size: 14px;
    width: 14px;
    height: 14px;
}

/* Figma: chevron sits inline right after the group label, vertically centered. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group .ant-menu-submenu-arrow {
    position: static !important;
    color: #495769 !important;
    font-size: 10px;
    width: 10px;
    height: 10px;
    margin-inline-start: 6px;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    transform: none !important;
    top: auto !important;
    right: auto !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    align-self: center !important;
    vertical-align: middle !important;
}

/* SubMenu title row should only be as wide as its content + chevron, not 100%. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .pl-user-menu-group > .ant-menu-submenu-title > .ant-menu-title-content {
    flex: 0 0 auto;
    width: auto !important;
}

/* Sub items sit flush under the group title (Figma group = 28px title + 32px rows, no gap). */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-sub {
    padding: 0 !important;
}

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-sub .pl-user-menu-item {
    padding-left: 8px !important;
}

/* ----- Dividers between top-level entries ----- */

.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-item-divider {
    background-color: #c4cbda !important;
    height: 1px !important;
    margin: 8px 0 !important;
    border: 0 !important;
    display: block !important;
    overflow: hidden;
    padding: 0 !important;
    line-height: 1 !important;
}

/* Hide AntDesign's default right-edge highlight on selected items. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-item::after {
    display: none !important;
}

/* Submenu list: remove default bg and padding. */
.pl-user-menu-content-wrapper[b-2zx46rq9fr]  .ant-menu-submenu-open .ant-menu-submenu-title {
    color: #495769 !important;
}

/* ----- Collapsed sidebar: hide group headers + labels, show icons only. ----- */

/* Keep the group-title's vertical slot so leaf icons don't shift up; just hide its content. */
.pl-user-menu-content-wrapper.collapsed[b-2zx46rq9fr]  .ant-menu-submenu-title {
    visibility: hidden !important;
}

.pl-user-menu-content-wrapper.collapsed[b-2zx46rq9fr]  .pl-user-menu-item-label,
.pl-user-menu-content-wrapper.collapsed[b-2zx46rq9fr]  .pl-user-menu-item-suffix {
    display: none !important;
}

/* Preserve the icon's horizontal position in collapsed mode: same 8px padding-left. */
.pl-user-menu-content-wrapper.collapsed[b-2zx46rq9fr]  .pl-user-menu-item {
    padding: 0 8px !important;
    justify-content: flex-start !important;
    width: 100% !important;
}

.pl-user-menu-content-wrapper.collapsed[b-2zx46rq9fr]  .ant-menu-sub .pl-user-menu-item {
    padding-left: 8px !important;
}
/* /View/Components/UserMenuComponents/PlUserMenuFixedRegion.razor.rz.scp.css */
/* ===== PLANTA sidebar — FixedTop / FixedBottom renderer =====
   Uses the same design tokens as PlUserMenuContent; see that file header.
   ============================================================== */

.pl-user-menu-fixed-wrapper[b-oinqskw4m8] {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed {
    background: transparent !important;
    border-inline-end: none !important;
    font-family: Asap, sans-serif;
    padding: 0 !important;
    line-height: 1;
    user-select: none;
    -webkit-user-select: none;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .pl-user-menu-item {
    height: 32px !important;
    line-height: 32px !important;
    margin: 0 !important;
    padding: 0 8px !important;
    color: #0d1a26 !important;
    font-size: 16px !important;
    font-weight: 500 !important;
    border-radius: 4px !important;
    display: flex !important;
    align-items: center !important;
    width: 100% !important;
    overflow: hidden !important;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .pl-user-menu-item > .ant-menu-title-content {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    min-width: 0;
    overflow: hidden;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-item-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: #6a778b;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-item-icon .anticon,
.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-item-icon .anticon svg {
    font-size: 16px;
    width: 16px;
    height: 16px;
    line-height: 1;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-item-icon img {
    width: 16px;
    height: 16px;
    object-fit: contain;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-item-label {
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #0d1a26;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .pl-user-menu-item:hover {
    background: linear-gradient(153deg, #f2f4f7 0%, #e2e7ee 100%) !important;
}

/* Selected state: white bg + 2px primary border + primary text */
.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .ant-menu-item-selected {
    background: #ffffff !important;
    border: 2px solid #0db5f2 !important;
    color: #0070b5 !important;
    padding: 0 6px !important;
    height: 32px !important;
    line-height: 28px !important;
}

.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .ant-menu-item-selected .pl-user-menu-item-icon,
.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .ant-menu-item-selected .pl-user-menu-item-label {
    color: #0070b5 !important;
}

/* Hide AntDesign's default right-edge highlight on selected items. */
.pl-user-menu-fixed-wrapper[b-oinqskw4m8]  .pl-user-menu-fixed .ant-menu-item::after {
    display: none !important;
}

/* Collapsed sidebar: hide labels, keep icons at the same 8px-from-left position. */
.pl-user-menu-fixed-wrapper.collapsed[b-oinqskw4m8]  .pl-user-menu-item-label,
.pl-user-menu-fixed-wrapper.collapsed[b-oinqskw4m8]  .pl-user-menu-item-suffix {
    display: none !important;
}

.pl-user-menu-fixed-wrapper.collapsed[b-oinqskw4m8]  .pl-user-menu-fixed .pl-user-menu-item {
    padding: 0 8px !important;
    justify-content: flex-start !important;
    width: 100% !important;
}
