@import '_content/Boab.Works.Ui/Boab.Works.Ui.gqx88657uo.bundle.scp.css';

/* /Components/Layout/KioskLayout.razor.rz.scp.css */
/* Full-viewport wall-screen frame (owner ruling 2026-07-06: the board must FILL the TV).
   A fixed-height flex column with hidden overflow, so the board (its only flex child)
   takes the whole screen and its two panels scroll internally — the page itself never
   scrolls, and nothing sits below the fold on a 16:9 wall screen. */
.boab-kiosk-shell[b-ftf7rwe8nu] {
    height: 100vh;
    height: 100dvh;
    padding: 0.9rem 1.2rem;
    background: var(--mud-palette-background);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-sizing: border-box;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* Layout chrome now lives in the MudBlazor shell (MainLayout.razor) + wwwroot/app.css.
   Only the Blazor error UI styling remains here (wired by blazor.web.js). */

#blazor-error-ui[b-ik9s6i2ntd] {
    color-scheme: light only;
    background: lightyellow;
    /* Explicit dark text — the bar sits OUTSIDE the MudBlazor themed surface, so without this
       it inherits the theme's (light) text colour and reads as invisible on lightyellow. */
    color: #212529;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-ik9s6i2ntd] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/NavMenu.razor.rz.scp.css */
/* NavMenu is now a MudNavMenu (NavMenu.razor). Its brand active/hover styling lives in
   wwwroot/app.css under .boab-nav (global, so it can reach the MudBlazor-rendered DOM). */
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-htovsfcqgi],
.components-reconnect-repeated-attempt-visible[b-htovsfcqgi],
.components-reconnect-failed-visible[b-htovsfcqgi],
.components-pause-visible[b-htovsfcqgi],
.components-resume-failed-visible[b-htovsfcqgi],
.components-rejoining-animation[b-htovsfcqgi] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-retrying[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-failed[b-htovsfcqgi],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-htovsfcqgi] {
    display: block;
}


#components-reconnect-modal[b-htovsfcqgi] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-htovsfcqgi 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-htovsfcqgi 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-htovsfcqgi 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-htovsfcqgi]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-htovsfcqgi 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-htovsfcqgi {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-htovsfcqgi {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-htovsfcqgi {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-htovsfcqgi] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-htovsfcqgi] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-htovsfcqgi] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-htovsfcqgi] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-htovsfcqgi] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-htovsfcqgi] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-htovsfcqgi] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-htovsfcqgi 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-htovsfcqgi] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-htovsfcqgi {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/AccessDenied.razor.rz.scp.css */
/* ── /access-denied — friendly denial card (palette tokens only, dark-mode-safe —
      the KpiView.razor.css law). Mud child components need ::deep from the scoped
      wrapper div. ── */

.boab-denied-wrap[b-2c4h4anz0c] {
    display: flex;
    justify-content: center;
    padding: 3rem 1rem;
}

.boab-denied-wrap[b-2c4h4anz0c]  .boab-denied-card {
    max-width: 30rem;
    text-align: center;
    padding: 2rem 2.25rem;
}

.boab-denied-wrap[b-2c4h4anz0c]  .boab-denied-icon {
    font-size: 2.6rem;
    width: 2.6rem;
    height: 2.6rem;
    color: var(--mud-palette-text-secondary);
    margin-bottom: 0.75rem;
}

.boab-denied-wrap[b-2c4h4anz0c]  .boab-denied-body {
    color: var(--mud-palette-text-secondary);
}
/* /Components/Pages/ClaimSheetList.razor.rz.scp.css */
/* Scoped styles for ClaimSheetList — the inline re-issue sub-form rendered in the
   Actions cell needs enough room for the reason input + buttons, and should read as a
   distinct chunk against the grid row. */
.boab-reissue-form[b-envw0eqiqo] {
    min-width: 320px;
    text-align: left;
}
/* /Components/Pages/DayBoardKiosk.razor.rz.scp.css */
.kiosk-gate[b-rtsaca5dva] {
    min-height: 70vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    gap: 0.5rem;
}
/* /Components/Pages/KioskScreens.razor.rz.scp.css */
.kiosk-url[b-bp95xymlzv] {
    word-break: break-all;
    user-select: all;
    background: var(--mud-palette-background-gray);
    padding: 0.25rem 0.5rem;
    border-radius: 6px;
}
/* /Components/Pages/PersonPicker.razor.rz.scp.css */
/* Required marker: red star appended to the Mud label, mirroring SectionLayoutEntry's
   .boab-field.boab-required rule. PersonPicker owns its own copy so hosts OUTSIDE
   SectionLayoutEntry (e.g. EquipmentClaimGrid's Installer/Supervisor) still show the
   star — the SectionLayoutEntry rule is component-scoped and can't reach them. Inside
   SectionLayoutEntry both rules target the same ::after with the same content, so the
   star renders once, never doubled. Red is a screen affordance, not sheet ink. */
.boab-required[b-7h6aubnzk6]  .mud-input-label::after {
    content: " *";
    color: var(--mud-palette-error);
}
/* /Components/Pages/ProcessingWorkspace.razor.rz.scp.css */
/* Phase 6b — the unified Disposition panel. The panel's left-accent rules
   (.boab-disposition base + --warning/--info/--error) live GLOBALLY in
   wwwroot/css/boab-design.css (Tier 2, beside .boab-panel): those classes sit on a
   MudPaper, and a child component's ROOT element never receives this component's
   scope attribute, so scoped selectors targeting it can never match (same reasoning
   as the promotion note in SectionLayoutEntry.razor.css). Only rules whose RIGHTMOST
   element is authored in ProcessingWorkspace.razor's own markup belong here. */
.boab-disposition .form-text .text-danger[b-j4m4dnc0oq] {
    font-weight: 600;
}
/* /Components/Pages/Reporting.razor.rz.scp.css */
/* ── Daily Brief (plan §4.1) — phone-first cards + chips, house light/airy language.
   Plain-element classes only (scoped CSS never reaches child MudBlazor internals; icon
   colour/layout ride MudBlazor's own Color param + parent flex). One-thumb rules (§6):
   ≥44px tap targets, full rows are targets, no horizontal page scroll. ── */

/* freshness ribbon — the tap-through to /reporting/health */
.boab-brief-ribbon[b-q64im8op0g] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.55rem 0.85rem;
    border-radius: var(--sheet-radius, 8px);
    color: var(--boab-panel-ink, inherit);
    text-decoration: none;
    font-variant-numeric: tabular-nums;
    min-height: 44px;
}

.boab-brief-ribbon:hover[b-q64im8op0g] {
    text-decoration: none;
    outline: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
}

