/* /Components/Admin/RichTextEditor.razor.rz.scp.css */
.rte-label[b-cd02g7s4n7] {
    margin-block-end: 0.25em;
    color: var(--mud-palette-text-secondary);
}

.rte-toolbar[b-cd02g7s4n7] {
    display: flex;
    flex-wrap: wrap;
    gap: 2px;
    border: 1px solid var(--mud-palette-lines-inputs);
    border-start-start-radius: var(--mud-default-borderradius);
    border-start-end-radius: var(--mud-default-borderradius);
    border-block-end: none;
    padding: 2px 4px;
}

.rte-area[b-cd02g7s4n7] {
    min-height: 10em;
    padding: 0.5em 0.75em;
    border: 1px solid var(--mud-palette-lines-inputs);
    border-end-start-radius: var(--mud-default-borderradius);
    border-end-end-radius: var(--mud-default-borderradius);
    overflow-wrap: break-word;
}

.rte-area:focus-visible[b-cd02g7s4n7] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: -1px;
}

/* Typed content comes from the JS module, so scoped selectors need ::deep. */
.rte-area[b-cd02g7s4n7]  p,
.rte-area[b-cd02g7s4n7]  blockquote {
    margin-block: 0.5em;
}

.rte-area[b-cd02g7s4n7]  ul,
.rte-area[b-cd02g7s4n7]  ol {
    margin-block: 0.5em;
    padding-inline-start: 1.5em;
}

.rte-area[b-cd02g7s4n7]  blockquote {
    border-inline-start: 3px solid var(--mud-palette-lines-default);
    padding-inline-start: 0.75em;
}

/* Embedded media never overflows the editing area. */
.rte-area[b-cd02g7s4n7]  img,
.rte-area[b-cd02g7s4n7]  video {
    max-width: 100%;
    height: auto;
}

.rte-captions[b-cd02g7s4n7] {
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.5em;
    margin-block-start: 0.25em;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
#blazor-error-ui[b-dirs4wfnc6] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-dirs4wfnc6] {
        cursor: pointer;
        position: absolute;
        inset-inline-end: 0.75rem;
        top: 0.5rem;
        background: none;
        border: none;
        font: inherit;
        padding: 0;
    }

/* Bypass-blocks skip link: visually hidden until it receives keyboard focus. */
.skip-link[b-dirs4wfnc6] {
    position: absolute;
    inset-inline-start: -9999px;
    z-index: 1400;
    background: var(--mud-palette-surface, #ffffff);
    color: var(--mud-palette-text-primary, #212121);
    padding: 0.5rem 1rem;
}

    .skip-link:focus[b-dirs4wfnc6] {
        inset-inline-start: 0.5rem;
        top: 0.5rem;
    }
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-mxul9etdin],
.components-reconnect-repeated-attempt-visible[b-mxul9etdin],
.components-reconnect-failed-visible[b-mxul9etdin],
.components-pause-visible[b-mxul9etdin],
.components-resume-failed-visible[b-mxul9etdin],
.components-rejoining-animation[b-mxul9etdin] {
    display: none;
}

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


#components-reconnect-modal[b-mxul9etdin] {
    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-mxul9etdin 0.5s both;
    &[open]

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

}

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

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

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

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

    100% {
        opacity: 1;
    }
}

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

    100% {
        opacity: 0;
    }
}

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

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

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

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

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

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

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

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

@keyframes components-rejoining-animation-b-mxul9etdin {
    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;
    }
}

/* The reconnect spinner is the application's only persistent animation. */
@media (prefers-reduced-motion: reduce) {
    #components-reconnect-modal[b-mxul9etdin],
    #components-reconnect-modal[b-mxul9etdin]::backdrop,
    .components-rejoining-animation div[b-mxul9etdin] {
        animation: none !important;
    }
}
/* /Components/Pages/Catalog/BookDetailsPage.razor.rz.scp.css */
/* The cover image doubles as the lightbox trigger. */
.cover-lightbox-button[b-sg2gke7465] {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
}

.cover-lightbox-button:focus-visible[b-sg2gke7465] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 2px;
}

/* Sanitized rich summary. The markup comes from MarkupString, so scoped
   selectors need ::deep; logical properties keep both directions correct. */
.rich-text[b-sg2gke7465] {
    max-width: 70ch;
}

.rich-text[b-sg2gke7465]  p {
    margin-block: 0 0.75em;
}

