/* /Components/Layout/HelpWindow.razor.rz.scp.css */
/* Floating help window (HelpWindow.razor, R-001).
   position:fixed detaches the window from the page flow so it never shifts the
   content below it; the size is bounded so it does not claim the full content
   width. The FramedWindow inside fills this fixed viewport-sized box.
   This box must stay visually neutral (no shadow, border or background): once
   the FramedWindow is dragged or maximized its own frame is what is shown, and
   any styling here would remain as a ghost frame at the original position. */
.vre-help-launcher[b-tvhx5pqtrq] {
    position: fixed;
    top: 3.75rem;   /* just below the header */
    right: 1rem;
    width: min(56rem, calc(100vw - 2rem));
    height: min(40rem, calc(100vh - 5.5rem));
    z-index: 1060;
}

/* The embedded knowledge base fills the framed window's body. */
iframe.help-window-frame[b-tvhx5pqtrq] {
    display: block;
    width: 100%;
    height: 100%;
    border: 0;
    background: #fff;
}

/* Instance switch in the title bar: compact labels so it stays one line. */
.help-instance-switch .btn[b-tvhx5pqtrq] {
    --bs-btn-padding-y: 0.1rem;
    --bs-btn-padding-x: 0.5rem;
    --bs-btn-font-size: 0.75rem;
    white-space: nowrap;
}
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-wuate753dy],
.components-reconnect-repeated-attempt-visible[b-wuate753dy],
.components-reconnect-failed-visible[b-wuate753dy],
.components-pause-visible[b-wuate753dy],
.components-resume-failed-visible[b-wuate753dy],
.components-rejoining-animation[b-wuate753dy] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-wuate753dy],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-wuate753dy],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-wuate753dy],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-wuate753dy],
#components-reconnect-modal.components-reconnect-retrying[b-wuate753dy],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-wuate753dy],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-wuate753dy],
#components-reconnect-modal.components-reconnect-failed[b-wuate753dy],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-wuate753dy] {
    display: block;
}


#components-reconnect-modal[b-wuate753dy] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-wuate753dy 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-wuate753dy 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-wuate753dy 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-wuate753dy]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-wuate753dy 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-wuate753dy {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-wuate753dy {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-wuate753dy {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-wuate753dy] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-wuate753dy] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-wuate753dy] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-wuate753dy] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-wuate753dy] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-wuate753dy] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-wuate753dy] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-wuate753dy 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-wuate753dy] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-wuate753dy {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/Admin/VreHelp.razor.rz.scp.css */
/* VRE Help admin view (VreHelp.razor).

   The page shows no window of its own: the graph and a document open as overlays, one from a
   button each. Both are FramedWindow instances inside a fixed wrapper (the same pattern as the
   help window), so they float above the page instead of reserving layout space. The document
   window holds every corpus, the public online help included, so there is no separate help
   window.

   The wrappers must stay visually neutral — no border, no background, no shadow: once a
   window is dragged or maximized, its own frame is what is visible, and styling here would
   remain behind as a ghost frame at the original position.

   They must also stay free of `z-index` (and of `transform`/`filter`/`opacity`): a wrapper
   that creates a stacking context isolates its window, and the ui-kit can then no longer
   raise the window the user pressed above its neighbours. */

/* All windows of the page share one layer above the application shell. The layer carries the
   `z-index`, not the individual wrappers: the shell's sidebar sits at 1040, and a window inside
   the page's content area is painted below it — which put the tree's left edge under the sidebar
   and made those rows unclickable. Giving each wrapper a `z-index` would fix that and break the
   stacking between windows, because every wrapper would become a stacking context of its own;
   one layer keeps all windows in a single context, so the kit can still order them freely.
   The layer itself must not intercept anything — only the windows inside it do. */
.vre-help-windows[b-gy6k69b73z] {
    position: fixed;
    inset: 0;
    z-index: 1045;
    pointer-events: none;
}

/* The wrapper only positions its window; its own box stays where the window was laid out, even
   after the script moved the window elsewhere. It must therefore not receive pointer events —
   otherwise it would cover the title bars of the windows it was opened over. Only the window
   itself is interactive. */
