/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────────────────
   HORIZON SHELL — sidebar + top bar (spec 029, US1)
   Tokens come from six18.css; light/dark switch via <html data-appearance>.
   ───────────────────────────────────────────────────────────────────────────── */

.hz-layout[b-ms61e5j75x] {
    display: flex;
    height: 100vh;
    background: var(--hz-bg);
    color: var(--hz-text);
    overflow: hidden;
}

/* ── Sidebar ─────────────────────────────────────────────────────────────────── */
/* 224px + zero horizontal padding: nav rows run edge to edge so the active item's gold
   rule sits flush against the sidebar edge, as in the mockup. */
.hz-sidebar[b-ms61e5j75x] {
    flex: 0 0 224px;
    width: 224px;
    display: flex;
    flex-direction: column;
    background: var(--hz-sidebar);
    border-right: 1px solid var(--hz-border);
    overflow-y: auto;
    z-index: 30;
}

.hz-brand[b-ms61e5j75x] {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1.15rem 1rem 1rem 1rem;
    border-bottom: 1px solid var(--hz-border);
    color: var(--hz-text);
    text-decoration: none;
}

/* Full 618 lockup, stacked as in the original logo (BrandLockup renders the mark
   inline so the digits' currentColor follows --hz-text in both modes). */
.hz-brand[b-ms61e5j75x]  .hz-lockup {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.45rem;
}

.hz-brand[b-ms61e5j75x]  .hz-lockup__mark {
    width: 8.75rem;
    height: auto;
}

.hz-brand[b-ms61e5j75x]  .hz-lockup__wordmark {
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.68rem;
    letter-spacing: 0.42em;
    text-indent: 0.42em;
    color: var(--hz-text);
}

.hz-nav[b-ms61e5j75x] {
    display: flex;
    flex-direction: column;
    gap: 0;
    padding: 0.5rem 0;
    flex: 1;
}

/* Re-homed nav items keep their original .botley-nav__link class (rendered both directly
   and by child components, so ::deep is required) — restyled here for a vertical sidebar. */
/* Nav items follow the approved mockup: quiet 500-weight labels at body size, a fixed
   icon gutter so the labels align, and a 2px gold rule on the active item rather than a
   heavy rounded bar. Spec 078 retuned these from the spec-029 shell, which ran a size and
   two weights heavier than the design. */
.hz-nav[b-ms61e5j75x]  .botley-nav__link {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.5rem 1rem;
    border-left: 2px solid transparent;
    color: var(--hz-text-muted);
    text-decoration: none;
    font-weight: 500;
    font-size: 0.93rem;
    background: transparent;
    border-top: none;
    border-right: none;
    border-bottom: none;
    width: 100%;
    text-align: left;
    cursor: pointer;
}

.hz-nav[b-ms61e5j75x]  .botley-nav__link:hover {
    color: var(--hz-text);
    background: rgba(255, 255, 255, 0.02);
}

:root[data-appearance="light"] .hz-nav[b-ms61e5j75x]  .botley-nav__link:hover {
    background: rgba(0, 0, 0, 0.03);
}

.hz-nav[b-ms61e5j75x]  .botley-nav__link.active {
    color: var(--hz-text);
    background: var(--hz-brand-soft);
    border-left-color: var(--hz-brand);
    font-weight: 600;
}

/* Icon gutter — fixed width so labels line up whether or not an item has an icon. */
.hz-nav[b-ms61e5j75x]  .botley-nav__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.15rem;
    flex: none;
    font-size: 1.05rem;
    line-height: 1;
    color: var(--hz-text-faint);
}

/* Radzen sizes .rzi at its own scale; pin it to the gutter so icons don't overpower
   the label they sit beside. */
.hz-nav[b-ms61e5j75x]  .botley-nav__icon .rzi {
    font-size: 1.05rem;
    line-height: 1;
    width: auto;
    height: auto;
}

.hz-nav[b-ms61e5j75x]  .botley-nav__link:hover .botley-nav__icon { color: var(--hz-text-muted); }
.hz-nav[b-ms61e5j75x]  .botley-nav__link.active .botley-nav__icon { color: var(--hz-brand); }

/* Trading sub-group (Order Stats dropdown): slot links indent to line up under the
   parent's label, past the icon gutter. */
.hz-nav[b-ms61e5j75x]  .trading-nav__slot {
    font-size: 0.86rem;
    padding-left: 2.85rem;
}

/* Chevron sits at the far end of the toggle row, away from the label. */
.hz-nav[b-ms61e5j75x]  .trading-nav__chevron {
    margin-left: auto;
    font-size: 0.75rem;
    color: var(--hz-text-faint);
}

/* Coinbase links live in their own labeled group, divided from the trading items above. */
.hz-nav[b-ms61e5j75x]  .hz-nav__section {
    display: flex;
    flex-direction: column;
    gap: 0;
    margin-top: 0.5rem;
    padding-top: 0.5rem;
    border-top: 1px solid var(--hz-border);
}

/* Collapse a role section whose child nav components rendered no links. six18.css carries
   the same rule globally, but the scoped `.hz-nav ::deep .hz-nav__section` above compiles
   to a higher-specificity selector and was silently overriding it — so a user saw headings
   for roles they don't hold (in Local mode, every remote-only group). Restated here at
   scoped specificity so it actually wins. */
.hz-nav[b-ms61e5j75x]  .hz-nav__section:not(:has(.botley-nav__link)) {
    display: none;
}

.hz-nav[b-ms61e5j75x]  .hz-nav__heading {
    padding: 0.6rem 1rem 0.3rem 1rem;
    font-family: var(--hz-font-display);
    font-size: 0.71rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    color: var(--hz-text-faint);
}

/* ── Main column ─────────────────────────────────────────────────────────────── */
.hz-main[b-ms61e5j75x] {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
}

/* Fixed 52px bar on the card surface, matching the mockup — the translucent bg the
   spec-029 shell used made the sidebar/topbar corner read as two different darks. */
.hz-topbar[b-ms61e5j75x] {
    position: sticky;
    top: 0;
    z-index: 20;
    display: flex;
    align-items: center;
    gap: 1rem;
    height: 52px;
    padding: 0 1.5rem;
    background: var(--hz-card);
    border-bottom: 1px solid var(--hz-border);
}

/* Appearance toggle (spec 037, FR-003) — crisp control, no pill. */
[b-ms61e5j75x] .hz-theme-toggle {
    font-size: 1rem;
    line-height: 1;
    padding: 0.4rem 0.6rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border-strong);
    background: var(--hz-card);
    color: var(--hz-text);
    cursor: pointer;
}

    [b-ms61e5j75x] .hz-theme-toggle:hover {
        border-color: var(--hz-brand);
        color: var(--hz-brand-strong);
    }

/* Page identity in the bar (spec 078) — before this the top bar was empty and the app
   had no consistent page-title pattern at all. Title comes from RouteTitleMap, or from
   a page's <PageHeading> override for dynamic routes. */
.hz-topbar__title[b-ms61e5j75x] {
    font-family: var(--hz-font-display);
    font-size: 1.07rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    color: var(--hz-text);
    margin: 0;
    white-space: nowrap;
}

.hz-topbar__crumb[b-ms61e5j75x] {
    font-family: var(--hz-font-mono);
    font-size: 0.79rem;
    color: var(--hz-text-faint);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.hz-topbar__spacer[b-ms61e5j75x] { flex: 1; }

/* Signed-in identity (Remote mode only). */
[b-ms61e5j75x] .hz-identity {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    min-width: 0;
}

[b-ms61e5j75x] .hz-identity__avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.65rem;
    height: 1.65rem;
    flex: none;
    border-radius: var(--hz-radius-badge);
    background: var(--hz-brand-gradient);
    color: var(--hz-on-brand);
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.68rem;
    letter-spacing: 0.02em;
}

[b-ms61e5j75x] .hz-identity__text {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    min-width: 0;
}

[b-ms61e5j75x] .hz-identity__name {
    font-size: 0.76rem;
    font-weight: 600;
    color: var(--hz-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 11rem;
}

[b-ms61e5j75x] .hz-identity__roles {
    font-family: var(--hz-font-mono);
    font-size: 0.6rem;
    color: var(--hz-text-faint);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 11rem;
}

/* Below tablet the bar keeps title + status only; breadcrumb and the identity text
   are the first things to go, the avatar stays as the account affordance. */
@media (max-width: 1100px) {
    .hz-topbar__crumb[b-ms61e5j75x] { display: none; }
    [b-ms61e5j75x] .hz-identity__text { display: none; }
}

@media (max-width: 700px) {
    .hz-topbar__title[b-ms61e5j75x] {
        overflow: hidden;
        text-overflow: ellipsis;
    }
}

.hz-nav-toggle[b-ms61e5j75x] {
    display: none;
    font-size: 1.25rem;
    line-height: 1;
    padding: 0.4rem 0.6rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border);
    background: var(--hz-card);
    color: var(--hz-text);
    cursor: pointer;
}

.hz-content[b-ms61e5j75x] {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow-x: hidden;
    overflow-y: auto;
    min-height: 0;
    padding: 0.5rem 1.5rem 2rem 1.5rem;
}

/* ── Mobile scrim (off-canvas sidebar) ───────────────────────────────────────── */
.hz-scrim[b-ms61e5j75x] {
    display: none;
    position: fixed;
    inset: 0;
    border: none;
    background: rgba(0, 0, 0, 0.55);
    z-index: 25;
}

@media (max-width: 900px) {
    .hz-sidebar[b-ms61e5j75x] {
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        transform: translateX(-100%);
        transition: transform 0.2s ease;
        box-shadow: var(--hz-shadow-card);
    }

    .hz-layout--nav-open .hz-sidebar[b-ms61e5j75x] { transform: translateX(0); }
    .hz-layout--nav-open .hz-scrim[b-ms61e5j75x] { display: block; }

    .hz-nav-toggle[b-ms61e5j75x] { display: inline-flex; }
}

/* ── Error UI ─────────────────────────────────────────────────────────────────
   Was a hard-coded lightyellow bar with `color-scheme: light only`, which fought the
   dark shell and duplicated a token-based rule in app.css. Now on tokens: it reads as
   a deliberate danger banner in both appearances. */
#blazor-error-ui[b-ms61e5j75x] {
    background: var(--hz-danger-soft);
    color: var(--hz-text);
    border-top: 2px solid var(--hz-danger);
    bottom: 0;
    box-sizing: border-box;
    display: none;
    left: 0;
    font-size: 0.82rem;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
    backdrop-filter: blur(6px);
}

#blazor-error-ui .reload[b-ms61e5j75x] {
    color: var(--hz-brand-strong);
    font-weight: 600;
}

    #blazor-error-ui .dismiss[b-ms61e5j75x] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/SafetyStatusBadge.razor.rz.scp.css */
.safety-badge[b-00yk578had] {
    display: inline-flex;
    align-items: center;
    min-height: 2.4rem;
    padding: 0 0.95rem;
    border-radius: var(--hz-radius-badge);
    font-weight: 700;
    text-decoration: none;
    letter-spacing: 0.02em;
}

.safety-badge--on[b-00yk578had] {
    border: 1px solid color-mix(in srgb, var(--hz-success) 45%, transparent);
    background: color-mix(in srgb, var(--hz-success) 14%, transparent);
    color: var(--hz-success);
}

.safety-badge--off[b-00yk578had] {
    border: 1px solid color-mix(in srgb, var(--hz-danger) 55%, transparent);
    background: color-mix(in srgb, var(--hz-danger) 14%, transparent);
    color: var(--hz-danger);
    animation: safety-badge-pulse-b-00yk578had 1.6s ease-in-out infinite;
}

.safety-badge--unavailable[b-00yk578had] {
    border: 1px solid color-mix(in srgb, var(--hz-warning) 45%, transparent);
    background: color-mix(in srgb, var(--hz-warning) 14%, transparent);
    color: var(--hz-warning);
}

@keyframes safety-badge-pulse-b-00yk578had {
    0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--hz-danger) 35%, transparent); }
    50% { box-shadow: 0 0 0 6px transparent; }
}
/* /Components/Layout/TradingNav.razor.rz.scp.css */
.trading-nav__group[b-a4otp5bmr4] {
    position: relative;
    display: inline-flex;
}

.trading-nav__toggle[b-a4otp5bmr4] {
    cursor: pointer;
    font: inherit;
}

.trading-nav__dropdown[b-a4otp5bmr4] {
    position: absolute;
    top: calc(100% + 0.4rem);
    left: 0;
    z-index: 30;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    min-width: 16rem;
    max-height: 24rem;
    overflow-y: auto;
    padding: 0.6rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-card);
    background: var(--hz-raised);
    box-shadow: var(--hz-shadow-overlay);
}

.trading-nav__dropdown[b-a4otp5bmr4]  .trading-nav__slot {
    border-radius: var(--hz-radius-control);
}
/* /Components/Pages/Admin/BlockoutKeywords.razor.rz.scp.css */
/* Spec 078 — page-scoped layout for /admin/blockout-keywords.
   Shapes come from six18-ui.css (.hz-panel / .hz-table / .hz-field); only genuinely
   page-specific layout lives here. Colors are tokens only, so light mode follows. */

/* ── Add-keyword form row ────────────────────────────────────────────────────── */
.bk-form[b-ktgexk6uic] {
    display: flex;
    align-items: flex-end;
    gap: var(--hz-space-3) var(--hz-space-4);
    flex-wrap: wrap;
}

.bk-hint[b-ktgexk6uic] {
    margin: var(--hz-space-3) 0 0 0;
    font-size: 0.72rem;
    line-height: 1.45;
    color: var(--hz-text-faint);
}

/* ── Rule rows ───────────────────────────────────────────────────────────────── */
/* The "inert" marker rides beside the kind badge, never on its own line. */
.bk-tag[b-ktgexk6uic] {
    margin-left: var(--hz-space-1);
}

.bk-rowactions[b-ktgexk6uic] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--hz-space-1);
    flex-wrap: nowrap;
}

/* ── Loading ─────────────────────────────────────────────────────────────────── */
.bk-loading[b-ktgexk6uic] {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--hz-space-6);
}
/* /Components/Pages/Admin/Contracts.razor.rz.scp.css */
/* Contract ids — page-scoped layout only; every shape comes from six18-ui.css.
   Replaces the old inline <style> block (raw hex, Radzen fallbacks, no light mode). */

/* Ids and diffs stay lined up column to column. */
.contract-admin__diff[b-0aw9evam3o] {
    font-variant-numeric: tabular-nums;
}

.contract-admin__muted[b-0aw9evam3o] {
    color: var(--hz-text-faint);
    font-size: 0.74rem;
}

/* The inline editor lives in a full-width row of the mappings table: give it a calm
   surface of its own and suppress the table's row-hover tint under it. */
.hz-table tbody tr.contract-admin__editrow > td[b-0aw9evam3o] {
    background: var(--hz-raised);
    padding: var(--hz-space-3) var(--hz-space-4);
}

.contract-admin__panel[b-0aw9evam3o] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
    max-width: 44rem;
}

.contract-admin__input[b-0aw9evam3o] {
    width: 12rem;
}

.contract-admin__actions[b-0aw9evam3o] {
    display: flex;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
}

/* Confirm/cancel keep their original left-to-right order, so the foot left-aligns. */
.contract-admin__foot[b-0aw9evam3o] {
    justify-content: flex-start;
    flex-wrap: wrap;
}

/* Confirmation body: facts grid, then the guardrail copy, stacked. */
.contract-admin__confirm[b-0aw9evam3o] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
}

/* The value that is about to be written — the one place gold is earned here. */
.contract-admin__new[b-0aw9evam3o] {
    color: var(--hz-brand-strong);
    font-weight: 600;
}

.contract-admin__exposure[b-0aw9evam3o] {
    margin: var(--hz-space-2) 0 0 0;
    padding-left: 1.1rem;
}
/* /Components/Pages/Admin/MatrixUpdate.razor.rz.scp.css */
/* Guided matrix update — page-scoped layout only; every shape comes from six18-ui.css.
   Replaces the old inline <style> block (raw hex, Radzen fallbacks, no light mode). */

/* ── Stepper ─────────────────────────────────────────────────────────────────── */

.matrix-stepper[b-p0qpqt6jrs] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.matrix-step__text[b-p0qpqt6jrs] {
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
    min-width: 0;
}

.matrix-step__sub[b-p0qpqt6jrs] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.64rem;
    color: var(--hz-text-faint);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hz-step.is-active .matrix-step__sub[b-p0qpqt6jrs] {
    color: var(--hz-brand-strong);
}

/* ── Sheet paste ─────────────────────────────────────────────────────────────── */

.matrix-paste[b-p0qpqt6jrs] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

.matrix-paste__input[b-p0qpqt6jrs] {
    width: 100%;
    min-height: 3.6rem;
    font-family: var(--hz-font-mono);
    font-size: 0.74rem;
    white-space: pre;
}

.matrix-paste__foot[b-p0qpqt6jrs] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
}

.matrix-paste__hint[b-p0qpqt6jrs] {
    flex: 1 1 22rem;
    font-size: 0.74rem;
    line-height: 1.45;
    color: var(--hz-text-faint);
}

/* ── Row list (the responsive editor — no horizontal scrolling at any width) ──── */

.matrix-rows[b-p0qpqt6jrs] {
    display: flex;
    flex-direction: column;
}

.matrix-rows__empty[b-p0qpqt6jrs] {
    padding: var(--hz-space-4);
}

.matrix-rows__item[b-p0qpqt6jrs] {
    border-bottom: 1px solid var(--hz-border);
}

.matrix-rows__item:last-child[b-p0qpqt6jrs] {
    border-bottom: none;
}

.matrix-rows__item--open[b-p0qpqt6jrs] {
    background: var(--hz-raised);
}

.matrix-rows__head[b-p0qpqt6jrs] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    padding: 0.35rem 0.85rem;
}

.matrix-rows__toggle[b-p0qpqt6jrs] {
    flex: 1;
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    background: none;
    border: none;
    cursor: pointer;
    padding: 0.2rem 0;
    text-align: left;
    color: var(--hz-text-muted);
    font-family: var(--hz-font);
    font-size: 0.78rem;
    min-width: 0;
}

.matrix-rows__toggle:hover[b-p0qpqt6jrs] {
    color: var(--hz-text);
}

.matrix-rows__tf[b-p0qpqt6jrs] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    color: var(--hz-text);
    min-width: 3.2rem;
}

.matrix-rows__meta[b-p0qpqt6jrs] {
    font-size: 0.7rem;
    color: var(--hz-text-faint);
}

.matrix-rows__chev[b-p0qpqt6jrs] {
    margin-left: auto;
    color: var(--hz-text-faint);
}

/* ── Expanded field grid ─────────────────────────────────────────────────────── */

.matrix-fields[b-p0qpqt6jrs] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
    gap: var(--hz-space-2) var(--hz-space-3);
    padding: var(--hz-space-3) 0.85rem var(--hz-space-4);
    border-top: 1px solid var(--hz-border);
}

.matrix-fields__cell[b-p0qpqt6jrs] {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    min-width: 0;
}

.matrix-fields__label[b-p0qpqt6jrs] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.matrix-fields__input[b-p0qpqt6jrs] {
    width: 100%;
}

.matrix-fields__input:disabled[b-p0qpqt6jrs] {
    opacity: 0.45;
    cursor: not-allowed;
}

/* ── Add timeframe / wizard foot ─────────────────────────────────────────────── */

.matrix-add[b-p0qpqt6jrs] {
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: var(--hz-space-2);
}

.matrix-add__label[b-p0qpqt6jrs] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.matrix-add__hint[b-p0qpqt6jrs] {
    flex: 1 1 18rem;
    font-size: 0.74rem;
    line-height: 1.45;
    color: var(--hz-text-faint);
}

.matrix-wizfoot[b-p0qpqt6jrs] {
    align-items: center;
}

/* Destructive/primary actions keep the pre-redesign left-to-right order (see the
   comment beside each foot in the page), so these feet left-align. */
.matrix-foot[b-p0qpqt6jrs] {
    justify-content: flex-start;
    flex-wrap: wrap;
}

/* ── Confirmation & diff ─────────────────────────────────────────────────────── */

.matrix-confirm[b-p0qpqt6jrs] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
}

.matrix-diff[b-p0qpqt6jrs] {
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    overflow: auto;
}

/* Cell-level diff language: the outgoing value is struck through, the incoming one
   carries the accent. Gold here marks "about to be written", not a status. */
.hz-table td.matrix-diff__old[b-p0qpqt6jrs] {
    color: var(--hz-text-faint);
    text-decoration: line-through;
}

.hz-table td.matrix-diff__new[b-p0qpqt6jrs] {
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
    font-weight: 500;
}

.matrix-ack[b-p0qpqt6jrs] {
    display: flex;
    align-items: flex-start;
    gap: var(--hz-space-2);
    font-size: 0.8rem;
    color: var(--hz-text);
    line-height: 1.45;
    cursor: pointer;
}

/* ── Run detail / basket ─────────────────────────────────────────────────────── */

.matrix-subhead[b-p0qpqt6jrs] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
    padding: var(--hz-space-3) 1rem var(--hz-space-2);
}

.matrix-basket__note[b-p0qpqt6jrs],
.matrix-run__note[b-p0qpqt6jrs] {
    border-top: 1px solid var(--hz-border);
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

.matrix-run__backups[b-p0qpqt6jrs] {
    font-size: 0.75rem;
    overflow-wrap: anywhere;
}

/* ── History detail row ──────────────────────────────────────────────────────── */

/* Direct child only — the detail cell hosts its own .hz-table, which must keep the
   shared table's own padding and diff tinting. */
.hz-table tbody tr.matrix-history__detailrow > td[b-p0qpqt6jrs] {
    background: var(--hz-raised);
    padding: var(--hz-space-3) var(--hz-space-4);
}

.matrix-history__detail[b-p0qpqt6jrs] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

.matrix-history__detail .matrix-subhead[b-p0qpqt6jrs] {
    padding: 0;
}

/* Screen-reader-only column header for the expand control. */
.matrix-sr-only[b-p0qpqt6jrs] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
/* /Components/Pages/Admin/Sessions.razor.rz.scp.css */
/* Sessions & Ops — page-scoped layout only; every shape comes from six18-ui.css. */

/* User agents are long and low-value: one line, ellipsised, full text on hover. */
.admin-sessions__ua[b-cmer4a7ndp] {
    max-width: 20rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--hz-text-faint);
    font-size: 0.72rem;
}
/* /Components/Pages/Admin/Users.razor.rz.scp.css */
/* Users — page-scoped layout only; every shape comes from six18-ui.css. */

/* Provisioning row: fields sit on one line and wrap as a group, bottom-aligned so the
   Provision button lines up with the inputs rather than the labels. */
.admin-users__form[b-m04tqkdip3] {
    display: flex;
    align-items: flex-end;
    flex-wrap: wrap;
    gap: var(--hz-space-3);
}

/* The one-time pairing token: full value visible, wrapping anywhere so it is copyable. */
.admin-users__token[b-m04tqkdip3] {
    flex: 1;
    min-width: 0;
}

.admin-users__token-value[b-m04tqkdip3] {
    display: block;
    margin-top: var(--hz-space-1);
    font-family: var(--hz-font-mono);
    font-size: 0.75rem;
    color: var(--hz-text);
    word-break: break-all;
}

/* Role chips wrap inside their grid cell instead of clipping. */
.admin-users__roles[b-m04tqkdip3] {
    display: inline-flex;
    flex-wrap: wrap;
    gap: var(--hz-space-1);
}

/* Object ids are long and rarely read in full — keep them from stretching the column. */
.admin-users__oid[b-m04tqkdip3] {
    font-size: 0.72rem;
    color: var(--hz-text-muted);
}
/* /Components/Pages/Alerts.razor.rz.scp.css */
/* Alerts — page-specific bits only; everything else comes from six18-ui.css. */

/* Timestamps stay mono/tabular inside the Radzen cell. */
.alerts-when[b-dmn9ivk443] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

/* Alert text is prose, not data — opt out of the global mono cell treatment. */
.alerts-msg[b-dmn9ivk443] {
    font-family: var(--hz-font);
    color: var(--hz-text);
    line-height: 1.45;
}

.alerts-mail[b-dmn9ivk443] {
    color: var(--hz-success);
    font-size: 0.95rem;
}

/* Notifications panel (margin threshold + push devices). */
.alerts-notify[b-dmn9ivk443] {
    margin-bottom: 1rem;
    padding: 0.85rem 1rem;
}

.alerts-notify__head[b-dmn9ivk443] {
    display: flex;
    align-items: baseline;
    gap: 0.75rem;
    margin-bottom: 0.75rem;
}

.alerts-notify__title[b-dmn9ivk443] {
    font-weight: 600;
    color: var(--hz-text);
}

.alerts-notify__body[b-dmn9ivk443] {
    display: flex;
    flex-wrap: wrap;
    gap: 2rem;
}

.alerts-notify__block[b-dmn9ivk443] {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    min-width: 260px;
}

.alerts-notify__label[b-dmn9ivk443] {
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--hz-text-dim, var(--hz-text));
}

.alerts-notify__row[b-dmn9ivk443] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    flex-wrap: wrap;
}

.alerts-notify__error[b-dmn9ivk443] {
    color: var(--hz-danger);
}

.alerts-notify__devices[b-dmn9ivk443] {
    list-style: none;
    margin: 0.25rem 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.alerts-notify__devices li[b-dmn9ivk443] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
}

.alerts-notify__device-name[b-dmn9ivk443] {
    color: var(--hz-text);
}

/* Left status accent on unacknowledged rows. The marker class lives on the first cell's own
   span (see Alerts.razor); :has() lifts it to the row so the accent tracks the row even
   though the grid renders the <tr>. ::deep crosses the grid component's scope boundary. */
.alerts-page[b-dmn9ivk443]  tr:has(.alerts-when.is-unacked) td:first-child {
    box-shadow: inset 2px 0 0 var(--hz-warning);
}

.alerts-page[b-dmn9ivk443]  tr:has(.alerts-when.is-critical) td:first-child {
    box-shadow: inset 2px 0 0 var(--hz-danger);
}
/* /Components/Pages/Backtest.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────────────────
   BACKTEST WORKSPACE (spec 078)

   Layout: sticky config bar → slim queue strip → [left config rail | main column].
   The main column carries the summary stat strip, the Summary section, and the
   Results / Chart split.

   Everything here is presentation. Tokens only — the app has a working light
   mode and a hard-coded hex breaks it.
   ───────────────────────────────────────────────────────────────────────────── */

.backtest-page[b-zyb425mgyw] {
    /* Horizon token mapping (029): the workspace palette follows the active theme —
       light on light, dark on dark — via the shared tokens. BacktestDatePicker reads
       --backtest-muted off this element, so the alias block has to stay. */
    --backtest-bg: var(--hz-bg);
    --backtest-panel: var(--hz-card);
    --backtest-panel-strong: var(--hz-raised);
    --backtest-panel-soft: var(--hz-bg);
    --backtest-border: var(--hz-border);
    --backtest-border-strong: var(--hz-border-strong);
    --backtest-text: var(--hz-text);
    --backtest-muted: var(--hz-text-muted);
    --backtest-accent: var(--hz-brand);
    --backtest-accent-strong: var(--hz-brand-hover);
    --backtest-success: var(--hz-success);
    --backtest-danger: var(--hz-danger);
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
    color: var(--backtest-text);
}

