Commit graph

3897 commits

Author SHA1 Message Date
Doxa Maps
76ba9c1a6d Simple Research's map band ends on the first screen
On a phone under DX Life's header, the band ran 32px past the fold (y132 to y876 on an 844px
screen). The legend sheet's bottom and its collapsed strip began below the fold, so a reader who
collapsed the legend could not reopen it without scrolling. The band now takes the height that is
visible below its own top, capped at the old 88svh, which is also the fallback. It is measured once,
and again only on a width change, so the URL bar showing and hiding does not resize the map.
2026-09-30 02:32:00 +00:00
Doxa Maps
29634ed075 Rebuild regions-dashboard on top of PINFLOOR
PINFLOOR also rebuilt this bundle for the PinHint credit fix, so it is rebuilt
here from the MERGED source rather than taken from either side of a textual
merge -- a picked regions-dashboard.js would keep one side's build and drop the
other's fix.
2026-09-30 00:04:44 +00:00
Doxa Maps
daeb1cc29b Merge remote-tracking branch 'origin/development' into regions/regions-print-series
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-dashboard.js
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-30 00:04:11 +00:00
Doxa Maps
072b1ff216 Regions-tab print: pass the same series as the Country Posters wall
Every country poster printed from the Regions tab read "map 1 of 0" and "This
map is one of a 0-map set called the Country Maps" -- nonsense on a printed
poster, on the demo's showcase flow (Regions -> a country -> Poster Map). Found
by the served check on FINAL.

WHY: makeCountrySheet called generateCountrySheet with no series, so
generateSheet fell back to its default { totalGroups:0, totalLists:0, index:1 }.

NOT A REGRESSION from the one-definition change, and worth recording because it
was first reported as one. The plugin-local copy regions-list used before that
change passed no series either; across it regions-list.vue changed by exactly
one line, the import. The defect has been in the Regions print since 168b1f1bd.
The Country Posters wall was never affected because it computes its own.

THE FIX computes the series exactly as the wall does (country-poster-wall.vue):
the tier is every country printed at the same sheet size, the total is that
tier's length, and the index is the country's position in it by id. It lives in
ONE place, seriesFor() in the library, rather than as a second inline copy of the
wall's formula -- the same duplication this branch's parent removed for the sheet
itself. regions-list passes the FULL country list, not a region's sublist:
indexing a region's own list would print "map 3 of 12" beside a thumbnail that
says "map 57 of 173".

PROVED, rendered with the values seriesFor returns:
  Sudan  index 1 of 173  ->  "map 1 of 173"  |  "one of a 170-map set"
  Chad   index 4 of 173  ->  "map 4 of 173"  |  "one of a 170-map set"
which is exactly the text the wall prints for the same two countries on FINAL,
measured on the served page, and what their thumbnails say. A row with no sheet
tier gets undefined, keeping the renderer's own default rather than a fabricated
position.

