Commit graph

1888 commits

Author SHA1 Message Date
Doxa Maps
0a4e539935 Bible Posters: consume the shared poster size table
Replace the temporary local size mirror with the shared ladder
(library/constants/posterSizes.js via resolvePosterSize): the plugin selects its
five keys (paper, 36x36, 36x60, 66x66, 60x96), mapping widthIn/heightIn from the
entry's inches and the panel count from its sheets, and keeps its own
locale-neutral dimension labels until the shared picker lands. One remaining
comment reference is neutralized.
2026-10-01 08:52:21 +00:00
Doxa Maps
2da7f15ec7 Bible Posters: neutral source comments + CSP note for the text host
- Reword source comments in agent-written, neutral terms and drop internal task-file
  paths, so shipped source cites no process documents or attributions (passes
  check:no-new-driver-references).
- documentation/how-to.md: note that Bible Posters needs https://bible.helloao.org in
  connect-src (text is fetched per book at render time; none is bundled), so a host
  under a strict CSP does not silently block it.
2026-10-01 08:44:14 +00:00
Doxa Maps
cdf0df268d Bible Posters: language-tagged columns, atomic book fetch, cleaner credits
Address studio's 5B nits (non-blocking, folded in before the first render):
- Tag each translation with a BCP-47 code and set lang on the poster (html + body)
  so hyphens:auto works in narrow justified columns — removes rivers on Latin text.
- Fetch a whole book atomically: a single chapter failure now aborts the sibling
  requests and surfaces the error, instead of leaving a half book.
- Drop the English word "via" from the per-poster credit lines (a bare separator).
- Correct the entry comment: defineMapElement installs i18n; the hook only adds provides.
2026-10-01 08:44:14 +00:00
Doxa Maps
5c44b3cdcd Add Bible Posters plugin: a whole book of the Bible on one poster
A new experimental generator (Posterverse) that renders an ENTIRE BOOK of the Bible
in justified, phone-width columns with a bold book-name header, in the languages of
the unreached people groups. Text is fetched at render time from public-domain
translations via the Free Use Bible API; no Bibles are stored in the repo or public/.

v1 offers strict public-domain texts only, with a per-poster credit line: the World
English Bible plus the prayer packet's Reina-Valera 1909, Ostervald, Luther 1912,
Synodal and Van Dyck (Arabic, right-to-left). Book, text-language and size pickers;
the generator reports which size fits a book at a readable type size, and standard
paper is honestly shown as too small for a whole book. Interface strings are
localized in all 11 locales. Starts from the 12 books the UPG-100 packet cites.
2026-10-01 08:44:14 +00:00
Doxa Maps
1e925c4d71 Gospel checks: the field-card shards are expected from the roster, not read as one file, and German 'Ring' is the same word on purpose 2026-10-01 08:37:17 +00:00
Doxa Maps
70ea389db3 Docs: "reusable by default" in the library guides, and Deep Research by its name
- library/components/WARNING.md, library/dashboards/README.md and
  documentation/contributing/README.md taught "graduate into the library at the second
  consumer". They now teach the plugin-designer skill's rule (section 3): a component that
  could serve more than one map is built once in library/, driven by props, and landed through
  the build owner; one-off or experimental pieces stay in a map's folder; a new pattern is a
  pilot, then approved, then rolled out. The contributing guide's "full reasoning" link pointed
  to an index without it; it now points to the skill.
- The app shell doxa-maps-spa is labelled Deep Research. Ten docs still called it the Research
  Gallery (15 mentions): DEPLOY.md, the desktop how-to, embeddability, develop-a-plugin,
  reference-universal-props, reference.md, the shell's EMBED.md, and the plugin-designer skill
  with two of its references. Identifiers (doxa-maps-spa, branch and route names) are unchanged;
  README.md is not touched.