/* ── empty state ── */
.boab-brief-empty[b-q64im8op0g] {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 1.5rem 1rem;
    color: var(--boab-panel-muted, var(--mud-palette-text-secondary));
}

/* ── project strip ── */
.boab-brief-project[b-q64im8op0g] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 1.5rem;
    font-variant-numeric: tabular-nums;
}

/* ── suggested areas (Wave 2-D) — a subtle add/dismiss chip row under the cards ── */
.boab-brief-suggest[b-q64im8op0g] {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-top: 0.85rem;
    padding-top: 0.7rem;
    border-top: 1px dashed var(--boab-panel-border, var(--mud-palette-lines-default));
}

.boab-brief-suggest-chips[b-q64im8op0g] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

/* one suggestion = an [+ area] add button hugging a [✕] dismiss, sharing a pill outline */
.boab-brief-suggest-chip[b-q64im8op0g] {
    display: inline-flex;
    align-items: stretch;
    border: 1px solid var(--boab-panel-border, var(--mud-palette-lines-default));
    border-radius: 999px;
    overflow: hidden;
    background: var(--boab-panel-tint, rgba(0, 0, 0, 0.03));
}

.boab-brief-suggest-add[b-q64im8op0g],
.boab-brief-suggest-dismiss[b-q64im8op0g] {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    background: none;
    border: none;
    cursor: pointer;
    color: var(--mud-palette-text-primary);
    font: inherit;
    min-height: 32px;
    padding: 0.2rem 0.6rem;
    transition: background-color 0.12s ease;
}

.boab-brief-suggest-add[b-q64im8op0g] { font-weight: 600; color: var(--mud-palette-primary); }
.boab-brief-suggest-add:hover[b-q64im8op0g] { background-color: var(--boab-panel-tint, rgba(0, 0, 0, 0.08)); }

.boab-brief-suggest-dismiss[b-q64im8op0g] {
    color: var(--mud-palette-text-secondary);
    padding-inline: 0.35rem;
    border-left: 1px solid var(--boab-panel-border, var(--mud-palette-lines-default));
}

.boab-brief-suggest-dismiss:hover[b-q64im8op0g] { background-color: var(--boab-panel-tint, rgba(0, 0, 0, 0.08)); }
/* /Components/Pages/ReportingAreas.razor.rz.scp.css */
/* /reporting/areas is now a SIGNPOST (owner ruling 2026-07-05: per-person area assignment
   moved to /users). The old two-column admin layout + selectable-user-row styles moved with
   the editor into Components/Reporting/UserAreaAssignment.razor.css; this page uses only the
   global .boab-panel* chrome, so it carries no local styles. */
/* /Components/Pages/ReportingConnections.razor.rz.scp.css */
/* ── Connections — the integration board (isolated CSS; colours route through the
      --mud-palette / --boab-panel tokens only, so the page is dark-mode-safe by
      construction — the ReportingRoc.razor.css law). ── */

.boab-conn-intro[b-ei9to73sc3] {
    max-width: 60rem;
}

.boab-conn-summary[b-ei9to73sc3] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 1.25rem;
    font-size: 0.85rem;
    color: var(--mud-palette-text-secondary);
}

.boab-conn-summary-flag[b-ei9to73sc3] {
    color: var(--mud-palette-warning-text);
    font-weight: 600;
}

.boab-conn-grid[b-ei9to73sc3] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: 1rem;
    align-items: start;
}

.boab-conn-card[b-ei9to73sc3] {
    border: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    border-radius: var(--sheet-radius, 8px);
    background-color: var(--boab-panel-bg, var(--mud-palette-surface));
    padding: 0.85rem 1rem;
    page-break-inside: avoid;
    break-inside: avoid;
}

/* a sync past its own window is flagged on the card edge too */
.boab-conn-card--flag[b-ei9to73sc3] {
    border-color: var(--mud-palette-warning);
}

.boab-conn-head[b-ei9to73sc3] {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.boab-conn-name[b-ei9to73sc3] {
    font-weight: 700;
}

.boab-conn-code[b-ei9to73sc3] {
    font-size: 0.75rem;
    letter-spacing: 0.03em;
    color: var(--mud-palette-text-secondary);
}

.boab-conn-chips[b-ei9to73sc3] {
    display: flex;
    gap: 0.3rem;
    flex-wrap: wrap;
    margin: 0.5rem 0 0.7rem;
}

.boab-conn-chip[b-ei9to73sc3] {
    font-size: 0.72rem;
    font-weight: 600;
    padding: 0.1rem 0.5rem;
    border-radius: 999px;
    border: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    color: var(--mud-palette-text-secondary);
    white-space: nowrap;
}

/* the two kinds read apart without a second colour system */
.boab-conn-chip--api[b-ei9to73sc3] {
    border-color: var(--mud-palette-primary);
    color: var(--mud-palette-primary);
}

.boab-conn-chip--sync[b-ei9to73sc3] {
    border-color: var(--mud-palette-secondary);
    color: var(--mud-palette-secondary);
}

.boab-conn-facts[b-ei9to73sc3] {
    display: grid;
    grid-template-columns: 7.5rem 1fr;
    gap: 0.3rem 0.6rem;
    margin: 0;
    font-size: 0.85rem;
}

.boab-conn-facts dt[b-ei9to73sc3] {
    color: var(--mud-palette-text-secondary);
    font-weight: 500;
}

.boab-conn-facts dd[b-ei9to73sc3] {
    margin: 0;
}

/* the precise half of a stamp (absolute time, result note) rides under the plain phrase */
.boab-conn-abs[b-ei9to73sc3] {
    display: block;
    font-size: 0.75rem;
    color: var(--mud-palette-text-secondary);
}

@media print {
    .boab-conn-grid[b-ei9to73sc3] {
        grid-template-columns: repeat(2, 1fr);
    }

    .boab-conn-card[b-ei9to73sc3] {
        page-break-inside: avoid;
    }
}
/* /Components/Pages/ReportingHealth.razor.rz.scp.css */
/* ── Signal-threshold tuning panel (plan §5 + §10 decision #6). Phone-first: one knob
   per row, label + help on the left, the inline numeric field on the right; stacks on
   narrow screens. House light/airy language. ── */
.boab-thresholds[b-zj9zc94ujq] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    max-width: 760px;
}

.boab-threshold-row[b-zj9zc94ujq] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.5rem 0.15rem;
    border-bottom: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
}

.boab-threshold-row:last-child[b-zj9zc94ujq] { border-bottom: none; }

.boab-threshold-label[b-zj9zc94ujq] { min-width: 0; }

.boab-threshold-name[b-zj9zc94ujq] { font-weight: 600; }

