@import '_content/ContraForce.Blazor.Common/ContraForce.Blazor.Common.joelcxg8yw.bundle.scp.css';
@import '_content/ContraForce.Blazor.UI.V2/ContraForce.Blazor.UI.V2.hgfng23pek.bundle.scp.css';
@import '_content/ContraForce.Blazor.UI/ContraForce.Blazor.UI.jtwhllbeoe.bundle.scp.css';
@import '_content/ContraForce.Iris.Client.Components.GoJsGraph/ContraForce.Iris.Client.Components.GoJsGraph.lvw7rhfnrn.bundle.scp.css';
@import '_content/ContraForce.Iris.Client.Components/ContraForce.Iris.Client.Components.6yhglkftgy.bundle.scp.css';

/* /Pages/External/CommandPageV2.razor.rz.scp.css */
/* ==========================================================================
   CommandPageV2 — Hero row
   Mobile-first:
   - < 720px: title above, controls stack full-width below
   - ≥ 720px: title left, controls right (single row)
   ========================================================================== */

.cf-v2-command-page__hero[b-cl6aladej1] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--cf-space-3, 0.75rem);
    width: 100%;
    min-width: 0;
}

.cf-v2-command-page__controls[b-cl6aladej1] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--cf-space-2, 0.5rem);
    width: 100%;
    min-width: 0;
}

@media (min-width: 720px) {
    .cf-v2-command-page__hero[b-cl6aladej1] {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        gap: var(--cf-space-4, 1rem);
        flex-wrap: wrap;
    }

    /* Cap the controls block and let it shrink — without this, the time
       filter's internal width:100% expands until it overflows the hero. */
    .cf-v2-command-page__controls[b-cl6aladej1] {
        flex-direction: row;
        align-items: center;
        justify-content: flex-end;
        width: auto;
        max-width: 100%;
        flex: 0 1 auto;
        gap: var(--cf-space-3, 0.75rem);
    }

    /* The time filter's scoped CSS sets width:100%; inside the hero we want
       it sized to its content so the refresh control and timestamp stay on
       screen. ::deep pierces into the TimeFilterV2 component's root. */
    .cf-v2-command-page__controls[b-cl6aladej1]  .cf-v2-time-filter {
        width: auto;
        min-width: 12rem;
        max-width: 18rem;
    }
}
/* /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-t9gtvfrtm9] {
        grid-template-columns: minmax(0, 1fr) minmax(20rem, 26rem);
    }
}

@media (min-width: 1440px) {
    .cf-v2-gamebooks-page .cf-v2-incident-detail__content-grid[b-t9gtvfrtm9] {
        grid-template-columns: minmax(0, 1fr) minmax(22rem, 28rem);
    }
}

/* ---------- Graph body: explicit flex + height chain to GoJS ---------- */
.cf-v2-gamebooks__graph-body[b-t9gtvfrtm9] {
    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-t9gtvfrtm9] {
        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-t9gtvfrtm9]  > * {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 0;
    width: 100%;
    height: 100%;
}

.cf-v2-gamebooks__graph-body[b-t9gtvfrtm9]  #myDiagramDiv {
    height: 100%;
    width: 100%;
    min-height: 0;
}

.cf-v2-gamebooks__panel[b-t9gtvfrtm9] {
    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-t9gtvfrtm9]  .cf-v2-gamebooks__close-incident {
    width: 100%;
    justify-self: stretch;
}

@media (min-width: 560px) {
    .cf-v2-gamebooks-page[b-t9gtvfrtm9]  .cf-v2-gamebooks__close-incident {
        width: auto;
        justify-self: auto;
    }
}

/* ---------- legacy V1 threat-hunting timeline styles (unused) ---------- */

/** {
    color: white;
}
*/
.threathunting-summary-container[b-t9gtvfrtm9] {
    padding: 5px;
    overflow-y: auto;
    border-bottom: 1px solid #6F6F6F;
}

.threathunting-timeline-container[b-t9gtvfrtm9] {
    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-t9gtvfrtm9] {
    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-5xq6ehj62c] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
}

[b-5xq6ehj62c] .cf-v2-gamebooks-page__title {
    margin: 0;
}

[b-5xq6ehj62c] .cf-v2-gamebooks-page__subtitle {
    margin: 0;
}
/* /Pages/External/SettingsPanel.razor.rz.scp.css */
body[b-etilu5amxj] {
}
/* /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-5w9r7sz339] (.cf-tabs__trigger) {
        padding: var(--cf-space-2) var(--cf-space-3);
        font-size: var(--cf-text-body-sm);
    }

    .cf-v2-settings-page[b-5w9r7sz339] (.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-1d58t2i94j] {
    width: 100%;
    max-width: 880px;
    margin: 0 auto;
}

.cf-v2-wizard__panel[b-1d58t2i94j] {
    display: block;
}

.cf-v2-wizard__cards[b-1d58t2i94j] {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--cf-space-3, 0.75rem);
}

@media (min-width: 720px) {
    .cf-v2-wizard__cards[b-1d58t2i94j] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.cf-v2-wizard__card-item[b-1d58t2i94j] {
    min-width: 0;
    display: flex;
}

.cf-v2-wizard__card-item > *[b-1d58t2i94j] {
    flex: 1 1 auto;
    min-width: 0;
}

.cf-v2-wizard__module-img[b-1d58t2i94j] {
    width: 24px;
    height: 24px;
    display: block;
    flex-shrink: 0;
}

.cf-v2-wizard__module-icon[b-1d58t2i94j] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    flex-shrink: 0;
}

.cf-v2-wizard__module-icon--success[b-1d58t2i94j] {
    color: var(--cf-status-success-fg, #22c55e);
}

.cf-v2-wizard__module-icon--primary[b-1d58t2i94j] {
    color: var(--cf-color-primary, #2557f9);
}

.cf-v2-wizard__nav[b-1d58t2i94j] {
    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-1d58t2i94j] {
        flex-direction: column-reverse;
        align-items: stretch;
    }
}
/* /Pages/External/Sops/SopPageV2.razor.rz.scp.css */
.cf-v2-sop-page__hero[b-codc6me17h] {
    display: flex;
    flex-direction: column;
    gap: var(--cf-space-1, 0.25rem);
}