2026-10-01 08:27:04 +00:00
Doxa Maps
8896ad2130 Merge remote-tracking branch 'origin/development' into upg100/wall-count
# Conflicts:
#	internal/check-batch-selection-export.mjs
#	package.json
#	plugin-designs/my-upg-100-list/data/selection-export.js
#	plugin-designs/my-upg-100-list/poster-wall.vue
#	plugin-designs/my-upg-100-list/upg-100-list.vue
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-10-01 08:24:48 +00:00
Doxa Maps
a1c74004a0 Merge development (353bf078c) into the whole-India landing: package.json gates unioned (check:side-lanes added), poster-render re-pinned on the merged file 2026-10-01 08:24:45 +00:00
Doxa Maps
8df007818f Merge remote-tracking branch 'origin/development' into prayer-progress-plugin/pin-opacity
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/doxa-simple-map/doxa-simple-map.js
#	public/dx-maps/doxa-simple-map/doxa-simple-map/adoption/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/engagement/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/prayer/index.html
#	public/dx-maps/manifest.json
2026-10-01 08:23:57 +00:00
Doxa Maps
2bcf371f72 Wall of People Groups: the cornerstone line stays on the poster, as a dedication under the title
The footer is scripture only (the journey and Numbers 6:24). The poster's one line of its own words, "Jesus
Christ is the cornerstone, and we are living stones. These people groups are the reward of his suffering.
Take up our priestly calling: bless them in his name, and join the global family in prayer.", now sits in
the header, in small italic under the DOXA line, translated as before (wall.posterClosing). The header
gains one line; the title and the DOXA line keep their size. Measured on the print at every size in en
and ar: 0 overflowing blocks, the dedication included.
2026-10-01 07:47:28 +00:00
Doxa Maps
699d77167d Wall of People Groups, Social: the sign-up link opens in the reader's language
pray.doxa.life serves each group's page under /<lc>/ for ar, de, es, fr, hi, it, pt, ro, ru and zh (read
from its routes; /ar/abu-junuk and /ro/abu-junuk answer 200, and the Arabic page carries the same
#signup-section), and English unprefixed. The heart dialog's "Sign up to pray" link now takes the wall's
locale prefix, so an Arabic reader lands on the Arabic sign-up (measured: ar ->
https://pray.doxa.life/ar/abu-junuk#signup-section, en -> https://pray.doxa.life/abu-junuk#signup-section).
2026-10-01 07:33:34 +00:00
Doxa Maps
d01087a9cc Country Posters: the header share button is a rounded square, like Big Picture's and UPG 100's 2026-10-01 07:32:43 +00:00
Doxa Maps
852437e981 Merge remote-tracking branch 'origin/development' into upg100/state-packet 2026-10-01 06:32:09 +00:00
Doxa Maps
8d63a0a04d Poster Design: draw India at 5.5 x 5.5 ft and 3 x 5 ft too
countrySheet.js now lets a requested side-lane format win over a large
country's default sheet, so the shared path draws India at 66x66 and
36x60 as well as 60x96. The two cards that were listed but not drawn now
draw the real whole-India poster at their own size, and the note that
said no country printed at those sizes (missing.largeFormat, 11 locales)
is removed: nothing refers to it.
2026-10-01 06:07:49 +00:00
Doxa Maps
6d0253d909 countrySheet: a requested large size wins; LARGE_SHEETS only supplies India's 60x96 default
India can print at 60x96 (the default), 66x66 or 36x60. makeCountrySheet used to map any non-packet request to the
default, so a 66x66 or 36x60 request drew the 60x96 sheet. sheetFormatFor(item, format) (exported, pure) now keeps
a requested size the country can print at, falls back to its default otherwise, keeps a packet page a page, and
returns exactly what was asked for every other country.
check:country-sheet-one-path asserts that table (India 66x66/36x60/60x96/letter/3x4/packet; Nepal 3x3/letter;
China 3x4), with two poisons: India ignoring a requested 66x66, and a packet page turned into a large sheet.
2026-10-01 06:07:48 +00:00
Doxa Maps
cb5200d296 Poster Design: the catalogue lists the large side-lane sheets, and draws India's 5 x 8 ft one
poster-render gains three side-lane formats (60x96, 66x66, 36x60), and
check:poster-design-catalogue requires SHEET_FORMATS to list exactly what
FORMATS defines, so it failed on those three. They are now listed, near
the top after the 3 x 3 sheet, with India as their sample: India is the
one country countrySheet.js prints on a large sheet (LARGE_SHEETS).

map-sheet.country.60x96 draws through makeCountrySheet, the one country
sheet path, so its card shows the real whole-India poster. 66x66 and
36x60 are listed but not drawn: no country prints at those sizes yet, and
the shared path would hand back India's 5 x 8 ft sheet under their label.
Their details say so (posterDesign.missing.largeFormat, 11 locales).

The check fails on the three formats without this commit and passes with
it.
2026-10-01 06:05:41 +00:00
Doxa Maps
1af359ac42 poster-render: side-lane CSS adds no byte to other formats; photos only from the known photo hosts
5B fixes on the side-lane mode:
- The side-lane styles' template slot sat on its own line, so every OTHER format's page gained one newline. It is
  now joined onto </style>, emitting nothing at all off side lanes.
- A photo is drawn only over https from the hosts that serve people-group photos (media.joshuaproject.net,
  joshuaproject.net, images.peoplegroups.org, peoplegroupspublic.blob.core.windows.net), never the generic
  placeholder; anything else is dropped. Re-pinned.
check:side-lanes' seeded data now also carries photos on a host that is NOT allowed; none may be drawn.
2026-10-01 06:03:48 +00:00
Doxa Maps
31e5c3e5f9 UPG-100 batch selection: a state-only selection prints its Prayer list and Card deck
The packet and card-deck title named the selection's zones and countries only.
Since India's states bring people, a selection of states alone had no names, and
reduce() threw "Reduce of empty array with no initial value" at the reader.
selectionTitleNames (data/selection-export.js, pure) adds the states and union
territories that brought people. A province with no table is not named. A
selection that brought nobody (Mizoram or Nagaland alone) gives the keyed
"no people groups to print" instead.

check:batch-selection-export arm A6 tests it on the real served table: Gujarāt
alone is titled "Gujarāt", a state + a country names both, a province beside it is
not named, and Mizoram alone reads the keyed text. Its negative control shows the
old naming is empty and reduce() throws. The call site is pinned in arm C. Four
mutants each fail.
2026-10-01 06:00:55 +00:00
Doxa Maps
269226318d Merge origin/development (863174825) into studio/p-assembly 2026-10-01 05:57:02 +00:00
Doxa Maps
386e269fe6 Regions list: India's card follows the large-sheet rule, printing the whole-India poster on a desktop and saying so on a phone 2026-10-01 05:56:49 +00:00
Doxa Maps
455fa8ab7d One rule for countries too large for paper: countrySheet.js's LARGE_SHEETS; whole-India list, packet and cards on a desktop
CORRECTS the previous commit's "no prayer list, packet or cards for whole India": the current direction is that
whole India's poster, list, packet and cards (about a thousand pages) are offered DESKTOP-ONLY, and a phone shows
the existing poster.phoneLimit sentence instead of failing.
countrySheet.js now exports LARGE_SHEETS ({ IND: 60x96, desktopOnly }) and largeSheet(item), and makeCountrySheet
itself prints such a country in its large format (a packet page stays a page) with its "Administrative Areas"
cell from the shared state table ("36 states and union territories"). So every caller gets the same sheet: the
Regions list's India no longer has to disagree with Country Posters (regions-list's own lines follow, from regions).
The wall drops its India-only code and follows the same rule.
2026-10-01 05:55:55 +00:00
Doxa Maps
1c61cbb926 Country Posters: the whole-India poster prints, every group named
India's card is no longer "too many to fit": it prints as the 60x96 side-lane sheet (all 855 groups named beside
the map, crossing-free leaders, real photos), whatever paper the wall asks for, until the shared size picker
offers 66x66 and 36x60 too. Its facts row reads "36 states and union territories" (English, from the wall
head's plural key). As ruled, the whole-India card offers no prayer list, packet or cards; the state cards keep
theirs. Its card preview is the real sheet.
check:side-lanes (+ :self-test, gates:pre): the three side-lane formats on a seeded worst case (855 groups,
stacked and clustered) through the real renderer: every name once, 0 crossings re-measured from the SVG, no
overflow, photos only where real; without the lane clamp the same data crosses 36 times, and the arm fails.
2026-10-01 05:52:47 +00:00
Doxa Maps
ac108b5117 Posterverse: Bible Posters' ids are confirmed, and composes declares it
bible-posters/bible-posters is the id the Bible Posters plugin ships, so its
Experimental row is no longer provisional, and posterverse.meta.json composes
it. Lands in the SAME push as the bible-posters bundle: without it the ref is
unresolved (check:capability-derived), and with the bundle but without this
commit check:posterverse-shelf fails arm D.
2026-10-01 05:47:24 +00:00
Doxa Maps
192c652ad4 Wall of People Groups, Social: comments say "coming soon", and the heart links to the group's prayer sign-up
- COMMENT (and "View prayers") showed an empty comments board; it now says "Comments are coming soon."
  The unreachable CommentsDialog is removed.
- HEART: "Yes, I'm praying" still stores the prayer in this browser (localStorage, wall-pg:prayers), and the
  dialog now links "Sign up to pray for <group>" to the group's sign-up on pray.doxa.life
  (https://pray.doxa.life/<slug>#signup-section, the page's own sign-up section), in a new tab.
- The prayer dialog scrolls when it is taller than the window: it clipped at 90vh with overflow hidden,
  so on a laptop everything under the photo could not be reached. The photo now gives way (at most 38vh),
  so the question, "Yes, I'm praying" and the sign-up link all show at 1440 x 900.
- SHARE already shares the group's pray.doxa.life page (unchanged).

The two sentences live in a NEW area, wallSocial (11 locales), which only this bundle names (0 other
bundles carry it). Exercised at 1440 in en and ar: the toast and the link (href, new tab, noopener).
2026-10-01 05:44:40 +00:00
Doxa Maps
802d7b5b8a P assembly: the widened census, stated neutrally
The case-insensitive census with every plugin agent's name found 30 more lines: library (ProfileLoader,
useMapProvider, ApproxPinNote, listSelection, colocation), the gallery's embed-contract card id, the gospel
plugins' source notes and build scripts, a regions script note and one gate description. Comments and notes
only, except the Gospel x Internet CSV export's provenance line, which no longer names who screened the links.
2026-10-01 05:42:24 +00:00
Doxa Maps
42a444edb8 Posterverse: the home link's fallback label in the reader's language
With home-href but no home-label, VerticalTabsLayout falls back to labels.home,
which Posterverse did not pass, so every locale read the English default. The
shell now passes labels.home from its own strings in all 11 locales, the same
words the Research Gallery uses. A host's own home-label still wins.
2026-10-01 05:42:05 +00:00
Doxa Maps
32a9b41bc0 Posterverse: pass the host's homeHref / homeLabel to the layout
VerticalTabsLayout draws a host's "Back to homepage" link directly above
Collapse (the top of the drawer on a phone); the Research Gallery already
forwards it. Posterverse now accepts the same two props (or profile-config
homeHref / homeLabel). Both default to '', which draws no link, so every
existing embed is unchanged.
2026-10-01 05:42:05 +00:00
Doxa Maps
b61cc36492 Wall of People Groups: the poster closes on scripture, "The LORD bless you, and keep you.", across the full width
The footer is now scripture only:
- the seven passages of the journey (Abraham to the church), unchanged;
- a full-width rule, the same as the header's;
- Numbers 6:24 from the World English Bible British Edition (public domain; verified at the source),
  set as its two clauses, "The LORD bless you," / "and keep you.", filling the footer's width;
- its reference, and a credit line naming both public-domain translations on the poster.

Removed: the long Numbers 6:22-27 block, and the closing sentence (it was our own words, not scripture).
The card rows now spread their spare height between them, so the photos fill each sheet.

BENEDICTION_FILL is the one number per size that sets how much of the width the verse fills (1 = all of
it). Measured on the rendered print, the longer clause fills 98.4% of the text width in en and ar at every
size, with nothing overflowing (the em constant comes from that measurement). At 5 x 8 ft a full-width
verse costs the per-card verses: the cards go from 1.04 to 0.91 in, with one verse per row; 0.3 there keeps
a verse under every card.
2026-10-01 05:39:57 +00:00
Doxa Maps
47c5c68c69 Merge origin/development into gospel/gi-csv-guard 2026-10-01 05:37:47 +00:00
Doxa Maps
77751ddcb6 Merge origin/development (53fcf6d09) into studio/p-assembly 2026-10-01 05:32:16 +00:00
Doxa Maps
315dc92a65 Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work 2026-10-01 05:31:29 +00:00
Doxa Maps
cfab45ff97 Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work
# Conflicts:
#	package.json
2026-10-01 05:19:07 +00:00
Doxa Maps
b6777218e3 Merge remote-tracking branch 'origin/development' into poster-design-plugin/zero
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-10-01 05:18:28 +00:00
Doxa Maps
289d31e3f4 Merge remote-tracking branch 'origin/development' into upg100/batch-tap
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-10-01 05:12:05 +00:00
Doxa Maps
9de5da9e4a Country Posters: the India section's header counts its states and union territories, not "countries"
The India section's cards are India itself, its 34 state and union territory posters and the two with none listed,
so "· 37 countries" was untrue. Through PosterWall's sectionItemCountKey, that section alone counts its state cards
(36, from the data) with countryPosters.indiaItemCount; every other section keeps the countries count.
The key in all 11 locales, in each locale's own plural forms (the same form counts as regions.countryCount).
2026-10-01 05:11:52 +00:00
Doxa Maps
d3ceb95711 Poster Design: Styles counts its sections in templates
The Styles wall passes item-count-key="posterDesign.templateCount", so a
section head reads "4 templates" where it read "0 people groups · 4
lists".
2026-10-01 05:10:55 +00:00
Doxa Maps
0907d96de2 UPG-100: one digit system per sentence, and no raw error after a failed load
The wall intro writes its total in the digits the translated sentence already uses
(countInSentence): ar shows ٢٬١٠٧ beside its own ٢٧ and ٩:١٤, while CLDR's bare
'ar' would have formatted 2,107. Locales whose sentence uses Western digits are
unchanged. The fetching status goes through the same helper.

A people-group load that fails without a catalogue key (the 30 s abort, a dropped
network) now reads as the stall text, "still loading, try again in a moment",
instead of the browser's own English ("signal is aborted without reason"). Keyed
errors keep their own text, and the failed load leaves the cache, so the next Copy
fetches again.

check:upg-count arm E renders the intro through each locale's catalogue and
requires one digit system, with a negative control on the old ar render. Its
separator scan now also reads fr U+202F and ru U+00A0. check:batch-selection-export
arm A5 aborts a real fetch and refuses a real connection; both must read as the
stall text, and the old path must still show the raw message.
2026-10-01 01:06:44 +00:00
Doxa Maps
e38103149d Country Posters: previews for the 34 India state and union territory posters
Each state's sheet drawn from live records with the browser's own inputs (SPARSE 3x3, the indiaState series, the
served boundaries and places), shot in the shared browser at 3000 px, and reduced by make-previews.py to the 560 px
card thumbnail and the 1500 px download, as the country previews are. Every record pinned; every layout octilinear.
2026-10-01 01:03:51 +00:00
Doxa Maps
ddb7a4850c Country Posters: India is its own section, first, above Asia, counted once
India's country card, its 34 state and union territory posters and the two with none listed now share one section,
headed by India's name and counted once (855, through PosterWall's sectionTotal), which puts it above every regional
section. One line at the top of the wall says why India is set apart. Asia keeps every other Asian country.
check:country-sheet-one-path ARM E: the wall passes sectionTotal, India's card is in the India section, PosterWall's
default is still the card sum, and over the real data India comes first with 855 (India 855 > Asia 454 > Africa 314).
2026-10-01 01:03:50 +00:00
Doxa Maps
4de20daed6 P assembly: the last census lines, stated neutrally
The census on the assembled branches still found eleven comments that attributed a choice to a dated
request, quoted it, or spoke in the first person: pplr-data-maps (geocoder, pin card, pin indicator, tree,
families, religion, semantic trees), research-dashboard's ramp note, upg-100-list's funnel note, and two
dated QA tags each in countries-map and research-map. Comments only; behaviour unchanged.
2026-10-01 00:57:41 +00:00
Doxa Maps
e7a1c940ef P: merge 202a0244e 2026-10-01 00:56:03 +00:00
Doxa Maps
95a84b7775 P: merge 087e852c4 2026-10-01 00:56:03 +00:00
Doxa Maps
241e37b3c6 P: merge fd325336c 2026-10-01 00:56:03 +00:00
Doxa Maps
0f7d69918c P: merge bba382d9a 2026-10-01 00:56:02 +00:00
Doxa Maps
ab4461d46b P: merge e0ca45d6b 2026-10-01 00:56:01 +00:00
Doxa Maps
5a4611d291 P: merge af5ed4c27 2026-10-01 00:56:01 +00:00
Doxa Maps
6a8f6f6804 P: merge c1a2f3698 2026-10-01 00:56:01 +00:00
Doxa Maps
ea6ba0e126 P: merge 3aa3d8dde 2026-10-01 00:56:00 +00:00
Doxa Maps
a204752597 P: merge 2c397d25e 2026-10-01 00:55:59 +00:00
Doxa Maps
69ad4bbeb6 Prayer Progress: clearing a legend filter restores the pins to full opacity
The library creates the language-family pin layer at circle-opacity 1, but the three
paths that clear a filter (no filter key, an unknown key, and the aggregate search
filter) restored it to 0.9, so after selecting and deselecting a legend row the pins
stayed slightly faded. They now restore PIN_REST_OPACITY (1), so a cleared map looks
like a fresh one. Rebuilt doxa-simple-map, then the tree and SRI.
2026-10-01 00:53:42 +00:00
Doxa Maps
202a0244e2 Privacy: neutral comments in Country Posters (no quotes, date tags or agent names)
Comments only; behaviour unchanged. Each rewritten line keeps its technical fact and drops the attribution:
- design-note and brief quotations restated as plain design statements (country-poster-wall.vue, index.js,
  countries-map.vue);