.boab-threshold-help[b-zj9zc94ujq] {
    font-size: 0.8rem;
    color: var(--mud-palette-text-secondary);
    overflow-wrap: anywhere;
}

.boab-threshold-field[b-zj9zc94ujq] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.15rem;
    flex: 0 0 auto;
}

.boab-threshold-stamp[b-zj9zc94ujq] {
    font-size: 0.72rem;
    color: var(--mud-palette-text-secondary);
    font-variant-numeric: tabular-nums;
}

@media (max-width: 32rem) {
    .boab-threshold-row[b-zj9zc94ujq] {
        flex-direction: column;
        align-items: stretch;
        gap: 0.4rem;
    }

    .boab-threshold-field[b-zj9zc94ujq] { align-items: flex-start; }
}
/* /Components/Pages/ReportingLedger.razor.rz.scp.css */
.boab-rpt-scroll[b-vk58vk6cjy] {
    overflow-x: auto;
    /* A1: a BOUNDED viewport so <Virtualize> has a real scroll root. overflow-x:auto already forces
       overflow-y to auto (CSS spec: visible+auto → auto), but with no height cap the container just
       grows to the full 868k-px content and nothing is ever culled — the page scrolls, not the box,
       so virtualization no-ops. A max-height turns this into a genuine scroll region that pans
       horizontally AND scrolls vertically, which is what lets Virtualize keep the DOM small on a
       tablet. The PAGE still never scrolls horizontally — only this container pans. */
    max-height: 78vh;
}

.boab-rpt-ledger[b-vk58vk6cjy] {
    width: 100%;
    border-collapse: collapse;
    font-variant-numeric: tabular-nums;
}

/* Sticky header for the bounded scroll region (A1 fallout): without it the column labels scroll away
   inside the capped viewport. Direct-child selector so the nested SPENT detail table's own header is
   untouched. Opaque panel bg so panned/scrolled rows never bleed through; above the body cells. */
.boab-rpt-ledger > thead th[b-vk58vk6cjy] {
    position: sticky;
    top: 0;
    z-index: 2;
    background-color: var(--boab-panel-bg, var(--mud-palette-surface));
}

.boab-rpt-ledger th[b-vk58vk6cjy],
.boab-rpt-ledger td[b-vk58vk6cjy] {
    padding: 0.35rem 0.6rem;
    border-bottom: var(--sheet-inner-rule-w, 1px) solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    white-space: nowrap;
    text-align: left;
}

.boab-rpt-ledger th.num[b-vk58vk6cjy],
.boab-rpt-ledger td.num[b-vk58vk6cjy] {
    text-align: right;
}

.boab-rpt-subtotal td[b-vk58vk6cjy] {
    font-weight: 600;
    color: var(--boab-panel-muted, var(--mud-palette-text-secondary));
    background-color: var(--boab-panel-tint, rgba(0, 0, 0, 0.02));
}

.boab-rpt-foot td[b-vk58vk6cjy] {
    font-weight: 700;
    border-top: 2px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    border-bottom: none;
    position: sticky;
    bottom: 0;
    background-color: var(--boab-panel-bg, var(--mud-palette-surface));
}

.boab-rpt-residual td[b-vk58vk6cjy] {
    font-style: italic;
    color: var(--boab-panel-muted, var(--mud-palette-text-secondary));
}

.boab-rpt-unearned td[b-vk58vk6cjy] {
    color: var(--boab-panel-muted, var(--mud-palette-text-secondary));
}

/* category chip — restrained tint + hairline, semantic accent only (matches the app language) */
.boab-rpt-cat[b-vk58vk6cjy] {
    display: inline-block;
    padding: 0.05rem 0.5rem;
    border-radius: 999px;
    font-size: 0.78rem;
    font-weight: 600;
    border: 1px solid transparent;
}

.cat-direct[b-vk58vk6cjy] { background-color: color-mix(in srgb, var(--mud-palette-primary) 14%, transparent); }
.cat-prelim[b-vk58vk6cjy] { background-color: color-mix(in srgb, var(--mud-palette-info) 16%, transparent); }
.cat-variation[b-vk58vk6cjy] { background-color: color-mix(in srgb, var(--mud-palette-warning) 18%, transparent); }
.cat-wc[b-vk58vk6cjy] { background-color: color-mix(in srgb, var(--mud-palette-text-secondary) 14%, transparent); }
.cat-unclassified[b-vk58vk6cjy] {
    background-color: color-mix(in srgb, var(--mud-palette-error) 16%, transparent);
    color: var(--mud-palette-error-darken, var(--mud-palette-error));
}

/* ── SPENT row expansion (W1-B2): chevron column + nested TimesheetLine detail ── */
.boab-rpt-ledger th.boab-rpt-chev[b-vk58vk6cjy],
.boab-rpt-ledger td.boab-rpt-chev[b-vk58vk6cjy] {
    width: 1%;
    padding-right: 0;
    white-space: nowrap;
}

/* the chevron button sits tight in its cell (throughput-first: one small target, no menu) */
[b-vk58vk6cjy] .boab-rpt-chev-btn {
    padding: 2px;
}

/* the expansion row: a tinted well under its spent line, no bottom rule swallowing the nested table */
.boab-rpt-detail-row > td[b-vk58vk6cjy] {
    background-color: var(--boab-panel-tint, rgba(0, 0, 0, 0.02));
    border-bottom: 2px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    padding: 0.4rem 0.6rem 0.6rem;
    vertical-align: top;
}

/* nested detail table — same tabular language as the ledger, one notch smaller */
.boab-rpt-detail[b-vk58vk6cjy] {
    width: 100%;
    border-collapse: collapse;
    font-variant-numeric: tabular-nums;
    font-size: 0.92em;
}

.boab-rpt-detail th[b-vk58vk6cjy],
.boab-rpt-detail td[b-vk58vk6cjy] {
    padding: 0.25rem 0.5rem;
    border-bottom: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    white-space: nowrap;
    text-align: left;
}

.boab-rpt-detail th.num[b-vk58vk6cjy],
.boab-rpt-detail td.num[b-vk58vk6cjy] {
    text-align: right;
}

.boab-rpt-detail th[b-vk58vk6cjy] {
    font-weight: 600;
    color: var(--boab-panel-muted, var(--mud-palette-text-secondary));
}

.boab-rpt-detail-foot td[b-vk58vk6cjy] {
    font-weight: 700;
    border-top: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    border-bottom: none;
}

/* ── A2: honest column-tier chip ── the pill that reveals the shed columns on a narrow screen.
   Hidden by default (it only makes sense once columns are actually shed); shown inside the
   ≤40rem media query below. Palette-routed for both themes. */