.vre-help-windows .vre-help-window[b-gy6k69b73z] {
    pointer-events: none;
}

.vre-help-windows .vre-help-window[b-gy6k69b73z]  .uikit-framed-window {
    pointer-events: auto;
}

/* Every window initially takes the width of the content column behind it and is centred the
   same way. The widths below mirror Bootstrap's `.container` max-widths — the page is rendered
   inside one — so a window lines up with the cards it covers. `margin-inline: auto` centres
   without `transform`, which would again isolate the window from the stacking order. */
.vre-help-window[b-gy6k69b73z] {
    position: fixed;
    left: 0;
    right: 0;
    margin-inline: auto;
    width: calc(100vw - 2rem);
}

@media (min-width: 576px) {
    .vre-help-window[b-gy6k69b73z] {
        width: min(540px, calc(100vw - 2rem));
    }
}

@media (min-width: 768px) {
    .vre-help-window[b-gy6k69b73z] {
        width: min(720px, calc(100vw - 2rem));
    }
}

@media (min-width: 992px) {
    .vre-help-window[b-gy6k69b73z] {
        width: min(960px, calc(100vw - 2rem));
    }
}

@media (min-width: 1200px) {
    .vre-help-window[b-gy6k69b73z] {
        width: min(1140px, calc(100vw - 2rem));
    }
}

@media (min-width: 1400px) {
    .vre-help-window[b-gy6k69b73z] {
        width: min(1320px, calc(100vw - 2rem));
    }
}

/* The windows may overlap. Their vertical position is the ui-kit cascade (`CascadeBaseTop` 7.5rem,
   `CascadeStep` 2.5rem, one slot per window plus a front slot): the window the reader used last
   takes the *lowest* slot, so it is raised without covering the title bars of the windows it was
   raised above. Stacking alone would not do — two equally centred windows would cover each other
   exactly, and a window raised from above would hide the title bar of the one below it.

   The `top` values below are the first paint before the script takes over; they match slots 0 and
   1 so the window does not jump when it is initialised. */
.vre-help-graph-window[b-gy6k69b73z] {
    top: 7.5rem;
}

.vre-help-document-window[b-gy6k69b73z] {
    top: 10rem;
}

/* The embedded graph fills the framed window's body. */
[b-gy6k69b73z] iframe.vre-help-graph-frame {
    display: block;
    width: 100%;
    height: 100%;
    border: 0;
    background: #fff;
}

/* The Markdown view scrolls inside the window rather than growing it. */
[b-gy6k69b73z] .vre-help-document-body {
    height: 100%;
    overflow: auto;
    padding: 0.75rem 1rem;
    background: var(--bs-body-bg);
}

/* Graph chat (ADR-038): a fixed height keeps the page scannable while the transcript scrolls
   inside the card and the composer stays put at its bottom. */
.vre-help-graph-chat-panel[b-gy6k69b73z] {
    height: 32rem;
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 0.5rem;
    overflow: hidden;
}
/* /Components/Pages/Calendars/EventList.razor.rz.scp.css */
/* Center the page heading and any description markup, overriding inline
   text-align styles that Summernote / MarkupString descriptions may carry
   in their <p> / <div> children. */
.page-title-row[b-j0361tqd2h],
.page-title-row h1[b-j0361tqd2h] {
    text-align: center;
}

.event-calendar-description[b-j0361tqd2h],
.event-calendar-description *[b-j0361tqd2h] {
    text-align: center !important;
}
/* /Components/Pages/Services/SensorDashboard.razor.rz.scp.css */
/* Fill the available space inside
     <main class="overflow-auto h-100 p-3"> <div class="container mt-2">.
   The container already caps width; we just need a tall-enough frame.
   Reduced by 4rem compared to before to account for the centered page
   heading above the iframe. */
.sensor-dashboard-embed[b-wtdr9w1q5o] {
    height: calc(100vh - 16rem); /* header + footer + page padding + page heading */
    min-height: 32rem;
}

.sensor-dashboard-embed iframe[b-wtdr9w1q5o] {
    width: 100%;
    height: 100%;
    border: 0;
    background: #fff;
}