- "(qa: <date> …)" tags and "user feedback / user reported" attributions removed (countries-map.vue);
- fleet agent names replaced by what was measured (countries-map.vue, country-posters-mfe.vue);
- series.json's India-state note: the approval date is gone; the wording stays the editable default.
2026-10-01 00:51:05 +00:00
Doxa Maps
087e852c4e Prayer Progress: the basemap-label comment states its reason without a pointer
Comments only. The pointer named a document that is not in the repository; the
reason is already stated in the sentence before it.
2026-10-01 00:49:02 +00:00
Doxa Maps
d8107decba Prayer Progress: comments state the reason, not who asked or when
Comments only. Eleven comments in doxa-simple-map.vue carried an agent name, a
"user request" / "user feedback" attribution, or a dated QA tag; each now keeps
its reasoning and drops the attribution and the date.

The built bundle changes only in the component's scope id (Vue derives it from the
source in production builds); every other token is identical, so behaviour is
unchanged. Source only: the assembler rebuilds.
2026-10-01 00:44:38 +00:00
Doxa Maps
2c397d25ef Source comments state design history and measurements as facts, without quoting or naming anyone
Comments in library/ and internal/ that quoted a person, attributed a decision to one, used first person,
named fleet agents or carried private host names now state the same technical fact in neutral words:
poster-render (including the comments it writes into generated posters), packet-render, the poster and
research scripts, PosterWall, DataTable, the legends, the layouts and the gates. The network-policy note
states the policy itself. Behaviour is unchanged: a few printed gate messages and reason labels drop an
agent name, the poster-render integrity pin follows its comment-only edit, and series.json changes only in
its _meta and _why notes. The historical poster design snapshots (library/scripts/posters/snapshots/),
which nothing reads, are removed.
2026-10-01 00:37:17 +00:00
Doxa Maps
3aa3d8dde6 doxa-research-map: drop qa date tags from comments
Remove the private-process (qa: date) provenance tags from four
comments, keeping each technical fact. Comments only; behaviour unchanged.
2026-10-01 00:35:26 +00:00
Doxa Maps
2d172a7735 cities-internet + research maps: finish neutral comments
Scrub remaining internal role names, quoted directives, person-tied
dates and first-person phrasing from comments in connectivity-list.vue,
build-adm1-internet.mjs, research-map.vue and research-map-plus-grid.vue,
keeping each technical fact. Comments only; behaviour unchanged.
2026-10-01 00:33:19 +00:00
Doxa Maps
848ea64b95 Wall of People Groups: the poster says up front that it is for a print shop, as a PDF
Every Bless size is 2-8 ft, paper no desktop printer takes, and the print dialog then shows a 3 ft
page with no hint of what to do with it. A note under the header (Bless mode) now says: "This poster
is for a print shop: in the print dialog, choose 'Save as PDF', then send the file to the print shop."

The sentence lives in a NEW catalogue area, wallPrint (11 locales), which only this bundle names, so it
ships in the wall's bundle and in no other (measured: 0 other bundles carry it; the shared wall area
ships in 9). Shown in en and ar at 1440.
2026-10-01 00:24:32 +00:00
Doxa Maps
fd325336cc Regions dashboard: comments describe measurements without naming who took them 2026-10-01 00:24:01 +00:00
Doxa Maps
e0ca45d6b0 my-upg-100-list: neutral wording in comments and provenance notes
Rewrites comments and the underscore-prefixed notes in data/adm0/PROVENANCE.json
so they keep the technical fact without quoting anyone, naming process roles or
speaking in the first person. Comments and doc keys only: with comments (and
_-keys) stripped, every changed file is byte-identical to its parent.
2026-10-01 00:23:55 +00:00
Doxa Maps
bba382d9af Comments only: neutral wording in research-dashboard, pplr-data-maps and the Research Gallery
Quoted remarks, attributions and person-tied dates in comments become plain statements of the same
technical fact, and the names of internal tools and roles become neutral descriptions of the check that
was run. No code, markup or style changes: the rebuilt bundles are byte-identical apart from Vue's
scoped-style ids, which hash each component's source, comments included.
2026-10-01 00:23:12 +00:00
Doxa Maps
8918d11c01 Wall of People Groups: desktop only; a phone gets the house notice instead of a poster it cannot finish
A 5 x 8 ft poster ran past 60 s on a phone without finishing, and no phone prints 3-8 ft paper. The
profile now declares mobile: desktop-only (SPEC-MOBILE-FLAG). On a narrow screen the shared screen
gate shows messages.desktopOnlyNotice ("... only supports desktop", all 11 locales) and never mounts
the wall: measured at 390, en and ar, no canvas and 0 photo requests. Desktop is unchanged (1440: the
wall mounts). The Research Gallery disables the tab on a phone, and Posterverse defers to the
child's own notice.
2026-10-01 00:22:31 +00:00
Doxa Maps
06a48a9b42 plugin-designs: neutral comments in shared/ownerless maps
Rewrite code comments across doxa-research-map, upg-neighbor,
research-map-plus-grid, rudder-voice, people-groups-grid, big-picture,
prayer-walk-planner and all-people-groups to drop internal role names
from measurement and provenance notes, keeping each technical fact.
Comments only; behaviour unchanged.
2026-10-01 00:22:13 +00:00
Doxa Maps
af5ed4c275 Gospel Resources and Gospel x Internet: comments state the technical facts in neutral terms, without attributions or agent names 2026-10-01 00:17:53 +00:00
Doxa Maps
c1a2f36983 Wall of People Groups: comments state what was measured without naming who measured it
Five comment lines in the Wall's sources named a fleet agent as the measurer. They now keep the
measurement and drop the name. Comments only; no behaviour changes.
2026-10-01 00:17:18 +00:00
Doxa Maps
35c68048e8 cities-internet, key-cities: neutral source comments
Rewrite code comments to drop quoted directives, person-tied dates,
internal process and role names, and QA run references, keeping each
technical fact intact. Comments only; behaviour unchanged.
2026-10-01 00:08:29 +00:00
Doxa Maps
6bc7d70bf3 Wall of People Groups: the poster prints from 20 MB of photos instead of 133 MB, and says how far along it is
The print waits for every card's photo before the print dialog can open. 77 of the 939 photos are IMB
originals at 1024 px (~1.5 MB each), 114 MB of the 133 MB: on a home connection a minute or more
with nothing on screen but a busy button.

- Photos load at the size they print (photoUrl.js): the IMB host's own 320 px copies (1.3 MB for all
  77). 320 px covers the largest printed photo (5 x 8 ft, ~0.97 in, 291 px at 300 dpi) and the canvas's
  cap. A resized copy that fails falls back to the original, in print and on screen. Every other photo
  (Joshua Project, doxa, already 150-250 px) is untouched.
- Measured on the print flow, 3 x 4 ft: 133 MB -> 19 MB; 5 x 8 ft: 20 MB; 0 photos failed.
- While it prepares, the shared print card (MapPrintProgress) shows "Preparing the poster: n of N
  photos" with a clock and a bar, in the middle of the screen.

check:wall-photo-weight (gates:pre, headless) pins the mapping on both IMB hosts, the fallback, the
untouched hosts, and that the print HTML and the canvas both use it. It fails when either reverts to
the originals.
2026-10-01 00:03:56 +00:00
Doxa Maps
1e300309c8 Country Posters: one poster for each of India's states and union territories
The unfiltered wall gains an "India — states and union territories" section: 34 cards, one per state or union
territory with people groups listed (from the shared india-states table, fetched and sha-checked only when the
section is shown), each with its poster, prayer packet and cards. Nagaland and Mizoram get a card saying no
unreached people groups are listed there, so no division silently disappears. A host's filtered wall
(countries/region) is unchanged and never loads the table.

src/indiaStateSheet.js draws a state's sheet through ONE path: its records by slug, its outline from the
ADM1 boundaries the renderer already loads (matched on shapeName; the shared collection is copied, never
mutated), India's hue, and the indiaState series ("India State Maps", map N of 34). Show on map for a state
frames India, since the countries map draws countries.

