@import '_content/ContraForce.Blazor.Common/ContraForce.Blazor.Common.acuwr9n19n.bundle.scp.css';
@import '_content/ContraForce.Blazor.MonacoEditor/ContraForce.Blazor.MonacoEditor.fblkaakkbm.bundle.scp.css';
@import '_content/ContraForce.Blazor.UI.V2/ContraForce.Blazor.UI.V2.l21dfe02bl.bundle.scp.css';
@import '_content/ContraForce.Iris.Client.Components.GoJsGraph/ContraForce.Iris.Client.Components.GoJsGraph.j7egijfdej.bundle.scp.css';
@import '_content/ContraForce.Iris.Client.Components/ContraForce.Iris.Client.Components.0azp9ods99.bundle.scp.css';

/* /Pages/External/Admin/AddServiceProviderPanel.razor.rz.scp.css */
.admin-add-sp-panel[b-q3jw86u2gb] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
    padding-top: var(--cf-space-2, 0.5rem);
}

.admin-add-sp-panel__footer[b-q3jw86u2gb] {
    display: flex;
    flex-direction: column-reverse;
    gap: var(--cf-space-2, 0.5rem);
    width: 100%;
}

@media (min-width: 560px) {
    .admin-add-sp-panel__footer[b-q3jw86u2gb] {
        flex-direction: row;
        justify-content: flex-end;
    }
}
/* /Pages/External/Admin/AdminAccountDetailPage.razor.rz.scp.css */
.admin-account-detail__section-head[b-sp3487udzo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    align-items: flex-start;
    width: 100%;
}

.admin-account-detail__meta-grid[b-sp3487udzo] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-4, 1rem);
}

.admin-account-detail__meta[b-sp3487udzo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
    align-items: flex-start;
    min-width: 0;
}

.admin-account-detail__value-inline[b-sp3487udzo] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--cf-space-1, 0.25rem);
    min-width: 0;
    max-width: 100%;
}

.admin-account-detail__mono[b-sp3487udzo] {
    font-family: var(--cf-font-mono, monospace);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}

/* Monospace but wrapping — for long values in table cells (e.g. webhook URLs) that must break
   instead of overflowing into the next column. */
.admin-account-detail__mono-wrap[b-sp3487udzo] {
    font-family: var(--cf-font-mono, monospace);
    overflow-wrap: anywhere;
    min-width: 0;
}

.admin-account-detail__health-summary[b-sp3487udzo] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--cf-space-4, 1rem);
}

.admin-account-detail__score-suffix[b-sp3487udzo] {
    font-size: 0.5em;
    color: var(--cf-text-muted, #6b7280);
}

.admin-account-detail__criteria-grid[b-sp3487udzo] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-account-detail__criterion-head[b-sp3487udzo] {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
    margin-bottom: var(--cf-space-1, 0.25rem);
}

.admin-account-detail__kpi-grid[b-sp3487udzo] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-account-detail__kpi-clickable[b-sp3487udzo] {
    cursor: pointer;
}

/*
  Run-history KPIs and breakdowns flow to fill the row instead of snapping to the page's fixed
  4-column kpi-grid. That grid orphaned the 5th KPI onto a row of its own and left the two
  breakdown cards stranded across half the width.
*/
.admin-account-detail__run-kpis[b-sp3487udzo] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
    gap: var(--cf-space-3, 0.75rem);
}

.admin-account-detail__breakdown-grid[b-sp3487udzo] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
    gap: var(--cf-space-3, 0.75rem);
}

/* Chip rows need room to breathe; they sat flush against the card edge. */
.admin-account-detail__breakdown-chips[b-sp3487udzo] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--cf-space-2, 0.5rem);
    padding-block: var(--cf-space-1, 0.25rem);
}

.admin-account-detail__run-coverage[b-sp3487udzo] {
    color: var(--cf-text-muted, #6b7280);
    font-size: var(--cf-text-body-sm, 0.75rem);
}

.admin-account-detail__module-grid[b-sp3487udzo] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-account-detail__module[b-sp3487udzo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    height: 100%;
}

.admin-account-detail__module-head[b-sp3487udzo] {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
}

.admin-account-detail__module-icon[b-sp3487udzo] {
    width: 53px;
    height: 53px;
    object-fit: contain;
}

.admin-account-detail__module-status[b-sp3487udzo] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--cf-space-2, 0.5rem);
}

.admin-account-detail__pager[b-sp3487udzo] {
    display: flex;
    justify-content: center;
    margin-top: var(--cf-space-3, 0.75rem);
}

