@import '_content/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.i4zkn35tfz.bundle.scp.css';
@import '_content/Microsoft.FluentUI.AspNetCore.Components/Microsoft.FluentUI.AspNetCore.Components.lcdo7z9xd2.bundle.scp.css';

/* /Features/BatchReporting/BatchDetailPanel.razor.rz.scp.css */
/* BatchDetailPanel — scoped layout. Fluent tokens with fallbacks, like the other cards. */

.bdp[b-b6u4iyfflj] {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.bdp__facts[b-b6u4iyfflj] {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 8px 24px;
    margin: 0;
}

.bdp__override[b-b6u4iyfflj] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 12px;
    border-left: 3px solid var(--warning, #F0B429);
    border-radius: 4px;
    background: color-mix(in srgb, var(--warning, #F0B429) 12%, transparent);
}

.bdp__override-fields[b-b6u4iyfflj] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.bdp__facts > div[b-b6u4iyfflj] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
}

.bdp__facts dt[b-b6u4iyfflj] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.bdp__facts dd[b-b6u4iyfflj] {
    margin: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.bdp__badges[b-b6u4iyfflj] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.bdp__accuracy[b-b6u4iyfflj] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.bdp__accuracy-label[b-b6u4iyfflj] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* Out-of-tolerance material rows: subtle red tint. ::deep reaches grid-generated rows. */
[b-b6u4iyfflj] .out-of-tol {
    background: rgba(232, 96, 96, .12);
}

/* Out-of-band deviation value, in red. */
.bdp__dev--bad[b-b6u4iyfflj] {
    color: var(--error, #e86060);
    font-weight: 600;
}
/* /Features/BatchReporting/BatchFilterBar.razor.rz.scp.css */
/* BatchFilterBar — scoped layout. Controls wrap on narrow widths; actions push to the end. */

.batch-filter[b-l21f9kj9rl] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 12px;
    padding: 14px 16px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: var(--bg-card, #1a1d22);
}

.batch-filter__actions[b-l21f9kj9rl] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-left: auto;
}
/* /Features/BatchReporting/BatchGrid.razor.rz.scp.css */
/* BatchGrid — scoped styles. Layout leans on FluentDataGrid; only the footer + reject tint here. */

.batch-grid[b-8x2cdmf5j8] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.batch-grid__state[b-8x2cdmf5j8],
.batch-grid__empty[b-8x2cdmf5j8] {
    padding: 24px;
    text-align: center;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.batch-grid__foot[b-8x2cdmf5j8] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.batch-grid__foot-left[b-8x2cdmf5j8] {
    display: flex;
    align-items: center;
    gap: 16px;
}

.batch-grid__count[b-8x2cdmf5j8] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.batch-grid__perpage[b-8x2cdmf5j8] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.batch-grid__perpage-label[b-8x2cdmf5j8] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.batch-grid__pager[b-8x2cdmf5j8] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.batch-grid__pageno[b-8x2cdmf5j8] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #c6c8cd);
}

/* Rejected rows: subtle red tint. ::deep reaches the grid-generated row element. */
[b-8x2cdmf5j8] .rejected {
    background: rgba(232, 96, 96, .10);
}

/* Out-of-tolerance rows (a category breached the recipe band): red tint, lighter than a reject. */
[b-8x2cdmf5j8] .out-of-tol {
    background: rgba(232, 96, 96, .08);
}

/* Out-of-band accuracy label, in red. */
.batch-grid__bad[b-8x2cdmf5j8] {
    color: var(--error, #e86060);
    font-weight: 600;
}

/* "Override" chip on batches mixed under an on-the-fly recipe override. */
.batch-grid__override[b-8x2cdmf5j8] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    color: var(--warning, #F0B429);
    border: 1px solid var(--warning, #F0B429);
    background: color-mix(in srgb, var(--warning, #F0B429) 12%, transparent);
}
/* /Features/BatchReporting/BatchReporting.razor.rz.scp.css */
/* BatchReporting page — scoped layout. Vertical stack of header, filter bar, grid. */

.batch-reporting[b-putasm97gn] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 20px 24px;
}

.batch-reporting__head[b-putasm97gn] {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.batch-reporting__title[b-putasm97gn] {
    margin: 0;
    font-size: var(--type-ramp-plus-3-font-size, 24px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
}
/* /Features/BatchReporting/BatchSummaryCards.razor.rz.scp.css */
/* BatchSummaryCards — scoped styles. KPI tiles in a responsive row, Fluent tokens with fallbacks. */

.kpi-row[b-c0vhl80hlh] {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

.kpi-row__state[b-c0vhl80hlh] {
    padding: 16px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/*.kpi {
    flex: 1 1 140px;
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 14px 16px;
}*/

.kpi__value[b-c0vhl80hlh] {
    font-size: var(--type-ramp-plus-3-font-size, 24px);
    font-weight: 700;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.kpi__label[b-c0vhl80hlh] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* Below-target in-band rate drawn in amber to draw the eye without crying error. */
.kpi__value.is-warn[b-c0vhl80hlh] {
    color: var(--warning, #e0a030);
}
/* /Features/BatchReporting/MaterialAccuracyCard.razor.rz.scp.css */
/* MaterialAccuracyCard — scoped styles. Fluent tokens with fallbacks, matching the other cards. */

.acc-card[b-02rrfl2itc] {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 16px 18px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: var(--bg-card, #1a1d22);
}

.acc-card__head[b-02rrfl2itc] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
}

.acc-card__title[b-02rrfl2itc] {
    font-size: var(--type-ramp-plus-1-font-size, 16px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.acc-card__sub[b-02rrfl2itc] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.acc-card__state[b-02rrfl2itc],
.acc-card__empty[b-02rrfl2itc] {
    padding: 16px;
    text-align: center;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.acc-card__kpis[b-02rrfl2itc] {
    display: flex;
    flex-wrap: wrap;
    gap: 28px;
}

.acc-kpi[b-02rrfl2itc] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.acc-kpi__value[b-02rrfl2itc] {
    font-size: var(--type-ramp-plus-3-font-size, 24px);
    font-weight: 700;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.acc-kpi__label[b-02rrfl2itc] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* Out-of-tolerance figures in red. */
.acc-kpi__value.is-bad[b-02rrfl2itc],
.acc-bad[b-02rrfl2itc] {
    color: var(--error, #e86060);
}

.acc-bad[b-02rrfl2itc] {
    font-weight: 600;
}
/* /Features/BatchReporting/TemperatureComplianceCard.razor.rz.scp.css */
/* TemperatureComplianceCard — scoped styles. Fluent tokens with fallbacks, matching the other cards. */

.temp-card[b-v49c6z6z8q] {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 16px 18px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: var(--bg-card, #1a1d22);
}

.temp-card__head[b-v49c6z6z8q] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
}

.temp-card__title[b-v49c6z6z8q] {
    font-size: var(--type-ramp-plus-1-font-size, 16px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.temp-card__sub[b-v49c6z6z8q] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.temp-card__state[b-v49c6z6z8q],
.temp-card__empty[b-v49c6z6z8q] {
    padding: 16px;
    text-align: center;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.temp-card__kpis[b-v49c6z6z8q] {
    display: flex;
    flex-wrap: wrap;
    gap: 28px;
}

.temp-kpi[b-v49c6z6z8q] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.temp-kpi__value[b-v49c6z6z8q] {
    font-size: var(--type-ramp-plus-3-font-size, 24px);
    font-weight: 700;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.temp-kpi__label[b-v49c6z6z8q] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* Out-of-band figures in red. */
.temp-kpi__value.is-bad[b-v49c6z6z8q] {
    color: var(--error, #e86060);
}

/* Chart — LiveCharts renders into a canvas that fills this box, so it needs an explicit height. */
.temp-chart[b-v49c6z6z8q] {
    width: 100%;
    height: 170px;
}

/* Legend */
.temp-card__legend[b-v49c6z6z8q] {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
}

.temp-legend[b-v49c6z6z8q] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.temp-legend__swatch[b-v49c6z6z8q] {
    width: 12px;
    height: 12px;
    border-radius: 3px;
    display: inline-block;
}

.temp-legend__swatch--band[b-v49c6z6z8q] {
    background: var(--accent-fill-rest, #3b82f6);
    opacity: .3;
}

.temp-legend__swatch--line[b-v49c6z6z8q] {
    background: var(--accent-fill-rest, #3b82f6);
}

.temp-legend__swatch--bad[b-v49c6z6z8q] {
    background: var(--error, #e86060);
}
/* /Features/BatchReporting/ThroughputCard.razor.rz.scp.css */
/* ThroughputCard — scoped styles. Fluent tokens with fallbacks, matching the other cards. */

.thru-card[b-brrux0kk1a] {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 16px 18px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: var(--bg-card, #1a1d22);
}

.thru-card__head[b-brrux0kk1a] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
}

.thru-card__title[b-brrux0kk1a] {
    font-size: var(--type-ramp-plus-1-font-size, 16px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.thru-card__sub[b-brrux0kk1a] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.thru-card__state[b-brrux0kk1a],
.thru-card__empty[b-brrux0kk1a] {
    padding: 16px;
    text-align: center;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* Chart — LiveCharts renders into a canvas that fills this box, so it needs an explicit height. */
.thru-chart[b-brrux0kk1a] {
    width: 100%;
    height: 200px;
}
/* /Features/Production/AlarmsCard.razor.rz.scp.css */
/* AlarmsCard.razor.css — scoped. Atlas tokens with literal fallbacks. */

.alarms[b-2juj6d7389] {
    background: var(--surface-card, #1F1F1F);
    border: 1px solid var(--stroke-divider, #2E2E2E);
    border-radius: 8px;
    padding: 14px 16px;
    box-shadow: var(--shadow-2, 0 1px 2px rgba(0, 0, 0, .28));
}

.head[b-2juj6d7389] {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.head-right[b-2juj6d7389] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.section-label[b-2juj6d7389] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .3px;
    text-transform: uppercase;
    color: var(--fg-hint, #9A9A9A);
}

.count[b-2juj6d7389] {
    font-size: 12px;
    font-weight: 600;
    color: var(--danger, #E5484D);
}

.clear-row[b-2juj6d7389] {
    display: flex;
    align-items: baseline;
    gap: 12px;
    margin-top: 10px;
}

.clear-row .value[b-2juj6d7389] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
    font-variant-numeric: tabular-nums;
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
    color: var(--success, #6CC070);
}

.clear-row .none[b-2juj6d7389] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: var(--fg-hint, #9A9A9A);
}

.clear-row .none .dot[b-2juj6d7389] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--success, #6CC070);
}

.list[b-2juj6d7389] {
    list-style: none;
    margin: 12px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.row[b-2juj6d7389] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 10px;
    border-radius: 4px;
    background: var(--surface-raised, #242424);
    font-size: 13px;
}

.row .dot[b-2juj6d7389] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    flex: none;
}

.row .code[b-2juj6d7389] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
    font-weight: 600;
    color: var(--fg-rest, #F2F2F2);
}

.row .msg[b-2juj6d7389] {
    color: var(--fg-secondary, #D6D6D6);
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.row.fault .dot[b-2juj6d7389] { background: var(--danger, #E5484D); }
.row.fault[b-2juj6d7389] { box-shadow: inset 2px 0 0 var(--danger, #E5484D); }
.row.warn .dot[b-2juj6d7389] { background: var(--warning, #F0B429); }
.row.info .dot[b-2juj6d7389] { background: var(--info, #4AA3E0); }
/* /Features/Production/BatchLog.razor.rz.scp.css */
/* BatchLog.razor.css — scoped. Atlas tokens with literal fallbacks. */

.batch-log[b-rzciizekdr] {
    background: var(--surface-card, #1F1F1F);
    border: 1px solid var(--stroke-divider, #2E2E2E);
    border-radius: 8px;
    box-shadow: var(--shadow-2, 0 1px 2px rgba(0, 0, 0, .28));
    overflow: hidden;
}

.head[b-rzciizekdr] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 14px 10px;
}

.section-label[b-rzciizekdr] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .3px;
    text-transform: uppercase;
    color: var(--fg-hint, #9A9A9A);
}

.hint[b-rzciizekdr] {
    font-size: 12px;
    color: var(--fg-hint, #9A9A9A);
}

table[b-rzciizekdr] {
    width: 100%;
    border-collapse: collapse;
    font-variant-numeric: tabular-nums;
}

thead tr[b-rzciizekdr] {
    background: var(--surface-raised, #242424);
}

th[b-rzciizekdr] {
    text-align: right;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: .3px;
    color: var(--fg-hint, #9A9A9A);
    font-weight: 600;
    padding: 9px 14px;
}

th.l[b-rzciizekdr], td.l[b-rzciizekdr] {
    text-align: left;
}

td[b-rzciizekdr] {
    padding: 9px 14px;
    text-align: right;
    border-top: 1px solid var(--stroke-divider, #2E2E2E);
    color: var(--fg-secondary, #D6D6D6);
}

td.batch[b-rzciizekdr] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
    font-weight: 600;
    color: var(--fg-rest, #F2F2F2);
}

td.num[b-rzciizekdr] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
}

td.num.strong[b-rzciizekdr] {
    color: var(--fg-rest, #F2F2F2);
}

td.empty[b-rzciizekdr] {
    text-align: center;
    color: var(--fg-hint, #9A9A9A);
    padding: 18px 14px;
}

.verdict[b-rzciizekdr] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
}

.verdict .dot[b-rzciizekdr] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
}

.verdict.ok[b-rzciizekdr] { color: var(--success, #6CC070); }
.verdict.ok .dot[b-rzciizekdr] { background: var(--success, #6CC070); }
.verdict.bad[b-rzciizekdr] { color: var(--danger, #E5484D); }
.verdict.bad .dot[b-rzciizekdr] { background: var(--danger, #E5484D); }

/* Neither verdict word set — the plant hasn't judged the batch. Neutral on purpose: this is the
   normal reading at a site that never sets N203:82, and tinting it red would paint a whole good run
   as failed. Matches .flag.idle on MixTemperatureCard. */
.verdict.none[b-rzciizekdr] { color: var(--fg-hint, #9A9A9A); }
.verdict.none .dot[b-rzciizekdr] { background: var(--fg-hint, #9A9A9A); }
/* /Features/Production/DespatchQueue.razor.rz.scp.css */
/* DespatchQueue.razor.css — scoped styles for the Production right rail.
   Job cards + status chips share the design-system status language (dotted chips, accent
   left-edge on the active job), on the same FluentUI tokens as the other Production widgets. */

.despatch-queue[b-spsztuc2wm] {
    display: flex;
    flex-direction: column;
    gap: var(--spacingVerticalL, 18px);
    height: 100%;
}

/* header */
.dq-head[b-spsztuc2wm] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
}
.dq-head__count[b-spsztuc2wm] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8a8a8a);
    font-variant-numeric: tabular-nums;
}

.dq-empty[b-spsztuc2wm] {
    padding: 28px 16px;
    text-align: center;
    color: var(--neutral-foreground-hint, #8a8a8a);
    font-size: var(--type-ramp-base-font-size, 13px);
    border: 1px dashed var(--neutral-stroke-divider-rest, #2b2b2b);
    border-radius: calc(var(--layer-corner-radius, 8) * 1px);
}

/* section */
.dq-section[b-spsztuc2wm] { display: flex; flex-direction: column; gap: 8px; }
.dq-section + .dq-section[b-spsztuc2wm] { margin-top: var(--spacingVerticalM, 14px); }
.dq-section__head[b-spsztuc2wm] {
    display: flex;
    align-items: center;
    gap: 8px;
    text-transform: uppercase;
    letter-spacing: .4px;
}
.dq-section__title[b-spsztuc2wm] {
    font-size: var(--type-ramp-minus-1-font-size, 11.5px);
    font-weight: 700;
    color: var(--neutral-foreground-hint, #8a8a8a);
}
.dq-section__count[b-spsztuc2wm] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: var(--neutral-fill-secondary-rest, #242424);
    color: var(--neutral-foreground-hint, #adadad);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

/* job card */
.dq-card[b-spsztuc2wm] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 12px 14px;
    background: var(--neutral-layer-1, #1f1f1f);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-divider-rest, #2b2b2b);
    border-left: 3px solid var(--neutral-stroke-rest, #3a3a3a);
    border-radius: calc(var(--control-corner-radius, 6) * 1px);
}
.dq-card--accent[b-spsztuc2wm]  { border-left-color: var(--accent, #FF7A1A); }
.dq-card--success[b-spsztuc2wm] { border-left-color: var(--success, #6cc070); }
.dq-card--warning[b-spsztuc2wm] { border-left-color: var(--warning, #f0b429); }
.dq-card--danger[b-spsztuc2wm]  { border-left-color: var(--error, #f1707b); }

/* selectable Pending cards + selected state */
.dq-card--selectable[b-spsztuc2wm] { cursor: pointer; }
.dq-card--selectable:hover[b-spsztuc2wm] { background: var(--neutral-layer-2, #262626); }
.dq-card--selected[b-spsztuc2wm] {
    background: var(--neutral-layer-2, #262626);
    border-color: var(--accent, #FF7A1A);
    box-shadow: 0 0 0 1px var(--accent, #FF7A1A) inset;
}

.dq-card__top[b-spsztuc2wm] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}
.dq-card__id[b-spsztuc2wm] {
    font-family: var(--monospace-font, ui-monospace, "Cascadia Mono", Consolas, monospace);
    font-weight: 700;
    font-size: var(--type-ramp-plus-1-font-size, 15px);
    letter-spacing: .3px;
}

/* status chip — dotted-language, tone via modifier */
.dq-chip[b-spsztuc2wm] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 22px;
    padding: 0 9px 0 8px;
    border-radius: 11px;
    background: var(--neutral-fill-secondary-rest, #242424);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-rest, #3a3a3a);
    font-size: var(--type-ramp-minus-1-font-size, 11.5px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #d0d0d0);
}
.dq-chip__dot[b-spsztuc2wm] { width: 6px; height: 6px; border-radius: 50%; background: var(--neutral-foreground-hint, #9a9a9a); }
.dq-chip--accent  .dq-chip__dot[b-spsztuc2wm] { background: var(--accent, #FF7A1A); }
.dq-chip--success .dq-chip__dot[b-spsztuc2wm] { background: var(--success, #6cc070); }
.dq-chip--warning .dq-chip__dot[b-spsztuc2wm] { background: var(--warning, #f0b429); }
.dq-chip--danger  .dq-chip__dot[b-spsztuc2wm] { background: var(--error, #f1707b); }

/* meta line */
.dq-card__meta[b-spsztuc2wm] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    font-size: var(--type-ramp-base-font-size, 13px);
    color: var(--neutral-foreground-hint, #adadad);
}
.dq-card__recipe[b-spsztuc2wm] { font-weight: 600; color: var(--neutral-foreground-rest, #e8e8e8); }
.dq-card__ver[b-spsztuc2wm] { font-family: var(--monospace-font, ui-monospace, Consolas, monospace); font-variant-numeric: tabular-nums; }
.dq-card__sep[b-spsztuc2wm] { opacity: .5; }
.dq-card__tonnage[b-spsztuc2wm] { font-variant-numeric: tabular-nums; }
.dq-card__sched[b-spsztuc2wm] { margin-left: auto; font-variant-numeric: tabular-nums; }

/* parts list — shown when a Pending card is selected; pick one to despatch */
.dq-parts[b-spsztuc2wm] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 2px;
    padding-top: 8px;
    border-top: calc(var(--stroke-width, 1) * 1px) dashed var(--neutral-stroke-divider-rest, #2b2b2b);
}
.dq-part[b-spsztuc2wm] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    padding: 6px 9px;
    background: var(--neutral-fill-secondary-rest, #242424);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-divider-rest, #2b2b2b);
    border-radius: calc(var(--control-corner-radius, 6) * 1px);
    color: var(--neutral-foreground-rest, #d0d0d0);
    font-size: var(--type-ramp-base-font-size, 13px);
    text-align: left;
    cursor: pointer;
}
.dq-part:hover:not(:disabled)[b-spsztuc2wm] { background: var(--neutral-fill-secondary-hover, #2a2a2a); }
.dq-part--selected[b-spsztuc2wm] {
    border-color: var(--accent, #FF7A1A);
    box-shadow: 0 0 0 1px var(--accent, #FF7A1A) inset;
}
/* parts that aren't Pending — already running/finished, shown for context, not pickable */
.dq-part--done[b-spsztuc2wm] {
    opacity: .6;
    cursor: default;
}
.dq-part__no[b-spsztuc2wm] { font-weight: 600; }
.dq-part__dest[b-spsztuc2wm] { color: var(--neutral-foreground-hint, #adadad); }
.dq-part__qty[b-spsztuc2wm] { margin-left: auto; font-variant-numeric: tabular-nums; }

/* per-part status label (only shown on non-Pending parts; sits after the quantity) */
.dq-part__status[b-spsztuc2wm] {
    padding: 1px 7px;
    border-radius: 9px;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .3px;
    background: var(--neutral-fill-secondary-rest, #242424);
    color: var(--neutral-foreground-hint, #adadad);
}
.dq-part__status--success[b-spsztuc2wm] { color: #bfe6c2; }
.dq-part__status--danger[b-spsztuc2wm] { color: #f6b6b6; }
.dq-part__status--accent[b-spsztuc2wm] { color: #f3d9a8; }

/* running-job progress */
.dq-progress[b-spsztuc2wm] {
    height: 6px;
    border-radius: 3px;
    background: var(--neutral-fill-secondary-rest, #242424);
    overflow: hidden;
}
.dq-progress__fill[b-spsztuc2wm] {
    height: 100%;
    background: var(--success, #6cc070);
    border-radius: 3px;
    transition: width .4s ease;
}
.dq-progress__pct[b-spsztuc2wm] {
    font-size: var(--type-ramp-minus-1-font-size, 11.5px);
    color: var(--success, #6cc070);
    font-variant-numeric: tabular-nums;
}

/* actions */
.dq-actions[b-spsztuc2wm] {
    display: flex;
    gap: 8px;
    margin-top: 2px;
}

/* footer — single selection-gated Despatch action, pinned to the bottom of the rail */
.dq-foot[b-spsztuc2wm] {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: auto;
    padding-top: var(--spacingVerticalM, 14px);
    border-top: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-divider-rest, #2b2b2b);
}
.dq-foot__hint[b-spsztuc2wm] {
    font-size: var(--type-ramp-minus-1-font-size, 11.5px);
    color: var(--neutral-foreground-hint, #8a8a8a);
}
/* /Features/Production/MixProgress.razor.rz.scp.css */
/* MixProgress.razor.css — scoped styles for the live job-part progress card.
   Consumes the same app.css / FluentUI tokens as ProductionHeader (with fallbacks)
   so it follows the theme and accent automatically. */

.mix-prog[b-ndigw1nzy2] {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 16px 18px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: var(--bg-card, #1a1d22);
}

.mix-prog__head[b-ndigw1nzy2] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.mix-prog__title[b-ndigw1nzy2] {
    font-size: var(--type-ramp-plus-1-font-size, 16px);
    font-weight: 600;
    letter-spacing: .2px;
    color: var(--neutral-foreground-rest, #ECECEC);
}

/* ---- ids: job + part ---- */
.mix-prog__ids[b-ndigw1nzy2] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    font-size: var(--type-ramp-plus-2-font-size, 20px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.mix-prog__sep[b-ndigw1nzy2] {
    color: var(--neutral-foreground-hint, #8b8e95);
    font-weight: 400;
}

/* ---- batch line ---- */
.mix-prog__batch[b-ndigw1nzy2] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.mix-prog__batch-label[b-ndigw1nzy2] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.mix-prog__batch-num[b-ndigw1nzy2] {
    font-size: var(--type-ramp-plus-3-font-size, 24px);
    font-weight: 700;
    line-height: 1;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.mix-prog__flag[b-ndigw1nzy2] {
    padding: 2px 9px;
    border-radius: 12px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .3px;
    border: 1px solid var(--border, rgba(255,255,255,.12));
    color: var(--neutral-foreground-rest, #c6c8cd);
    background: var(--neutral-fill-secondary-rest, #212429);
}

.mix-prog__flag--first[b-ndigw1nzy2] {
    color: #bcd4f6;
    border-color: rgba(108,152,232,.40);
    background: rgba(108,152,232,.15);
}

.mix-prog__flag--last[b-ndigw1nzy2] {
    color: #f3d9a8;
    border-color: rgba(232,168,72,.45);
    background: rgba(232,168,72,.16);
}

/* ---- progress (actual tonnage dropped ÷ part target) — FluentProgress drives the bar ---- */
.mix-prog__progress[b-ndigw1nzy2] {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.mix-prog__tonnage[b-ndigw1nzy2] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
    font-variant-numeric: tabular-nums;
}

.mix-prog__tonnage-pct[b-ndigw1nzy2] {
    font-weight: 600;
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.mix-prog__empty[b-ndigw1nzy2] {
    margin: 0;
    font-size: var(--type-ramp-base-font-size, 14px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* ---- next up (parts despatched but not yet mixing) ---- */
.mix-prog__next[b-ndigw1nzy2] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 4px;
    padding-top: 12px;
    border-top: 1px solid var(--border, rgba(255,255,255,.09));
}

.mix-prog__next-label[b-ndigw1nzy2] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.mix-prog__next-row[b-ndigw1nzy2] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    font-size: var(--type-ramp-base-font-size, 14px);
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.mix-prog__next-id[b-ndigw1nzy2] {
    font-weight: 600;
}

.mix-prog__next-dest[b-ndigw1nzy2] {
    color: var(--neutral-foreground-hint, #8b8e95);
}

.mix-prog__next-qty[b-ndigw1nzy2] {
    margin-left: auto;
    color: var(--neutral-foreground-hint, #8b8e95);
    font-variant-numeric: tabular-nums;
}

/* ---- status pill (local copy; scoped css can't reach ProductionHeader's) ---- */
.state-pill[b-ndigw1nzy2] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    height: 28px;
    padding: 0 12px;
    border-radius: 16px;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .2px;
    text-transform: uppercase;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    background: var(--neutral-fill-secondary-rest, #212429);
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.state-pill__dot[b-ndigw1nzy2] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--neutral-foreground-hint, #8b8e95);
}

.state-running[b-ndigw1nzy2] {
    color: #bfe6c2;
    border-color: rgba(108,192,112,.35);
    background: rgba(108,192,112,.15);
}
.state-running .state-pill__dot[b-ndigw1nzy2] {
    background: var(--success, #6cc070);
    box-shadow: 0 0 0 3px rgba(108,192,112,.15);
    animation: mixProgPulse-b-ndigw1nzy2 2s infinite;
}

.state-idle[b-ndigw1nzy2] {
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.state-complete[b-ndigw1nzy2] {
    color: #bcd4f6;
    border-color: rgba(108,152,232,.35);
    background: rgba(108,152,232,.14);
}
.state-complete .state-pill__dot[b-ndigw1nzy2] {
    background: #6c98e8;
}

@keyframes mixProgPulse-b-ndigw1nzy2 {
    0%, 100% { opacity: 1; }
    50% { opacity: .45; }
}

@media (prefers-reduced-motion: reduce) {
    .state-pill__dot[b-ndigw1nzy2] { animation: none !important; }
}
/* /Features/Production/MixTemperatureCard.razor.rz.scp.css */
/* MixTemperatureCard.razor.css — scoped. Atlas token names with literal fallbacks
   so the card renders correctly whether or not the app's app.css defines them. */

.mix-temp[b-czjg0gam0w] {
    background: var(--surface-card, #1F1F1F);
    border: 1px solid var(--stroke-divider, #2E2E2E);
    border-radius: 8px;
    padding: 14px 16px;
    box-shadow: var(--shadow-2, 0 1px 2px rgba(0, 0, 0, .28));
}

.head[b-czjg0gam0w] {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.section-label[b-czjg0gam0w] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .3px;
    text-transform: uppercase;
    color: var(--fg-hint, #9A9A9A);
}

.flag[b-czjg0gam0w] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
}

.flag .dot[b-czjg0gam0w] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
}

.flag.ok[b-czjg0gam0w] { color: var(--success, #6CC070); }
.flag.ok .dot[b-czjg0gam0w] { background: var(--success, #6CC070); }
.flag.warn[b-czjg0gam0w] { color: var(--warning, #F0B429); }
.flag.warn .dot[b-czjg0gam0w] { background: var(--warning, #F0B429); }
.flag.idle[b-czjg0gam0w] { color: var(--fg-hint, #9A9A9A); }

.readout[b-czjg0gam0w] {
    display: flex;
    align-items: baseline;
    gap: 6px;
    margin-top: 10px;
}

.readout .value[b-czjg0gam0w] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
    font-variant-numeric: tabular-nums;
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
    color: var(--fg-rest, #F2F2F2);
}

.readout .unit[b-czjg0gam0w] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
    font-size: 15px;
    color: var(--fg-hint, #9A9A9A);
}

.target[b-czjg0gam0w] {
    margin-top: 4px;
    font-size: 12px;
    color: var(--fg-hint, #9A9A9A);
    font-variant-numeric: tabular-nums;
}

.target .tol[b-czjg0gam0w] {
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
}

.gauge[b-czjg0gam0w] {
    position: relative;
    height: 8px;
    margin-top: 14px;
    border-radius: 4px;
    background: var(--surface-raised, #242424);
    overflow: hidden;
}

/* The accepted band sits in the middle 1/(1.4) of the track (see MarkerPercent). */
.gauge .band[b-czjg0gam0w] {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 14.29%;
    right: 14.29%;
    background: var(--success-soft, rgba(108, 192, 112, .16));
}

.gauge .tick.center[b-czjg0gam0w] {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 50%;
    width: 1px;
    background: var(--success, #6CC070);
    opacity: .6;
}

.gauge .marker[b-czjg0gam0w] {
    position: absolute;
    top: -2px;
    width: 3px;
    height: 12px;
    border-radius: 2px;
    transform: translateX(-1.5px);
    transition: left 150ms ease;
}

.gauge .marker.ok[b-czjg0gam0w] { background: var(--fg-rest, #F2F2F2); }
.gauge .marker.warn[b-czjg0gam0w] { background: var(--warning, #F0B429); }

.scale[b-czjg0gam0w] {
    display: flex;
    justify-content: space-between;
    margin-top: 5px;
    font-family: var(--font-mono, "IBM Plex Mono", monospace);
    font-size: 11px;
    color: var(--fg-hint, #9A9A9A);
    font-variant-numeric: tabular-nums;
}
/* /Features/Production/NewJobPanel.razor.rz.scp.css */
/* NewJobPanel.razor.css — layout for the New-job dialog content.
   The list, search, options and chips all come from RecipeListBox; this file only
   spaces the steps. Same FluentUI spacing + type-ramp tokens as the shared widgets. */

.njp-body[b-fvfjw62swc] {
    display: flex;
    flex-direction: column;
    gap: var(--spacingVerticalXL, 22px);
}

.njp-step[b-fvfjw62swc] {
    display: flex;
    flex-direction: column;
    gap: var(--spacingVerticalS, 8px);
}

/* uppercase step header — matches the "1 · Recipe" section labels in the design */
.njp-step__label[b-fvfjw62swc] {
    text-transform: uppercase;
    letter-spacing: .4px;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    font-weight: 700;
    color: var(--neutral-foreground-hint, #8a8a8a);
}

/* step 3 · job details — stacked fields with their validation messages */
.njp-fields[b-fvfjw62swc] {
    display: flex;
    flex-direction: column;
    gap: var(--spacingVerticalM, 14px);
}

.njp-field[b-fvfjw62swc] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
/* /Features/Production/PartsBuilder.razor.rz.scp.css */
/* PartsBuilder.razor.css — scoped styles.
   Allocation bar + part rows mirror the design preview's parts builder, on the same
   FluentUI tokens as the other New-job components (accent fills, neutral layers/strokes). */

.parts-builder[b-9tiaegb2u7] {
    display: flex;
    flex-direction: column;
    gap: var(--spacingVerticalM, 14px);
}

/* allocation summary + segmented bar */
.pb-alloc[b-9tiaegb2u7] {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.pb-alloc__top[b-9tiaegb2u7] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
}
.pb-alloc__hint[b-9tiaegb2u7] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8a8a8a);
}
.pb-alloc__sum[b-9tiaegb2u7] {
    font-size: var(--type-ramp-base-font-size, 13px);
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}
.pb-alloc__sum--under[b-9tiaegb2u7] { color: var(--neutral-foreground-hint, #adadad); }
.pb-alloc__sum--ok[b-9tiaegb2u7]    { color: var(--success, #6cc070); }
.pb-alloc__sum--over[b-9tiaegb2u7]  { color: var(--error, #f1707b); }

.pb-alloc__bar[b-9tiaegb2u7] {
    display: flex;
    gap: 2px;
    height: 8px;
    border-radius: 4px;
    overflow: hidden;
    background: var(--neutral-fill-secondary-rest, #242424);
}
.pb-alloc__seg[b-9tiaegb2u7] { height: 100%; }

/* parts so far */
.pb-list[b-9tiaegb2u7] {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.pb-empty[b-9tiaegb2u7] {
    padding: 12px 0;
    text-align: center;
    color: var(--neutral-foreground-hint, #8a8a8a);
    font-size: var(--type-ramp-base-font-size, 13px);
}
.pb-row[b-9tiaegb2u7] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 12px;
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-divider-rest, #2b2b2b);
    border-radius: calc(var(--control-corner-radius, 4) * 1px);
    background: var(--neutral-layer-1, #1f1f1f);
}
.pb-row__no[b-9tiaegb2u7] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 5px;
    background: var(--accent, #FF7A1A);
    color: var(--accent-foreground-rest, #fff);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    flex: none;
}
.pb-row__t[b-9tiaegb2u7] {
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}
.pb-row__dest[b-9tiaegb2u7] {
    flex: 1;
    color: var(--neutral-foreground-rest, #e0e0e0);
}
.pb-row__x[b-9tiaegb2u7] {
    border: none;
    background: transparent;
    color: var(--neutral-foreground-hint, #8a8a8a);
    cursor: pointer;
    font-size: 13px;
    width: 24px;
    height: 24px;
    border-radius: 4px;
    flex: none;
}
.pb-row__x:hover[b-9tiaegb2u7] {
    background: var(--neutral-fill-stealth-hover, #2e2e2e);
    color: var(--neutral-foreground-rest, #fff);
}

/* add a part */
.pb-add[b-9tiaegb2u7] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.pb-dests[b-9tiaegb2u7] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}
.pb-dest[b-9tiaegb2u7] {
    height: 32px;
    padding: 0 12px;
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-rest, #494949);
    border-radius: calc(var(--control-corner-radius, 4) * 1px);
    background: transparent;
    color: var(--neutral-foreground-rest, #fff);
    font-family: var(--body-font, "Segoe UI Variable", "Segoe UI", sans-serif);
    font-size: var(--type-ramp-base-font-size, 13px);
    cursor: pointer;
    transition: background-color .08s ease, border-color .08s ease;
}
.pb-dest:hover[b-9tiaegb2u7] { background: var(--neutral-fill-stealth-hover, #2e2e2e); }
.pb-dest.is-selected[b-9tiaegb2u7] {
    background: var(--accent-soft, rgba(255,122,26,.16));
    border-color: var(--accent, #FF7A1A);
}
.pb-add__row[b-9tiaegb2u7] {
    display: flex;
    align-items: flex-end;
    gap: 10px;
}
/* /Features/Production/Production.razor.rz.scp.css */
/* Production.razor.css — page wrapper only.
   Layout is FluentGrid/FluentStack; each widget carries its own scoped styles. */

.production[b-dyq78w3mgy] {
    padding: 8px 4px;
}
/* /Features/Production/ProductionHeader.razor.rz.scp.css */
/* ProductionHeader.razor.css — scoped styles.
   Consumes app.css tokens (--accent, --bg-card, --border, FluentUI neutral
   layers, success/error) with fallbacks so it stays sane without them and
   follows the theme/accent automatically. */

.prod-head[b-dxxko7z7ce] {
    display: grid;
    grid-template-columns: auto 1fr auto auto;
    gap: 18px;
    align-items: center;
    padding: 15px 20px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: linear-gradient(180deg, rgba(255,122,26,.10), rgba(255,122,26,.02));
}

.prod-head__mark[b-dxxko7z7ce] {
    height: 30px;
    width: auto;
    display: block;
}

/* the two header actions (Despatch + New job) share the last grid cell */
.prod-head__actions[b-dxxko7z7ce] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.prod-head__titles[b-dxxko7z7ce] {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    min-width: 0;
}

.prod-head__name[b-dxxko7z7ce] {
    font-size: var(--type-ramp-plus-2-font-size, 20px);
    font-weight: 600;
    letter-spacing: .2px;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.prod-head__sub[b-dxxko7z7ce] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* ---- status pill ---- */
.state-pill[b-dxxko7z7ce] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    height: 30px;
    padding: 0 13px;
    border-radius: 16px;
    font-size: 12.5px;
    font-weight: 600;
    letter-spacing: .2px;
    text-transform: uppercase;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    background: var(--neutral-fill-secondary-rest, #212429);
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.state-pill__dot[b-dxxko7z7ce] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--neutral-foreground-hint, #8b8e95);
}

.state-running[b-dxxko7z7ce] {
    color: #bfe6c2;
    border-color: rgba(108,192,112,.35);
    background: rgba(108,192,112,.15);
}
.state-running .state-pill__dot[b-dxxko7z7ce] {
    background: var(--success, #6cc070);
    box-shadow: 0 0 0 3px rgba(108,192,112,.15);
    animation: prodHeadPulse-b-dxxko7z7ce 2s infinite;
}

.state-idle[b-dxxko7z7ce] {
    color: var(--neutral-foreground-rest, #c6c8cd);
}
.state-idle .state-pill__dot[b-dxxko7z7ce] {
    background: var(--neutral-foreground-hint, #8b8e95);
}

.state-fault[b-dxxko7z7ce] {
    color: #f6b6b6;
    border-color: rgba(238,90,90,.40);
    background: rgba(238,90,90,.15);
}
.state-fault .state-pill__dot[b-dxxko7z7ce] {
    background: var(--error, #ee5a5a);
    box-shadow: 0 0 0 3px rgba(238,90,90,.15);
    animation: prodHeadPulse-b-dxxko7z7ce 1s infinite;
}

@keyframes prodHeadPulse-b-dxxko7z7ce {
    0%, 100% { opacity: 1; }
    50% { opacity: .45; }
}

@media (prefers-reduced-motion: reduce) {
    .state-pill__dot[b-dxxko7z7ce] { animation: none !important; }
}

@media (max-width: 720px) {
    .prod-head[b-dxxko7z7ce] { grid-template-columns: auto 1fr auto; }
    .prod-head .state-pill[b-dxxko7z7ce] { display: none; }
}
/* /Features/Production/RapAdjuster.razor.rz.scp.css */
/* RapAdjuster.razor.css — scoped styles for the mixtime dynamic-RAP card. Same card shell and tokens
   as MixProgress so it follows the theme/accent. The slider is a native range input (precise stepped
   control with live oninput); everything else is Fluent. */

.rap-adj[b-6qs5vkac1n] {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 16px 18px;
    border: 1px solid var(--border, rgba(255,255,255,.09));
    border-radius: var(--r-lg, 7px);
    background: var(--bg-card, #1a1d22);
}

.rap-adj__head[b-6qs5vkac1n] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.rap-adj__title[b-6qs5vkac1n] {
    font-size: var(--type-ramp-plus-1-font-size, 16px);
    font-weight: 600;
    letter-spacing: .2px;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.rap-adj__pending[b-6qs5vkac1n] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .3px;
    padding: 2px 9px;
    border-radius: 12px;
    color: #f3d9a8;
    border: 1px solid rgba(232,168,72,.45);
    background: rgba(232,168,72,.16);
}

.rap-adj__empty[b-6qs5vkac1n] {
    margin: 0;
    font-size: var(--type-ramp-base-font-size, 14px);
    color: var(--neutral-foreground-hint, #8b8e95);
}

.rap-adj__state[b-6qs5vkac1n] {
    padding: 12px;
    text-align: center;
}

/* ---- readout: current RAP + resulting pen ---- */
.rap-adj__readout[b-6qs5vkac1n] {
    display: flex;
    align-items: baseline;
    gap: 32px;
}

.rap-adj__value-group[b-6qs5vkac1n],
.rap-adj__pen-group[b-6qs5vkac1n] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.rap-adj__value[b-6qs5vkac1n] {
    font-size: var(--type-ramp-plus-3-font-size, 24px);
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.rap-adj__unit[b-6qs5vkac1n] {
    font-size: var(--type-ramp-base-font-size, 14px);
    font-weight: 600;
    margin-left: 2px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.rap-adj__pen[b-6qs5vkac1n] {
    font-size: var(--type-ramp-plus-2-font-size, 20px);
    font-weight: 600;
    line-height: 1.2;
    font-variant-numeric: tabular-nums;
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.rap-adj__value-label[b-6qs5vkac1n] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    text-transform: uppercase;
    letter-spacing: .4px;
    color: var(--neutral-foreground-hint, #8b8e95);
}

/* ---- slider (native range, accent-themed) ---- */
.rap-adj__slider[b-6qs5vkac1n] {
    -webkit-appearance: none;
    appearance: none;
    width: 100%;
    height: 6px;
    border-radius: 3px;
    background: var(--neutral-fill-secondary-rest, #2a2e35);
    outline: none;
    cursor: pointer;
}

.rap-adj__slider[b-6qs5vkac1n]::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--accent-fill-rest, var(--accent, #FF7A1A));
    border: 2px solid var(--bg-card, #1f1f1f);
    cursor: pointer;
}

.rap-adj__slider[b-6qs5vkac1n]::-moz-range-thumb {
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--accent-fill-rest, var(--accent, #FF7A1A));
    border: 2px solid var(--bg-card, #1f1f1f);
    cursor: pointer;
}

.rap-adj__slider:focus-visible[b-6qs5vkac1n] {
    box-shadow: 0 0 0 2px var(--accent-fill-rest, var(--accent, #FF7A1A));
}

.rap-adj__scale[b-6qs5vkac1n] {
    display: flex;
    justify-content: space-between;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
    font-variant-numeric: tabular-nums;
}

.rap-adj__default[b-6qs5vkac1n] {
    color: var(--neutral-foreground-rest, #c6c8cd);
}

.rap-adj__actions[b-6qs5vkac1n] {
    display: flex;
    gap: 10px;
}
/* /Features/Production/RecipeList.razor.rz.scp.css */
/* RecipeList.razor.css — scoped styles for the wrapper's own chrome only.
   The list, search, options and chips are all styled by RecipeListBox.razor.css;
   this file just covers the loading / error states the wrapper adds. Same FluentUI
   neutral-layer + type-ramp tokens as RecipeListBox, with sane fallbacks. */

.recipe-list[b-r40ktwt8lt] {
    display: block;
}

/* loading state — mirrors the listbox shell so the drawer doesn't jump on load */
.recipe-list__state[b-r40ktwt8lt] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: var(--spacingVerticalL, 18px) var(--spacingHorizontalM, 16px);
    background: var(--neutral-layer-1, #1f1f1f);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-divider-rest, #2b2b2b);
    border-radius: calc(var(--layer-corner-radius, 8) * 1px);
    color: var(--neutral-foreground-hint, #8a8a8a);
    font-size: var(--type-ramp-base-font-size, 13px);
    font-family: var(--body-font, "Segoe UI Variable", "Segoe UI", sans-serif);
}
/* /Features/Production/RecipeOverrides/RecipeOverrideBanner.razor.rz.scp.css */
/* RecipeOverrideBanner — prominent warning strip. Fluent tokens with literal fallbacks. */

.ovr-banner[b-vwz7qrg4qn] {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 12px 16px;
    margin-bottom: 12px;
    border: 1px solid var(--warning, #F0B429);
    border-left-width: 4px;
    border-radius: 6px;
    background: color-mix(in srgb, var(--warning, #F0B429) 12%, transparent);
}

.ovr-banner__body[b-vwz7qrg4qn] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
    flex: 1;
}

.ovr-banner__title[b-vwz7qrg4qn] {
    font-size: var(--type-ramp-base-font-size, 14px);
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
}

.ovr-banner__list[b-vwz7qrg4qn] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.ovr-banner__item[b-vwz7qrg4qn] {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
}

.ovr-banner__recipe[b-vwz7qrg4qn] {
    font-weight: 600;
    color: var(--neutral-foreground-rest, #ECECEC);
    min-width: 90px;
}

.ovr-banner__fields[b-vwz7qrg4qn] {
    color: var(--neutral-foreground-hint, #8b8e95);
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /Features/Production/RecipeOverrides/RecipeOverridePanel.razor.rz.scp.css */
/* RecipeOverridePanel — slide-over editor layout. */

.ovr-panel[b-uam5czw8bu] {
    display: flex;
    flex-direction: column;
    gap: 18px;
    padding: 4px 2px;
}

.ovr-panel__intro[b-uam5czw8bu] {
    margin: 0;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
    line-height: 1.4;
}

.ovr-panel__group[b-uam5czw8bu] {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.ovr-panel__group-title[b-uam5czw8bu] {
    font-weight: 700;
    font-size: 11px;
    letter-spacing: .4px;
    text-transform: uppercase;
    color: var(--neutral-foreground-hint, #8b8e95);
}

.ovr-row[b-uam5czw8bu] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.ovr-row__label[b-uam5czw8bu] {
    flex: 1;
    min-width: 0;
    font-size: var(--type-ramp-base-font-size, 14px);
    color: var(--neutral-foreground-rest, #ECECEC);
}

.ovr-row__recipe[b-uam5czw8bu] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8b8e95);
    white-space: nowrap;
}

.ovr-panel__errors[b-uam5czw8bu] {
    margin: 0;
    padding-left: 18px;
}
/* /Features/Production/VersionPicker.razor.rz.scp.css */
/* VersionPicker.razor.css — scoped styles.
   Version pills mirror the RecipeListBox status-chip language (accent select, neutral
   stroke, tabular figures), on the same FluentUI tokens with sane fallbacks. */

.version-picker[b-ot49lyf990] {
    display: flex;
    flex-direction: column;
    gap: var(--spacingVerticalS, 8px);
}

.vp-label[b-ot49lyf990] {
    text-transform: uppercase;
    letter-spacing: .4px;
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    font-weight: 700;
    color: var(--neutral-foreground-hint, #8a8a8a);
}

.vp-pills[b-ot49lyf990] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.vp-pill[b-ot49lyf990] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    height: 34px;
    padding: 0 12px;
    background: var(--neutral-fill-stealth-rest, transparent);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-rest, #494949);
    border-radius: calc(var(--control-corner-radius, 4) * 1px);
    color: var(--neutral-foreground-rest, #fff);
    font-family: var(--body-font, "Segoe UI Variable", "Segoe UI", sans-serif);
    font-size: var(--type-ramp-base-font-size, 13.5px);
    cursor: pointer;
    transition: background-color .08s ease, border-color .08s ease;
}
.vp-pill:hover:not(.is-disabled)[b-ot49lyf990] { background: var(--neutral-fill-stealth-hover, #2e2e2e); }
.vp-pill.is-selected[b-ot49lyf990] {
    background: var(--accent-soft, rgba(255,122,26,.16));
    border-color: var(--accent, #FF7A1A);
}
.vp-pill.is-disabled[b-ot49lyf990] { opacity: .5; cursor: not-allowed; }

.vp-pill__v[b-ot49lyf990] {
    font-weight: 600;
    letter-spacing: .1px;
    font-variant-numeric: tabular-nums;
}

.vp-pill__st[b-ot49lyf990] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: var(--type-ramp-minus-1-font-size, 11.5px);
    font-weight: 600;
    color: var(--neutral-foreground-hint, #adadad);
}
.vp-pill__st[b-ot49lyf990]::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--neutral-foreground-hint, #9a9a9a);
}
.vp-pill__st--accent[b-ot49lyf990]::before  { background: var(--accent, #FF7A1A); }
.vp-pill__st--warning[b-ot49lyf990]::before { background: var(--warning, #f0b429); }
.vp-pill__st--neutral[b-ot49lyf990]::before { background: var(--neutral-foreground-hint, #9a9a9a); }

.vp-empty[b-ot49lyf990] {
    padding: 10px 0;
    color: var(--neutral-foreground-hint, #8a8a8a);
    font-size: var(--type-ramp-base-font-size, 13px);
}
/* /Features/Recipes/RecipeList.razor.rz.scp.css */
/* RecipeList.razor.css — page layout only.
   Fluent UI handles the rest; the listbox carries its own scoped styles. */

.recipe-list-page[b-smu3rcjaer] {
    padding: 8px 4px;
}

.recipe-list-page__list[b-smu3rcjaer] {
    max-width: 520px;
}
/* /Shared/Recipes/RecipeListBox.razor.rz.scp.css */
/* RecipeListBox.razor.css — scoped styles.
   Consumes YOUR app.css tokens (--accent, --accent-soft, FluentUI neutral
   layers, type ramp, spacing). Fallback values keep it sane if a token is
   missing. Because it reads var(--accent), it follows your theme/accent
   automatically — nothing is overridden. */

.recipe-listbox[b-nh344osvpp] {
    background: var(--neutral-layer-1, #1f1f1f);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-divider-rest, #333);
    border-radius: calc(var(--layer-corner-radius, 8) * 1px);
    overflow: hidden;
    font-family: var(--body-font, "Segoe UI Variable", "Segoe UI", sans-serif);
    box-shadow: 0 1.6px 3.6px rgba(0,0,0,.32), 0 .3px .9px rgba(0,0,0,.28);
}

.rlb-head[b-nh344osvpp] {
    display: flex; align-items: baseline; justify-content: space-between;
    padding: var(--spacingVerticalM, 12px) var(--spacingHorizontalM, 16px) var(--spacingVerticalS, 8px);
}
.rlb-head__label[b-nh344osvpp] {
    font-size: var(--type-ramp-base-font-size, 14px);
    font-weight: 600; color: var(--neutral-foreground-rest, #e0e0e0);
}
.rlb-head__count[b-nh344osvpp] {
    font-size: var(--type-ramp-minus-1-font-size, 12px);
    color: var(--neutral-foreground-hint, #8a8a8a); font-variant-numeric: tabular-nums;
}

/* search — FluentSearch handles its own field styling (theme + corner radius);
   this is just the spacing container. */
.rlb-search[b-nh344osvpp] {
    margin: 0 var(--spacingHorizontalM, 16px) var(--spacingVerticalS, 8px);
}

/* scroll region — the height fix */
.rlb-list[b-nh344osvpp] {
    overflow-y: auto; padding: 4px; outline: none;
    scrollbar-width: thin; scrollbar-color: var(--neutral-stroke-rest, #4a4a4a) transparent;
}
.rlb-list:focus-visible[b-nh344osvpp] { box-shadow: inset 0 0 0 2px var(--accent, #FF7A1A); }
.rlb-list[b-nh344osvpp]::-webkit-scrollbar { width: 10px; }
.rlb-list[b-nh344osvpp]::-webkit-scrollbar-thumb { background: var(--neutral-stroke-rest, #454545); border-radius: 6px; border: 3px solid var(--neutral-layer-1, #1f1f1f); }
.rlb-list[b-nh344osvpp]::-webkit-scrollbar-thumb:hover { background: var(--neutral-stroke-hover, #565656); }
.rlb-empty[b-nh344osvpp] { padding: 28px 16px; text-align: center; color: var(--neutral-foreground-hint, #8a8a8a); font-size: var(--type-ramp-base-font-size, 13px); }

/* option row */
.rlb-option[b-nh344osvpp] {
    position: relative; display: flex; align-items: center; gap: 12px;
    border-radius: calc(var(--control-corner-radius, 4) * 1px); cursor: pointer;
    color: var(--neutral-foreground-rest, #fff);
    transition: background-color .08s ease;
}
.rlb-option__bar[b-nh344osvpp] {
    position: absolute; left: 0; top: 6px; bottom: 6px; width: 3px;
    border-radius: 0 3px 3px 0; background: transparent; transition: background-color .1s;
}
.rlb-option:hover[b-nh344osvpp], .rlb-option.is-active[b-nh344osvpp] { background: var(--neutral-fill-stealth-hover, #2e2e2e); }
.rlb-option.is-selected[b-nh344osvpp] { background: var(--accent-soft, rgba(255,122,26,.16)); }
.rlb-option.is-selected .rlb-option__bar[b-nh344osvpp] { background: var(--accent, #FF7A1A); }

.rlb-option__text[b-nh344osvpp] { min-width: 0; flex: 1; }
.rlb-option__code[b-nh344osvpp] {
    font-weight: 600; color: var(--neutral-foreground-rest, #fff); letter-spacing: .1px;
    font-variant-numeric: tabular-nums;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rlb-option__desc[b-nh344osvpp] { color: var(--neutral-foreground-hint, #adadad); overflow: hidden; text-overflow: ellipsis; }
.rlb-option__check[b-nh344osvpp] { flex: none; color: var(--accent, #FF7A1A); opacity: 0; transition: opacity .1s; }
.rlb-option.is-selected .rlb-option__check[b-nh344osvpp] { opacity: 1; }

.has-dividers .rlb-option:not(:last-child)[b-nh344osvpp]::after {
    content: ""; position: absolute; left: 14px; right: 14px; bottom: -1px;
    height: 1px; background: var(--neutral-stroke-divider-rest, #2b2b2b);
}

/* density */
.density-compact .rlb-option[b-nh344osvpp] { padding: 5px 12px; }
.density-compact .rlb-option__code[b-nh344osvpp] { font-size: var(--type-ramp-base-font-size, 13.5px); }
.density-compact .rlb-option__desc[b-nh344osvpp] { font-size: var(--type-ramp-minus-1-font-size, 12px); line-height: 1.35; white-space: nowrap; }

.density-cozy .rlb-option[b-nh344osvpp] { padding: 8px 14px; }
.density-cozy .rlb-option__code[b-nh344osvpp] { font-size: var(--type-ramp-plus-1-font-size, 15px); }
.density-cozy .rlb-option__desc[b-nh344osvpp] { font-size: var(--type-ramp-base-font-size, 13px); line-height: 1.4; margin-top: 2px; white-space: nowrap; }

.density-comfortable .rlb-option[b-nh344osvpp] { padding: 12px 16px; align-items: flex-start; }
.density-comfortable .rlb-option__bar[b-nh344osvpp] { top: 12px; bottom: 12px; }
.density-comfortable .rlb-option__code[b-nh344osvpp] { font-size: var(--type-ramp-plus-2-font-size, 16px); }
.density-comfortable .rlb-option__desc[b-nh344osvpp] {
    font-size: var(--type-ramp-base-font-size, 13.5px); line-height: 1.45; margin-top: 4px; white-space: normal;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
}

/* status chip */
.rlb-chip[b-nh344osvpp] {
    flex: none; display: inline-flex; align-items: center; gap: 6px;
    height: 22px; padding: 0 9px 0 8px; border-radius: 11px;
    font-size: var(--type-ramp-minus-1-font-size, 11.5px); font-weight: 600; letter-spacing: .1px;
    background: var(--neutral-fill-secondary-rest, #242424);
    border: calc(var(--stroke-width, 1) * 1px) solid var(--neutral-stroke-rest, #494949);
    color: var(--neutral-foreground-rest, #e0e0e0);
}
.rlb-chip__dot[b-nh344osvpp] { width: 6px; height: 6px; border-radius: 50%; background: var(--neutral-foreground-hint, #9a9a9a); }
.rlb-chip--success .rlb-chip__dot[b-nh344osvpp] { background: var(--success, #6cc070); }
.rlb-chip--warning .rlb-chip__dot[b-nh344osvpp] { background: var(--warning, #f0b429); }
.rlb-chip--neutral .rlb-chip__dot[b-nh344osvpp] { background: var(--neutral-foreground-hint, #9a9a9a); }