check:country-sheet-one-path grows the state arms: inside this plugin only the helper calls generateSheet,
the wall must use makeIndiaStateSheet, and over the served table + ADM1 file: 36 divisions, the 34 with groups
numbered 1..34 each with an outline, the rest named, the ADM1 collection unmutated. Self-test 10/10.
Rendered headlessly through poster-render for Gujarat (90 pins), Lakshadweep (1), Andaman and Nicobar (9):
the state's name as title, "India State Maps", its series position, no country-series text, no "Province".
2026-09-30 23:33:34 +00:00
Doxa Maps
0b266d8110 UPG-100 batch selection: a stalled people-group load can never hang Copy. Copy waits at most 8 s (settleWithin), then copies the territory lines apply-grouping needs and says the people groups are still loading (11 locales); the records fetch aborts after 30 s and leaves the cache. The gate proves a never-settling source still settles in time 2026-09-30 23:28:59 +00:00
Doxa Maps
85508b899d UPG-100: the list's total is never written into a sentence. The wall intro (upgMap.wallIntroA, {n} in 11 locales) and the fetching status take it from the funnel's last step (2,107 today; the intro printed a stale 2,106), formatted for the reader. New gate check:upg-count (gates:pre), mutation-tested 2026-09-30 23:27:02 +00:00
Doxa Maps
2e6f6a59e6 UPG-100 batch mode: a tap on a people-group pin selects the territory under it and opens no detail sheet (the sheet covered the whole batch HUD on a phone, and in a dense state nearly every tap lands on a pin); outside batch mode pins behave as before. Gated; my-upg-100-list rebuilt with the tree and SRI 2026-09-30 23:17:20 +00:00
Doxa Maps
3f7d489409 Merge remote-tracking branch 'origin/development' into poster-design-plugin/land 2026-09-30 23:12:35 +00:00
Doxa Maps
0ab6ca1695 Research Gallery: Bible Posters stays off the Experimental shelf
Bible Posters lives on Posterverse's Experimental shelf, so the gallery excludes it, as it already excludes
Posterverse itself. One poster plugin, shown once.
2026-09-30 22:59:45 +00:00
Doxa Maps
111c17d499 Poster Design: draw the sample country sheet through makeCountrySheet
The Styles tab called generateCountrySheet directly and built the country
without its region, so the sample would have printed in the old flat teal
while the Country Posters wall prints it region-hued. It now draws through
the one shared path (library/packet/countrySheet.js), which carries the
region and computes the series the way the wall does; the inline series
arithmetic is gone. check:country-sheet-one-path passes.
2026-09-30 22:54:56 +00:00
Doxa Maps
28cb482c79 Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work 2026-09-30 22:49:32 +00:00
Doxa Maps
0e069e5aaf Posterverse: Poster Design's ids are confirmed, and composes declares it
poster-design/poster-design-mfe is the id poster-design-plugin ships, so its row
is no longer provisional, and posterverse.meta.json composes it. This commit
must land in the SAME push as the poster-design bundle: without the bundle the
ref is unresolved (check:capability-derived) and check:posterverse-shelf fails
arm D; with the bundle and without this commit, arm D fails the other way.
2026-09-30 22:42:05 +00:00
Doxa Maps
c394533fc8 Research Gallery: Poster Design joins Prayer Mobilization
Prayer Mobilization now reads Prayer Progress, UPG 100 List Posters, Country Posters, then Poster Design.
The row mounts the Styles + Sizes composite (bundle poster-design, profile poster-design-mfe), uses the same
tab id as the Posterverse shell, and carries the same label and subtitle in all 11 languages. As a curated
row it never appears on the Experimental shelf.
2026-09-30 22:42:05 +00:00
Doxa Maps
855e89db65 Poster Design: a new plugin with Styles and Sizes tabs
Every poster template the library prints, in one place, so the designs
can be compared side by side and handed to an agent by name.

- poster-design-mfe: the two-tab element (capability 4), the same shape
  as country-posters-mfe: the shared ViewSelect over Styles and Sizes,
  each tab its own element, one ShareButton for the composite.
- poster-styles: the library's PosterWall, one card per configuration
  (src/templates.js: country map sheets at each format, the packet page,
  the packet variants, every card stock, the Bless wall panels, the map
  print). Through PosterWall's host seams the header sticker reads "Show
  full details" and opens a dialog with the configuration name, size,
  file size, settings, sample and renderer, and each thumbnail is drawn
  from the library with sample data (Nepal) when it comes into view.
  Templates the gallery cannot draw yet say which part is missing. The
  dialog fits a phone (border-box), and in Arabic its file size and the
  configuration name stay whole (LRI…PDI isolates).
- poster-sizes: waits for the shared size table rather than keeping a
  second list of sizes.

