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 && (