/*
 * PDFPageFlip viewer: modal flip-book in a native <dialog>.
 *
 * Neutral defaults only. A project restyles the viewer by setting the custom properties below
 * on .pdfpageflip in its own stylesheet (that rule wins over the :where() defaults here).
 */

:where(.pdfpageflip) {
    --pdfpageflip-bg: #f2f2f2;              /* dialog and zoom ground */
    --pdfpageflip-surface: #fff;            /* control bar, sidebar, side arrows */
    --pdfpageflip-text: #222;               /* icons and text */
    --pdfpageflip-border: #ddd;             /* lines of bar, sidebar and thumbnails */
    --pdfpageflip-hover-bg: #222;           /* hover and keyboard focus of a control */
    --pdfpageflip-hover-text: #fff;
    --pdfpageflip-active-bg: #000;          /* pressed toggle (sidebar, zoom) */
    --pdfpageflip-active-text: #fff;
    --pdfpageflip-focus: #005fcc;           /* focus ring */
    --pdfpageflip-accent: #000;             /* current thumbnail frame */
    --pdfpageflip-shadow-rgb: 0, 0, 0;      /* one shadow for book, spine, flip and bar */
    --pdfpageflip-shadow-opacity: 0.2;
    --pdfpageflip-duration: 0.25s;
}

/* The page behind a modal dialog keeps scrolling otherwise, and its scrollbar overlaps the 100vw dialog */
html:has(.pdfpageflip[open]) {
    overflow: hidden;
}

.pdfpageflip {
    box-sizing: border-box;
    width: 100vw;
    max-width: none;
    height: 100vh;
    height: 100dvh;
    max-height: none;
    margin: 0;
    padding: 0;
    border: 0;
    overflow: hidden;
    background: var(--pdfpageflip-bg);
    color: var(--pdfpageflip-text);
}

.pdfpageflip[open] {
    display: flex;
    flex-direction: column;
}

.pdfpageflip *,
.pdfpageflip *::before,
.pdfpageflip *::after { box-sizing: border-box; }

.pdfpageflip::backdrop { background: var(--pdfpageflip-bg); }

.pdfpageflip-body {
    position: relative;
    display: flex;
    flex: 1;
    min-height: 0;
}

.pdfpageflip-stage {
    position: relative;
    display: flex;
    flex: 1;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-width: 0;
    padding: 20px 70px;
}

.pdfpageflip-bookwrap { width: 100%; }

/* White pages on a light ground need a soft lift; the canvas is transparent outside the pages */
.pdfpageflip-bookwrap .stf__canvas { filter: drop-shadow(0 8px 20px rgba(var(--pdfpageflip-shadow-rgb), var(--pdfpageflip-shadow-opacity))); }

/* Controls */
.pdfpageflip-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 12px 14px;
    border: 0;
    border-radius: 0;
    background: none;
    color: var(--pdfpageflip-text);
    line-height: 0;
    text-decoration: none;
    cursor: pointer;
    transition: background-color var(--pdfpageflip-duration) ease, color var(--pdfpageflip-duration) ease;
}

.pdfpageflip-btn:hover,
.pdfpageflip-btn:focus-visible {
    background: var(--pdfpageflip-hover-bg);
    color: var(--pdfpageflip-hover-text);
}

.pdfpageflip-btn[aria-pressed="true"] {
    background: var(--pdfpageflip-active-bg);
    color: var(--pdfpageflip-active-text);
}

.pdfpageflip-btn:focus-visible,
.pdfpageflip-thumb:focus-visible {
    outline: 2px solid var(--pdfpageflip-focus);
    outline-offset: -4px;
}

.pdfpageflip-close {
    position: absolute;
    top: 12px;
    right: 12px;
    z-index: 8;
    border-radius: 50%;
    transition: right var(--pdfpageflip-duration) ease, background-color var(--pdfpageflip-duration) ease, color var(--pdfpageflip-duration) ease;
}

.pdfpageflip.is-sidebar-open .pdfpageflip-close { right: 312px; }

/* Control bar: in flow below the book, at the bottom edge while zoomed */
.pdfpageflip-bar {
    position: relative;
    z-index: 7;
    display: flex;
    flex: 0 0 auto;
    align-items: stretch;
    margin-top: 16px;
    overflow: hidden;
    border: 1px solid var(--pdfpageflip-border);
    border-radius: 999px;
    background: var(--pdfpageflip-surface);
    box-shadow: 0 6px 20px rgba(var(--pdfpageflip-shadow-rgb), var(--pdfpageflip-shadow-opacity));
    transition: opacity 0.3s;
}

.pdfpageflip.is-bar-bottom .pdfpageflip-bar {
    position: absolute;
    bottom: 20px;
    left: 50%;
    margin: 0;
    transform: translateX(-50%);
}

.pdfpageflip-sep {
    width: 1px;
    background: var(--pdfpageflip-border);
}

