/* ---- v17: single-owner PDF scroll/render — stable geometry, absolute canvas stack, paper shells ---- */

#reader.v17-pdf #pdfView .page,
#reader.v17-pdf #pdfView .page.ready,
#reader.v17-pdf #pdfView .page:not(.ready) {
  position: relative;
  background: var(--paper) !important;
  /* NEVER change margins while scrolling — v15's 6→4px thrash is a root cause of jank */
  margin: 0 auto 6px !important;
  box-shadow: 0 1px 1px rgba(0,0,0,.05);
  animation: none;
  contain: layout paint style;
}
#reader.v17-pdf.scrolling #pdfView .page,
#reader.v17-pdf.v14-freeze #pdfView .page,
#reader.v17-pdf.v17-freeze #pdfView .page {
  margin-bottom: 6px !important;
  box-shadow: none !important;
}
[data-theme=dark] #reader.v17-pdf #pdfView .page {
  background: var(--paper) !important;
}

/* paper placeholder under canvases */
#reader.v17-pdf #pdfView .page > .ph {
  position: absolute; inset: 0; z-index: 0; pointer-events: none; border-radius: inherit;
  background-color: var(--paper);
  background-size: cover;
  background-position: center top;
  background-repeat: no-repeat;
}
#reader.v17-pdf #pdfView .page > .ph:not(.has-thumb) {
  background-image: linear-gradient(
    90deg,
    color-mix(in srgb, var(--fg) 3%, var(--paper)) 0%,
    color-mix(in srgb, var(--fg) 7%, var(--paper)) 45%,
    color-mix(in srgb, var(--fg) 3%, var(--paper)) 90%
  );
  background-size: 200% 100%;
  animation: v17PhShimmer 1.2s ease-in-out infinite;
}
#reader.v17-pdf #pdfView .page > .ph.has-thumb { animation: none; opacity: 1; }
#reader.v17-pdf #pdfView .page.ready > .ph:not(.has-thumb) { animation: none; opacity: 0; transition: opacity .15s; }

@keyframes v17PhShimmer {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}

/* CRITICAL: absolute canvases so crossfade never stretches page height (v16 relative stack bug) */
#reader.v17-pdf #pdfView .page > canvas {
  position: absolute !important;
  inset: 0;
  z-index: 1;
  display: block;
  width: 100% !important;
  height: 100% !important;
  margin: 0 !important;
  opacity: 0;
  transition: opacity .14s ease;
  pointer-events: none;
}
#reader.v17-pdf #pdfView .page > canvas.shown,
#reader.v17-pdf #pdfView .page > canvas.is-visible {
  opacity: 1;
}
#reader.v17-pdf #pdfView .page > canvas.incoming { opacity: 0; }
#reader.v17-pdf #pdfView .page > canvas.lite { filter: none !important; }

#reader.v17-pdf #pdfView .page .hlLayer { z-index: 2; }
#reader.v17-pdf #pdfView .page .textLayer { z-index: 3; position: absolute; inset: 0; }

/* freeze expensive paint (own class + keep v14 class for compat) */
#reader.v17-freeze .rbar,
#reader.v17-freeze .rfoot,
#reader.v17-freeze .minibar,
#reader.v14-freeze .rbar,
#reader.v14-freeze .rfoot,
#reader.v14-freeze .minibar {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  transition: none !important;
  box-shadow: none !important;
}
#reader.v17-freeze .hlLayer,
#reader.v14-freeze .hlLayer { visibility: hidden; }
#reader.v17-freeze .textLayer,
#reader.v14-freeze .textLayer { visibility: hidden; }
#reader.v17-freeze .page canvas,
#reader.v14-freeze .page canvas { filter: none !important; }

#reader.v17-pdf #pdfView {
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-y: contain;
}

@media (prefers-reduced-motion: reduce) {
  #reader.v17-pdf #pdfView .page > canvas { transition: none; }
}