.rich-text[b-sg2gke7465]  ul,
.rich-text[b-sg2gke7465]  ol {
    margin-block: 0 0.75em;
    padding-inline-start: 1.75em;
}

.rich-text[b-sg2gke7465]  li {
    margin-block-end: 0.25em;
}

.rich-text[b-sg2gke7465]  h3,
.rich-text[b-sg2gke7465]  h4 {
    margin-block: 1em 0.5em;
    font-size: 1.05em;
}

.rich-text[b-sg2gke7465]  blockquote {
    margin-block: 0 0.75em;
    margin-inline: 0;
    padding-inline-start: 0.75em;
    border-inline-start: 3px solid var(--mud-palette-lines-default);
    color: var(--mud-palette-text-secondary);
}

.rich-text[b-sg2gke7465]  > :last-child {
    margin-block-end: 0;
}

/* Embedded media scales to the reading column. */
.rich-text[b-sg2gke7465]  img,
.rich-text[b-sg2gke7465]  video {
    max-width: 100%;
    height: auto;
}
/* /Components/Pages/Catalog/ContributorDetailsPage.razor.rz.scp.css */
/* Sanitized rich biography. The markup comes from MarkupString, so scoped
   selectors need ::deep; logical properties keep both directions correct. */
.rich-text[b-wlmbsgu9we] {
    max-width: 70ch;
}

.rich-text[b-wlmbsgu9we]  p {
    margin-block: 0 0.75em;
}

.rich-text[b-wlmbsgu9we]  ul,
.rich-text[b-wlmbsgu9we]  ol {
    margin-block: 0 0.75em;
    padding-inline-start: 1.75em;
}

.rich-text[b-wlmbsgu9we]  li {
    margin-block-end: 0.25em;
}

.rich-text[b-wlmbsgu9we]  h3,
.rich-text[b-wlmbsgu9we]  h4 {
    margin-block: 1em 0.5em;
    font-size: 1.05em;
}

.rich-text[b-wlmbsgu9we]  blockquote {
    margin-block: 0 0.75em;
    margin-inline: 0;
    padding-inline-start: 0.75em;
    border-inline-start: 3px solid var(--mud-palette-lines-default);
    color: var(--mud-palette-text-secondary);
}

.rich-text[b-wlmbsgu9we]  > :last-child {
    margin-block-end: 0;
}

/* Embedded media scales to the reading column. */
.rich-text[b-wlmbsgu9we]  img,
.rich-text[b-wlmbsgu9we]  video {
    max-width: 100%;
    height: auto;
}
/* /Components/Pages/Catalog/NewspaperDetailsPage.razor.rz.scp.css */
/* A page image doubles as its lightbox trigger. */
.page-lightbox-button[b-qzrfv9d0z0] {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
}

.page-lightbox-button:focus-visible[b-qzrfv9d0z0] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 2px;
}
/* /Components/Pages/Catalog/VolumePagesPage.razor.rz.scp.css */
/* Reader presentation: one centered card with generous reading typography.
   Logical properties keep LTR and RTL layouts correct without mirroring
   rules; flex order follows the document direction automatically. */

/* MudPaper's root element carries no scope attribute, so the card is
   reached via ::deep from the scoped .reader-shell wrapper. */
.reader-shell[b-fskozcjtya]  .reader-card {
    max-width: 46rem;
    margin-inline: auto;
    padding-block: 2rem;
    padding-inline: clamp(1.25rem, 5vw, 2.75rem);
}

.reader-header[b-fskozcjtya] {
    margin-block-end: 1.25rem;
}

.reader-title[b-fskozcjtya] {
    margin-block-start: 0.25rem;
}

.reader-body[b-fskozcjtya] {
    font-size: 1.075rem;
    line-height: 1.85;
}

/* Legacy markup-free bodies: encoded text with author line breaks kept. */
.reader-body-legacy[b-fskozcjtya] {
    white-space: pre-line;
}

/* Sanitized rich body arrives via MarkupString, so scoped selectors need
   ::deep. */
.reader-body.rich-text[b-fskozcjtya]  p {
    margin-block: 0 0.9em;
}

.reader-body.rich-text[b-fskozcjtya]  ul,
.reader-body.rich-text[b-fskozcjtya]  ol {
    margin-block: 0 0.9em;
    padding-inline-start: 1.75em;
}

