UPG-100's map root now carries isolation:isolate, the containing layer
Simple Research's and the country map's .rm-root already have. Without it
the legend sheet (z-index 1000) competed directly with the gallery's round
menu button (z-index 15) and painted over it on the Map view: 0 of 5 hit
points on the button, collapsed and open, en + ar.
Isolated, the whole map area stacks as one layer and the button sits above
it, sheet included (5/5, both states, en + ar), as on those maps. The
isolation is on the map root only: the poster wall's modal scrim lives in
the other pane and still covers the button when a poster is printing,
which raising the button's z-index instead would have broken.
A control in a map's own column keeps its pointer at every width; a header-form control (the
rounded-square MapControlButton) sits in the strip the rule was measured on, so below 1200px its
pointer hides again. Rebuilt doxa-maps-spa and doxa-simple-map (MapInfo's importers), tree and SRI.
The Regions header takes Big Picture's header recipe: its own MapInfoButton and ShareButton in the header form
(shape rounded-square, the vertical tabs' radius), side by side at the header's end, 28 px with a 44 px tap
target; on a phone the ⓘ takes the header's start edge, since the centred view switcher leaves no room for
two at one end. The gallery hands the tab's MapInfo to that button (trigger 'control'), with the floating ⓘ as
the fallback. The map-print progress card no longer shows the renderer's English phase messages.
The header rollout of Big Picture's header-button form. UPG-100's header
now carries a rounded-square info button to the left of a rounded-square
Share (MapInfoButton + ShareButton with shape="rounded-square", the
vertical tabs' radius, Big Picture's .rd-header-btns metrics), replacing
the round Share and the floating round info button. The tab's MapInfo
takes the header button as its trigger (tabInfo 'upg-100'
trigger:'control'), so the floating one stays off while the header one
shows, and a tap on it opens the panel.
On a phone the centred view switcher and two buttons do not share the
row, so below 481px the switcher moves to the start and the buttons keep
the end. Desktop keeps the switcher centred. Rebuilt: my-upg-100-list,
doxa-maps-spa; the tree and SRI regenerated.
In a right-to-left footer the range "10:11–15" printed as "15–10:11": the numbers of each reference now sit in a
left-to-right isolate (packet-render's own split of book and numbers). The research-map-plus-grid composite
forwards the host's mapTitle to its map, which it did not pass on before. And the packet strings are fetched
when the map mounts (when the browser is idle), so the print's 3 s wait reads them from the cache instead of
dropping the line on a slow network.
An engine can mark its credit compact only after the map is ready, and the
fold stopped polling at a credit that was present but not yet compact, so
on such a map the credit never folded. It now stops only once the credit is
compact and already folded (a drag or a tap got there first), and keeps
looking, for up to 30 s as before, while it is not yet compact.
- Two lines, each its own string, in a new catalogue area only PinHint names (line1 / line2 x 11,
taken from today's one-sentence text at each locale's own separator; that text is untouched).
- 44px tall like the ☰, 12px text, a smaller bob. Capped to the width left between two ☰ footprints
(--map-fab-beside), so it is centred with equal room and never reaches the ☰; with no ☰ it is
simply centred.
- In the ☰'s row: while the layout shows the ☰, the base is the ☰'s own 12px bottom, and the clamp
lifts it to 8px above the legend sheet, the gap the layout keeps for the ☰.
- It no longer reads --map-fab-clearance, which now carries the ☰'s scroll-tracked lift: inside the
map, beside the legend, the pill stays over it by itself, and positioned from that lift it moved
against the legend on every scroll.
The layout's round menu button now sits fixed in the bottom corner on the
start side and never moves, so the sheet no longer insets itself beside it:
it is always full width. The collapsed strip pads its start edge by
--map-fab-beside, the room the button takes, so its caret and title stay
clear of it (0 where there is no button); the detail footer, placed
absolutely, gets the same inset. Open, the sheet keeps its full width under
the button's small corner. The floating image returns to the start edge. The
'dxmaps:legend-sheet' event is still dispatched.
With the ☰ resting in its corner the row pads its footprint on both sides, leaving the field about
230px wide at 390, where the live list's 19.5px text doesn't fit the placeholder. Above 576px the field
keeps the live list's size.
The ☰ no longer rides above the legend sheet: that lift made it fly on
scroll and re-animate on a tab switch. It is now 40px, 8px from the
bottom-start corner of the layout (plus the safe area; bottom-right in
Arabic), and never moves: no lift, no scroll tracking, no transition.
It sits over the corner of the legend sheet; the collapsed sheet pads
its start edge by --map-fab-beside (now 56px = 8 + 40 + 8) so its caret
and title clear it. --map-fab-clearance stays 56px. The legend-sheet
listener, its measurement and --map-fab-sheet-inset are removed (the
sheet may keep dispatching its event). The open drawer keeps z 100000.
Both CSS copies change identically.
documentation/how-to-build-mobile-apps-from-plugins/README.md explains why Deep Research
(doxa-maps-spa, its app preset) is the plugin to wrap first: the seven production maps in one
phone-ready shell, token-free on MapLibre. It then walks the whole path: tools, the wiring check,
one command, what each step does, another plugin as the app, making it your own, and fixes.
The one command needed two small changes; the default app is unchanged:
- internal/set-app-start-page.mjs takes APP_START=<plugin>/<screen>[/<preset>] and opens that page
instead of the UPG-100 list. Unset, it behaves and marks the page exactly as before. A malformed
value, a page missing from the build, or links that would not resolve are refused, as before.
- package.json: phone:from-tree is sync, start page, verify, assemble, install from the committed
tree, with no full rebuild (bun run build refuses without BUILD_ALLOW=1).
phone:deep-research is phone:from-tree with Deep Research as the start page.
how-to.md links the guide, and two of its lines are corrected: webDir is public/dx-maps/, and
apk:debug's first step is the full build, which asks for BUILD_ALLOW=1.
Checked, with no Android tools: the start page written for doxa-maps-spa/doxa-maps-spa/app, then
the app root served and loaded in the shared browser at 390 and 1280. It showed the gallery
element, 15 tabs (the seven maps and the experimental ones) and a drawn map, with 0 console errors
and 0 failed requests. --check passed for APP_START and failed for the default until it was
restored; the default run still writes the UPG-100 page with its original marker. The Gradle and
adb steps are those bun run phone already uses; they were not run here.
The new READ THE WORD sheet reused the points page's footer, so a packet
printed three Metacamp attributions where check:packet-browser counts
exactly two (the wheel and the points). The sheet already carries its
own credit line, the scripture's; the footer goes. Rebuilt the five
bundles that compile the renderer; the tree and SRI regenerated.