/* /Pages/Contracts/ContractEdit.razor.rz.scp.css */
/* Tabbed intake wizard: header, horizontal tab strip, then the active panel.
   (Replaced the old left step rail now that the app nav lives on the left.) */
.wizard[b-8realnb68w] {
    margin: 0;
    max-width: none;
}

.wizard-header[b-8realnb68w] {
    align-items: flex-start;
    display: flex;
    gap: 1rem;
    justify-content: space-between;
    padding: 0 0 .75rem;
}

.wizard-header-main[b-8realnb68w] {
    min-width: 0;
}

/* Circuits and regions on the Coverage panel: derived, not chosen, so they are
   listed as values rather than drawn as controls. Same height as the checkset
   beside them so the three columns line up. */
.derived-set[b-8realnb68w] {
    align-content: flex-start;
    display: flex;
    flex-wrap: wrap;
    gap: .3rem;
    min-height: 2.2rem;
    padding: .35rem 0;
}

/* The contract number and the PDF export on one line. The eyebrow is a <p>
   with no margin, so this only has to supply the gap and the alignment. */
.wizard-header-code[b-8realnb68w] {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: .6rem;
}

/* Who last saved the contract, and when. On the header rather than in a tab so
   it appears on all of them, and deliberately quiet - it describes the record,
   it is not a field of it. Stacked rather than run together on one line because
   the user name is an email address and would otherwise crowd the title. */
.wizard-stamp[b-8realnb68w] {
    color: #64748b;
    display: flex;
    flex-direction: column;
    flex: 0 0 auto;
    font-size: .74rem;
    line-height: 1.35;
    margin: 0;
    text-align: right;
}

.wizard-stamp-label[b-8realnb68w] {
    color: #94a3b8;
    font-size: .66rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
}

/* Narrow screens: let it fall under the title rather than squeeze it. */
@media (max-width: 700px) {
    .wizard-header[b-8realnb68w] {
        flex-direction: column;
        gap: .35rem;
    }

    .wizard-stamp[b-8realnb68w] {
        text-align: left;
    }
}

.wizard-eyebrow[b-8realnb68w] {
    color: #0b2e63;
    font-size: 1.05rem;
    font-weight: 900;
    letter-spacing: .03em;
    margin: 0;
    text-transform: uppercase;
}

.wizard-title[b-8realnb68w] {
    color: #64748b;
    font-size: .92rem;
    font-weight: 600;
    margin: .15rem 0 0;
}

/* Tab strip — scrolls horizontally rather than wrapping when space is tight. */
.wizard-tabs[b-8realnb68w] {
    border-bottom: 2px solid #d7e0ea;
    display: flex;
    gap: .25rem;
    overflow-x: auto;
    scrollbar-width: thin;
}

.wizard-tab[b-8realnb68w] {
    align-items: center;
    background: transparent;
    border: 1px solid transparent;
    border-bottom: 0;
    border-radius: 8px 8px 0 0;
    color: #43566b;
    cursor: pointer;
    display: inline-flex;
    flex: 0 0 auto;
    font-size: .92rem;
    font-weight: 600;
    gap: .45rem;
    margin-bottom: -2px;
    padding: .65rem .9rem;
    white-space: nowrap;
}

.wizard-tab:hover[b-8realnb68w] {
    background: #eef4fb;
    color: #0b2e63;
}

/* Step number / completed check bubble inside each tab. */
.tab-marker[b-8realnb68w] {
    align-items: center;
    background: #e2e8f0;
    border-radius: 50%;
    color: #526272;
    display: inline-flex;
    flex: 0 0 auto;
    font-size: .72rem;
    font-weight: 800;
    height: 1.35rem;
    justify-content: center;
    width: 1.35rem;
}

/* Completed — green check, darker label. */
.wizard-tab.done[b-8realnb68w] {
    color: #1f2937;
}

.wizard-tab.done .tab-marker[b-8realnb68w] {
    background: #1f9d55;
    color: #fff;
}

/* Current — raised white tab joined to the panel below. */
.wizard-tab.active[b-8realnb68w] {
    background: #fff;
    border-color: #d7e0ea;
    color: #0b2e63;
    font-weight: 800;
}

.wizard-tab.active .tab-marker[b-8realnb68w] {
    background: #0b2e63;
    color: #fff;
}

/* Pending — muted. */
.wizard-tab.pending[b-8realnb68w] {
    color: #94a3b8;
}

/* Optional (Budget, Amendments) — not required to submit. */
.wizard-tab.optional[b-8realnb68w] {
    color: #7c8798;
}

/* Marker overrides, declared after .active so a completed current tab still
   shows a green check rather than the navy step number. */
.wizard-tab .tab-marker.is-done[b-8realnb68w] {
    background: #48854d;
    color: #fff;
}

.wizard-tab .tab-marker.is-optional[b-8realnb68w] {
    background: #eef1f5;
    color: #98a2b3;
}

/* ---- Review & Submit ---- */
.review-checklist[b-8realnb68w] {
    display: grid;
    gap: .4rem;
    list-style: none;
    margin: .25rem 0 0;
    padding: 0;
}

.review-item[b-8realnb68w] {
    align-items: flex-start;
    border: 1px solid #e2e8f0;
    border-radius: 8px;
    display: flex;
    gap: .65rem;
    padding: .6rem .8rem;
}

.review-item.is-ok[b-8realnb68w] {
    background: #f4fbf6;
    border-color: #cbe8d3;
}

.review-item.is-missing[b-8realnb68w] {
    background: #fdf6f5;
    border-color: #f0cfcc;
}

.review-item.is-optional[b-8realnb68w] {
    background: #fafbfc;
}

.review-icon[b-8realnb68w] {
    align-items: center;
    border-radius: 50%;
    display: inline-flex;
    flex: 0 0 auto;
    font-size: .72rem;
    height: 1.35rem;
    justify-content: center;
    margin-top: .1rem;
    width: 1.35rem;
}

.review-item.is-ok .review-icon[b-8realnb68w] {
    background: #48854d;
    color: #fff;
}

.review-item.is-missing .review-icon[b-8realnb68w] {
    background: #c1362f;
    color: #fff;
}

.review-item.is-optional .review-icon[b-8realnb68w] {
    background: #eef1f5;
    color: #98a2b3;
}

.review-body[b-8realnb68w] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

/* Tab name doubles as a jump link to that tab. */
.review-link[b-8realnb68w] {
    background: none;
    border: 0;
    color: #0b2e63;
    cursor: pointer;
    font-weight: 800;
    padding: 0;
    text-align: left;
}

.review-link:hover[b-8realnb68w] {
    text-decoration: underline;
}

.review-note[b-8realnb68w] {
    color: #526272;
    font-size: .86rem;
}

.review-advisory[b-8realnb68w] {
    align-items: flex-start;
    background: #fffaf0;
    border: 1px solid #f3ddb0;
    border-radius: 8px;
    color: #7a5a10;
    display: flex;
    gap: .5rem;
    margin-top: .75rem;
    padding: .6rem .8rem;
}

.review-blocked[b-8realnb68w] {
    align-self: center;
    color: #a02b25;
    font-size: .88rem;
}