/* ════════════════════════════════════════════════════════════════════════════
   STICKY CONFIG BAR
   The controls that change between every run, plus the primary action.
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-toolbar[b-zyb425mgyw] {
    display: flex;
    flex-wrap: wrap;
    /* Top-aligned: every field is [micro-label][control], so the controls line up on one
       row even though the date pickers hang an availability caption underneath. */
    align-items: flex-start;
    gap: var(--hz-space-3);
    padding: 0.6rem 0.85rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
}

.backtest-cfgbar[b-zyb425mgyw] {
    position: sticky;
    top: 0;
    z-index: 6;
    /* The app shell pads .hz-content by 0.5rem at the top, which would let rows scroll
       through the sliver above a sticky child. Paint it with the page background. */
    box-shadow: 0 -0.75rem 0 var(--hz-bg);
}

.backtest-cfgbar__field select[b-zyb425mgyw] {
    min-width: 7.5rem;
}

/* Fixed label box so the label-less actions can be dropped to the control row exactly. */
.backtest-cfgbar .hz-field__label[b-zyb425mgyw],
.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__label {
    height: var(--hz-label-size);
    line-height: 1;
}

.backtest-cfgbar > .backtest-run-button[b-zyb425mgyw],
.backtest-cfgbar > .backtest-export-menu[b-zyb425mgyw] {
    margin-top: calc(var(--hz-label-size) + 0.25rem);
}

.backtest-run-button[b-zyb425mgyw] {
    padding: 0.5rem 1.35rem;
    border: 1px solid var(--hz-brand);
    border-radius: var(--hz-radius-control);
    background: var(--hz-brand);
    color: var(--hz-on-brand);
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.78rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    white-space: nowrap;
    cursor: pointer;
}

.backtest-run-button:hover:not(:disabled)[b-zyb425mgyw] {
    background: var(--hz-brand-hover);
    border-color: var(--hz-brand-hover);
}

.backtest-run-button:disabled[b-zyb425mgyw] {
    opacity: 0.5;
    cursor: not-allowed;
}

/* ── Export / report dropdown ────────────────────────────────────────────────── */

.backtest-export-menu[b-zyb425mgyw] {
    position: relative;
}

.backtest-export-menu__trigger[b-zyb425mgyw] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.42rem 0.8rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--hz-text);
    font-family: var(--hz-font);
    font-weight: 600;
    font-size: 0.78rem;
    white-space: nowrap;
    cursor: pointer;
    list-style: none;
}

.backtest-export-menu__trigger[b-zyb425mgyw]::-webkit-details-marker {
    display: none;
}

.backtest-export-menu__trigger[b-zyb425mgyw]::after {
    content: "▾";
    color: var(--hz-text-faint);
    font-size: 0.7rem;
}

.backtest-export-menu__trigger:hover[b-zyb425mgyw] {
    border-color: var(--hz-brand);
    color: var(--hz-brand-strong);
    background: var(--hz-brand-soft);
}

.backtest-export-menu[open] > .backtest-export-menu__trigger[b-zyb425mgyw] {
    border-color: var(--hz-brand);
    color: var(--hz-brand-strong);
    background: var(--hz-brand-soft);
}

.backtest-export-menu[open] > .backtest-export-menu__trigger[b-zyb425mgyw]::after {
    content: "▴";
}

.backtest-export-menu__items[b-zyb425mgyw] {
    position: absolute;
    top: calc(100% + 0.35rem);
    right: 0;
    z-index: 30;
    display: flex;
    flex-direction: column;
    min-width: 14rem;
    padding: 0.25rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
    box-shadow: var(--hz-shadow-overlay);
}

.backtest-export-toolbar__link[b-zyb425mgyw] {
    display: block;
    padding: 0.4rem 0.6rem;
    border-radius: var(--hz-radius-control);
    color: var(--hz-text);
    font-size: 0.78rem;
    font-weight: 500;
    text-decoration: none;
    white-space: nowrap;
}

.backtest-export-toolbar__link:hover[b-zyb425mgyw] {
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
}

.backtest-export-toolbar__link--secondary[b-zyb425mgyw] {
    color: var(--hz-text-muted);
}

/* ════════════════════════════════════════════════════════════════════════════
   COLLAPSIBLE SECTIONS
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-section[b-zyb425mgyw] {
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
    min-width: 0;
}

.backtest-section__summary[b-zyb425mgyw] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.55rem 0.8rem;
    cursor: pointer;
    list-style: none;
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.72rem;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-muted);
}

.backtest-section__summary[b-zyb425mgyw]::-webkit-details-marker {
    display: none;
}

.backtest-section__summary[b-zyb425mgyw]::before {
    content: "▸";
    flex: none;
    font-size: 0.65rem;
    color: var(--hz-text-faint);
}

.backtest-section[open] > .backtest-section__summary[b-zyb425mgyw] {
    color: var(--hz-text);
    border-bottom: 1px solid var(--hz-border);
}

.backtest-section[open] > .backtest-section__summary[b-zyb425mgyw]::before {
    content: "▾";
    color: var(--hz-brand);
}

.backtest-section__summary:hover[b-zyb425mgyw] {
    color: var(--hz-text);
}

.backtest-section__summary-content[b-zyb425mgyw] {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem 0.7rem;
    min-width: 0;
}

.backtest-section__summary-label[b-zyb425mgyw] {
    color: inherit;
}

.backtest-section__summary-meta[b-zyb425mgyw] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.66rem;
    font-weight: 400;
    letter-spacing: 0;
    text-transform: none;
    color: var(--hz-text-faint);
}

.backtest-section__body[b-zyb425mgyw] {
    padding: 0.85rem;
}

/* ── Queue strip ─────────────────────────────────────────────────────────────── */

.backtest-section--strip > .backtest-section__summary[b-zyb425mgyw] {
    padding: 0.4rem 0.8rem;
}

.backtest-section--strip > .backtest-section__body[b-zyb425mgyw] {
    padding: 0.6rem 0.8rem;
}

/* The queue component is a stacked card by default; in the strip it reads as one row. */
.backtest-section--strip[b-zyb425mgyw]  .queue-status {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem 1.1rem;
    padding: 0.45rem 0.7rem;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.72rem;
}

.backtest-section--strip[b-zyb425mgyw]  .queue-status__header {
    gap: 0.5rem;
}

.backtest-section--strip[b-zyb425mgyw]  .queue-status__details {
    gap: 0.3rem 1.1rem;
    font-size: 0.72rem;
}

/* ════════════════════════════════════════════════════════════════════════════
   WORKSPACE: CONFIG RAIL + MAIN COLUMN
   ════════════════════════════════════════════════════════════════════════════ */

/* The two-column rail/main workspace is gone: panels are placed by the user through
   <LayoutGrid>, so the page no longer dictates where anything sits. The density rules
   below still apply — they now key off the layout panel rather than the rail, because a
   panel can be narrow anywhere on the grid, not just on the left. */

/* ── Rail density: the shared panels were built for full-width pages ─────────── */

.hz-layout-panel .backtest-section__body[b-zyb425mgyw] {
    display: grid;
    gap: var(--hz-space-3);
    align-content: start;
    padding: 0.7rem;
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel {
    padding: 0;
    border: 0;
    background: transparent;
    gap: 0.75rem;
}

/* The rail section header already says "Parameters" — the panel's own title is a dupe. */
.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__header {
    display: none;
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__preset-row,
.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__grid,
.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__sweep-editor {
    grid-template-columns: minmax(0, 1fr);
    gap: 0.6rem;
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__field,
.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__toggle {
    font-size: 0.78rem;
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__field span {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__field input,
.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__field select {
    padding: 0.38rem 0.55rem;
    border-radius: var(--hz-radius-control);
    border-color: var(--hz-border-strong);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.78rem;
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__action {
    min-height: 0;
    padding: 0.3rem 0.6rem;
    border-radius: var(--hz-radius-control);
    font-size: 0.7rem;
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__toggle-group {
    padding: 0.7rem;
    border-radius: var(--hz-radius-control);
    border-color: var(--hz-border);
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__toggle-group legend {
    font-family: var(--hz-font-display);
    font-size: var(--hz-label-size);
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-muted);
}

.hz-layout-panel[b-zyb425mgyw]  .parameter-panel__toggle-group p {
    font-size: 0.72rem;
}

/* ════════════════════════════════════════════════════════════════════════════
   SUMMARY STAT STRIP
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-statstrip .hz-stat__value[b-zyb425mgyw] {
    font-size: 1.15rem;
}

/* ════════════════════════════════════════════════════════════════════════════
   RESULTS / CHART PANELS
   Results and Chart are no longer a fixed side-by-side split — each is a layout
   panel the user places and sizes, so the breakpoint that used to decide their
   arrangement has been removed along with the wrapper it styled.
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-chart-panel[b-zyb425mgyw],
.backtest-results-panel[b-zyb425mgyw],
.backtest-section--panel[b-zyb425mgyw] {
    min-width: 0;
}

.backtest-chart-panel[b-zyb425mgyw] {
    display: grid;
    gap: 0.7rem;
    min-height: 30rem;
}

/* ════════════════════════════════════════════════════════════════════════════
   STATE / MESSAGE BLOCKS
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-error[b-zyb425mgyw],
.backtest-state[b-zyb425mgyw] {
    padding: 0.7rem 0.85rem;
    border-radius: var(--hz-radius-control);
    font-size: 0.78rem;
}

.backtest-error[b-zyb425mgyw] {
    border: 1px solid color-mix(in srgb, var(--hz-danger) 40%, transparent);
    border-left-width: 3px;
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
}

.backtest-state[b-zyb425mgyw] {
    border: 1px solid var(--hz-border);
    background: var(--hz-card);
    color: var(--backtest-muted);
}

/* The Summary section stacks the shared statistics card, the time breakdown and the
   diagnostics blocks — each already framed, so the shell is a bare stack. */
.backtest-summary-shell[b-zyb425mgyw] {
    display: grid;
    gap: var(--hz-space-3);
}

.backtest-summary-shell__notice[b-zyb425mgyw] {
    margin: 0;
    padding: 0.6rem 0.85rem;
    border: 1px solid color-mix(in srgb, var(--hz-warning) 40%, transparent);
    border-left-width: 3px;
    border-radius: var(--hz-radius-control);
    background: var(--hz-warning-soft);
    color: var(--hz-text);
    font-size: 0.85rem;
    line-height: 1.45;
}

.backtest-validation-errors[b-zyb425mgyw] {
    display: grid;
    gap: 0.3rem;
    margin: 0;
    padding: 0.6rem 0.85rem 0.6rem 1.7rem;
    border: 1px solid color-mix(in srgb, var(--hz-danger) 40%, transparent);
    border-left-width: 3px;
    border-radius: var(--hz-radius-control);
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
    font-size: 0.76rem;
}

/* Compact empty state — the shared .hz-empty is sized for full-width pages. */
.backtest-empty[b-zyb425mgyw] {
    padding: 1.1rem 0.9rem;
    gap: 0.25rem;
}

.backtest-empty .hz-empty__title[b-zyb425mgyw] {
    font-size: 0.8rem;
}

/* ════════════════════════════════════════════════════════════════════════════
   EXECUTION DIAGNOSTICS / SNAPSHOT LISTS
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-stage-timings[b-zyb425mgyw] {
    display: grid;
    gap: 0.55rem;
    padding: 0.8rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
}

.backtest-stage-timings__header[b-zyb425mgyw] {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 0.35rem 1rem;
    align-items: baseline;
    color: var(--backtest-text);
}

.backtest-stage-timings__header strong[b-zyb425mgyw] {
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.78rem;
}

.backtest-stage-timings__header span[b-zyb425mgyw] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.68rem;
    color: var(--hz-text-faint);
}

.backtest-stage-timings__list[b-zyb425mgyw] {
    display: grid;
    gap: 0.4rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.backtest-stage-timings__item[b-zyb425mgyw] {
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) auto;
    gap: 0.15rem 1rem;
    padding: 0.5rem 0.65rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border);
    background: var(--hz-raised);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.74rem;
    color: var(--backtest-muted);
}

.backtest-stage-timings__item--active[b-zyb425mgyw] {
    border-color: color-mix(in srgb, var(--hz-brand) 45%, transparent);
    background: var(--hz-brand-soft);
}

.backtest-stage-timings__stage[b-zyb425mgyw] {
    color: var(--backtest-text);
    font-weight: 500;
}

.backtest-stage-timings__duration[b-zyb425mgyw] {
    color: var(--backtest-accent);
    font-weight: 500;
    text-align: right;
}

.backtest-stage-timings__item--active .backtest-stage-timings__duration[b-zyb425mgyw] {
    color: var(--backtest-success);
}

.backtest-stage-timings__detail[b-zyb425mgyw] {
    grid-column: 1 / -1;
    color: var(--hz-text-faint);
    font-size: 0.7rem;
}

/* ════════════════════════════════════════════════════════════════════════════
   BLOCKING WINDOWS (rail)
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-blocking-editor[b-zyb425mgyw] {
    display: grid;
    gap: 0.6rem;
    margin-bottom: var(--hz-space-3);
}

.backtest-blocking-editor label[b-zyb425mgyw] {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    min-width: 0;
    font-size: 0.78rem;
    color: var(--backtest-muted);
}

.backtest-blocking-editor label > span[b-zyb425mgyw] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.backtest-blocking-editor select[b-zyb425mgyw],
.backtest-blocking-editor input[type="time"][b-zyb425mgyw] {
    padding: 0.38rem 0.55rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--backtest-text);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.78rem;
}

.backtest-blocking-editor input[type="checkbox"][b-zyb425mgyw] {
    width: 0.95rem;
    height: 0.95rem;
    align-self: flex-start;
    accent-color: var(--hz-brand);
}

/* Checkbox fields read as [box] [label] on one line rather than stacking. */
.backtest-blocking-editor label:has(input[type="checkbox"])[b-zyb425mgyw] {
    flex-direction: row-reverse;
    justify-content: flex-end;
    align-items: center;
    gap: 0.45rem;
}

.backtest-blocking-editor label:has(input[type="checkbox"]) input[b-zyb425mgyw] {
    align-self: center;
}

.backtest-blocking-editor__submit[b-zyb425mgyw] {
    justify-self: start;
}

.backtest-blocking-grid-toolbar[b-zyb425mgyw] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.6rem;
}

.backtest-blocking-grid-toolbar__field[b-zyb425mgyw] {
    flex: 1 1 8rem;
    min-width: 0;
}

.backtest-blocking-grid-toolbar__field input[b-zyb425mgyw],
.backtest-blocking-grid-toolbar__field select[b-zyb425mgyw] {
    width: 100%;
}

.backtest-blocking-grid-shell[b-zyb425mgyw] {
    border-top: 1px solid var(--hz-border);
}

/* The rule label is long ("Wednesday | 13:00-14:00 | MNQ 3m | HeikinAshi") and the rail
   is narrow, so it wraps instead of forcing a horizontal scrollbar. */
.backtest-blocking-grid__rule[b-zyb425mgyw] {
    white-space: normal;
    overflow-wrap: anywhere;
}

.backtest-blocking-grid td[b-zyb425mgyw],
.backtest-blocking-grid th[b-zyb425mgyw] {
    padding: 0.4rem 0.6rem;
    vertical-align: top;
}

.backtest-blocking-grid__actions[b-zyb425mgyw] {
    white-space: nowrap;
    text-align: right;
}

.backtest-blocking-grid__badge[b-zyb425mgyw] {
    display: inline-flex;
    align-items: center;
    padding: 0.12rem 0.45rem;
    border-radius: var(--hz-radius-badge);
    border: 1px solid transparent;
    font-family: var(--hz-font-mono);
    font-weight: 600;
    font-size: 0.65rem;
    white-space: nowrap;
}

.backtest-blocking-grid__badge--custom[b-zyb425mgyw] {
    color: var(--hz-brand-strong);
    background: var(--hz-brand-soft);
    border-color: color-mix(in srgb, var(--hz-brand) 38%, transparent);
}

.backtest-blocking-grid__badge--reserved[b-zyb425mgyw] {
    color: var(--hz-warning);
    background: var(--hz-warning-soft);
    border-color: color-mix(in srgb, var(--hz-warning) 32%, transparent);
}

.backtest-blocking-grid__badge--active[b-zyb425mgyw],
.backtest-blocking-grid__badge--enabled[b-zyb425mgyw] {
    color: var(--hz-success);
    background: var(--hz-success-soft);
    border-color: color-mix(in srgb, var(--hz-success) 32%, transparent);
}

.backtest-blocking-grid__badge--disabled[b-zyb425mgyw] {
    color: var(--hz-danger);
    background: var(--hz-danger-soft);
    border-color: color-mix(in srgb, var(--hz-danger) 32%, transparent);
}

.backtest-blocking-grid__row--disabled[b-zyb425mgyw] {
    opacity: 0.72;
}

.backtest-blocking-grid__muted[b-zyb425mgyw] {
    color: var(--hz-text-faint);
}

.backtest-blocking-grid-pager[b-zyb425mgyw] {
    justify-content: space-between;
    gap: 0.5rem;
    flex-wrap: wrap;
}

/* ════════════════════════════════════════════════════════════════════════════
   CHART PANEL CHROME
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-chart-tools[b-zyb425mgyw] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.6rem;
}

.backtest-chart-tools__selector[b-zyb425mgyw] {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    min-width: 8rem;
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.backtest-chart-tools__selector select[b-zyb425mgyw] {
    padding: 0.38rem 0.55rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--backtest-text);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.78rem;
    letter-spacing: 0;
    text-transform: none;
}

.backtest-chart-tools__button[b-zyb425mgyw] {
    padding: 0.38rem 0.7rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--backtest-text);
    font-family: var(--hz-font);
    font-weight: 600;
    font-size: 0.74rem;
    white-space: nowrap;
    cursor: pointer;
}

.backtest-chart-tools__button:hover:not(:disabled)[b-zyb425mgyw] {
    border-color: var(--hz-brand);
    color: var(--hz-brand-strong);
    background: var(--hz-brand-soft);
}

.backtest-chart-tools__button:disabled[b-zyb425mgyw] {
    opacity: 0.5;
    cursor: not-allowed;
}

.backtest-chart-tools__button--active[b-zyb425mgyw] {
    border-color: var(--hz-brand);
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
}

.backtest-chart-tools__popover[b-zyb425mgyw] {
    padding: 0.2rem 0 0.4rem;
}

.backtest-panel-header[b-zyb425mgyw] {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 0.35rem 1rem;
    align-items: baseline;
    padding: 0.5rem 0.7rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-raised);
}

.backtest-panel-header__title[b-zyb425mgyw] {
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.8rem;
    color: var(--backtest-text);
}

.backtest-panel-header__meta[b-zyb425mgyw] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.68rem;
    color: var(--hz-text-faint);
}

.backtest-chart-panel[b-zyb425mgyw]  .candle-chart-wrapper {
    min-height: 30rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    overflow: hidden;
}

.backtest-chart-tools__popover[b-zyb425mgyw]  .grid-settings-editor__panel {
    background: var(--hz-card);
    border-color: var(--hz-border);
}

/* ════════════════════════════════════════════════════════════════════════════
   DATE PICKERS IN THE CONFIG BAR
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker {
    min-width: 12.5rem;
    gap: 0.25rem;
}

.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__label {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__controls {
    gap: 0.3rem;
}

.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__toggle,
.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__clear {
    min-height: 0;
    padding: 0.38rem 0.55rem;
    border-color: var(--hz-border-strong);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 500;
    font-size: 0.78rem;
}

.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__clear {
    font-size: 0.68rem;
    color: var(--hz-text-muted);
}

.backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker__meta {
    font-family: var(--hz-font-mono);
    font-size: 0.62rem;
    color: var(--hz-text-faint);
}

/* ════════════════════════════════════════════════════════════════════════════
   FIB SETTINGS PANEL (rail)
   ════════════════════════════════════════════════════════════════════════════ */

.backtest-fib-settings-shell[b-zyb425mgyw] {
    display: flex;
    justify-content: stretch;
    width: 100%;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 0.6rem;
    width: 100%;
    max-width: none;
    max-height: none;
    padding: 0;
    background: transparent;
    border: 0;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-panel-levels {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
    gap: 0.4rem;
    max-height: none;
    overflow: visible;
    padding: 0;
    border: 0;
    background: transparent;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-level-header {
    display: none;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-level-row {
    grid-template-columns: 1.05rem 1.6rem minmax(0, 1fr);
    gap: 0.45rem;
    padding: 0.4rem 0.5rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border);
    background: var(--hz-raised);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-level-row:hover {
    background: var(--hz-brand-soft);
    border-color: var(--hz-brand);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-col-label {
    color: var(--backtest-text);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 500;
    font-size: 0.74rem;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-level-row input.fib-col-color[type="color"] {
    width: 1.6rem;
    min-width: 1.6rem;
    height: 1.6rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border-strong);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-level-row input.fib-col-on[type="checkbox"] {
    width: 0.95rem;
    height: 0.95rem;
    accent-color: var(--hz-brand);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-custom-section {
    grid-column: 1 / -1;
    padding: 0.6rem 0.7rem;
    background: var(--hz-card);
    border: 1px dashed var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-custom-header {
    color: var(--backtest-text);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-custom-input {
    background: var(--hz-card);
    color: var(--backtest-text);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    font-family: var(--hz-font-mono);
    font-size: 0.78rem;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-custom-input::placeholder {
    color: var(--hz-text-faint);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-add-custom-btn {
    border-radius: var(--hz-radius-control);
    background: var(--hz-success);
    color: var(--hz-on-brand);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-custom-levels-list {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-custom-level-item {
    background: var(--hz-raised);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-badge);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .grid-row,
.backtest-fib-settings-shell[b-zyb425mgyw]  .grid-option {
    min-height: 0;
    padding: 0.4rem 0.55rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border);
    background: var(--hz-raised);
    font-size: 0.76rem;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .grid-row {
    justify-content: space-between;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .grid-label,
.backtest-fib-settings-shell[b-zyb425mgyw]  .grid-option {
    color: var(--backtest-muted);
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .chart-select {
    min-width: 5.5rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--backtest-text);
    font-family: var(--hz-font-mono);
    font-size: 0.76rem;
    padding: 0.3rem 0.45rem;
}

.backtest-fib-settings-shell[b-zyb425mgyw]  .fib-clear-btn {
    grid-column: 1 / -1;
    margin-top: 0;
    min-height: 0;
    padding: 0.4rem 0.6rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid color-mix(in srgb, var(--hz-danger) 32%, transparent);
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
}

/* ════════════════════════════════════════════════════════════════════════════
   NARROW VIEWPORTS
   ════════════════════════════════════════════════════════════════════════════ */

@media (max-width: 960px) {
    .backtest-cfgbar[b-zyb425mgyw] {
        position: static;
        box-shadow: none;
    }

    .backtest-cfgbar__field[b-zyb425mgyw],
    .backtest-cfgbar[b-zyb425mgyw]  .backtest-date-picker {
        min-width: 100%;
    }

    /* Stacked bar — the actions no longer need dropping to a shared control row. */
    .backtest-cfgbar > .backtest-run-button[b-zyb425mgyw],
    .backtest-cfgbar > .backtest-export-menu[b-zyb425mgyw] {
        margin-top: 0;
        width: 100%;
    }

    .backtest-export-menu__trigger[b-zyb425mgyw] {
        justify-content: center;
        width: 100%;
    }

    .backtest-stage-timings__item[b-zyb425mgyw] {
        grid-template-columns: 1fr;
    }

    .backtest-stage-timings__duration[b-zyb425mgyw] {
        text-align: left;
    }

    .backtest-chart-panel[b-zyb425mgyw],
    .backtest-chart-panel[b-zyb425mgyw]  .candle-chart-wrapper {
        min-height: 22rem;
    }
}
/* /Components/Pages/BacktestCompare.razor.rz.scp.css */
/* Backtest compare — spec 078 restyle.
   Page shell, panels, callouts, buttons and the empty state come from six18-ui.css. What is
   page-specific: the run-picker card grid, the card's fact layout, and the detail panel spacing.
   The metric matrix and parameter diff are separate shared components and are untouched here.
   Tokens only — no raw colours (the page has a working light mode). */

.backtest-compare-page[b-0wfjwznrl2] {
    color: var(--hz-text);
}

/* ── Header ──────────────────────────────────────────────────────────────────── */

.backtest-compare-toolbar__controls[b-0wfjwznrl2] {
    align-items: flex-end;
}

.backtest-compare-toolbar__baseline[b-0wfjwznrl2] {
    min-width: 16rem;
}

.backtest-compare-toolbar__link--secondary[b-0wfjwznrl2] {
    color: var(--hz-text-muted);
}

/* ── Run picker cards ────────────────────────────────────────────────────────── */

.backtest-compare-runs[b-0wfjwznrl2] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(19rem, 1fr));
    gap: var(--hz-space-3);
    align-items: start;
}

.backtest-compare-run-card__name[b-0wfjwznrl2] {
    overflow-wrap: anywhere;
    min-width: 0;
}

.backtest-compare-run-card__body[b-0wfjwznrl2] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

.backtest-compare-run-card__parameter-set[b-0wfjwznrl2] {
    margin: 0;
    overflow-wrap: anywhere;
}

.backtest-compare-run-card__meta[b-0wfjwznrl2] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--hz-space-3) var(--hz-space-4);
    margin: 0;
}

/* Blocking label and fingerprint are long strings — they get the full card width. */
.backtest-compare-run-card__meta-wide[b-0wfjwznrl2] {
    grid-column: 1 / -1;
}

.backtest-compare-run-card__meta dd[b-0wfjwznrl2] {
    margin: 0.15rem 0 0;
    overflow-wrap: anywhere;
}

.backtest-compare-run-card__executed[b-0wfjwznrl2],
.backtest-compare-run-card__blocking[b-0wfjwznrl2],
.backtest-compare-run-card__fingerprint[b-0wfjwznrl2] {
    font-size: 0.72rem;
    line-height: 1.4;
}

.backtest-compare-run-card__blocking[b-0wfjwznrl2] {
    font-family: var(--hz-font);
    color: var(--hz-text-muted);
}

.backtest-compare-run-card__fingerprint[b-0wfjwznrl2] {
    color: var(--hz-text-muted);
}

.backtest-compare-run-card__warnings[b-0wfjwznrl2] {
    margin: 0;
    padding-left: 1.05rem;
    color: var(--hz-warning);
    font-size: 0.74rem;
    line-height: 1.45;
}

.backtest-compare-run-card__action[b-0wfjwznrl2] {
    align-self: flex-start;
}

/* ── Detail review ───────────────────────────────────────────────────────────── */

.backtest-compare-detail__body[b-0wfjwznrl2] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
}

.backtest-compare-detail__lede[b-0wfjwznrl2] {
    margin: 0;
    color: var(--hz-text-muted);
    font-size: 0.8rem;
    line-height: 1.5;
}

.backtest-compare-detail__blocking div[b-0wfjwznrl2] {
    overflow-wrap: anywhere;
}

@media (max-width: 720px) {
    .backtest-compare-run-card__meta[b-0wfjwznrl2] {
        grid-template-columns: 1fr;
    }

    .backtest-compare-toolbar__baseline[b-0wfjwznrl2] {
        min-width: 0;
        width: 100%;
    }
}
/* /Components/Pages/BacktestHistory.razor.rz.scp.css */
/* Backtest history — spec 078 restyle.
   The shell (.hz-page), toolbar, panel, table, callouts and save bar all come from six18-ui.css;
   what remains here is the handful of page-specific behaviours: the sticky table head, the
   two-line blocking cell, the row-action strip and the pager layout.
   Tokens only — no raw colours (the page has a working light mode). */

.backtest-history-page[b-b6qngd0fer] {
    color: var(--hz-text);
}

/* ── Header ──────────────────────────────────────────────────────────────────── */

.backtest-history-hero__link[b-b6qngd0fer] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    color: var(--hz-brand-strong);
    font-size: 0.8rem;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

    .backtest-history-hero__link[b-b6qngd0fer]::after {
        content: "→";
        font-family: var(--hz-font-mono);
    }

    .backtest-history-hero__link:hover[b-b6qngd0fer] {
        color: var(--hz-brand-hover);
    }

/* ── Filter toolbar ──────────────────────────────────────────────────────────── */

.backtest-history-toolbar .hz-field[b-b6qngd0fer] {
    min-width: 9rem;
}

.backtest-history-toolbar__actions[b-b6qngd0fer] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--hz-space-2);
}

/* ── Runs table ──────────────────────────────────────────────────────────────── */

/* Long histories scroll inside the panel rather than the page, so the toolbar and the
   selection bar both stay reachable while paging through rows. */
.backtest-history-table__scroll[b-b6qngd0fer] {
    overflow: auto;
    max-height: min(70vh, 46rem);
}

.backtest-history-table thead th[b-b6qngd0fer] {
    position: sticky;
    top: 0;
    z-index: 2;
    box-shadow: inset 0 -1px 0 var(--hz-border);
}

.backtest-history-table__select-all[b-b6qngd0fer] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    cursor: pointer;
}

.backtest-history-table input[type="checkbox"][b-b6qngd0fer] {
    inline-size: 0.9rem;
    block-size: 0.9rem;
    accent-color: var(--hz-brand);
    cursor: pointer;
}

/* Source label above, fingerprint below — the fingerprint is the thing you actually diff. */
.backtest-history-blocking[b-b6qngd0fer] {
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
    min-width: 12rem;
}

.backtest-history-row-actions[b-b6qngd0fer] {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.3rem;
}

/* Report is the row's primary read action — the only gold in the row. */
.backtest-history-row-actions__report[b-b6qngd0fer] {
    color: var(--hz-brand-strong);
}

.backtest-history-row-actions__restore[b-b6qngd0fer] {
    border-color: color-mix(in srgb, var(--hz-success) 40%, transparent);
    color: var(--hz-success);
}

    .backtest-history-row-actions__restore:hover:not(:disabled)[b-b6qngd0fer] {
        background: var(--hz-success-soft);
        border-color: var(--hz-success);
        color: var(--hz-success);
    }

/* ── Pager ───────────────────────────────────────────────────────────────────── */

.backtest-history-pager[b-b6qngd0fer] {
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: var(--hz-space-2);
}

.backtest-history-pager__position[b-b6qngd0fer] {
    margin: 0 var(--hz-space-2);
}

.backtest-history-pager__size[b-b6qngd0fer] {
    margin-left: auto;
    flex-direction: row;
    align-items: center;
    gap: var(--hz-space-2);
}

/* ── Selection / bulk action bar ─────────────────────────────────────────────── */

.backtest-history-actionbar[b-b6qngd0fer] {
    flex-wrap: wrap;
}

.backtest-history-results__selection[b-b6qngd0fer] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.72rem;
    font-weight: 600;
    color: var(--hz-brand-strong);
}

.backtest-history-results__actions[b-b6qngd0fer] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--hz-space-2);
}

.backtest-history-results__link--secondary[b-b6qngd0fer] {
    color: var(--hz-text-muted);
}

.backtest-history-results__restore[b-b6qngd0fer],
.backtest-history-results__archive[b-b6qngd0fer] {
    border-color: color-mix(in srgb, var(--hz-success) 40%, transparent);
    color: var(--hz-success);
}

    .backtest-history-results__restore:hover:not(:disabled)[b-b6qngd0fer],
    .backtest-history-results__archive:hover:not(:disabled)[b-b6qngd0fer] {
        background: var(--hz-success-soft);
        border-color: var(--hz-success);
        color: var(--hz-success);
    }

/* Destructive bulk action is set apart from the rest of the bar. */
.backtest-history-results__delete[b-b6qngd0fer] {
    margin-left: var(--hz-space-3);
    border-color: color-mix(in srgb, var(--hz-danger) 40%, transparent);
    color: var(--hz-danger);
}

    .backtest-history-results__delete:hover:not(:disabled)[b-b6qngd0fer] {
        background: var(--hz-danger-soft);
        border-color: var(--hz-danger);
        color: var(--hz-danger);
    }

@media (max-width: 960px) {
    .backtest-history-table__scroll[b-b6qngd0fer] {
        max-height: min(60vh, 40rem);
    }

    .backtest-history-pager__size[b-b6qngd0fer] {
        margin-left: 0;
    }

    .backtest-history-results__delete[b-b6qngd0fer] {
        margin-left: 0;
    }
}
/* /Components/Pages/BacktestReport.razor.rz.scp.css */
/* /backtest-report — page-scoped layout only.
   Panels, tables, badges, empty states and the keyline come from six18.css /
   six18-ui.css; the report's child components (header, metric grids, blocked-time
   simulation, balance curve, period table, time breakdown, appendix) own their own
   scoped CSS. Nothing here reaches into their internals except the one shared
   `.backtest-report-error` class, which the header reuses for inline validation copy. */

.backtest-report-page[b-q0tue9l293] {
    width: 100%;
    max-width: 96rem;
    margin: 0 auto;
    min-width: 0;
}

/* Vertical rhythm for the report body. .hz-page handles the outer stack; this is the
   inner stack so the hero keyline stays a direct child of the page. */
.backtest-report-shell[b-q0tue9l293] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
    min-width: 0;
}

/* Column stacks inside .hz-split. Grid items default to min-width:auto, which lets a
   wide table push the whole page sideways — min-width:0 is what keeps them contained. */
.backtest-report-col[b-q0tue9l293],
.backtest-report-stack[b-q0tue9l293] {
    min-width: 0;
}

.backtest-report-stack[b-q0tue9l293] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
    align-content: start;
}

/* The appendix rail follows the reader down the long analysis column. .hz-split
   collapses to one column at 1100px, where sticky would be a nuisance. */
/* Matrix Parameters panel: compact fact grid, hairline separators (six18 style). */
.backtest-report-matrix-grid[b-q0tue9l293] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr));
    gap: 0;
    border: 1px solid var(--hz-border, rgba(255, 255, 255, 0.08));
}

.backtest-report-matrix-grid__item[b-q0tue9l293] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    padding: 0.5rem 0.75rem;
    border-right: 1px solid var(--hz-border, rgba(255, 255, 255, 0.06));
    border-bottom: 1px solid var(--hz-border, rgba(255, 255, 255, 0.06));
    min-width: 0;
}

.backtest-report-matrix-grid__label[b-q0tue9l293] {
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 0.71rem;
}

.backtest-report-matrix-grid__value[b-q0tue9l293] {
    font-variant-numeric: tabular-nums;
    font-size: 0.9rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (min-width: 1101px) {
    .backtest-report-stack--sticky[b-q0tue9l293] {
        position: sticky;
        top: var(--hz-space-4);
    }
}

/* ── Hero ─────────────────────────────────────────────────────────────────────
   .hz-keyline supplies the gold gradient rule; the wrapper only has to make sure it
   paints above the header component's own (positioned) panel surface and follows the
   card radius. */
.backtest-report-hero[b-q0tue9l293] {
    min-width: 0;
}

    .backtest-report-hero[b-q0tue9l293]::before {
        z-index: 1;
        pointer-events: none;
        border-radius: var(--hz-radius-card) var(--hz-radius-card) 0 0;
    }

/* ── Load / error states ─────────────────────────────────────────────────────── */

.backtest-report-state[b-q0tue9l293] {
    padding: var(--hz-space-4);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
    color: var(--hz-text-muted);
    font-family: var(--hz-font-mono);
    font-size: 0.86rem;
}

/* ::deep so the same treatment covers the header component's inline validation
   paragraphs, which share this class name. */
[b-q0tue9l293] .backtest-report-error {
    margin: 0;
    padding: 0.7rem 0.9rem;
    border: 1px solid color-mix(in srgb, var(--hz-danger) 32%, transparent);
    border-left-width: 3px;
    border-radius: var(--hz-radius-control);
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
    font-size: 0.86rem;
    line-height: 1.5;
}

/* ── Prose inside panels ─────────────────────────────────────────────────────── */

.backtest-report-note[b-q0tue9l293] {
    margin: 0;
    max-width: 68ch;
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.55;
}

/* ── Trade grid — the only table this page renders itself ─────────────────────── */

.backtest-report-trade-grid__table[b-q0tue9l293] {
    min-width: 58rem;
}

    /* Detail cells stack several lines, so the row reads top-aligned. */
    .backtest-report-trade-grid__table td[b-q0tue9l293] {
        vertical-align: top;
    }

/* Row status classes come from GetTradeGridRowClass (read-only @code), so they are
   mapped onto the shared row-tint language here rather than renamed in markup. */
.backtest-report-trade-grid__row--skipped td[b-q0tue9l293] {
    background: var(--hz-warning-soft);
}

.backtest-report-trade-grid__row--excluded td[b-q0tue9l293],
.backtest-report-trade-grid__row--summary td[b-q0tue9l293] {
    color: var(--hz-text-faint);
}

.backtest-report-trade-grid__detail[b-q0tue9l293] {
    display: grid;
    gap: 0.25rem;
    min-width: 18rem;
}

.backtest-report-trade-grid__detail-line[b-q0tue9l293] {
    color: var(--hz-text);
    line-height: 1.4;
}

.backtest-report-trade-grid__detail-line--calculation[b-q0tue9l293] {
    color: var(--hz-text-faint);
    font-size: 0.78rem;
}

/* The ladder toggle sits in the panel head beside the title, so it reads as a view
   control for this grid rather than a form field. */
.hz-field--inline[b-q0tue9l293] {
    flex-direction: row;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.82rem;
    white-space: nowrap;
    cursor: pointer;
}

/* ── Per-EP ladder breakdown, nested inside a Detail cell ─────────────────────────
   A table inside a table cell, so it must not inherit the outer grid's min-width or
   its sticky header. Denser than .hz-table's default to stay readable at this depth. */
.backtest-report-leg-table[b-q0tue9l293] {
    min-width: 0;
    margin-block-start: 0.15rem;
    font-size: 0.78rem;
}

    .backtest-report-leg-table th[b-q0tue9l293],
    .backtest-report-leg-table td[b-q0tue9l293] {
        padding: 0.15rem 0.5rem;
        white-space: nowrap;
        vertical-align: middle;
    }

    .backtest-report-leg-table th[b-q0tue9l293] {
        position: static; /* the outer grid's sticky thead must not apply at this depth */
        font-size: 0.72rem;
    }

    /* Rungs that never filled, bought nothing, or belong to a zone the account never took.
       They still carry a resting price, so they are dimmed rather than hidden. */
    .backtest-report-leg-table__row.is-muted td[b-q0tue9l293] {
        color: var(--hz-text-faint);
    }

    .backtest-report-leg-table .hz-badge[b-q0tue9l293] {
        font-size: 0.68rem;
    }

/* ── Print: the report is the primary printable artifact ─────────────────────────
   Structure only — colours stay on the theme tokens so light mode prints correctly
   and no hex is hard-coded here. */
@media print {
    @page {
        margin: 0.5in;
    }

    .backtest-report-page[b-q0tue9l293] {
        max-width: none;
        padding: 0;
    }

    .backtest-report-stack--sticky[b-q0tue9l293] {
        position: static;
    }

    [b-q0tue9l293] .hz-split {
        grid-template-columns: 1fr;
    }

    [b-q0tue9l293] .hz-panel,
    [b-q0tue9l293] .hz-table-wrap,
    [b-q0tue9l293] .hz-stat {
        break-inside: avoid;
        page-break-inside: avoid;
    }

    /* The ladder breakdown is part of the artifact, so it must not be clipped by the
       grid's horizontal scroller or split across a page boundary mid-zone. */
    .backtest-report-trade-grid__scroll[b-q0tue9l293] {
        overflow: visible;
    }

    .backtest-report-leg-table[b-q0tue9l293] {
        break-inside: avoid;
        page-break-inside: avoid;
    }
}
/* /Components/Pages/Chart.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────────────────
   CHART WORKSPACE — one full-bleed panel that fills the content column.
   The frame, the control bar and the states are token-driven; only the canvas
   inside CandleChart stays dark in both appearances (FR-011).
   ───────────────────────────────────────────────────────────────────────────── */

.chart-page[b-7npuhxjedp] {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
    /* Frame the market-tuned dark canvas as a deliberate 618 panel: in light mode
       the dark inset then reads as intentional, not as an unthemed region. */
    overflow: hidden;
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
}

.chart-page__chart-shell[b-7npuhxjedp] {
    flex: 1 1 auto;
    min-height: 30rem;
    display: flex;
}

.chart-page__chart-shell[b-7npuhxjedp]  .candle-chart-wrapper {
    flex: 1 1 auto;
    min-height: 30rem;
}

/* Loading / empty states fill whatever card area is left. */
.chart-page__state[b-7npuhxjedp],
.chart-loading-overlay[b-7npuhxjedp] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--hz-space-3);
    flex: 1 1 auto;
    padding: var(--hz-space-5);
    background: var(--hz-card);
}

.chart-loading-spinner[b-7npuhxjedp] {
    width: 26px;
    height: 26px;
    border: 2px solid var(--hz-border-strong);
    border-top-color: var(--hz-brand);
    border-radius: 50%;
    animation: chart-spin-b-7npuhxjedp 0.8s linear infinite;
}

@keyframes chart-spin-b-7npuhxjedp {
    to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
    .chart-loading-spinner[b-7npuhxjedp] {
        animation-duration: 2.4s;
    }
}

.chart-loading-status[b-7npuhxjedp] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.72rem;
    color: var(--hz-text-muted);
    max-width: 22rem;
    text-align: center;
}