check:poster-design-catalogue (gates:pre) keeps the catalogue true: its
sheet formats match poster-render FORMATS, names are unique, the card
entries are card-render STOCK, its keys exist, the sample can be drawn.
2026-09-30 22:42:05 +00:00
Doxa Maps
68ba3b3402 Posterverse: poster plugins only
UPG Neighbor and All People Groups leave the Experimental folder: they are
research maps, and Posterverse holds the plugins whose purpose is posters.
Experimental is now Wall of People Groups (and Bible Posters once it exists).
Their labels, composes refs and heavy-tag entry go with them; the shelf gate's
allow-list and its self-test follow. The Research Gallery is unchanged.
2026-09-30 22:35:34 +00:00
Doxa Maps
c8d6d2cb48 UPG-100: an ADM1 territory always knows its country (the baked table split into India's 34 and China's 12, same data), so the regroup warning is right even for a territory whose feature did not say; gated 2026-09-30 22:35:31 +00:00
Doxa Maps
7f2dec8600 Wall of People Groups: the Bless poster takes the house poster style, full width, with nothing clipped
The poster now reads like the UPG 100 List posters (poster-render's approved template):
- warm paper, hairline rules instead of black boxes and sidebars, Georgia for the title and the scripture;
- the sans for names and labels, tracked capitals for the small labels, and the purple ink for every
  scripture reference;
- a quiet boxed centrepiece in the journey.
The screen canvas draws the same paper and ink, so the wall still shows what prints.

Layout:
- The header, the chart, the grid and the footer share ONE full content width and ONE inner padding, so
  text edges and rules line up. The subtitle, the blessing's intro lines and the closing line no longer
  wrap inside an 80% column.
- The grid's spare height is shared equally above and below it (it pooled as one gap above the footer),
  and a gap now separates the chart from the first row.

Fixed, measured on the print in en and ar at every size (0 clipped text blocks, was 12-15):
- the Old/New Testament rail labels overran their rows;
- the longest verse cell overran its row (the chart's verse size now fits its longest cell);
- the title's descenders were clipped;
- two real names were cut by the line clamp (0 of the live 2,107 now): a name's lines are counted by
  whole words, and a long name may take four lines at the floor size.
2026-09-30 22:32:56 +00:00
Doxa Maps
e7a8509808 Merge origin/development into gospel/gi-csv-guard 2026-09-30 22:30:34 +00:00
Doxa Maps
e5c2b68fae UPG-100's display name is "UPG 100 List Posters": the Studio labels, the legend title and the wall heading (in 11 languages, the rail's own words); the folder and bundle id are unchanged, since DX Life and partners embed by URL 2026-09-30 22:29:09 +00:00
Doxa Maps
3e5646832d UPG-100 batch selection Copy: a selection apply-grouping cannot regroup in one go (a mix of states, provinces and countries, or a legend zone) still copies, and the flash now says its first line will not regroup. regroupable() is gated against apply-grouping's own dry-run verdict in six cases 2026-09-30 22:28:37 +00:00
Doxa Maps
11dd21b04c Merge origin/development (d81a6ab92, P0b landed) into upg100/unmount-race; rebuild my-upg-100-list from the merged source, and regenerate the tree and SRI 2026-09-30 22:24:58 +00:00
Doxa Maps
1d2b29d6b5 Merge origin/development into studio/land-pd-seam 2026-09-30 22:23:58 +00:00
Doxa Maps
323283a43c Merge origin/development (32715a5cc) into upg100/india-states; package.json keeps both sides' gates; rebuild my-upg-100-list from the merged source, and regenerate the tree and SRI 2026-09-30 22:17:44 +00:00
Doxa Maps
3f23274a30 Merge origin/development (f8de00edf) into upg100/india-states; package.json keeps both sides' gates; rebuild my-upg-100-list from the merged source, and regenerate the tree and SRI 2026-09-30 22:11:30 +00:00
Doxa Maps
a85ddb9541 UPG-100: the map init returns quietly when its pane is released while the engine script or stylesheet loads (both shells destroy heavy panes on deactivate), instead of throwing "'container' must be a String or HTMLElement"; the same guard library/composables/useMapInstance.js keeps after every await 2026-09-30 22:04:50 +00:00
Doxa Maps
332aa002f8 Wall of People Groups: the Bless poster takes its sheets, glue bands and marks from PanelSheets, byte for byte
blessPoster.js now plans its 5 x 8 ft sheets, finished size, screen layout, glue band, trim line and sheet
tags through library panelSheets.js instead of its own copy. The print HTML, the screen layout and the plan
are unchanged: hashed for 3 presets and the default in all 11 locales (44 cases), before and after, all
identical; a 0.001 in change to the glue label moves all 44.

check:panel-sheets (gates:pre, headless) pins both geometries (60x96 stacked, 66x66 side by side, one
sheet; glue and bleed):
- the sheets tile the finished poster;
- glue slices tile it, and bleed slices repeat exactly the join;
- a bleed join prints a guide, not a solid band, and a screen preview always shows the red band;
- the Bless 5x8ft takes its bands and marks from the module.
It is two-sided: 4 planted defects are caught, and the Bless arm fails on the old private copy.
2026-09-30 22:03:40 +00:00
Doxa Maps
b0d0fcaf91 seriesFor: state that every no-sheet country shares one series, and gate it
A second country without a sheet size would silently join India's oversized
series and print India as "map 1 of 2". The comment now says so, and
check:country-sheet-one-path fails when more than one country has no sheet,
naming them, so that change is a decision rather than drift. Its self-test
plants a second one (China) and requires the arm to fail.
2026-09-30 21:57:25 +00:00
Doxa Maps
ffbb07e4a4 Country Posters wall draws its sheets through makeCountrySheet
The wall had its own inline wrapper around generateCountrySheet, a second
copy of @map/packet/countrySheet.js, which the Regions tab uses. Two copies
of one wrapper drifted twice (a teal Regions print, then India's series). The
wall now calls makeCountrySheet with the same country list, still handing it
the data's own English record rather than the localized card.

Behaviour: identical sheets for every country with records; a country whose
records come back empty now yields no sheet (the wall falls through to its
stored preview), as the Regions tab already did.

check:country-sheet-one-path (in gates:pre, with a self-test) parses every
plugin source: a direct generateCountrySheet call fails, every
makeCountrySheet call must pass the series list, both known callers must be
found, and seriesFor gives named answers over the real data (India 1 of 1,
each 3x3 country N of 173, an absent code no series). It fails on
development c4655072a for all three defects.
2026-09-30 21:57:25 +00:00
Doxa Maps
47a856c144 Merge origin/development (939db5b6c: P0 landed, posterverse, csv-guard) into upg100/india-states; package.json keeps both sides' gates; rebuild my-upg-100-list from the merged source, and regenerate the tree and SRI 2026-09-30 21:49:47 +00:00
Doxa Maps
f8de00edf7 Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work
# Conflicts:
#	package.json
2026-09-30 21:47:28 +00:00
Doxa Maps
939db5b6c7 Merge origin/development (e9805a5c8: csv-guard, posterverse) into upg100/batch-select; package.json keeps both sides' gates; rebuild my-upg-100-list from the merged source, and regenerate the tree and SRI 2026-09-30 21:42:50 +00:00
Doxa Maps
d247ec9d1b Gospel x Internet CSV export: a value starting with TAB or CR is neutralised too, and the model check asserts it 2026-09-30 21:34:13 +00:00
Doxa Maps
ba8dfad628 UPG-100 batch selection: an India state or union territory now finds its people groups, from the served states table (fetched only once a state is selected, warmed on selection); China's provinces stay named as missing until they have a table. The gate asserts the wiring 2026-09-30 21:33:43 +00:00
Doxa Maps
39ded339fa Merge upg100/batch-select (P0 batch selection, 2bf2607fc) into upg100/india-states: P0b's India detection builds on P0's selectionPeople. package.json keeps both new gates 2026-09-30 21:33:24 +00:00
Doxa Maps
5a6b226a19 Posterverse: a capability-5 app shell for every poster plugin
<posterverse-app> is a vertical-tab rail of whole poster plugins, each mounted
as its real element from the manifest: UPG 100 List Posters (upg-100-mfe),
Country Posters (country-posters-mfe), Poster Design, and an Experimental
folder of Wall of People Groups, All People Groups, UPG Neighbor and Bible
Posters. It reuses VerticalTabsLayout, loadScriptOnce/whenTagDefined and the
Research Gallery's profile-config contract (urlSync:false, mapTitle, token
ladder, treeBase, assetsBase).

The whole rail is an allow-list (src/tabs.js), so a gated plugin such as
key-cities can never appear. Rows whose bundle is not in the tree are pruned;
Poster Design and Bible Posters carry provisional ids until their bundles land.
meta.json declares nested-mfe-spa and composes the five rows that exist, so
the Plugin Studio lists it under capability 5.

check:posterverse-shelf (in gates:pre) asserts the allow-list, the key-cities
exclusion, composite-not-leaf resolution, composes/rail agreement and
11-locale string parity; --self-test plants one defect per arm.
2026-09-30 21:32:51 +00:00
Doxa Maps
db1e6c978f Wall of People Groups: the wall pans and zooms with the pointer, 1:1
d3-zoom on a canvas reports its transform in the canvas's own CSS px, but the renderer applied it inside
the "meet" fit (a leftover from the SVG, whose viewBox made it world units). Every pan therefore moved
the wall by only the fit scale: a 200 px mouse drag panned 34 px at 1440, a 120 x 200 px finger drag
14 x 23 px on a phone, and a wheel zoom drifted about 90 px off the pointer. The transform now applies
after the fit, in Bless and Social mode alike.

Also: a trackpad pinch (ctrl-wheel) zooms the wall instead of falling through to a browser page zoom,
with a capped step; and a fling can no longer leave an empty table (the wall always covers the centre
of the view). check:wall-pan (gates:pre) runs the real WallCanvas methods with d3's transform
arithmetic and catches the old formulas.
2026-09-30 21:29:56 +00:00
Doxa Maps
307feab55c UPG-100 batch selection Copy: line 1 is a machine contract, so it carries the names apply-grouping resolves in every UI language (a country as its ISO3, a state as its shape name); the reader's names stay on line 2, in the HUD and the CSV. The gate runs apply-grouping's own dry run on an Arabic selection, with a negative control 2026-09-30 21:19:02 +00:00
Doxa Maps
79b949cb24 WIP P0b: India's states and union territories table (derived from admin-membership, served as an asset, sha384-pinned in the same emitter run), its loader, the tree allowlist row, and check:india-states (not yet registered) 2026-09-30 21:17:28 +00:00
Doxa Maps
ee955bac5a UPG-100 batch selection CSV: also neutralise a leading TAB or CR (OWASP's full list of formula triggers), asserted by the gate 2026-09-30 21:04:51 +00:00
Doxa Maps
03af1d87b5 Merge origin/development (8d968ed0d, slot 2) into upg100/batch-select; rebuild my-upg-100-list from the merged source, and regenerate the tree and SRI 2026-09-30 20:55:38 +00:00
Doxa Maps
0f824f24cf UPG-100 batch selection: release Copy / Export CSV's last-text hooks with the map's other window hooks on unmount 2026-09-30 20:54:55 +00:00
Doxa Maps
c4655072ab Merge remote-tracking branch 'origin/development' into deep-research-plugin/hostslot 2026-09-30 20:53:36 +00:00
Doxa Maps
dd913f7269 UPG-100 batch selection: recolour, Copy and Export CSV are back. The colour swatches return; Copy puts the territory line apply-grouping parses first, then the selection's people groups as CSV; Export CSV downloads the same CSV. One detection feeds every action, prefetched when batch mode opens so a tap copies from cache. New gate check:batch-selection-export (gates:pre) 2026-09-30 20:53:19 +00:00
Doxa Maps
2ec8a3cb3e Merge remote-tracking branch 'origin/development' into deep-research-plugin/hostslot 2026-09-30 20:41:34 +00:00
Doxa Maps
05e0dfbdfc Merge remote-tracking branch 'origin/development' into regions/slot5
# Conflicts:
#	public/dx-maps/country-posters/countries-map/index.html
#	public/dx-maps/country-posters/country-poster-wall/index.html
#	public/dx-maps/country-posters/country-posters-mfe/index.html
#	public/dx-maps/country-posters/country-posters.js
#	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 20:37:28 +00:00
Doxa Maps
b8ef93a416 Merge remote-tracking branch 'origin/regions/embed-popup' into regions/slot5
# 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 20:25:33 +00:00
Doxa Maps
f18aff662b Research Gallery: a "Back to homepage" link above Collapse, and the poster rows in Prayer Mobilization
The tab layout takes an optional homeHref and homeLabel from its host. When a URL is given it draws a
link directly above the rail's Collapse button, in the same box, and a phone shows it at the top of the
drawer. It mirrors in Arabic and slims with the rail. With no URL nothing changes, so the Plugin Studio
and every other host look exactly as before. A javascript:, data: or vbscript: URL is ignored.

The gallery accepts home-href and home-label (or profile-config homeHref and homeLabel) and passes them
on; its own "Back to homepage" is the fallback label in all 11 languages.

Prayer Mobilization now reads Prayer Progress, UPG 100 List Posters (renamed in all 11 languages), then
Country Posters, which mounts its composite view and leaves the Experimental shelf. Posterverse, the
second shell, is kept off this shelf so a shell never opens inside a shell.
2026-09-30 20:16:15 +00:00
Doxa Maps
5b074c1b43 Gospel Resources: an open province sheet also counts as an open sheet 2026-09-30 12:39:29 +00:00
Doxa Maps
9b85b1c36d Region Dashboards: the country's poster card sits centred under its toggle, and its Show on map brings the country map back into view 2026-09-30 12:34:25 +00:00
Doxa Maps
07915b5115 Region Dashboards: a country's view offers View country posters under its map, the Country Posters wall filtered to that one country, loaded on first open
Rebuilt regions-dashboard and country-posters (the wall's countries filter), then the tree and SRI.
2026-09-30 12:28:37 +00:00
Doxa Maps
6c9b844b8e Country Posters: the wall shows a host's countries, or one region, flat, on request
profile-config gains two optional keys for the country-poster-wall profile: `countries` (ISO-3 codes, or
{code, name, count} records, in the host's order) and `region` (one WAGF region as the data names it).
With either, the wall is flat: one section, nothing collapsed, two columns unless `columns` says otherwise,
no heading unless `heading` is given, because it sits under the host's own region heading. A requested
country with no poster keeps its card and says so in the regions catalogue's words. With neither key,
every binding is what it was, so the plain wall is unchanged. PosterWall itself is untouched; only the
country-posters bundle rebuilds. The usage lines in index.js and the profile's meta note name the keys.
2026-09-30 12:17:39 +00:00
Doxa Maps
27ce3fe8db Gospel Resources and Cities with Internet: the legend sits above its map controls, and under an open sheet 2026-09-30 12:15:27 +00:00
Doxa Maps
fc463c82be Region Dashboards on phones: the people-group popup's card fills its compact box instead of overhanging it by 40px, and the name keeps clear of the close button 2026-09-30 12:03:07 +00:00
Doxa Maps
d45b765bd6 Merge remote-tracking branch 'origin/development' into upg100/map-iso 2026-09-30 11:25:26 +00:00
Doxa Maps
f11212f2e7 UPG-100: the map area stacks as one layer, so the menu circle stays above its legend
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.
2026-09-30 11:22:47 +00:00
Doxa Maps
beae6595cf Merge remote-tracking branch 'origin/development' into regions/header-rounded
# Conflicts:
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/index.html
#	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/doxa-simple-map/doxa-simple-map.js
#	public/dx-maps/doxa-simple-map/doxa-simple-map/adoption/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/engagement/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/prayer/index.html
#	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 11:04:55 +00:00
Doxa Maps
a6ed322325 Regions header: the ⓘ follows the dark theme as Share does; the print progress bar honours reduced motion 2026-09-30 11:04:49 +00:00
Doxa Maps
69163a09ab Merge remote-tracking branch 'origin/development' into upg100/hdr-square
# Conflicts:
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-09-30 10:53:35 +00:00
Doxa Maps
c9f336aa32 Regions header: the rounded-square ⓘ beside a rounded-square Share, as Big Picture's; the print's progress card drops English phase text
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.
2026-09-30 10:48:11 +00:00
Doxa Maps
2361997393 UPG-100 header: the info and share buttons as Big Picture's rounded squares
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.
2026-09-30 10:45:40 +00:00
Doxa Maps
d2c15518a1 Merge remote-tracking branch 'origin/development' into regions/map-print-template
# 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
#	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 10:41:42 +00:00
Doxa Maps
d95c3b9820 Map-print template: the verse numbers read left to right in Arabic, the map's name reaches Simple Research, and the prayer line is fetched ahead
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.
2026-09-30 10:20:27 +00:00
Doxa Maps
1b7b70101c Merge remote-tracking branch 'origin/development' into simpleresearch-plugin/dxl-style
# Conflicts:
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/default/index.html
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
2026-09-30 10:14:23 +00:00
Doxa Maps
3548c73c09 On a phone the grid's pill search keeps its own 15.2px text, so the placeholder fits beside the round ☰
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.
2026-09-30 10:10:00 +00:00
Doxa Maps
8e6664539f Merge origin/development into studio/rudder-circle 2026-09-30 10:08:20 +00:00
Doxa Maps
8444aa64b0 Map-print template: the prayer line waits at most 3 s for the packet strings, so a stalled network cannot hold the export 2026-09-30 10:05:36 +00:00
Doxa Maps
72fb88a6ea The gallery gives each tab its map name (mapTitle) for the map-print header 2026-09-30 09:55:39 +00:00
Doxa Maps
56c6eacca5 The grid's search row keeps clear of the round ☰ only while the ☰ rests on it, and spans the row once the ☰ rides above the legend
The ☰ rests at the bottom of a phone's first screen until the map's legend sheet announces itself, so
while the map loads, or for good if it fails, it covered the start of the full-width field. The row now
pads by the ☰'s footprint on both sides while the layout's --vtl-fab-lift is 0, and not at all once the
☰ lifts, easing with the ☰'s own .2s move (none under reduced motion).
2026-09-30 09:50:10 +00:00
Doxa Maps
bd1239a496 The credit's fold clock starts once the basemap credit has joined geoBoundaries 2026-09-30 09:43:08 +00:00
Doxa Maps
70c716057a One map-print template, piloted on Simple Research: landscape, the map's name, the legend beside it, a prayer line
The map's "Export poster…" now prints through a shared template: always landscape Letter; a header with the
map's name (from the host's profile-config mapTitle), the view on screen as its subtitle; the legend as a
side panel; and a footer line from the prayer packet's final page (prayer point 6 with Luke 10:2 and
John 10:11-15, in the reader's language). While it renders, a loading screen like the poster wall's shows
the renderer's own progress. Without a mapTitle the view on screen stays the title, as before.
2026-09-30 09:36:48 +00:00
Doxa Maps
a66b120185 The grid's search and filters look like the live DX Life list: a pill search field, Show filters as an uppercase link, and 37px dropdowns
The values are the live /research list's own computed styles, measured at 390 and 1440. The search
field spans its row (up to 600px), since the round ☰ now rides above the map's legend sheet and no
longer rests on it. Every new rule is under .pgg-root, so Big Picture's header, which shares SearchBar
and FilterDropdown, is untouched; there the grid's search and filters are off. The filters still open
by default.
2026-09-30 09:36:45 +00:00
Doxa Maps
0f5f991dae Gospel Resources and Cities with Internet: one compact licence credit at the bottom end corner, folded after 3 s 2026-09-30 09:32:08 +00:00
Doxa Maps
414a1929ae Plugin Studio: Rudder is a small mic circle in its corner, with no label
The corner widget's bubble was a pill that read "Rudder · voice to text" and
widened to 300 px to show the words while recording. It is now a 44 px circle
with the mic (a chevron while its panel is open): the label stays its
accessible name and tooltip, and the words show in the panel. Recording still
shows on the collapsed circle: a red ring that pulses, a red dot, and the mic
lit while speech is heard.
2026-09-30 09:31:27 +00:00
Doxa Maps
f065ee504e Merge origin/development into gospel/legend-expand
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
2026-09-30 09:15:03 +00:00
Doxa Maps
e61bebe75d Merge remote-tracking branch 'origin/development' into regions/pins-phone-poster 2026-09-30 09:08:02 +00:00
Doxa Maps
1cf5276724 Merge remote-tracking branch 'origin/upg100/perrow-deselect' into regions/pins-phone-poster
# Conflicts:
#	public/dx-maps/country-posters/countries-map/index.html
#	public/dx-maps/country-posters/country-poster-wall/index.html
#	public/dx-maps/country-posters/country-posters-mfe/index.html
#	public/dx-maps/country-posters/country-posters.js
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
#	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 09:08:01 +00:00
Doxa Maps
49726ca785 Merge origin/development (a80f4fd6e, the pair) into upg100/perrow-deselect, and rebuild country-posters, my-upg-100-list and regions-dashboard from the merged source 2026-09-30 09:06:49 +00:00
Doxa Maps
ce8d67e1e6 Gospel Resources: a comment no longer names another map's translator area, which shipped that whole catalogue 2026-09-30 09:03:58 +00:00
Doxa Maps
32564194e8 Merge remote-tracking branch 'origin/development' into HEAD
# Conflicts:
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid.js
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/default/index.html
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	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-30 08:52:09 +00:00
Doxa Maps
5b90a07fbc Gospel Resources and Cities with Internet: Expand legend / Collapse legend in each map's own keys, in all 11 locales 2026-09-30 08:50:31 +00:00
Doxa Maps
042ff1aaa9 Poster walls offer only the per-row counts that fit; UPG-100's shown zone gets a clear chip
"Posters per row" offered 2-5 at every width, and the grid clamps a count
to what the viewport holds, so on a phone "3" and "4" still showed two.
The choices are now Auto plus every count up to what fits, capped at 5:
Auto / 1 / 2 on a 390px phone, up to 5 on a desktop. A stored preference
above the fit is shown as what is rendered and stays stored, so the
desktop keeps its choice. 1 joins the counts for the phone.

After "Show on map" isolated a zone, the only way back was re-tapping the
same legend row, inside a collapsed sheet on a phone. While a zone is
isolated (batch mode off), a chip above the map's floor names it with an
x that shows every zone again, through the wall's own deselect path
(applySelectZone(null)). Its label is the existing buttons.clearSelection.

Rebuilt: my-upg-100-list, country-posters, regions-dashboard; the tree and
SRI regenerated.
2026-09-30 08:48:24 +00:00
Doxa Maps
46d5d74ec4 Regions maps on phones: a pin tap opens its popup, a country tap opens its dashboard, and the maps are taller
On the all-regions map a pin tap jumped to the country's dashboard; a pin tap now opens the people
group's popup everywhere, and a tap on a country with no pin under it picks that country. The
invisible tap target is at least 7 px at every zoom, so pins answer a finger. On phones the maps are
half again as tall as they are wide (the square was too small for a popup), the left scroll-past
strip is off, and the popup is compact and lets a pinch through to the map. Desktop is unchanged.
2026-09-30 08:46:42 +00:00
Doxa Maps
113cdc26c7 Gospel Resources and Cities with Internet: the phone legend button reads Expand legend / Collapse legend 2026-09-30 08:41:50 +00:00
Doxa Maps
ec9a8a8dae Merge remote-tracking branch 'origin/development' into simpleresearch-plugin/phone-0820
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	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-30 08:37:56 +00:00
Doxa Maps
538f505996 Merge remote-tracking branch 'origin/development' into HEAD
# 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-30 08:33:36 +00:00
Doxa Maps
d3a1a00a82 check:export-poster-prints accepts the landscape poster: the image and its sheet must turn together
The paper turns landscape when the map is wider than it is tall (11in x 8.5in, a 2200x1700 image),
and the gate still asserted portrait only, so it failed a correct print. It now accepts either
orientation of US Letter, at least 1600 px on the short side and 2100 on the long one, and fails an
image whose shape is not its sheet's. The shape test is a negated <=, so a missing image fails.
2026-09-30 08:26:09 +00:00
Doxa Maps
448bbb4c57 Simple Research's engine badge stays off phones, where the legend sheet covered it
The phone sheet spans the map's bottom edge and covered the end of the bottom-left badge, which read
"MapLibr". The map's credit already names the engine. Desktop is unchanged.
2026-09-30 08:26:09 +00:00
Doxa Maps
3b12fec79a The grid's search field is centred on a phone, clear of the round ☰ on both sides, and the unclear Exact chip is hidden
The ☰ clearance padded only the circle's side, which pushed the field off centre. It now pads both
sides, and the row centres the field. Exact is hidden with display:none; the search stays fuzzy and
the filter code behind the chip is unchanged. Big Picture and dashboard-plus-grid run the grid with
its search off, so neither renders differently.
2026-09-30 08:26:09 +00:00
Doxa Maps
ad8765d9eb Merge remote-tracking branch 'origin/development' into regions/print-rollout
# Conflicts:
#	public/dx-maps/country-posters/countries-map/index.html
#	public/dx-maps/country-posters/country-poster-wall/index.html
#	public/dx-maps/country-posters/country-posters-mfe/index.html
#	public/dx-maps/country-posters/country-posters.js
#	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
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
#	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 08:20:54 +00:00
Doxa Maps
2b2f2a728a Merge commit 'refs/ppp/strat' into HEAD 2026-09-30 08:17:23 +00:00
Doxa Maps
756053fecf Map info: the strategy copy in its own catalogue area, shipped only where it renders
The strategy (bottom line + points, 41 keys per locale) moves out of the
mapInfo area into a new mapStrategy area (library/i18n/locales/<lc>/
mapStrategy.json, keyed mapStrategy.tab.<id>), and tabInfo's strategyKey
rows name it. The two tab labels stay in mapInfo.

The build ships an area only to bundles whose code names it, and only
the gallery shell names mapStrategy. mapInfo ships to every map bundle
for its standalone info button, so before this change each map bundle
carried every map's strategy in eleven languages without rendering it.
Measured on the rebuilt bundles against development 63a64d1bf, gzip:
doxa-research-map +3.7 KB (was +47.9), cities-internet +4.0 (was +47.9),
gospel-resources +6.7, research-dashboard +3.8, dashboard-plus-grid
+3.7, doxa-simple-map +3.5; the gallery shell +33.9 KB, where the
strategy renders. check:i18n-treeshake PASS (26 bundles); the strategy
text is in the shell and in none of the six map bundles.

The moved values are identical to the ones they replace (a parsed-JSON
comparison per locale). Rebuilt the seven mapInfo carriers, then the
tree and SRI; pages and manifests change only their integrity.
2026-09-30 08:16:49 +00:00
Doxa Maps
450b21c941 Prayer Progress's standalone ⓘ does not name a strategy yet
Naming it would ship every map's strategy text inside this bundle (the text shares one catalogue
area). Embeds show the intro and the note; the strategy follows once the catalogue loads per locale.
2026-09-30 08:14:37 +00:00
Doxa Maps
7d5d7a62d8 Print on phones: the shared Print bar is labelled in the reader's language from the wall and the poster prints too 2026-09-30 08:04:52 +00:00
Doxa Maps
9b39577830 The ⓘ panel shows each map's strategy: an intro, then the strategy, with Examples | Strategy tabs where a map has examples
MapInfo gains a `strategyKey` prop: a catalogue key prefix whose .bottom is the bottom line and .p1, .p2 … the
points, read in order until the first missing one (the catalogue decides how many). The popup shows the intro
(the lead), then:
- a map with examples AND a strategy gets two tabs, Examples first, then Strategy (44px targets, reset to
  Examples on every open);
- a map with only a strategy goes straight to it, under a Strategy heading;
- a map with neither is unchanged.
The takeaway is not shown beside a strategy, which supersedes it. Labels come from mapInfo.tabExamples and
mapInfo.tabStrategy. Prayer Progress's own info (for embeds) names its strategy key too.
2026-09-30 08:04:11 +00:00
Doxa Maps
c596a82233 Research Gallery: every tab's info names its strategy
Each tabInfo row names its strategy literally (strategyKey), for the
area scan, and MapInfo reads the bottom line and points from it. The
rebuild of the consumers follows at landing, on the landed train.
2026-09-30 08:04:09 +00:00
Doxa Maps
63a64d1bf9 Merge remote-tracking branch 'origin/development' into HEAD
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	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/doxa-simple-map/doxa-simple-map.js
#	public/dx-maps/doxa-simple-map/doxa-simple-map/adoption/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/engagement/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/prayer/index.html
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
2026-09-30 07:58:25 +00:00
Doxa Maps
ce442e58b8 Merge origin/development into gospel/phone-legend
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
2026-09-30 07:46:51 +00:00
Doxa Maps
dd592841db Merge remote-tracking branch 'origin/development' into upg100/land-s9-floor
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-09-30 07:41:21 +00:00
Doxa Maps
9a03de6c99 Merge remote-tracking branch 'origin/deep-research-plugin/gal1' into HEAD
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid.js
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/default/index.html
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/index.html
#	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/doxa-simple-map/doxa-simple-map.js
#	public/dx-maps/doxa-simple-map/doxa-simple-map/adoption/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/engagement/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/prayer/index.html
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
#	public/dx-maps/research-dashboard/research-dashboard.js
#	public/dx-maps/research-dashboard/research-dashboard/index.html
2026-09-30 07:34:58 +00:00
Doxa Maps
5973e5dcd5 Merge remote-tracking branch 'origin/development' into HEAD
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/index.html
#	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/doxa-simple-map/doxa-simple-map.js
#	public/dx-maps/doxa-simple-map/doxa-simple-map/adoption/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/engagement/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/prayer/index.html
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
#	public/dx-maps/research-dashboard/research-dashboard.js
#	public/dx-maps/research-dashboard/research-dashboard/index.html
2026-09-30 07:34:53 +00:00
Doxa Maps
f544ca6334 Print on phones, everywhere: the map's poster dialog, research-map, the gospel tree, the planner and the wall
Every other caller of the in-place print moves onto the phone path the poster wall already uses:
printImageBlob (the map's poster/download dialog and research-map) prints the page itself on a phone,
and the gospel tree, the prayer-walk planner and the wall of people groups call printDocument. A caller
without its own progress dialog gets a shared Print bar when the tap has expired, labelled through the
caller's own translator. Desktop keeps the in-place frame unchanged. Source only; the bundles are rebuilt
when it lands.
2026-09-30 07:34:19 +00:00
Doxa Maps
6add0b1c22 Merge upg100/pin-radius (S9 v2) into upg100/credit-floor-lb, and rebuild my-upg-100-list from the merged source 2026-09-30 07:30:24 +00:00
Doxa Maps
bdf10ef7f9 UPG-100 on a phone: the batch HUD's floor drops the credit band
LegendMobile now moves both engines' bottom corners to the top of the
map below 768px, so the 30px credit band no longer sits under UPG-100's
bottom controls on a phone. --upg-credit-floor keeps the sheet and the
round menu button there and drops the band, so the batch HUD sits 30px
lower, over the sheet and the button. Desktop is unchanged.
2026-09-30 07:22:58 +00:00
Doxa Maps
0bdbd3536b Merge remote-tracking branch 'origin/development' into regions/s5-p8-land
# 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 07:19:55 +00:00
Doxa Maps
fcb92ba555 Merge origin/development into gospel/phone-legend
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
2026-09-30 07:11:18 +00:00
Doxa Maps
916c200797 Gospel Resources' folded phone legend is slimmer, and keeps Arabic on two lines 2026-09-30 07:09:38 +00:00
Doxa Maps
ba3aded063 Merge origin/development into gospel/fab-clearance 2026-09-30 07:04:59 +00:00
Doxa Maps
d080a50aeb Research Gallery: each map's info says only what that map does
- Simple Research drops the example packet (a UPG-100 zone's, not
  something its own view makes) and its takeaway line, which promised a
  poster and a prayer packet a reader cannot reach from this map.
- Every tab whose map draws people-group pins (UPG-100, Simple Research,
  Prayer Progress, Cities with Internet, Gospel Resources) carries the
  approximate-location caveat as its info note (pins.approximate), so
  it stays findable where a phone legend no longer states it.
- The Regions comment no longer says China is withheld: China prints.

The gallery bundle grows by about 3.6 KB raw (1.1 KB gzipped) for the pins
catalogue area; the rebuild is in the commit that closes this series.
2026-09-30 07:03:51 +00:00
Doxa Maps
293f33d64f Merge remote-tracking branch 'origin/development' into upg100/no-speaker 2026-09-30 07:02:22 +00:00
Doxa Maps
8af13da855 UPG-100 pins: the tap target keeps its size while the dot shrinks
The smaller world-zoom dots also shrank what a tap hits. The pin click
was bound to the drawn layer, and both engines hit-test a circle at
radius + stroke (about 7 to 4 px at world zoom). An invisible twin,
'upg-pins-hit', now carries the drawn layer's previous ramps, and the
click and cursor handlers bind to it, so a tap selects what it selected
before and only the drawing changes. Both of its opacities are 0; the
stroke's default would otherwise draw an opaque black ring.

The visual gate's "is a pin here?" checks ask the twin, the layer a
tap actually hits. The comment that quoted the size report now
describes it instead.
2026-09-30 06:59:37 +00:00
Doxa Maps
575fb2a461 Merge origin/development into studio/revert-pure 2026-09-30 06:57:41 +00:00
Doxa Maps
52cab2408e Plugin Studio on a phone: a button to collapse the header
The layout hides the header's meta slot at phone width (its 56px bar has no
room for it), and the "Hide header" button lived there, so on a phone the
header could not be collapsed at all. A phone-only copy of the button now sits
in the header's end corner (44px, the tabs' corner radius, the same localised
label). The floating "Show header" button brings the header back, as on a
desktop. Wider screens are unchanged.
2026-09-30 06:55:44 +00:00
Doxa Maps
e9c635eb33 Prayer Progress's ⓘ note comment: true whether or not the pin note shows
Comment only; the built bundle is byte-identical.
2026-09-30 06:54:41 +00:00
Doxa Maps
f85f4f8a66 Merge remote-tracking branch 'origin/development' into regions/ar-print-english 2026-09-30 06:53:16 +00:00
Doxa Maps
09d3fbd8b2 UPG-100 wall: the two-up comment keeps its reason, not its speaker
The comment on minCardPx 150 said who chose two-up. It now keeps the
engineering reason (work like the country posters; at two-up a poster
title is too small to read, and two-up was chosen with that trade shown
side by side) and names no one, so check:no-new-driver-references
passes again.

Template comment only: my-upg-100-list rebuilds byte-equal, and the
tree regenerates unchanged.
2026-09-30 06:51:21 +00:00
Doxa Maps
3ab442c2f2 Regions on phones: a new region or country opens at its top, and its map is square
Picking a region from the all-regions table, or a country from a region, kept the old scroll
height, so the new page opened at the bottom; the dashboard now scrolls its own container to the
top when the subject changes (switching to the list and back changes no subject and keeps its
place). The region and country maps take the all-regions map's square shape under 768px; the shared
map component keeps its portrait default for the country page.
2026-09-30 06:46:37 +00:00
Doxa Maps
f8612c4f3f Merge remote-tracking branch 'origin/development' into HEAD
# Conflicts:
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid.js
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/default/index.html
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
2026-09-30 06:44:32 +00:00
Doxa Maps
5052031484 Merge origin/development into gospel/fab-clearance 2026-09-30 06:41:34 +00:00
Doxa Maps
151fb8f0eb Prayer Progress's ⓘ carries the approximate-location caveat; rebuild every ⓘ-control consumer
The ⓘ panel now states that a dot marks where a people is found, not a town or a boundary (noteKey
pins.approximate, the catalogue string the map's pin note used, in all 11 locales), so the caveat
stays available to a reader who asks once the phone legend stops stating it.

Also rebuilds every bundle the MapInfoButton / MapInfo change reaches, as the landing precondition
names them: research-dashboard, dashboard-plus-grid, cities-internet, gospel-resources and
doxa-research-map (their behaviour is unchanged: standalone is opt-in), plus doxa-simple-map for the
note. Then tree + SRI.
2026-09-30 06:36:49 +00:00
Doxa Maps
6c2756e5b0 Merge remote-tracking branch 'origin/development' into upg100/land-terr-2up 2026-09-30 06:35:37 +00:00
Doxa Maps
f558b1b43f Cities with Internet and Gospel Resources lift their credit clear of the gallery's round ☰
On a phone the gallery's round ☰ sits in a bottom corner and covered the first ~30px of these maps'
licence credit (the last ~30-40px in Arabic, where it mirrors). The gallery publishes
--map-fab-clearance while the button shows, and every LegendMobile map lifts the engine's bottom
corners by it; these two maps have their own legends, so they never did. They now lift the same
corners, the credit's and a Mapbox wordmark's. The variable is unset without the button, so desktop
is unchanged.

Rebuilds cities-internet and gospel-resources, with their pages and the two manifests.
2026-09-30 06:19:59 +00:00
Doxa Maps
7d2a5f7778 The grid's search row starts beside the gallery's round ☰ on a phone
At rest on a phone the search row sits where the gallery's 44px ☰ circle lands (bottom-left, or
bottom-right in Arabic), so the circle covered the start of the search box. The row now starts at
--map-fab-beside, which the layout publishes only while the circle shows. Everywhere else the
value is 0, so the change does nothing until the circle comes back.
2026-09-30 06:15:30 +00:00
Doxa Maps
d03b24e613 Prayer Progress carries its own "What can this map do?", so the ⓘ works wherever the map is embedded
On a partner page or a standalone preset page the ⓘ control rendered nothing, because only the
gallery answered it and the ⓘ's text lived in the gallery's settings. Now the map carries its info
(plugin-designs/doxa-simple-map/src/mapInfo.js) and a host only adds placement:

- MapInfoButton gains an opt-in `standalone` prop. When no host answers and the map carries info, it
  asks the map for a popup of its own (the 'standalone' event). If a real host appears later, the
  map's popup is dropped and the host takes over. Never inside the gallery (its panes carry
  data-doxa-gallery): there the gallery alone decides, its own info:false included.