/* Read-only summary of the whole contract. */
.review-grid[b-8realnb68w] {
    display: grid;
    gap: .5rem .9rem;
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

.review-grid > div[b-8realnb68w] {
    border-bottom: 1px solid #eef2f7;
    font-size: .92rem;
    min-width: 0;
    overflow-wrap: anywhere;
    padding-bottom: .35rem;
}

.review-grid > div > span[b-8realnb68w] {
    color: #64748b;
    display: block;
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .02em;
    text-transform: uppercase;
}

@media (max-width: 700px) {
    .review-grid[b-8realnb68w] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.wizard-body[b-8realnb68w] {
    background: #ffffff;
    border: 1px solid #d7e0ea;
    border-radius: 0 8px 8px 8px;
    box-shadow: 0 8px 20px rgba(15, 40, 64, .08);
    padding: 1.5rem;
}

.wizard-body h2[b-8realnb68w] {
    color: #0b2e63;
    font-size: 1.55rem;
    font-weight: 900;
    margin: 0 0 .25rem;
}

.wizard-placeholder[b-8realnb68w] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 6px;
    color: #43566b;
    margin: 1.25rem 0;
    padding: 2.5rem 1.5rem;
    text-align: center;
}

.wizard-actions[b-8realnb68w] {
    display: flex;
    flex-wrap: wrap;
    gap: .65rem;
    margin-top: 1rem;
}

.wizard-draft[b-8realnb68w] {
    margin-left: auto;
}

/* Outsourcing/FCO: a question with its Yes/No pair. The question reads as a
   label rather than a checkbox caption, because it is one - the answer is the
   radio pair beside it, and neither is selected until somebody chooses. */
.yesno-question[b-8realnb68w] {
    align-items: baseline;
    border-bottom: 1px solid #f1f5f9;
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    justify-content: space-between;
    padding: .55rem 0;
}

.outsourcing-questions .col-12:last-child .yesno-question[b-8realnb68w] {
    border-bottom: 0;
}

.yesno-label[b-8realnb68w] {
    flex: 1 1 22rem;
    font-weight: 500;
}

/* Fixed width so both options line up down the column rather than sitting
   wherever the question text happens to end. */
.yesno-options[b-8realnb68w] {
    display: flex;
    flex: 0 0 auto;
    gap: 1.25rem;
    min-width: 9rem;
}

.yesno-options .form-check[b-8realnb68w] {
    margin: 0;
}

/* Wraps a single-form tab so one `disabled` turns every control inside it off
   for a read-only user. A fieldset carries browser default border, padding and
   an intrinsic min-width that breaks flex children, so all three are cleared -
   the element is a permission boundary, not a visual one. */
.wizard-fieldset[b-8realnb68w] {
    border: 0;
    margin: 0;
    min-width: 0;
    padding: 0;
}

/* Disabled controls grey themselves out; the labels around them do not, which
   left the tab looking editable. Applied only when the fieldset is disabled, so
   an ordinary editor sees no change. */
.wizard-fieldset[disabled] .form-label[b-8realnb68w],
.wizard-fieldset[disabled] .form-check-label[b-8realnb68w],
.wizard-fieldset[disabled] .form-text[b-8realnb68w] {
    color: #64748b;
}

/* Shared footer nav rendered on every tab (Previous | Save Draft | Save & Continue). */
.wizard-footer[b-8realnb68w] {
    align-items: center;
    border-top: 1px solid #e2e8f0;
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin-top: 1.75rem;
    padding-top: 1.1rem;
}

.wizard-footer-right[b-8realnb68w] {
    display: flex;
    gap: .5rem;
    margin-left: auto;
}

.wizard-footer .btn[b-8realnb68w] {
    min-width: 9.5rem;
}

/* In-section action row (e.g. Add Provider, Add Budget Line). */
.form-actions[b-8realnb68w] {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin: 1rem 0 .5rem;
}

@media (max-width: 640px) {
    .wizard-footer-right[b-8realnb68w] {
        margin-left: 0;
        width: 100%;
    }

    .wizard-footer .btn[b-8realnb68w] {
        flex: 1 1 auto;
    }
}

.section-title[b-8realnb68w] {
    color: #0b2e63;
    font-size: 1.15rem;
    font-weight: 900;
    margin: 1.75rem 0 .25rem;
}

/* Scrollable checkbox list for the cascading multiselects. */
.checkset[b-8realnb68w] {
    border: 1px solid #d7e0ea;
    border-radius: 6px;
    max-height: 12rem;
    overflow-y: auto;
    padding: .5rem .65rem;
}

.checkset .form-check[b-8realnb68w] {
    display: block;
    margin-bottom: .15rem;
}

/* One ALN/CSFA code row: code input + primary flag + remove. */
.entry-row[b-8realnb68w] {
    align-items: center;
    display: flex;
    gap: .5rem;
    margin-bottom: .4rem;
}

.entry-row .form-control[b-8realnb68w] {
    max-width: 14rem;
}

.primary-flag[b-8realnb68w] {
    color: #526272;
    font-size: .85rem;
    white-space: nowrap;
}

/* Provider tab: PALM search box (magnifier) + scrollable results. */
.search-box[b-8realnb68w] {
    position: relative;
}

.search-box .fa-magnifying-glass[b-8realnb68w] {
    color: #94a3b8;
    left: .75rem;
    pointer-events: none;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}

.search-box .form-control[b-8realnb68w] {
    padding-left: 2.1rem;
}

/* PALM results table: frame, sticky header, striping and hover all come from
   the shared .data-table-wrap.is-scrollable / .data-table / .custom-table-header
   styling in site.css. Only the row-selection behaviour is specific here. */
.palm-table[b-8realnb68w] {
    font-size: .9rem;
}

/* Clickable rows: pointer + hover highlight. */
.palm-row[b-8realnb68w] {
    cursor: pointer;
}

.palm-row:hover td[b-8realnb68w] {
    background: #eef4fb;
}

/* Selected row: stronger fill + navy accent bar on the left. */
.palm-row.is-selected td[b-8realnb68w] {
    background: #dcebff;
    box-shadow: inset 3px 0 0 #0b2e63;
}

/* Status pill in the Status column. */
.palm-badge[b-8realnb68w] {
    font-size: .72rem;
    font-weight: 700;
    padding: .3em .6em;
}

.palm-badge.is-active[b-8realnb68w] {
    background: #dcfce7;
    color: #166534;
}

.palm-badge.is-other[b-8realnb68w] {
    background: #eef1f5;
    color: #475467;
}

/* ---- Budget tab ---- */
.budget-totals[b-8realnb68w] {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-bottom: .5rem;
}

.budget-total-card[b-8realnb68w] {
    background: #f0f6ff;
    border: 1px solid #cfe0f5;
    border-radius: 10px;
    display: flex;
    flex-direction: column;
    gap: .25rem;
    padding: .85rem 1rem;
}

.budget-total-label[b-8realnb68w] {
    color: #64748b;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
}

.budget-total-value[b-8realnb68w] {
    color: #0b2e63;
    font-size: 1.45rem;
    font-weight: 800;
}

.budget-subhead[b-8realnb68w] {
    color: #0b2e63;
    font-size: .95rem;
    font-weight: 800;
    margin: 1.1rem 0 .35rem;
}

.budget-form-actions[b-8realnb68w] {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin: 1rem 0 .5rem;
}

.section-subnote[b-8realnb68w] {
    color: #64748b;
    font-size: .82rem;
    font-weight: 400;
}

@media (max-width: 800px) {
    .budget-totals[b-8realnb68w] {
        grid-template-columns: 1fr;
    }
}

/* "Selected from PALM" summary card shown above the provider form. */
.palm-info[b-8realnb68w] {
    background: #f0f6ff;
    border: 1px solid #cfe0f5;
    border-radius: 8px;
    margin-bottom: 1rem;
    padding: .75rem 1rem;
}

.palm-info-title[b-8realnb68w] {
    color: #146c43;
    font-weight: 700;
    margin-bottom: .5rem;
}

.palm-info-title .fa-circle-check[b-8realnb68w] {
    margin-right: .35rem;
}

/* Full-detail panel under the modal results table. */
.palm-detail[b-8realnb68w] {
    background: #f8fafc;
    border: 1px solid #d7e0ea;
    border-radius: 8px;
    margin-top: .9rem;
    padding: .85rem 1rem;
}

.palm-detail-head[b-8realnb68w] {
    color: #0b2e63;
    font-weight: 800;
    margin-bottom: .6rem;
}

.palm-detail-head .fa-building[b-8realnb68w] {
    margin-right: .4rem;
}

/* Shared label/value grid for the info card and detail panel. */
.palm-info-grid[b-8realnb68w] {
    display: grid;
    gap: .35rem .75rem;
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

.palm-info-grid > div[b-8realnb68w] {
    font-size: .92rem;
    min-width: 0;
    overflow-wrap: anywhere;
}

.palm-info-grid > div.palm-span-2[b-8realnb68w] {
    grid-column: span 2;
}

.palm-info-grid > div > span[b-8realnb68w] {
    color: #64748b;
    display: block;
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .02em;
    text-transform: uppercase;
}

@media (max-width: 700px) {
    .palm-info-grid[b-8realnb68w] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .palm-info-grid > div.palm-span-2[b-8realnb68w] {
        grid-column: span 2;
    }
}

@media (max-width: 800px) {
    .wizard-draft[b-8realnb68w] {
        margin-left: 0;
    }

    /* Icons/numbers only — labels would force a very wide scroll strip. */
    .wizard-tab .tab-label[b-8realnb68w] {
        display: none;
    }

    .wizard-tab.active .tab-label[b-8realnb68w] {
        display: inline;
    }
}
/* /Pages/Contracts/ContractList.razor.rz.scp.css */
/* ---- Card shell ---- */
.list-card[b-inevns7d3n] {
    background: #ffffff;
    border: 1px solid #d7e0ea;
    border-radius: 10px;
    box-shadow: 0 8px 20px rgba(15, 40, 64, .08);
    overflow: hidden;
}

.list-card-header[b-inevns7d3n] {
    align-items: center;
    background: linear-gradient(180deg, #eef4fb, #e6eefa);
    border-bottom: 1px solid #d7e0ea;
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    justify-content: space-between;
    padding: 1rem 1.25rem;
}

.list-card-header h2[b-inevns7d3n] {
    color: #0b2e63;
    font-size: 1.3rem;
    font-weight: 900;
    margin: 0;
}

.list-card-header h2 .fa-folder-open[b-inevns7d3n] {
    color: #15588e;
    margin-right: .5rem;
}

/* ---- Toolbar (filters + search) ---- */
.list-toolbar[b-inevns7d3n] {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: .6rem;
    padding: 1rem 1.25rem;
}

.list-toolbar .form-select[b-inevns7d3n] {
    max-width: 15rem;
}

.search-box[b-inevns7d3n] {
    flex: 1 1 16rem;
    position: relative;
}

.search-box .fa-magnifying-glass[b-inevns7d3n] {
    color: #94a3b8;
    left: .8rem;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}

.search-box .form-control[b-inevns7d3n] {
    padding-left: 2.2rem;
}

/* Table, row actions and footer now come from the shared data-grid
   styling in wwwroot/css/site.css (.data-table / .custom-table-header /
   .btn-grid / .grid-footer) so every grid in the app matches. */

/* Placeholder standing in for the delete button on rows that cannot be deleted,
   so every Open button in the column lines up. It carries .btn-grid as well, so
   it occupies exactly the real button's box and needs no width of its own.

   Scoped to this component on purpose: the other grids (Reports, and the row
   Edit buttons in the wizard) have a single action and want it centred, so a
   reserved second slot there would push it off-centre for no reason. */
.btn-grid-spacer[b-inevns7d3n] {
    visibility: hidden;
}

.rows-select[b-inevns7d3n] {
    width: auto;
}

/* ---- Two values in one cell ----
   Manager over who last touched it, contract type over program. Nine columns
   were already as many as fit; stacking the pairs adds the two new values
   without widening the grid, and the second line is set small and grey so a row
   still scans as one line of information rather than two. */
.cell-stack[b-inevns7d3n] {
    display: flex;
    flex-direction: column;
    line-height: 1.25;
    min-width: 0;
}

/* Nothing to show yet. Same grey as the Amount column's own empty state, so a
   blank cell reads the same way wherever it appears in the grid. */
.cell-none[b-inevns7d3n] {
    color: #94a3b8;
}

.cell-sub[b-inevns7d3n] {
    color: #64748b;
    font-size: .74rem;
    /* These are account names and program names - both long, and neither worth
       wrapping a row taller for. */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /Pages/DetailReport.razor.rz.scp.css */
/* Contract Detail Report (legacy CARS Rept1).

   Blazor CSS isolation scopes these to this component only, so the .rpt-*
   classes in Reports.razor.css do not reach here and are restated as .dr-*.
   Matched to that file deliberately so the two report screens read as the same
   application rather than two different ones. */

/* ---- Card shell ---- */
.dr-card[b-fgqqafpjcx] {
    background: #ffffff;
    border: 1px solid #d7e0ea;
    border-radius: 10px;
    box-shadow: 0 8px 20px rgba(15, 40, 64, .08);
    overflow: hidden;
}

.dr-card + .dr-card[b-fgqqafpjcx] {
    margin-top: 1.25rem;
}

.dr-card-header[b-fgqqafpjcx] {
    align-items: center;
    background: linear-gradient(180deg, #eef4fb, #e6eefa);
    border-bottom: 1px solid #d7e0ea;
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    justify-content: space-between;
    padding: .9rem 1.25rem;
}

.dr-card-header h3[b-fgqqafpjcx] {
    color: #0b2e63;
    font-size: 1.15rem;
    font-weight: 900;
    margin: 0;
}

.dr-card-header h3 i[b-fgqqafpjcx] {
    color: #15588e;
    margin-right: .5rem;
}

.dr-card-note[b-fgqqafpjcx] {
    color: #526272;
    font-size: .85rem;
    margin: 0;
}

/* Results header keeps the count under the title and the export button right. */
.dr-results-header .dr-count[b-fgqqafpjcx] {
    display: block;
    margin-top: .15rem;
}

/* ---- Criteria form ---- */
.dr-criteria[b-fgqqafpjcx] {
    padding: 1.1rem 1.25rem;
}

.dr-criteria .form-label[b-fgqqafpjcx] {
    color: #64748b;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    margin-bottom: .2rem;
    text-transform: uppercase;
}

/* The two "normally excluded" switches. Set apart from the filters above
   because they change what the totals mean, not merely which rows match. */
.dr-includes[b-fgqqafpjcx] {
    align-items: center;
    background: #f8fbfe;
    border: 1px solid #e3ecf5;
    border-radius: 8px;
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    margin-top: 1.1rem;
    padding: .6rem .9rem;
}

.dr-includes-label[b-fgqqafpjcx] {
    color: #64748b;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
}

.dr-includes .form-check-label[b-fgqqafpjcx] {
    color: #43566b;
    font-size: .9rem;
    font-weight: 600;
}

.dr-hint[b-fgqqafpjcx] {
    color: #94a3b8;
    cursor: help;
    font-size: .78rem;
    margin-left: .15rem;
}

.dr-criteria-footer[b-fgqqafpjcx] {
    align-items: center;
    border-top: 1px solid #eef2f7;
    display: flex;
    flex-wrap: wrap;
    gap: 1.25rem;
    margin-top: 1.1rem;
    padding-top: .9rem;
}

.dr-buttons[b-fgqqafpjcx] {
    display: flex;
    gap: .5rem;
    margin-left: auto;
}

.dr-buttons .btn[b-fgqqafpjcx] {
    min-width: 7.5rem;
}

/* ---- Results ---- */
.dr-count[b-fgqqafpjcx] {
    color: #43566b;
    font-size: .88rem;
    font-weight: 700;
}

.dr-count strong[b-fgqqafpjcx] {
    color: #0b2e63;
}

/* No .rows-select rule here: the pager footer is the shared TablePager component
   and CSS isolation scopes its markup to TablePager.razor.css, so a copy of that
   rule in this file would never match anything. */

/* States plainly what the default filter removed, so a total that looks low is
   explained on the page rather than becoming a support question. */
.dr-exclusion-note[b-fgqqafpjcx] {
    background: #fffbeb;
    border-bottom: 1px solid #fde68a;
    color: #78543a;
    font-size: .84rem;
    margin: 0;
    padding: .55rem 1.25rem;
}

.dr-exclusion-note i[b-fgqqafpjcx] {
    color: #b28038;
    margin-right: .35rem;
}

/* 17 columns will not fit a laptop screen; scroll the table, never the page. */
.dr-scroll[b-fgqqafpjcx] {
    overflow-x: auto;
}

/* The mirror horizontal scrollbar above the table. Its inner div is a spacer
   sized by scroll-sync.js to the table's real width, which is what gives the
   bar the same travel as the one underneath. */
.dr-scroll-top[b-fgqqafpjcx] {
    overflow-x: auto;
    overflow-y: hidden;
}

.dr-scroll-top-inner[b-fgqqafpjcx] {
    height: 1px;
}

/* Always visible, rather than the thin overlay bar macOS and some Windows
   settings fade out. A scrollbar nobody can see is not an improvement on no
   scrollbar at all. */
.dr-scroll-top[b-fgqqafpjcx]::-webkit-scrollbar {
    height: 11px;
}

.dr-scroll-top[b-fgqqafpjcx]::-webkit-scrollbar-track {
    background: #f1f5f9;
    border-radius: 6px;
}

.dr-scroll-top[b-fgqqafpjcx]::-webkit-scrollbar-thumb {
    background: #b6c2cf;
    border-radius: 6px;
}

.dr-scroll-top[b-fgqqafpjcx]::-webkit-scrollbar-thumb:hover {
    background: #93a3b4;
}

.dr-scroll-top[b-fgqqafpjcx] {
    scrollbar-color: #b6c2cf #f1f5f9;
    scrollbar-width: thin;
}

/* Count beside the Program label, so a narrowed filter is obvious without
   reading down a five-row list box. */
.dr-filter-count[b-fgqqafpjcx] {
    background: #dce6f1;
    border-radius: 10px;
    color: #1f4e79;
    font-size: .72rem;
    font-weight: 600;
    margin-left: .4rem;
    padding: .05rem .45rem;
}

.dr-multiselect[b-fgqqafpjcx] {
    min-height: 7.5rem;
}

.dr-table[b-fgqqafpjcx] {
    font-size: .86rem;
    min-width: 1500px;
}

.dr-table thead th[b-fgqqafpjcx] {
    white-space: nowrap;
}

/* Procurement method and contract type are long sentences in this data - capped
   so one row cannot push the table to several times the height of its neighbours. */
.dr-wrap[b-fgqqafpjcx] {
    max-width: 15rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Marks a program that came from CARS and is no longer offered. Deliberately
   quiet - it appears on ~450 of 510 rows, so anything louder would read as an
   error state rather than a note about the classification scheme. */
.dr-retired[b-fgqqafpjcx] {
    background: #eef2f7;
    border-radius: 999px;
    color: #64748b;
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .02em;
    margin-left: .35rem;
    padding: .1rem .4rem;
    text-transform: uppercase;
    vertical-align: middle;
}

/* Amended amount differs from the original. */
.dr-changed[b-fgqqafpjcx] {
    color: #0b2e63;
    font-weight: 700;
}

/* Amended end date differs from the original — flagged in the End column. */
.dr-amended[b-fgqqafpjcx] {
    color: #94a3b8;
    font-size: .78rem;
    margin-left: .3rem;
}

/* Prompt shown before the report is first run. */
.dr-prompt[b-fgqqafpjcx] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 10px;
    color: #526272;
    margin-top: 1.25rem;
    padding: 2.25rem 1.5rem;
    text-align: center;
}

.dr-prompt i[b-fgqqafpjcx] {
    color: #94a3b8;
    display: block;
    font-size: 1.6rem;
    margin-bottom: .5rem;
}

@media (max-width: 640px) {
    .dr-buttons[b-fgqqafpjcx] {
        margin-left: 0;
        width: 100%;
    }

    .dr-buttons .btn[b-fgqqafpjcx] {
        flex: 1 1 auto;
    }
}
/* /Pages/Documents.razor.rz.scp.css */
/* The card shell, toolbar and search box match Contracts on purpose - this is
   the same kind of screen and should not look like a different application.
   The table, row actions and footer come from the shared data-grid styling in
   wwwroot/css/site.css (.data-table / .custom-table-header / .btn-grid /
   .grid-footer), so nothing here restates them. */

.list-card[b-uws17om8x4] {
    background: #ffffff;
    border: 1px solid #d7e0ea;
    border-radius: 10px;
    box-shadow: 0 8px 20px rgba(15, 40, 64, .08);
    overflow: hidden;
}

.list-card-header[b-uws17om8x4] {
    align-items: center;
    background: linear-gradient(180deg, #eef4fb, #e6eefa);
    border-bottom: 1px solid #d7e0ea;
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    justify-content: space-between;
    padding: 1rem 1.25rem;
}

.list-card-header h2[b-uws17om8x4] {
    color: #0b2e63;
    font-size: 1.3rem;
    font-weight: 900;
    margin: 0;
}

.list-card-header h2 .fa-file-pdf[b-uws17om8x4] {
    color: #15588e;
    margin-right: .5rem;
}

/* How much is in the repository, said once in the header rather than left for
   the reader to work out from the pager. */
.doc-count[b-uws17om8x4] {
    color: #43566b;
    font-size: .88rem;
}

.list-toolbar[b-uws17om8x4] {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: .6rem;
    padding: 1rem 1.25rem;
}

.search-box[b-uws17om8x4] {
    flex: 1 1 22rem;
    position: relative;
}

.search-box .fa-magnifying-glass[b-uws17om8x4] {
    color: #94a3b8;
    left: .8rem;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}

.search-box .form-control[b-uws17om8x4] {
    padding-left: 2.2rem;
}

.rows-select[b-uws17om8x4] {
    width: auto;
}
/* /Pages/Index.razor.rz.scp.css */
/* Dashboard page chrome.

   Chart styling lives with the components that own it — Shared/DonutChart and
   Shared/BarList — because Blazor scoped CSS only reaches elements the owning
   component's Razor markup emits. Keeping chart rules here would not style them.

   The colour system carries the meaning the dashboard is built around:
       amber -> Intake, work in flight
       navy  -> Publish, the record of truth
   Those two families never mix, so a glance tells you which schema you are
   looking at. */

.dash[b-5at0jjrojf] {
    display: grid;
    gap: 1.25rem;
}

/* ---- KPI strip ---- */
.kpi-row[b-5at0jjrojf] {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(4, minmax(0, 1fr));
}

.kpi[b-5at0jjrojf] {
    background: #fff;
    border: 1px solid #d7e0ea;
    border-left: 4px solid #0b2e63;
    border-radius: 10px;
    box-shadow: 0 6px 16px rgba(15, 40, 64, .07);
    display: flex;
    flex-direction: column;
    gap: .15rem;
    padding: 1rem 1.15rem;
}

.kpi.is-intake[b-5at0jjrojf]    { border-left-color: #b7791f; }
.kpi.is-attention[b-5at0jjrojf] { border-left-color: #c1362f; }

.kpi-label[b-5at0jjrojf] {
    color: #64748b;
    font-size: .72rem;
    font-weight: 800;
    letter-spacing: .05em;
    text-transform: uppercase;
}

.kpi-value[b-5at0jjrojf] {
    color: #0b2e63;
    font-size: 2rem;
    font-weight: 900;
    letter-spacing: -.02em;
    line-height: 1.1;
}

.kpi.is-intake .kpi-value[b-5at0jjrojf]    { color: #8a5b12; }
.kpi.is-attention .kpi-value[b-5at0jjrojf] { color: #a02b25; }

.kpi-note[b-5at0jjrojf] {
    color: #64748b;
    font-size: .8rem;
}

.kpi-note strong[b-5at0jjrojf] { color: #43566b; }

/* ---- Panels ---- */
.panel-row[b-5at0jjrojf] {
    display: grid;
    gap: 1.25rem;
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.panel[b-5at0jjrojf] {
    background: #fff;
    border: 1px solid #d7e0ea;
    border-radius: 10px;
    box-shadow: 0 6px 16px rgba(15, 40, 64, .07);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.panel-head[b-5at0jjrojf] {
    align-items: baseline;
    background: linear-gradient(180deg, #eef4fb, #e6eefa);
    border-bottom: 1px solid #d7e0ea;
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    justify-content: space-between;
    padding: .8rem 1.15rem;
}

/* The Intake panel wears the amber header so the split is unmissable. */
.panel.is-intake .panel-head[b-5at0jjrojf] {
    background: linear-gradient(180deg, #fdf6e7, #faedd3);
    border-bottom-color: #e8d3a8;
}

.panel-head h3[b-5at0jjrojf] {
    color: #0b2e63;
    font-size: 1.02rem;
    font-weight: 900;
    margin: 0;
}

.panel.is-intake .panel-head h3[b-5at0jjrojf] { color: #8a5b12; }

.panel-tag[b-5at0jjrojf] {
    color: #64748b;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
}

.panel-body[b-5at0jjrojf] { padding: 1.15rem; }

.panel-note[b-5at0jjrojf] {
    color: #64748b;
    font-size: .8rem;
    margin: .9rem 0 0;
}

/* ---- Fiscal-year columns ---- */
.columns[b-5at0jjrojf] {
    align-items: end;
    display: flex;
    gap: .45rem;
    height: 11rem;
    padding-top: .5rem;
}

.column[b-5at0jjrojf] {
    align-items: center;
    display: flex;
    flex: 1 1 0;
    flex-direction: column;
    gap: .3rem;
    height: 100%;
    justify-content: flex-end;
    min-width: 0;
}

.column-bar[b-5at0jjrojf] {
    background: linear-gradient(180deg, #2f6fb3, #0b2e63);
    border-radius: 4px 4px 0 0;
    min-height: 2px;
    width: 100%;
}

.column.is-peak .column-bar[b-5at0jjrojf] { background: linear-gradient(180deg, #1f9d55, #14653a); }

.column-count[b-5at0jjrojf] {
    color: #0b2e63;
    font-size: .74rem;
    font-variant-numeric: tabular-nums;
    font-weight: 800;
}

.column-label[b-5at0jjrojf] {
    color: #64748b;
    font-size: .7rem;
    font-weight: 700;
    white-space: nowrap;
}

/* ---- Empty state ---- */
.dash-empty[b-5at0jjrojf] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 8px;
    color: #526272;
    padding: 1.5rem;
    text-align: center;
}

@media (max-width: 1200px) {
    .kpi-row[b-5at0jjrojf] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 900px) {
    .panel-row[b-5at0jjrojf] { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
    .kpi-row[b-5at0jjrojf] { grid-template-columns: 1fr; }
}
/* /Pages/PublishedContracts/PublishedContractView.razor.rz.scp.css */
/* Read-only published-contract view.

   Blazor CSS isolation means the wizard styling in ContractEdit.razor.css does
   NOT reach this component, so the shared look (navy #0b2e63 headings, the
   raised white panel, the tab strip) is restated here rather than borrowed.
   Kept visually consistent with the intake wizard on purpose: the same contract
   should read the same way whether you are viewing it or editing it. */

/* ---- Header card ---- */
.pcv-header[b-pcqeyizkki] {
    background: linear-gradient(180deg, #eef4fb, #e6eefa);
    border: 1px solid #d7e0ea;
    border-radius: 10px 10px 0 0;
    padding: 1.1rem 1.25rem;
}

.pcv-eyebrow[b-pcqeyizkki] {
    align-items: center;
    color: #64748b;
    display: flex;
    flex-wrap: wrap;
    font-size: .74rem;
    font-weight: 700;
    gap: .5rem;
    letter-spacing: .05em;
    margin: 0 0 .2rem;
    text-transform: uppercase;
}

.pcv-code[b-pcqeyizkki] {
    color: #0b2e63;
    font-size: 1.55rem;
    font-weight: 900;
    line-height: 1.15;
    margin: 0;
}

.pcv-subtitle[b-pcqeyizkki] {
    color: #43566b;
    font-size: .98rem;
    font-weight: 600;
    margin: .1rem 0 0;
}

/* Small pills in the eyebrow row (CARS origin, status). */
.pcv-chip[b-pcqeyizkki] {
    align-items: center;
    background: #ffffff;
    border: 1px solid #cfe0f5;
    border-radius: 999px;
    color: #15588e;
    display: inline-flex;
    font-size: .72rem;
    font-weight: 700;
    gap: .3rem;
    letter-spacing: .02em;
    padding: .18rem .6rem;
    text-transform: none;
}

.pcv-chip.is-active[b-pcqeyizkki] {
    background: #dcfce7;
    border-color: #b7e4c7;
    color: #166534;
}

.pcv-chip.is-closed[b-pcqeyizkki] {
    background: #eef1f5;
    border-color: #dde3ea;
    color: #475467;
}

.pcv-chip.is-ended[b-pcqeyizkki] {
    background: #fdecea;
    border-color: #f5c6c2;
    color: #a02b25;
}

.pcv-actions[b-pcqeyizkki] {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin-top: .85rem;
}

/* ---- Key figures strip ---- */
.pcv-summary[b-pcqeyizkki] {
    background: #f8fbff;
    border: 1px solid #d7e0ea;
    border-top: 0;
    display: grid;
    gap: 1px;
    /* Three since the Coverage tile was removed. This has to match the number
       of tiles: a 4-column track holding 3 leaves a quarter-width gap on the
       right, which reads as a missing value rather than as spare space. */
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

.pcv-summary > div[b-pcqeyizkki] {
    background: #f8fbff;
    padding: .8rem 1.25rem;
}

.pcv-summary-label[b-pcqeyizkki] {
    color: #64748b;
    display: block;
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
}

.pcv-summary-value[b-pcqeyizkki] {
    color: #0b2e63;
    display: block;
    font-size: 1.2rem;
    font-weight: 800;
    margin-top: .1rem;
    overflow-wrap: anywhere;
}

.pcv-summary-note[b-pcqeyizkki] {
    color: #64748b;
    display: block;
    font-size: .76rem;
}

/* ---- Tab strip ---- */
.pcv-tabs[b-pcqeyizkki] {
    border-bottom: 2px solid #d7e0ea;
    display: flex;
    gap: .25rem;
    margin-top: 1rem;
    overflow-x: auto;
    scrollbar-width: thin;
}

.pcv-tab[b-pcqeyizkki] {
    align-items: center;
    background: transparent;
    border: 1px solid transparent;
    border-bottom: 0;
    border-radius: 8px 8px 0 0;
    color: #43566b;
    cursor: pointer;
    display: inline-flex;
    flex: 0 0 auto;
    font-size: .92rem;
    font-weight: 600;
    gap: .45rem;
    margin-bottom: -2px;
    padding: .65rem .95rem;
    white-space: nowrap;
}

.pcv-tab:hover[b-pcqeyizkki] {
    background: #eef4fb;
    color: #0b2e63;
}

.pcv-tab.active[b-pcqeyizkki] {
    background: #fff;
    border-color: #d7e0ea;
    color: #0b2e63;
    font-weight: 800;
}

.pcv-tab i[b-pcqeyizkki] {
    color: #94a3b8;
}

.pcv-tab.active i[b-pcqeyizkki] {
    color: #15588e;
}

/* Count of rows behind a tab, so empty sections are obvious before clicking. */
.pcv-tab-count[b-pcqeyizkki] {
    background: #e2e8f0;
    border-radius: 999px;
    color: #526272;
    font-size: .7rem;
    font-weight: 800;
    padding: .05rem .4rem;
}

.pcv-tab.active .pcv-tab-count[b-pcqeyizkki] {
    background: #0b2e63;
    color: #fff;
}

/* ---- Panel ---- */
.pcv-body[b-pcqeyizkki] {
    background: #ffffff;
    border: 1px solid #d7e0ea;
    border-radius: 0 8px 8px 8px;
    box-shadow: 0 8px 20px rgba(15, 40, 64, .08);
    padding: 1.35rem 1.5rem;
}

.pcv-section[b-pcqeyizkki] {
    color: #0b2e63;
    font-size: 1.02rem;
    font-weight: 900;
    letter-spacing: .01em;
    margin: 1.6rem 0 .6rem;
}

.pcv-section:first-child[b-pcqeyizkki] {
    margin-top: 0;
}

/* ---- Field grid ----
   Only the container lives here. Each cell is a FieldCell component that styles
   itself, including its own grid-column span, so no ::deep rule is needed to
   reach across the component boundary — and, more importantly, the label/value
   styling actually applies. Scoped CSS written here would never match markup
   emitted by another component. */
.pcv-grid[b-pcqeyizkki] {
    display: grid;
    gap: .6rem;
    grid-template-columns: repeat(4, minmax(0, 1fr));
}

/* ---- Deliverable description cell ----
   Descriptions average 222 characters and reach 999. They are shown in full -
   nothing is hidden behind a toggle - but set smaller and in a softer grey so
   they stop competing with Service type and Price, and the cell is bounded so a
   long paragraph cannot crowd the other columns out of the table. */
.deliv-desc-cell[b-pcqeyizkki] {
    max-width: 34rem;
    min-width: 18rem;
}

.deliv-desc[b-pcqeyizkki] {
    color: #43566b;
    font-size: .82rem;
    line-height: 1.45;
}

/* Performance metrics and financial consequences, under the description.
   Set quieter than the description and given a small caption, so a cell can
   carry three pieces of prose without them running together - each of these
   reaches 1,000 characters. */
.deliv-sub[b-pcqeyizkki] {
    border-top: 1px solid #e6ebf0;
    color: #5b6b7d;
    font-size: .78rem;
    line-height: 1.4;
    margin-top: .4rem;
    padding-top: .35rem;
}

.deliv-sub-label[b-pcqeyizkki] {
    color: #7b8794;
    display: block;
    font-size: .68rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
}

/* Money in these grids uses the global .cell-amount pill from site.css, so the
   budget, deliverable and amendment columns match the contracts list and the
   reports search rather than each carrying their own copy. */

/* Heading above a free-text block. */
.pcv-prose-label[b-pcqeyizkki] {
    color: #64748b;
    font-size: .68rem;
    font-weight: 800;
    letter-spacing: .06em;
    margin: 1.4rem 0 .35rem;
    text-transform: uppercase;
}

/* Long free text (executive summary, descriptions). */
.pcv-prose[b-pcqeyizkki] {
    background: #f8fafc;
    border: 1px solid #e8eef5;
    border-radius: 8px;
    color: #1f2937;
    font-size: .94rem;
    margin: 0;
    padding: .7rem .85rem;
    white-space: pre-wrap;
}

/* ---- Document upload ----
   Only the Contract Administrator sees this, sitting above the document list on
   the Documents tab. Boxed and tinted so it reads as an action area rather than
   another row of the table below it. */
.doc-upload[b-pcqeyizkki] {
    align-items: center;
    background: #f8fbff;
    border: 1px dashed #c7d7e7;
    border-radius: 8px;
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    margin-bottom: 1rem;
    padding: .85rem 1rem;
}

.doc-upload .form-control[b-pcqeyizkki] {
    flex: 1 1 22rem;
    max-width: 32rem;
}

.doc-upload-note[b-pcqeyizkki] {
    color: #64748b;
    font-size: .82rem;
}

/* ---- Empty state ---- */
.pcv-empty[b-pcqeyizkki] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 8px;
    color: #526272;
    font-size: .92rem;
    margin: .25rem 0;
    padding: 1.75rem 1.25rem;
    text-align: center;
}

/* ---- Tables inside tabs ---- */
.pcv-tablehead[b-pcqeyizkki] {
    align-items: baseline;
    display: flex;
    gap: .5rem;
    justify-content: space-between;
    margin: 1.5rem 0 .5rem;
}

.pcv-tablehead:first-child[b-pcqeyizkki] {
    margin-top: 0;
}

.pcv-tablehead h4[b-pcqeyizkki] {
    color: #0b2e63;
    font-size: 1.02rem;
    font-weight: 900;
    margin: 0;
}

.pcv-tablenote[b-pcqeyizkki] {
    color: #64748b;
    font-size: .82rem;
}

/* Keeps the line count and the export button together on the right. Without
   the wrapper they become two more children of a space-between row, which
   pushes the count into the middle of the header. Wraps on a narrow screen so
   the button drops under the count rather than off the edge. */
.pcv-tablehead-actions[b-pcqeyizkki] {
    align-items: baseline;
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    justify-content: flex-end;
}

@media (max-width: 1100px) {
    .pcv-grid[b-pcqeyizkki] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .pcv-summary[b-pcqeyizkki] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* No span override needed below here: a span-2 cell in a 2-column grid already
   fills the row, and grid clamps a span wider than the track count. */
@media (max-width: 800px) {
    .pcv-grid[b-pcqeyizkki] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 560px) {
    .pcv-grid[b-pcqeyizkki] { grid-template-columns: 1fr; }
    .pcv-summary[b-pcqeyizkki] { grid-template-columns: 1fr; }
    .pcv-tab .pcv-tab-label[b-pcqeyizkki] { display: none; }
    .pcv-tab.active .pcv-tab-label[b-pcqeyizkki] { display: inline; }
}
/* /Pages/Reports.razor.rz.scp.css */
/* Reports search.

   .list-card / .list-toolbar / .rows-select live in ContractList.razor.css,
   which is CSS-isolated to that component, so the card shell is restated here.
   Matched to it deliberately so the two grids look like the same application. */

/* ---- Card shell ---- */
.rpt-card[b-atxlafe5bu] {
    background: #ffffff;
    border: 1px solid #d7e0ea;
    border-radius: 10px;
    box-shadow: 0 8px 20px rgba(15, 40, 64, .08);
    overflow: hidden;
}

.rpt-card + .rpt-card[b-atxlafe5bu] {
    margin-top: 1.25rem;
}

.rpt-card-header[b-atxlafe5bu] {
    align-items: center;
    background: linear-gradient(180deg, #eef4fb, #e6eefa);
    border-bottom: 1px solid #d7e0ea;
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    justify-content: space-between;
    padding: .9rem 1.25rem;
}

.rpt-card-header h3[b-atxlafe5bu] {
    color: #0b2e63;
    font-size: 1.15rem;
    font-weight: 900;
    margin: 0;
}

.rpt-card-header h3 i[b-atxlafe5bu] {
    color: #15588e;
    margin-right: .5rem;
}

.rpt-card-note[b-atxlafe5bu] {
    color: #526272;
    font-size: .85rem;
    margin: 0;
}

/* ---- Criteria form ---- */
.rpt-criteria[b-atxlafe5bu] {
    padding: 1.1rem 1.25rem;
}

.rpt-criteria .form-label[b-atxlafe5bu] {
    color: #64748b;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    margin-bottom: .2rem;
    text-transform: uppercase;
}

/* Bottom row: the two scope radios on the left, buttons pushed right. */
.rpt-criteria-footer[b-atxlafe5bu] {
    align-items: center;
    border-top: 1px solid #eef2f7;
    display: flex;
    flex-wrap: wrap;
    gap: 1.25rem;
    margin-top: 1.1rem;
    padding-top: .9rem;
}

.rpt-scope[b-atxlafe5bu] {
    display: flex;
    gap: 1.25rem;
}

.rpt-scope .form-check-label[b-atxlafe5bu] {
    color: #43566b;
    font-size: .9rem;
    font-weight: 600;
}

.rpt-buttons[b-atxlafe5bu] {
    display: flex;
    gap: .5rem;
    margin-left: auto;
}

.rpt-buttons .btn[b-atxlafe5bu] {
    min-width: 7.5rem;
}

/* ---- Results ---- */
.rpt-count[b-atxlafe5bu] {
    color: #43566b;
    font-size: .88rem;
    font-weight: 700;
}

.rpt-count strong[b-atxlafe5bu] {
    color: #0b2e63;
}

.rows-select[b-atxlafe5bu] {
    width: auto;
}

/* Amended end date differs from the original — flagged in the End column. */
.rpt-amended[b-atxlafe5bu] {
    color: #94a3b8;
    font-size: .78rem;
    margin-left: .3rem;
}

/* Prompt shown before the first search. */
.rpt-prompt[b-atxlafe5bu] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 10px;
    color: #526272;
    margin-top: 1.25rem;
    padding: 2.25rem 1.5rem;
    text-align: center;
}

.rpt-prompt i[b-atxlafe5bu] {
    color: #94a3b8;
    display: block;
    font-size: 1.6rem;
    margin-bottom: .5rem;
}

@media (max-width: 640px) {
    .rpt-buttons[b-atxlafe5bu] {
        margin-left: 0;
        width: 100%;
    }

    .rpt-buttons .btn[b-atxlafe5bu] {
        flex: 1 1 auto;
    }
}
/* /Shared/AccessDeniedPanel.razor.rz.scp.css */
/* Access denied / sign-in required.

   The panel shell (.auth-message-panel, .auth-message-actions) is global in
   site.css and shared with /auth-error, so only the parts specific to this
   panel live here. */

h2 i[b-8of6ku9uip] {
    color: #15588e;
    margin-right: .4rem;
}

/* Identity block on the denied case. This is the part a support desk actually
   needs, so it is laid out as labelled facts rather than buried in prose. */
.auth-who[b-8of6ku9uip] {
    background: #f8fbfe;
    border: 1px solid #e3ecf5;
    border-radius: 6px;
    margin: 0 0 1rem;
    padding: .75rem .9rem;
}

.auth-who > div[b-8of6ku9uip] {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    padding: .2rem 0;
}

.auth-who > div + div[b-8of6ku9uip] {
    border-top: 1px solid #eef2f7;
}

.auth-who span[b-8of6ku9uip] {
    color: #64748b;
    flex: 0 0 9rem;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
}

.auth-who code[b-8of6ku9uip],
.auth-attempted code[b-8of6ku9uip] {
    background: #eef2f7;
    border-radius: 4px;
    color: #0b2e63;
    font-size: .85rem;
    padding: .1rem .35rem;
}

.auth-attempted[b-8of6ku9uip] {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
}

.auth-attempted span[b-8of6ku9uip] {
    color: #64748b;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
}

/* The "what to do next" line carries the actual remedy, so it is set apart
   from the explanation above it. */
.auth-next[b-8of6ku9uip] {
    background: #fffbeb;
    border-left: 4px solid #d9a441;
    color: #6b4f22 !important;
    padding: .7rem .85rem;
}

@media (max-width: 560px) {
    .auth-who span[b-8of6ku9uip] {
        flex: 1 0 100%;
    }
}
/* /Shared/BarList.razor.rz.scp.css */
.bars[b-3lqgx3tgy5] {
    display: grid;
    gap: .7rem;
}

.bar-row[b-3lqgx3tgy5] {
    display: grid;
    gap: .2rem;
}

.bar-head[b-3lqgx3tgy5] {
    align-items: baseline;
    display: flex;
    gap: .5rem;
    justify-content: space-between;
}

.bar-label[b-3lqgx3tgy5] {
    color: #43566b;
    font-size: .88rem;
    font-weight: 600;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bar-figures[b-3lqgx3tgy5] {
    color: #64748b;
    flex: 0 0 auto;
    font-size: .82rem;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.bar-figures strong[b-3lqgx3tgy5] { color: #0b2e63; }

.bar-track[b-3lqgx3tgy5] {
    background: #eef2f7;
    border-radius: 999px;
    height: .55rem;
    overflow: hidden;
}

.bar-fill[b-3lqgx3tgy5] {
    border-radius: 999px;
    display: block;
    height: 100%;
    min-width: 2px;
}

.bars-empty[b-3lqgx3tgy5] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 8px;
    color: #526272;
    margin: 0;
    padding: 1.5rem;
    text-align: center;
}
/* /Shared/DonutChart.razor.rz.scp.css */
.donut-wrap[b-3cwhcps3y5] {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 1.5rem;
}

/* Explicit box: an SVG with no width defaults to filling its container. */
.donut[b-3cwhcps3y5] {
    flex: 0 0 auto;
    height: 9.5rem;
    width: 9.5rem;
}

.donut-track[b-3cwhcps3y5] {
    fill: transparent;
    stroke: #eef2f7;
    stroke-width: 6;
}

.donut-seg[b-3cwhcps3y5] {
    fill: transparent;
    stroke-width: 6;
}

/* Sized in viewBox units (the box is 42 wide), not pixels. */
.donut-value[b-3cwhcps3y5] {
    dominant-baseline: middle;
    fill: #0b2e63;
    font-size: 7px;
    font-weight: 800;
}

.donut-caption[b-3cwhcps3y5] {
    fill: #64748b;
    font-size: 2.6px;
    font-weight: 700;
    letter-spacing: .1em;
}

.legend[b-3cwhcps3y5] {
    display: grid;
    flex: 1 1 9rem;
    gap: .4rem;
    min-width: 0;
}

.legend-item[b-3cwhcps3y5] {
    align-items: center;
    display: grid;
    gap: .55rem;
    grid-template-columns: .7rem 1fr auto;
}

.legend-dot[b-3cwhcps3y5] {
    border-radius: 3px;
    height: .7rem;
    width: .7rem;
}

.legend-label[b-3cwhcps3y5] {
    color: #43566b;
    font-size: .88rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.legend-value[b-3cwhcps3y5] {
    color: #0b2e63;
    font-size: .88rem;
    font-variant-numeric: tabular-nums;
    font-weight: 800;
}

.donut-empty[b-3cwhcps3y5] {
    background: #f8fbfe;
    border: 1px dashed #c7d7e7;
    border-radius: 8px;
    color: #526272;
    margin: 0;
    padding: 1.5rem;
    text-align: center;
}

@media (max-width: 560px) {
    .donut-wrap[b-3cwhcps3y5] { justify-content: center; }
}
/* /Shared/FieldCell.razor.rz.scp.css */
/* A label/value tile. The label sits above the value in its own type style, so
   the two can never be mistaken for one run of text — the failure that prompted
   this component. */

.field[b-j9hqnnv07b] {
    background: #f8fafc;
    border: 1px solid #eef2f7;
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    gap: .25rem;
    min-width: 0;
    padding: .55rem .75rem;
    transition: background .12s ease, border-color .12s ease;
}

.field:hover[b-j9hqnnv07b] {
    background: #f2f7fd;
    border-color: #d7e0ea;
}

/* Empty fields recede rather than competing with real data. */
.field.is-blank[b-j9hqnnv07b] {
    background: #fcfdfe;
    border-style: dashed;
}

/* Span classes live here, not on the parent, so the component owns its own
   layout and the grid container needs no ::deep rules to reach across. */
.field.span-2[b-j9hqnnv07b] { grid-column: span 2; }
.field.span-4[b-j9hqnnv07b] { grid-column: 1 / -1; }

.field-label[b-j9hqnnv07b] {
    align-items: center;
    color: #64748b;
    display: flex;
    font-size: .68rem;
    font-weight: 800;
    gap: .3rem;
    letter-spacing: .06em;
    line-height: 1.2;
    text-transform: uppercase;
}

.field-label.has-hint[b-j9hqnnv07b] {
    cursor: help;
}

.field-label i[b-j9hqnnv07b] {
    color: #94a3b8;
    font-size: .7rem;
}

.field-value[b-j9hqnnv07b] {
    color: #1f2937;
    font-size: .95rem;
    font-weight: 600;
    line-height: 1.35;
    overflow-wrap: anywhere;
}

.field-value.is-money[b-j9hqnnv07b] {
    color: #0b2e63;
    font-variant-numeric: tabular-nums;
    font-weight: 800;
}

.field-value.is-empty[b-j9hqnnv07b] {
    color: #b6c0cc;
    font-weight: 500;
}

/* ---- Pills ---- */
.field-pill[b-j9hqnnv07b] {
    align-self: flex-start;
    border-radius: 999px;
    font-size: .8rem;
    font-weight: 700;
    line-height: 1.2;
    padding: .28rem .7rem;
    white-space: nowrap;
}

.field-pill.neutral[b-j9hqnnv07b] { background: #e8eef6; color: #33507a; }
.field-pill.good[b-j9hqnnv07b]    { background: #dcfce7; color: #14653a; }
.field-pill.warn[b-j9hqnnv07b]    { background: #fdf0d5; color: #8a5b12; }
.field-pill.bad[b-j9hqnnv07b]     { background: #fdecea; color: #a02b25; }
/* /Shared/MainLayout.razor.rz.scp.css */
/* ============================================================
   DCF standard app shell: thin top strip, header (logo | title |
   user), collapsible left side nav + main region, then footer.
   Ported from the shared DCF layout in docs/design_changes.
   ============================================================ */

.dcf-top-strip[b-3w8581213k] {
    background-color: #115ba4;
    min-height: 8px;
}

.app-header[b-3w8581213k] {
    align-items: center;
    background: #fff;
    border-bottom: 1px solid #d9e2ef;
    display: grid;
    gap: 1rem;
    grid-template-columns: minmax(190px, 280px) 1fr minmax(160px, 280px);
    min-height: 72px;
    padding: .75rem 1rem;
}

.dcf-logo[b-3w8581213k] {
    display: block;
    height: auto;
    max-height: 58px;
    max-width: 260px;
    width: auto;
}

.app-header-title[b-3w8581213k] {
    align-items: center;
    color: #06366d;
    display: flex;
    gap: .75rem;
    justify-content: center;
}

.app-header-title h1[b-3w8581213k] {
    font-size: clamp(1.35rem, 1.85vw, 2.05rem);
    font-weight: 900;
    line-height: 1.05;
    margin: 0;
    text-align: center;
}

.app-header-user[b-3w8581213k] {
    display: flex;
    justify-content: flex-end;
}

.user-summary[b-3w8581213k] {
    align-items: center;
    color: #0e477f;
    display: grid;
    gap: .1rem .5rem;
    grid-template-columns: auto 1fr;
}

.user-avatar[b-3w8581213k] {
    align-items: center;
    background: #15588e;
    border-radius: 50%;
    color: #fff;
    display: inline-flex;
    grid-row: span 2;
    height: 2.2rem;
    justify-content: center;
    width: 2.2rem;
}

.user-name[b-3w8581213k] {
    font-weight: 700;
}

.user-role[b-3w8581213k] {
    background: #e9f5ee;
    border: 1px solid #b6e2c5;
    border-radius: 999px;
    color: #176b34;
    font-size: .78rem;
    font-weight: 700;
    padding: .08rem .55rem;
    width: fit-content;
}

/* ---- Shell: side nav + main ---- */
.app-shell[b-3w8581213k] {
    display: grid;
    min-height: 60vh;
}

.app-shell.is-signed-in.nav-expanded[b-3w8581213k] {
    grid-template-columns: 250px minmax(0, 1fr);
}

.app-shell.is-signed-in.nav-collapsed[b-3w8581213k] {
    grid-template-columns: 72px minmax(0, 1fr);
}

.app-shell.is-public.nav-expanded[b-3w8581213k] {
    grid-template-columns: 202px minmax(0, 1fr);
}

.app-shell.is-public.nav-collapsed[b-3w8581213k] {
    grid-template-columns: 72px minmax(0, 1fr);
}

.side-nav[b-3w8581213k] {
    background: #155f95;
    color: #fff;
    min-height: 100%;
    padding: .65rem .5rem;
}

.nav-toggle[b-3w8581213k] {
    align-items: center;
    background: transparent;
    border: 0;
    color: #fff;
    display: inline-flex;
    height: 2rem;
    justify-content: center;
    margin-bottom: .5rem;
    width: 2.5rem;
}

.side-nav-list[b-3w8581213k] {
    display: grid;
    gap: .25rem;
    list-style: none;
    margin: 0;
    padding: 0;
}

.side-nav-item[b-3w8581213k] {
    align-items: center;
    background: transparent;
    border: 1px solid transparent;
    border-radius: 6px;
    color: #fff;
    display: flex;
    gap: .75rem;
    min-height: 2.75rem;
    padding: .65rem .75rem;
    text-align: left;
    width: 100%;
}

/* Selected is the filled state, and nothing else is allowed to look like it.
   These are buttons, so a click leaves focus behind; when :focus shared the
   selected fill, clicking a nav item painted it as the current page before the
   server had answered - and if the circuit had dropped, the server never
   answered at all. Two items then sat highlighted, the page had not moved, and
   nothing on screen said why. Focus now reads as a ring, which is also the
   accessible behaviour the old outline:none was suppressing. */
.side-nav-item.selected[b-3w8581213k] {
    background: #1f77b7;
    border-color: #5eb2f2;
}

.side-nav-item:hover[b-3w8581213k] {
    background: #17567f;
    border-color: #3f8fc4;
}

.side-nav-item:focus-visible[b-3w8581213k] {
    border-color: #9ad2ff;
    box-shadow: 0 0 0 2px #9ad2ff;
    outline: none;
}

.side-nav-icon[b-3w8581213k] {
    text-align: center;
    width: 1.1rem;
}

/* The ErrorBoundary panel that replaces a page which threw. Sized and coloured
   as a page-level notice rather than a toast: it is standing in for the whole
   page, and the point is that the surrounding shell still works. */
.page-error[b-3w8581213k] {
    background: #fff7f7;
    border: 1px solid #efc0c0;
    border-left: 4px solid #b32121;
    border-radius: 6px;
    margin: 0 auto;
    max-width: 48rem;
    padding: 1.25rem 1.5rem;
}

.page-error h2[b-3w8581213k] {
    color: #7c1c1c;
    font-size: 1.2rem;
    font-weight: 900;
    margin: 0 0 .5rem;
}

.page-error h2 .fa-triangle-exclamation[b-3w8581213k] {
    margin-right: .5rem;
}

.page-error p[b-3w8581213k] {
    color: #526272;
    margin: 0 0 .75rem;
}

/* Monospaced because it is an exception type and message, not prose, and it
   wraps rather than scrolls so nothing is hidden off the edge. */
.page-error-detail[b-3w8581213k] {
    background: #ffffff;
    border: 1px solid #e4d2d2;
    border-radius: 4px;
    color: #7c1c1c;
    font-family: Consolas, "Cascadia Mono", ui-monospace, monospace;
    font-size: .84rem;
    overflow-wrap: anywhere;
    padding: .6rem .75rem;
}

.page-error-actions[b-3w8581213k] {
    display: flex;
    gap: .6rem;
    margin-top: 1rem;
}

.app-main[b-3w8581213k] {
    background: #f7f9fc;
    min-width: 0;
    padding: 1.5rem 2rem 3rem;
}

/* The pre-login hero (rendered by App.razor) cancels this padding with matching
   negative margins in site.css — keep the two in sync if you change it. */

@media (max-width: 800px) {
    /* Logo + user on the top row, title centered underneath. */
    .app-header[b-3w8581213k] {
        grid-template-columns: auto 1fr;
        row-gap: .5rem;
    }

    .app-header-logo[b-3w8581213k] {
        grid-row: 1;
        grid-column: 1;
    }

    .dcf-logo[b-3w8581213k] {
        max-height: 40px;
    }

    .app-header-user[b-3w8581213k] {
        grid-row: 1;
        grid-column: 2;
    }

    .app-header-title[b-3w8581213k] {
        grid-row: 2;
        grid-column: 1 / -1;
    }

    /* Collapse the rail to icons only on small screens. */
    .app-shell.is-signed-in.nav-expanded[b-3w8581213k],
    .app-shell.is-public.nav-expanded[b-3w8581213k],
    .app-shell.is-signed-in.nav-collapsed[b-3w8581213k],
    .app-shell.is-public.nav-collapsed[b-3w8581213k] {
        grid-template-columns: 64px minmax(0, 1fr);
    }

    .side-nav-item span[b-3w8581213k] {
        display: none;
    }

    .app-main[b-3w8581213k] {
        padding: 1rem;
    }
}
/* /Shared/TablePager.razor.rz.scp.css */
/* .grid-footer, .grid-count and .pagination come from site.css / bootstrap and
   are global, so every paged grid in the app matches. Only the pieces specific
   to this control live here. */

.pager-controls[b-at7uz1s45y] {
    align-items: center;
    display: flex;
    gap: .5rem;
}

.rows-select[b-at7uz1s45y] {
    width: auto;
}

/* The page indicator is a label, not a link — bootstrap's .active .page-link
   styles it as a pressed button, which invites a click that does nothing. */
.page-item.active .page-link[b-at7uz1s45y] {
    cursor: default;
    font-variant-numeric: tabular-nums;
}

.page-link[b-at7uz1s45y] {
    line-height: 1.4;
}