/* Degraded-feed strip. Warning is orange — never gold (gold is brand accent). */
.live-update-warning[b-7npuhxjedp] {
    position: sticky;
    top: 0;
    z-index: 100;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    padding: 0.25rem 0.75rem;
    background: var(--hz-warning-soft);
    color: var(--hz-warning);
    border-bottom: 1px solid color-mix(in srgb, var(--hz-warning) 35%, transparent);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.72rem;
    text-align: center;
}

@supports (-moz-appearance: none) {
    .chart-page[b-7npuhxjedp] {
        height: calc(100vh - 5rem);
        min-height: calc(100vh - 5rem);
    }
}
/* /Components/Pages/Coinbase/AllowedPairs.razor.rz.scp.css */
/* Allowed symbol × timeframe matrix (spec 031; restyled spec 078).
   The shell of the table is the shared .hz-table language — only the matrix-specific
   bits (centred cells, sticky symbol column, checkbox sizing) live here. Tokens only,
   so it reads correctly in both light and dark. */

/* 3 symbols × 13 timeframes: the matrix is wider than the viewport on most screens,
   so the identifying column pins while the timeframe columns scroll under it. */
.cb-matrix[b-3ng9bcsavd] {
    min-width: max-content;
}

.cb-matrix__corner[b-3ng9bcsavd],
.cb-matrix__rowhead[b-3ng9bcsavd] {
    position: sticky;
    left: 0;
    z-index: 1;
    text-align: left;
}

.cb-matrix__corner[b-3ng9bcsavd] {
    font-family: var(--hz-font-mono);
    text-transform: none;
    letter-spacing: 0;
    color: var(--hz-text-faint);
}

/* Row head is a <th> inside <tbody>: opt out of the uppercase micro-type the
   shared table gives header cells and read as the row's identity instead. */
.cb-matrix__rowhead[b-3ng9bcsavd] {
    background: var(--hz-card);
    text-transform: none;
    letter-spacing: 0;
    padding-top: var(--hz-space-2);
    padding-bottom: var(--hz-space-2);
    border-right: 1px solid var(--hz-border);
}

.cb-matrix__sym[b-3ng9bcsavd] {
    display: block;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.82rem;
    font-weight: 500;
    color: var(--hz-text);
}

.cb-matrix__symsub[b-3ng9bcsavd] {
    display: block;
    font-family: var(--hz-font-mono);
    font-size: 0.62rem;
    letter-spacing: 0.04em;
    color: var(--hz-text-faint);
    margin-top: 0.1rem;
}

.cb-matrix__tf[b-3ng9bcsavd] {
    text-align: center;
    font-family: var(--hz-font-mono);
    text-transform: none;
    letter-spacing: 0;
    color: var(--hz-text);
}

.cb-matrix__cell[b-3ng9bcsavd] {
    text-align: center;
}

/* The Radzen checkbox is a child component, so ::deep is required to reach it. */
.cb-matrix__cell[b-3ng9bcsavd]  .rz-chkbox {
    vertical-align: middle;
}

.cb-matrix__cell[b-3ng9bcsavd]  .rz-chkbox-box {
    border-radius: var(--hz-radius-control);
}

/* Ticked = allowed: gold is the ACTIVE-state accent here, not a status colour. */
.cb-matrix__cell[b-3ng9bcsavd]  .rz-chkbox-box.rz-state-active {
    background: var(--hz-brand);
    border-color: var(--hz-brand);
    color: var(--hz-on-brand);
}

.cb-pairs__foot[b-3ng9bcsavd] {
    justify-content: flex-start;
}
/* /Components/Pages/Coinbase/BlockedTimes.razor.rz.scp.css */
/* Spec 078 — page-scoped layout for /admin/blocked-windows.
   Shapes come from six18-ui.css (.hz-panel / .hz-table / .hz-field); only genuinely
   page-specific layout lives here. Colors are tokens only, so light mode follows. */

/* ── Add / edit form row ─────────────────────────────────────────────────────── */
.bw-form[b-umj9rp959n] {
    display: flex;
    align-items: flex-end;
    gap: var(--hz-space-3) var(--hz-space-4);
    flex-wrap: wrap;
}

.bw-form__actions[b-umj9rp959n] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
}

/* Scope stacks two dropdowns over the free-text symbol box, so it needs a little more
   air than the single-control fields beside it. */
.bw-scope[b-umj9rp959n] {
    gap: var(--hz-space-2);
}

.bw-scope__row[b-umj9rp959n] {
    display: flex;
    gap: var(--hz-space-1);
    flex-wrap: wrap;
}

.bw-warn[b-umj9rp959n] {
    max-width: 22rem;
    font-size: 0.7rem;
    line-height: 1.35;
    color: var(--hz-warning);
}

/* ── Weekly day toggles ──────────────────────────────────────────────────────── */
.bw-days[b-umj9rp959n] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
    /* match the control height of the sibling date pickers so the row baselines line up */
    min-height: 2rem;
}

.bw-day[b-umj9rp959n] {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    margin: 0;
    font-size: 0.75rem;
    color: var(--hz-text-muted);
    cursor: pointer;
    user-select: none;
}

/* ── Tables ──────────────────────────────────────────────────────────────────── */
/* The maintenance-owned marker sits beside its description, never on its own line. */
.bw-tag[b-umj9rp959n] {
    margin-left: var(--hz-space-2);
    vertical-align: middle;
}

.bw-rowactions[b-umj9rp959n] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--hz-space-1);
}

/* Empty state inside an otherwise flush panel body needs its own breathing room. */
.bw-panel-empty[b-umj9rp959n] {
    padding: var(--hz-space-4);
}

/* Explanatory line inside a flush panel body, above the table it describes. */
.bw-panel-note[b-umj9rp959n] {
    margin: 0;
    padding: 0.6rem 0.85rem;
    border-bottom: 1px solid var(--hz-border);
    font-size: 0.75rem;
    line-height: 1.45;
    color: var(--hz-text-muted);
}
/* /Components/Pages/Coinbase/CoinbaseDashboard.razor.rz.scp.css */
/* Coinbase trader console (spec 031; regrouped into tabs for spec 078).
   The page is assembled from the shared 618 vocabulary (.hz-stats / .hz-panel / .hz-tabs /
   .hz-callout / .hz-field / .hz-empty); only the console-specific layout lives here.
   Tokens only — the app has a working light mode and a hard-coded colour breaks it.
   The single exception is documented on .cb-qr below. */

.cb-dash__loading[b-emsaeyob52] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    padding: var(--hz-space-5) 0;
}

/* Secondary line inside a callout (engine detail, pause provenance). */
.cb-dash__enginedetail[b-emsaeyob52] {
    display: block;
    margin-top: 0.2rem;
}

.cb-dash__note[b-emsaeyob52] {
    margin: 0;
}

/* ── Tabs ────────────────────────────────────────────────────────────────────── */

.cb-tab__count[b-emsaeyob52] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.66rem;
    font-weight: 500;
    color: var(--hz-text-faint);
    margin-left: 0.4rem;
}

.hz-tab.is-active .cb-tab__count[b-emsaeyob52] {
    color: var(--hz-brand-strong);
}

.cb-tabpanel[b-emsaeyob52] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
}

/* A grid sitting flush in a panel already has the panel's hairline frame — drop its own
   so the two don't stack into a double border. ::deep because the grid is a child component. */
.hz-panel__body--flush[b-emsaeyob52]  .rz-data-grid {
    border: none;
    border-radius: 0;
}

/* ── Panel bodies: prose + form rows ─────────────────────────────────────────── */

.cb-dash__lede[b-emsaeyob52] {
    margin: 0 0 var(--hz-space-3) 0;
    color: var(--hz-text-muted);
    font-size: 0.8rem;
    line-height: 1.5;
    max-width: 62rem;
}

.cb-dash__lede strong[b-emsaeyob52] {
    color: var(--hz-text);
}

.cb-form-row[b-emsaeyob52] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--hz-space-3);
}

.cb-weights[b-emsaeyob52] {
    display: flex;
    gap: var(--hz-space-1);
    flex-wrap: wrap;
}

.cb-dash__gatehint[b-emsaeyob52] {
    margin-left: var(--hz-space-2);
}

/* ── Live cost previews ──────────────────────────────────────────────────────── */

.cb-preview[b-emsaeyob52] {
    margin-top: var(--hz-space-3);
    font-size: 0.78rem;
    line-height: 1.55;
    color: var(--hz-text-muted);
}

.cb-preview strong[b-emsaeyob52] {
    color: var(--hz-text);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 500;
}

.cb-preview__rungs[b-emsaeyob52] {
    color: var(--hz-text-muted);
    font-size: 0.74rem;
}

.cb-preview .hz-meta[b-emsaeyob52] {
    display: block;
    margin-top: 0.2rem;
}

/* Guardrail warning inside a preview — orange, paired with ▲ so it can never read as brand gold. */
.cb-warn[b-emsaeyob52] {
    display: block;
    margin-top: 0.25rem;
    color: var(--hz-warning);
    font-size: 0.76rem;
}

/* ── Per-symbol sizing rows ──────────────────────────────────────────────────── */

.cb-symbols[b-emsaeyob52] {
    display: flex;
    flex-direction: column;
}

.cb-symbol[b-emsaeyob52] {
    padding: var(--hz-space-3) 0;
    border-bottom: 1px solid var(--hz-border);
}

.cb-symbol:first-child[b-emsaeyob52] {
    padding-top: 0;
}

.cb-symbol:last-child[b-emsaeyob52] {
    border-bottom: none;
    padding-bottom: 0;
}

.cb-symbol__name[b-emsaeyob52] {
    min-width: 12rem;
}

.cb-symbol__sym[b-emsaeyob52] {
    font-size: 0.85rem;
    font-weight: 500;
    color: var(--hz-text);
    padding-top: 0.25rem;
}

.cb-symbol__default[b-emsaeyob52] {
    align-self: flex-end;
    padding-bottom: 0.4rem;
}

/* ── Authenticator setup (TOTP) ──────────────────────────────────────────────── */

.cb-totp[b-emsaeyob52] {
    margin-top: var(--hz-space-3);
    align-items: flex-start;
}

.cb-totp__body[b-emsaeyob52] {
    min-width: 0;
    flex: 1 1 auto;
}

.cb-totp__label[b-emsaeyob52] {
    display: block;
    margin-top: var(--hz-space-3);
    color: var(--hz-text-muted);
    font-size: 0.76rem;
}

.cb-totp__close[b-emsaeyob52] {
    flex: none;
    align-self: flex-start;
}

/* The QR quiet zone is deliberately WHITE, not a surface token: a themed (dark) background
   behind the code would break camera scanning. This is a functional colour, not a themeable
   one — the only literal colour on this page. */
.cb-qr[b-emsaeyob52] {
    display: block;
    margin-top: var(--hz-space-2);
    image-rendering: pixelated;
    background: #FFFFFF;
    padding: 8px;
    border-radius: var(--hz-radius-control);
    max-width: 100%;
    height: auto;
}

/* One-time secrets: readable, wrappable, obviously machine text. */
.cb-secret[b-emsaeyob52] {
    display: block;
    margin-top: 0.25rem;
    padding: 0.4rem 0.55rem;
    background: var(--hz-raised);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    font-family: var(--hz-font-mono);
    font-size: 0.72rem;
    color: var(--hz-text);
    word-break: break-all;
}
/* /Components/Pages/Coinbase/EventSuggestions.razor.rz.scp.css */
/* Spec 036 US5 — inline minute-override panel, mirroring the IBKR event-suggestions page.
   Spec 078 — restyled onto the six18 token set; only page-specific layout lives here. */

/* ── Inline override editor (rendered inside the row's Actions cell) ──────────── */
.override-panel[b-xgrbbq37y2] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-1);
    padding: var(--hz-space-2);
    /* Gold keyline marks the row currently being edited — accent, not status. */
    border-left: 2px solid var(--hz-brand);
    border-radius: var(--hz-radius-control);
    background: var(--hz-brand-soft);
}

.override-row[b-xgrbbq37y2] {
    display: flex;
    align-items: center;
    gap: 0.35rem;
}