.boab-rpt-colchip[b-vk58vk6cjy] {
    display: none;
    align-items: center;
    gap: 0.25rem;
    padding: 0.25rem 0.65rem;
    border: max(1px, var(--sheet-stroke, 1px)) solid var(--boab-panel-border, var(--mud-palette-lines-default));
    border-radius: 999px;
    background-color: var(--boab-panel-bg, var(--mud-palette-surface));
    color: var(--mud-palette-primary);
    font-size: 0.8rem;
    font-weight: 600;
    line-height: 1.2;
    cursor: pointer;
}

.boab-rpt-colchip:hover[b-vk58vk6cjy] {
    background-color: var(--boab-panel-tint, rgba(0, 0, 0, 0.03));
}

/* narrow viewport: shed the secondary columns (keep the reconciling essentials + foot total), BUT
   surface the chip so the reader knows + can pan them back — .boab-rpt-showall on the scroll wrapper
   overrides the shed columns back to table-cell (no silent truncation, house rule). */
@media (max-width: 40rem) {
    .boab-rpt-hide-narrow[b-vk58vk6cjy] {
        display: none;
    }

    .boab-rpt-showall .boab-rpt-hide-narrow[b-vk58vk6cjy] {
        display: table-cell;
    }

    .boab-rpt-colchip[b-vk58vk6cjy] {
        display: inline-flex;
    }
}

/* ── A4: coarse-pointer hit-target floor. The SPENT chevron button and the column chip both clear
   44px on touch (visual size may stay small — this only grows the tap area). */
@media (pointer: coarse) {
    [b-vk58vk6cjy] .boab-rpt-chev-btn {
        min-width: 44px;
        min-height: 44px;
    }

    .boab-rpt-colchip[b-vk58vk6cjy] {
        min-height: 44px;
    }
}
/* /Components/Pages/ReportingQmr.razor.rz.scp.css */
/* ── as-at framing ribbon (mirrors the suite's ribbon idiom, scoped here) ── */
.boab-qmr-ribbon[b-ke5fgsfhck] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.55rem 0.85rem;
    border-radius: var(--sheet-radius, 8px);
    color: var(--boab-panel-ink, inherit);
    text-decoration: none;
    font-variant-numeric: tabular-nums;
    min-height: 44px;
}

.boab-qmr-ribbon:hover[b-ke5fgsfhck] {
    text-decoration: none;
    outline: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
}

/* ── download link ── */
.boab-qmr-dl[b-ke5fgsfhck] {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    font-weight: 600;
    text-decoration: none;
    color: var(--mud-palette-primary);
}

.boab-qmr-dl:hover[b-ke5fgsfhck] { text-decoration: underline; }

/* ── the wide grid scrolls in ITS OWN container — the page never scrolls horizontally ── */
.boab-rpt-scroll[b-ke5fgsfhck] {
    overflow-x: auto;
}

.boab-qmr-table[b-ke5fgsfhck] {
    width: 100%;
    border-collapse: collapse;
    font-variant-numeric: tabular-nums;
}

.boab-qmr-table th[b-ke5fgsfhck],
.boab-qmr-table td[b-ke5fgsfhck] {
    padding: 0.35rem 0.6rem;
    border-bottom: var(--sheet-inner-rule-w, 1px) solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    white-space: nowrap;
    text-align: left;
}

.boab-qmr-table th.num[b-ke5fgsfhck],
.boab-qmr-table td.num[b-ke5fgsfhck] {
    text-align: right;
}

.boab-qmr-wbs[b-ke5fgsfhck] {
    min-width: 8rem;
    font-weight: 600;
}

/* clickable rows drill to the pivot (the throughput-first row-as-target idiom) */
.boab-rpt-clickable[b-ke5fgsfhck] {
    cursor: pointer;
}

.boab-rpt-clickable:hover[b-ke5fgsfhck] {
    background-color: var(--boab-panel-tint, rgba(0, 0, 0, 0.03));
}

.boab-rpt-clickable:focus-visible[b-ke5fgsfhck] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: -2px;
}

/* sticky foot total — the reconciliation Σ stays visible while the grid scrolls */
.boab-qmr-foot td[b-ke5fgsfhck] {
    font-weight: 700;
    border-top: 2px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    border-bottom: none;
    position: sticky;
    bottom: 0;
    background-color: var(--boab-panel-bg, var(--mud-palette-surface));
}

/* ── print CSS (plan §4.6) — the grid prints clean; drop the interactive chrome ── */
@media print {
    .boab-rpt-scroll[b-ke5fgsfhck] {
        overflow-x: visible;
    }

    .boab-qmr-table[b-ke5fgsfhck] {
        font-size: 0.8rem;
    }

    .boab-qmr-table th[b-ke5fgsfhck],
    .boab-qmr-table td[b-ke5fgsfhck] {
        page-break-inside: avoid;
    }

    .boab-qmr-ribbon[b-ke5fgsfhck] { outline: none; }
}
/* /Components/Pages/ReportingRoc.razor.rz.scp.css */
/* ── Rules of credit — profile cards (isolated CSS; colours route through the
      --mud-palette / --boab-panel tokens only, so the page is dark-mode-safe by
      construction — the KpiView.razor.css law). ── */

.boab-roc-intro[b-aew56ahg16] {
    max-width: 60rem;
}

.boab-roc-grid[b-aew56ahg16] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
    gap: 1rem;
    align-items: start;
}

.boab-roc-card[b-aew56ahg16] {
    border: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    border-radius: var(--sheet-radius, 8px);
    background-color: var(--boab-panel-bg, var(--mud-palette-surface));
    padding: 0.85rem 1rem;
}

/* a profile that does not reconcile to 100% is flagged on the card edge too */
.boab-roc-card--off[b-aew56ahg16] {
    border-color: var(--mud-palette-warning);
}

.boab-roc-card-head[b-aew56ahg16] {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 0.5rem;
    flex-wrap: wrap;
    margin-bottom: 0.6rem;
}

.boab-roc-code[b-aew56ahg16] {
    font-weight: 700;
}

.boab-roc-desc[b-aew56ahg16] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.85rem;
}

.boab-roc-meta[b-aew56ahg16] {
    display: flex;
    gap: 0.3rem;
    flex-wrap: wrap;
}

.boab-roc-pill[b-aew56ahg16] {
    font-size: 0.72rem;
    font-weight: 600;
    padding: 0.1rem 0.5rem;
    border-radius: 999px;
    border: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    color: var(--mud-palette-text-secondary);
    white-space: nowrap;
}

/* ── the weight chain: one 100% rail, a plain-HTML segment per credit step ── */
.boab-roc-chain[b-aew56ahg16] {
    position: relative;
    height: 14px;
    border-radius: 7px;
    overflow: hidden;
    background-color: var(--boab-panel-tint, var(--mud-palette-background-gray));
    margin-bottom: 0.6rem;
}

