{# The figure canvas. ONE workspace, and the canvas is nearly all of it. This markup used to be rendered in two places -- a figure's own page and a split pane beside the live viewer -- and the split pane is gone: composing a figure and looking down a microscope are different activities, and half a window was not enough room for either. What is left is a page whose dominant element is the figure. The permanent chrome is deliberately thin: a narrow tool rail, a tray of panels, and a topbar. Everything that ACTS on a selection is built in JavaScript into #fb_overlay_layer and floats beside what it acts on (figureContextBar.js) -- a fixed properties column would take three hundred pixels away from the thing the user is looking at, permanently, to show controls that are relevant some of the time. #fb_text_panel is not a return of that column, and the distinction is the word "permanently": it is CONTEXTUAL, present only while a text object is selected or being typed into, and gone the rest of the time. Text carries far more formatting than any other object here -- family, size, colour, weight, leading, two alignments -- and a popover deep enough to hold all of it is a popover nobody can work in. It holds formatting only; anything that can be done to any OBJECT stays on the floating bar. That bar renders from figureActions.js, one declaration of what each action is and when it applies, which the right-click menu renders from as well. It used to be four hand-built lists and they had drifted -- the menu disabled "Bring to front" where the bar offered it live on a text box and it did nothing at all. #fb_overlay_layer is the one part of this the canvas renderer never touches. FigureCanvas.render() replaces the whole of #fb_page_surface on every change, so anything that has to survive a render -- the context bar, an open text editor -- lives out here instead. #}