.override-label[b-xgrbbq37y2] {
    font-size: 0.72rem;
    /* Horizon muted token (theme-aware); the un-remapped --rz-text-secondary-color would
       be a near-white in the dark Radzen base theme (see Monitor.razor.css note). */
    color: var(--hz-text-muted);
    white-space: nowrap;
}

.override-buttons[b-xgrbbq37y2] {
    display: flex;
    gap: 0.35rem;
}

/* ── Toolbar ─────────────────────────────────────────────────────────────────── */
.es-checks[b-xgrbbq37y2] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
    min-height: 2rem;
}

.es-check[b-xgrbbq37y2] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    margin: 0;
    font-size: 0.78rem;
    color: var(--hz-text-muted);
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
}

.es-summary[b-xgrbbq37y2] {
    max-width: 34rem;
    line-height: 1.4;
    text-align: right;
}

/* ── Grid framing ────────────────────────────────────────────────────────────── */
/* The panel already supplies the hairline frame — drop the grid's own so the two
   borders don't double up. ::deep because the grid is a child component. */
.hz-panel__body--flush[b-xgrbbq37y2]  .rz-data-grid,
.hz-panel__body--flush[b-xgrbbq37y2]  .rz-datatable {
    border: none;
    border-radius: 0;
    background: transparent;
}

/* Proposed-window cell: the range is the datum, the minutes are the qualifier. */
.es-window[b-xgrbbq37y2] {
    font-weight: 500;
    color: var(--hz-text);
}

.es-window-mins[b-xgrbbq37y2] {
    margin-left: 0.35rem;
    font-size: 0.72rem;
    color: var(--hz-text-muted);
}

/* ── Loading ─────────────────────────────────────────────────────────────────── */
.es-loading[b-xgrbbq37y2] {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--hz-space-6);
}
/* /Components/Pages/Coinbase/Monitor.razor.rz.scp.css */
/* Spec 036 US3 — the admin live-trade monitor, restyled for spec 078.
   The page is built from the shared 618 vocabulary (.hz-panel / .hz-callout / .hz-badge /
   .hz-empty); only the genuinely monitor-specific layout lives here: the engine health strip,
   the guarded maintenance switch shell, the per-account header, and the grid sections.

   Colors use the 618 theme tokens (--hz-*) directly, NOT the Radzen --rz-base-*/
   --rz-text-secondary-color variables: the token layer (wwwroot/css/six18.css) only remaps
   a few --rz-* vars[b-b43a80esl5], so the un-remapped ones keep the base Radzen (light) values — which made
   white dark-mode text land on a light-grey head. The --hz-* tokens are defined and correct in
   both light and dark. */

.cb-monitor__loading[b-b43a80esl5] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    padding: var(--hz-space-5) 0;
}

/* ── Engine health strip ─────────────────────────────────────────────────────── */

.cb-health[b-b43a80esl5] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr)) auto;
}

.cb-health__cell[b-b43a80esl5] {
    padding: 0.7rem 1rem;
    border-right: 1px solid var(--hz-border);
    min-width: 0;
}

.cb-health__cell:last-child[b-b43a80esl5] {
    border-right: none;
}

.cb-health__cell--status[b-b43a80esl5] {
    display: flex;
    align-items: center;
}

.cb-health__label[b-b43a80esl5] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.cb-health__value[b-b43a80esl5] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
    margin-top: 0.3rem;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.85rem;
    color: var(--hz-text);
}

/* Stale is a WARNING (orange), never a brand accent and never a hard failure. */
.cb-health__value--warn[b-b43a80esl5] {
    color: var(--hz-warning);
}

@media (max-width: 900px) {
    .cb-health[b-b43a80esl5] {
        grid-template-columns: 1fr 1fr;
    }

    .cb-health__cell[b-b43a80esl5] {
        border-bottom: 1px solid var(--hz-border);
    }
}

/* ── Callout trailing tag ────────────────────────────────────────────────────── */

.cb-callout__tag[b-b43a80esl5] {
    margin-left: auto;
    flex: none;
    align-self: flex-start;
}

/* ── Guarded maintenance switch ──────────────────────────────────────────────────
   CoinbaseTradingSwitch is a shared component this page does not own; it paints its own
   light-mode-only success/danger inline background. The shell below re-frames it as a
   guarded control (gold keyline = the one primary surface on this page) and neutralises
   that inline fill so it reads correctly in dark mode too. The !important is required
   only because the colour is an inline style on the child component. */

.cb-guard[b-b43a80esl5] {
    position: relative;
    overflow: hidden;
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    padding: 0.85rem 1rem;
    color: var(--hz-text);
}

.cb-guard[b-b43a80esl5]::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 2px;
    background: var(--hz-brand-gradient);
}

/* CoinbaseTradingSwitch carries its own token-based state tint (spec 078), so the guard
   panel only needs to drop the component's outer frame — the panel already provides one.
   This used to need `!important` to fight an inline pastel background on the component;
   that inline style is gone, so plain specificity is enough. */
.cb-guard[b-b43a80esl5]  .cb-trading-switch {
    border: none;
    border-radius: 0;
    padding: 0.25rem 0;
}

/* ── Pending-action confirmation strip ───────────────────────────────────────── */

.cb-confirm[b-b43a80esl5] {
    align-items: center;
    flex-wrap: wrap;
}

.cb-confirm__text[b-b43a80esl5] {
    flex: 1 1 20rem;
    min-width: 0;
}

.cb-confirm__actions[b-b43a80esl5] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex: none;
}

/* ── Per-account panel ───────────────────────────────────────────────────────── */

.cb-account__head[b-b43a80esl5] {
    background: var(--hz-raised);
}

.cb-account__ident[b-b43a80esl5] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
    min-width: 0;
}

.cb-account__name[b-b43a80esl5] {
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.95rem;
    color: var(--hz-text);
}

.cb-account__kpis[b-b43a80esl5] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-5);
    flex-wrap: wrap;
    margin-left: auto;
}

.cb-kpi[b-b43a80esl5] {
    display: inline-flex;
    flex-direction: column;
    line-height: 1.2;
    min-width: 0;
}

.cb-kpi__label[b-b43a80esl5] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.cb-kpi__value[b-b43a80esl5] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.85rem;
    font-weight: 500;
    color: var(--hz-text);
}

/* Stale data must read as stale at a glance — never as live figures (FR-029). */
.cb-account.is-stale[b-b43a80esl5] {
    border-style: dashed;
    opacity: 0.78;
}

/* ── Grid sections inside an account panel ───────────────────────────────────── */

.cb-section[b-b43a80esl5] {
    padding: 0.65rem 1rem 0.9rem;
}

.cb-section + .cb-section[b-b43a80esl5] {
    border-top: 1px solid var(--hz-border);
}

.cb-section__label[b-b43a80esl5] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-muted);
    margin-bottom: 0.45rem;
}

.cb-section__count[b-b43a80esl5] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    letter-spacing: 0;
    color: var(--hz-text-faint);
}

.cb-commands[b-b43a80esl5] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--hz-space-2);
}

/* ── Grid cell decorations ───────────────────────────────────────────────────── */

.cb-sym[b-b43a80esl5] {
    font-family: var(--hz-font-mono);
    font-weight: 500;
    color: var(--hz-text);
    margin-right: 0.35rem;
}

.cb-tf[b-b43a80esl5] {
    font-family: var(--hz-font-mono);
    font-size: 0.68rem;
    color: var(--hz-text-faint);
    margin-left: 0.35rem;
}

.cb-monitor__note[b-b43a80esl5] {
    max-width: 62rem;
    line-height: 1.5;
}

@media (max-width: 640px) {
    .cb-account__kpis[b-b43a80esl5] {
        margin-left: 0;
        gap: var(--hz-space-4);
    }

    .cb-section[b-b43a80esl5] {
        padding: 0.5rem 0.6rem 0.7rem;
    }
}
/* /Components/Pages/DailyPotential.razor.rz.scp.css */
/* Daily Potential (spec 105) — crisp minimal: hairline borders, flat elevation, tabular numerics.
   Times rendered in Eastern throughout; colors ride the site tokens / currentColor. */

.dpot[b-1oq1oxna30] { display: flex; flex-direction: column; gap: 0.75rem; }

.dpot__blurb[b-1oq1oxna30] { margin: 0 0 0.6rem; opacity: 0.85; max-width: 78ch; }

.dpot__controls[b-1oq1oxna30] { display: flex; gap: 1rem; align-items: center; }

.dpot__control-label[b-1oq1oxna30] {
    display: inline-flex; gap: 0.4rem; align-items: center;
    font-size: 0.85rem; opacity: 0.9;
}

.dpot__days[b-1oq1oxna30], .dpot__select[b-1oq1oxna30] {
    padding: 0.2rem 0.4rem;
    background: transparent; color: inherit;
    border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
    border-radius: 2px;
}

.dpot__days[b-1oq1oxna30] { width: 4.5rem; }

.dpot__sizing-note[b-1oq1oxna30] { font-size: 0.8rem; opacity: 0.65; }

/* ── Day cards ─────────────────────────────────────────────────────────── */
.dpot__day[b-1oq1oxna30] { padding: 0; overflow: hidden; }

.dpot__day--win[b-1oq1oxna30] { border-left: 3px solid #4caf7d; }
.dpot__day--loss[b-1oq1oxna30] { border-left: 3px solid #c25b5b; }

.dpot__day-head[b-1oq1oxna30] {
    display: flex; align-items: center; gap: 1.1rem; flex-wrap: wrap;
    padding: 0.65rem 1rem;
    cursor: pointer;
    user-select: none;
}

.dpot__day-head:hover[b-1oq1oxna30] { background: color-mix(in srgb, currentColor 4%, transparent); }

.dpot__day--open > .dpot__day-head[b-1oq1oxna30] {
    border-bottom: 1px solid color-mix(in srgb, currentColor 15%, transparent);
}

.dpot__day-ident[b-1oq1oxna30] { min-width: 8.5rem; display: flex; flex-direction: column; line-height: 1.15; }
.dpot__day-date[b-1oq1oxna30] { font-weight: 600; font-size: 1rem; }
.dpot__day-year[b-1oq1oxna30] { font-size: 0.72rem; opacity: 0.55; }

.dpot__state[b-1oq1oxna30] {
    font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.07em;
    padding: 0.12rem 0.5rem;
    border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
    border-radius: 2px;
}

.dpot__state--cached[b-1oq1oxna30] { color: #4caf7d; border-color: color-mix(in srgb, #4caf7d 55%, transparent); }
.dpot__state--running[b-1oq1oxna30] { color: #d9a441; border-color: color-mix(in srgb, #d9a441 55%, transparent); }
.dpot__state--unavailable[b-1oq1oxna30] { color: #c25b5b; border-color: color-mix(in srgb, #c25b5b 55%, transparent); }
.dpot__state--notrequested[b-1oq1oxna30] { opacity: 0.55; }

.dpot__headline-pnl[b-1oq1oxna30] {
    font-size: 1.15rem; font-weight: 650;
    font-variant-numeric: tabular-nums;
    min-width: 6rem;
}

.dpot__headline-item[b-1oq1oxna30] { font-variant-numeric: tabular-nums; opacity: 0.85; font-size: 0.9rem; }

.dpot__pos[b-1oq1oxna30] { color: #4caf7d; }
.dpot__neg[b-1oq1oxna30] { color: #c25b5b; }
.dpot__muted[b-1oq1oxna30] { opacity: 0.6; }
.dpot__num[b-1oq1oxna30] { text-align: right; }

.dpot__badge[b-1oq1oxna30] {
    font-size: 0.68rem; padding: 0.05rem 0.4rem;
    border: 1px solid color-mix(in srgb, currentColor 35%, transparent);
    border-radius: 2px; opacity: 0.8;
}

.dpot__head-actions[b-1oq1oxna30] { margin-left: auto; display: inline-flex; align-items: center; gap: 0.75rem; }

.dpot__btn[b-1oq1oxna30] {
    padding: 0.25rem 0.9rem;
    background: transparent; color: inherit;
    border: 1px solid color-mix(in srgb, currentColor 40%, transparent);
    border-radius: 2px; cursor: pointer;
    font-size: 0.82rem;
}

.dpot__btn:hover[b-1oq1oxna30] { border-color: currentColor; background: color-mix(in srgb, currentColor 6%, transparent); }

.dpot__btn--primary[b-1oq1oxna30] { border-color: currentColor; font-weight: 600; }

.dpot__chevron[b-1oq1oxna30] { opacity: 0.5; font-size: 0.9rem; }

.dpot__spinner[b-1oq1oxna30] {
    width: 0.85rem; height: 0.85rem;
    border: 2px solid color-mix(in srgb, currentColor 25%, transparent);
    border-top-color: #d9a441;
    border-radius: 50%;
    animation: dpot-spin-b-1oq1oxna30 0.9s linear infinite;
}

@keyframes dpot-spin-b-1oq1oxna30 { to { transform: rotate(360deg); } }

.dpot__day-body[b-1oq1oxna30] { padding: 0.9rem 1rem 1.1rem; }

.dpot__loading[b-1oq1oxna30] { opacity: 0.7; padding: 0.6rem 1rem; }

.dpot__stats[b-1oq1oxna30] { margin-bottom: 0.5rem; }

.dpot__section-title[b-1oq1oxna30] {
    font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.06em;
    margin: 1.2rem 0 0.45rem; opacity: 0.85;
}

/* ── Timeline ──────────────────────────────────────────────────────────── */
.dpot__timeline[b-1oq1oxna30] {
    border: 1px solid color-mix(in srgb, currentColor 14%, transparent);
    border-radius: 2px;
    background: color-mix(in srgb, currentColor 2%, transparent);
}

.dpot__timeline-svg[b-1oq1oxna30] { width: 100%; height: auto; display: block; }

.dpot__timeline-svg .dpot__tick[b-1oq1oxna30] {
    font-size: 10px; fill: currentColor; fill-opacity: 0.55;
    font-variant-numeric: tabular-nums;
}

.dpot__timeline-svg .dpot__tick--rth[b-1oq1oxna30] { fill-opacity: 0.9; font-weight: 600; }

.dpot__legend[b-1oq1oxna30] {
    display: flex; gap: 1.2rem; flex-wrap: wrap;
    font-size: 0.75rem; opacity: 0.8; margin-top: 0.35rem;
}

.dpot__legend span[b-1oq1oxna30] { display: inline-flex; align-items: center; gap: 0.35rem; }

.dpot__swatch[b-1oq1oxna30] { width: 14px; height: 8px; display: inline-block; border-radius: 1px; }
.dpot__swatch--win[b-1oq1oxna30] { background: #4caf7d; }
.dpot__swatch--loss[b-1oq1oxna30] { background: #c25b5b; }
.dpot__swatch--working[b-1oq1oxna30] { background: color-mix(in srgb, currentColor 30%, transparent); height: 2px; }
.dpot__swatch--blocked[b-1oq1oxna30] { background: color-mix(in srgb, currentColor 10%, transparent); border: 1px solid color-mix(in srgb, currentColor 20%, transparent); }
.dpot__swatch--curve[b-1oq1oxna30] { background: none; border-top: 1.5px solid currentColor; height: 0; }

/* ── Ledger table ──────────────────────────────────────────────────────── */
.dpot__table-wrap[b-1oq1oxna30] { overflow-x: auto; }

.dpot__table[b-1oq1oxna30] {
    width: 100%; border-collapse: collapse;
    font-size: 0.82rem; font-variant-numeric: tabular-nums;
}

.dpot__table th[b-1oq1oxna30] {
    text-align: left; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em;
    opacity: 0.6; padding: 0.3rem 0.55rem;
    border-bottom: 1px solid color-mix(in srgb, currentColor 25%, transparent);
    white-space: nowrap;
}

.dpot__table th.dpot__num[b-1oq1oxna30] { text-align: right; }

.dpot__table td[b-1oq1oxna30] {
    padding: 0.32rem 0.55rem;
    border-bottom: 1px solid color-mix(in srgb, currentColor 10%, transparent);
    white-space: nowrap;
    vertical-align: top;
}

.dpot__row--taken[b-1oq1oxna30] { background: color-mix(in srgb, #4caf7d 4%, transparent); }
.dpot__row--skipped[b-1oq1oxna30] { opacity: 0.6; }

.dpot__zone-name[b-1oq1oxna30] { font-weight: 600; }

.dpot__zone-id[b-1oq1oxna30] {
    font-family: ui-monospace, "Cascadia Mono", Consolas, monospace;
    font-size: 0.68rem; opacity: 0.55;
}

.dpot__reason[b-1oq1oxna30] {
    font-size: 0.72rem;
    border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
    border-radius: 2px; padding: 0.02rem 0.35rem;
}

.dpot__reason--sel[b-1oq1oxna30] { color: #4caf7d; border-color: color-mix(in srgb, #4caf7d 55%, transparent); }

.dpot__legs-row td[b-1oq1oxna30] { font-size: 0.72rem; opacity: 0.75; padding-top: 0; border-bottom: 1px solid color-mix(in srgb, currentColor 10%, transparent); }

.dpot__leg[b-1oq1oxna30] { margin-right: 0.9rem; font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; }

.dpot__leg-outcome[b-1oq1oxna30] { opacity: 0.75; }

/* ── Comparison + fidelity ─────────────────────────────────────────────── */
.dpot__compare[b-1oq1oxna30] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: 1rem;
}

.dpot__compare-col h4[b-1oq1oxna30], .dpot__activity h4[b-1oq1oxna30] {
    font-size: 0.78rem; margin: 0 0 0.3rem; text-transform: uppercase; letter-spacing: 0.05em; opacity: 0.8;
}

.dpot__compare-row[b-1oq1oxna30], .dpot__activity-row[b-1oq1oxna30] {
    font-size: 0.82rem; padding: 0.14rem 0; font-variant-numeric: tabular-nums;
}

.dpot__activity[b-1oq1oxna30] { margin-top: 0.8rem; }

.dpot__fidelity[b-1oq1oxna30] { margin-top: 0.5rem; font-size: 0.85rem; opacity: 0.85; }
.dpot__fidelity summary[b-1oq1oxna30] { cursor: pointer; }
.dpot__fidelity ul[b-1oq1oxna30] { margin: 0.4rem 0 0 1.2rem; }
/* /Components/Pages/Dashboard.razor.rz.scp.css */
/* Dashboard (route "/") — trading landing page.
   Layout only: the strip, panels, table and badges all come from six18-ui.css.
   Tokens only — a raw hex here would break the light theme. */

.dash[b-17jrn0akqj] {
    min-width: 0;
}

/* ── Hero: automation controls + link readout ────────────────────────────────── */

.dash__control-body[b-17jrn0akqj] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

/* The link indicator is a child component, so its markup needs ::deep to be
   reachable from this page's scoped sheet. */
.dash__control[b-17jrn0akqj]  .link-status {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.79rem;
    color: var(--hz-text-muted);
}

.dash__control[b-17jrn0akqj]  .link-status strong {
    color: var(--hz-text);
    font-weight: 600;
}

/* ── Stat strip ─────────────────────────────────────────────────────────────── */

/* Warning tone for the armed-safety value and the blocked-window countdown.
   Orange is the platform's warning colour; gold stays an accent, never a status. */
.dash__warn[b-17jrn0akqj] {
    color: var(--hz-warning);
}

.dash__stat-note[b-17jrn0akqj] {
    color: var(--hz-text-faint);
    font-size: 0.71rem;
    margin-top: 0.15rem;
}

/* ── Split: tracked zones | recent activity ─────────────────────────────────── */

/* Grid children default to min-width:auto, which lets a wide table push the page
   sideways instead of scrolling inside .hz-table-wrap. */
.dash__zones[b-17jrn0akqj],
.dash__activity[b-17jrn0akqj] {
    min-width: 0;
}

.dash__zones .hz-panel__actions[b-17jrn0akqj] {
    gap: var(--hz-space-2);
}

/* ── Activity feed ──────────────────────────────────────────────────────────── */

.dash-feed[b-17jrn0akqj] {
    list-style: none;
    margin: 0;
    padding: 0;
}

.dash-feed__item[b-17jrn0akqj] {
    display: flex;
    align-items: flex-start;
    gap: var(--hz-space-3);
    padding: 0.45rem 0.85rem;
    border-bottom: 1px solid var(--hz-border);
    font-size: 0.82rem;
    line-height: 1.45;
}

.dash-feed__item:last-child[b-17jrn0akqj] {
    border-bottom: none;
}

.dash-feed__bar[b-17jrn0akqj] {
    flex: none;
    width: 2px;
    align-self: stretch;
    border-radius: 1px;
    background: var(--hz-text-faint);
}

.dash-feed__bar--ok[b-17jrn0akqj] { background: var(--hz-success); }
.dash-feed__bar--warn[b-17jrn0akqj] { background: var(--hz-warning); }
.dash-feed__bar--bad[b-17jrn0akqj] { background: var(--hz-danger); }
.dash-feed__bar--info[b-17jrn0akqj] { background: var(--hz-info); }
.dash-feed__bar--muted[b-17jrn0akqj] { background: var(--hz-border-strong); }

.dash-feed__time[b-17jrn0akqj] {
    flex: none;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.75rem;
    color: var(--hz-text-faint);
    padding-top: 0.05rem;
    white-space: nowrap;
}

.dash-feed__text[b-17jrn0akqj] {
    color: var(--hz-text-muted);
    min-width: 0;
    overflow-wrap: anywhere;
}

.dash-feed__text b[b-17jrn0akqj] {
    color: var(--hz-text);
    font-weight: 600;
}

.dash-feed__detail[b-17jrn0akqj] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.78rem;
}

/* ── Secondary status tiles ─────────────────────────────────────────────────── */

.dash__tiles[b-17jrn0akqj] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
    gap: var(--hz-space-3);
}
/* /Components/Pages/EconomicData.razor.rz.scp.css */
/* Economic Data — cell typography + the high-impact row tint. Everything structural comes
   from six18-ui.css. */

/* The feed's own range string sits under the subtitle — kill the browser <p> margin. */
.hz-page-head__text .hz-meta[b-tin80eandj] {
    margin: 0.35rem 0 0 0;
}

/* Date cell: weekday / date / time read as three fields, all mono + tabular. */
.econ-when[b-tin80eandj] {
    display: inline-flex;
    align-items: baseline;
    gap: var(--hz-space-2);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.econ-day[b-tin80eandj] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.econ-date[b-tin80eandj] {
    color: var(--hz-text-muted);
}

.econ-time[b-tin80eandj] {
    color: var(--hz-text);
    font-weight: 500;
}

/* The event name is the row's identifying cell — prose, brightest. */
.econ-title[b-tin80eandj] {
    font-family: var(--hz-font);
    font-weight: 500;
    color: var(--hz-text);
}

/* Category is supporting prose. */
.econ-type[b-tin80eandj] {
    font-family: var(--hz-font);
    color: var(--hz-text-muted);
}

.econ-cc[b-tin80eandj] {
    font-family: var(--hz-font-mono);
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--hz-text-muted);
}

.econ-num[b-tin80eandj] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
}

/* High-impact rows carry the warning tint (orange — gold is never a status color). The
   marker class sits on the date cell's own span; :has() lifts it to the row so the tint
   covers the whole record even though the grid renders the <tr>. ::deep crosses the grid's
   scope boundary; the tint is set on the <td> so it paints over Radzen's row striping. */
.economic-page[b-tin80eandj]  tr:has(.econ-when.is-high) td {
    background: var(--hz-warning-soft);
}

.economic-page[b-tin80eandj]  tr:has(.econ-when.is-high) td:first-child {
    box-shadow: inset 2px 0 0 var(--hz-warning);
}

.economic-page[b-tin80eandj]  tr:has(.econ-when.is-high):hover td {
    background: color-mix(in srgb, var(--hz-warning) 18%, transparent);
}
/* /Components/Pages/EventSuggestions.razor.rz.scp.css */
/* Event Blockout Suggestions Page Styles */

/* Toolbar wraps on narrow (tablet) widths instead of squeezing the controls,
   which previously clipped the Refresh button's label past its rounded edge. */
.event-toolbar[b-h8kyuwxmck] {
    flex-wrap: wrap;
    row-gap: 0.5rem;
}

    .event-toolbar[b-h8kyuwxmck]  .rz-button {
        flex-shrink: 0;
        white-space: nowrap;
    }

.row-passed[b-h8kyuwxmck] {
    opacity: 0.6;
    background-color: var(--hz-bg) !important;
}

.row-applied[b-h8kyuwxmck] {
    background-color: var(--hz-success-soft) !important;
}

.row-conflict[b-h8kyuwxmck] {
    border-left: 3px solid var(--hz-warning);
}

.override-icon[b-h8kyuwxmck] {
    color: var(--hz-warning);
    margin-left: 4px;
    font-size: 0.85em;
}

.reserved-conflict-icon[b-h8kyuwxmck] {
    color: var(--hz-warning);
    margin-right: 4px;
}

.text-decoration-line-through[b-h8kyuwxmck] {
    text-decoration: line-through;
}

.text-muted[b-h8kyuwxmck] {
    color: var(--hz-text-muted) !important;
}

.fst-italic[b-h8kyuwxmck] {
    font-style: italic;
}

.fw-bold[b-h8kyuwxmck] {
    font-weight: 700;
}

.small[b-h8kyuwxmck] {
    font-size: 0.85em;
}

.ms-1[b-h8kyuwxmck] {
    margin-left: 0.25rem;
}

.gap-3[b-h8kyuwxmck] {
    gap: 1rem;
}

.mb-3[b-h8kyuwxmck] {
    margin-bottom: 1rem;
}

/* Override panel (inline Apply dialog) */
.override-panel[b-h8kyuwxmck] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 4px 6px;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-raised);
}

.override-row[b-h8kyuwxmck] {
    display: flex;
    align-items: center;
    gap: 4px;
}

.override-label[b-h8kyuwxmck] {
    font-size: 0.75em;
    color: var(--hz-text-muted);
    white-space: nowrap;
}

/* Highlight row when navigated from a notification */
[b-h8kyuwxmck] .event-highlight-row {
    animation: event-highlight-pulse-b-h8kyuwxmck 3s ease-out;
    background-color: color-mix(in srgb, var(--hz-warning) 25%, transparent) !important;
}

.event-highlight-badge[b-h8kyuwxmck] {
    animation: event-highlight-pulse-b-h8kyuwxmck 3s ease-out;
}

@keyframes event-highlight-pulse-b-h8kyuwxmck {
    0% {
        background-color: color-mix(in srgb, var(--hz-warning) 55%, transparent);
    }
    100% {
        background-color: transparent;
    }
}

.override-buttons[b-h8kyuwxmck] {
    display: flex;
    gap: 4px;
    justify-content: flex-end;
}
/* /Components/Pages/Manual.razor.rz.scp.css */
/* Manual order — page-scoped layout (spec 078).
   Replaces the page's old inline <style> block and Bootstrap container/row/col scaffolding.
   Tokens only — no raw colors, so light mode follows. */

.mn-split[b-hnpg9kxvk4] {
    align-items: start;
}

/* ── Order form ──────────────────────────────────────────────────────────────── */

.mn-form[b-hnpg9kxvk4] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
}

.mn-field--symbol[b-hnpg9kxvk4]  .rz-dropdown {
    width: 100%;
    max-width: 24rem;
}

.mn-contract[b-hnpg9kxvk4] {
    padding: 0.7rem 0.9rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-raised);
}

.mn-zone[b-hnpg9kxvk4] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: var(--hz-space-4);
}

.mn-zone[b-hnpg9kxvk4]  .rz-numeric {
    width: 100%;
}

.mn-checks[b-hnpg9kxvk4] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--hz-space-5);
}

.mn-check[b-hnpg9kxvk4] {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
}

.mn-check__label[b-hnpg9kxvk4] {
    color: var(--hz-text-muted);
    font-size: 0.8rem;
}

/* ── Order preview ───────────────────────────────────────────────────────────── */

.mn-preview[b-hnpg9kxvk4] {
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    overflow: hidden;
}

.mn-preview__head[b-hnpg9kxvk4] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
    padding: 0.5rem 0.85rem;
    border-bottom: 1px solid var(--hz-border);
    background: var(--hz-raised);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

/* ── Place action ────────────────────────────────────────────────────────────── */

.mn-place[b-hnpg9kxvk4] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
    padding-top: var(--hz-space-2);
    border-top: 1px solid var(--hz-border);
}