- MapInfo gains `popupOnly` (with trigger 'control'): no floating button, since the map's control is
  the only button; it answers that control from inside the map, points at it once per page load,
  and opens the same popup (the bottom sheet on phones). It announces itself as local, so the
  control can tell it from a real host.
- Prayer Progress mounts that popup beside its control column, only when asked.

Per preset: the text describes the prayer map, so a map that shows the Prayer tab has info (the full
profile and the prayer preset); the engagement-only and adoption-only presets have none and show no
ⓘ, as before. A host's profile-config info:false removes the ⓘ. Every other MapInfoButton consumer
is unchanged (standalone is off by default).

doxa-simple-map grows by 20,590 bytes raw (5,699 gzipped), for compiling MapInfo. Rebuilt
doxa-simple-map and doxa-maps-spa, then tree + SRI.
2026-09-30 06:15:11 +00:00
Doxa Maps
f61bce7ea6 Gospel Resources: a country or people-group selection tells the tap hint it can go
The tap hint goes away on the reader's first pin, and it listens for uiStore.selectPeopleGroup,
which this map never calls: it selects through its own refs. A selection here now says so with the
dxmaps:pin-selected event the hint also hears, from inside the map's root. The watch sits after both
refs are declared; above them it would throw at setup.

Rebuilds gospel-resources only, with its pages and the two manifests.
2026-09-30 06:07:54 +00:00
Doxa Maps
bc8bb3345b Merge branch 'upg100/wall-2up' into upg100/land-terr-2up
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-09-30 06:07:40 +00:00
Doxa Maps
0990c7bbc0 Merge branch 'upg100/territory-counts' into upg100/land-terr-2up
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
2026-09-30 06:07:38 +00:00
Doxa Maps
3df69dde01 Regions: the country poster prints in English in every locale, like the Country Posters wall
The Regions tab handed the sheet generator its localised card, so an Arabic reader's poster read
"Pray for السودان" and Administrative areas "السودان" beside an English "Countries: Sudan". The poster
is English by recorded decision; the generator now gets the data's own record by id, as the wall does.
2026-09-30 06:01:39 +00:00
Doxa Maps
3aec8b1f8d UPG-100 pins: small when zoomed out, unchanged zoomed in
Reported from a phone: the pins are "comically large" zoomed out. The
radius ramp began at z=1 (5 px), and MapLibre clamps below the first
stop, so the whole-world view drew all 2,107 dots at 5 px with a 1.8 px
halo. India and Africa became solid blobs, and the zone labels vanished
under them. The old sizing reasoned from one hundred dots; the map draws
every group of every list.