@media (min-width: 560px) {
    .admin-account-detail__section-head[b-sp3487udzo] {
        flex-direction: row;
        justify-content: space-between;
        align-items: center;
    }

    .admin-account-detail__meta-grid[b-sp3487udzo] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .admin-account-detail__criteria-grid[b-sp3487udzo],
    .admin-account-detail__kpi-grid[b-sp3487udzo] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .admin-account-detail__module-grid[b-sp3487udzo] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 960px) {
    .admin-account-detail__kpi-grid[b-sp3487udzo] {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .admin-account-detail__module-grid[b-sp3487udzo] {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

/* ── Agent activity card (PLAT-3393) ─────────────────────────────────────────
   CFCard bodies add no gap between direct children, so the activity card's
   stacked sections need their own vertical rhythm. */
.admin-account-detail__activity-body[b-sp3487udzo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
}

/* Daily run volume. Deliberately CSS rather than a charting dependency: the
   series is one value per day over a short window, so a bar strip carries it
   without pulling a library into the admin bundle for a single view. */
.admin-account-detail__daily[b-sp3487udzo] {
    display: flex;
    align-items: flex-end;
    gap: var(--cf-space-1, 0.25rem);
    min-height: 6rem;
    width: 100%;
}

.admin-account-detail__daily-col[b-sp3487udzo] {
    flex: 1 1 0;
    min-width: 0;
    height: 6rem;
    display: flex;
    align-items: flex-end;
}

.admin-account-detail__daily-bar[b-sp3487udzo] {
    width: 100%;
    min-height: 2px;
    border-radius: var(--cf-radius-sm, 2px);
    background: var(--cf-color-primary, #3b82f6);
}

.admin-account-detail__daily-axis[b-sp3487udzo] {
    display: flex;
    justify-content: space-between;
    margin-top: var(--cf-space-2, 0.5rem);
    color: var(--cf-text-secondary, #94a3b8);
    font-size: 0.75rem;
}

/* The header controls sit in a flex row whose items are allowed to shrink, so the switch label wrapped to
   three lines beside the time filter. Keep the control intrinsically sized and its label on one line; the
   row still wraps as a whole on narrow viewports (PLAT-3393).

   ::deep because .cf-switch is rendered by CFSwitch, not declared in this page, and Blazor scoped CSS only
   decorates elements from its own file. */
.admin-account-detail__section-head[b-sp3487udzo]  .cf-switch {
    flex: 0 0 auto;
}

.admin-account-detail__section-head[b-sp3487udzo]  .cf-switch__label {
    white-space: nowrap;
}

/* Agents card header: the time filter and the refresh button sit together at the trailing end. */
.admin-account-detail__agents-controls[b-sp3487udzo] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
}

/* The activity header's title and filter sit at opposite ends. justify-content alone was not enough, and neither
   was flex:0 0 auto on the filter: TimeFilterV2's scoped CSS sets width:100% on its root, so a basis of `auto`
   still resolves to the full row and both children shrink - which is what wrapped the title onto two lines. The
   filter is wrapped in an element this page owns so its width can be set without a specificity fight. */
.admin-account-detail__activity-head > :first-child[b-sp3487udzo] {
    flex: 1 1 auto;
    min-width: 0;
}

.admin-account-detail__filter[b-sp3487udzo] {
    flex: 0 0 auto;
    width: auto;
    min-width: 12rem;
    margin-left: auto;
}

/* Relationships card: each group is a heading over a table. The heading gets air on both sides so it reads as a
   section title rather than as a caption glued to the table, and the first group steps down from the card header. */
.admin-account-detail__relationship-group[b-sp3487udzo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-account-detail__relationship-group:first-child[b-sp3487udzo] {
    padding-top: var(--cf-space-2, 0.5rem);
}
/* /Pages/External/Admin/AdminAccountsPage.razor.rz.scp.css */
.admin-accounts__controls[b-7cc1gpy2sv] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    align-items: stretch;
}

.admin-accounts__search[b-7cc1gpy2sv] {
    flex: 1 1 auto;
    min-width: 0;
}

.admin-accounts__filters[b-7cc1gpy2sv] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--cf-space-2, 0.5rem);
    align-items: center;
}

.admin-accounts__id[b-7cc1gpy2sv] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--cf-space-1, 0.25rem);
    min-width: 0;
}

.admin-accounts__mono[b-7cc1gpy2sv] {
    font-family: var(--cf-font-mono, monospace);
}

@media (min-width: 560px) {
    .admin-accounts__controls[b-7cc1gpy2sv] {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
    }

    .admin-accounts__search[b-7cc1gpy2sv] {
        max-width: 420px;
    }
}
/* /Pages/External/Admin/AdminAgentCenterDetailPage.razor.rz.scp.css */
.admin-agent-center__hero[b-kxfx63bgct] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-3, 0.75rem);
    align-items: flex-start;
    justify-content: space-between;
}

.admin-agent-center__hero-info[b-kxfx63bgct] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-agent-center__hero-text[b-kxfx63bgct] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
    align-items: flex-start;
}

.admin-agent-center__chip-row[b-kxfx63bgct] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
}

.admin-agent-center__hero-actions[b-kxfx63bgct] {
    display: flex;
    flex-direction: row;
    gap: var(--cf-space-1, 0.25rem);
}

.admin-agent-center__mgmt[b-kxfx63bgct] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
    margin-top: var(--cf-space-3, 0.75rem);
    align-items: flex-start;
}

.admin-agent-center__value-inline[b-kxfx63bgct] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--cf-space-1, 0.25rem);
    min-width: 0;
    max-width: 100%;
}

.admin-agent-center__mono[b-kxfx63bgct] {
    font-family: var(--cf-font-mono, monospace);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}

.admin-agent-center__muted[b-kxfx63bgct] {
    display: block;
    color: var(--cf-text-muted, #6b7280);
    font-size: 0.8em;
}

.admin-agent-center__kpis[b-kxfx63bgct] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-agent-center__kpi-clickable[b-kxfx63bgct] {
    cursor: pointer;
    border-radius: var(--cf-radius-md, 0.5rem);
    transition: background 0.12s ease;
}

.admin-agent-center__kpi-clickable:hover[b-kxfx63bgct] {
    background: var(--cf-bg-elevated-hover, rgba(127, 127, 127, 0.08));
}

.admin-agent-center__section-head[b-kxfx63bgct] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    align-items: flex-start;
    width: 100%;
}

@media (min-width: 560px) {
    .admin-agent-center__kpis[b-kxfx63bgct] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .admin-agent-center__section-head[b-kxfx63bgct] {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
    }
}

@media (min-width: 720px) {
    .admin-agent-center__hero[b-kxfx63bgct] {
        flex-direction: row;
        align-items: center;
    }
}

@media (min-width: 960px) {
    .admin-agent-center__kpis[b-kxfx63bgct] {
        grid-template-columns: repeat(5, minmax(0, 1fr));
    }
}
/* /Pages/External/Admin/AdminAgentCenterPage.razor.rz.scp.css */
/* Header: title on the left, the hosting toggle, time filter and refresh on the right; stacked on phones. The
   responsive switch is the one thing CFStack cannot express, so the head keeps its own rule. */
.admin-agent-center__head[b-btq8vji6eo] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--cf-space-3, 0.75rem);
    width: 100%;
    min-width: 0;
}

/* TimeFilterV2 sets width:100% on its own root; the wrapper is what sizes it inside the controls row. */
.admin-agent-center__filter[b-btq8vji6eo] {
    flex: 0 0 auto;
    width: auto;
    min-width: 12rem;
}