/* ── Right-hand context column ───────────────────────────────────────────────── */

.mn-context[b-hnpg9kxvk4] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
    min-width: 0;
}

.mn-blocked[b-hnpg9kxvk4] {
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
}

.mn-blocked__summary[b-hnpg9kxvk4] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
    padding: 0.55rem 1rem;
    cursor: pointer;
    list-style: none;
    color: var(--hz-text-muted);
}

.mn-blocked__summary[b-hnpg9kxvk4]::-webkit-details-marker {
    display: none;
}

.mn-blocked__caret[b-hnpg9kxvk4] {
    color: var(--hz-text-faint);
    font-size: 0.7rem;
    transition: transform 0.12s ease;
}

.mn-blocked[open] .mn-blocked__caret[b-hnpg9kxvk4] {
    transform: rotate(90deg);
}

@media (prefers-reduced-motion: reduce) {
    .mn-blocked__caret[b-hnpg9kxvk4] {
        transition: none;
    }
}

.mn-blocked__label[b-hnpg9kxvk4] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.mn-blocked__time[b-hnpg9kxvk4] {
    margin-left: auto;
}

/* "Clear" until the list actually contains an active window — the signal the old page
   carried with a global `details:has(li) { color: red }` rule. */
.mn-blocked__flag[b-hnpg9kxvk4]::before {
    content: "CLEAR";
    display: inline-flex;
    align-items: center;
    padding: 0.12rem 0.45rem;
    border-radius: var(--hz-radius-badge);
    border: 1px solid var(--hz-border-strong);
    background: var(--hz-raised);
    color: var(--hz-text-muted);
    font-family: var(--hz-font-mono);
    font-weight: 600;
    font-size: 0.65rem;
}

.mn-blocked:has(li) .mn-blocked__flag[b-hnpg9kxvk4]::before {
    content: "ACTIVE";
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
    border-color: color-mix(in srgb, var(--hz-danger) 32%, transparent);
}

.mn-blocked:has(li) .mn-blocked__label[b-hnpg9kxvk4] {
    color: var(--hz-danger);
}

.mn-blocked__list[b-hnpg9kxvk4] {
    max-height: 190px;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 0 1rem 0.6rem 1rem;
    border-top: 1px solid var(--hz-border);
}

.mn-blocked__key[b-hnpg9kxvk4] {
    color: var(--hz-text);
    font-size: 0.78rem;
}

.mn-blocked__scope[b-hnpg9kxvk4] {
    color: var(--hz-text-muted);
}

/* ── Matrix facts ────────────────────────────────────────────────────────────── */

.mn-facts[b-hnpg9kxvk4] {
    padding: 0 1rem;
}

.mn-facts .hz-list__item[b-hnpg9kxvk4] {
    justify-content: space-between;
}

.mn-facts__k[b-hnpg9kxvk4] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.mn-facts__v[b-hnpg9kxvk4] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.8rem;
    color: var(--hz-text);
}
/* /Components/Pages/MyDesktop.razor.rz.scp.css */
/* My Desktop — step layout + the issued pairing-code block. Panels, buttons, badges and
   callouts all come from six18-ui.css.
   (The old .launch-link rule fell back to a hard-coded #2a8af6 when --rz-primary was absent;
   the links are now plain .hz-btn / .hz-btn--primary, so it is gone.) */

.desktop-steps[b-smaf623o2a] {
    display: grid;
    grid-template-columns: 1fr 1.35fr;
    gap: var(--hz-space-4);
    align-items: start;
}

@media (max-width: 1100px) {
    .desktop-steps[b-smaf623o2a] {
        grid-template-columns: 1fr;
    }
}

/* The step number belongs next to its title, not pushed to the panel's far edge. */
.desktop-step .hz-panel__head[b-smaf623o2a] {
    justify-content: flex-start;
}

.desktop-step__body[b-smaf623o2a] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--hz-space-3);
}

/* Callouts inside a step fill its width instead of shrinking to their text. */
.desktop-step__body > .hz-callout[b-smaf623o2a] {
    width: 100%;
}

.desktop-copy[b-smaf623o2a] {
    margin: 0;
    max-width: 62ch;
    color: var(--hz-text-muted);
    font-size: 0.82rem;
    line-height: 1.5;
}

/* The issued code block — inset against the panel so the secret reads as its own artifact. */
.desktop-pairing[b-smaf623o2a] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--hz-space-3);
    width: 100%;
    padding: var(--hz-space-4);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-card);
    background: var(--hz-bg);
}

.desktop-pairing__head[b-smaf623o2a] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    width: 100%;
}

.desktop-pairing__dismiss[b-smaf623o2a] {
    margin-left: auto;
}

/* The one-time code. It is base64url (22 chars), so it must wrap inside the panel rather
   than overflow it. */
.desktop-code[b-smaf623o2a] {
    display: block;
    width: 100%;
    font-family: var(--hz-font-mono);
    font-size: 1.15rem;
    font-weight: 500;
    letter-spacing: 0.08em;
    color: var(--hz-brand-strong);
    overflow-wrap: anywhere;
    word-break: break-all;
}

/* Prose, not a figure — override the mono treatment .hz-kv__v applies to values. */
.desktop-pairing-status[b-smaf623o2a] {
    font-family: var(--hz-font);
    font-size: 0.82rem;
    color: var(--hz-text-muted);
}
/* /Components/Pages/OrderManagement.razor.rz.scp.css */
/* Order Management — page-scoped layout (spec 078).
   Replaces the page's old inline <style> block (`details:has(li){color:red}`) and its
   `style="color: red"` attributes. Colors are tokens only, so light mode follows. */

/* ── Safety banner ───────────────────────────────────────────────────────────── */

.om-safety[b-gqq0bgknbw] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-4);
    padding: var(--hz-space-4) 1.1rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
}

.om-safety__shield[b-gqq0bgknbw] {
    flex: none;
    width: 2.4rem;
    height: 2.4rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-badge);
    font-size: 1.1rem;
    line-height: 1;
}

.om-safety__text[b-gqq0bgknbw] {
    min-width: 0;
}

.om-safety__title[b-gqq0bgknbw] {
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.85rem;
    letter-spacing: 0.06em;
}

.om-safety__desc[b-gqq0bgknbw] {
    margin-top: 0.25rem;
    color: var(--hz-text-muted);
    font-size: 0.78rem;
    line-height: 1.5;
}

.om-safety__desc b[b-gqq0bgknbw] {
    color: var(--hz-text);
    font-weight: 600;
}

.om-safety__aside[b-gqq0bgknbw] {
    margin-left: auto;
    flex: none;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.2rem;
    text-align: right;
}

.om-safety__link[b-gqq0bgknbw] {
    text-decoration: none;
    border-bottom: 1px dotted var(--hz-border-strong);
}

.om-safety__link:hover[b-gqq0bgknbw] {
    color: var(--hz-brand-strong);
    border-bottom-color: var(--hz-brand);
}

/* Armed — automation halted. Danger, not gold: this is a status, not a brand accent. */
.om-safety--on[b-gqq0bgknbw] {
    border-color: color-mix(in srgb, var(--hz-danger) 45%, transparent);
    background: var(--hz-danger-soft);
}

.om-safety--on .om-safety__shield[b-gqq0bgknbw] {
    color: var(--hz-danger);
    border-color: color-mix(in srgb, var(--hz-danger) 50%, transparent);
}

.om-safety--on .om-safety__title[b-gqq0bgknbw] {
    color: var(--hz-danger);
}

/* Disarmed — live trading active. */
.om-safety--off[b-gqq0bgknbw] {
    border-color: color-mix(in srgb, var(--hz-success) 35%, transparent);
    background: var(--hz-success-soft);
}

.om-safety--off .om-safety__shield[b-gqq0bgknbw] {
    color: var(--hz-success);
    border-color: color-mix(in srgb, var(--hz-success) 45%, transparent);
}

.om-safety--off .om-safety__title[b-gqq0bgknbw] {
    color: var(--hz-success);
}

@media (max-width: 800px) {
    .om-safety[b-gqq0bgknbw] {
        flex-wrap: wrap;
    }

    .om-safety__aside[b-gqq0bgknbw] {
        margin-left: 0;
        align-items: flex-start;
        text-align: left;
    }
}

/* ── Blocked / reserved window disclosure ────────────────────────────────────── */

.om-blocked[b-gqq0bgknbw] {
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
}

.om-blocked__summary[b-gqq0bgknbw] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    padding: 0.55rem 1rem;
    cursor: pointer;
    list-style: none;
    color: var(--hz-text-muted);
}

.om-blocked__summary[b-gqq0bgknbw]::-webkit-details-marker {
    display: none;
}

.om-blocked__caret[b-gqq0bgknbw] {
    color: var(--hz-text-faint);
    font-size: 0.7rem;
    transition: transform 0.12s ease;
}

.om-blocked[open] .om-blocked__caret[b-gqq0bgknbw] {
    transform: rotate(90deg);
}

@media (prefers-reduced-motion: reduce) {
    .om-blocked__caret[b-gqq0bgknbw] {
        transition: none;
    }
}

.om-blocked__label[b-gqq0bgknbw] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.om-blocked__time[b-gqq0bgknbw] {
    margin-left: auto;
}

/* "Clear" until the list actually contains an active window — this is the signal the
   old page carried with a global `details:has(li) { color: red }` rule. */
.om-blocked__flag[b-gqq0bgknbw]::before {
    content: "CLEAR";
    display: inline-flex;
    align-items: center;
    padding: 0.12rem 0.45rem;
    border-radius: var(--hz-radius-badge);
    border: 1px solid var(--hz-border-strong);
    background: var(--hz-raised);
    color: var(--hz-text-muted);
    font-family: var(--hz-font-mono);
    font-weight: 600;
    font-size: 0.65rem;
}

.om-blocked:has(li) .om-blocked__flag[b-gqq0bgknbw]::before {
    content: "ACTIVE";
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
    border-color: color-mix(in srgb, var(--hz-danger) 32%, transparent);
}

.om-blocked:has(li) .om-blocked__label[b-gqq0bgknbw] {
    color: var(--hz-danger);
}

.om-blocked__list[b-gqq0bgknbw] {
    max-height: 190px;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 0 1rem 0.6rem 1rem;
    border-top: 1px solid var(--hz-border);
}

.om-blocked__key[b-gqq0bgknbw] {
    color: var(--hz-text);
    font-size: 0.78rem;
}

.om-blocked__scope[b-gqq0bgknbw] {
    color: var(--hz-text-muted);
}

/* ── Toggle cards ────────────────────────────────────────────────────────────── */

.om-toggle[b-gqq0bgknbw] {
    display: flex;
    align-items: flex-start;
    gap: var(--hz-space-3);
}

.om-toggle__text[b-gqq0bgknbw] {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    min-width: 0;
}

.om-toggle__label[b-gqq0bgknbw] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text);
}

.om-toggle__hint[b-gqq0bgknbw] {
    color: var(--hz-text-muted);
    font-size: 0.75rem;
    line-height: 1.45;
}

/* ── Working-orders grid ─────────────────────────────────────────────────────── */

/* The grid sits flush inside the panel, so it drops its own frame. */
.om-orders[b-gqq0bgknbw]  .rz-data-grid,
.om-orders[b-gqq0bgknbw]  .rz-datatable {
    border: none;
    border-radius: 0;
    background: transparent;
}

.om-orders[b-gqq0bgknbw]  .rz-data-grid-data {
    border-radius: 0;
}

/* Row actions are dense — keep the pair of buttons on one line. */
.om-orders[b-gqq0bgknbw]  .rz-cell-data .rz-button {
    margin-right: 0.25rem;
}
/* /Components/Pages/OrderStats.razor.rz.scp.css */
/* Order Stats — page-scoped layout (spec 078).
   Replaces the <p>/<br>/Bootstrap container scaffolding with a slot grid.
   Tokens only — no raw colors. */

/* ── Context header ──────────────────────────────────────────────────────────── */

.os-ctx[b-bp27d0rwez] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--hz-space-4);
    flex-wrap: wrap;
}

.os-ctx__key[b-bp27d0rwez] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 1.15rem;
    font-weight: 500;
    color: var(--hz-text);
    margin-top: 0.2rem;
    overflow-wrap: anywhere;
}

.os-ctx__meta[b-bp27d0rwez] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.15rem;
    text-align: right;
}

/* ── Slot grid ───────────────────────────────────────────────────────────────── */

.os-grid[b-bp27d0rwez] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
    gap: var(--hz-space-4);
}

.os-slot[b-bp27d0rwez] {
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-raised);
    min-width: 0;
}

.os-slot__head[b-bp27d0rwez] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--hz-space-2);
    padding: 0.55rem 0.85rem;
    border-bottom: 1px solid var(--hz-border);
}

.os-slot__name[b-bp27d0rwez] {
    font-family: var(--hz-font-mono);
    font-weight: 600;
    font-size: 0.95rem;
    color: var(--hz-text);
}

.os-slot__body[b-bp27d0rwez] {
    padding: 0.7rem 0.85rem 0.85rem;
}

/* Read-only view of the three live orders behind the slot. */
.os-orders .hz-list__item[b-bp27d0rwez] {
    gap: var(--hz-space-3);
}

.os-orders__k[b-bp27d0rwez] {
    flex: none;
    width: 3rem;
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.os-orders__v[b-bp27d0rwez] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.82rem;
    color: var(--hz-text);
}

.os-orders__s[b-bp27d0rwez] {
    margin-left: auto;
    text-align: right;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.68rem;
    color: var(--hz-text-faint);
    overflow-wrap: anywhere;
}

/* ── Editable TP / SL ────────────────────────────────────────────────────────── */

.os-inputs[b-bp27d0rwez] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--hz-space-3);
    margin-top: var(--hz-space-3);
    padding-top: var(--hz-space-3);
    border-top: 1px solid var(--hz-border);
}

.os-inputs[b-bp27d0rwez]  .rz-numeric {
    width: 100%;
}

/* ── Per-group save row ──────────────────────────────────────────────────────── */

.os-save[b-bp27d0rwez] {
    flex-wrap: wrap;
}

.os-save__note[b-bp27d0rwez] {
    min-width: 0;
}

.os-save__spacer[b-bp27d0rwez] {
    flex: 1 1 auto;
}
/* /Components/Pages/RealStats.razor.rz.scp.css */
/* Real Stats (spec 071, restyled spec 078).
   Only genuinely page-specific layout lives here — panels, stats, tables, badges and
   the filter bar all come from six18-ui.css. Tokens only: a raw hex breaks light mode. */

/* ── Filter bar ─────────────────────────────────────────────────────────────── */

/* Give every Radzen editor the same footprint so the bar reads as one row of fields. */
.rs-filters[b-7x5k6vsnub]  .rz-dropdown,
.rs-filters[b-7x5k6vsnub]  .rz-datepicker {
    min-width: 10rem;
}

/* The timezone caveat is a caption, not a field — centre it against the controls. */
.rs-tz-note[b-7x5k6vsnub] {
    align-self: center;
    text-align: right;
}

/* ── Tab bodies ─────────────────────────────────────────────────────────────── */

/* Each Radzen tab panel stacks its sections exactly like a page would. */
.rs-tabbody[b-7x5k6vsnub] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
    padding-top: var(--hz-space-3);
}

.rs-loading[b-7x5k6vsnub] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    padding: var(--hz-space-5) 0;
}

/* ── Values ─────────────────────────────────────────────────────────────────── */

/* Fees are an expense, never a loss — warning orange, never the danger red. */
.rs-num-fee[b-7x5k6vsnub] {
    color: var(--hz-warning);
}

/* ── Panels ─────────────────────────────────────────────────────────────────── */

.rs-chips[b-7x5k6vsnub] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--hz-space-2);
}

.rs-chips + .rs-legend[b-7x5k6vsnub],
.rs-legend + .rs-chips[b-7x5k6vsnub] {
    margin-top: var(--hz-space-3);
}

.rs-legend[b-7x5k6vsnub] {
    margin: 0;
    font-family: var(--hz-font);
    font-size: 0.78rem;
    line-height: 1.5;
    color: var(--hz-text-muted);
}

/* A prose footnote reads left-to-right; the panel foot defaults to right-aligned actions. */
.rs-foot-note[b-7x5k6vsnub] {
    justify-content: flex-start;
    text-align: left;
}

/* Qualifier beside an ACTUAL / MODELED provenance badge. */
.rs-basis-note[b-7x5k6vsnub] {
    margin-left: var(--hz-space-2);
    font-family: var(--hz-font);
    font-weight: 400;
    color: var(--hz-text-muted);
}

/* Radzen draws its own card frame; inside a panel that would double the hairline. */
.rs-gridpanel[b-7x5k6vsnub]  .rz-data-grid {
    border: none;
    border-radius: 0;
    background: transparent;
}
/* /Components/Pages/RealStatsComparison.razor.rz.scp.css */
/* Real Stats — Comparison tab (spec 071 US2, restyled spec 078).
   Toolbar, panels, tables, callouts and badges come from six18-ui.css; this file only
   holds what is specific to this comparison. Tokens only: a raw hex breaks light mode. */

.rsc-picker[b-icd125ixul]  .rz-dropdown {
    min-width: 11rem;
}

/* Five metrics across four columns — a full-bleed table would read as mostly whitespace. */
.rsc-panel[b-icd125ixul] {
    max-width: 60rem;
}

/* Row headers are metric names, not column labels: prose, not the uppercase micro-type. */
.rsc-table tbody th.rsc-metric[b-icd125ixul] {
    font-family: var(--hz-font);
    font-size: 0.78rem;
    font-weight: 500;
    letter-spacing: normal;
    text-transform: none;
    color: var(--hz-text);
    background: transparent;
    white-space: nowrap;
}

/* The baseline state lives in the panel foot, which otherwise right-aligns actions. */
.rsc-foot[b-icd125ixul] {
    justify-content: flex-start;
    flex-wrap: wrap;
}

/* An "unavailable" explanation takes the whole foot rather than sitting beside a control. */
.rsc-foot__callout[b-icd125ixul] {
    flex: 1 1 100%;
}

.rsc-running[b-icd125ixul] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
}

/* ── Zone breakdown ────────────────────────────────────────────────────────── */

/* Unlike the five-metric table, the zone grid earns the full width. */
.rsc-zones[b-icd125ixul] {
    max-width: none;
}

.rsc-zone-toggle[b-icd125ixul] {
    display: inline-flex;
    align-items: center;
    gap: var(--hz-space-1);
    cursor: pointer;
    user-select: none;
}

/* ── Disclosed basis ───────────────────────────────────────────────────────── */

.rsc-basis__k[b-icd125ixul] {
    flex: 0 0 10.5rem;
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.rsc-basis__v[b-icd125ixul] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.75rem;
    line-height: 1.5;
    color: var(--hz-text-muted);
    min-width: 0;
    overflow-wrap: anywhere;
}

@media (max-width: 700px) {
    .rsc-basis .hz-list__item[b-icd125ixul] {
        flex-direction: column;
        gap: var(--hz-space-1);
    }

    .rsc-basis__k[b-icd125ixul] {
        flex: none;
    }
}

/* Spec 081 US2: placement-outage disclosure and the not-trading zone rows. */
.rsc-inactive__list[b-icd125ixul] {
    margin: var(--hz-space-1) 0 var(--hz-space-2);
    padding-left: 1.1rem;
    font-variant-numeric: tabular-nums;
}

.rsc-inactive__list li[b-icd125ixul] {
    line-height: 1.6;
}

/* The reason sits under the verdict badge, so it reads as a caption rather than a second column. */
.rsc-inactive-reason[b-icd125ixul] {
    margin-top: 2px;
    line-height: 1.4;
}

/* The active-window comparator is a variant of the row above it, not a peer metric. */
.rsc-active-window > th[b-icd125ixul],
.rsc-active-window > td[b-icd125ixul] {
    border-top-style: dashed;
}

.rsc-active-window .rsc-metric[b-icd125ixul] {
    padding-left: var(--hz-space-3);
    font-weight: 400;
    color: var(--hz-text-muted);
}

/* The account-wide ledger comparator (spec 081 US4) — the headline row when one exists, so it
   reads as a primary comparison rather than a footnote like the active-window rows above. */
.rsc-ledger > th[b-icd125ixul],
.rsc-ledger > td[b-icd125ixul] {
    border-top-style: dashed;
    font-weight: 600;
}

.rsc-ledger .rsc-metric[b-icd125ixul] {
    padding-left: var(--hz-space-3);
}

.rsc-parity[b-icd125ixul] {
    font-family: var(--hz-font-mono);
    font-size: 0.75rem;
    line-height: 1.6;
}

.rsc-parity-actions[b-icd125ixul] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-2);
    margin-bottom: var(--hz-space-2);
    align-items: flex-start;
}
/* /Components/Pages/RealStatsTrades.razor.rz.scp.css */
/* Real Stats — Trades tab (spec 071 US3 / 072 FR-011, restyled spec 078).
   Grid, badges and tables come from six18-ui.css; this holds the row-detail inset
   and the two value tints. Tokens only: a raw hex breaks light mode. */

/* Radzen draws its own card frame; inside a panel that would double the hairline. */
.rst-panel[b-c10oin1wgd]  .rz-data-grid {
    border: none;
    border-radius: 0;
    background: transparent;
}

/* ── Row detail: the recorded executions behind a fill-priced trade ─────────── */

.rst-fills[b-c10oin1wgd] {
    margin: var(--hz-space-2) 0 var(--hz-space-3) var(--hz-space-6);
    max-width: 52rem;
}

.rst-fills__cap[b-c10oin1wgd] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-brand-strong);
    margin-bottom: var(--hz-space-2);
}

/* Nested table: an inset one surface above the grid behind it, so the drill-down
   reads as part of its row rather than as a second grid. */
.rst-fills__wrap[b-c10oin1wgd] {
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-badge);
    background: var(--hz-raised);
}

/* Denser than a top-level table — this sits inside a row, not on the page. */
.rst-fills__table th[b-c10oin1wgd] {
    background: transparent;
    padding: 0.3rem 0.7rem;
}

.rst-fills__table td[b-c10oin1wgd] {
    padding: 0.3rem 0.7rem;
    font-size: 0.72rem;
}

/* ── Cell values ───────────────────────────────────────────────────────────── */

/* Fees are an expense, never a loss — warning orange, never the danger red. */
.rst-num-fee[b-c10oin1wgd] {
    color: var(--hz-warning);
}

/* Several data-quality caveats can apply to one trade. */
.rst-flags[b-c10oin1wgd] {
    display: inline-flex;
    flex-wrap: wrap;
    gap: var(--hz-space-1);
}
/* /Components/Pages/Settings.razor.rz.scp.css */
/* Priorities (/settings) — page-scoped layout (spec 078).
   The drag-over feedback used to be an inline `style="border-color:red"` on every row;
   it is now a token-driven `.is-dragover` class toggled by the same Model.IsDragOver
   field the drag handlers already set. Tokens only — no raw colors. */

/* ── Add toolbar ─────────────────────────────────────────────────────────────── */

.hz-toolbar .hz-field[b-ptf7sxutp0] {
    min-width: 9rem;
}

.hz-toolbar[b-ptf7sxutp0]  .rz-dropdown {
    width: 100%;
}

/* ── Priority list ───────────────────────────────────────────────────────────── */

.pr-body[b-ptf7sxutp0] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

.pr-list[b-ptf7sxutp0] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-2);
}

.pr-li[b-ptf7sxutp0] {
    list-style: none;
}

/* ── Priority row ────────────────────────────────────────────────────────────── */

.pr-row[b-ptf7sxutp0] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    padding: 0.45rem 0.75rem;
    border: 1px solid var(--hz-border);
    border-top: 2px solid transparent;
    border-radius: var(--hz-radius-control);
    background: var(--hz-raised);
    cursor: grab;
    min-width: 0;
}

.pr-row:hover[b-ptf7sxutp0] {
    border-color: var(--hz-border-strong);
    border-top-color: transparent;
}

.pr-row:active[b-ptf7sxutp0] {
    cursor: grabbing;
}

/* Drop indicator — the row the pointer is over gains a gold rule on the edge the
   dragged row will land above. (Replaces the old inline red border.) */
.pr-row.is-dragover[b-ptf7sxutp0] {
    border-top-color: var(--hz-brand);
    background: var(--hz-brand-soft);
}

.pr-row__grip[b-ptf7sxutp0] {
    flex: none;
    color: var(--hz-text-faint);
    font-size: 0.9rem;
    line-height: 1;
}

.pr-row__rank[b-ptf7sxutp0] {
    flex: none;
    width: 1.7rem;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.75rem;
    color: var(--hz-text-faint);
}

.pr-row__sym[b-ptf7sxutp0] {
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 3.6rem;
    padding: 0.1rem 0.5rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-badge);
    background: var(--hz-card);
    font-family: var(--hz-font-mono);
    font-weight: 600;
    font-size: 0.75rem;
    color: var(--hz-text);
}

.pr-row__tf[b-ptf7sxutp0] {
    flex: none;
    min-width: 2.6rem;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.78rem;
    color: var(--hz-text-muted);
}

.pr-row__strat[b-ptf7sxutp0] {
    font-size: 0.72rem;
    color: var(--hz-text-faint);
}

.pr-row__spacer[b-ptf7sxutp0] {
    flex: 1 1 auto;
}

/* ── Tail drop zone ──────────────────────────────────────────────────────────── */

.pr-row--end[b-ptf7sxutp0] {
    justify-content: center;
    border-style: dashed;
    border-top-width: 2px;
    border-top-style: dashed;
    background: transparent;
}

.pr-row--end.is-dragover[b-ptf7sxutp0] {
    border-top-style: solid;
}

