.ravix-book{--ravix-book-height:680px;--ravix-book-max-width:1180px;--ravix-book-bg:#111827;--ravix-book-accent:#7c3aed;box-sizing:border-box;width:100%;max-width:var(--ravix-book-max-width);margin:24px auto;font-family:inherit;direction:inherit}.ravix-book *{box-sizing:border-box}.ravix-book button,.ravix-book input{font:inherit}.ravix-book-shell{position:relative;overflow:hidden;border-radius:20px;background:var(--ravix-book-bg);box-shadow:0 18px 60px rgba(15,23,42,.24);border:1px solid rgba(255,255,255,.08)}.ravix-toolbar{min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;background:rgba(17,24,39,.92);backdrop-filter:blur(18px);border-bottom:1px solid rgba(255,255,255,.08);position:relative;z-index:20;color:#f9fafb}.ravix-toolbar-group{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ravix-toolbar-primary{direction:ltr}.ravix-btn{appearance:none;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.07);color:#fff;border-radius:10px;min-width:36px;height:36px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;text-decoration:none!important;line-height:1;transition:background .18s,border-color .18s,transform .18s}.ravix-btn:hover,.ravix-btn:focus-visible{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.2);color:#fff;outline:none}.ravix-btn:active{transform:scale(.96)}.ravix-btn[disabled]{opacity:.36;cursor:not-allowed}.ravix-btn-text em{font-style:normal;font-size:12px}.ravix-zoom-value{min-width:58px;font-size:11px}.ravix-page-indicator{display:flex;align-items:center;gap:5px;background:rgba(0,0,0,.22);border-radius:10px;padding:3px 7px;color:#d1d5db;font-size:12px}.ravix-page-indicator input{width:48px;height:28px;border:0!important;border-radius:7px;background:rgba(255,255,255,.1)!important;color:#fff!important;text-align:center;box-shadow:none!important;padding:2px 4px!important;-moz-appearance:textfield}.ravix-page-indicator input::-webkit-inner-spin-button,.ravix-page-indicator input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.ravix-workspace{position:relative;display:flex;height:var(--ravix-book-height);min-height:360px;background:radial-gradient(circle at 50% 35%,rgba(255,255,255,.08),transparent 42%),var(--ravix-book-bg)}.ravix-stage{position:relative;min-width:0;flex:1;overflow:hidden;outline:none;touch-action:none;user-select:none}.ravix-webgl{position:absolute;inset:0;width:100%;height:100%;display:block}.ravix-simple-stage{position:absolute;inset:0;display:none;align-items:center;justify-content:center;gap:10px;padding:24px;overflow:auto;direction:ltr;transform-origin:center center}.ravix-simple-stage.is-active{display:flex}.ravix-simple-page{position:relative;background:#fff;box-shadow:0 18px 45px rgba(0,0,0,.36);flex:0 0 auto;max-height:calc(100% - 20px);border-radius:2px;overflow:hidden;transition:transform .22s ease,opacity .22s ease}.ravix-simple-page canvas{display:block;width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain}.ravix-simple-stage.is-single .ravix-simple-page{max-width:min(92%,860px);max-height:94%}.ravix-loader{position:absolute;inset:0;z-index:15;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:#f9fafb;background:linear-gradient(180deg,rgba(17,24,39,.55),rgba(17,24,39,.82));text-align:center;padding:20px;transition:opacity .25s,visibility .25s}.ravix-loader.is-hidden{opacity:0;visibility:hidden;pointer-events:none}.ravix-spinner{width:42px;height:42px;border-radius:50%;border:3px solid rgba(255,255,255,.18);border-top-color:var(--ravix-book-accent);animation:ravix-spin .85s linear infinite}.ravix-progress{width:min(250px,65%);height:5px;border-radius:99px;background:rgba(255,255,255,.12);overflow:hidden}.ravix-progress i{display:block;width:0;height:100%;background:var(--ravix-book-accent);transition:width .2s ease}.ravix-error{position:absolute;inset:20px;z-index:16;display:flex;align-items:center;justify-content:center;text-align:center;padding:24px;border-radius:16px;background:rgba(127,29,29,.92);color:#fff;line-height:1.8}.ravix-hint{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);z-index:7;background:rgba(0,0,0,.45);color:#e5e7eb;border:1px solid rgba(255,255,255,.08);border-radius:999px;padding:7px 12px;font-size:11px;white-space:nowrap;pointer-events:none;opacity:.78;transition:opacity .35s}.ravix-stage.is-interacted .ravix-hint{opacity:0}.ravix-sidepanel{width:0;max-width:0;overflow:hidden;background:#0f172a;color:#fff;z-index:18;border-inline-end:1px solid rgba(255,255,255,.08);transition:width .24s ease,max-width .24s ease;display:flex;flex-direction:column}.ravix-sidepanel.is-open{width:min(300px,82vw);max-width:min(300px,82vw)}.ravix-panel-head{min-height:50px;display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border-bottom:1px solid rgba(255,255,255,.08)}.ravix-panel-head strong{font-size:13px}.ravix-searchbox{padding:10px;border-bottom:1px solid rgba(255,255,255,.08)}.ravix-searchbox form{display:flex;gap:6px}.ravix-searchbox input{min-width:0;flex:1;height:36px;border-radius:9px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.08);color:#fff;padding:0 10px;outline:none}.ravix-searchbox input:focus{border-color:var(--ravix-book-accent)}.ravix-search-status{font-size:11px;color:#94a3b8;padding:8px 2px 0}.ravix-search-results{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:240px;overflow:auto}.ravix-search-result{width:100%;text-align:start;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.06);color:#e5e7eb;padding:9px 10px;border-radius:9px;cursor:pointer}.ravix-search-result:hover{background:rgba(255,255,255,.12)}.ravix-search-result b{display:block;color:#fff}.ravix-search-result span{font-size:11px;color:#94a3b8}.ravix-thumbnails{padding:12px;overflow:auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;align-content:start}.ravix-thumb{appearance:none;border:2px solid transparent;border-radius:9px;background:rgba(255,255,255,.05);padding:5px;color:#cbd5e1;cursor:pointer;position:relative;overflow:hidden}.ravix-thumb:hover{background:rgba(255,255,255,.1)}.ravix-thumb.is-current{border-color:var(--ravix-book-accent)}.ravix-thumb canvas{display:block;width:100%;height:auto;background:#fff;border-radius:3px}.ravix-thumb span{display:block;text-align:center;font-size:10px;padding-top:4px}.ravix-book.is-fullscreen,.ravix-book:fullscreen{max-width:none!important;width:100vw;height:100vh;margin:0;border-radius:0;background:var(--ravix-book-bg)}.ravix-book:fullscreen .ravix-book-shell{height:100vh;border-radius:0;border:0}.ravix-book:fullscreen .ravix-workspace{height:calc(100vh - 54px)}.ravix-book.is-dragging .ravix-stage{cursor:grabbing}.ravix-stage{cursor:grab}.ravix-book-error{padding:14px;border:1px solid #fecaca;background:#fef2f2;color:#991b1b;border-radius:10px}.ravix-toast{position:absolute;z-index:30;bottom:18px;right:18px;max-width:min(360px,80%);padding:9px 12px;border-radius:10px;background:rgba(15,23,42,.92);color:#fff;border:1px solid rgba(255,255,255,.1);font-size:12px;box-shadow:0 10px 30px rgba(0,0,0,.25);animation:ravix-toast-in .2s ease}
@keyframes ravix-spin{to{transform:rotate(360deg)}}@keyframes ravix-toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media(max-width:760px){.ravix-book{margin:14px auto}.ravix-book-shell{border-radius:14px}.ravix-workspace{min-height:420px}.ravix-toolbar{align-items:center}.ravix-btn-text em{display:none}.ravix-toolbar-group{gap:4px}.ravix-btn{min-width:34px;height:34px;padding:0 8px}.ravix-toolbar .ravix-zoom-value{display:none}.ravix-page-indicator{padding:3px 5px}.ravix-simple-stage{padding:12px}.ravix-hint{max-width:84%;overflow:hidden;text-overflow:ellipsis}.ravix-sidepanel{position:absolute;inset-block:0;inset-inline-start:0;box-shadow:10px 0 35px rgba(0,0,0,.25)}}
@media(max-width:480px){.ravix-toolbar{padding:7px 6px}.ravix-toolbar-group [data-action="zoom-out"],.ravix-toolbar-group [data-action="zoom-in"],.ravix-toolbar-group [data-action="zoom-reset"]{display:none}.ravix-workspace{height:max(62vh,430px)}.ravix-btn-text[data-action="download"]{display:none}}
@media(prefers-reduced-motion:reduce){.ravix-book *{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}

/* Ravix Book 1.3: isolate the viewer from theme-level canvas/filter/blend rules. */
.ravix-book,.ravix-book-shell,.ravix-workspace,.ravix-stage{isolation:isolate;mix-blend-mode:normal!important;filter:none!important}.ravix-book .ravix-webgl,.ravix-book .ravix-simple-stage canvas,.ravix-book .ravix-thumb canvas{mix-blend-mode:normal!important;filter:none!important;opacity:1!important}.ravix-book .ravix-webgl{background:transparent!important}.ravix-stage::before,.ravix-stage::after,.ravix-webgl::before,.ravix-webgl::after{content:none!important;display:none!important}

/* Ravix Book 1.4.1 — theme-safe overlays + full-height floating pages drawer.
 * The 1.4 overlay/drawer fix remains isolated from the 3D curl geometry and drag behavior.
 */

/* Some themes/plugins override the browser's native [hidden] behavior.
 * The empty error layer has a dark-red background, so if a theme forces it
 * visible it becomes a red veil over the entire PDF. Keep hidden UI hidden.
 */
.ravix-book [hidden],
.ravix-book .ravix-error[hidden],
.ravix-book .ravix-searchbox[hidden] {
  display: none !important;
}

/* Once loading has finished, remove the loader from layout/painting entirely.
 * This prevents any theme opacity/visibility rule from leaving a tint behind.
 */
.ravix-book .ravix-loader.is-hidden {
  display: none !important;
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
}

/* Keep actual error state working only when JS explicitly removes [hidden]. */
.ravix-book .ravix-error:not([hidden]) {
  display: flex !important;
}

/* Pages/search panel: overlay the book instead of shrinking the WebGL stage. */
.ravix-book .ravix-workspace {
  position: relative;
}

.ravix-book .ravix-sidepanel {
  position: absolute !important;
  inset-block: 0 !important;
  inset-inline-start: 0 !important;
  width: min(320px, 86vw) !important;
  max-width: min(320px, 86vw) !important;
  min-width: 0 !important;
  min-height: 0 !important;
  height: 100% !important;
  z-index: 24 !important;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  overflow: hidden !important;
  box-shadow: -10px 0 35px rgba(0,0,0,.25);
  transform: translateX(104%);
  transition: transform .24s ease, opacity .18s ease, visibility .18s ease !important;
}

.ravix-book[dir="ltr"] .ravix-sidepanel {
  transform: translateX(-104%);
  box-shadow: 10px 0 35px rgba(0,0,0,.25);
}

.ravix-book .ravix-sidepanel.is-open {
  width: min(320px, 86vw) !important;
  max-width: min(320px, 86vw) !important;
  transform: translateX(0) !important;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

/* The viewer keeps its full width while the drawer is open. */
.ravix-book .ravix-stage {
  width: 100%;
  flex: 1 1 100%;
  min-width: 0;
}

/* True vertical scrolling for every thumbnail, including long PDFs.
 * min-height:0 is essential inside a flex column, otherwise some themes make
 * the thumbnail area grow beyond the viewer instead of becoming scrollable.
 */
.ravix-book .ravix-thumbnails {
  flex: 1 1 auto !important;
  min-height: 0 !important;
  height: auto !important;
  overflow-y: auto !important;
  overflow-x: hidden !important;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
  align-content: start;
  grid-auto-rows: max-content;
  padding-bottom: 18px;
}

.ravix-book .ravix-thumb {
  min-width: 0;
  height: auto !important;
}

.ravix-book .ravix-thumb canvas {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  max-width: 100% !important;
  object-fit: contain;
}

/* Make the scrollable area visually usable on Chromium/WebKit without
 * changing the approved viewer behavior. */
.ravix-book .ravix-thumbnails::-webkit-scrollbar,
.ravix-book .ravix-search-results::-webkit-scrollbar {
  width: 8px;
}
.ravix-book .ravix-thumbnails::-webkit-scrollbar-thumb,
.ravix-book .ravix-search-results::-webkit-scrollbar-thumb {
  background: rgba(255,255,255,.22);
  border-radius: 999px;
}
.ravix-book .ravix-thumbnails::-webkit-scrollbar-track,
.ravix-book .ravix-search-results::-webkit-scrollbar-track {
  background: rgba(255,255,255,.04);
}

@media (max-width:760px) {
  .ravix-book .ravix-sidepanel {
    width: min(300px, 88vw) !important;
    max-width: min(300px, 88vw) !important;
  }
  .ravix-book .ravix-sidepanel.is-open {
    width: min(300px, 88vw) !important;
    max-width: min(300px, 88vw) !important;
  }
}


/* Ravix Book 1.4.2 — neutral paper area + touch-friendly mobile controls. */

/* The old instructional pill has been removed from markup; keep this guard for
 * cached/custom templates that may still contain it. */
.ravix-book .ravix-hint {
  display: none !important;
}

/* Keep the viewer backdrop neutral and free of decorative color wash. */
.ravix-book .ravix-workspace {
  background-image: none !important;
}

/* Touch devices: preserve vertical page scrolling while making horizontal
 * gestures available to the viewer. */
@media (max-width:760px), (pointer:coarse) {
  .ravix-book .ravix-stage {
    touch-action: pan-y pinch-zoom !important;
    overscroll-behavior-x: contain;
    cursor: default;
  }

  .ravix-book .ravix-simple-stage {
    transition: opacity .18s ease, transform .18s ease;
    will-change: transform;
  }

  .ravix-book .ravix-simple-page {
    touch-action: pan-y pinch-zoom;
  }
}

/* Ravix Book 1.4.3 — Realistic 3D on mobile uses the same Three.js page-curl engine as desktop. */
@media (max-width:760px), (pointer:coarse) {
  .ravix-book.is-mobile-3d .ravix-stage {
    touch-action: pan-y !important;
    overscroll-behavior-inline: contain;
    -webkit-user-select: none;
    user-select: none;
  }
  .ravix-book.is-mobile-3d .ravix-webgl {
    display:block !important;
    width:100% !important;
    height:100% !important;
    touch-action: pan-y !important;
  }
  .ravix-book.is-mobile-3d .ravix-simple-stage {
    display:none !important;
  }
}

/* Ravix Book 1.4.8 — Real3D-style mobile focus:
 * keep the same two-page WebGL book, let the camera focus the active sheet. */
@media (max-width:760px), (pointer:coarse) {
  .ravix-book.is-mobile-3d-focus .ravix-workspace {
    height: clamp(430px, 68svh, 680px);
    min-height: 430px;
  }
  .ravix-book.is-mobile-3d-focus .ravix-webgl {
    inset: 0 !important;
    will-change: transform;
  }
}

/* Ravix Book 1.4.11 — mobile outer breathing room only.
 * Keep the approved viewer/gesture engine untouched; just prevent the dark
 * viewer shell from touching the viewport edges on phones.
 */
@media (max-width:760px) {
  .ravix-book {
    width: calc(100% - 28px);
    max-width: calc(100% - 28px);
    margin-inline: auto;
  }

  /* Fullscreen must still occupy the whole screen. */
  .ravix-book.is-fullscreen,
  .ravix-book:fullscreen {
    width: 100vw !important;
    max-width: none !important;
    margin-inline: 0 !important;
  }
}