@media (min-width: 720px) {
    .admin-agent-center__head[b-btq8vji6eo] {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        gap: var(--cf-space-4, 1rem);
        flex-wrap: wrap;
    }
}

.admin-agent-center__kpis[b-btq8vji6eo] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
    gap: var(--cf-space-3, 0.75rem);
}

.admin-agent-center__coverage[b-btq8vji6eo] {
    color: var(--cf-text-muted, #6b7280);
    font-size: var(--cf-text-body-sm, 0.75rem);
}

.admin-agent-center__breakdown-grid[b-btq8vji6eo] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
    gap: var(--cf-space-3, 0.75rem);
}

.admin-agent-center__breakdown-chips[b-btq8vji6eo] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--cf-space-2, 0.5rem);
    padding-block: var(--cf-space-1, 0.25rem);
}

/* Daily run volume as a CSS bar strip: one value per day over a short window, no charting dependency. */
.admin-agent-center__daily[b-btq8vji6eo] {
    display: flex;
    align-items: flex-end;
    gap: var(--cf-space-1, 0.25rem);
    min-height: 6rem;
    width: 100%;
}

.admin-agent-center__daily-col[b-btq8vji6eo] {
    flex: 1 1 0;
    min-width: 0;
    height: 6rem;
    display: flex;
    align-items: flex-end;
}

.admin-agent-center__daily-bar[b-btq8vji6eo] {
    width: 100%;
    min-height: var(--cf-space-0-5, 2px);
    border-radius: var(--cf-radius-sm, 2px);
    background: var(--cf-color-primary, #3b82f6);
}

.admin-agent-center__daily-axis[b-btq8vji6eo] {
    display: flex;
    justify-content: space-between;
    margin-top: var(--cf-space-2, 0.5rem);
    color: var(--cf-text-secondary, #94a3b8);
    font-size: var(--cf-text-body-sm, 0.75rem);
}

.admin-agent-center__pager[b-btq8vji6eo] {
    display: flex;
    justify-content: center;
    margin-top: var(--cf-space-3, 0.75rem);
}

/* One population's block on the Deployments tab. The class gives the block its own display, so the [hidden] guard
   below keeps the always-mounted Our Cloud block out of sight when Your Cloud alone is selected. */
.admin-agent-center__section[b-btq8vji6eo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-3, 0.75rem);
    min-width: 0;
}

.admin-agent-center__section[hidden][b-btq8vji6eo] {
    display: none;
}

/* Names the population above its block; rendered only under All, where both blocks share the tab and would
   otherwise read as one list. */
.admin-agent-center__section-head[b-btq8vji6eo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
    align-items: flex-start;
}
/* /Pages/External/Admin/AdminDashboardBreakdownDialog.razor.rz.scp.css */
/* Provider rows. The header row and every panel header share one grid so the three columns line up; the
   header row reserves the chevron's width at its end because the panel headers carry one and it does not. */
.admin-dashboard-breakdown__providers[b-wgtugd4wg4] {
    display: flex;
    flex-direction: column;
}

.admin-dashboard-breakdown__provider-row[b-wgtugd4wg4] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 6rem;
    gap: var(--cf-space-3, 0.75rem);
    align-items: baseline;
    flex: 1 1 auto;
    min-width: 0;
    text-align: left;
}

.admin-dashboard-breakdown__provider-row--metric[b-wgtugd4wg4] {
    grid-template-columns: minmax(0, 1fr) 6rem 9rem;
}

.admin-dashboard-breakdown__provider-row--head[b-wgtugd4wg4] {
    /* Same inset as .cf-expansion-panel__header (space-5), plus its 16px chevron and the gap before it on the right. */
    padding: var(--cf-space-2, 0.5rem) calc(var(--cf-space-5, 1.25rem) + 1rem + var(--cf-space-3, 0.75rem)) var(--cf-space-2, 0.5rem) var(--cf-space-5, 1.25rem);
    color: var(--cf-text-secondary, #94a3b8);
    font-size: var(--cf-text-body-sm, 0.75rem);
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

.admin-dashboard-breakdown__provider-name[b-wgtugd4wg4] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.admin-dashboard-breakdown__num[b-wgtugd4wg4] {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.admin-dashboard-breakdown__provider-total[b-wgtugd4wg4] {
    font-weight: 600;
}
/* /Pages/External/Admin/AdminEditAccountPanel.razor.rz.scp.css */
.admin-edit-account-panel__section[b-nsb4ah3t2z] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
    padding-top: var(--cf-space-2, 0.5rem);
}

.admin-edit-account-panel__grid[b-nsb4ah3t2z] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-4, 1rem);
}

.admin-edit-account-panel__perm-grid[b-nsb4ah3t2z] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-6, 1.5rem);
}

.admin-edit-account-panel__perm-group[b-nsb4ah3t2z] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    align-items: flex-start;
}

.admin-edit-account-panel__footer[b-nsb4ah3t2z] {
    display: flex;
    flex-direction: column-reverse;
    gap: var(--cf-space-2, 0.5rem);
    width: 100%;
}

@media (min-width: 560px) {
    .admin-edit-account-panel__footer[b-nsb4ah3t2z] {
        flex-direction: row;
        justify-content: flex-end;
    }
}

@media (min-width: 720px) {
    .admin-edit-account-panel__grid[b-nsb4ah3t2z] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .admin-edit-account-panel__perm-grid[b-nsb4ah3t2z] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}
/* /Pages/External/Admin/AdminFeatureFlagAudiencePanel.razor.rz.scp.css */
/* Spacing uses the --cf-space-N scale from tokens/_spacing.css. There is no --cf-spacing-* scale;
   naming one collapses the declaration to nothing, which is what flattened this panel. */

.admin-ff-panel[b-tgz531apes] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4);
}

/* The grid is the densest thing in the panel, so it gets more air above it than the
   stacked alerts and controls need between themselves. */
.admin-ff-panel__table[b-tgz531apes] {
    margin-top: var(--cf-space-2);
}