.pr-row__end[b-ptf7sxutp0] {
    font-family: var(--hz-font-mono);
    font-size: 0.68rem;
    color: var(--hz-text-faint);
}

/* ── Save bar ────────────────────────────────────────────────────────────────── */

.pr-save__note[b-ptf7sxutp0] {
    min-width: 0;
}
/* /Components/Pages/ZoneDetail.razor.rz.scp.css */
/* Spec 077 zone detail, restyled for spec 078.
   Structure now comes from the shared vocabulary (.hz-page / .hz-panel / .hz-kv / .hz-table);
   what stays here is genuinely page-specific: the zone identity line, the chart frame, and the
   levels/stat spacing. Tokens only — the previous six hard-coded hex fallbacks broke light mode. */

/* ── Zone identity (hero panel head) ─────────────────────────────────────────── */

.zone-detail__identity[b-ba0fftihbc] {
    display: flex;
    align-items: baseline;
    gap: var(--hz-space-2);
    font-size: 1.05rem;
    letter-spacing: 0.01em;
    min-width: 0;
}

.zone-detail__tf[b-ba0fftihbc] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.82rem;
    font-weight: 500;
    color: var(--hz-text-muted);
}

/* Direction and lifecycle read as terminal status caps. */
.zone-detail__badge[b-ba0fftihbc] {
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

/* ── Facts ───────────────────────────────────────────────────────────────────── */

.zone-detail__facts[b-ba0fftihbc] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

/* The zone id is the Discord link's payload — always visible, never allowed to widen the panel. */
.zone-detail__id[b-ba0fftihbc] {
    margin: 0;
    overflow-wrap: anywhere;
    color: var(--hz-text-faint);
}

.zone-detail__reasons[b-ba0fftihbc] {
    margin: 0.25rem 0 0;
    padding-left: 1.1rem;
}

    .zone-detail__reasons li + li[b-ba0fftihbc] {
        margin-top: 0.2rem;
    }

/* ── Statistics ──────────────────────────────────────────────────────────────── */

/* Inline in the panel head rather than stacked: the head bar is one line tall. */
.zone-detail__bucket-picker[b-ba0fftihbc] {
    flex-direction: row;
    align-items: center;
    gap: var(--hz-space-2);
}

.zone-detail__stat-row[b-ba0fftihbc] {
    margin-bottom: var(--hz-space-3);
}

.zone-detail__stat-note[b-ba0fftihbc] {
    margin-bottom: var(--hz-space-3);
}

.zone-detail__disclosure[b-ba0fftihbc] {
    margin: 0;
    line-height: 1.5;
}

/* The pending/running/unavailable states are built with RenderTreeBuilder, which does not get
   this file's scope attribute — they use global classes (hz-muted / hz-callout) only. */

/* ── Chart ───────────────────────────────────────────────────────────────────── */

/* The chart component enforces its own 30rem minimum and paints an opaque background, so a
   shorter container does not shrink it — it overflows and covers whatever follows. Same flex +
   ::deep sizing the /chart page uses. */
/* No overflow:hidden — the chart paints its own overlays and clipping them would be a
   functional regression, not just a cosmetic one. */
.zone-detail__chart[b-ba0fftihbc] {
    display: flex;
    min-height: 30rem;
}

.zone-detail__chart[b-ba0fftihbc]  .candle-chart-wrapper {
    flex: 1 1 auto;
    min-height: 30rem;
}

/* Levels sit beside the chart on wide screens (hz-split, align-items:start so the short table
   hugs its content); under 1100px hz-split stacks them below the chart, where the chart's own
   minimum height is what keeps the two from colliding. */
.zone-detail__levels[b-ba0fftihbc] {
    font-size: 0.76rem;
}

/* ── Not found ───────────────────────────────────────────────────────────────── */

.zone-detail__notfound p[b-ba0fftihbc] {
    margin: 0;
    max-width: 34rem;
    font-size: 0.82rem;
    line-height: 1.5;
}

.zone-detail__notfound code[b-ba0fftihbc] {
    font-family: var(--hz-font-mono);
    color: var(--hz-text-muted);
    overflow-wrap: anywhere;
}

@media (max-width: 640px) {
    /* No chart height override here: anything under the component's 30rem minimum brings the
       overflow back, and on a phone that lands squarely on the levels table. */
    .zone-detail__identity[b-ba0fftihbc] {
        flex-wrap: wrap;
    }
}
/* /Components/Shared/BacktestBalanceCurve.razor.rz.scp.css */
/* Layout only — panel/table/badge chrome comes from six18-ui.css.
   The .backtest-report-timeline__* class names are preserved because tests and the
   report page key off them; their styling now lives here instead of in
   BacktestReport.razor.css, which scoped CSS never applied across the boundary. */

.backtest-report-balance__prose[b-kqs10a6xvq] {
    margin: 0 0 var(--hz-space-4);
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.5;
    max-width: 70ch;
}

/* A drawdown is a cost, not a failure state — warning orange, never gold. */
.backtest-report-balance__cost[b-kqs10a6xvq] {
    color: var(--hz-warning);
}

.backtest-report-panel__grid[b-kqs10a6xvq] {
    margin: 0;
}

.backtest-report-panel__grid dd[b-kqs10a6xvq] {
    margin: 0;
}

.backtest-report-curve__header[b-kqs10a6xvq] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
    padding: 0.55rem 1rem;
    border-top: 1px solid var(--hz-border);
    border-bottom: 1px solid var(--hz-border);
    background: var(--hz-raised);
}

.backtest-report-curve__header p[b-kqs10a6xvq] {
    margin: 0;
}

.backtest-report-curve__count[b-kqs10a6xvq] {
    color: var(--hz-text-faint);
}

.backtest-report-curve__count[b-kqs10a6xvq]::before {
    content: " · ";
}

/* The scroll region itself is the shared .hz-table-scroll (six18-ui.css) — capped height,
   sticky header, un-capped for print. Nothing component-specific needed here. */

.backtest-report-timeline__pivot[b-kqs10a6xvq] {
    font-family: var(--hz-font-mono);
    font-size: 0.79rem;
    color: var(--hz-text-muted);
    overflow-wrap: anywhere;
}

.backtest-report-timeline__tz[b-kqs10a6xvq] {
    font-family: var(--hz-font-mono);
    font-size: 0.79rem;
    color: var(--hz-text-muted);
    margin-left: 0.3rem;
}

.backtest-report-timeline__details[b-kqs10a6xvq] {
    min-width: 18rem;
    line-height: 1.45;
}

/* The share/allocation summary is figures ("EP1 12 sh | Idle $1,234.00"), so it keeps
   the mono face even though .hz-td-text switches the cell to the UI face for the note. */
.backtest-report-timeline__shares[b-kqs10a6xvq] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.8rem;
    color: var(--hz-text-muted);
}

.backtest-report-timeline__note[b-kqs10a6xvq] {
    color: var(--hz-text-faint);
}

.backtest-report-timeline__balance[b-kqs10a6xvq] {
    color: var(--hz-text);
}
/* /Components/Shared/BacktestBlockedSimulationPanel.razor.rz.scp.css */
/* Layout only — panel/table/button chrome comes from six18-ui.css. These rules used to
   live in BacktestReport.razor.css, where Blazor scoped CSS never crossed into this
   component's markup; they are re-homed here so they actually apply. */

.backtest-blocked-sim__header[b-ywjt63ex74] {
    gap: var(--hz-space-4);
}

/* The toggles are the panel's primary control, so they read as controls, not prose. */
.backtest-blocked-sim__toggle[b-ywjt63ex74] {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.4;
    cursor: pointer;
}

.backtest-blocked-sim__toggle input[b-ywjt63ex74] {
    accent-color: var(--hz-brand);
    flex: none;
    margin: 0;
}

.backtest-blocked-sim__hint[b-ywjt63ex74] {
    margin: 0;
    padding: 0.8rem 1rem;
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.55;
    max-width: 80ch;
}

.backtest-blocked-sim__sources[b-ywjt63ex74] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-2);
    padding: 0.7rem 1rem;
    border-bottom: 1px solid var(--hz-border);
    background: var(--hz-raised);
}

.backtest-blocked-sim__disclosure[b-ywjt63ex74] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-2);
    padding: 0.8rem 1rem;
    border-bottom: 1px solid var(--hz-border);
    font-size: 0.86rem;
    line-height: 1.55;
    color: var(--hz-text-muted);
    max-width: 90ch;
}

.backtest-blocked-sim__disclosure p[b-ywjt63ex74] {
    margin: 0;
}

.backtest-blocked-sim__disclosure strong[b-ywjt63ex74] {
    color: var(--hz-text);
}

/* Missing/partial event coverage is a data caveat — warning orange, never gold. */
.backtest-blocked-sim__warning[b-ywjt63ex74] {
    padding: 0.6rem 0.8rem;
    border: 1px solid color-mix(in srgb, var(--hz-warning) 32%, transparent);
    border-left-width: 3px;
    border-radius: var(--hz-radius-control);
    background: var(--hz-warning-soft);
    color: var(--hz-warning);
}

.backtest-blocked-sim__warning strong[b-ywjt63ex74] {
    color: inherit;
}

.backtest-blocked-sim__note[b-ywjt63ex74] {
    color: var(--hz-text-faint);
}

/* Sub-sections inside the panel: heading rows for the nested curve and the two grids. */
.backtest-blocked-sim__subhead[b-ywjt63ex74] {
    margin: 0;
    padding: 0.7rem 1rem 0.5rem;
}

.backtest-blocked-sim .hz-table-wrap[b-ywjt63ex74] {
    border-bottom: 1px solid var(--hz-border);
}

/* The simulated balance curve renders its own panel; inset it so the nested card is
   readable as a sub-report rather than colliding with this panel's edges. */
.backtest-blocked-sim__nested[b-ywjt63ex74] {
    padding: 0 1rem 1rem;
}

.backtest-blocked-sim__deltas th[scope='row'][b-ywjt63ex74] {
    background: none;
    font-family: var(--hz-font);
    font-size: 0.86rem;
    font-weight: 500;
    letter-spacing: normal;
    text-transform: none;
    color: var(--hz-text);
    border-bottom: 1px solid var(--hz-border);
    white-space: normal;
}
/* /Components/Shared/BacktestDatePicker.razor.rz.scp.css */
.backtest-date-picker[b-47f9qqiy5n] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    min-width: 15rem;
    color: var(--backtest-muted);
    font-size: 0.9rem;
}

.backtest-date-picker__label[b-47f9qqiy5n] {
    font-size: 0.9rem;
}

.backtest-date-picker__controls[b-47f9qqiy5n] {
    display: flex;
    gap: 0.45rem;
    align-items: stretch;
}

.backtest-date-picker__toggle[b-47f9qqiy5n],
.backtest-date-picker__clear[b-47f9qqiy5n],
.backtest-date-picker__nav[b-47f9qqiy5n],
.backtest-date-picker__day[b-47f9qqiy5n] {
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--hz-text);
}

.backtest-date-picker__toggle[b-47f9qqiy5n],
.backtest-date-picker__clear[b-47f9qqiy5n] {
    min-height: 2.7rem;
    padding: 0 0.85rem;
}

.backtest-date-picker__toggle[b-47f9qqiy5n] {
    flex: 1 1 auto;
    text-align: left;
    font-weight: 700;
}

.backtest-date-picker__clear[b-47f9qqiy5n] {
    flex: 0 0 auto;
    white-space: nowrap;
}

.backtest-date-picker__toggle:disabled[b-47f9qqiy5n],
.backtest-date-picker__clear:disabled[b-47f9qqiy5n],
.backtest-date-picker__nav:disabled[b-47f9qqiy5n],
.backtest-date-picker__day:disabled[b-47f9qqiy5n] {
    opacity: 0.5;
}

.backtest-date-picker__meta[b-47f9qqiy5n] {
    color: var(--hz-text-muted);
    font-size: 0.78rem;
}

.backtest-date-picker__panel[b-47f9qqiy5n] {
    position: absolute;
    top: calc(100% + 0.35rem);
    left: 0;
    z-index: 20;
    width: min(21rem, 90vw);
    display: grid;
    gap: 0.85rem;
    padding: 0.95rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
    box-shadow: var(--hz-shadow-card);
}

.backtest-date-picker__header[b-47f9qqiy5n] {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 0.65rem;
    align-items: center;
    color: var(--hz-text);
}

.backtest-date-picker__header strong[b-47f9qqiy5n] {
    text-align: center;
}

.backtest-date-picker__nav[b-47f9qqiy5n] {
    min-height: 2.25rem;
    padding: 0 0.75rem;
}

.backtest-date-picker__weekday-row[b-47f9qqiy5n],
.backtest-date-picker__grid[b-47f9qqiy5n] {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 0.35rem;
}

.backtest-date-picker__weekday[b-47f9qqiy5n] {
    text-align: center;
    color: var(--hz-text-muted);
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.backtest-date-picker__day[b-47f9qqiy5n] {
    min-height: 2.35rem;
    padding: 0;
    font-weight: 700;
}

.backtest-date-picker__day--selected[b-47f9qqiy5n] {
    border-color: var(--hz-brand);
    background: var(--hz-brand);
    color: var(--hz-on-brand);
}

.backtest-date-picker__day--disabled[b-47f9qqiy5n] {
    color: var(--hz-text-muted);
    opacity: 0.55;
}

.backtest-date-picker__day--outside-month[b-47f9qqiy5n] {
    border-style: dashed;
}

@media (max-width: 720px) {
    .backtest-date-picker[b-47f9qqiy5n] {
        min-width: 100%;
    }

    .backtest-date-picker__controls[b-47f9qqiy5n] {
        flex-wrap: wrap;
    }

    .backtest-date-picker__toggle[b-47f9qqiy5n],
    .backtest-date-picker__clear[b-47f9qqiy5n] {
        flex: 1 1 100%;
    }

    .backtest-date-picker__panel[b-47f9qqiy5n] {
        width: min(100%, 22rem);
    }
}
/* /Components/Shared/BacktestQueueStatus.razor.rz.scp.css */
.queue-status[b-awmqzno8k9] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    padding: 1rem;
    border-radius: var(--hz-radius-control);
    border: 1px solid var(--hz-border);
    background: var(--hz-card);
    color: var(--hz-text);
}

.queue-status__header[b-awmqzno8k9] {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    align-items: center;
}

.queue-status__details[b-awmqzno8k9] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.25rem;
    font-size: 0.92rem;
}

.queue-status--queued[b-awmqzno8k9] {
    border-color: color-mix(in srgb, var(--hz-warning) 45%, transparent);
    background: color-mix(in srgb, var(--hz-warning) 12%, transparent);
}

.queue-status--running[b-awmqzno8k9] {
    border-color: color-mix(in srgb, var(--hz-info) 45%, transparent);
    background: color-mix(in srgb, var(--hz-info) 10%, transparent);
}

.queue-status--completed[b-awmqzno8k9] {
    border-color: color-mix(in srgb, var(--hz-success) 45%, transparent);
    background: color-mix(in srgb, var(--hz-success) 12%, transparent);
}

.queue-status--failed[b-awmqzno8k9] {
    border-color: color-mix(in srgb, var(--hz-danger) 45%, transparent);
    background: color-mix(in srgb, var(--hz-danger) 12%, transparent);
}

.queue-status__error[b-awmqzno8k9] {
    color: var(--hz-danger);
}
/* /Components/Shared/BacktestReportAppendix.razor.rz.scp.css */
/* Layout only — panel/list/button chrome comes from six18-ui.css. These rules used to
   live in BacktestReport.razor.css, where Blazor scoped CSS never reached this
   component's markup; they are re-homed here so they actually apply. */

.backtest-report-appendix__section[b-6lcf3gou8t] {
    padding: 0.8rem 1rem;
    border-bottom: 1px solid var(--hz-border);
}

.backtest-report-appendix__section:last-child[b-6lcf3gou8t] {
    border-bottom: none;
}

.backtest-report-appendix__heading[b-6lcf3gou8t] {
    margin: 0 0 var(--hz-space-2);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.backtest-report-appendix__note[b-6lcf3gou8t] {
    margin: 0;
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.5;
}

/* Two-column fact rows: label left, value right, both wrapping cleanly in the narrow
   appendix rail. */
.backtest-report-appendix .hz-list__item[b-6lcf3gou8t] {
    justify-content: space-between;
    gap: var(--hz-space-3);
}

.backtest-report-appendix__k[b-6lcf3gou8t] {
    flex: 0 0 auto;
    max-width: 45%;
    font-weight: 600;
    color: var(--hz-text-muted);
}

.backtest-report-appendix__v[b-6lcf3gou8t] {
    flex: 1 1 auto;
    min-width: 0;
    text-align: right;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    color: var(--hz-text);
    overflow-wrap: anywhere;
}

/* Sentence-length values read as prose, not as figures. */
.backtest-report-appendix__v--text[b-6lcf3gou8t] {
    font-family: var(--hz-font);
    color: var(--hz-text-muted);
    line-height: 1.45;
}

.backtest-report-appendix__v--warn[b-6lcf3gou8t] {
    color: var(--hz-warning);
}

.backtest-report-appendix__links[b-6lcf3gou8t] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--hz-space-2);
    margin-top: var(--hz-space-3);
}

.backtest-report-appendix__link[b-6lcf3gou8t] {
    max-width: 100%;
    white-space: normal;
    text-align: left;
}
/* /Components/Shared/BacktestReportHeader.razor.rz.scp.css */
/* Layout only. Surface, badge, button, field and callout chrome all come from
   six18-ui.css so the report header themes with the rest of the app in both modes.
   NOTE: the .backtest-report-* rules this component used to depend on live in
   BacktestReport.razor.css — Blazor scoped CSS never crossed that boundary, so they
   had no effect here. Everything this component actually needs is now local. */

.backtest-report-header[b-57x7yulvlj] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-4);
}

.backtest-report-toolbar__inner[b-57x7yulvlj] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--hz-space-4);
    flex-wrap: wrap;
}

.backtest-report-toolbar__copy[b-57x7yulvlj] {
    min-width: 0;
}

.backtest-report-toolbar__controls[b-57x7yulvlj] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
}

.backtest-report-toolbar__eyebrow[b-57x7yulvlj] {
    display: block;
    text-transform: uppercase;
    letter-spacing: var(--hz-label-tracking);
    font-size: var(--hz-label-size);
    font-weight: 600;
}

.backtest-report-toolbar__title[b-57x7yulvlj] {
    margin: 0.25rem 0 0;
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 1.29rem;
    letter-spacing: 0.01em;
    color: var(--hz-text);
}

.backtest-report-toolbar__sub[b-57x7yulvlj] {
    margin: 0.3rem 0 0;
    color: var(--hz-text-muted);
    font-size: 0.93rem;
    line-height: 1.45;
}

.backtest-report-warnings__body[b-57x7yulvlj] {
    min-width: 0;
}

.backtest-report-warnings__list[b-57x7yulvlj] {
    margin: 0.25rem 0 0;
    padding-left: 1.1rem;
    display: grid;
    gap: 0.2rem;
}

.backtest-report-header__prose[b-57x7yulvlj] {
    margin: 0 0 var(--hz-space-4);
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.55;
    max-width: 70ch;
}

.backtest-report-header__id[b-57x7yulvlj] {
    overflow-wrap: anywhere;
}

/* --- Simulation basis controls ------------------------------------------------ */

.backtest-report-basis__controls[b-57x7yulvlj] {
    align-items: flex-start;
    margin-bottom: var(--hz-space-4);
}

.backtest-report-basis__input[b-57x7yulvlj] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
}

.backtest-report-basis__input .hz-input[b-57x7yulvlj] {
    width: 7.5rem;
    text-align: right;
}

.backtest-report-basis__distribution[b-57x7yulvlj] {
    display: grid;
    gap: var(--hz-space-2);
    margin: 0;
    padding: 0.6rem 0.75rem 0.7rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-raised);
    min-width: 0;
}

.backtest-report-basis__distribution legend[b-57x7yulvlj] {
    padding: 0 0.3rem;
}

.backtest-report-basis__distribution-grid[b-57x7yulvlj] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(5.5rem, 1fr));
    gap: var(--hz-space-2);
}

.backtest-report-basis__distribution-grid .hz-input[b-57x7yulvlj] {
    width: 100%;
    text-align: right;
}

.backtest-report-basis__distribution-actions[b-57x7yulvlj] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
}

/* .backtest-report-error is styled by BacktestReport.razor.css via ::deep (it is shared
   with the page's own load-error banner); only spacing is this component's business. */
.backtest-report-error[b-57x7yulvlj] {
    margin-bottom: var(--hz-space-3);
}

/* The two facts grids are separated by the explanation paragraph; keep them from
   colliding with it. */
.backtest-report-panel__grid[b-57x7yulvlj] {
    margin: 0 0 var(--hz-space-4);
}

.backtest-report-panel__grid:last-child[b-57x7yulvlj] {
    margin-bottom: 0;
}

.backtest-report-panel__grid dd[b-57x7yulvlj] {
    margin: 0;
}
/* /Components/Shared/BacktestReportMetricGrid.razor.rz.scp.css */
/* Layout only — the panel/stat chrome comes from six18-ui.css. */

.backtest-report-metric-grid__heading[b-h0n2lxl63g] {
    min-width: 0;
}

.backtest-report-metric-grid__sub[b-h0n2lxl63g] {
    margin: 0.2rem 0 0;
    max-width: 46rem;
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.5;
}

/* Tiles live inside a panel body, so they take the raised tone rather than the card
   tone .hz-stat defaults to. */
.backtest-report-metric-grid__card[b-h0n2lxl63g] {
    background: var(--hz-raised);
    align-content: start;
}

.backtest-report-metric-grid__card .hz-stat__delta[b-h0n2lxl63g] {
    line-height: 1.45;
}

/* An unavailable metric is a data gap, not a failure — warning orange, never gold. */
.backtest-report-metric-grid__card[data-availability='Unavailable'][b-h0n2lxl63g] {
    border-color: color-mix(in srgb, var(--hz-warning) 32%, transparent);
    background: var(--hz-warning-soft);
}

.backtest-report-metric-grid__card[data-availability='Unavailable'] .hz-stat__value[b-h0n2lxl63g] {
    color: var(--hz-warning);
}

.backtest-report-metric-grid__card--inconclusive[b-h0n2lxl63g] {
    border-color: color-mix(in srgb, var(--hz-info) 32%, transparent);
}

.backtest-report-metric-grid__card--inconclusive .hz-stat__value[b-h0n2lxl63g] {
    color: var(--hz-info);
}
/* /Components/Shared/BacktestReportPeriodTable.razor.rz.scp.css */
/* Layout only — panel/table/field chrome comes from six18-ui.css. Previously this
   component leaned on .backtest-report-* rules that live in BacktestReport.razor.css,
   which Blazor scoped CSS never applied across the component boundary. */

.backtest-report-periods__prose[b-1gsqktrscm] {
    margin: 0 0 var(--hz-space-4);
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.5;
    max-width: 70ch;
}

.backtest-report-panel__grid[b-1gsqktrscm] {
    margin: 0;
}

.backtest-report-panel__grid dd[b-1gsqktrscm] {
    margin: 0;
}

/* Follows the facts grid's own panel body, so it must not stack a second top padding. */
.backtest-report-periods__empty[b-1gsqktrscm] {
    padding-top: 0;
}

.backtest-report-periods__toolbar[b-1gsqktrscm] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
    padding: 0.55rem 1rem;
    border-top: 1px solid var(--hz-border);
    border-bottom: 1px solid var(--hz-border);
    background: var(--hz-raised);
}

.backtest-report-periods__toolbar p[b-1gsqktrscm] {
    margin: 0;
}

.backtest-report-periods__pagination[b-1gsqktrscm] {
    display: flex;
    align-items: flex-end;
    gap: var(--hz-space-2);
    flex-wrap: wrap;
}

.backtest-report-periods__page-size .hz-select[b-1gsqktrscm] {
    padding-top: 0.25rem;
    padding-bottom: 0.25rem;
    font-size: 0.8rem;
}

.backtest-report-periods__page-indicator[b-1gsqktrscm] {
    padding-bottom: 0.35rem;
}
/* /Components/Shared/BacktestTimeBreakdownSection.razor.rz.scp.css */
/* Layout only — toolbar/field/callout chrome comes from six18-ui.css. */

.backtest-time-breakdown-section[b-1gthndm1di] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-3);
}

.backtest-time-breakdown-section__header[b-1gthndm1di] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--hz-space-3);
    flex-wrap: wrap;
}

.backtest-time-breakdown-section__heading[b-1gthndm1di] {
    min-width: 0;
}

.backtest-time-breakdown-section__sub[b-1gthndm1di] {
    margin: 0.2rem 0 0;
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    line-height: 1.5;
    max-width: 70ch;
}

/* A <fieldset> resets some of the flex behaviour .hz-toolbar relies on. */
.backtest-time-breakdown-section__controls[b-1gthndm1di] {
    margin: 0;
    min-width: 0;
}

.backtest-time-breakdown-section__controls:disabled[b-1gthndm1di] {
    opacity: 0.6;
}

.backtest-time-breakdown-section__controls .hz-input[b-1gthndm1di] {
    width: 7rem;
    text-align: right;
}

.backtest-time-breakdown-section__controls .hz-input[aria-invalid='true'][b-1gthndm1di] {
    border-color: var(--hz-warning);
}
/* /Components/Shared/BacktestTimeBreakdownTable.razor.rz.scp.css */
/* Layout only — panel/table/field/button chrome comes from six18-ui.css. */

.backtest-time-breakdown-table__summary[b-eovzs26h9b],
.backtest-time-breakdown-table__controls[b-eovzs26h9b],
.backtest-time-breakdown-table__warning[b-eovzs26h9b],
.backtest-time-breakdown-table__warnings[b-eovzs26h9b],
.backtest-time-breakdown-table__empty-filter[b-eovzs26h9b] {
    padding: 0.7rem 1rem;
}

.backtest-time-breakdown-table__summary[b-eovzs26h9b] {
    display: grid;
    gap: 0.3rem;
    border-bottom: 1px solid var(--hz-border);
    color: var(--hz-text-muted);
    font-size: 0.86rem;
}

.backtest-time-breakdown-table__summary p[b-eovzs26h9b],
.backtest-time-breakdown-table__empty-filter[b-eovzs26h9b] {
    margin: 0;
}

.backtest-time-breakdown-table__summary strong[b-eovzs26h9b] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 500;
    color: var(--hz-text);
}

/* Prose values read better in the UI face than in mono. */
.backtest-time-breakdown-table__mapping strong[b-eovzs26h9b] {
    font-family: var(--hz-font);
    color: var(--hz-text-muted);
}

.backtest-time-breakdown-table__k[b-eovzs26h9b] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.backtest-time-breakdown-table__totals[b-eovzs26h9b] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    align-items: baseline;
}

.backtest-time-breakdown-table__warning[b-eovzs26h9b] {
    border-bottom: 1px solid var(--hz-border);
    color: var(--hz-warning);
    font-size: 0.86rem;
}