.reader-body.rich-text[b-fskozcjtya]  li {
    margin-block-end: 0.25em;
}

.reader-body.rich-text[b-fskozcjtya]  h3,
.reader-body.rich-text[b-fskozcjtya]  h4 {
    margin-block: 1em 0.5em;
    font-size: 1.05em;
}

.reader-body.rich-text[b-fskozcjtya]  blockquote {
    margin-block: 0 0.9em;
    margin-inline: 0;
    padding-inline-start: 0.75em;
    border-inline-start: 3px solid var(--mud-palette-lines-default);
    color: var(--mud-palette-text-secondary);
}

.reader-body.rich-text[b-fskozcjtya]  > :last-child {
    margin-block-end: 0;
}

/* Language alternatives when the selected language has no content: one
   button per language that does, wrapped and centered like the card. */
.reader-language-choices[b-fskozcjtya] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
}

/* Compact language switch above the card when content also exists in other
   languages: small trailing links, unobtrusive by design. */
.reader-language-links[b-fskozcjtya] {
    max-width: 46rem;
    margin-inline: auto;
    margin-block-end: 0.5rem;
    display: flex;
    justify-content: flex-end;
    gap: 1rem;
}

/* Volume index (bookmarked pages): a quiet disclosure above the card, sized
   and centered like the reading column. Logical properties keep it correct
   in RTL without mirroring rules. */
/* Reading column beside its index. Logical properties only: the index is
   the first flex child, so it lands on the inline-start edge — left in LTR,
   right in RTL — without any direction-specific rule. */
.reader-layout[b-fskozcjtya] {
    display: flex;
    align-items: flex-start;
    justify-content: center;
    gap: 1.5rem;
}

.reader-main[b-fskozcjtya] {
    flex: 1 1 46rem;
    min-width: 0;
    max-width: 46rem;
}

/* Index panel: stays in view while reading, and scrolls on its own when the
   volume has more bookmarks than fit the viewport. */
.reader-index[b-fskozcjtya] {
    flex: 0 0 15rem;
    position: sticky;
    top: 1rem;
    max-height: calc(100vh - 2rem);
    overflow-y: auto;
    padding: 0.75rem 1rem;
    border-inline-start: 3px solid var(--mud-palette-primary);
    border-radius: 4px;
    background-color: var(--mud-palette-background-gray);
}

.reader-index summary[b-fskozcjtya] {
    cursor: pointer;
    padding-block: 0.25rem;
    font-weight: 500;
}

/* Narrow screens: the index returns above the reading column, collapsed
   height-wise by its own scroll cap rather than pushing the page down. */
@media (max-width: 959.98px) {
    .reader-layout[b-fskozcjtya] {
        flex-direction: column;
    }

    .reader-index[b-fskozcjtya] {
        flex: none;
        width: 100%;
        max-width: 46rem;
        margin-inline: auto;
        position: static;
        max-height: 14rem;
    }

    .reader-main[b-fskozcjtya] {
        flex: none;
        width: 100%;
        margin-inline: auto;
    }
}