.admin-ff-panel__meta[b-tgz531apes] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2);
    flex-wrap: wrap;
}

.admin-ff-panel__filters[b-tgz531apes] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2);
    flex-wrap: wrap;
}

.admin-ff-panel__search[b-tgz531apes] {
    max-width: 24rem;
}

.admin-ff-panel__account[b-tgz531apes] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2);
    min-width: 0;
}

/* Wrap between words, never inside one. The grid cell is narrow enough that the inherited
   break-anywhere rule was splitting names like "A Datum Corporation" character by character. */
.admin-ff-panel__account-name[b-tgz531apes] {
    min-width: 0;
    overflow-wrap: normal;
    word-break: normal;
}

/* The badge keeps its width so the name gives up space first, not the other way round.
   ::deep because .cf-chip is rendered by CFChip, not declared here, and Blazor scoped CSS
   only stamps its scope onto elements in this component's own markup. */
.admin-ff-panel__account[b-tgz531apes]  .cf-chip {
    flex: 0 0 auto;
}

.admin-ff-panel__mono[b-tgz531apes] {
    font-family: var(--cf-font-mono);
    font-size: 0.8125rem;
}
/* /Pages/External/Admin/AdminFeatureFlagsPage.razor.rz.scp.css */
/* Spacing uses the --cf-space-N scale from tokens/_spacing.css. */

.admin-feature-flags__header[b-ctge7x2ho5] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--cf-space-4);
    flex-wrap: wrap;
}

.admin-feature-flags__title[b-ctge7x2ho5] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2);
}

.admin-feature-flags__search[b-ctge7x2ho5] {
    max-width: 28rem;
}

.admin-feature-flags__mono[b-ctge7x2ho5] {
    font-family: var(--cf-font-mono);
    font-size: 0.8125rem;
}
/* /Pages/External/Admin/AdminFleetFeedbackReportV2.razor.rz.scp.css */
/* PLAT-3823: the exclusion filter. Stacked on a phone; the switch and the picker share a row once there is room. */
.cf-v2-fleet-feedback__filter[b-o8juh4krok] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-3, 0.75rem);
}

@media (min-width: 720px) {
    .cf-v2-fleet-feedback__filter[b-o8juh4krok] {
        flex-direction: row;
        align-items: flex-start;
        gap: var(--cf-space-6, 1.5rem);
    }
}

/* The picker and its chips are a CFStack, reached through ::deep; it takes the room the switch leaves. */
.cf-v2-fleet-feedback__filter[b-o8juh4krok]  .cf-v2-fleet-feedback__exclude {
    flex: 1 1 auto;
    min-width: 0;
}

.cf-v2-fleet-feedback__gaps[b-o8juh4krok] {
    width: 100%;
    min-width: 0;
}
/* /Pages/External/Admin/AdminGamebookBreakdownDialog.razor.rz.scp.css */
.admin-breakdown-dialog[b-jv0yt5w22o] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
}

.admin-breakdown-dialog__total[b-jv0yt5w22o] {
    display: flex;
    align-items: baseline;
    gap: var(--cf-space-2, 0.5rem);
}

.admin-breakdown-dialog__bar[b-jv0yt5w22o] {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
}
/* /Pages/External/Admin/AdminIncidentBreakdownDialog.razor.rz.scp.css */
.admin-breakdown-dialog[b-92xjicaqyo] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
}

.admin-breakdown-dialog__total[b-92xjicaqyo] {
    display: flex;
    align-items: baseline;
    gap: var(--cf-space-2, 0.5rem);
}

.admin-breakdown-dialog__bar[b-92xjicaqyo] {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
}
/* /Pages/External/Admin/AdminSaasPoolAgentDetailPage.razor.rz.scp.css */
.admin-pool-agent__section-head[b-jzyyahxsph] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    align-items: flex-start;
    width: 100%;
}

.admin-pool-agent__meta-grid[b-jzyyahxsph] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-4, 1rem);
}

.admin-pool-agent__meta[b-jzyyahxsph] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
    min-width: 0;
}

.admin-pool-agent__value-inline[b-jzyyahxsph] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--cf-space-1, 0.25rem);
    min-width: 0;
    max-width: 100%;
}

.admin-pool-agent__mono[b-jzyyahxsph] {
    font-family: var(--cf-font-mono, monospace);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}

.admin-pool-agent__kpis[b-jzyyahxsph] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
    margin-bottom: var(--cf-space-4, 1rem);
}

@media (min-width: 560px) {
    .admin-pool-agent__section-head[b-jzyyahxsph] {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
    }

    .admin-pool-agent__meta-grid[b-jzyyahxsph] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 960px) {
    .admin-pool-agent__meta-grid[b-jzyyahxsph] {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}
/* /Pages/External/Admin/AdminSaasRegionsV2.razor.rz.scp.css */
.admin-agent-centers__head[b-rd5c7oh6n1] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-2, 0.5rem);
    align-items: flex-start;
}

.admin-agent-centers__kpis[b-rd5c7oh6n1] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

.admin-agent-centers__row-actions[b-rd5c7oh6n1] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--cf-space-1, 0.25rem);
    justify-content: flex-end;
}

@media (min-width: 560px) {
    .admin-agent-centers__head[b-rd5c7oh6n1] {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
    }

    .admin-agent-centers__kpis[b-rd5c7oh6n1] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 960px) {
    .admin-agent-centers__kpis[b-rd5c7oh6n1] {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}
/* /Pages/External/Admin/AdminSentinelIngestDetailsDialog.razor.rz.scp.css */
.admin-sentinel-ingest__grid[b-v0lq698cjx] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-4, 1rem);
}

@media (min-width: 560px) {
    .admin-sentinel-ingest__grid[b-v0lq698cjx] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/* Value + copy action sit side by side, action immediately next to the value. */
.admin-sentinel-ingest__inline[b-v0lq698cjx] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
    min-width: 0;
}

