diff --git a/CHANGELOG.md b/CHANGELOG.md index 99aaf3f..7f6b8fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,13 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi --- +## [1.14.1] — 2026-07-06 + +### Fixed +- **"Reading PDF… page N" indicator drifted toward the bottom of the screen on long documents** — it used `position: sticky` with a `top: 40vh` offset, whose containing block grew with every page appended during parsing, so the pill drifted downward instead of staying a fixed distance from the actual visible top of the viewport. Switched to `position: fixed`, anchored near the top regardless of document length. + +--- + ## [1.14.0] — 2026-07-06 ### Added diff --git a/VERSION b/VERSION index 850e742..63e799c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.14.0 +1.14.1 diff --git a/static/index.html b/static/index.html index af2b3d5..a31fe8c 100644 --- a/static/index.html +++ b/static/index.html @@ -10,7 +10,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -365,7 +365,7 @@ window.toggleNavTree = function(treeId, chevronId) { - + diff --git a/static/js/reader.js b/static/js/reader.js index f24df0a..322174f 100644 --- a/static/js/reader.js +++ b/static/js/reader.js @@ -609,7 +609,11 @@ function readerShowParseProgress(total) { const el = document.createElement('div'); el.className = 'reader-parsing'; el.innerHTML = ' Reading PDF… page 0 / ' + total + ''; - el.style.cssText = 'position:sticky; top:40vh; z-index:100; margin:0 auto -64px; background:var(--accent); color:#fff; padding:14px 28px; border-radius:32px; font-size:18px; display:inline-flex; align-items:center; gap:12px; box-shadow:0 6px 24px rgba(0,0,0,.35); font-weight:700;'; + // Fixed to the viewport (not sticky within the doc pane) — sticky's + // top:40vh drifted toward the bottom on long documents since its + // containing block grew with every page appended, instead of staying + // anchored a fixed distance from the actual visible top of the screen. + el.style.cssText = 'position:fixed; top:80px; left:50%; transform:translateX(-50%); z-index:100; background:var(--accent); color:#fff; padding:14px 28px; border-radius:32px; font-size:18px; display:inline-flex; align-items:center; gap:12px; box-shadow:0 6px 24px rgba(0,0,0,.35); font-weight:700;'; doc.insertBefore(el, doc.firstChild); const label = el.querySelector('span:last-child'); return {