.reader-index-list[b-fskozcjtya] {
    list-style: none;
    margin-block: 0.5rem 0;
    padding-inline-start: 0.5rem;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.reader-index-list li[b-fskozcjtya] {
    display: flex;
    align-items: baseline;
    gap: 0.5rem;
}

/* The page number trails the label; it is a technical LTR value. */
.reader-index-page[b-fskozcjtya] {
    font-size: 0.8125rem;
}

.reader-nav[b-fskozcjtya] {
    max-width: 46rem;
    margin-inline: auto;
    margin-block-start: 1.25rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.reader-position[b-fskozcjtya] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.5rem;
    text-align: center;
}

.reader-select-form[b-fskozcjtya] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.reader-select-form select[b-fskozcjtya] {
    min-width: 4.5rem;
}

.reader-download[b-fskozcjtya] {
    max-width: 46rem;
    margin-inline: auto;
    margin-block-start: 0.75rem;
    display: flex;
    justify-content: center;
}

/* Embedded media scales to the reading column. */
.reader-body.rich-text[b-fskozcjtya]  img,
.reader-body.rich-text[b-fskozcjtya]  video {
    max-width: 100%;
    height: auto;
}

/* Manual page entry: wide enough for four digits, never full-width. */
.reader-page-input[b-fskozcjtya] {
    width: 6rem;
}
/* /Components/Pages/ContentPageView.razor.rz.scp.css */
/* Header band on the validated Primary/Tertiary pairing. Text uses the
   theme's AA-checked on-primary color, so light and dark palettes both work. */
.content-page-hero[b-vpuwx9wi0x] {
    background: linear-gradient(135deg, var(--mud-palette-primary), var(--mud-palette-secondary));
    color: var(--mud-palette-primary-text, #212121);
}

/* Card accents: the exact library teal as the edge (decorative) over the
   aqua-mist tint, which carries the ink body text at 12:1. */
[b-vpuwx9wi0x] .content-page-card {
    border-inline-start: 4px solid #438f8b;
    background: #d8ecea;
}

/* Sanitized rich body. The markup comes from MarkupString, so descendant
   selectors need ::deep; logical properties keep LTR and RTL both correct. */
.rich-text[b-vpuwx9wi0x] {
    max-width: 70ch;
}

.rich-text[b-vpuwx9wi0x]  p {
    margin-block: 0 0.75em;
}

.rich-text[b-vpuwx9wi0x]  ul,
.rich-text[b-vpuwx9wi0x]  ol {
    margin-block: 0 0.75em;
    padding-inline-start: 1.75em;
}

.rich-text[b-vpuwx9wi0x]  li {
    margin-block-end: 0.25em;
}

.rich-text[b-vpuwx9wi0x]  h3,
.rich-text[b-vpuwx9wi0x]  h4,
.rich-text[b-vpuwx9wi0x]  h5 {
    margin-block: 1em 0.5em;
}

.rich-text[b-vpuwx9wi0x]  h3 {
    font-size: 1.15em;
}

.rich-text[b-vpuwx9wi0x]  h4,
.rich-text[b-vpuwx9wi0x]  h5 {
    font-size: 1.05em;
}

.rich-text[b-vpuwx9wi0x]  blockquote {
    margin-block: 0 0.75em;
    margin-inline: 0;
    padding-inline-start: 0.75em;
    border-inline-start: 3px solid var(--mud-palette-lines-default);
    color: var(--mud-palette-text-secondary);
}

.rich-text[b-vpuwx9wi0x]  > :last-child {
    margin-block-end: 0;
}

/* Embedded media scales to the reading column. */
.rich-text[b-vpuwx9wi0x]  img,
.rich-text[b-vpuwx9wi0x]  video {
    max-width: 100%;
    height: auto;
}
/* /Components/Pages/Home.razor.rz.scp.css */
.home-hero[b-mtnscw0iir] {
    background: linear-gradient(135deg, var(--mud-palette-primary), var(--mud-palette-secondary));
    /* Both gradient stops carry the theme's AA-validated on-primary text. */
    color: var(--mud-palette-primary-text, #212121);
}

.home-hero-lead[b-mtnscw0iir] {
    max-width: 46rem;
    opacity: 0.92;
    /* Administrator text may span several lines; authored breaks are kept
       while ordinary wrapping still applies. */
    white-space: pre-line;
}

.home-hero-search .home-hero-input[b-mtnscw0iir] {
    min-width: min(24rem, 100%);
}

/* Carousel items are absolutely positioned, so the carousel needs an
   explicit height; the image area scales inside it. */
[b-mtnscw0iir] .home-slider {
    height: min(60vh, 460px);
    background: var(--mud-palette-surface);
}

[b-mtnscw0iir] .home-slide {
    height: 100%;
}

[b-mtnscw0iir] .home-slide-image img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

/* Arrow/pause controls get a fixed dark scrim so they stay visible over any
   slide image or light surface (white-on-scrim is 4.5:1+ everywhere). */
[b-mtnscw0iir] .home-slider .mud-carousel-arrow,
[b-mtnscw0iir] .home-slider-pause {
    background: rgba(0, 0, 0, 0.45);
    color: #ffffff;
}

    [b-mtnscw0iir] .home-slider .mud-carousel-arrow:hover,
    [b-mtnscw0iir] .home-slider-pause:hover {
        background: rgba(0, 0, 0, 0.65);
        color: #ffffff;
    }

/* The autoplay toggle sits inside the carousel, clear of arrows/bullets. */
[b-mtnscw0iir] .home-slider-pause {
    position: absolute;
    top: 12px;
    inset-inline-end: 12px;
    z-index: 5;
}