.admin-sentinel-ingest__inline[b-v0lq698cjx]  :first-child {
    min-width: 0;
    overflow-wrap: anywhere;
}
/* /Pages/External/Admin/AdminUtilityAgentRunsV2.razor.rz.scp.css */
/* Quiet coverage caption: full coverage is the normal case and should not read as an alert. */
.admin-utility-runs__coverage[b-pjvf5ht4z6] {
    color: var(--cf-text-muted, #6b7280);
    font-size: var(--cf-text-body-sm, 0.75rem);
    padding-block-end: var(--cf-space-2, 0.5rem);
}
/* /Pages/External/Admin/DeployAgentCenterPanel.razor.rz.scp.css */
.admin-deploy-panel[b-bx23iu8f21] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
    padding-top: var(--cf-space-2, 0.5rem);
}

.admin-deploy-panel__footer[b-bx23iu8f21] {
    display: flex;
    flex-direction: column-reverse;
    gap: var(--cf-space-2, 0.5rem);
    width: 100%;
}

@media (min-width: 560px) {
    .admin-deploy-panel__footer[b-bx23iu8f21] {
        flex-direction: row;
        justify-content: flex-end;
    }
}
/* /Pages/External/Admin/DeploySaasPoolAgentPanel.razor.rz.scp.css */
.admin-deploy-panel[b-454dyun1em] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-4, 1rem);
    padding-top: var(--cf-space-2, 0.5rem);
}

.admin-deploy-panel__grid[b-454dyun1em] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-4, 1rem);
}

.admin-deploy-panel__footer[b-454dyun1em] {
    display: flex;
    flex-direction: column-reverse;
    gap: var(--cf-space-2, 0.5rem);
    width: 100%;
}

@media (min-width: 560px) {
    .admin-deploy-panel__grid[b-454dyun1em] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .admin-deploy-panel__footer[b-454dyun1em] {
        flex-direction: row;
        justify-content: flex-end;
    }
}
/* /Pages/External/ErrorsPage.razor.rz.scp.css */
/* The region hint under the error card, on the same centred column the card uses
   (Error.razor.css: 41rem, with the page's side padding). */
.cf-error-region-hint[b-4menqnmgju] {
    display: flex;
    justify-content: center;
    padding: 0 var(--cf-space-4, 1rem);
}

.cf-error-region-hint__frame[b-4menqnmgju] {
    width: 100%;
    max-width: 41rem;
}
/* /Pages/External/Gamebooks.razor.rz.scp.css */
/*
    Gamebooks workbench (V2) — page-specific tweaks. Reuses the
    cf-v2-incident-detail__* shared shell (page padding, card-shell
    heights, side-panel scroll surface) from iris-components-styles.css.
    Page-specific overrides:

      1. Two-column split tuned for graph-dominant layout: response column
         capped narrower so the GoJS canvas gets the bulk of the width.
      2. Graph body wired into the CFCard flex chain so GoJS sees a
         definite height — without that the canvas collapses to 0×0
         and renders the single root node as a "dot."
      3. Close-incident trailing action: full-width on mobile, auto on
         tablet+, per page-design.md.
*/

/* ---------- Two-column split tuned for the graph workbench ----------
   Inherited shared grid switches to two columns at >=1180px; for the
   gamebook workbench the graph needs room as soon as we have it, so
   split at >=960px and cap the response column tighter (20-26rem) than
   the incident-detail grid (22-30rem). */
@media (min-width: 960px) {
    .cf-v2-gamebooks-page .cf-v2-incident-detail__content-grid[b-bffwjx79z8] {
        grid-template-columns: minmax(0, 1fr) minmax(20rem, 26rem);
    }
}

@media (min-width: 1440px) {
    .cf-v2-gamebooks-page .cf-v2-incident-detail__content-grid[b-bffwjx79z8] {
        grid-template-columns: minmax(0, 1fr) minmax(22rem, 28rem);
    }
}

/* ---------- Graph body: explicit flex + height chain to GoJS ---------- */
.cf-v2-gamebooks__graph-body[b-bffwjx79z8] {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    min-width: 0;
    min-height: 0;
    width: 100%;
    /* Mobile fallback: card-shell isn't height-constrained <720px, so
       give the graph its own minimum so GoJS has something to draw on. */
    min-height: 28rem;
}

@media (min-width: 720px) {
    .cf-v2-gamebooks__graph-body[b-bffwjx79z8] {
        height: 100%;
        min-height: 0;
    }
}

/* The Graph component's root div uses height:100%, which only resolves
   if every ancestor up the tree has a definite height. Forwarding the
   flex chain through the Graph wrapper and into #myDiagramDiv keeps the
   GoJS canvas full-bleed inside the card. ::deep pierces into the Graph
   component's internal DOM (different scope). */
.cf-v2-gamebooks__graph-body[b-bffwjx79z8]  > * {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 0;
    width: 100%;
    height: 100%;
}

.cf-v2-gamebooks__graph-body[b-bffwjx79z8]  #myDiagramDiv {
    height: 100%;
    width: 100%;
    min-height: 0;
}

.cf-v2-gamebooks__panel[b-bffwjx79z8] {
    gap: var(--cf-space-3, 0.75rem);
}

/* Class params forwarded into child V2 components (e.g. CFButton's
   internal <button>) do not receive Blazor's scope attribute, so anchor
   to the page wrapper and pierce with ::deep. */
.cf-v2-gamebooks-page[b-bffwjx79z8]  .cf-v2-gamebooks__close-incident {
    width: 100%;
    justify-self: stretch;
}

@media (min-width: 560px) {
    .cf-v2-gamebooks-page[b-bffwjx79z8]  .cf-v2-gamebooks__close-incident {
        width: auto;
        justify-self: auto;
    }
}

/* ---------- legacy V1 threat-hunting timeline styles (unused) ---------- */

/** {
    color: white;
}
*/
.threathunting-summary-container[b-bffwjx79z8] {
    padding: 5px;
    overflow-y: auto;
    border-bottom: 1px solid #6F6F6F;
}