.boab-roc-chain-seg[b-aew56ahg16] {
    position: absolute;
    top: 0;
    bottom: 0;
    background-color: var(--mud-palette-primary);
    /* a hairline seam between adjoining segments, cut from the card ground */
    box-shadow: inset -1px 0 0 var(--boab-panel-bg, var(--mud-palette-surface));
}

/* ── the steps table ── */
.boab-roc-steps[b-aew56ahg16] {
    width: 100%;
    border-collapse: collapse;
    font-variant-numeric: tabular-nums;
    font-size: 0.85rem;
}

.boab-roc-steps th[b-aew56ahg16],
.boab-roc-steps td[b-aew56ahg16] {
    padding: 0.28rem 0.45rem;
    border-bottom: 1px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    text-align: left;
    vertical-align: middle;
}

.boab-roc-steps th.num[b-aew56ahg16],
.boab-roc-steps td.num[b-aew56ahg16] {
    text-align: right;
    white-space: nowrap;
}

.boab-roc-steps th.bar[b-aew56ahg16],
.boab-roc-steps td.bar[b-aew56ahg16] {
    width: 34%;
}

.boab-roc-actcode[b-aew56ahg16] {
    font-size: 0.72rem;
    color: var(--mud-palette-text-secondary);
    margin-left: 0.25rem;
    letter-spacing: 0.02em;
}

/* the per-step inline bar (width = the step's % credit) */
.boab-roc-bar[b-aew56ahg16] {
    height: 8px;
    border-radius: 4px;
    background-color: var(--mud-palette-primary);
    min-width: 2px;
}

/* the reconciliation foot: Total must read 100% */
.boab-roc-steps tfoot td[b-aew56ahg16] {
    font-weight: 700;
    border-top: 2px solid var(--boab-panel-rule, var(--mud-palette-lines-default));
    border-bottom: none;
}

.boab-roc-flag[b-aew56ahg16] {
    color: var(--mud-palette-warning);
    font-weight: 700;
    font-size: 0.78rem;
}

.boab-roc-empty[b-aew56ahg16] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.85rem;
    padding: 0.3rem 0;
}

/* ── END profiles (terminations): rail + steps PER CABLE END — the engine grain
      (the _S parts pay on the source end, the _D parts on the destination end, the
      shared test half to each; each end's steps sum to 100%). ── */
.boab-roc-endchains[b-aew56ahg16] {
    margin-bottom: 0.6rem;
}

.boab-roc-endchain[b-aew56ahg16] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.boab-roc-endchain + .boab-roc-endchain[b-aew56ahg16] {
    margin-top: 0.3rem;
}

.boab-roc-endchain-label[b-aew56ahg16] {
    flex: 0 0 6.5rem;
    font-size: 0.72rem;
    font-weight: 600;
    color: var(--mud-palette-text-secondary);
    white-space: nowrap;
}

.boab-roc-endchain .boab-roc-chain[b-aew56ahg16] {
    flex: 1;
    margin-bottom: 0;
}

.boab-roc-steps tr.boab-roc-endhead td[b-aew56ahg16] {
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--mud-palette-text-secondary);
    background-color: var(--boab-panel-tint, var(--mud-palette-background-gray));
}

.boab-roc-steps tr.boab-roc-endfoot td[b-aew56ahg16] {
    font-weight: 600;
}

.boab-roc-detail[b-aew56ahg16] {
    font-size: 0.72rem;
    font-style: italic;
    color: var(--mud-palette-text-secondary);
    margin-left: 0.25rem;
}

.boab-roc-endnote[b-aew56ahg16] {
    font-size: 0.75rem;
    color: var(--mud-palette-text-secondary);
    margin-top: 0.45rem;
}

/* ── print (client packs) — cards keep their fills, never split across pages ── */
@media print {
    .boab-roc-grid[b-aew56ahg16] {
        grid-template-columns: 1fr 1fr;
        gap: 0.6rem;
    }

    .boab-roc-card[b-aew56ahg16] {
        page-break-inside: avoid;
        break-inside: avoid;
    }

    .boab-roc-chain-seg[b-aew56ahg16],
    .boab-roc-bar[b-aew56ahg16] {
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
    }
}
/* /Components/Reporting/DayBoardView.razor.rz.scp.css */
/* Day board — coordination surface styles. All sizing lives HERE (the markup
   deliberately carries no percent literals — the atomic-facts guard pins that). */

.db-board[b-s9gnx0rfml] {
    max-width: 1600px;
}

/* Branded masthead: the brand lockup left, the day control right, closed by a
   gum-green rule so the site-facing board reads as BOAB's, not blazor-default.
   The rule + mark colour route through the Mud primary token (gum-green in light,
   the lighter brand green in dark) — no new hex, dark-safe by construction. */
.db-header[b-s9gnx0rfml] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem 1rem;
    padding-bottom: 0.6rem;
    margin-bottom: 1rem;
    border-bottom: 2px solid var(--mud-palette-primary);
}

/* The lockup: cairn mark + title, the same mark-in-primary treatment the field
   shell uses. The title keeps the house heading face (Proxima Nova, from app.css). */
.db-brand[b-s9gnx0rfml] {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    min-width: 0;
}

.db-brand-mark[b-s9gnx0rfml] {
    width: 3rem;
    height: 3rem;
    flex: none;
    color: var(--mud-palette-primary);
}

.db-title[b-s9gnx0rfml] { line-height: 1.1; }

.db-stepper[b-s9gnx0rfml] {
    display: flex;
    align-items: center;
    gap: 0.25rem;
}

.db-stepper-date[b-s9gnx0rfml] {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
}

/* The site's-day summary bar — branded with a gum-green left accent + a faint
   primary wash (the app's disposition-panel language), so the headline reads as
   part of the brand rather than a plain grey box. Text stays ink for distance
   contrast; only the frame carries the colour. */
.db-headline[b-s9gnx0rfml] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.4rem;
    padding: 0.6rem 0.9rem;
    border: 1px solid var(--mud-palette-lines-default);
    border-left: 4px solid var(--mud-palette-primary);
    background: color-mix(in srgb, var(--mud-palette-primary) 4%, transparent);
    border-radius: 10px;
    margin-bottom: 1rem;
    font-size: 1.05rem;
}

.db-headline-stat[b-s9gnx0rfml] { font-weight: 600; }

.db-headline-right[b-s9gnx0rfml] {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.9rem;
}

.db-queries[b-s9gnx0rfml] { font-weight: 600; text-decoration: none; }

.db-freshness[b-s9gnx0rfml] {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    color: var(--mud-palette-text-secondary);
}