.backtest-time-breakdown-table__warnings[b-eovzs26h9b] {
    margin: 0;
    display: grid;
    gap: 0.3rem;
    border-bottom: 1px solid var(--hz-border);
    color: var(--hz-text-muted);
    font-size: 0.86rem;
    padding-left: 2rem;
}

.backtest-time-breakdown-table__controls[b-eovzs26h9b] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--hz-space-3);
    align-items: flex-end;
    border-bottom: 1px solid var(--hz-border);
    background: var(--hz-raised);
}

.backtest-time-breakdown-table__controls .hz-input[b-eovzs26h9b] {
    min-width: 11rem;
}

.backtest-time-breakdown-table__pagination[b-eovzs26h9b] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--hz-space-2);
    align-items: flex-end;
    margin-left: auto;
}

.backtest-time-breakdown-table__pagination-summary[b-eovzs26h9b],
.backtest-time-breakdown-table__page-indicator[b-eovzs26h9b] {
    padding-bottom: 0.4rem;
}

.backtest-time-breakdown-table__empty-filter[b-eovzs26h9b] {
    color: var(--hz-text-faint);
    font-size: 0.86rem;
}

/* Scroll region comes from the shared .hz-table-scroll (six18-ui.css). */

/* The time-range and detail cells wrap; keeping them top-aligned stops short numeric
   cells from floating in the middle of a two-line row. */
.backtest-time-breakdown-table__grid td[b-eovzs26h9b] {
    vertical-align: top;
    white-space: normal;
    overflow-wrap: anywhere;
}

@media (max-width: 900px) {
    .backtest-time-breakdown-table__pagination[b-eovzs26h9b] {
        margin-left: 0;
    }
}
/* /Components/Shared/CandleChart.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────────────────
   CANDLE CHART SURFACE

   DELIBERATE EXCEPTION to the "tokens only" rule (spec 037 FR-011): the
   market-data canvas is dark in BOTH appearances so candles stay legible, and
   these literals must track the WebGL/2D drawing code in
   wwwroot/js/candleChart.js — `gl.clearColor(0.094, 0.094, 0.094)` is #181818
   and the axis label plates are #1f1f1f. That JS is off-limits, so a
   --hz-* surface here would paint a visible seam against the GL clear color in
   light mode. Every element below is painted ON the canvas, so all of them use
   this local dark palette rather than the theme tokens.

   The chrome AROUND the canvas (control bar, popovers, fib drawer, page frame)
   IS token-driven — see ChartControls.razor.css and Chart.razor.css.
   ───────────────────────────────────────────────────────────────────────────── */

.candle-chart-wrapper[b-iyjvuqwc1z] {
    --chart-canvas-bg: #181818;      /* == gl.clearColor in candleChart.js */
    --chart-canvas-plate: #1f1f1f;   /* == axis label plates in candleChart.js */
    --chart-canvas-line: #2d2d2d;
    --chart-canvas-text: #d7d7d7;
    --chart-canvas-muted: #9e9e9e;
    --chart-canvas-up: #26a69a;      /* CandleColorSettings.Default.UpColor */
    --chart-canvas-down: #ef5350;    /* CandleColorSettings.Default.DownColor */

    position: relative;
    width: 100%;
    height: 100%;
    min-height: 30rem;
    background: var(--chart-canvas-bg);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

canvas[b-iyjvuqwc1z] {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    /* Leave 18px at bottom for scrollbar */
    height: calc(100% - 18px);
}

/* Axis overlay sits above WebGL layer but passes pointer events through */
#axisOverlay[b-iyjvuqwc1z] {
    pointer-events: none;
    z-index: 1;
}

#candleChart[b-iyjvuqwc1z] {
    z-index: 0;
}

.candle-scrollbar[b-iyjvuqwc1z] {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 18px;
    appearance: none;
    -webkit-appearance: none;
    background: var(--chart-canvas-bg);
    cursor: pointer;
    z-index: 5;
    margin: 0;
    padding: 0;
    accent-color: var(--chart-canvas-up);
    border-top: 1px solid var(--chart-canvas-line);
}

/* OHLCV readout for the hovered candle — floats on the canvas. */
.chart-tooltip[b-iyjvuqwc1z] {
    position: absolute;
    top: 8px;
    left: 8px;
    display: flex;
    flex-direction: row;
    gap: 12px;
    background: color-mix(in srgb, var(--chart-canvas-plate) 88%, transparent);
    border: 1px solid var(--chart-canvas-line);
    color: var(--chart-canvas-text);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 12px;
    padding: 4px 8px;
    border-radius: var(--hz-radius-badge);
    pointer-events: none;
    z-index: 10;
}

.tooltip-time[b-iyjvuqwc1z] {
    color: var(--chart-canvas-muted);
    margin-right: 4px;
}

.tooltip-up b[b-iyjvuqwc1z] {
    color: var(--chart-canvas-up);
}

.tooltip-down b[b-iyjvuqwc1z] {
    color: var(--chart-canvas-down);
}

.chart-spinner[b-iyjvuqwc1z] {
    position: absolute;
    bottom: 24px;
    left: 50%;
    transform: translateX(-50%);
    color: var(--chart-canvas-muted);
    font-family: var(--hz-font-mono);
    font-size: 12px;
    pointer-events: none;
    z-index: 10;
}

.chart-load-error[b-iyjvuqwc1z] {
    position: absolute;
    bottom: 8px;
    left: 50%;
    transform: translateX(-50%);
    background: color-mix(in srgb, var(--chart-canvas-down) 22%, var(--chart-canvas-plate));
    border: 1px solid var(--chart-canvas-down);
    color: var(--chart-canvas-text);
    font-family: var(--hz-font-mono);
    font-size: 12px;
    padding: 4px 10px;
    border-radius: var(--hz-radius-badge);
    pointer-events: none;
    z-index: 10;
}

/* Shown INSTEAD of the canvas, still inside the dark wrapper. */
.chart-webgl-error[b-iyjvuqwc1z] {
    color: var(--chart-canvas-down);
    padding: 16px;
    font-family: var(--hz-font-mono);
    font-size: 0.8rem;
}
/* /Components/Shared/CandleColorSettingsEditor.razor.rz.scp.css */
/* Candle color editor — chart chrome, fully token-driven (spec 078).

   NOTE: this component reuses GridSettingsEditor's `grid-settings-editor__*`
   class names, but Blazor scoped CSS does not cross component boundaries, so
   GridSettingsEditor.razor.css never applied here — the popover rendered
   unstyled. The shared shapes are therefore restated below under this
   component's own scope. (A shared `.hz-*` editor pattern in six18-ui.css would
   remove the duplication; that is a shared file, so it is only flagged, not
   changed.)

   The swatch VALUES are the trader's own candle colors — data, not theme — so
   only the swatch chrome is styled here. */

.grid-settings-editor__panel[b-ktqvhr5h3w] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--hz-space-3) var(--hz-space-5);
    padding: 0.7rem 0.9rem;
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    align-items: center;
}

.grid-settings-editor__row[b-ktqvhr5h3w] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
}

.grid-settings-editor__label[b-ktqvhr5h3w] {
    font-family: var(--hz-font);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
    min-width: 3.2rem;
}

.grid-settings-editor__actions[b-ktqvhr5h3w] {
    display: flex;
    align-items: center;
    margin-left: auto;
}

.grid-settings-editor__reset[b-ktqvhr5h3w] {
    padding: 0.3rem 0.6rem;
    font-family: var(--hz-font);
    font-weight: 600;
    font-size: 0.76rem;
    color: var(--hz-text-muted);
    background: var(--hz-card);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    cursor: pointer;
}

.grid-settings-editor__reset:hover[b-ktqvhr5h3w] {
    border-color: var(--hz-brand);
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
}

.candle-color-settings-editor__row[b-ktqvhr5h3w] {
    min-width: 9rem;
}

.candle-color-settings-editor__input[b-ktqvhr5h3w] {
    width: 2.4rem;
    min-width: 2.4rem;
    height: 1.7rem;
    padding: 0;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    cursor: pointer;
}

.candle-color-settings-editor__input:hover[b-ktqvhr5h3w],
.candle-color-settings-editor__input:focus[b-ktqvhr5h3w] {
    border-color: var(--hz-brand);
    outline: none;
}
/* /Components/Shared/ChartControls.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────────────────
   CHART CONTROL BAR — spec 078 (was 43 hard-coded hex values, zero tokens).
   Everything here is theme chrome AROUND the WebGL canvas, so it is fully
   token-driven and follows [data-appearance]. The canvas itself stays dark in
   both appearances — that lives in CandleChart.razor.css (FR-011).
   ───────────────────────────────────────────────────────────────────────────── */

.chart-controls-shell[b-79cho1bk1m] {
    position: relative;
    z-index: 20;
}

/* Toolbar variant of .hz-toolbar: same grammar (flex-end so .hz-field label
   stacks align), but it is the top edge of the chart card — so no radius and
   only a bottom hairline. */
.chart-controls[b-79cho1bk1m] {
    display: flex;
    flex-direction: row;
    align-items: flex-end;
    flex-wrap: wrap;
    gap: var(--hz-space-3);
    padding: 0.55rem 0.9rem;
    background: var(--hz-card);
    border-bottom: 1px solid var(--hz-border);
    flex-shrink: 0;
}

.chart-controls__field[b-79cho1bk1m] {
    flex: 0 0 auto;
}

/* .hz-select supplies the frame, focus ring and caret; this only sets the
   toolbar density and forces mono (six18-ui.css loads after six18.css, so a
   plain .hz-mono class would lose to .hz-select's font-family). */
.chart-controls__select[b-79cho1bk1m] {
    min-width: 6.5rem;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.76rem;
    padding: 0.3rem 1.6rem 0.3rem 0.5rem;
    cursor: pointer;
}

/* Divider between control groups (symbol/tf · display · fib). */
.chart-controls__rule[b-79cho1bk1m] {
    width: 1px;
    align-self: stretch;
    min-height: 1.7rem;
    background: var(--hz-border);
    margin: 0 var(--hz-space-1);
}

.chart-controls__spacer[b-79cho1bk1m] {
    flex: 1 1 auto;
    min-width: 0;
}

.chart-controls__meta[b-79cho1bk1m] {
    padding-bottom: 0.35rem;
    white-space: nowrap;
}

/* Bar buttons — the .hz-btn shape at toolbar density, with a gold active state
   for "popover open" / "fib tool armed". Gold is the accent here, never status. */
.chart-controls__btn[b-79cho1bk1m] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0.32rem 0.6rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--hz-text-muted);
    font-family: var(--hz-font);
    font-weight: 600;
    font-size: 0.76rem;
    line-height: 1.3;
    white-space: nowrap;
    cursor: pointer;
}

.chart-controls__btn:hover[b-79cho1bk1m] {
    color: var(--hz-text);
    border-color: var(--hz-brand);
    background: var(--hz-brand-soft);
}

.chart-controls__btn.is-active[b-79cho1bk1m] {
    background: var(--hz-brand-soft);
    border-color: var(--hz-brand);
    color: var(--hz-brand-strong);
}

/* Heikin-Ashi switch — a real <label>+<input type=checkbox>, chip-shaped. */
.chart-controls__toggle[b-79cho1bk1m] {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.32rem 0.6rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--hz-text-muted);
    font-family: var(--hz-font);
    font-weight: 600;
    font-size: 0.76rem;
    line-height: 1.3;
    white-space: nowrap;
    margin: 0;
    cursor: pointer;
    user-select: none;
}

.chart-controls__toggle:hover[b-79cho1bk1m] {
    color: var(--hz-text);
    border-color: var(--hz-brand);
}

.chart-controls__toggle.is-active[b-79cho1bk1m] {
    background: var(--hz-brand-soft);
    border-color: var(--hz-brand);
    color: var(--hz-brand-strong);
}

.chart-controls__toggle input[type="checkbox"][b-79cho1bk1m] {
    width: 0.85rem;
    height: 0.85rem;
    margin: 0;
    accent-color: var(--hz-brand);
    cursor: pointer;
}

/* ── Settings popovers (grid, candle colors) ─────────────────────────────────
   True overlays, so these are the one place a shadow is allowed. */
.chart-panel-popover[b-79cho1bk1m] {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 30;
    max-height: min(60vh, 560px);
    overflow-y: auto;
    background: var(--hz-raised);
    border: 1px solid var(--hz-border-strong);
    border-top: none;
    border-radius: 0 0 var(--hz-radius-card) var(--hz-radius-card);
    box-shadow: var(--hz-shadow-overlay);
}

/* The editors carry their own frame for standalone use; inside the popover the
   popover is the frame. ::deep because the editors are child components. */
.chart-panel-popover[b-79cho1bk1m]  .grid-settings-editor__panel {
    background: transparent;
    border: none;
    border-radius: 0;
}

/* ── Fibonacci settings drawer ───────────────────────────────────────────────
   Fixed left drawer over the workspace. `top` clears the sticky topbar. */
.fib-side-overlay[b-79cho1bk1m] {
    position: fixed;
    top: 3.5rem;
    left: 0;
    bottom: 0;
    z-index: 40;
    width: min(360px, 92vw);
    padding: var(--hz-space-3);
    background: var(--hz-card);
    border-right: 1px solid var(--hz-border-strong);
    box-shadow: var(--hz-shadow-overlay);
    overflow: hidden;
    transform: translateX(calc(-100% - 1rem));
    opacity: 0;
    pointer-events: none;
    transition: transform 0.22s ease, opacity 0.22s ease;
}

.fib-side-overlay.is-open[b-79cho1bk1m] {
    transform: translateX(0);
    opacity: 1;
    pointer-events: auto;
}

@media (prefers-reduced-motion: reduce) {
    .fib-side-overlay[b-79cho1bk1m] {
        transition: none;
    }
}

/* FibSettingsPanel is a child component, so every rule below needs ::deep.
   Its .fib-* classes are themed globally in app.css; the .grid-* / .chart-select
   classes it also uses have no global definition at all, so they are styled
   here (that is why the drawer's selects and labels used to render unstyled). */
.fib-side-overlay[b-79cho1bk1m]  .fib-panel {
    display: flex;
    flex-direction: column;
    width: 100%;
    max-width: none;
    height: 100%;
    max-height: 100%;
    margin: 0;
    background: transparent;
    border: none;
    padding: 0;
    gap: var(--hz-space-3);
    overflow-y: auto;
}

.fib-side-overlay[b-79cho1bk1m]  .fib-panel-levels {
    flex: 1;
    min-height: 0;
    max-height: none;
}

.fib-side-overlay[b-79cho1bk1m]  .grid-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--hz-space-2);
}

.fib-side-overlay[b-79cho1bk1m]  .grid-label {
    font-family: var(--hz-font);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.fib-side-overlay[b-79cho1bk1m]  .grid-option {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    font-size: 0.78rem;
    color: var(--hz-text-muted);
    cursor: pointer;
    user-select: none;
}

.fib-side-overlay[b-79cho1bk1m]  .grid-option:hover {
    color: var(--hz-text);
}

.fib-side-overlay[b-79cho1bk1m]  .grid-option input[type="checkbox"] {
    width: 0.85rem;
    height: 0.85rem;
    margin: 0;
    accent-color: var(--hz-brand);
    cursor: pointer;
}

.fib-side-overlay[b-79cho1bk1m]  .chart-select {
    min-width: 6.5rem;
    padding: 0.32rem 0.5rem;
    background: var(--hz-card);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    color: var(--hz-text);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.76rem;
    cursor: pointer;
    outline: none;
}

.fib-side-overlay[b-79cho1bk1m]  .chart-select:hover,
.fib-side-overlay[b-79cho1bk1m]  .chart-select:focus {
    border-color: var(--hz-brand);
}
/* /Components/Shared/CoinbaseTradingSwitch.razor.rz.scp.css */
/* Coinbase maintenance trading switch (spec 036 US2, restyled spec 078).

   The tinted state background used to be an inline `var(--rz-success-lighter, #e6f6ec)` /
   `var(--rz-danger-lighter, #fdecec)`, i.e. a pastel that only ever read correctly in light
   mode — in the dark shell it rendered as a near-white slab with unreadable muted text.
   These are the same two states expressed in semantic tokens, so they follow
   [data-appearance] in both directions. */

.cb-trading-switch[b-p9q2dxvanz] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--hz-space-3, 0.75rem);
    padding: 0.85rem 1rem;
    border: 1px solid var(--hz-border-strong);
    border-left-width: 3px;
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
    color: var(--hz-text);
}

.cb-trading-switch--on[b-p9q2dxvanz] {
    border-left-color: var(--hz-success);
    background: var(--hz-success-soft);
}

.cb-trading-switch--off[b-p9q2dxvanz] {
    border-left-color: var(--hz-danger);
    background: var(--hz-danger-soft);
}

.cb-trading-switch__icon[b-p9q2dxvanz] {
    display: inline-flex;
    font-size: 2rem;
    line-height: 1;
    flex: none;
}

.cb-trading-switch--on .cb-trading-switch__icon[b-p9q2dxvanz] { color: var(--hz-success); }
.cb-trading-switch--off .cb-trading-switch__icon[b-p9q2dxvanz] { color: var(--hz-danger); }

.cb-trading-switch__body[b-p9q2dxvanz] {
    flex: 1 1 auto;
    min-width: 12rem;
}

.cb-trading-switch__body strong[b-p9q2dxvanz] {
    font-family: var(--hz-font-display);
    font-weight: 600;
}

/* Timestamps/attribution under the headline read as data, not prose. */
.cb-trading-switch__meta[b-p9q2dxvanz] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.7rem;
    color: var(--hz-text-muted);
    margin-top: 0.2rem;
}

.cb-trading-switch__note[b-p9q2dxvanz] {
    font-size: 0.75rem;
    color: var(--hz-text-muted);
    margin-top: 0.15rem;
}

/* Confirmation step — the guarded half of the control. */
.cb-trading-confirm[b-p9q2dxvanz] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--hz-space-2, 0.5rem);
    margin-top: var(--hz-space-2, 0.5rem);
    padding: 0.85rem 1rem;
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-card);
    background: var(--hz-raised);
}

.cb-trading-confirm__body[b-p9q2dxvanz] {
    flex: 1 1 20rem;
    min-width: 0;
}

.cb-trading-confirm__body strong[b-p9q2dxvanz] {
    font-family: var(--hz-font-display);
    font-weight: 600;
}

.cb-trading-confirm__hint[b-p9q2dxvanz] {
    font-size: 0.75rem;
    color: var(--hz-text-muted);
    margin-top: 0.2rem;
}

.cb-trading-confirm__label[b-p9q2dxvanz] {
    display: block;
    font-size: 0.64rem;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--hz-text-faint);
    margin-top: 0.5rem;
    margin-bottom: 0.2rem;
}

.cb-trading-confirm__reason[b-p9q2dxvanz] { width: 100%; max-width: 24rem; }
/* /Components/Shared/ComparisonContextBanner.razor.rz.scp.css */
.comparison-context-banner[b-8m6po8ihly] {
    padding: 1rem;
    border-radius: var(--hz-radius-card);
    border: 1px solid color-mix(in srgb, var(--hz-warning) 45%, transparent);
    background: color-mix(in srgb, var(--hz-warning) 14%, transparent);
    color: var(--hz-warning);
    box-shadow: var(--hz-shadow-card);
}

.comparison-context-banner__header h2[b-8m6po8ihly] {
    margin: 0 0 0.25rem;
    font-size: 1rem;
}

.comparison-context-banner__header p[b-8m6po8ihly] {
    margin: 0 0 0.75rem;
}

.comparison-context-banner ul[b-8m6po8ihly] {
    margin: 0;
    padding-left: 1.1rem;
}
/* /Components/Shared/ComparisonParameterDiff.razor.rz.scp.css */
.comparison-parameter-diff[b-izod0hrzkd],
.comparison-parameter-diff--empty[b-izod0hrzkd] {
    padding: 1rem;
    border-radius: var(--hz-radius-card);
    border: 1px solid var(--botley-border);
    background: var(--hz-card);
    box-shadow: var(--hz-shadow-card);
}

.comparison-parameter-diff__header h2[b-izod0hrzkd] {
    margin: 0 0 0.25rem;
    color: var(--botley-text);
}

.comparison-parameter-diff__header p[b-izod0hrzkd] {
    margin: 0 0 0.9rem;
    color: var(--botley-muted);
}

.comparison-parameter-diff__scroll[b-izod0hrzkd] {
    overflow: auto;
    max-height: min(70vh, 42rem);
}

.comparison-parameter-diff table[b-izod0hrzkd] {
    width: 100%;
    border-collapse: collapse;
}

.comparison-parameter-diff th[b-izod0hrzkd],
.comparison-parameter-diff td[b-izod0hrzkd] {
    padding: 0.75rem 0.6rem;
    border-top: 1px solid var(--hz-border);
    text-align: left;
    vertical-align: top;
}

.comparison-parameter-diff thead th[b-izod0hrzkd] {
    position: sticky;
    top: 0;
    z-index: 2;
    border-top: none;
    color: var(--botley-text);
    background: var(--hz-raised);
    box-shadow: inset 0 -1px 0 var(--hz-border);
}

.comparison-parameter-diff__value[b-izod0hrzkd] {
    color: var(--botley-text);
    font-weight: 700;
}

.comparison-parameter-diff__status[b-izod0hrzkd] {
    display: inline-flex;
    margin-top: 0.35rem;
    padding: 0.2rem 0.45rem;
    border-radius: var(--hz-radius-badge);
    font-size: 0.78rem;
    font-weight: 700;
}

.comparison-parameter-diff__status--baseline[b-izod0hrzkd],
.comparison-parameter-diff__status--same[b-izod0hrzkd] {
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
}

.comparison-parameter-diff__status--changed[b-izod0hrzkd] {
    background: color-mix(in srgb, var(--hz-warning) 18%, transparent);
    color: var(--hz-warning);
}

.comparison-parameter-diff__status--unavailable[b-izod0hrzkd] {
    background: color-mix(in srgb, var(--hz-danger) 16%, transparent);
    color: var(--hz-danger);
}
/* /Components/Shared/ComparisonSummaryTable.razor.rz.scp.css */
.comparison-summary-table[b-pdhl7uqe9y],
.comparison-summary-table--empty[b-pdhl7uqe9y] {
    padding: 1rem;
    border-radius: var(--hz-radius-card);
    border: 1px solid var(--botley-border);
    background: var(--hz-card);
    box-shadow: var(--hz-shadow-card);
}

.comparison-summary-table__header h2[b-pdhl7uqe9y] {
    margin: 0 0 0.25rem;
    color: var(--botley-text);
}

.comparison-summary-table__header p[b-pdhl7uqe9y] {
    margin: 0 0 0.9rem;
    color: var(--botley-muted);
}

.comparison-summary-table__scroll[b-pdhl7uqe9y] {
    overflow: auto;
    max-height: min(70vh, 42rem);
}

.comparison-summary-table table[b-pdhl7uqe9y] {
    width: 100%;
    border-collapse: collapse;
}

.comparison-summary-table th[b-pdhl7uqe9y],
.comparison-summary-table td[b-pdhl7uqe9y] {
    padding: 0.75rem 0.6rem;
    border-top: 1px solid var(--hz-border);
    text-align: left;
    vertical-align: top;
}

.comparison-summary-table thead th[b-pdhl7uqe9y] {
    position: sticky;
    top: 0;
    z-index: 2;
    border-top: none;
    color: var(--botley-text);
    background: var(--hz-raised);
    box-shadow: inset 0 -1px 0 var(--hz-border);
}

.comparison-summary-table thead small[b-pdhl7uqe9y] {
    display: block;
    margin-top: 0.2rem;
    color: var(--hz-text-muted);
    font-weight: 400;
}

.comparison-summary-table__value[b-pdhl7uqe9y] {
    color: var(--botley-text);
    font-weight: 700;
}

.comparison-summary-table__delta[b-pdhl7uqe9y] {
    margin-top: 0.25rem;
    color: var(--botley-muted);
    font-size: 0.85rem;
}
/* /Components/Shared/DashboardTile.razor.rz.scp.css */
/* Secondary status tile on the Dashboard — a compact link card for the app areas the
   trading panels above don't cover. Markup is fixed (DashboardTests asserts on the
   class names and the details list), so this sheet only re-dresses it: hairline
   border, flat elevation, mono status chip, no lift on hover. Tokens only. */

.dashboard-tile[b-ivqiwiyg4x] {
    display: flex;
    flex-direction: column;
    gap: var(--hz-space-2);
    padding: 0.7rem 0.85rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-card);
    color: var(--hz-text);
    text-decoration: none;
    min-width: 0;
}

.dashboard-tile:hover[b-ivqiwiyg4x] {
    border-color: var(--hz-brand);
    background: var(--hz-brand-soft);
}

.dashboard-tile__header[b-ivqiwiyg4x] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--hz-space-2);
}

.dashboard-tile__title[b-ivqiwiyg4x] {
    font-family: var(--hz-font-display);
    font-weight: 600;
    font-size: 0.82rem;
    color: var(--hz-text);
    min-width: 0;
    overflow-wrap: anywhere;
}

/* Status chip — mono + uppercase, matching .hz-badge without depending on it
   (the markup is fixed and carries only the dashboard-tile classes). */
.dashboard-tile__status[b-ivqiwiyg4x] {
    flex: none;
    padding: 0.12rem 0.45rem;
    border: 1px solid transparent;
    border-radius: var(--hz-radius-badge);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    white-space: nowrap;
    background: var(--hz-raised);
    color: var(--hz-text-muted);
    border-color: var(--hz-border-strong);
}

.dashboard-tile--ok .dashboard-tile__status[b-ivqiwiyg4x] {
    background: var(--hz-success-soft);
    color: var(--hz-success);
    border-color: color-mix(in srgb, var(--hz-success) 32%, transparent);
}

.dashboard-tile--empty .dashboard-tile__status[b-ivqiwiyg4x] {
    background: var(--hz-raised);
    color: var(--hz-text-muted);
    border-color: var(--hz-border-strong);
}

.dashboard-tile--unavailable .dashboard-tile__status[b-ivqiwiyg4x] {
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
    border-color: color-mix(in srgb, var(--hz-danger) 32%, transparent);
}

.dashboard-tile__headline[b-ivqiwiyg4x] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 1.07rem;
    font-weight: 500;
    color: var(--hz-text);
    overflow-wrap: anywhere;
}

.dashboard-tile--unavailable .dashboard-tile__headline[b-ivqiwiyg4x] {
    color: var(--hz-danger);
}

.dashboard-tile__details[b-ivqiwiyg4x] {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    color: var(--hz-text-muted);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.75rem;
    overflow-wrap: anywhere;
}
/* /Components/Shared/ErrorDisplay.razor.rz.scp.css */
/* Was an inline <style> block in ErrorDisplay.razor with hard-coded #2a1010 / #ef5350,
   which stayed dark-red on the light theme. Same shape, token-driven (spec 078). */