.threathunting-timeline-container[b-bffwjx79z8] {
    padding: 5px;
    overflow-y: auto;
}
/*
.timeline-card {
    background: black;
    cursor: pointer;
    padding: 4px;
    margin: 4px;
    transition: 0.2s;
}

    .timeline-card:hover {
        background-color: #0091D1;
        color: white;
    }

    .timeline-card .icon {
        margin: auto;
        width: 40px;
        display: block;
        position: relative;
        top: 14px;
    }

    .timeline-card p {
        font-size: 14px;
        color: gray;
    }

    .timeline-card:hover p {
        color: white;
    }*/
/*
.threathunting-container {
    background-color: #00040F;
    border: 1px solid #707070;
    color: white;
}*/

.timeline-container[b-bffwjx79z8] {
    overflow-y: auto;
}
/*
.threathunting-details-container {
    padding: 5px;
    height: 1075px;
    overflow-y: auto;
}*/
/*
.summary-item {
    padding: 2px;
    font-size: 18px;
    display: flex;
    margin-bottom: 6px;
}

    .summary-item i {
        margin: 2px;
    }

    .summary-item span {
        margin: 2px;
        margin-left: 15px;
    }
*/
/* Timeline Styles */
/*.timeline-item {
    margin: 2px;
    margin-bottom: 10px;
    padding: 7px;
    color: white;
    cursor: pointer;
    border: 1px solid #EEEEEE;
    border-radius: 5px;
    transition: 0.2s
}
.timeline-item-selected {
    background-color: #0b1b48;
}
    .timeline-item:hover {
        border: 1px solid #0091d1;
    }

    .timeline-item table {
        display: none;
        transition: 0.2s;
    }

    .timeline-item .show-table {
        display: table;
    }

    .timeline-item .timeline-item-header {
        display: flex;
    }

        .timeline-item .timeline-item-header img {
            width: 35px;
            margin: 3px;
        }

        .timeline-item .timeline-item-header h5 {
            position: relative;
            top: 8px;
            left: 10px;
        }*/
/*table {
    font-size:20px;
    background-color: black;
}*/

/*.blue {
    color: #0091d1;
}

.link {
    color: #8a8ac3;
    text-decoration: underline;
}

.status-bar {
    background-color: #0091D1;
    color: white;
    position: fixed;
    top: calc(100% - 40px);
    left: 0;
    width: 100%;
    height: 40px;
    padding: 6px;
    padding-left: 20px;
    font-size: 20px;
}*/
/* /Pages/External/GamebooksHistoryV2.razor.rz.scp.css */
.cf-v2-gamebooks-page__hero[b-xxw6ohy48g] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-3, 0.75rem);
    align-items: stretch;
}

.cf-v2-gamebooks-page__hero-copy[b-xxw6ohy48g] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
    min-width: 0;
}

.cf-v2-gamebooks-page__hero-controls[b-xxw6ohy48g] {
    display: flex;
    align-items: center;
}

@media (min-width: 720px) {
    .cf-v2-gamebooks-page__hero[b-xxw6ohy48g] {
        flex-direction: row;
        align-items: flex-start;
        justify-content: space-between;
        gap: var(--cf-space-4, 1rem);
    }

    .cf-v2-gamebooks-page__hero-controls[b-xxw6ohy48g] {
        flex: 0 0 auto;
    }
}

[b-xxw6ohy48g] .cf-v2-gamebooks-page__title {
    margin: 0;
}

[b-xxw6ohy48g] .cf-v2-gamebooks-page__subtitle {
    margin: 0;
}
/* /Pages/External/SettingsPanel.razor.rz.scp.css */
body[b-60jjowke3z] {
}
/* /Pages/External/SettingsPanelV2.razor.rz.scp.css */
/* Page padding lives in iris-components-styles.css so details pages share it.
   Keep scoped overrides for tab chrome here only. */

@media (max-width: 640px) {
    .cf-v2-settings-page[b-sec2d0cvrq] (.cf-tabs__trigger) {
        padding: var(--cf-space-2) var(--cf-space-3);
        font-size: var(--cf-text-body-sm);
    }

    .cf-v2-settings-page[b-sec2d0cvrq] (.cf-tabs__panels) {
        padding: var(--cf-space-3) 0;
    }
}
/* /Pages/External/SetupWizard.razor.rz.scp.css */
/* ==========================================================================
   SetupWizard — V2 layout
   ==========================================================================
   The wizard renders inside BlankLayoutV2's centered main slot. It owns its
   own width budget (vs. AppShell pages that stretch to the page padding).
   The card grid below the stepper is mobile-first: one column under 720px,
   two columns above.
   ========================================================================== */

.cf-v2-wizard[b-vjptj4ljsu] {
    width: 100%;
    max-width: 880px;
    margin: 0 auto;
}

.cf-v2-wizard__panel[b-vjptj4ljsu] {
    display: block;
}

.cf-v2-wizard__cards[b-vjptj4ljsu] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

@media (min-width: 720px) {
    .cf-v2-wizard__cards[b-vjptj4ljsu] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.cf-v2-wizard__card-item[b-vjptj4ljsu] {
    min-width: 0;
    display: flex;
}

.cf-v2-wizard__card-item > *[b-vjptj4ljsu] {
    flex: 1 1 auto;
    min-width: 0;
}

.cf-v2-wizard__module-img[b-vjptj4ljsu] {
    width: 24px;
    height: 24px;
    display: block;
    flex-shrink: 0;
}

.cf-v2-wizard__module-icon[b-vjptj4ljsu] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    flex-shrink: 0;
}

.cf-v2-wizard__module-icon--success[b-vjptj4ljsu] {
    color: var(--cf-status-success-fg, #22c55e);
}

.cf-v2-wizard__module-icon--primary[b-vjptj4ljsu] {
    color: var(--cf-color-primary, #2557f9);
}

.cf-v2-wizard__nav[b-vjptj4ljsu] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--cf-space-3, 0.75rem);
    flex-wrap: wrap;
}

@media (max-width: 559px) {
    .cf-v2-wizard__nav[b-vjptj4ljsu] {
        flex-direction: column-reverse;
        align-items: stretch;
    }
}
/* /Pages/External/Sops/SopPageV2.razor.rz.scp.css */
.cf-v2-sop-page__hero[b-z1ijxzcyus] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
}