.db-paused[b-s9gnx0rfml] { color: var(--mud-palette-warning); }

/* ── day-level aggregate cards (owner ask 2026-07-06): SITE-WIDE manning numbers.
   Positive, neutral surface — never a red/negative treatment (house doctrine). ── */
.db-agg-strip[b-s9gnx0rfml] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 0.75rem;
    margin-bottom: 1rem;
}

.db-agg[b-s9gnx0rfml] {
    border: 1px solid var(--mud-palette-lines-default);
    border-radius: 10px;
    padding: 0.7rem 0.9rem;
    background: color-mix(in srgb, var(--mud-palette-primary) 4%, transparent);
}

.db-agg-label[b-s9gnx0rfml] {
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--mud-palette-text-secondary);
}

.db-agg-value[b-s9gnx0rfml] {
    font-weight: 700;
    font-size: 2rem;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
    margin: 0.15rem 0;
    color: var(--mud-palette-primary); /* on-brand gum-green; near-black contrast on the light tile */
}

.db-agg-unit[b-s9gnx0rfml] {
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--mud-palette-text-secondary);
    margin-left: 0.1rem;
}

.db-agg-sub[b-s9gnx0rfml] {
    font-size: 0.82rem;
    color: var(--mud-palette-text-secondary);
    font-variant-numeric: tabular-nums;
}

.db-panels[b-s9gnx0rfml] {
    display: grid;
    grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
    gap: 1rem;
    align-items: start;
}

@media (max-width: 1100px) {
    .db-panels[b-s9gnx0rfml] { grid-template-columns: minmax(0, 1fr); }
}

/* overlaps — amber conversation, never red fault */
.db-overlaps[b-s9gnx0rfml] { border-left: 4px solid var(--mud-palette-warning); margin-bottom: 1rem; }

.db-overlap-row[b-s9gnx0rfml] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.3rem;
    padding: 0.25rem 0;
}

.db-overlap-names[b-s9gnx0rfml] {
    margin-left: auto;
    color: var(--mud-palette-warning);
    font-weight: 600;
}

.db-overlap-footnote[b-s9gnx0rfml] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.8rem;
    margin-top: 0.4rem;
}

.db-nooverlap[b-s9gnx0rfml] {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    color: var(--mud-palette-text-secondary);
    margin-bottom: 1rem;
}

/* lanes — the morning kanban wall */
.db-lanes[b-s9gnx0rfml] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 1rem;
}

.db-lane-name[b-s9gnx0rfml] { font-weight: 700; }

.db-lane-totals[b-s9gnx0rfml] {
    margin-left: auto;
    color: var(--mud-palette-text-secondary);
    font-size: 0.85rem;
    font-variant-numeric: tabular-nums;
}

.db-lane-mirror[b-s9gnx0rfml] { margin-bottom: 0.5rem; }

.db-area-head[b-s9gnx0rfml] {
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--mud-palette-text-secondary);
    margin: 0.55rem 0 0.2rem;
}

.db-lane-row[b-s9gnx0rfml] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.3rem;
    padding: 0.28rem 0;
    min-height: 2rem;
    border-bottom: 1px dashed var(--mud-palette-lines-default);
}

.db-lane-row:last-child[b-s9gnx0rfml] { border-bottom: none; }

.db-landed[b-s9gnx0rfml] { opacity: 0.85; }

.db-row-check[b-s9gnx0rfml] { display: inline-flex; align-items: center; }

.db-row-tag[b-s9gnx0rfml] { font-weight: 600; text-decoration: none; }

.db-row-hours[b-s9gnx0rfml] {
    font-variant-numeric: tabular-nums;
    color: var(--mud-palette-text-secondary);
}

.db-overlap-chip[b-s9gnx0rfml] {
    background: color-mix(in srgb, var(--mud-palette-warning) 18%, transparent);
    border: 1px solid var(--mud-palette-warning);
    border-radius: 999px;
    padding: 0 0.5rem;
    font-size: 0.75rem;
    white-space: nowrap;
}

/* stream cards */
.db-card[b-s9gnx0rfml] {
    padding: 0.55rem 0;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.db-card:last-of-type[b-s9gnx0rfml] { border-bottom: none; }

.db-card-head[b-s9gnx0rfml] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.3rem;
    font-size: 0.85rem;
    color: var(--mud-palette-text-secondary);
}

.db-card-time[b-s9gnx0rfml] { font-variant-numeric: tabular-nums; }

.db-card-who[b-s9gnx0rfml] { font-weight: 600; }

.db-onboard[b-s9gnx0rfml] {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    margin-left: auto;
    color: var(--mud-palette-success);
    font-size: 0.8rem;
}

.db-card-main[b-s9gnx0rfml] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.3rem;
    font-size: 1rem;
}

.db-card-sub[b-s9gnx0rfml] {
    color: var(--mud-palette-text-secondary);
    font-size: 0.88rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.3rem;
}

.db-batch-row[b-s9gnx0rfml] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.3rem;
    padding: 0.15rem 0 0.15rem 1rem;
    font-size: 0.9rem;
}

.db-expand[b-s9gnx0rfml] { margin-left: 0.4rem; }

.db-photos[b-s9gnx0rfml] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    margin-top: 0.35rem;
}

.db-photo[b-s9gnx0rfml] {
    height: 72px;
    width: 72px;
    object-fit: cover;
    border-radius: 8px;
    border: 1px solid var(--mud-palette-lines-default);
}

.db-photo-name[b-s9gnx0rfml] {
    font-size: 0.8rem;
    color: var(--mud-palette-text-secondary);
}

.db-stream-footnote[b-s9gnx0rfml] {
    margin-top: 0.6rem;
    font-size: 0.78rem;
    color: var(--mud-palette-text-secondary);
}

.db-empty[b-s9gnx0rfml] {
    display: flex;
    gap: 0.5rem;
    align-items: baseline;
    color: var(--mud-palette-text-secondary);
    padding: 0.5rem 0;
}

.db-sep[b-s9gnx0rfml] { color: var(--mud-palette-text-secondary); }

.db-quiet[b-s9gnx0rfml] { color: var(--mud-palette-text-secondary); }

/* ── kiosk / wall-screen presentation: distance-readable, no interaction ──
   Fills the viewport (owner ruling 2026-07-06): the board is a full-height flex
   column — header + headline + aggregate strip pinned, and the two panels take the
   rest and scroll INTERNALLY (see the auto-scroll module) so BOTH stay visible and
   the whole board is readable with no interaction. The old panel-swap "auto-cycle"
   (which hid a whole panel every other 30s and read as a vanish) is gone. */