.pdfpageflip-counter {
    display: flex;
    align-items: center;
    min-width: 90px;
    padding: 0 8px;
    justify-content: center;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.pdfpageflip.is-idle .pdfpageflip-bar,
.pdfpageflip.is-idle [data-side] {
    opacity: 0;
    pointer-events: none;
}

.pdfpageflip.is-idle .pdfpageflip-stage { cursor: none; }

/* Arrows at the stage edges */
.pdfpageflip [data-side] {
    position: absolute;
    top: 50%;
    z-index: 4;
    width: 48px;
    height: 48px;
    padding: 0;
    border: 1px solid var(--pdfpageflip-border);
    border-radius: 50%;
    background: var(--pdfpageflip-surface);
    box-shadow: 0 2px 8px rgba(var(--pdfpageflip-shadow-rgb), var(--pdfpageflip-shadow-opacity));
    transform: translateY(-50%);
}

.pdfpageflip [data-side="prev"] { left: 12px; }
.pdfpageflip [data-side="next"] { right: 12px; }
.pdfpageflip.is-zoomed [data-side] { display: none; }

/* Fullscreen icon swaps with the state */
.pdfpageflip .pdfpageflip-icon-shrink,
.pdfpageflip.is-fullscreen .pdfpageflip-icon-expand { display: none; }
.pdfpageflip.is-fullscreen .pdfpageflip-icon-shrink { display: inline-block; }

/* Zoom layer: the spread at 200 %, drag to pan, click to leave */
.pdfpageflip-zoom {
    position: absolute;
    inset: 0;
    z-index: 5;
    overflow: auto;
    background: var(--pdfpageflip-bg);
    cursor: zoom-out;
    text-align: center;
}

.pdfpageflip-zoom[hidden] { display: none; }
.pdfpageflip-zoom.is-dragging { cursor: grabbing; }

.pdfpageflip-zoom-inner {
    position: relative;
    display: flex;
    width: max-content;
    margin: 40px auto;
    box-shadow: 0 10px 40px rgba(var(--pdfpageflip-shadow-rgb), var(--pdfpageflip-shadow-opacity));
    transform-origin: 0 0;
    will-change: transform;
}

.pdfpageflip-zoom-inner img {
    display: block;
    max-width: none;
    user-select: none;
    -webkit-user-drag: none;
}

/* Spine shadow in the zoom: same gradient and relative width (1/60 of the spread) as in the book */
.pdfpageflip-zoom-inner.is-spread::after {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    left: 50%;
    width: 1.667%;
    transform: translateX(-50%);
    pointer-events: none;
    background: linear-gradient(90deg,
        rgba(var(--pdfpageflip-shadow-rgb), 0) 0%,
        rgba(var(--pdfpageflip-shadow-rgb), calc(var(--pdfpageflip-shadow-opacity) * 0.6)) 45%,
        rgba(var(--pdfpageflip-shadow-rgb), var(--pdfpageflip-shadow-opacity)) 50%,
        rgba(var(--pdfpageflip-shadow-rgb), calc(var(--pdfpageflip-shadow-opacity) * 0.6)) 55%,
        rgba(var(--pdfpageflip-shadow-rgb), 0) 100%);
}

/* Sidebar with spread thumbnails pushes the stage from the right */
.pdfpageflip-sidebar {
    order: 2;
    width: 0;
    overflow-x: hidden;
    overflow-y: auto;
    background: var(--pdfpageflip-surface);
    transition: width var(--pdfpageflip-duration) ease;
}

.pdfpageflip.is-sidebar-open .pdfpageflip-sidebar {
    width: 300px;
    border-left: 1px solid var(--pdfpageflip-border);
}

.pdfpageflip-thumbs {
    display: flex;
    flex-direction: column;
    gap: 12px;
    width: 300px;
    padding: 12px;
}

.pdfpageflip-spread {
    display: flex;
    gap: 2px;
    justify-content: center;
}

.pdfpageflip-spread:first-child .pdfpageflip-thumb { margin-left: 50%; }

.pdfpageflip-thumb {
    position: relative;
    display: block;
    width: 50%;
    padding: 0;
    border: 2px solid var(--pdfpageflip-border);
    background: var(--pdfpageflip-surface);
    cursor: pointer;
}

.pdfpageflip-thumb img {
    display: block;
    width: 100%;
}

.pdfpageflip-thumb span {
    position: absolute;
    right: 4px;
    bottom: 4px;
    padding: 0 5px;
    background: var(--pdfpageflip-active-bg);
    color: var(--pdfpageflip-active-text);
    font-size: 11px;
}

.pdfpageflip-thumb.is-active { border-color: var(--pdfpageflip-accent); }

/* Screen reader announcements and hint, not shown */
.pdfpageflip-sr,
.pdfpageflip-live {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

@media (max-width: 639px) {
    .pdfpageflip-stage { padding: 56px 12px 12px; }
    .pdfpageflip [data-side] { display: none; }
    .pdfpageflip.is-sidebar-open .pdfpageflip-sidebar { position: absolute; top: 0; right: 0; bottom: 0; z-index: 9; width: min(300px, 85vw); }
    .pdfpageflip.is-sidebar-open .pdfpageflip-close { right: 12px; }
}

@media (prefers-reduced-motion: reduce) {
    .pdfpageflip *,
    .pdfpageflip *::before,
    .pdfpageflip *::after { transition-duration: 0s !important; }
}