[b-z1ijxzcyus] .cf-v2-sop-page__title {
    margin: 0;
}

[b-z1ijxzcyus] .cf-v2-sop-page__subtitle {
    margin: 0;
}
/* /Shared/BlankLayoutV2.razor.rz.scp.css */
/* ==========================================================================
   BlankLayoutV2 — minimal shell for external customer-flow pages
   ==========================================================================
   The shell is intentionally thin: a slim top bar with the logo + login menu,
   then a centered content slot. Pages set their own card/section markup; the
   layout only owns the chrome.
   ========================================================================== */

.cf-v2-blank[b-p49scyjunu] {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background: var(--cf-bg-default, #0b0d12);
    color: var(--cf-text-default);
}

.cf-v2-blank__topbar[b-p49scyjunu] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--cf-space-4, 1rem);
    padding: var(--cf-space-3, 0.75rem) var(--cf-space-6, 1.5rem);
    border-bottom: 1px solid var(--cf-border-subtle, rgba(255, 255, 255, 0.08));
    background: var(--cf-bg-elevated, transparent);
}

.cf-v2-blank__logo[b-p49scyjunu] {
    display: flex;
    align-items: center;
}

.cf-v2-blank__logo img[b-p49scyjunu] {
    height: 32px;
    width: auto;
    display: block;
}

.cf-v2-blank__topbar-end[b-p49scyjunu] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
}

.cf-v2-blank__main[b-p49scyjunu] {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    /* "safe center" lets the browser fall back to start alignment when content
       overflows the viewport (e.g., the SetupWizard's stepper + tall cards).
       Without "safe", justify-content: center clips the top of overflowing
       content past the scroll boundary. */
    justify-content: safe center;
    padding: var(--cf-space-6, 1.5rem);
    box-sizing: border-box;
}

@media (min-width: 720px) {
    .cf-v2-blank__main[b-p49scyjunu] {
        padding: var(--cf-space-8, 2rem);
    }
}
/* /Shared/MainLayout.razor.rz.scp.css */
/* ── V2 app shell tree ─────────────────────────────────────────────── */

.cf-v2-app[b-e87k2s98tq] {
    position: fixed;
    inset: 0;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
}

.cf-v2-app__logo img[b-e87k2s98tq] {
    height: var(--cf-space-8, 2rem);
    width: calc(var(--cf-space-16, 4rem) * 3);
    display: block;
    /* Center the mark inside the brand slot's symmetric padding. The image stays
       bounded at 192px. Below 767px CFTopBar drops the slot to flex: 0 0 auto,
       so the parent becomes content-sized and a percentage would have nothing to resolve
       against — hence the absolute ceiling too. contain then scales an oversized mark down
       rather than letting it shove the workspace picker and the mobile menu around. */
    max-width: min(100%, 192px);
    object-fit: contain;
}

.cf-v2-app__workspace-slot[b-e87k2s98tq] {
    display: flex;
    align-items: center;
    min-width: 0;
    padding: 0 var(--cf-space-md, 16px);
    max-width: 760px;
    width: 100%;
}

/* Only the desktop instance shows by default; the mobile (End-slot) copy is
   hidden until the viewport crosses CFTopBar's mobile breakpoint (767px).
   See the swap in the @media block below. */
.cf-v2-app__workspace-slot--mobile[b-e87k2s98tq] {
    display: none;
    padding: 0;
    width: auto;
    max-width: none;
}

.cf-v2-app__actions[b-e87k2s98tq] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-xs, 8px);
    padding-right: var(--cf-space-md, 16px);
}

.cf-v2-app__actions-label[b-e87k2s98tq] {
    margin: 0 var(--cf-space-xs, 8px);
}

.cf-v2-app__actions-shortcut[b-e87k2s98tq] {
    opacity: 0.6;
    font-size: 0.75rem;
    letter-spacing: 0.02em;
}

/* Release-notes trigger and unread badge. The icon button is the trigger; the badge is a small
   positioned span layered on top so we don't need a custom CFBadge variant. */
.cf-v2-app__release-notes-trigger[b-e87k2s98tq] {
    position: relative;
    display: inline-flex;
    align-items: center;
}