.db-big[b-s9gnx0rfml] {
    font-size: 1.15rem;
    max-width: none;
    width: 100%;
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.db-big .db-header[b-s9gnx0rfml],
.db-big .db-headline[b-s9gnx0rfml],
.db-big .db-agg-strip[b-s9gnx0rfml] { flex: 0 0 auto; }

.db-big .db-panels[b-s9gnx0rfml] {
    flex: 1 1 auto;
    min-height: 0;
    grid-template-rows: minmax(0, 1fr);
    margin-bottom: 0;
}

/* each column fills the row and scrolls its own overflow (the auto-scroll drives it);
   the scrollbar is hidden on the unattended wall screen. */
.db-big .db-plans[b-s9gnx0rfml],
.db-big .db-stream[b-s9gnx0rfml] {
    min-height: 0;
    max-height: 100%;
    overflow-y: auto;
    scrollbar-width: none;
}

.db-big .db-plans[b-s9gnx0rfml]::-webkit-scrollbar,
.db-big .db-stream[b-s9gnx0rfml]::-webkit-scrollbar { width: 0; height: 0; }

.db-big .db-agg-value[b-s9gnx0rfml] { font-size: 2.6rem; }

.db-big .db-agg-label[b-s9gnx0rfml] { font-size: 0.95rem; }

.db-big .db-agg-sub[b-s9gnx0rfml] { font-size: 1rem; }

.db-big .db-headline[b-s9gnx0rfml] { font-size: 1.5rem; padding: 0.9rem 1.2rem; }

/* Wall-screen brand lockup scales up so the cairn mark reads at distance. */
.db-big .db-brand-mark[b-s9gnx0rfml] { width: 4.5rem; height: 4.5rem; }

.db-big .db-card-main[b-s9gnx0rfml] { font-size: 1.35rem; }

.db-big .db-card-head[b-s9gnx0rfml] { font-size: 1.05rem; }

.db-big .db-card-sub[b-s9gnx0rfml] { font-size: 1.05rem; }

.db-big .db-lane-row[b-s9gnx0rfml] { font-size: 1.15rem; min-height: 2.4rem; }

.db-big .db-lane-name[b-s9gnx0rfml] { font-size: 1.25rem; }

.db-big .db-area-head[b-s9gnx0rfml] { font-size: 0.95rem; }

.db-big .db-photo[b-s9gnx0rfml] { height: 110px; width: 110px; }

.db-big .db-overlap-row[b-s9gnx0rfml] { font-size: 1.2rem; }

.db-big .db-stream-footnote[b-s9gnx0rfml] { font-size: 0.95rem; }
/* /Components/Reporting/UserAreaAssignment.razor.rz.scp.css */
/* UserAreaAssignment — the per-user assignment/link editor (relocated from /reporting/areas,
   owner ruling 2026-07-05). Scoped copies of the detail-panel styles the old page carried in
   ReportingAreas.razor.css so the editor reads identically wherever it is hosted (now /users). */

.boab-areas-section[b-il4qwqvlxv] {
    padding: 0.4rem 0 0.9rem;
    border-bottom: 1px dashed var(--boab-panel-border, var(--mud-palette-lines-default));
}

.boab-areas-section:last-child[b-il4qwqvlxv] { border-bottom: none; padding-bottom: 0.2rem; }

.boab-areas-personpicker[b-il4qwqvlxv] { max-width: 460px; }
.boab-areas-addpick[b-il4qwqvlxv] { max-width: 460px; }
/* /Components/Shared/SectionLayoutEntry.razor.rz.scp.css */
/* ============================================================================
   SectionLayoutEntry — STAGE 2: the sheet's panel chrome, on screen.
   STAGE 3 (app-wide unification): the STRUCTURAL sheet classes this component
   renders (.boab-sheet-panel/-caption/-rule/-body, .boab-mini-label, identity /
   grid / rows / checklist / sign-off layout, the narrow-pane media query) were
   PROMOTED verbatim to wwwroot/css/boab-design.css so the whole app shares one
   vocabulary. This scoped file now keeps ONLY the MudBlazor-internal CAPTURE
   CHROME (the ::deep input re-skin) — scoped on purpose, for two reasons:
     1. ::deep reaches the MudBlazor internals INSIDE this component only, so
        the re-skin cannot leak into app-wide Mud inputs;
     2. the scope attribute adds specificity that keeps these state rules ahead
        of MudBlazor.min.css (which loads AFTER everything) — promoting them
        would flip cascade ties back to Mud and shift the APPROVED look.

   Every colour / size still comes from the sheet tokens in
   wwwroot/css/sheet-tokens.css (the ONE mirror of SheetTheme.cs — 1 sheet-pt =
   0.1rem; see that file's header). NO literal colours or sheet dimensions may
   appear in this file except pure screen affordances — if you need a sheet
   value, add/alias it as a token first.

   Cascade note: MudBlazor.min.css loads AFTER the scoped bundle, and these ::deep
   selectors out-specify Mud's own state rules — so every state we care about
   (rest / hover / focus / error / disabled) is set EXPLICITLY below rather than
   left to Mud's cascade. Order inside this file matters: base capture chrome →
   state affordances → comment override → sign-off variant (last).
   ============================================================================ */

/* ============================================================================
   COMPACT SCHEDULED STRIP — pane slimming (owner ruling 2026-07-02). The merged
   Scheduled context renders as ONE borderless dense line of inline label:value
   pairs (no card chrome, no caption bar, no grid, no grey value pills). Pure
   screen affordance: the printed sheet keeps its full Identity + Scheduled
   sections (the PDF projection is untouched).
   ============================================================================ */
.boab-sched-strip[b-fm7sl93jed] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.15rem 1rem;
    font-size: 0.75rem;
    line-height: 1.35;
    margin-bottom: 0.75rem;
}

.boab-sched-pair[b-fm7sl93jed] {
    white-space: nowrap;
}

.boab-sched-strip-label[b-fm7sl93jed] {
    color: var(--sheet-label-grey);
    font-weight: 600;
    letter-spacing: var(--sheet-track-label);
    text-transform: uppercase;
    font-size: var(--sheet-fs-label);
    margin-right: 0.3rem;
}

.boab-sched-strip-value[b-fm7sl93jed] {
    color: var(--sheet-ink);
}

/* ============================================================================
   REQUIRED MARKING — a red star appended to the Mud label via CSS (uniform
   across MudSelect / MudDatePicker / MudNumericField / PersonPicker), replacing
   the literal " *" that used to be folded into label strings. Red is a SCREEN
   affordance, not sheet ink — no sheet token involved (the sheet palette stays
   greyscale).
   ============================================================================ */
.boab-field.boab-required[b-fm7sl93jed]  .mud-input-label::after {
    content: " *";
    color: var(--mud-palette-error);
}