The ramp now starts at z=0 (2.6 px), between all-people-groups (2.2)
and the library's standard ramp (3), and reaches the same 9 px by z=8.
The halo shrinks with it (0.9 px at z=0) but stays solid and dark,
because the dots sit on fills of their own zone's hue.

Measured on the frozen item-5 candidate with this bundle overlaid, at
the gallery's opening zoom (1.5) at 390 and 1440: a pin went from
14.1 px across to 8.3 px (radius 5.25 → 3.05, halo 1.81 → 1.09), about
35% of the area. From z=8 on nothing changes.
2026-09-30 05:55:56 +00:00
Doxa Maps
002b256ce1 Cities with Internet and Gospel Resources get the edge scroll strips on their map
Both maps build their map with new gl.Map rather than through useMapInstance, so nothing ever wired the
shared scroll strips for them: on a phone there was no scroll escape at the map's edges, where every
other map has one. They now render the two strips beside the map and hand them to
useEdgeScrollAffordance, UPG-100's pattern, flagged per embed by edgeScrollAffordance (default on).
The strips sit under everything but the canvas, so the licence credit stays on top of them.

Rebuilds cities-internet and gospel-resources, with their pages and the two manifests.
2026-09-30 05:54:22 +00:00
Doxa Maps
7eef2a7393 UPG-100 wall: "Posters per row: 2" shows two on a phone
The select read 2 while the wall showed one. The shared clamp (210px per
card) forced one column at 390 and silently overrode it. The wall now
opts into PosterWall's minCardPx (150), as the country posters did, so a
phone keeps the columns the reader chose.