KNOWN, NOT CHANGED: China is the only 3x4 sheet, so its tier has one member and
it prints "map 1 of 1" / "a 0-map set" -- here AND on the wall, identically,
because this matches the wall by design. Its thumbnail says "174 of 174". Fixing
it means choosing whole-series numbering over per-tier, which is the carded
174-vs-173 question, not a freeze-night change.
2026-09-30 00:00:00 +00:00
Doxa Maps
08e7e3c681 Rebuild the 16 bundles the PinHint floor reaches, and the gallery for MapInfo's scrim, and regenerate the tree 2026-09-29 23:45:36 +00:00
Doxa Maps
b86dcc3df2 MapInfo's backdrop sits above every map's own top layer, so no pin hint floats over the dialog
PinHint's first-visit pill sits at z-index 2147482000, so with MapInfo's scrim at 1000 the pill floated
bright and clickable over the dimmed backdrop while the popup was open (gospel; measured on the live
build: the pill's centre hit the pill, not the scrim, on Cities). The scrim goes to 2147483000; the
dialog is its child, inside the scrim's stacking context, so it stays on top of the scrim. The root fix
is the top layer (<dialog>.showModal()), carded.
2026-09-29 23:45:35 +00:00
Doxa Maps
31bb8c3894 Merge exp-shepherd/pinhint-floor (the credit is a floor for the pin hint; clearance cap 120) 2026-09-29 23:38:48 +00:00
Doxa Maps
1051afd52b PinHint: the credit is a floor for the pill, wherever it has moved
The pill's clearance above the licence credit is measured in syncAttribClearance,
and that runs again only when the credit RESIZES. On a phone the credit is also
MOVED, lifted above the legend bar, without resizing. The clearance then stays at a
stale value, and the pill covers the credit. MEASURED at 390, on the shared
browser: on DX Life's home page the pill covered 36px of the 37px credit with the
clearance at 43px; on the leaf in ar, 36px.

clampIntoView now takes the credit's measured top as a floor, next to the fold and
the phone legend sheet. It already runs from the settle timers (1.2, 3 and 6 s)
and from the sheet and host observers, so it reads where the credit is, whatever
the clearance says.

Measured on a served tree, Prayer Progress rebuilt with this and the 120px cap,
at 390: the leaf and the gallery tab, in en and ar.
- before (development's tip): overlaps of 7, 36, 7 and 7px;
- after: 0px in all 4, with the pill's bottom 13px above the credit's top.

Library only. Every ProfileLoader consumer needs a rebuild to ship it.
2026-09-29 23:36:28 +00:00
Doxa Maps
5484b844c6 Merge remote-tracking branch 'origin/development' into regions/country-sheet-onedef 2026-09-29 23:34:15 +00:00
Doxa Maps
b3b06a29d8 PinHint: the credit clearance may reach 120px, not 72
The clearance is the strip from the credit's top to the box's bottom edge, capped
so a mis-measure cannot throw the pill up the map. The cap was 72px. On a 390px
phone MapLibre's credit wraps to two lines, and on the leaf it sits above the
bottom bar, 90px up. With the selector now finding it, the clearance hit the cap
and the pill still overlapped the credit by 6px, in en and ar (was 35px). The cap
becomes 120px: the measured need fits, and a runaway is still bounded.

Library only. Every ProfileLoader consumer needs a rebuild to ship it.
2026-09-29 23:31:26 +00:00
Doxa Maps
99783ff0f7 Merge remote-tracking branch 'origin/development' into bundler-2/rm-unmount
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/doxa-research-map/doxa-research-map.js
#	public/dx-maps/doxa-research-map/research-map/index.html
#	public/dx-maps/doxa-research-map/research-map/maplibre/index.html
#	public/dx-maps/manifest.json
2026-09-29 23:29:55 +00:00
Doxa Maps
2eb5b38027 Merge origin/development into exp-shepherd/pp-quiet-cancel at the landing turn 2026-09-29 23:22:56 +00:00
Doxa Maps
087f562e04 Reshoot the 174 country previews with the region hue and ink badges
The poster walls' card THUMBNAILS are stored WebP files, not generated at the
click, and all 174 were last shot on 09-25 -- teal. Since the region hue
landed, the PRINT has been hued, so both Country Posters and the Regions tab
showed a teal thumbnail above a hued poster. The Experimental section shows on
Deep Research, so that mismatch was visible.

Shot in one pass on the shared browser: 174 of 174, 0 failed, 0 retries,
23:00:37-23:10:07Z, one engine, DSF 2. Measured by the shooter: none blank (at
least 1,000 distinct colours each), and the count of sheets by their --zc hue
matches the region census exactly -- 41 Africa, 27 Asia, 27 Europe, 21 Middle
East, 18 Other, 17 Oceania, 14 North America, 9 Latin America. Asia is 27, not
28, because India has no sheet.

★ ALL 174 CHANGE, and that is the check that matters here. make-previews used to
write one directory too high (library/plugin-designs/..., library/data/posters)
while reporting success, so a reshoot could complete, look complete, and change
no served file at all. With that fixed, 174 of 174 source thumbnails, 174 of
174 full-size sources and 174 of 174 served previews differ from development,
with 0 untracked strays.

China was regenerated first with the whole-series count: 'map 174 of 174' and
'one of a 170-map set', where it had printed 'map 1 of 1' and 'a 0-map set'.
2026-09-29 23:18:26 +00:00
Doxa Maps
476989bab5 Merge remote-tracking branch 'origin/development' into regions/country-sheet-onedef
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-29 23:17:40 +00:00
Doxa Maps
2ddd8dc1e8 Merge origin/development into exp-shepherd/pp-quiet-cancel, and rebuild doxa-simple-map on the merged source 2026-09-29 23:17:05 +00:00
Doxa Maps
67fed8b79f Merge remote-tracking branch 'origin/development' into bundler-2/bp-grid-locale 2026-09-29 23:15:51 +00:00
Doxa Maps
a6372eea88 Regenerate the tree and SRI after merging development 2026-09-29 23:10:33 +00:00
Doxa Maps
c314e9421a Merge origin/development into studio/batch 2026-09-29 23:10:22 +00:00
Doxa Maps
0bf87bb50f Rebuild doxa-simple-map for the quiet cancel, and regenerate the tree 2026-09-29 23:08:17 +00:00
Doxa Maps
e4b5a3d1b1 Prayer Progress released mid-start no longer reports a failed map
Prayer Progress is a heavy gallery tab: switching away empties its slot. If the map
is still starting, initializeMap returns silently (useMapInstance's liveness
checks) and leaves map.value null. onMounted then logged "[doxa-simple-map] Map
failed to initialize, check token and container": a console error that blamed
the token for a tab switch.

Measured on development's tip, served from its committed tree, on the shared
browser, a phone in Arabic (pp-fastswitch.mjs): switched away 150 and 500 ms after
selecting the tab, 2 runs in 10 logged it. The control runs, switched away after a
full start or never switched away, logged nothing.

Same shape as the research map's quiet cancel (0c263fb60): when the map's
container is gone or detached, both failure paths return quietly. A mounted pane
that really fails still logs.
2026-09-29 23:08:17 +00:00
Doxa Maps
aaa4b8b690 A poster tier run can be told the whole series size
China's sheet printed 'map 1 of 1' and 'one of a 0-map set'. The cause is that
generate.mjs derives the series facts from the zones THIS run built --
Object.assign(SERIES, seriesFacts(zones)) -- and the two sheet tiers are separate
runs. The 3x4 tier is China alone, so totalLists came out 1, and the body
sentence rounds it (Math.round(1/10)*10 = 0) into a 0-map set.

SERIES_TOTAL overrides the derived count so a tier run can state the size of the
whole series. Regenerated China with SERIES_TOTAL=174 SERIES_INDEX=174: it now
reads 'map 174 of 174' and 'one of a 170-map set', which is what the other 173
sheets' body text already says (174 and 173 both round to 170).

NOT a defect, and worth recording because it reads like one: the header's exact
count and the body's rounded one are the SAME number by design. 173 exact and
170 approximate are not two answers.

The 173 3x3 sheets still say 'of 173' where the set is 174. Regenerating them
plus a full reshoot is about 28 minutes against tonight's hard switch, the body
text is identical either way, and the difference is only visible with two sheets
side by side. Run BOTH tiers with SERIES_TOTAL=174 to close it.
2026-09-29 23:07:20 +00:00
Doxa Maps
0cff02817f Rebuild regions-dashboard after merging development
41 commits of development merged; the merge conflicted only on built output,
resolved by regenerating rather than picking a side, so neither the countrySheet
region forwarding nor development's library changes are lost.
2026-09-29 23:02:44 +00:00
Doxa Maps
baa60ba647 Merge remote-tracking branch 'origin/development' into regions/country-sheet-onedef
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-dashboard.js
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-29 22:59:27 +00:00
Doxa Maps
f3b1566c76 Rebuild doxa-maps-spa after the MapInfo pointer rule
MapInfo is imported by the gallery, so the rule is compiled into this bundle.
landing-preconditions step 4 named doxa-maps-spa alone; built with BUNDLE, then
tree, then fix:sri.
2026-09-29 22:51:12 +00:00
Doxa Maps
2d764b740d Big Picture's info button sits above its filter bar, so it can be clicked
At top 46px the button lay in the empty end of Big Picture's filter area, but that bar is a
positioned layer (z-index 55) painted over the button (z-index 20): nothing opened on click (rega,
1440, en and ar). The filter area wraps with width, so no spot below it is free at every width (at
1024 the stats row moves under a fixed offset). pos.raise lifts the BUTTON to z-index 60; the one-time
pointer stays under the bar, so no filter is covered even visually. Measured on the built tree: no
interactive element or text under the button, the button topmost at its centre, and a click opens the
popup, at 1440, 1024 and 800, en and ar.
2026-09-29 22:48:21 +00:00
Doxa Maps
3b0fb958e1 MapInfo: the one-time nudge is desktop-only, at a measured threshold
The "What can this map do?" pointer is anchored beside the ⓘ and extends ~213px
INWARD, across whatever the tab puts in its top strip. Worst overlap per width,
measured on Deep Research on the shared browser, on 99c22caf7:

     390   Regions "Region Dashboards" 1416px^2   UPG-100 1428px^2
     768   Cities legend 6560   Gospel legend 6560 + input 6240   Regions 4200
     900   Cities legend 2432   Gospel legend 2496 + input 2176   Regions 3696
    1024   Cities CLEAN         Gospel CLEAN                      Regions 2100
    1200   CLEAN                CLEAN                             CLEAN
    1440   CLEAN                CLEAN                             CLEAN

★ IT IS NOT A PHONE PROBLEM, which is how it was first reported and how I first
fixed it. It persists to 1024 and only clears near 1200, so the max-width:600px
version I wrote first would have left 768, 900 and 1024 broken on four tabs.
Two things found that: gospel counted PANELS (.gm-legend/.gm-sheet) as well as
controls -- a control-only probe misses a legend entirely -- and upg100 measured
the same shape on their own tab (768 over "Prayer Resources" and "Map", 1024 over
"Map", clear at 1200+), in en and ar.

★ ARABIC IS MEASURED, not argued. My first attempt used ?lang=ar, which does not
switch the locale -- the page stayed dir=ltr and I reported that run as invalid
rather than as an ar pass. Via DX Life's /ar/ route (dir=rtl confirmed) the
pointer is hidden and clean at 390, 768 and 1024, and at 1440 it mirrors to the
start side (x=104) and is clean there too.

★ TWO OTHER SHAPES WERE MEASURED FIRST AND BOTH WERE WORSE. Stacking it below the
button traded one collision for five: Gospel's "Resources found" chip (2010px^2)
plus the zoom +/- of Prayer Progress, Big Picture and Simple Research. Hiding
only its text shrank it to 30px but still left 675px^2 on "Region Dashboards" and
900px^2 on Gospel's search input.

⚠ NOT A PLACEMENT CHANGE, and an earlier draft of this got it wrong. It also
pinned the button's inline side at narrow widths; studio's pos.narrow values have
since landed and the buttons now sit at x=8, 12, 294 and 346 across the seven
tabs at 390. A pinned inset-inline-* here wins by specificity and would have
silently flattened every one of them. The button is placement's business; this
rule is only about the hint. 0 added lines declare --map-info-side; 0 touch
.mi-btn.

Its own block rather than the existing 600px one, which also full-screens the
dialog and has nothing to do with this.

VERIFIED AFTER THE CHANGE, en and ar: pointer hidden and 0 overlaps at 390, 768
and 1024 on Cities, Gospel, Regions and UPG-100; present and clean at 1200 and
1440.

NOT FIXED HERE: at 1440 Big Picture's pointer lies over the Religion filter by
1050px^2. Stacking it below the button there does not clear it -- it relocates it
to "Adopted" 561 + "1%" 425. The only single rule that clears that too is hiding
the pointer at every width, which deletes the affordance where it does fit. So
BP-1440 wants a per-tab placement value or a known-minor ruling; it is
pointer-events:none, so the filter still opens.
2026-09-29 22:45:49 +00:00
Doxa Maps
080dcb75ed Rebuild doxa-research-map for the quiet cancel 2026-09-29 22:45:32 +00:00
Doxa Maps
0c263fb601 A research map released mid-start no longer reports a failed map
When the reader switches tab while the research map is still starting, the gallery releases the
pane, and initializeMap returns quietly with no map. The handler logged that as "Map failed to
initialize — check token and container", so the console error landed in whichever tab was then open
and blamed the token. A released container is now a quiet cancel.
2026-09-29 22:45:32 +00:00
Doxa Maps
e3c631932f Merge origin/development into studio/batch (upg100's example images) 2026-09-29 22:33:34 +00:00
Doxa Maps
89794dc883 Rebuild the 17 bundles the PinHint fix and the gallery's example links reach, and regenerate the tree 2026-09-29 22:33:12 +00:00
Doxa Maps
1c5a6bd589 On a phone, Cities' info button takes the corner above its zoom column, like Gospel's
At 390 Cities' legend spans the same width as Gospel's (344px), and side 56px put the button on
the end of the legend title's first line (gospel's measurement; a probe that also counts visible
text under the button reports the same, 236px2). narrow side 4px, as Gospel.
2026-09-29 22:28:52 +00:00
Doxa Maps
09bb493718 Rebuild dashboard-plus-grid for the grid's language 2026-09-29 22:26:50 +00:00
Doxa Maps
f4c026501d Big Picture's grid took its language from the page URL, not from Big Picture
The grid is mounted inside Big Picture as a component, so it shares Big Picture's host, and its
direction is written onto Big Picture itself. Its profile-config carried only the list, so its
language fell through to ?lang= on the page. An English page opened with ?lang=ar therefore laid
the whole of Big Picture out right-to-left, English included.

The grid now receives the host's language under both keys, locale and lang.
2026-09-29 22:26:49 +00:00
Doxa Maps
838f6c14b6 Merge remote-tracking branch 'origin/development' into upg100/examples 2026-09-29 22:25:44 +00:00
Doxa Maps
8e081cea44 UPG-100's and Simple Research's popups show the packet and the card deck
UPG-100's info popup lists its Middle East Core poster, then the full packet's 12 pages and the 70-card
deck (upg100's pre-generated files). Simple Research shows the same 12 pages, captioned "Example
packet: Middle East Core": same renderer, method and 'full' variant, but a UPG-100 zone's data, so it
is labelled as an example rather than passed off as a Simple Research selection.
2026-09-29 22:18:35 +00:00
Doxa Maps
c8fde78522 Merge remote-tracking branch 'origin/development' into bundler-2/dirclear-ready 2026-09-29 22:18:12 +00:00
Doxa Maps
04cf5ea9e6 Merge exp-shepherd/pinhint-maplibre (PinHint clears MapLibre's credit) 2026-09-29 22:17:54 +00:00
Doxa Maps
e704bdbbf8 Merge remote-tracking branch 'origin/development' into upg100/examples 2026-09-29 22:17:24 +00:00
Doxa Maps
99c22caf72 Merge origin/development into studio/examples 2026-09-29 22:14:22 +00:00
Doxa Maps
9c5ac8094b The UPG-100 info popup's examples: Middle East Core's packet pages and card deck
Twelve packet pages and seventy prayer cards, rendered from the current
renderers (people-based knows-Christ page, page-filling grids and charts,
sharp card photos) and shot in the fleet's shared browser: pages at 1500px
reduced to 1200px wide, cards at 480x672, WebP q80, 2.8 MB. They ship under
previews/examples/middle-east-core/, which the existing previews staging
copies into the tree, and the popup's pages and deck examples read them.
Middle East Core is the packet covering the most people in unengaged groups
(IMB GSEC 0-1).
2026-09-29 22:07:17 +00:00
Doxa Maps
e40077a50c PinHint clears MapLibre's credit too, so the pill stops covering it on phones
syncAttribClearance() measured the strip it must clear from Mapbox's credit
(.mapboxgl-ctrl-attrib) and our own (.doxa-attribution), never from MapLibre's
(.maplibregl-ctrl-attrib). MapLibre is the default engine. With no match, the
clearance stayed at the 20px fallback. On a phone the MapLibre credit wraps to two
lines, and the "Tap a coloured dot" pill covered it: a licence-required credit
hidden on every map that mounts the hint.

Measured at 390x844 on DX Life's home page (Prayer Progress), on the shared
browser: MapLibre en and ar, pill over the credit by 35px with the clearance at
20px; Mapbox, clearance 72px and 0px overlap.

The selector now also takes .maplibregl-ctrl-bottom-right .maplibregl-ctrl-attrib
and the MapLibre form of our own credit line. The existing measure (the strip from
the credit's top to the box's bottom) and its ResizeObserver then apply unchanged.
Proved on the live DOM, inside the map's shadow root: on MapLibre the old selector
finds nothing and the new one finds the credit; on Mapbox both find it.

Library only. Every ProfileLoader consumer needs a rebuild to ship it.
2026-09-29 22:03:22 +00:00
Doxa Maps
b9514d68d3 On a phone the info button takes each tab's free corner
At 390 the desktop offsets landed on each composite's own top chrome: Regions' and UPG-100's view
selector and Gospel's search box (probe, en and ar). A tab's pos can now carry `narrow`, laid over
it while the shell is narrow (max-width:760px): Regions and UPG-100 put the button at the START of
their strip, which is empty on a phone; Gospel takes the corner above its zoom column. The same
probe then reports no interactive element under the button on any tab, 1440 and 390, en and ar.
The one-time pointer still lies over the selector or search box until first opened; it takes no
clicks (pointer-events:none).
2026-09-29 22:02:08 +00:00
Doxa Maps
a40f5ac686 Merge remote-tracking branch 'origin/development' into upg100/fill-2 2026-09-29 21:58:39 +00:00
Doxa Maps
c79e26a089 Middle East Core's stored poster and preview, regenerated with tonight's renderer
The stored poster (data/posters) and its wall preview predated the ink pin
badge: 57 pin numbers drawn white on the zone hue, 1.44:1. They are what the
UPG-100 info popup shows and opens ("Open full size"). Regenerated from the
current poster-render in its stored 3x4 format (1500x2000) and published;
the pin numbers are now white on #1c1c17, 17.10:1. The preview and the
1500px download are made from a 3000px shot of the regenerated sheet with
make-previews' own sizes and qualities (a 3x4 sheet now makes a 420x560
thumbnail; the wall letterboxes it). The other 27 stored zone posters are
fallback-only and follow after the demo.
2026-09-29 21:50:51 +00:00
Doxa Maps
81a84138c9 Regions and UPG-100: the info button sits clear of their Share button too
A geometry probe (every visible interactive element in every shadow root, intersected with the
button's box, 7 tabs in en and ar at 1440) found the default position covering each composite's Share
button exactly, which no screenshot showed. They take side 56px like the map tabs. With that, the
probe reports no element under the button on any tab in either direction; before this branch it
reported Zoom in/out under it on Prayer Progress, Cities and Gospel and Share on Big Picture.
2026-09-29 21:40:54 +00:00
Doxa Maps
30ca27a84f README: Deep Research as DX Life now publishes it, and development as the branch work lands on
From dx-maps' measurement on development 17d1a07cf; docs only.
Required, because the README contradicted the final page layout (/research shows the research map by
itself, with a link to /deep-research; /deep-research holds the gallery):
- The drop-in paragraph said DX Life's /research is filled with the Research Gallery. It now says the
  drop-in copies the folder into public/dx-maps, and /research shows the research map with a link to
  /deep-research, which holds the gallery as Deep Research.
- The JavaScript-embed section:
  - heading, lead and "one embed replaces the research map" now describe /deep-research;
  - the screenshot shows an earlier build (the gallery on DX Life's research page, the tabs in the old
    order), so its alt text and a caption now say so. A reshoot is rega's.
Also, each a one-line factual fix (the README's structure is unchanged):
- The name, once where the gallery is introduced: the Research Gallery, which DX Life publishes as Deep
  Research. The other 22 mentions and the headings, whose anchors other text links to, are unchanged.
- 7 vs 8 production maps: the eighth is the country map, for DX Life's country pages, not in the gallery.
- development is where work lands, and main moves only on a publish: the goals table, the swarm
  section's two sentences, and the glossary.
- Both production grids now follow the gallery's section order (Prayer Progress before UPG-100 List).
- The embed heading's status reads "✅ works today", the README's own legend for ✅, instead of "production":
  the page is not live on DX Life's production site yet (dx-maps' pre-read).
check:readme-size, check:doc-scripts, check:no-new-driver-references and check:link-coverage pass.
2026-09-29 21:37:17 +00:00
Doxa Maps
9013d5cf46 Rebuild the five packet consumers for the page-fill re-shape, and regenerate the tree 2026-09-29 21:36:53 +00:00
Doxa Maps
190e7665a7 The packet's low pages fill the sheet: measured, then re-shaped
Measured in a browser (content's bounding box against each sheet, en/de/ru):
the knows-Christ grid ended 72% of the way down its sheet (478px of blank
paper below), and the two single-chart sets pages 60% and 69% (702px and
525px). The same 5,200 boxes now lay out 65 x 80 in 14.5px squares, which
spends the height on bigger boxes; the sets charts (SVG, so they scale) grow
from 960px to 1320px (bounded, nothing below it) and 1240px (centered, room
for its ring legend, which widens with it). Now 88%, 79% and 84% of the
height, with no page clipped in en, de or ru. The width classes are hung on
the row (set-solo-<kind>), not on the page, so no page class name enters the
shared stylesheet.
2026-09-29 21:34:14 +00:00
Doxa Maps
c0d9592149 make-previews wrote every WebP one directory too high
REPO was os.path.join(HERE, '..', '..'), and HERE is <root>/library/scripts/posters
-- so REPO resolved to <root>/library, not the repo root. Both outputs went to
directories nothing reads and nothing serves:

    library/plugin-designs/<profile>/assets/previews/   instead of plugin-designs/...
    library/data/posters/                              instead of data/posters/

★ IT REPORTED SUCCESS WHILE DOING NOTHING USEFUL, which is what makes it worth a
commit of its own. The script printed "[make-previews] N posters" and its two
destination lines, wrote genuine WebPs, and exited 0. Only the files were in a
tree no build stages, so the SERVED previews never changed.

MEASURED, on one poster, before and after:
  before  the regenerated thumbnail was byte-identical to the shipped one
          (same sha256, git status clean) -- 0 pixels changed
  after   sha differs, git sees both files modified, and 52.9% of the
          thumbnail's pixels differ (21.1% by more than 40/255, max delta 255)

Found by DRY-RUNNING this step on a single already-shot poster instead of
discovering it after a 174-sheet reshoot. Without the fix that reshoot would have
produced 174 correct WebPs in the wrong tree, the walls would have kept their old
teal thumbnails, and the landing would have looked complete: a teal thumbnail
over a hued print, which is the exact defect the reshoot exists to remove.

The three-level form is what the other scripts in this folder already use to
reach the root; this one was the odd one out.
2026-09-29 21:29:44 +00:00
Doxa Maps
92b90d0767 Rebuild doxa-maps-spa on the merged source, and regenerate the tree 2026-09-29 21:28:20 +00:00