.cf-v2-app__release-notes-badge[b-e87k2s98tq] {
    position: absolute;
    top: -4px;
    right: -6px;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: var(--cf-radius-full, 9999px);
    background: var(--cf-color-accent-emphasis, #3b82f6);
    color: var(--cf-color-text-on-emphasis, #ffffff);
    font-size: 0.75rem;
    font-weight: 600;
    line-height: 20px;
    text-align: center;
    pointer-events: none;
    /* Two-layer shadow: inner dark ring separates the badge from whatever sits behind it,
       outer animated ring is the attention pulse. The keyframes animate only the outer ring. */
    box-shadow:
        0 0 0 2px var(--cf-color-bg-emphasis, rgba(0, 0, 0, 0.65)),
        0 0 0 0 rgba(59, 130, 246, 0.55);
    animation: cf-v2-release-notes-pulse-b-e87k2s98tq 2.4s ease-out infinite;
}

@keyframes cf-v2-release-notes-pulse-b-e87k2s98tq {
    0% {
        box-shadow:
            0 0 0 2px var(--cf-color-bg-emphasis, rgba(0, 0, 0, 0.65)),
            0 0 0 0 rgba(59, 130, 246, 0.55);
    }
    70% {
        box-shadow:
            0 0 0 2px var(--cf-color-bg-emphasis, rgba(0, 0, 0, 0.65)),
            0 0 0 10px rgba(59, 130, 246, 0);
    }
    100% {
        box-shadow:
            0 0 0 2px var(--cf-color-bg-emphasis, rgba(0, 0, 0, 0.65)),
            0 0 0 0 rgba(59, 130, 246, 0);
    }
}

/* Subtle gentle glow on the whole trigger control, in sync with the badge halo, so the
   user's eye is drawn to the entire button area, not just the badge. The animation is
   applied to the trigger wrapper (a <div> declared directly in MainLayout.razor) so the
   Blazor-scoped CSS attribute actually matches — putting this rule on .cf-v2-app__release-notes-button
   would not work because that class is forwarded into CFIconButton, which renders the
   actual <button> in its own component scope. */
.cf-v2-app__release-notes-trigger[b-e87k2s98tq] {
    animation: cf-v2-release-notes-button-glow-b-e87k2s98tq 2.4s ease-in-out infinite;
    border-radius: var(--cf-radius-full, 9999px);
}

@keyframes cf-v2-release-notes-button-glow-b-e87k2s98tq {
    0%, 100% {
        filter: none;
    }
    50% {
        filter: drop-shadow(0 0 6px rgba(59, 130, 246, 0.6));
    }
}

/* Respect users who have opted out of motion (V2 reactive-action-state rule). */
@media (prefers-reduced-motion: reduce) {
    .cf-v2-app__release-notes-badge[b-e87k2s98tq],
    .cf-v2-app__release-notes-trigger[b-e87k2s98tq] {
        animation: none;
    }
}

.cf-v2-app__content[b-e87k2s98tq] {
    padding: var(--cf-space-md, 16px);
    min-height: 100%;
    box-sizing: border-box;
    min-width: 0;
}

@media (max-width: 960px) {
    .cf-v2-app__actions-label[b-e87k2s98tq],
    .cf-v2-app__actions-shortcut[b-e87k2s98tq] {
        display: none;
    }
}

/* Topbar swaps to mobile layout at 767px: Start slot is hidden (see
   CFTopBar.razor.css), so the desktop workspace picker goes with it and the
   compact End-slot copy takes over. */
@media (max-width: 767px) {
    .cf-v2-app__workspace-slot--desktop[b-e87k2s98tq] {
        display: none;
    }

    .cf-v2-app__workspace-slot--mobile[b-e87k2s98tq] {
        display: flex;
    }
}

@media (max-width: 640px) {
    .cf-v2-app__workspace-slot[b-e87k2s98tq] {
        padding: 0 var(--cf-space-sm, 12px);
    }

    .cf-v2-app__content[b-e87k2s98tq] {
        padding: var(--cf-space-sm, 12px);
    }
}

/* ==========================================================================
   Tenant-bootstrap failure recovery
   ==========================================================================
   Replaces the V1 container/card recovery panel. Fixed and full-viewport
   because it renders instead of the app shell, not inside it, so there is no
   layout underneath to inherit spacing from.
   ========================================================================== */

.cf-load-failed[b-e87k2s98tq] {
    position: fixed;
    inset: 0;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--cf-space-4, 1rem);
}

.cf-load-failed__panel[b-e87k2s98tq] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--cf-space-6, 1.5rem);
    width: 100%;
    max-width: 26rem;
}

.cf-load-failed__logo[b-e87k2s98tq] {
    width: 250px;
    max-width: 100%;
}

/* CFCard's ChildContent adds no gap between stacked children. */
.cf-load-failed__body[b-e87k2s98tq] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-3, 0.75rem);
    text-align: center;
}

.cf-v2-app__brand-icon[b-e87k2s98tq] { display: none; }
@media (max-width: 767px) {
    .cf-v2-app__banner[b-e87k2s98tq] { display: none; }
    .cf-v2-app__brand-icon[b-e87k2s98tq] { display: block; }
    .cf-v2-app[b-e87k2s98tq]  .cf-topbar__brand {
        flex-basis: 64px;
        padding: 0 var(--cf-space-3);
    }
}
/* /Shared/QuickAccessLayout.razor.rz.scp.css */
/* ==========================================================================
   QuickAccessLayout
   ==========================================================================
   Frames the quick-access deep links opened from notification email. Replaces
   V1 layout / V1 main content / V1 container plus the V1 utility classes,
   which go away with the V1 stylesheet.
   ========================================================================== */

.cf-quick-access[b-4czjan5zjn] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--cf-space-4, 1rem);
    /* The V1 large max-width was 1280px. */
    max-width: 1280px;
    margin: 0 auto;
    padding: var(--cf-space-4, 1rem);
}

.cf-quick-access__brand[b-4czjan5zjn] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--cf-space-2, 0.5rem);
}

.cf-quick-access__logo[b-4czjan5zjn] {
    width: 45px;
    height: auto;
}

.cf-quick-access__body[b-4czjan5zjn] {
    display: flex;
    flex-direction: column;
    width: 100%;
}
/* /Shared/UserMenuV2.razor.rz.scp.css */
.cf-user-menu__trigger[b-s5e01uzmkb] {
    display: inline-flex;
    align-items: center;
    cursor: pointer;
    border-radius: var(--cf-radius-full, 100px);
}

.cf-user-menu__trigger:focus-visible[b-s5e01uzmkb] {
    outline: 2px solid var(--cf-color-ring, #2557F9);
    outline-offset: 2px;
}

.cf-user-menu__header[b-s5e01uzmkb] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-3, 0.75rem);
    padding: var(--cf-space-3, 0.75rem) var(--cf-space-4, 1rem);
    min-width: 240px;
}

.cf-user-menu__identity[b-s5e01uzmkb] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.cf-user-menu__name[b-s5e01uzmkb] {
    font-size: var(--cf-text-body, 0.875rem);
    font-weight: var(--cf-font-semibold, 600);
    color: var(--cf-text-primary, #FFFFFF);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cf-user-menu__email[b-s5e01uzmkb] {
    font-size: var(--cf-text-body-sm, 0.75rem);
    color: var(--cf-text-secondary, #A2ABB2);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /Shared/WelcomePage.razor.rz.scp.css */
/* ==========================================================================
   WelcomePage — footer assurance line under the sign-in panel
   ========================================================================== */

.cf-welcome__assurance[b-yjbxy48ar6] {
    display: inline-flex;
    align-items: center;
    gap: var(--cf-space-1-5, 0.375rem);
    font-size: var(--cf-text-body-sm, 0.75rem);
    color: var(--cf-text-secondary, #a2abb2);
}
