diff --git a/src/BloomBrowserUI/bookEdit/toolbox/readers/leveledReader/LeveledReaderToolControls.tsx b/src/BloomBrowserUI/bookEdit/toolbox/readers/leveledReader/LeveledReaderToolControls.tsx
index 32742dcbd399..cc0aec74da2f 100644
--- a/src/BloomBrowserUI/bookEdit/toolbox/readers/leveledReader/LeveledReaderToolControls.tsx
+++ b/src/BloomBrowserUI/bookEdit/toolbox/readers/leveledReader/LeveledReaderToolControls.tsx
@@ -623,6 +623,14 @@ export const LeveledReaderToolControls: FunctionComponent = () => {
flex: 1 1 auto;
min-height: 0;
overflow-x: hidden;
+ // Stated rather than left implicit: this is what keeps
+ // everything reachable in a panel too short for the nav,
+ // the scrolling region's floor and the control block —
+ // the whole tool scrolls. (It is what overflow-x: hidden
+ // alone already computes to, since a non-visible axis
+ // forces the other to auto, but the fallback matters
+ // enough not to leave it as a side effect.)
+ overflow-y: auto;
// A single horizontal padding on the whole panel keeps
// every row (including "Level x of y") on one left edge,
// instead of each section supplying its own left margin.
@@ -631,53 +639,87 @@ export const LeveledReaderToolControls: FunctionComponent = () => {
>
{showTool && (
<>
+ {/* "Level x of y" and its arrows stay pinned at the top,
+ outside the scrolling region below, just as the
+ Decodable Reader's stage nav does. (BL-16585) */}
- {/* The over-level warning banner and the within/over
- legend only make sense when at least one measure is
- actually over the current level's limit. */}
- {isBookOverLevel(model, bookStats) && (
- <>
-
+ {/* The over-level warning banner and the within/over
+ legend only make sense when at least one measure
+ is actually over the current level's limit. */}
+ {isBookOverLevel(model, bookStats) && (
+ <>
+
+
+ >
+ )}
+
+ {levelReminders.length > 0 && (
+
-
- >
- )}
-
- {levelReminders.length > 0 && (
+ )}
- )}
-
+
>
)}
{/* Bottom group, top to bottom: Copy Book Stats, the "Book is
- Leveled" toggle, then the Set Up Levels button last. When
- the tool content is showing, margin-top:auto pushes the
- group to the bottom; it scrolls with the content when the
- panel overflows. The toggle stays mounted even when the
- content is hidden so the user can turn the book back into a
- leveled reader. */}
+ Leveled" toggle, then the Set Up Levels button last. It
+ never shrinks or scrolls: the scrolling region above takes
+ all the leftover height, so this group stays parked at the
+ bottom of the panel however tall the stats get. The toggle
+ stays mounted even when the content is hidden so the user
+ can turn the book back into a leveled reader. */}
{showTool && (