/* ============================================================================
   CAPTURE CHROME — MudBlazor inputs re-skinned as the sheet's write boxes.
   At rest: tracked-caps label ABOVE a tinted (#f6f6f6) rounded box with hairline
   chrome and a bottom-anchored dashed baseline guide — exactly SvgWriteBox.
   Focus / hover / error keep screen affordances (re-added explicitly below).
   ============================================================================ */

/* Kill Mud's reserved floating-label margins; the grid gaps own the spacing. */
.boab-sheet-body[b-fm7sl93jed]  .mud-input-control {
    margin: 0;
    width: 100%;
}

/* Pickers (date) wrap the control in .mud-picker — make it fill the cell. */
.boab-field[b-fm7sl93jed]  .mud-picker {
    width: 100%;
}

/* PersonPicker's bootstrap wrapper margin — the sign-off band owns its spacing. */
.boab-field[b-fm7sl93jed]  div.mb-2 {
    margin-bottom: 0 !important;
}

/* The label: Mud's own floating label, pinned STATIC above the box and set in the
   sheet's tracked-caps micro type. !important on the positioning/type kills Mud's
   float/shrink animation in every state — the sheet's label never moves. */
.boab-sheet-body[b-fm7sl93jed]  label.mud-input-label.mud-input-label-inputcontrol {
    position: static !important;
    transform: none !important;
    order: -1;                    /* container is already flex-column */
    max-width: none !important;
    padding: 0 !important;
    margin: 0 0 calc(var(--sheet-pt) * 2) 0 !important;
    pointer-events: auto;
    font-size: var(--sheet-fs-label) !important;
    font-weight: 600;
    letter-spacing: var(--sheet-track-label);
    text-transform: uppercase;
    line-height: 1.25;
    color: var(--sheet-label-grey) !important;  /* stays quiet on focus, like the sheet */
    background: transparent;
}

/* No floating label ⇒ no notch: hide the outlined border's legend gap. */
.boab-sheet-body[b-fm7sl93jed]  .mud-input-outlined-border legend {
    display: none;
}

/* The write box at rest: tint + dashed baseline guide (SvgWriteBox, guides: 1). */
.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined {
    width: 100%;
    min-height: var(--sheet-handwrite-box);
    background-color: var(--sheet-field-tint);
    border-radius: var(--sheet-write-radius);
    background-image: var(--sheet-guide-image);
    background-repeat: no-repeat;
    background-size: calc(100% - 2 * var(--sheet-guide-inset)) max(1px, var(--sheet-guide-w));
    background-position: left var(--sheet-guide-inset) bottom var(--sheet-guide-inset);
}

.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined > .mud-input-outlined-border {
    border-width: max(1px, var(--sheet-write-stroke));
    border-style: solid;
    border-color: var(--sheet-write-rule);
    border-radius: var(--sheet-write-radius);
}

/* The typed value = the "handwriting": info-grid value type, guide-aligned inset. */
.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined .mud-input-slot {
    font-size: var(--sheet-fs-value);
    color: var(--sheet-ink);
    padding: calc(var(--sheet-pt) * 4) var(--sheet-guide-inset);
}

.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined .mud-input-slot::placeholder {
    color: var(--sheet-muted);
    opacity: 1;
}

/* Quiet the adornment icons (search / calendar / caret / spin) to label grey. */
.boab-sheet-body[b-fm7sl93jed]  .mud-input .mud-icon-root {
    color: var(--sheet-label-grey);
}

/* Helper text (e.g. "Explain the failure.") — compact, under the box. */
.boab-sheet-body[b-fm7sl93jed]  .mud-input-helper-text {
    font-size: var(--sheet-fs-kicker);
    margin-top: calc(var(--sheet-pt) * 2);
}

/* ── State affordances (screen ink is free; at rest it reads as the sheet) ──── */
.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined:hover:not(.mud-disabled) > .mud-input-outlined-border {
    border-color: var(--sheet-label-grey);
}

.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined:focus-within > .mud-input-outlined-border {
    border-width: 2px;
    border-color: var(--mud-palette-primary);
}

.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined.mud-input-error > .mud-input-outlined-border {
    border-color: var(--mud-palette-error);
}

.boab-sheet-body[b-fm7sl93jed]  .mud-input.mud-input-outlined.mud-disabled {
    background-color: var(--sheet-page-bg);
    background-image: none;
}

/* ── Comments — the sheet's tall capture box with NO baseline guides (SvgWriteBox,
   guides: 0 — owner ruling 2026-07-02: comment fields lose the dashes; the tint +
   outline alone mark the capture area). background-image:none also kills the base
   single-guide rule this box would otherwise inherit from the rest style above. ─ */
.boab-field--comment[b-fm7sl93jed]  .mud-input.mud-input-outlined {
    min-height: calc(var(--sheet-pt) * 44);   /* the sheet's Comments box height */
    align-items: flex-start;                  /* text starts at the top, like handwriting */
    background-image: none;
}

/* ============================================================================
   SIGN-OFF variant (--lines): each input reads as the sheet's signature BASELINE
   (no box, no tint). The band LAYOUT (.boab-sheet-signoff/-cell/-sign-hint) is
   promoted to boab-design.css; only this Mud-internal input skin stays scoped.
   Variant selected in the .razor (SignOffAsLines). These rules come LAST so the
   --lines overrides win their specificity ties.
   ============================================================================ */
.boab-sheet-signoff--lines[b-fm7sl93jed]  .mud-input.mud-input-outlined {
    min-height: var(--sheet-signature-row);
    background-color: transparent;
    background-image: none;
    border-radius: 0;
}

.boab-sheet-signoff--lines[b-fm7sl93jed]  .mud-input.mud-input-outlined > .mud-input-outlined-border {
    border-width: 0 0 max(1px, var(--sheet-write-stroke)) 0;
    border-radius: 0;
    border-color: var(--sheet-write-rule);
}

.boab-sheet-signoff--lines[b-fm7sl93jed]  .mud-input.mud-input-outlined .mud-input-slot {
    padding-left: 0;
    padding-right: 0;
}

.boab-sheet-signoff--lines[b-fm7sl93jed]  .mud-input.mud-input-outlined:hover:not(.mud-disabled) > .mud-input-outlined-border {
    border-color: var(--sheet-label-grey);
}

.boab-sheet-signoff--lines[b-fm7sl93jed]  .mud-input.mud-input-outlined:focus-within > .mud-input-outlined-border {
    border-width: 0 0 2px 0;
    border-color: var(--mud-palette-primary);
}

.boab-sheet-signoff--lines[b-fm7sl93jed]  .mud-input.mud-input-outlined.mud-input-error > .mud-input-outlined-border {
    border-color: var(--mud-palette-error);
}