Measured at 390, en + ar, with this bundle overlaid on the frozen item-5
candidate: 2 columns (select 2), cards 162px, 0 of 12 action labels
clipped. The poster thumbnails are 114px wide, so a poster's title band
renders about 9px tall (25px at one per row). The title is not readable
at that size; the two-up choice was made with that in view. The
two-line "Show on map" pill and the print options overhanging the card
are PosterWall's own (their fixes are separate).
2026-09-30 05:50:40 +00:00
Doxa Maps
cf16866111 Merge remote-tracking branch 'origin/development' into simpleresearch-plugin/filters-icon 2026-09-30 05:49:30 +00:00
Doxa Maps
6dead067b9 Merge origin/development into gospel/phone-legend
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
2026-09-30 05:48:44 +00:00
Doxa Maps
08dc0bdbe2 UPG-100: a tapped country counts its people groups again
Select your own territory always found 0 people groups (reported from a
phone). resolveTerritory filed a feature as ADM1 whenever it had a
shapeName. The world ADM0 boundaries now carry one too (Sudan:
{ shapeGroup:'SDN', shapeName:'Sudan', iso3:'SDN' }), so every tapped
country became a province:
- key adm1:Sudan with a null count, and a HUD total of 0 UUPG;
- a Prayer List that refused it: "No people-group data for Sudan —
  select the country instead".

The level now comes from where zone-geometry drew the feature. India
states and China provinces come ONLY from the gb-IND/CHN-ADM1 pools, and
only when properties.listId matches the zone, so an ADM1 feature carries
listId; a country never does. A legacy feature with a shapeName and no
iso3 stays ADM1.

Measured at 390 on the frozen item-5 candidate, with this bundle
overlaid:
- tap Sudan → adm0:SDN, 105; tap Chad → adm0:TCD, 53; total 158;
- Prayer List fetches the groups and prints (1 print, no error).
The same flow as served before the fix: adm1:Sudan, 0 UUPG, the refusal,
0 prints.
2026-09-30 05:47:03 +00:00
Doxa Maps
11cb626de9 Merge origin/development into gospel/info-control
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
2026-09-30 05:42:39 +00:00
Doxa Maps
8761483879 The grid's "Hide filters" icon no longer turns upside down
The filters toggle turned every svg in the button over when the filters were open. So the filter
icon beside the label flipped as well, with its longest line at the bottom, which read as a broken
icon. That shows on a phone, where the grid opens with its filters expanded. Only the chevron turns
over now.
2026-09-30 05:37:07 +00:00
Doxa Maps
2b70820f24 Gospel Resources on a phone: a slimmer folded legend, and an open one that stops at 70%
Folded, the legend took three rows of large pill-round controls, about 30% of a phone's page. The
Gap / Resources found buttons are 32px now and squared to the fold button's corners, the search box
is slimmer, and the fold button shares the mode row: two rows instead of three. Open, the legend stops
at 70% of the map and scrolls inside, instead of covering all of it. 32px stays above WCAG 2.5.8's
24px floor. Desktop is unchanged.

Rebuilds gospel-resources only, with its pages and the two manifests.
2026-09-30 05:35:14 +00:00
Doxa Maps
ed1091f59b Merge remote-tracking branch 'origin/development' into big-picture-plugin/bp-c3-header
# Conflicts:
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html
#	public/dx-maps/doxa-maps-spa/doxa-maps-spa/index.html
#	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-30 05:16:14 +00:00