.error-display[b-4rljauhhhv] {
    background: var(--hz-danger-soft);
    color: var(--hz-danger);
    border: 1px solid color-mix(in srgb, var(--hz-danger) 38%, transparent);
    border-left-width: 3px;
    border-radius: var(--hz-radius-control);
    padding: var(--hz-space-3) var(--hz-space-4);
    margin: var(--hz-space-4);
    font-size: 0.82rem;
    line-height: 1.5;
}

    .error-display strong[b-4rljauhhhv] {
        font-family: var(--hz-font-display);
        font-weight: 600;
    }
/* /Components/Shared/EventNotificationToast.razor.rz.scp.css */
.event-notification-container[b-d54qvqborp] {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 9999;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    max-width: 380px;
}

/* Token-driven (spec 037 T017): raised surface with a semantic left bar instead of the
   old full-color gradient fills — impact severity keeps its color meaning (FR-008). */
.event-notification-toast[b-d54qvqborp] {
    padding: 0.75rem 1rem;
    border-radius: var(--hz-radius-card);
    background: var(--hz-raised);
    color: var(--hz-text);
    border: 1px solid var(--hz-border-strong);
    border-left-width: 3px;
    box-shadow: var(--hz-shadow-overlay);
    cursor: pointer;
    transition: transform 0.2s ease, opacity 0.2s ease;
}

    .event-notification-toast:hover[b-d54qvqborp] {
        transform: translateY(-2px);
        opacity: 0.95;
    }

    .event-notification-toast.impact-high[b-d54qvqborp] {
        border-left-color: var(--hz-danger);
    }

    .event-notification-toast.impact-medium[b-d54qvqborp] {
        border-left-color: var(--hz-warning);
    }

    .event-notification-toast.impact-low[b-d54qvqborp] {
        border-left-color: var(--hz-success);
    }

    .event-notification-toast.impact-unknown[b-d54qvqborp] {
        border-left-color: var(--hz-border-strong);
    }

.notification-header[b-d54qvqborp] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.25rem;
}

.notification-impact-badge[b-d54qvqborp] {
    font-family: var(--hz-font-mono);
    font-size: 0.7rem;
    font-weight: 600;
    padding: 0.1rem 0.4rem;
    border-radius: var(--hz-radius-badge);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    white-space: nowrap;
}

    .notification-impact-badge.impact-high[b-d54qvqborp] {
        background: var(--hz-danger-soft);
        color: var(--hz-danger);
    }

    .notification-impact-badge.impact-medium[b-d54qvqborp] {
        background: var(--hz-warning-soft);
        color: var(--hz-warning);
    }

    .notification-impact-badge.impact-low[b-d54qvqborp] {
        background: var(--hz-success-soft);
        color: var(--hz-success);
    }

    .notification-impact-badge.impact-unknown[b-d54qvqborp] {
        background: var(--hz-brand-soft);
        color: var(--hz-text-muted);
    }

.notification-title[b-d54qvqborp] {
    font-weight: 600;
    font-size: 0.9rem;
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.notification-dismiss[b-d54qvqborp] {
    background: none;
    border: none;
    color: inherit;
    font-size: 1.2rem;
    line-height: 1;
    padding: 0;
    margin-left: 0.5rem;
    opacity: 0.6;
    cursor: pointer;
}

    .notification-dismiss:hover[b-d54qvqborp] {
        opacity: 1;
    }

.notification-body[b-d54qvqborp] {
    margin-top: 0.2rem;
    padding-left: 0.2rem;
}

.notification-meta[b-d54qvqborp] {
    font-size: 0.78rem;
    color: var(--hz-text-muted);
}
/* /Components/Shared/GridSettingsEditor.razor.rz.scp.css */
/* Grid settings editor — chart chrome, fully token-driven (spec 078).
   Lives in a popover on /chart and inline on /backtest; both hosts strip the
   frame when they supply their own. */

.grid-settings-editor__panel[b-tup00qvk2z] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--hz-space-3) var(--hz-space-5);
    padding: 0.7rem 0.9rem;
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    align-items: center;
}

.grid-settings-editor__option[b-tup00qvk2z] {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    color: var(--hz-text-muted);
    font-family: var(--hz-font);
    font-size: 0.78rem;
    cursor: pointer;
    user-select: none;
}

.grid-settings-editor__option input[type="checkbox"][b-tup00qvk2z] {
    width: 0.85rem;
    height: 0.85rem;
    margin: 0;
    accent-color: var(--hz-brand);
    cursor: pointer;
}

.grid-settings-editor__option:hover[b-tup00qvk2z] {
    color: var(--hz-text);
}

.grid-settings-editor__row[b-tup00qvk2z] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
}

.grid-settings-editor__label[b-tup00qvk2z] {
    font-family: var(--hz-font);
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
    min-width: 3.2rem;
}

.grid-settings-editor__select[b-tup00qvk2z] {
    padding: 0.28rem 0.5rem;
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.76rem;
    background: var(--hz-card);
    color: var(--hz-text);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    cursor: pointer;
    outline: none;
}

.grid-settings-editor__select:hover[b-tup00qvk2z],
.grid-settings-editor__select:focus[b-tup00qvk2z] {
    border-color: var(--hz-brand);
}

.grid-settings-editor__range[b-tup00qvk2z] {
    width: 90px;
    accent-color: var(--hz-brand);
    cursor: pointer;
}

.grid-settings-editor__value[b-tup00qvk2z] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.76rem;
    color: var(--hz-text);
    min-width: 1.4rem;
    text-align: right;
}

.grid-settings-editor__actions[b-tup00qvk2z] {
    display: flex;
    align-items: center;
    margin-left: auto;
}

.grid-settings-editor__reset[b-tup00qvk2z] {
    padding: 0.3rem 0.6rem;
    font-family: var(--hz-font);
    font-weight: 600;
    font-size: 0.76rem;
    color: var(--hz-text-muted);
    background: var(--hz-card);
    border: 1px solid var(--hz-border-strong);
    border-radius: var(--hz-radius-control);
    cursor: pointer;
}

.grid-settings-editor__reset:hover[b-tup00qvk2z] {
    border-color: var(--hz-brand);
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
}

/* Guardrail notice when the user has hidden every gridline. Warning is orange,
   never gold. */
.grid-settings-editor__warning[b-tup00qvk2z] {
    flex-basis: 100%;
    padding: 0.4rem 0.6rem;
    border: 1px solid color-mix(in srgb, var(--hz-warning) 32%, transparent);
    border-left-width: 3px;
    border-radius: var(--hz-radius-control);
    background: var(--hz-warning-soft);
    color: var(--hz-warning);
    font-family: var(--hz-font);
    font-size: 0.76rem;
}
/* /Components/Shared/ParameterPanel.razor.rz.scp.css */
.parameter-panel[b-7qqgz2no9z] {
    display: grid;
    gap: 1rem;
    padding: 1rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
    color: var(--hz-text);
}

.parameter-panel__header h2[b-7qqgz2no9z] {
    margin: 0;
    font-size: 1rem;
}

.parameter-panel__header p[b-7qqgz2no9z] {
    margin: 0.35rem 0 0;
    color: var(--hz-text-muted);
    font-size: 0.92rem;
}

.parameter-panel__preset-row[b-7qqgz2no9z] {
    display: grid;
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) auto;
    gap: 0.9rem;
    align-items: end;
}

.parameter-panel__grid[b-7qqgz2no9z] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
    gap: 0.9rem;
}

.parameter-panel__toggle-group[b-7qqgz2no9z] {
    display: grid;
    gap: 0.75rem;
    margin: 0;
    padding: 0.9rem 1rem 1rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
}

.parameter-panel__toggle-group legend[b-7qqgz2no9z] {
    padding: 0 0.35rem;
    font-weight: 700;
    color: var(--hz-text);
}

.parameter-panel__toggle-group p[b-7qqgz2no9z] {
    margin: 0;
    color: var(--hz-text-muted);
    font-size: 0.9rem;
}

.parameter-panel__toggle[b-7qqgz2no9z] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    color: var(--hz-text);
    font-size: 0.92rem;
}

.parameter-panel__toggle input[b-7qqgz2no9z] {
    width: auto;
    margin: 0;
}

.parameter-panel__field[b-7qqgz2no9z] {
    display: grid;
    gap: 0.35rem;
    font-size: 0.92rem;
    color: var(--hz-text);
}

.parameter-panel__field span[b-7qqgz2no9z] {
    font-weight: 600;
}

.parameter-panel__field input[b-7qqgz2no9z],
.parameter-panel__field select[b-7qqgz2no9z] {
    width: 100%;
    padding: 0.6rem 0.7rem;
    border: 1px solid var(--hz-border);
    border-radius: 0.7rem;
    background: var(--hz-card);
    color: var(--hz-text);
}

.parameter-panel__field input:focus[b-7qqgz2no9z],
.parameter-panel__field select:focus[b-7qqgz2no9z] {
    outline: 2px solid color-mix(in srgb, var(--hz-brand) 30%, transparent);
    border-color: var(--hz-brand);
}

.parameter-panel__preset-actions[b-7qqgz2no9z] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
}

.parameter-panel__action[b-7qqgz2no9z] {
    min-height: 2.75rem;
    padding: 0 0.9rem;
    border: 1px solid var(--hz-brand);
    border-radius: 0.7rem;
    background: var(--hz-brand);
    color: var(--hz-on-brand);
    font-weight: 600;
}

.parameter-panel__action:hover:not(:disabled)[b-7qqgz2no9z] {
    background: var(--hz-brand-hover);
    border-color: var(--hz-brand-hover);
    color: var(--hz-on-brand);
}

.parameter-panel__action:disabled[b-7qqgz2no9z] {
    opacity: 0.6;
}

.parameter-panel__action--danger[b-7qqgz2no9z] {
    border-color: var(--hz-danger);
    background: var(--hz-danger);
    color: #fff;
}

.parameter-panel__error[b-7qqgz2no9z] {
    color: var(--hz-danger);
    font-size: 0.8rem;
}

.parameter-panel__field--wide[b-7qqgz2no9z] {
    grid-column: 1 / -1;
}

.parameter-panel__sweep[b-7qqgz2no9z] {
    display: grid;
    gap: 1rem;
    padding: 1rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-bg);
}

.parameter-panel__sweep-header[b-7qqgz2no9z] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.9rem;
    justify-content: space-between;
    align-items: end;
}

.parameter-panel__sweep-header h3[b-7qqgz2no9z] {
    margin: 0;
    font-size: 0.98rem;
}

.parameter-panel__sweep-header p[b-7qqgz2no9z] {
    margin: 0.35rem 0 0;
    color: var(--hz-text-muted);
    font-size: 0.9rem;
}

.parameter-panel__sweep-actions[b-7qqgz2no9z] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
}

.parameter-panel__sweep-note[b-7qqgz2no9z] {
    padding: 0.75rem 0.9rem;
    border: 1px solid color-mix(in srgb, var(--hz-brand) 25%, transparent);
    border-radius: var(--hz-radius-control);
    background: var(--hz-brand-soft);
    color: var(--hz-text);
    font-size: 0.9rem;
}

.parameter-panel__sweep-note--warning[b-7qqgz2no9z] {
    border-color: color-mix(in srgb, var(--hz-danger) 35%, transparent);
    background: color-mix(in srgb, var(--hz-danger) 12%, transparent);
    color: var(--hz-danger);
}

.parameter-panel__sweep-editors[b-7qqgz2no9z] {
    display: grid;
    gap: 0.9rem;
}

.parameter-panel__sweep-editor[b-7qqgz2no9z] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
    gap: 0.9rem;
    align-items: end;
    padding: 0.9rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-raised);
}

.parameter-panel__sweep-remove[b-7qqgz2no9z] {
    justify-self: start;
}

.parameter-panel__sweep-preview[b-7qqgz2no9z] {
    display: grid;
    gap: 0.4rem;
    padding: 0.8rem 0.9rem;
    border: 1px solid color-mix(in srgb, var(--hz-brand) 22%, transparent);
    border-radius: var(--hz-radius-control);
    background: var(--hz-brand-soft);
    color: var(--hz-text);
    font-weight: 600;
}

@media (max-width: 960px) {
    .parameter-panel__preset-row[b-7qqgz2no9z] {
        grid-template-columns: 1fr;
    }

    .parameter-panel__sweep-header[b-7qqgz2no9z] {
        align-items: start;
    }
}

/* This panel is rendered inside a user-resizable layout panel, where its width is
   independent of the viewport — the media query above never fires for a narrow panel on a
   wide screen, which crammed the three preset columns into ~340px and overlapped the label
   with its buttons. The container query is the one that actually governs there. */
@container hz-panel (max-width: 34rem) {
    .parameter-panel__preset-row[b-7qqgz2no9z] {
        grid-template-columns: 1fr;
    }

    .parameter-panel__sweep-header[b-7qqgz2no9z] {
        align-items: start;
    }
}
/* /Components/Shared/ResultsTable.razor.rz.scp.css */
.results-table-empty[b-4vzdskk6tt],
.results-table-shell[b-4vzdskk6tt] {
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-control);
    background: var(--hz-card);
}

.results-table-empty[b-4vzdskk6tt] {
    padding: 1rem;
    color: var(--hz-text-muted);
}

.results-table-shell[b-4vzdskk6tt] {
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.results-table__header[b-4vzdskk6tt] {
    padding: 1rem;
    border-bottom: 1px solid var(--hz-border);
}

.results-table__header h2[b-4vzdskk6tt] {
    margin: 0;
    font-size: 1rem;
    color: var(--hz-text);
}

.results-table__header p[b-4vzdskk6tt] {
    margin: 0.35rem 0 0;
    color: var(--hz-text-muted);
    font-size: 0.82rem;
}

.results-table__scroll[b-4vzdskk6tt] {
    overflow: auto;
    max-height: min(60vh, 44rem);
}

.results-table__controls[b-4vzdskk6tt] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.9rem;
    align-items: end;
    padding: 1rem;
    border-bottom: 1px solid var(--hz-border);
}

.results-table__controls label[b-4vzdskk6tt] {
    display: grid;
    gap: 0.35rem;
    color: var(--hz-text);
    font-size: 0.9rem;
}

.results-table__controls select[b-4vzdskk6tt],
.results-table__controls input[b-4vzdskk6tt],
.results-table__clear[b-4vzdskk6tt] {
    padding: 0.55rem 0.7rem;
    border: 1px solid var(--hz-border);
    border-radius: 0.65rem;
    background: var(--hz-card);
    color: var(--hz-text);
}

.results-table__filter-input[b-4vzdskk6tt] {
    min-width: 7.5rem;
}

.results-table__clear[b-4vzdskk6tt] {
    cursor: pointer;
    font-weight: 600;
}

.results-table__pagination[b-4vzdskk6tt] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    align-items: end;
    margin-left: auto;
}

.results-table__pagination-summary[b-4vzdskk6tt],
.results-table__page-indicator[b-4vzdskk6tt] {
    color: var(--hz-text-muted);
    font-size: 0.82rem;
}

.results-table__page-size[b-4vzdskk6tt] {
    display: grid;
    gap: 0.35rem;
    color: var(--hz-text);
    font-size: 0.9rem;
}

.results-table__page-button[b-4vzdskk6tt] {
    padding: 0.55rem 0.7rem;
    border: 1px solid var(--hz-border);
    border-radius: 0.65rem;
    background: var(--hz-card);
    color: var(--hz-text);
    cursor: pointer;
    font-weight: 600;
}

.results-table__page-button:disabled[b-4vzdskk6tt] {
    cursor: default;
    opacity: 0.5;
}

.results-table__clear:disabled[b-4vzdskk6tt] {
    cursor: default;
    opacity: 0.5;
}

.results-table-empty--inline[b-4vzdskk6tt] {
    border: 0;
    border-radius: 0;
    border-top: 1px solid var(--hz-border);
}

.results-table[b-4vzdskk6tt] {
    width: 100%;
    border-collapse: collapse;
    min-width: 62rem;
}

.results-table th[b-4vzdskk6tt],
.results-table td[b-4vzdskk6tt] {
    padding: 0.75rem 0.9rem;
    border-bottom: 1px solid var(--hz-border);
    text-align: left;
    white-space: nowrap;
}

.results-table thead[b-4vzdskk6tt] {
    background: var(--hz-raised);
    color: var(--hz-text-muted);
}

.results-table thead th[b-4vzdskk6tt] {
    position: sticky;
    top: 0;
    z-index: 2;
    background: var(--hz-raised);
    box-shadow: inset 0 -1px 0 var(--hz-border);
}

.results-table__sort[b-4vzdskk6tt] {
    border: 0;
    padding: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    font-weight: 700;
    cursor: pointer;
}

.results-table__toggle-cell[b-4vzdskk6tt] {
    width: 5.5rem;
    vertical-align: top;
}

.results-table__toggle[b-4vzdskk6tt] {
    min-width: 4.5rem;
    padding: 0.45rem 0.65rem;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-badge);
    background: var(--hz-card);
    color: var(--hz-text);
    font-size: 0.78rem;
    font-weight: 700;
    cursor: pointer;
}

.results-table__row[b-4vzdskk6tt] {
    cursor: pointer;
}

.results-table__row:hover[b-4vzdskk6tt] {
    background: var(--hz-brand-soft);
}

.results-table__row--selected[b-4vzdskk6tt] {
    background: var(--hz-brand-soft);
}

.results-table__details[b-4vzdskk6tt] {
    background: var(--hz-bg);
}

.results-table__details td[b-4vzdskk6tt] {
    white-space: normal;
}

.results-table__zone-cell[b-4vzdskk6tt],
.results-table__event-cell[b-4vzdskk6tt],
.results-table__notes-cell[b-4vzdskk6tt] {
    white-space: normal;
    vertical-align: top;
}

.results-table__zone-cell[b-4vzdskk6tt] {
    min-width: 12rem;
}

.results-table__event-cell[b-4vzdskk6tt] {
    min-width: 10rem;
}

.results-table__event-cell--sl .results-table__primary[b-4vzdskk6tt] {
    color: var(--hz-danger);
}

.results-table__event-cell--inconclusive .results-table__primary[b-4vzdskk6tt] {
    color: var(--hz-info);
}

.results-table__event-cell--near-tapped .results-table__primary[b-4vzdskk6tt] {
    color: var(--hz-warning);
}

.results-table__notes-cell[b-4vzdskk6tt] {
    min-width: 16rem;
}

.results-table__primary[b-4vzdskk6tt] {
    color: var(--hz-text);
    font-weight: 600;
}

.results-table__secondary[b-4vzdskk6tt],
.results-table__note[b-4vzdskk6tt] {
    margin-top: 0.3rem;
    font-size: 0.78rem;
    line-height: 1.35;
    color: var(--hz-text-muted);
}

.results-table__note--muted[b-4vzdskk6tt] {
    color: var(--hz-text-muted);
}

.results-table__details-body[b-4vzdskk6tt] {
    display: grid;
    gap: 1rem;
    padding: 0.25rem 0;
}

.results-table__details-body h3[b-4vzdskk6tt] {
    margin: 0 0 0.65rem;
    font-size: 0.88rem;
    color: var(--hz-text);
}

.results-table__definition-list[b-4vzdskk6tt] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
    gap: 0.75rem;
    margin: 0;
}

.results-table__definition-list--compact[b-4vzdskk6tt] {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.55rem;
}

.results-table__definition-list div[b-4vzdskk6tt] {
    display: grid;
    gap: 0.2rem;
}

.results-table__definition-list dt[b-4vzdskk6tt] {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--hz-text-muted);
}

.results-table__definition-list dd[b-4vzdskk6tt] {
    margin: 0;
    color: var(--hz-text);
    font-size: 0.84rem;
}

.results-table__debug-grid[b-4vzdskk6tt] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
    gap: 0.75rem;
}

.results-table__debug-card[b-4vzdskk6tt] {
    display: grid;
    gap: 0.65rem;
    padding: 0.8rem 0.9rem;
    border: 1px solid var(--hz-border);
    border-radius: 0.7rem;
    background: var(--hz-raised);
}

.results-table__math[b-4vzdskk6tt] {
    display: grid;
    gap: 0.35rem;
}

.results-table__math-label[b-4vzdskk6tt] {
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--hz-text-muted);
}

.results-table__math-step[b-4vzdskk6tt] {
    font-size: 0.78rem;
    line-height: 1.4;
    color: var(--hz-text);
}
/* /Components/Shared/StatCard.razor.rz.scp.css */
/* 618 statistic card (spec 037 T021, design/pages/dashboard.html). Token-driven;
   follows [data-appearance]. The gold gradient keyline is the brand gesture. */
.stat-card[b-18a5qrzxiw] {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1rem 1.15rem;
    background: var(--hz-card);
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    box-shadow: var(--hz-shadow-card);
}

    .stat-card[b-18a5qrzxiw]::before {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        height: 2px;
        background: var(--hz-brand-gradient);
    }

.stat-card__icon[b-18a5qrzxiw] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3rem;
    height: 3rem;
    border-radius: var(--hz-radius-control);
    flex-shrink: 0;
    background: var(--hz-brand-soft);
    color: var(--hz-brand-strong);
}

.stat-card__icon[b-18a5qrzxiw]  .rz-icon,
.stat-card__icon[b-18a5qrzxiw]  .notranslate {
    font-size: 1.5rem;
    color: inherit;
}

.stat-card__icon--success[b-18a5qrzxiw] {
    background: color-mix(in srgb, var(--hz-success) 14%, transparent);
    color: var(--hz-success);
}

.stat-card__icon--warning[b-18a5qrzxiw] {
    background: color-mix(in srgb, var(--hz-warning) 16%, transparent);
    color: var(--hz-warning);
}

.stat-card__icon--danger[b-18a5qrzxiw] {
    background: color-mix(in srgb, var(--hz-danger) 12%, transparent);
    color: var(--hz-danger);
}

.stat-card__icon--info[b-18a5qrzxiw] {
    background: color-mix(in srgb, var(--hz-info) 12%, transparent);
    color: var(--hz-info);
}

.stat-card__body[b-18a5qrzxiw] {
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
    min-width: 0;
}

.stat-card__label[b-18a5qrzxiw] {
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    /* muted (not faint): small uppercase labels must clear WCAG AA (T029 audit) */
    color: var(--hz-text-muted);
}

.stat-card__value[b-18a5qrzxiw] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 1.45rem;
    font-weight: 500;
    line-height: 1.15;
    color: var(--hz-text);
}

.stat-card__trend[b-18a5qrzxiw] {
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.75rem;
    color: var(--hz-text-muted);
}
/* /Components/Shared/SummaryStatistics.razor.rz.scp.css */
/* Layout only — surface, stat and badge chrome come from six18-ui.css (.hz-panel,
   .hz-stats/.hz-stat, .hz-badge), so light mode and theming are handled centrally. */

.summary-statistics__heading[b-wcjq65xb04] {
    min-width: 0;
}

.summary-statistics__sub[b-wcjq65xb04] {
    margin: 0.2rem 0 0;
    font-size: 0.86rem;
    line-height: 1.45;
    color: var(--hz-text-muted);
}

.summary-statistics__metas[b-wcjq65xb04] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--hz-space-2) var(--hz-space-4);
    margin-bottom: var(--hz-space-3);
}

/* Stat tiles sit inside a panel body, so they need the raised tone rather than the
   card tone .hz-stat defaults to (which would be invisible against the panel). */
.summary-statistics__card[b-wcjq65xb04] {
    background: var(--hz-raised);
}
/* /Components/Shared/TradingControlPanel.razor.rz.scp.css */
/* Automation controls — start/stop plus the activation-gated safety switch.
   Hosted inside the Dashboard's hero panel, so this sheet owns the row layout only
   (no card chrome of its own). Tokens only. */

.trading-controls[b-fm9hzo1uqs] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-4);
    flex-wrap: wrap;
    min-height: 2rem;
}

.trading-controls__safety[b-fm9hzo1uqs] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
}

.trading-controls__label[b-fm9hzo1uqs] {
    font-size: var(--hz-label-size);
    font-weight: 600;
    letter-spacing: var(--hz-label-tracking);
    text-transform: uppercase;
    color: var(--hz-text-faint);
}

.trading-controls__spacer[b-fm9hzo1uqs] {
    flex: 1 1 auto;
}

/* ── Start progress stepper ──────────────────────────────────────────────────── */

.start-progress[b-fm9hzo1uqs] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--hz-border);
    border-radius: var(--hz-radius-card);
    background: var(--hz-raised);
    overflow: hidden;
    max-width: 34rem;
}

.start-progress__step[b-fm9hzo1uqs] {
    display: flex;
    align-items: center;
    gap: var(--hz-space-2);
    padding: 0.5rem 0.75rem;
    border-bottom: 1px solid var(--hz-border);
    color: var(--hz-text-faint);
    font-size: 0.86rem;
}

.start-progress__step:last-child[b-fm9hzo1uqs] {
    border-bottom: none;
}

.start-progress__num[b-fm9hzo1uqs] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    flex: 0 0 auto;
    border-radius: var(--hz-radius-badge);
    border: 1px solid var(--hz-border-strong);
    font-family: var(--hz-font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 0.66rem;
    font-weight: 600;
}

.start-progress__label[b-fm9hzo1uqs] {
    font-weight: 600;
}

.start-progress__step--done[b-fm9hzo1uqs] {
    color: var(--hz-text-muted);
}

    .start-progress__step--done .start-progress__num[b-fm9hzo1uqs] {
        background: var(--hz-success-soft);
        border-color: color-mix(in srgb, var(--hz-success) 35%, transparent);
        color: var(--hz-success);
    }

.start-progress__step--active[b-fm9hzo1uqs] {
    color: var(--hz-text);
    background: var(--hz-brand-soft);
}

    .start-progress__step--active .start-progress__num[b-fm9hzo1uqs] {
        background: var(--hz-brand);
        border-color: var(--hz-brand);
        color: var(--hz-on-brand);
        animation: start-progress-pulse-b-fm9hzo1uqs 1.2s ease-in-out infinite;
    }

.start-progress__step--failed[b-fm9hzo1uqs] {
    color: var(--hz-danger);
    background: var(--hz-danger-soft);
}

    .start-progress__step--failed .start-progress__num[b-fm9hzo1uqs] {
        background: var(--hz-danger-soft);
        border-color: color-mix(in srgb, var(--hz-danger) 45%, transparent);
        color: var(--hz-danger);
    }

.start-progress__error[b-fm9hzo1uqs] {
    margin: 0;
    color: var(--hz-danger);
    font-size: 0.86rem;
}

/* Not an error: automation is up, the broker link simply is not there yet. */
.start-progress__note[b-fm9hzo1uqs] {
    margin: 0;
    max-width: 34rem;
    color: var(--hz-warning);
    font-size: 0.86rem;
    line-height: 1.45;
}

@keyframes start-progress-pulse-b-fm9hzo1uqs {
    0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--hz-brand) 55%, transparent); }
    50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--hz-brand) 0%, transparent); }
}

@media (prefers-reduced-motion: reduce) {
    .start-progress__step--active .start-progress__num[b-fm9hzo1uqs] {
        animation: none;
    }
}