[b-codc6me17h] .cf-v2-sop-page__title {
    margin: 0;
}

[b-codc6me17h] .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-af2ub5e5mb] {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background: var(--cf-bg-default, #0b0d12);
    color: var(--cf-text-default);
}

.cf-v2-blank__topbar[b-af2ub5e5mb] {
    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-af2ub5e5mb] {
    display: flex;
    align-items: center;
}

.cf-v2-blank__logo img[b-af2ub5e5mb] {
    height: 32px;
    width: auto;
    display: block;
}

.cf-v2-blank__topbar-end[b-af2ub5e5mb] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-2, 0.5rem);
}

.cf-v2-blank__main[b-af2ub5e5mb] {
    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-af2ub5e5mb] {
        padding: var(--cf-space-8, 2rem);
    }
}
/* /Shared/Footer.razor.rz.scp.css */
[b-lfqryo80h4] .mud-appbar {
    z-index: 1 !important;
    backdrop-filter: blur(5px) contrast(1.5) saturate(2) blur(10px) brightness(1.5) blur(20px);
    -webkit-backdrop-filter: blur(5px) contrast(1.5) saturate(2) blur(10px) brightness(1.5) blur(20px);
    color: var(--cf-);
    background-color: rgba(var(--mud-palette-appbar-background), 0.2);
}
/* /Shared/GradientLayout.razor.rz.scp.css */
.page-background-class[b-cc5ybe7zso] {
    background-image:url("/images/backgrounds/cf-gradient-background.svg");
    background-position: center;
    background-size: cover;
    height: 100vh;
    width: 100vw;
}
/* /Shared/MainLayout.razor.rz.scp.css */
.mudblazor-logo[b-tuzda805lm] {
    width: 100px;
    margin-left: auto;
    margin-right: auto;
}


.logo-button[b-tuzda805lm] {
    /* height: 70%; */
    padding: 0px;
    margin: 0px;
    display: flex;
    align-items: center;
    justify-content: center;
    /* background-color: #142735; */
    cursor: pointer;
    transition: 0.4s;
}

@media (max-width: 600px) {
    .logo-button[b-tuzda805lm] {
        padding: 8px;
    }
}

.sidebar-overlay[b-tuzda805lm] {
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    background-color: rgba(0,0, 0, 0.2);
    z-index: 999;
    cursor: pointer;
}

/* ── V2 app shell tree (rendered when UiPreferences.PreferV2 = true) ── */

.cf-v2-app[b-tuzda805lm] {
    position: fixed;
    inset: 0;
    height: 100dvh;
    width: 100%;
    overflow: hidden;
}

.cf-v2-app__logo[b-tuzda805lm] {
    display: flex;
    align-items: center;
    padding-left: var(--cf-space-md, 16px);
}

.cf-v2-app__logo img[b-tuzda805lm] {
    height: 32px;
    width: auto;
    display: block;
}

.cf-v2-app__workspace-slot[b-tuzda805lm] {
    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-tuzda805lm] {
    display: none;
    padding: 0;
    width: auto;
    max-width: none;
}

.cf-v2-app__actions[b-tuzda805lm] {
    display: flex;
    align-items: center;
    gap: var(--cf-space-xs, 8px);
    padding-right: var(--cf-space-md, 16px);
}

.cf-v2-app__actions-label[b-tuzda805lm] {
    margin: 0 var(--cf-space-xs, 8px);
}

.cf-v2-app__actions-shortcut[b-tuzda805lm] {
    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-tuzda805lm] {
    position: relative;
    display: inline-flex;
    align-items: center;
}

.cf-v2-app__release-notes-badge[b-tuzda805lm] {
    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-tuzda805lm 2.4s ease-out infinite;
}

@keyframes cf-v2-release-notes-pulse-b-tuzda805lm {
    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-tuzda805lm] {
    animation: cf-v2-release-notes-button-glow-b-tuzda805lm 2.4s ease-in-out infinite;
    border-radius: var(--cf-radius-full, 9999px);
}

@keyframes cf-v2-release-notes-button-glow-b-tuzda805lm {
    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-tuzda805lm],
    .cf-v2-app__release-notes-trigger[b-tuzda805lm] {
        animation: none;
    }
}

.cf-v2-app__content[b-tuzda805lm] {
    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-tuzda805lm],
    .cf-v2-app__actions-shortcut[b-tuzda805lm] {
        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-tuzda805lm] {
        display: none;
    }

    .cf-v2-app__workspace-slot--mobile[b-tuzda805lm] {
        display: flex;
    }
}

@media (max-width: 640px) {
    .cf-v2-app__workspace-slot[b-tuzda805lm] {
        padding: 0 var(--cf-space-sm, 12px);
    }

    .cf-v2-app__content[b-tuzda805lm] {
        padding: var(--cf-space-sm, 12px);
    }
}
