diff --git a/data/posters/andean-caribbean.html b/data/posters/andean-caribbean.html
new file mode 100644
index 000000000..9d2eefa3d
--- /dev/null
+++ b/data/posters/andean-caribbean.html
@@ -0,0 +1,355 @@
+
+Andean + Caribbean — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-china-tibet-autonomous-region.html b/data/posters/asia-china-tibet-autonomous-region.html
new file mode 100644
index 000000000..a0d84ed55
--- /dev/null
+++ b/data/posters/asia-china-tibet-autonomous-region.html
@@ -0,0 +1,355 @@
+
+Mainland China + Mongolia — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-china-yunnan-province.html b/data/posters/asia-china-yunnan-province.html
new file mode 100644
index 000000000..a2d332d98
--- /dev/null
+++ b/data/posters/asia-china-yunnan-province.html
@@ -0,0 +1,355 @@
+
+Southern China — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-andhra-pradesh.html b/data/posters/asia-india-andhra-pradesh.html
new file mode 100644
index 000000000..ed9d5690f
--- /dev/null
+++ b/data/posters/asia-india-andhra-pradesh.html
@@ -0,0 +1,355 @@
+
+South-Central India — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-gujarat.html b/data/posters/asia-india-gujarat.html
new file mode 100644
index 000000000..2ae53480b
--- /dev/null
+++ b/data/posters/asia-india-gujarat.html
@@ -0,0 +1,355 @@
+
+West India — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-karnataka.html b/data/posters/asia-india-karnataka.html
new file mode 100644
index 000000000..a83823f0e
--- /dev/null
+++ b/data/posters/asia-india-karnataka.html
@@ -0,0 +1,355 @@
+
+Southwest India — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-kerala.html b/data/posters/asia-india-kerala.html
new file mode 100644
index 000000000..f7fd6443b
--- /dev/null
+++ b/data/posters/asia-india-kerala.html
@@ -0,0 +1,355 @@
+
+Malabar Coast — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-madhya-pradesh.html b/data/posters/asia-india-madhya-pradesh.html
new file mode 100644
index 000000000..05290b99c
--- /dev/null
+++ b/data/posters/asia-india-madhya-pradesh.html
@@ -0,0 +1,355 @@
+
+Central India — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-odisha.html b/data/posters/asia-india-odisha.html
new file mode 100644
index 000000000..65b63bdc0
--- /dev/null
+++ b/data/posters/asia-india-odisha.html
@@ -0,0 +1,355 @@
+
+East India — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-rajasthan.html b/data/posters/asia-india-rajasthan.html
new file mode 100644
index 000000000..4bc19803c
--- /dev/null
+++ b/data/posters/asia-india-rajasthan.html
@@ -0,0 +1,355 @@
+
+Northwest India — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-tamil-nadu.html b/data/posters/asia-india-tamil-nadu.html
new file mode 100644
index 000000000..6e5799b64
--- /dev/null
+++ b/data/posters/asia-india-tamil-nadu.html
@@ -0,0 +1,355 @@
+
+Southeast India + Andaman Islands — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-uttarakhand.html b/data/posters/asia-india-uttarakhand.html
new file mode 100644
index 000000000..36c1c8088
--- /dev/null
+++ b/data/posters/asia-india-uttarakhand.html
@@ -0,0 +1,355 @@
+
+North India + Nepal — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/asia-india-west-bengal.html b/data/posters/asia-india-west-bengal.html
new file mode 100644
index 000000000..21571eee4
--- /dev/null
+++ b/data/posters/asia-india-west-bengal.html
@@ -0,0 +1,355 @@
+
+Northeast India + Bangladesh + Bhutan — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/brazil.html b/data/posters/brazil.html
new file mode 100644
index 000000000..c5d034725
--- /dev/null
+++ b/data/posters/brazil.html
@@ -0,0 +1,355 @@
+
+Brazil — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/central-africa.html b/data/posters/central-africa.html
new file mode 100644
index 000000000..0ff9d1b97
--- /dev/null
+++ b/data/posters/central-africa.html
@@ -0,0 +1,355 @@
+
+Central Africa — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/deaf.html b/data/posters/deaf.html
new file mode 100644
index 000000000..d292aec1b
--- /dev/null
+++ b/data/posters/deaf.html
@@ -0,0 +1,355 @@
+
+Deaf (affinity bloc A017) — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/east-africa.html b/data/posters/east-africa.html
new file mode 100644
index 000000000..3529c1c23
--- /dev/null
+++ b/data/posters/east-africa.html
@@ -0,0 +1,355 @@
+
+East Africa — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/europe.html b/data/posters/europe.html
new file mode 100644
index 000000000..395879d04
--- /dev/null
+++ b/data/posters/europe.html
@@ -0,0 +1,355 @@
+
+Europe — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/laos.html b/data/posters/laos.html
new file mode 100644
index 000000000..81dc0802b
--- /dev/null
+++ b/data/posters/laos.html
@@ -0,0 +1,355 @@
+
+Laos — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/maghreb-egypt.html b/data/posters/maghreb-egypt.html
new file mode 100644
index 000000000..9bf1142dd
--- /dev/null
+++ b/data/posters/maghreb-egypt.html
@@ -0,0 +1,355 @@
+
+Maghreb + Egypt — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/mainland-se-asia-philippines.html b/data/posters/mainland-se-asia-philippines.html
new file mode 100644
index 000000000..c78e2f383
--- /dev/null
+++ b/data/posters/mainland-se-asia-philippines.html
@@ -0,0 +1,355 @@
+
+Mainland SE Asia + Philippines — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/middle-east-core.html b/data/posters/middle-east-core.html
new file mode 100644
index 000000000..e70809a50
--- /dev/null
+++ b/data/posters/middle-east-core.html
@@ -0,0 +1,355 @@
+
+Middle East Core — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/oceania-indonesia.html b/data/posters/oceania-indonesia.html
new file mode 100644
index 000000000..3479edbe8
--- /dev/null
+++ b/data/posters/oceania-indonesia.html
@@ -0,0 +1,355 @@
+
+Oceania + Indonesia — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/southern-africa-islands.html b/data/posters/southern-africa-islands.html
new file mode 100644
index 000000000..1b519f434
--- /dev/null
+++ b/data/posters/southern-africa-islands.html
@@ -0,0 +1,355 @@
+
+Southern Africa + Islands of East Africa — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/sudan.html b/data/posters/sudan.html
new file mode 100644
index 000000000..4fad73687
--- /dev/null
+++ b/data/posters/sudan.html
@@ -0,0 +1,355 @@
+
+Sudan — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/uncovered-nas-a.html b/data/posters/uncovered-nas-a.html
new file mode 100644
index 000000000..e3ad15a9c
--- /dev/null
+++ b/data/posters/uncovered-nas-a.html
@@ -0,0 +1,355 @@
+
+Central Asia + Pakistan — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/uncovered-scatter.html b/data/posters/uncovered-scatter.html
new file mode 100644
index 000000000..3cc3eea59
--- /dev/null
+++ b/data/posters/uncovered-scatter.html
@@ -0,0 +1,355 @@
+
+Scattered / Diaspora — UPG poster
+
\ No newline at end of file
diff --git a/data/posters/west-africa.html b/data/posters/west-africa.html
new file mode 100644
index 000000000..261e2c041
--- /dev/null
+++ b/data/posters/west-africa.html
@@ -0,0 +1,355 @@
+
+West Africa — UPG poster
+
\ No newline at end of file
diff --git a/internal/check-poster-print-fallback.mjs b/internal/check-poster-print-fallback.mjs
new file mode 100644
index 000000000..8c6f2b6ff
--- /dev/null
+++ b/internal/check-poster-print-fallback.mjs
@@ -0,0 +1,193 @@
+#!/usr/bin/env node
+// check-poster-print-fallback — the PRINT preview must survive a missing .webp.
+//
+// ★ THE ASYMMETRY THIS GUARDS. posters/*.webp is not shipped by default (42MB;
+// bundling it pushed the tree to 80MB, git-packed to 57MiB, and the catalog
+// rejected the push outright). The DOWNLOAD path has always handled that —
+// PosterWall.vue fetches posters/.html and rasterises it in the browser. The
+// PRINT path did not: it handed an a url it never checked, so on a default
+// drop the SAME poster downloaded fine and printed as "Poster not available yet."
+//
+// Two paths, one missing file, different outcomes — and the difference was
+// invisible to every existing gate, because check:poster-raster drives the
+// RENDERER directly and never goes near the print button.
+//
+// ⚠ IT INTERCEPTS THE PRINTED HTML rather than reading the frame back.
+// openPrintFrame calls window.print(), which BLOCKS in headless Chromium, and the
+// frame self-removes on afterprint — reading it back measures a frame that has
+// already gone. Same technique as check-deck-click.
+//
+// ⚠ IT FORCES THE MISS. The dev tree may or may not have the .webp; a gate whose
+// result depends on that is measuring the fixture, not the product. So every
+// request for posters/.webp is failed at the network layer, which is exactly
+// the default-drop condition, and the .html is left reachable.
+//
+// Usage: node internal/check-poster-print-fallback.mjs [zoneId]
+import { chromium } from 'playwright'
+
+// SKIP, never fail, when the preconditions are absent. This gate needs a SERVED tree
+// that carries posters/.html (posterSources:true or bundlePosters:true). The
+// default tree ships neither, and a clean checkout has no server at all — failing the
+// build on that would only teach people to disable the gate. It says what is missing.
+const WALL = process.argv[2] || process.env.POSTER_WALL_URL
+if (!WALL) {
+ console.log('POSTER-PRINT-FALLBACK: SKIP — no wall url given.')
+ console.log(' Pass one, or set POSTER_WALL_URL. Needs a tree built with posterSources:true')
+ console.log(' and a server: `node library/scripts/posters/publish-html.mjs && bun run tree`.')
+ process.exit(0)
+}
+
+// The poster SOURCE must be reachable before any of this means anything. Without it
+// the fallback has nothing to rasterise and every assertion below would report a
+// product bug that is really a missing fixture.
+const probeId = process.argv[3] || 'laos'
+const srcUrl = new URL(`../assets/posters/${probeId}.html`, WALL).href
+try {
+ const r = await fetch(srcUrl)
+ if (!r.ok) {
+ console.log(`POSTER-PRINT-FALLBACK: SKIP — ${srcUrl} is ${r.status}.`)
+ console.log(' The tree was not built with posterSources:true, so there is no poster source to rasterise.')
+ process.exit(0)
+ }
+} catch {
+ console.log(`POSTER-PRINT-FALLBACK: SKIP — cannot reach ${srcUrl} (no server?).`)
+ process.exit(0)
+}
+
+const browser = await chromium.launch({ args: ['--use-gl=swiftshader', '--enable-unsafe-swiftshader'] })
+const page = await browser.newPage({ viewport: { width: 1400, height: 1000 } })
+const errs = []
+page.on('pageerror', (e) => errs.push(String(e).slice(0, 140)))
+
+// THE DEFAULT-DROP CONDITION, forced: the print-resolution image is absent, its
+// HTML source is not. Anything else would leave the gate at the mercy of whether
+// this particular checkout happens to carry 42MB of posters.
+let webpBlocked = 0
+let htmlServed = 0
+await page.route('**/posters/*.webp', (route) => { webpBlocked += 1; route.abort() })
+await page.route('**/posters/*.html', (route) => { htmlServed += 1; route.continue() })
+
+await page.goto(WALL, { waitUntil: 'load', timeout: 45000 })
+await page.waitForTimeout(8000)
+
+// Capture what reaches the print frame instead of letting it print-and-vanish.
+// ⚠ ASSERT THE HUD, NOT doc.write. Three separate attempts to intercept the printed
+// document all captured nothing while the feature DEMONSTRABLY worked (the HUD ran
+// "generating the poster" and finished clean): openPrintFrame writes into the iframe's
+// OWN realm, calls doc.open() AFTER append — which resets the document and discards a
+// patched write — and the frame self-removes on afterprint. A capture that silently
+// misses reports a product bug that is not there.
+// The HUD is the better assertion anyway: it is what a USER sees, it survives a
+// refactor of the print internals, and it distinguishes the three outcomes that
+// matter — rasterised / shipped-image / failed — which is exactly what this gate is for.
+await page.evaluate(() => {
+ window.__HUD = []
+ window.print = () => {}
+ const walk = (root, out = []) => {
+ for (const el of root.querySelectorAll('*')) { out.push(el); if (el.shadowRoot) walk(el.shadowRoot, out) }
+ return out
+ }
+ window.__readHud = () => walk(document)
+ .filter((e) => e.childElementCount === 0 && e.tagName !== 'SCRIPT' && e.tagName !== 'STYLE')
+ .map((e) => (e.textContent || '').trim())
+ .filter((t) => t && /generating|preparing|saving|not available|failed|blank|error/i.test(t))
+ setInterval(() => { for (const t of window.__readHud()) if (!window.__HUD.includes(t)) window.__HUD.push(t) }, 120)
+})
+
+// Click the REAL print control, found by its accessible name through every shadow root.
+const clicked = await page.evaluate(() => {
+ const walk = (root, out = []) => {
+ for (const el of root.querySelectorAll('*')) {
+ out.push(el)
+ if (el.shadowRoot) walk(el.shadowRoot, out)
+ }
+ return out
+ }
+ const all = walk(document)
+ const btn = all.find((el) => {
+ if (!(el instanceof HTMLElement)) return false
+ if (el.tagName !== 'BUTTON' && el.getAttribute('role') !== 'button') return false
+ const label = `${el.getAttribute('aria-label') || ''} ${el.getAttribute('title') || ''} ${el.textContent || ''}`
+ // ⚠ THE CONTROL IS NOT LABELLED "print". It reads "UPG prayer poster" — the
+ // product names the ARTEFACT, not the action. A /print/i matcher finds nothing
+ // and this gate then reports "nothing reached the print frame", which reads as a
+ // product bug and is purely the selector. Measured 2026-09-24: the .webp and
+ // .html request counters even LOOKED corroborating, because the wall loads both
+ // on its own. Match the poster control, and exclude its siblings by name.
+ return /poster/i.test(label) && !/list|deck|packet|show on map/i.test(label)
+ })
+ if (!btn) {
+ return { ok: false, labels: all.filter((e) => e.tagName === 'BUTTON')
+ .map((e) => (e.getAttribute('title') || e.textContent || '').trim().slice(0, 30)).filter(Boolean).slice(0, 14) }
+ }
+ btn.click()
+ return { ok: true }
+})
+
+let hud = []
+let settled = false
+if (clicked.ok) {
+ // Rasterising a 3000px poster takes real time; poll for the terminal state rather
+ // than guessing one timeout.
+ for (let i = 0; i < 45 && !settled; i++) {
+ await page.waitForTimeout(1000)
+ hud = await page.evaluate(() => window.__HUD || [])
+ // Terminal states: an explicit failure, or "generating" seen AND no longer showing.
+ const live = await page.evaluate(() => window.__readHud())
+ const failing = hud.some((t) => /not available|failed|blank|error/i.test(t))
+ const generated = hud.some((t) => /generating/i.test(t))
+ if (failing) { settled = true; break }
+ if (generated && !live.some((t) => /generating|preparing|saving/i.test(t))) { settled = true }
+ }
+}
+await browser.close()
+
+const fails = []
+if (!clicked.ok) {
+ fails.push(`no poster print control found in any shadow root (buttons seen: ${(clicked.labels || []).join(' | ')})`)
+}
+if (clicked.ok && !hud.length) {
+ fails.push('the poster control was clicked but the export HUD never reported anything — '
+ + 'the click did not reach printPoster at all')
+}
+// THE LOAD-BEARING ASSERTIONS.
+if (hud.some((t) => /Poster not available yet/i.test(t))) {
+ fails.push('the print preview opened on "Poster not available yet" — the old behaviour: '
+ + 'the .webp 404ed and the rasterise fallback did not run')
+}
+if (hud.some((t) => /not available|failed|blank|error/i.test(t))) {
+ fails.push(`the print path ended in an error state: ${JSON.stringify(hud.filter((t) => /not available|failed|blank|error/i.test(t)))}`)
+}
+// With EVERY .webp aborted, a clean run is only possible via the rasteriser — so the
+// "generating the poster" phase MUST have been entered. Its absence means the preview
+// came from somewhere this gate did not intend, and proves nothing about the fallback.
+if (clicked.ok && !hud.some((t) => /generating/i.test(t))) {
+ fails.push(`the fallback never entered its "generating the poster" phase (HUD: ${JSON.stringify(hud)}) — `
+ + 'with every .webp aborted there is no other way to a working preview, so this did not exercise the fallback')
+}
+if (clicked.ok && !settled) {
+ fails.push('the print path never reached a terminal state within 45s')
+}
+if (webpBlocked === 0) {
+ fails.push('no posters/*.webp request was made at all — the print path never probed the '
+ + 'image, so this gate did not exercise the fallback it exists to test')
+}
+if (htmlServed === 0) {
+ fails.push('no posters/*.html was fetched — the rasterise fallback never ran')
+}
+if (errs.length) fails.push(`${errs.length} page error(s): ${errs[0]}`)
+
+console.log('POSTER-PRINT-FALLBACK')
+console.log(` wall : ${WALL}`)
+console.log(` .webp requests : ${webpBlocked} (all aborted — the default-drop condition)`)
+console.log(` .html requests : ${htmlServed}`)
+console.log(` print button : ${clicked.ok ? 'found and clicked' : 'NOT FOUND'}`)
+console.log(` HUD : ${hud.length ? JSON.stringify(hud) : '(nothing)'}`)
+
+if (fails.length) {
+ console.error(`\nPOSTER-PRINT-FALLBACK: FAIL — ${fails.length} problem(s)`)
+ for (const f of fails) console.error(` - ${f}`)
+ process.exit(1)
+}
+console.log('\nPOSTER-PRINT-FALLBACK: PASS — with every .webp missing, the print preview still '
+ + 'opens on a real rasterised poster instead of "Poster not available yet".')
diff --git a/internal/generate-tree.mjs b/internal/generate-tree.mjs
index 72efe6df0..03ce1a3a5 100644
--- a/internal/generate-tree.mjs
+++ b/internal/generate-tree.mjs
@@ -96,9 +96,14 @@ function readBuildConfig() {
// from previews/, so the tree stays visually complete without them; bundling both pushed the
// tree to 74 MB and the catalog server refused the pack. Turn on only for a fully offline drop.
const bundlePosters = cfg.bundlePosters === true
- return { name, paths, embedBaseUrl, tokenUrl, token, assetsBaseUrl, apiBaseUrl, gatedProfiles, qaWidget, bundlePosters }
+ // Ship the poster SOURCES (.html, what the browser rasterises) without the
+ // 40.9 MB of rasters. bundlePosters is a single boolean over a directory holding
+ // both, so it could not express this — and "neither" is what left export and print
+ // preview 404ing on a default drop. Implied by bundlePosters:true.
+ const posterSources = cfg.posterSources === true || bundlePosters
+ return { name, paths, embedBaseUrl, tokenUrl, token, assetsBaseUrl, apiBaseUrl, gatedProfiles, qaWidget, bundlePosters, posterSources }
} catch {
- return { name: 'doxa-maps', paths: [], embedBaseUrl: '', tokenUrl: '', token: '', assetsBaseUrl: '', apiBaseUrl: '', gatedProfiles: [], qaWidget: true, bundlePosters: false }
+ return { name: 'doxa-maps', paths: [], embedBaseUrl: '', tokenUrl: '', token: '', assetsBaseUrl: '', apiBaseUrl: '', gatedProfiles: [], qaWidget: true, bundlePosters: false, posterSources: false }
}
}
const DEST_CONFIG = readBuildConfig()
@@ -1481,17 +1486,47 @@ function main() {
// so the URL is fetched from INSIDE the tree; with images/ absent from this allowlist it
// 404s and the watermark is simply not there, with no error anywhere — the background just
// does not paint, which is even quieter than the font failure was.
- const assetDirs = DEST_CONFIG.bundlePosters
+ // ★ posters/ CARRIES TWO VERY DIFFERENT PAYLOADS and bundlePosters is one boolean,
+ // so it could only ever ship both or neither:
+ // .webp 378 files, 40.9 MB — the print-resolution rasters. This is the weight
+ // that pushed the tree to 80MB and got the push rejected.
+ // .html 28 files, the poster SOURCE the browser rasterises when no .webp is
+ // present (library/packet/poster-raster.js). ~0.3 MB each.
+ // "Neither" is what a default drop got, and it is why BOTH full-size paths 404'd:
+ // export fell back to fetching .html and that was not shipped either, so the
+ // fallback had nothing to fetch. posterSources ships the sources WITHOUT the rasters,
+ // which is the only combination the old boolean could not express.
+ // Default stays FALSE — 28 sources are ~27.9 MB raw, real weight that needs a
+ // deployment decision, not a silent default. This makes the choice available.
+ const posterExts = DEST_CONFIG.bundlePosters ? null // everything
+ : (DEST_CONFIG.posterSources ? ['.html'] : []) // sources only / nothing
+ const assetDirs = (posterExts === null || posterExts.length)
? ['previews', 'posters', 'fonts', 'images']
: ['previews', 'fonts', 'images']
for (const dirName of assetDirs) {
const src = join(pubAssets, dirName)
if (!existsSync(src)) { console.warn(`[generate-tree] WARN missing tree asset dir: assets/${dirName}`); continue }
+ if (dirName === 'posters' && posterExts !== null) {
+ // Selective copy: only the extensions this deployment asked for.
+ mkdirSync(join(treeAssets, dirName), { recursive: true })
+ let n = 0
+ for (const f of readdirSync(src)) {
+ if (!posterExts.some((e) => f.endsWith(e))) continue
+ cpSync(join(src, f), join(treeAssets, dirName, f))
+ n += 1
+ }
+ staged += n
+ continue
+ }
cpSync(src, join(treeAssets, dirName), { recursive: true })
staged += readdirSync(src).length
}
- if (!DEST_CONFIG.bundlePosters) {
- console.log('[generate-tree] posters/ NOT bundled (bundlePosters:false) — the wall renders from previews; set an absolute assetsBaseUrl to serve full posters on demand')
+ if (DEST_CONFIG.bundlePosters) {
+ console.log('[generate-tree] posters/ bundled in full (bundlePosters:true) — rasters + sources')
+ } else if (DEST_CONFIG.posterSources) {
+ console.log('[generate-tree] posters/*.html bundled (posterSources:true) — no rasters; export and print RASTERISE in the browser')
+ } else {
+ console.log('[generate-tree] posters/ NOT bundled — the wall renders from previews; export and print need posterSources:true, bundlePosters:true, or an absolute assetsBaseUrl')
}
console.log(`[generate-tree] staged ${staged} runtime asset(s) → ${TREE_NAME}/assets (tree is self-contained)`)
}
diff --git a/library/scripts/posters/publish-html.mjs b/library/scripts/posters/publish-html.mjs
index 204c37c5a..49a710c68 100644
--- a/library/scripts/posters/publish-html.mjs
+++ b/library/scripts/posters/publish-html.mjs
@@ -48,7 +48,13 @@ import { dirname, join, resolve } from 'node:path';
const __dirname = dirname(fileURLToPath(import.meta.url));
const SRC = join(__dirname, 'out', 'posters');
const REPO = resolve(__dirname, '..', '..', '..');
-const DEST = join(REPO, 'public', 'assets', 'posters');
+// ⚠ data/posters, NOT public/assets/posters. public/assets/ is a GENERATED
+// MIRROR: generate-tree.mjs rmSync's it and re-copies data/ over it on every
+// `bun run tree`, so anything written there is deleted by the next build. This
+// script wrote there and its output therefore never survived — which is a large
+// part of why the browser-rasterise fallback still had no input months after it
+// shipped. data/ is the tracked source the mirror is made from.
+const DEST = join(REPO, 'data', 'posters');
const ONLY = process.env.ONLY || '';
if (!existsSync(SRC)) {
@@ -88,7 +94,7 @@ for (const file of readdirSync(SRC)) {
bytes += Buffer.byteLength(html);
}
-console.log(`[publish-html] ${published} poster HTML -> public/assets/posters/`);
+console.log(`[publish-html] ${published} poster HTML -> data/posters/`);
console.log(`[publish-html] ${(bytes / 1048576).toFixed(1)} MB raw `
+ `(gzips to roughly a third over the wire)`);
if (skipped.length) {
diff --git a/package.json b/package.json
index 0a565f05f..d0c700156 100644
--- a/package.json
+++ b/package.json
@@ -145,7 +145,8 @@
"build:bundles": "node internal/run-parallel.mjs --bundles",
"check:maplibre-drops": "node internal/check-maplibre-layer-drops.mjs",
"check:tabs-localized": "node internal/check-tabs-localized.mjs # a chosen locale must CHANGE the rendered tab text. check:i18n-parity compares catalogs to each OTHER, so it cannot tell a shipped translation from a dead one; tabs.json is reached only via a DYNAMIC key (SemanticTreeLegend.vue:40), invisible to any grep. Renders it and reads the result.",
- "check:packets-all": "node internal/check-packets-all.mjs # runs check:packet-render over EVERY generated packet, not one hand-named file. The single-file gate SKIPs with no argument, so it was in package.json, passing in all 11 locales, and in neither gates:pre nor gates:post — it only ran when someone typed a filename. SKIPs when no packets are generated."
+ "check:packets-all": "node internal/check-packets-all.mjs # runs check:packet-render over EVERY generated packet, not one hand-named file. The single-file gate SKIPs with no argument, so it was in package.json, passing in all 11 locales, and in neither gates:pre nor gates:post — it only ran when someone typed a filename. SKIPs when no packets are generated.",
+ "check:poster-print-fallback": "node internal/check-poster-print-fallback.mjs # clicks the REAL poster print control with every posters/*.webp aborted, and asserts the preview RASTERISES from posters/.html instead of opening on \"Poster not available yet\". Needs a served tree built with posterSources:true; SKIPs otherwise."
},
"devDependencies": {
"@capacitor/android": "^7.6.9",
diff --git a/plugin-designs/my-upg-100-list/poster-wall.vue b/plugin-designs/my-upg-100-list/poster-wall.vue
index 16aec6ba9..c8517d619 100644
--- a/plugin-designs/my-upg-100-list/poster-wall.vue
+++ b/plugin-designs/my-upg-100-list/poster-wall.vue
@@ -30,9 +30,15 @@
* (~42MB). See IDEA-POSTER-EXPORT-404-ON-DROPPED-FOLDER-TRADEOFF:
* bundling them pushed the tree to 80MB, git-packed to 57MiB, and the
* catalog REJECTED the push — so the all-in version shipped nothing.
- * Export and print-preview therefore 404 on a default drop and degrade
- * honestly; set bundlePosters:true or point assetsBase at a host that
- * serves posters/ to restore them.
+ * Export and print-preview no longer 404 on a default drop: BOTH now
+ * fall back to fetching posters/.html and rasterising it in the
+ * browser (library/packet/poster-raster.js). Print was the odd one out
+ * until 2026-09-24 — the same poster downloaded fine and PRINTED as
+ * "Poster not available yet." bundlePosters:true or an assetsBase that
+ * serves posters/ still short-circuits the fallback with the shipped webp.
+ * posters/.html — the poster SOURCE, what the fallback rasterises. Also not shipped by
+ * default (28 zones, 27.9MB raw), so on a drop with neither file the
+ * preview still refuses to open rather than printing a blank sheet.
* The @error fallback to a labelled placeholder is still live and still the right behaviour —
* it now covers the missing-poster case rather than the nothing-generated-yet case.
*/
@@ -267,6 +273,16 @@ async function renderFor(list, spec) {
const EXPORT_SPEC = { widthIn: 8.5, heightIn: 12.75, dpi: 150 } // single-canvas, phone-safe
const exportState = ref(null) // { label, phase, message, pct, kind }
+// Blob URLs minted for a rasterised print preview. They CANNOT be revoked when the
+// print window opens — the preview is still loading from them, and revoking
+// early gives a blank sheet — so they are held until this element goes away.
+// One poster is ~1.5MB as a blob; a reader printing a dozen in one session would
+// otherwise pin ~18MB for the life of the page.
+const printObjectUrls = []
+onBeforeUnmount(() => {
+ for (const u of printObjectUrls.splice(0)) { try { URL.revokeObjectURL(u) } catch { /* already gone */ } }
+})
+
// CARD STOCK for the prayer-card deck. The Driver asked to be able to "choose the
// layout of the print dialog to choose the aspect ratio of these prayer cards", so
// the stock is a user choice, not a constant. Poker (2.5x3.5in) is the default: it
@@ -369,7 +385,40 @@ async function printPoster(list) {
exportState.value = { label: list.label, kind: 'Poster', phase: 'fetch',
message: 'preparing print preview', pct: 30 }
try {
- const url = posterUrl(list.id)
+ let url = posterUrl(list.id)
+ // ── THE SAME FALLBACK LADDER THE DOWNLOAD PATH ALREADY CLIMBS ───────────
+ // ★ THE ASYMMETRY THIS FIXES. posters/*.webp is NOT shipped by default (42MB;
+ // bundling it pushed the tree to 80MB, git-packed to 57MiB, and the catalog
+ // rejected the push). The DOWNLOAD path handles that: PosterWall.vue fetches
+ // posters/.html and rasterises it in the browser. The PRINT path did not —
+ // it handed the a url it never checked and, on 404, replaced the whole
+ // preview with "Poster not available yet."
+ // So on a default drop the same poster DOWNLOADED fine and PRINTED as an error
+ // message. The card that recorded this (IDEA-POSTER-EXPORT-404-ON-DROPPED-FOLDER-
+ // TRADEOFF) calls it out precisely: "a print preview that opens on 'Poster not
+ // available yet' is a worse first impression than a failed download."
+ //
+ // Probing costs one HEAD-like GET that is almost always a cache hit when the
+ // image IS shipped, and only on a miss do we pay for the HTML.
+ let res = null
+ try { res = await fetch(url) } catch { /* offline/blocked — treated as a miss */ }
+ if (!res || !res.ok) {
+ exportState.value = { ...exportState.value, phase: 'render',
+ message: 'generating the poster', pct: 55 }
+ const htmlRes = await fetch(`${assetsBase.value}/posters/${list.id}.html`)
+ // Still honest when there is genuinely nothing to render: the preview only
+ // opens once we HAVE a poster, so the reader never sees a blank print dialog.
+ if (!htmlRes.ok) throw new Error(`poster not available (${htmlRes.status})`)
+ const { rasterPoster, looksRendered } = await import('@map/packet/poster-raster.js')
+ const blob = await rasterPoster(await htmlRes.text(), { scale: 2 })
+ // ⚠ An SVG loaded through is an isolated document: a lost stylesheet makes
+ // every fill fall back to BLACK, with no error and a normal file size. Printing
+ // a black square is worse than failing, so verify pixels before opening the
+ // dialog — the same guard the download path uses.
+ if (!(await looksRendered(blob))) throw new Error('the generated poster rendered blank')
+ url = URL.createObjectURL(blob)
+ printObjectUrls.push(url)
+ }
// Preview + print in a dedicated window: a single centered, page-fit image and an
// onload -> print() so the dialog opens on the poster the user is looking at. The
// poster is a 3ft square print (see the template) → @page portrait, image scaled to
diff --git a/public/__gallery/index.html b/public/__gallery/index.html
index 3299f8642..65c92403e 100644
--- a/public/__gallery/index.html
+++ b/public/__gallery/index.html
@@ -94,7 +94,7 @@ code{font-family:ui-monospace,Menlo,monospace}
(function () {
var TREE = "../doxa-maps", TOKEN_SRC = "window.MAP_TOKEN_URL", BAKED_TOKEN = "pk.eyJ1IjoiZ29zeXN0ZW1zIiwiYSI6ImNtZm9vM291czA3amQya3BzYW42YW9ibTcifQ.52WM0IpxY9FcB0zc9f1zbQ", API_BASE = "https://pray.doxa.life", ASSETS_BASE = "", QA = false;
var DEFAULT_TOKEN_URL = '/api/maps/token';
- var BAKED = [{"b":"all-people-groups","s":"./all-people-groups/all-people-groups.js","i":"sha384-MTXYtlLgjWDT2Q4U9u2ud4gpjsE0l39I6dJxxAO/hXjMGcMp6KoECWeUhn4+Fl1Y","e":["all-people-groups"],"p":[{"p":"all-people-groups","e":"all-people-groups","u":"./all-people-groups/all-people-groups/index.html","d":"All 12,379 people groups (peoplegroups.org) in four colors — reached,","c":1,"em":{"iframe":"\u003ciframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-MTXYtlLgjWDT2Q4U9u2ud4gpjsE0l39I6dJxxAO/hXjMGcMp6KoECWeUhn4+Fl1Y\" crossorigin=\"anonymous\">\u003c/script>\n\u003call-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/all-people-groups>"}}]},{"b":"big-picture","s":"./big-picture/big-picture.js","i":"sha384-voYmtWeACTFBJOOeqcbf5cuBKSjyskA89cjvm5qcvrx9IUFTAhLuICyRXUM6fL+Y","e":["bp-big-picture","bp-research-header","people-groups-grid"],"p":[{"p":"big-picture","e":"bp-big-picture","u":"./big-picture/big-picture/index.html","d":"The Cat-4 composite that PAIRS the two real capability elements of the","c":4,"em":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./big-picture/big-picture.js\" integrity=\"sha384-voYmtWeACTFBJOOeqcbf5cuBKSjyskA89cjvm5qcvrx9IUFTAhLuICyRXUM6fL+Y\" crossorigin=\"anonymous\">\u003c/script>\n\u003cbp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/bp-big-picture>"},"in":[{"id":"big-picture","t":"Big Picture — research header ↔ people-groups grid (composite)","a":"","pr":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture"},"e":"bp-big-picture","u":"./big-picture/big-picture/big-picture/index.html"},{"id":"frontier","t":"Big Picture — frontier accent","a":"","pr":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture-frontier","accent":"#22d3ee","title":"Big Picture — Frontier Focus"},"e":"bp-big-picture","u":"./big-picture/big-picture/frontier/index.html"}]}]},{"b":"cities-internet","s":"./cities-internet/cities-internet.js","i":"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0","e":["cities-internet-map"],"p":[{"p":"connectivity-list","e":"cities-internet-map","u":"./cities-internet/connectivity-list/index.html","d":"Countries where DX people groups live, grouped by region, showing measured internet penetration","c":1,"em":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"p":"connectivity-map","e":"cities-internet-map","u":"./cities-internet/connectivity-map/index.html","d":"Every country shaded by measured internet penetration, with its named carriers and dominant","c":1,"em":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"p":"data-tables","e":"cities-internet-map","u":"./cities-internet/data-tables/index.html","d":"Four validated research tables, one tab each, with sortable and filterable columns, CSV and JSON","c":1,"em":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}}]},{"b":"country-posters","s":"./country-posters/country-posters.js","i":"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj","e":["country-posters-map"],"p":[{"p":"countries-map","e":"country-posters-map","u":"./country-posters/countries-map/index.html","d":"The researcher's workbench retargeted from people groups to COUNTRIES — region","c":1,"em":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"p":"country-poster-wall","e":"country-posters-map","u":"./country-posters/country-poster-wall/index.html","d":"One printable card per country, grouped into COLLAPSIBLE regional sections so the","c":1,"em":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"p":"country-posters-mfe","e":"country-posters-mfe","u":"./country-posters/country-posters-mfe/index.html","d":"Country Posters as ONE two-tab element — the countries map and the printable","c":4,"em":{"iframe":"\u003ciframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}}]},{"b":"dashboard-plus-grid","s":"./dashboard-plus-grid/dashboard-plus-grid.js","i":"sha384-q5UVHN5QptVZvJHqrqIFgRpWCj2HRQGiTAO/JYxf5OHmg6XegLjaBMk1AZXWqHRG","e":["dashboard-plus-grid"],"p":[{"p":"dashboard-plus-grid","e":"dashboard-plus-grid","u":"./dashboard-plus-grid/dashboard-plus-grid/index.html","d":"Both children are IMPORTED DIRECTLY (compiled into this ONE bundle — no runtime bundle","c":4,"em":{"iframe":"\u003ciframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-q5UVHN5QptVZvJHqrqIFgRpWCj2HRQGiTAO/JYxf5OHmg6XegLjaBMk1AZXWqHRG\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/dashboard-plus-grid>"},"in":[{"id":"default","t":"default","a":"","pr":{"profile":"dashboard-plus-grid"},"e":"dashboard-plus-grid","u":"./dashboard-plus-grid/dashboard-plus-grid/default/index.html"}]}]},{"b":"demo-map","s":"./demo-map/demo-map.js","i":"sha384-bdvQUz/ahi3yvFWY4niHIt4hJ/2Thd5T/6KP/mobZrtEKchO1XclRQQcc35jt9Cd","e":["demo-map"],"p":[{"p":"demo-map","e":"demo-map","u":"./demo-map/demo-map/index.html","d":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","c":2,"em":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./demo-map/demo-map.js\" integrity=\"sha384-bdvQUz/ahi3yvFWY4niHIt4hJ/2Thd5T/6KP/mobZrtEKchO1XclRQQcc35jt9Cd\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/demo-map>"},"in":[{"id":"maplibre","t":"Demo map — MapLibre (token-free)","a":"","pr":{"profile":"demo-map","provider":"maplibre","instanceId":"demo-maplibre"},"e":"demo-map","u":"./demo-map/demo-map/maplibre/index.html"}]}]},{"b":"doxa-maps-spa","s":"./doxa-maps-spa/doxa-maps-spa.js","i":"sha384-1f+/rBSGo/1jyUmRmGg34CIU/PcGkB7M3jah1DO0ocb5O0zj81wpUemXcz4WAFz8","e":["doxa-maps-spa"],"p":[{"p":"doxa-maps-spa","e":"doxa-maps-spa","u":"./doxa-maps-spa/doxa-maps-spa/index.html","d":"The DX-maps app itself: one element whose vertical-tab rail nests every other","c":5,"em":{"iframe":"\u003ciframe src=\"./doxa-maps-spa/doxa-maps-spa/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-maps-spa/doxa-maps-spa.js\" integrity=\"sha384-1f+/rBSGo/1jyUmRmGg34CIU/PcGkB7M3jah1DO0ocb5O0zj81wpUemXcz4WAFz8\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-maps-spa profile-config='{\"profile\":\"doxa-maps-spa\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-maps-spa>"},"in":[{"id":"app","t":"DX-Maps SPA — Big Picture + every research map (app-shell)","a":"","pr":{"profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"DX-Maps"},"e":"doxa-maps-spa","u":"./doxa-maps-spa/doxa-maps-spa/app/index.html"}]}]},{"b":"doxa-research-map","s":"./doxa-research-map/doxa-research-map.js","i":"sha384-CTfwl1rhm6JTKoUkSjawyQfHWYf55RBcwSDBYmVyQQ6f64Ag3v2dn5eV18yQSKwD","e":["doxa-research-map"],"p":[{"p":"research-map","e":"doxa-research-map","u":"./doxa-research-map/research-map/index.html","d":"The researcher's workbench: every piece a missiologist, demographer or","c":3,"em":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-CTfwl1rhm6JTKoUkSjawyQfHWYf55RBcwSDBYmVyQQ6f64Ag3v2dn5eV18yQSKwD\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-research-map>"},"in":[{"id":"maplibre","t":"Research map — MapLibre (token-free, no search bar)","a":"","pr":{"profile":"research-map","provider":"maplibre","instanceId":"research-map-maplibre"},"e":"doxa-research-map","u":"./doxa-research-map/research-map/maplibre/index.html"}]}]},{"b":"doxa-simple-map","s":"./doxa-simple-map/doxa-simple-map.js","i":"sha384-edWUmiU1eWxE8Ju7FFg5PDfmw21E2NLoVaYmCgM8gXlm8S/9rowTJ7045NvdeIQA","e":["doxa-map","doxa-simple-map"],"p":[{"p":"doxa-simple-map","e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/index.html","d":"The simple world map, shipped as three presets off ONE prop table —","c":2,"em":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-edWUmiU1eWxE8Ju7FFg5PDfmw21E2NLoVaYmCgM8gXlm8S/9rowTJ7045NvdeIQA\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-map>"},"in":[{"id":"prayer","t":"Prayer Map","a":"https://pray.doxa.life","pr":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/prayer/index.html"},{"id":"engagement","t":"Engagement Map","a":"https://pray.doxa.life","pr":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/engagement/index.html"},{"id":"adoption","t":"Adoption Map","a":"https://pray.doxa.life","pr":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/adoption/index.html"}]}]},{"b":"doxa-vision-card","s":"./doxa-vision-card/doxa-vision-card.js","i":"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn","e":["doxa-vision-card"],"p":[{"p":"doxa-vision-card","e":"doxa-vision-card","u":"./doxa-vision-card/doxa-vision-card/index.html","d":"The Capability-1 example: ONE folder -> ONE bundle -> ONE element.","c":2,"em":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-vision-card/doxa-vision-card.js\" integrity=\"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-vision-card profile-config='{\"profile\":\"doxa-vision-card\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-vision-card>"},"in":[{"id":"default","t":"Vision card — reach at a glance","a":"","pr":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-default"},"e":"doxa-vision-card","u":"./doxa-vision-card/doxa-vision-card/default/index.html"},{"id":"frontier","t":"Vision card — frontier accent","a":"","pr":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-frontier","accent":"#22d3ee","title":"The last frontier of the gospel.","tagline":"Frontier people groups — where fewer than one in a thousand follow Jesus.","stats":[{"value":"1,910","label":"Frontier groups","note":"under 0.1% believers"},{"value":"2.1B","label":"People","note":"living in frontier settings"},{"value":"0.1%","label":"Christian","note":"or fewer, in each group"}]},"e":"doxa-vision-card","u":"./doxa-vision-card/doxa-vision-card/frontier/index.html"}]}]},{"b":"golden-path-check","s":"./golden-path-check/golden-path-check.js","i":"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14","e":["golden-path-check"],"p":[{"p":"golden-path-check","e":"golden-path-check","u":"./golden-path-check/golden-path-check/index.html","d":"A live self-test of the develop-a-plugin-and-see-it-live path: it reads the built","c":1,"em":{"iframe":"\u003ciframe src=\"./golden-path-check/golden-path-check/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./golden-path-check/golden-path-check.js\" integrity=\"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgolden-path-check profile-config='{\"profile\":\"golden-path-check\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/golden-path-check>"}}]},{"b":"gospel-resources","s":"./gospel-resources/gospel-resources.js","i":"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY","e":["gospel-resources-map"],"p":[{"p":"charts","e":"gospel-resources-map","u":"./gospel-resources/charts/index.html","d":"The gap by LANGUAGE (ISO 639-3) rather than by people group — because one translation serves every","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"p":"data-tables","e":"gospel-resources-map","u":"./gospel-resources/data-tables/index.html","d":"Two validated tables: what resources exist per people group, and whether that access is keeping","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"p":"resources-list","e":"gospel-resources-map","u":"./gospel-resources/resources-list/index.html","d":"Which DX people groups have scripture in their own language, and which have none. The zero-resource","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"p":"resources-map","e":"gospel-resources-map","u":"./gospel-resources/resources-map/index.html","d":"Every country shaded by how much of its unengaged population has NO gospel resource in their own","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}}]},{"b":"my-upg-100-list","s":"./my-upg-100-list/my-upg-100-list.js","i":"sha384-DTQvsXU3C5sstv8K7pnmiFWMP23nSlwYzIHbwpVoqQzQc+7tGx9IQvPXbMqAPA5p","e":["my-upg-100-list-map"],"p":[{"p":"poster-wall","e":"my-upg-100-list-map","u":"./my-upg-100-list/poster-wall/index.html","d":"A wall of printable poster cards, one per 100-list entry, each with a \"Show on map\" action that","c":1,"em":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-DTQvsXU3C5sstv8K7pnmiFWMP23nSlwYzIHbwpVoqQzQc+7tGx9IQvPXbMqAPA5p\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"p":"upg-100-list","e":"my-upg-100-list-map","u":"./my-upg-100-list/upg-100-list/index.html","d":"A personal unreached-people-groups list painted as true boundary polygons —","c":1,"em":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-DTQvsXU3C5sstv8K7pnmiFWMP23nSlwYzIHbwpVoqQzQc+7tGx9IQvPXbMqAPA5p\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"p":"upg-100-mfe","e":"my-upg-100-list-map","u":"./my-upg-100-list/upg-100-mfe/index.html","d":"The standalone, shareable and embeddable composite of the my-upg-100-list family — it nests the map","c":4,"em":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-DTQvsXU3C5sstv8K7pnmiFWMP23nSlwYzIHbwpVoqQzQc+7tGx9IQvPXbMqAPA5p\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}}]},{"b":"people-groups-grid","s":"./people-groups-grid/people-groups-grid.js","i":"sha384-ss5PmeSkKuxafBwvxZG3r7roP0OB/oVGwFbfrHnydEhjbtrlB4eisdsPXEyCJF37","e":["people-groups-grid"],"p":[{"p":"people-groups-grid","e":"people-groups-grid","u":"./people-groups-grid/people-groups-grid/index.html","d":"The people-groups grid as an owned custom element: card list, search and four","c":2,"em":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-ss5PmeSkKuxafBwvxZG3r7roP0OB/oVGwFbfrHnydEhjbtrlB4eisdsPXEyCJF37\" crossorigin=\"anonymous\">\u003c/script>\n\u003cpeople-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/people-groups-grid>"},"in":[{"id":"people-groups-grid","t":"People Groups Grid — standalone (own search + 4 dropdowns)","a":"","pr":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid","pray-base-url":"https://pray.doxa.life"},"e":"people-groups-grid","u":"./people-groups-grid/people-groups-grid/people-groups-grid/index.html"},{"id":"driven","t":"People Groups Grid — externally driven (controls off, props/events)","a":"","pr":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid-driven","pray-base-url":"https://pray.doxa.life","show-search":"false","show-filters":"false"},"e":"people-groups-grid","u":"./people-groups-grid/people-groups-grid/driven/index.html"}]}]},{"b":"plugin-studio","s":"./plugin-studio/plugin-studio.js","i":"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH","e":["plugin-studio"],"p":[{"p":"plugin-studio","e":"plugin-studio","u":"./plugin-studio/plugin-studio/index.html","d":"The developer's viewing surface: a sidebar that is the composability ladder","c":5,"em":{"iframe":"\u003ciframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cplugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/plugin-studio>"},"in":[{"id":"studio","t":"Plugin Studio — every element by capability 5 -> 1 (developer studio)","a":"","pr":{"profile":"plugin-studio","provider":"maplibre","instanceId":"plugin-studio","title":"Plugin Studio"},"e":"plugin-studio","u":"./plugin-studio/plugin-studio/studio/index.html"}]}]},{"b":"prayer-walk-planner","s":"./prayer-walk-planner/prayer-walk-planner.js","i":"sha384-F0+r4avX8xkXp0hBpU5EBPU0InMRCObIn2Ieh9HJNn1r2amk8/qHmJ68WuNfsirC","e":["prayer-walk-planner"],"p":[{"p":"prayer-walk-planner","e":"prayer-walk-planner","u":"./prayer-walk-planner/prayer-walk-planner/index.html","d":"A simple polygon-drawing tool for planning prayer-walking routes.","c":1,"em":{"iframe":"\u003ciframe src=\"./prayer-walk-planner/prayer-walk-planner/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-F0+r4avX8xkXp0hBpU5EBPU0InMRCObIn2Ieh9HJNn1r2amk8/qHmJ68WuNfsirC\" crossorigin=\"anonymous\">\u003c/script>\n\u003cprayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/prayer-walk-planner>"}}]},{"b":"regions-dashboard","s":"./regions-dashboard/regions-dashboard.js","i":"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3","e":["regions-dashboard"],"p":[{"p":"region-dashboards","e":"regions-dashboard","u":"./regions-dashboard/region-dashboards/index.html","d":"The dashboard half of the Driver's 2-tab Regions element: given a region (or a","c":1,"em":{"iframe":"\u003ciframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"p":"regions-list","e":"regions-dashboard","u":"./regions-dashboard/regions-list/index.html","d":"A refactor of DX-life's /regions index page (app/pages/regions/index.vue) into","c":1,"em":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"p":"regions-mfe","e":"regions-dashboard","u":"./regions-dashboard/regions-mfe/index.html","d":"The composite the Driver asked for: ONE element carrying the SELECT VIEW switcher","c":4,"em":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}}]},{"b":"research-dashboard","s":"./research-dashboard/research-dashboard.js","i":"sha384-cMZfw0g3/v0hHkyHQhHYiv9GeD7hvFaUD0qF/G3FowqUNjgDykvI+btwOIu/p6Qy","e":["research-dashboard-map"],"p":[{"p":"research-dashboard","e":"research-dashboard-map","u":"./research-dashboard/research-dashboard/index.html","d":"Coordinated-Multiple-Views research dashboard for 10/40-window UPGs (live pray.doxa.life): docked facet rail + map-as-hero + linked table/charts, brushing-and-linking over one in-memory store.","c":3,"em":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-cMZfw0g3/v0hHkyHQhHYiv9GeD7hvFaUD0qF/G3FowqUNjgDykvI+btwOIu/p6Qy\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-dashboard-map>"}}]},{"b":"research-map-plus-grid","s":"./research-map-plus-grid/research-map-plus-grid.js","i":"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo","e":["research-map-plus-grid"],"p":[{"p":"research-map-plus-grid","e":"research-map-plus-grid","u":"./research-map-plus-grid/research-map-plus-grid/index.html","d":"The monolithic 7-tab research map (cap-3) on top, the People Groups grid beneath,","c":4,"em":{"iframe":"\u003ciframe src=\"./research-map-plus-grid/research-map-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-map-plus-grid>"},"in":[{"id":"default","t":"default","a":"","pr":{"profile":"research-map-plus-grid"},"e":"research-map-plus-grid","u":"./research-map-plus-grid/research-map-plus-grid/default/index.html"}]}]},{"b":"stack-demo","s":"./stack-demo/stack-demo.js","i":"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf","e":["stack-demo"],"p":[{"p":"stack-demo","e":"stack-demo","u":"./stack-demo/stack-demo/index.html","d":"Groups TWO independent elements TOP-TO-BOTTOM so you can embed the pair on a page and","c":4,"em":{"iframe":"\u003ciframe src=\"./stack-demo/stack-demo/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./stack-demo/stack-demo.js\" integrity=\"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf\" crossorigin=\"anonymous\">\u003c/script>\n\u003cstack-demo profile-config='{\"profile\":\"stack-demo\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/stack-demo>"},"in":[{"id":"pair","t":"pair","a":"","pr":{"profile":"stack-demo"},"e":"stack-demo","u":"./stack-demo/stack-demo/pair/index.html"}]}]},{"b":"template-bundle","s":"./template-bundle/template-bundle.js","i":"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7","e":["template-bundle"],"p":[{"p":"template-map-a","e":"template-bundle","u":"./template-bundle/template-map-a/index.html","d":"Minimal example profile A — a colored placeholder, no Mapbox or data.","c":1,"em":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"}},{"p":"template-map-b","e":"template-bundle","u":"./template-bundle/template-map-b/index.html","d":"Minimal example profile B — a second profile in the same bundle.","c":1,"em":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"}}]},{"b":"upg-neighbor","s":"./upg-neighbor/upg-neighbor.js","i":"sha384-JDJr4qoVZuiSi/rvgdzeuUNrzf7vjPdyh/g8dg7X8RHkZk/Y+tYXIQ3gpEzrU07q","e":["upg-neighbor"],"p":[{"p":"upg-neighbor","e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/index.html","d":"Rescues the five pre-bundler experimental maps that live inside the legacy","c":2,"em":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-JDJr4qoVZuiSi/rvgdzeuUNrzf7vjPdyh/g8dg7X8RHkZk/Y+tYXIQ3gpEzrU07q\" crossorigin=\"anonymous\">\u003c/script>\n\u003cupg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/upg-neighbor>"},"in":[{"id":"send-map","t":"Send Map (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"send-map","legacyTitle":"Send Map"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/send-map/index.html"},{"id":"upg-neighbors","t":"UPG Neighbors (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"upg-neighbors","legacyTitle":"UPG Neighbors"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/upg-neighbors/index.html"},{"id":"lang-cluster","t":"Language Clusters (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"lang-cluster","legacyTitle":"Language Clusters"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/lang-cluster/index.html"},{"id":"bloom-cockpit","t":"Bloom Cockpit (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"bloom-cockpit","legacyTitle":"Bloom Cockpit"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/bloom-cockpit/index.html"},{"id":"flower-mesh","t":"Flower Mesh (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"flower-mesh","legacyTitle":"Flower Mesh"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/flower-mesh/index.html"}]}]}];
+ var BAKED = [{"b":"all-people-groups","s":"./all-people-groups/all-people-groups.js","i":"sha384-MTXYtlLgjWDT2Q4U9u2ud4gpjsE0l39I6dJxxAO/hXjMGcMp6KoECWeUhn4+Fl1Y","e":["all-people-groups"],"p":[{"p":"all-people-groups","e":"all-people-groups","u":"./all-people-groups/all-people-groups/index.html","d":"All 12,379 people groups (peoplegroups.org) in four colors — reached,","c":1,"em":{"iframe":"\u003ciframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-MTXYtlLgjWDT2Q4U9u2ud4gpjsE0l39I6dJxxAO/hXjMGcMp6KoECWeUhn4+Fl1Y\" crossorigin=\"anonymous\">\u003c/script>\n\u003call-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/all-people-groups>"}}]},{"b":"big-picture","s":"./big-picture/big-picture.js","i":"sha384-voYmtWeACTFBJOOeqcbf5cuBKSjyskA89cjvm5qcvrx9IUFTAhLuICyRXUM6fL+Y","e":["bp-big-picture","bp-research-header","people-groups-grid"],"p":[{"p":"big-picture","e":"bp-big-picture","u":"./big-picture/big-picture/index.html","d":"The Cat-4 composite that PAIRS the two real capability elements of the","c":4,"em":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./big-picture/big-picture.js\" integrity=\"sha384-voYmtWeACTFBJOOeqcbf5cuBKSjyskA89cjvm5qcvrx9IUFTAhLuICyRXUM6fL+Y\" crossorigin=\"anonymous\">\u003c/script>\n\u003cbp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/bp-big-picture>"},"in":[{"id":"big-picture","t":"Big Picture — research header ↔ people-groups grid (composite)","a":"","pr":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture"},"e":"bp-big-picture","u":"./big-picture/big-picture/big-picture/index.html"},{"id":"frontier","t":"Big Picture — frontier accent","a":"","pr":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture-frontier","accent":"#22d3ee","title":"Big Picture — Frontier Focus"},"e":"bp-big-picture","u":"./big-picture/big-picture/frontier/index.html"}]}]},{"b":"cities-internet","s":"./cities-internet/cities-internet.js","i":"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0","e":["cities-internet-map"],"p":[{"p":"connectivity-list","e":"cities-internet-map","u":"./cities-internet/connectivity-list/index.html","d":"Countries where DX people groups live, grouped by region, showing measured internet penetration","c":1,"em":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"p":"connectivity-map","e":"cities-internet-map","u":"./cities-internet/connectivity-map/index.html","d":"Every country shaded by measured internet penetration, with its named carriers and dominant","c":1,"em":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"p":"data-tables","e":"cities-internet-map","u":"./cities-internet/data-tables/index.html","d":"Four validated research tables, one tab each, with sortable and filterable columns, CSV and JSON","c":1,"em":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}}]},{"b":"country-posters","s":"./country-posters/country-posters.js","i":"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj","e":["country-posters-map"],"p":[{"p":"countries-map","e":"country-posters-map","u":"./country-posters/countries-map/index.html","d":"The researcher's workbench retargeted from people groups to COUNTRIES — region","c":1,"em":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"p":"country-poster-wall","e":"country-posters-map","u":"./country-posters/country-poster-wall/index.html","d":"One printable card per country, grouped into COLLAPSIBLE regional sections so the","c":1,"em":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"p":"country-posters-mfe","e":"country-posters-mfe","u":"./country-posters/country-posters-mfe/index.html","d":"Country Posters as ONE two-tab element — the countries map and the printable","c":4,"em":{"iframe":"\u003ciframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}}]},{"b":"dashboard-plus-grid","s":"./dashboard-plus-grid/dashboard-plus-grid.js","i":"sha384-q5UVHN5QptVZvJHqrqIFgRpWCj2HRQGiTAO/JYxf5OHmg6XegLjaBMk1AZXWqHRG","e":["dashboard-plus-grid"],"p":[{"p":"dashboard-plus-grid","e":"dashboard-plus-grid","u":"./dashboard-plus-grid/dashboard-plus-grid/index.html","d":"Both children are IMPORTED DIRECTLY (compiled into this ONE bundle — no runtime bundle","c":4,"em":{"iframe":"\u003ciframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-q5UVHN5QptVZvJHqrqIFgRpWCj2HRQGiTAO/JYxf5OHmg6XegLjaBMk1AZXWqHRG\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/dashboard-plus-grid>"},"in":[{"id":"default","t":"default","a":"","pr":{"profile":"dashboard-plus-grid"},"e":"dashboard-plus-grid","u":"./dashboard-plus-grid/dashboard-plus-grid/default/index.html"}]}]},{"b":"demo-map","s":"./demo-map/demo-map.js","i":"sha384-bdvQUz/ahi3yvFWY4niHIt4hJ/2Thd5T/6KP/mobZrtEKchO1XclRQQcc35jt9Cd","e":["demo-map"],"p":[{"p":"demo-map","e":"demo-map","u":"./demo-map/demo-map/index.html","d":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","c":2,"em":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./demo-map/demo-map.js\" integrity=\"sha384-bdvQUz/ahi3yvFWY4niHIt4hJ/2Thd5T/6KP/mobZrtEKchO1XclRQQcc35jt9Cd\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/demo-map>"},"in":[{"id":"maplibre","t":"Demo map — MapLibre (token-free)","a":"","pr":{"profile":"demo-map","provider":"maplibre","instanceId":"demo-maplibre"},"e":"demo-map","u":"./demo-map/demo-map/maplibre/index.html"}]}]},{"b":"doxa-maps-spa","s":"./doxa-maps-spa/doxa-maps-spa.js","i":"sha384-1f+/rBSGo/1jyUmRmGg34CIU/PcGkB7M3jah1DO0ocb5O0zj81wpUemXcz4WAFz8","e":["doxa-maps-spa"],"p":[{"p":"doxa-maps-spa","e":"doxa-maps-spa","u":"./doxa-maps-spa/doxa-maps-spa/index.html","d":"The DX-maps app itself: one element whose vertical-tab rail nests every other","c":5,"em":{"iframe":"\u003ciframe src=\"./doxa-maps-spa/doxa-maps-spa/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-maps-spa/doxa-maps-spa.js\" integrity=\"sha384-1f+/rBSGo/1jyUmRmGg34CIU/PcGkB7M3jah1DO0ocb5O0zj81wpUemXcz4WAFz8\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-maps-spa profile-config='{\"profile\":\"doxa-maps-spa\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-maps-spa>"},"in":[{"id":"app","t":"DX-Maps SPA — Big Picture + every research map (app-shell)","a":"","pr":{"profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"DX-Maps"},"e":"doxa-maps-spa","u":"./doxa-maps-spa/doxa-maps-spa/app/index.html"}]}]},{"b":"doxa-research-map","s":"./doxa-research-map/doxa-research-map.js","i":"sha384-CTfwl1rhm6JTKoUkSjawyQfHWYf55RBcwSDBYmVyQQ6f64Ag3v2dn5eV18yQSKwD","e":["doxa-research-map"],"p":[{"p":"research-map","e":"doxa-research-map","u":"./doxa-research-map/research-map/index.html","d":"The researcher's workbench: every piece a missiologist, demographer or","c":3,"em":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-CTfwl1rhm6JTKoUkSjawyQfHWYf55RBcwSDBYmVyQQ6f64Ag3v2dn5eV18yQSKwD\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-research-map>"},"in":[{"id":"maplibre","t":"Research map — MapLibre (token-free, no search bar)","a":"","pr":{"profile":"research-map","provider":"maplibre","instanceId":"research-map-maplibre"},"e":"doxa-research-map","u":"./doxa-research-map/research-map/maplibre/index.html"}]}]},{"b":"doxa-simple-map","s":"./doxa-simple-map/doxa-simple-map.js","i":"sha384-edWUmiU1eWxE8Ju7FFg5PDfmw21E2NLoVaYmCgM8gXlm8S/9rowTJ7045NvdeIQA","e":["doxa-map","doxa-simple-map"],"p":[{"p":"doxa-simple-map","e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/index.html","d":"The simple world map, shipped as three presets off ONE prop table —","c":2,"em":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-edWUmiU1eWxE8Ju7FFg5PDfmw21E2NLoVaYmCgM8gXlm8S/9rowTJ7045NvdeIQA\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-map>"},"in":[{"id":"prayer","t":"Prayer Map","a":"https://pray.doxa.life","pr":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/prayer/index.html"},{"id":"engagement","t":"Engagement Map","a":"https://pray.doxa.life","pr":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/engagement/index.html"},{"id":"adoption","t":"Adoption Map","a":"https://pray.doxa.life","pr":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"e":"doxa-map","u":"./doxa-simple-map/doxa-simple-map/adoption/index.html"}]}]},{"b":"doxa-vision-card","s":"./doxa-vision-card/doxa-vision-card.js","i":"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn","e":["doxa-vision-card"],"p":[{"p":"doxa-vision-card","e":"doxa-vision-card","u":"./doxa-vision-card/doxa-vision-card/index.html","d":"The Capability-1 example: ONE folder -> ONE bundle -> ONE element.","c":2,"em":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-vision-card/doxa-vision-card.js\" integrity=\"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-vision-card profile-config='{\"profile\":\"doxa-vision-card\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-vision-card>"},"in":[{"id":"default","t":"Vision card — reach at a glance","a":"","pr":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-default"},"e":"doxa-vision-card","u":"./doxa-vision-card/doxa-vision-card/default/index.html"},{"id":"frontier","t":"Vision card — frontier accent","a":"","pr":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-frontier","accent":"#22d3ee","title":"The last frontier of the gospel.","tagline":"Frontier people groups — where fewer than one in a thousand follow Jesus.","stats":[{"value":"1,910","label":"Frontier groups","note":"under 0.1% believers"},{"value":"2.1B","label":"People","note":"living in frontier settings"},{"value":"0.1%","label":"Christian","note":"or fewer, in each group"}]},"e":"doxa-vision-card","u":"./doxa-vision-card/doxa-vision-card/frontier/index.html"}]}]},{"b":"golden-path-check","s":"./golden-path-check/golden-path-check.js","i":"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14","e":["golden-path-check"],"p":[{"p":"golden-path-check","e":"golden-path-check","u":"./golden-path-check/golden-path-check/index.html","d":"A live self-test of the develop-a-plugin-and-see-it-live path: it reads the built","c":1,"em":{"iframe":"\u003ciframe src=\"./golden-path-check/golden-path-check/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./golden-path-check/golden-path-check.js\" integrity=\"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgolden-path-check profile-config='{\"profile\":\"golden-path-check\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/golden-path-check>"}}]},{"b":"gospel-resources","s":"./gospel-resources/gospel-resources.js","i":"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY","e":["gospel-resources-map"],"p":[{"p":"charts","e":"gospel-resources-map","u":"./gospel-resources/charts/index.html","d":"The gap by LANGUAGE (ISO 639-3) rather than by people group — because one translation serves every","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"p":"data-tables","e":"gospel-resources-map","u":"./gospel-resources/data-tables/index.html","d":"Two validated tables: what resources exist per people group, and whether that access is keeping","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"p":"resources-list","e":"gospel-resources-map","u":"./gospel-resources/resources-list/index.html","d":"Which DX people groups have scripture in their own language, and which have none. The zero-resource","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"p":"resources-map","e":"gospel-resources-map","u":"./gospel-resources/resources-map/index.html","d":"Every country shaded by how much of its unengaged population has NO gospel resource in their own","c":1,"em":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}}]},{"b":"my-upg-100-list","s":"./my-upg-100-list/my-upg-100-list.js","i":"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH","e":["my-upg-100-list-map"],"p":[{"p":"poster-wall","e":"my-upg-100-list-map","u":"./my-upg-100-list/poster-wall/index.html","d":"A wall of printable poster cards, one per 100-list entry, each with a \"Show on map\" action that","c":1,"em":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"p":"upg-100-list","e":"my-upg-100-list-map","u":"./my-upg-100-list/upg-100-list/index.html","d":"A personal unreached-people-groups list painted as true boundary polygons —","c":1,"em":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"p":"upg-100-mfe","e":"my-upg-100-list-map","u":"./my-upg-100-list/upg-100-mfe/index.html","d":"The standalone, shareable and embeddable composite of the my-upg-100-list family — it nests the map","c":4,"em":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}}]},{"b":"people-groups-grid","s":"./people-groups-grid/people-groups-grid.js","i":"sha384-ss5PmeSkKuxafBwvxZG3r7roP0OB/oVGwFbfrHnydEhjbtrlB4eisdsPXEyCJF37","e":["people-groups-grid"],"p":[{"p":"people-groups-grid","e":"people-groups-grid","u":"./people-groups-grid/people-groups-grid/index.html","d":"The people-groups grid as an owned custom element: card list, search and four","c":2,"em":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-ss5PmeSkKuxafBwvxZG3r7roP0OB/oVGwFbfrHnydEhjbtrlB4eisdsPXEyCJF37\" crossorigin=\"anonymous\">\u003c/script>\n\u003cpeople-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/people-groups-grid>"},"in":[{"id":"people-groups-grid","t":"People Groups Grid — standalone (own search + 4 dropdowns)","a":"","pr":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid","pray-base-url":"https://pray.doxa.life"},"e":"people-groups-grid","u":"./people-groups-grid/people-groups-grid/people-groups-grid/index.html"},{"id":"driven","t":"People Groups Grid — externally driven (controls off, props/events)","a":"","pr":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid-driven","pray-base-url":"https://pray.doxa.life","show-search":"false","show-filters":"false"},"e":"people-groups-grid","u":"./people-groups-grid/people-groups-grid/driven/index.html"}]}]},{"b":"plugin-studio","s":"./plugin-studio/plugin-studio.js","i":"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH","e":["plugin-studio"],"p":[{"p":"plugin-studio","e":"plugin-studio","u":"./plugin-studio/plugin-studio/index.html","d":"The developer's viewing surface: a sidebar that is the composability ladder","c":5,"em":{"iframe":"\u003ciframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cplugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/plugin-studio>"},"in":[{"id":"studio","t":"Plugin Studio — every element by capability 5 -> 1 (developer studio)","a":"","pr":{"profile":"plugin-studio","provider":"maplibre","instanceId":"plugin-studio","title":"Plugin Studio"},"e":"plugin-studio","u":"./plugin-studio/plugin-studio/studio/index.html"}]}]},{"b":"prayer-walk-planner","s":"./prayer-walk-planner/prayer-walk-planner.js","i":"sha384-F0+r4avX8xkXp0hBpU5EBPU0InMRCObIn2Ieh9HJNn1r2amk8/qHmJ68WuNfsirC","e":["prayer-walk-planner"],"p":[{"p":"prayer-walk-planner","e":"prayer-walk-planner","u":"./prayer-walk-planner/prayer-walk-planner/index.html","d":"A simple polygon-drawing tool for planning prayer-walking routes.","c":1,"em":{"iframe":"\u003ciframe src=\"./prayer-walk-planner/prayer-walk-planner/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-F0+r4avX8xkXp0hBpU5EBPU0InMRCObIn2Ieh9HJNn1r2amk8/qHmJ68WuNfsirC\" crossorigin=\"anonymous\">\u003c/script>\n\u003cprayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/prayer-walk-planner>"}}]},{"b":"regions-dashboard","s":"./regions-dashboard/regions-dashboard.js","i":"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3","e":["regions-dashboard"],"p":[{"p":"region-dashboards","e":"regions-dashboard","u":"./regions-dashboard/region-dashboards/index.html","d":"The dashboard half of the Driver's 2-tab Regions element: given a region (or a","c":1,"em":{"iframe":"\u003ciframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"p":"regions-list","e":"regions-dashboard","u":"./regions-dashboard/regions-list/index.html","d":"A refactor of DX-life's /regions index page (app/pages/regions/index.vue) into","c":1,"em":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"p":"regions-mfe","e":"regions-dashboard","u":"./regions-dashboard/regions-mfe/index.html","d":"The composite the Driver asked for: ONE element carrying the SELECT VIEW switcher","c":4,"em":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}}]},{"b":"research-dashboard","s":"./research-dashboard/research-dashboard.js","i":"sha384-cMZfw0g3/v0hHkyHQhHYiv9GeD7hvFaUD0qF/G3FowqUNjgDykvI+btwOIu/p6Qy","e":["research-dashboard-map"],"p":[{"p":"research-dashboard","e":"research-dashboard-map","u":"./research-dashboard/research-dashboard/index.html","d":"Coordinated-Multiple-Views research dashboard for 10/40-window UPGs (live pray.doxa.life): docked facet rail + map-as-hero + linked table/charts, brushing-and-linking over one in-memory store.","c":3,"em":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-cMZfw0g3/v0hHkyHQhHYiv9GeD7hvFaUD0qF/G3FowqUNjgDykvI+btwOIu/p6Qy\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-dashboard-map>"}}]},{"b":"research-map-plus-grid","s":"./research-map-plus-grid/research-map-plus-grid.js","i":"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo","e":["research-map-plus-grid"],"p":[{"p":"research-map-plus-grid","e":"research-map-plus-grid","u":"./research-map-plus-grid/research-map-plus-grid/index.html","d":"The monolithic 7-tab research map (cap-3) on top, the People Groups grid beneath,","c":4,"em":{"iframe":"\u003ciframe src=\"./research-map-plus-grid/research-map-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-map-plus-grid>"},"in":[{"id":"default","t":"default","a":"","pr":{"profile":"research-map-plus-grid"},"e":"research-map-plus-grid","u":"./research-map-plus-grid/research-map-plus-grid/default/index.html"}]}]},{"b":"stack-demo","s":"./stack-demo/stack-demo.js","i":"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf","e":["stack-demo"],"p":[{"p":"stack-demo","e":"stack-demo","u":"./stack-demo/stack-demo/index.html","d":"Groups TWO independent elements TOP-TO-BOTTOM so you can embed the pair on a page and","c":4,"em":{"iframe":"\u003ciframe src=\"./stack-demo/stack-demo/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./stack-demo/stack-demo.js\" integrity=\"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf\" crossorigin=\"anonymous\">\u003c/script>\n\u003cstack-demo profile-config='{\"profile\":\"stack-demo\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/stack-demo>"},"in":[{"id":"pair","t":"pair","a":"","pr":{"profile":"stack-demo"},"e":"stack-demo","u":"./stack-demo/stack-demo/pair/index.html"}]}]},{"b":"template-bundle","s":"./template-bundle/template-bundle.js","i":"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7","e":["template-bundle"],"p":[{"p":"template-map-a","e":"template-bundle","u":"./template-bundle/template-map-a/index.html","d":"Minimal example profile A — a colored placeholder, no Mapbox or data.","c":1,"em":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"}},{"p":"template-map-b","e":"template-bundle","u":"./template-bundle/template-map-b/index.html","d":"Minimal example profile B — a second profile in the same bundle.","c":1,"em":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"}}]},{"b":"upg-neighbor","s":"./upg-neighbor/upg-neighbor.js","i":"sha384-JDJr4qoVZuiSi/rvgdzeuUNrzf7vjPdyh/g8dg7X8RHkZk/Y+tYXIQ3gpEzrU07q","e":["upg-neighbor"],"p":[{"p":"upg-neighbor","e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/index.html","d":"Rescues the five pre-bundler experimental maps that live inside the legacy","c":2,"em":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-JDJr4qoVZuiSi/rvgdzeuUNrzf7vjPdyh/g8dg7X8RHkZk/Y+tYXIQ3gpEzrU07q\" crossorigin=\"anonymous\">\u003c/script>\n\u003cupg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/upg-neighbor>"},"in":[{"id":"send-map","t":"Send Map (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"send-map","legacyTitle":"Send Map"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/send-map/index.html"},{"id":"upg-neighbors","t":"UPG Neighbors (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"upg-neighbors","legacyTitle":"UPG Neighbors"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/upg-neighbors/index.html"},{"id":"lang-cluster","t":"Language Clusters (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"lang-cluster","legacyTitle":"Language Clusters"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/lang-cluster/index.html"},{"id":"bloom-cockpit","t":"Bloom Cockpit (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"bloom-cockpit","legacyTitle":"Bloom Cockpit"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/bloom-cockpit/index.html"},{"id":"flower-mesh","t":"Flower Mesh (legacy)","a":"","pr":{"profile":"upg-neighbor","legacyElement":"flower-mesh","legacyTitle":"Flower Mesh"},"e":"upg-neighbor","u":"./upg-neighbor/upg-neighbor/flower-mesh/index.html"}]}]}];
var snip = function snip(b, p, x) {
var u = (x || p).u, tag = (x && x.e) || p.e || b.e[0] || b.b
var r = { iframe: '' }
diff --git a/public/doxa-maps/index.html b/public/doxa-maps/index.html
index 8f45f7901..7e29ed6fd 100644
--- a/public/doxa-maps/index.html
+++ b/public/doxa-maps/index.html
@@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
+ window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"plugin-designs/*/*.vue","embedBase":".","bundleCount":22,"profileCount":34,"bundles":[{"bundle":"all-people-groups","scriptUrl":"./all-people-groups/all-people-groups.js","output":"doxa-maps/all-people-groups/all-people-groups.js","integrity":"sha384-MTXYtlLgjWDT2Q4U9u2ud4gpjsE0l39I6dJxxAO/hXjMGcMp6KoECWeUhn4+Fl1Y","elements":["all-people-groups"],"profiles":[{"profile":"all-people-groups","file":"all-people-groups.vue","description":"All 12,379 people groups (peoplegroups.org) in four colors — reached,","element":"all-people-groups","type":"single","isMap":true,"iframeUrl":"./all-people-groups/all-people-groups/index.html","scriptUrl":"./all-people-groups/all-people-groups.js","embed":{"iframe":"\u003ciframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-MTXYtlLgjWDT2Q4U9u2ud4gpjsE0l39I6dJxxAO/hXjMGcMp6KoECWeUhn4+Fl1Y\" crossorigin=\"anonymous\">\u003c/script>\n\u003call-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/all-people-groups>"},"bundle":"all-people-groups"}]},{"bundle":"big-picture","scriptUrl":"./big-picture/big-picture.js","output":"doxa-maps/big-picture/big-picture.js","integrity":"sha384-voYmtWeACTFBJOOeqcbf5cuBKSjyskA89cjvm5qcvrx9IUFTAhLuICyRXUM6fL+Y","elements":["bp-big-picture","bp-research-header","people-groups-grid"],"composes":["bp-research-header","people-groups-grid"],"profiles":[{"profile":"big-picture","file":"big-picture.vue","description":"The Cat-4 composite that PAIRS the two real capability elements of the","element":"bp-big-picture","type":"nested-elements-mfe","isMap":false,"iframeUrl":"./big-picture/big-picture/index.html","scriptUrl":"./big-picture/big-picture.js","embed":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./big-picture/big-picture.js\" integrity=\"sha384-voYmtWeACTFBJOOeqcbf5cuBKSjyskA89cjvm5qcvrx9IUFTAhLuICyRXUM6fL+Y\" crossorigin=\"anonymous\">\u003c/script>\n\u003cbp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/bp-big-picture>"},"instances":[{"id":"big-picture","title":"Big Picture — research header ↔ people-groups grid (composite)","apiBaseUrl":"","props":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture"},"element":"bp-big-picture","iframeUrl":"./big-picture/big-picture/big-picture/index.html","embed":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/big-picture/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"frontier","title":"Big Picture — frontier accent","apiBaseUrl":"","props":{"profile":"big-picture","provider":"maplibre","instanceId":"bp-big-picture-frontier","accent":"#22d3ee","title":"Big Picture — Frontier Focus"},"element":"bp-big-picture","iframeUrl":"./big-picture/big-picture/frontier/index.html","embed":{"iframe":"\u003ciframe src=\"./big-picture/big-picture/frontier/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}],"bundle":"big-picture"}]},{"bundle":"cities-internet","scriptUrl":"./cities-internet/cities-internet.js","output":"doxa-maps/cities-internet/cities-internet.js","integrity":"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0","elements":["cities-internet-map"],"profiles":[{"profile":"connectivity-list","file":"connectivity-list.vue","description":"Countries where DX people groups live, grouped by region, showing measured internet penetration","element":"cities-internet-map","type":"single","isMap":false,"iframeUrl":"./cities-internet/connectivity-list/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"profile":"connectivity-map","file":"connectivity-map.vue","description":"Every country shaded by measured internet penetration, with its named carriers and dominant","element":"cities-internet-map","type":"single","isMap":true,"iframeUrl":"./cities-internet/connectivity-map/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"Four validated research tables, one tab each, with sortable and filterable columns, CSV and JSON","element":"cities-internet-map","type":"single","isMap":false,"iframeUrl":"./cities-internet/data-tables/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-yXvole+EYjOppLtZOqOW4pba/oWzbObcdkoSpYcnukHuARdg6R/qHzhOd5cpCJY0\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/cities-internet-map>"}}]},{"bundle":"country-posters","scriptUrl":"./country-posters/country-posters.js","output":"doxa-maps/country-posters/country-posters.js","integrity":"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj","elements":["country-posters-map"],"composes":["country-posters/country-poster-wall","country-posters/countries-map"],"profiles":[{"profile":"countries-map","file":"countries-map.vue","description":"The researcher's workbench retargeted from people groups to COUNTRIES — region","element":"country-posters-map","type":"single","isMap":true,"iframeUrl":"./country-posters/countries-map/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"profile":"country-poster-wall","file":"country-poster-wall.vue","description":"One printable card per country, grouped into COLLAPSIBLE regional sections so the","element":"country-posters-map","type":"single","isMap":false,"iframeUrl":"./country-posters/country-poster-wall/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}},{"profile":"country-posters-mfe","file":"country-posters-mfe.vue","description":"Country Posters as ONE two-tab element — the countries map and the printable","element":"country-posters-mfe","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./country-posters/country-posters-mfe/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-5a7eHbJrOmwwGTDlhvBUGu2iXs7mujbuBUpY5fRC2vBmjByzaRzq05hQr502uMIj\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/country-posters-map>"}}]},{"bundle":"dashboard-plus-grid","scriptUrl":"./dashboard-plus-grid/dashboard-plus-grid.js","output":"doxa-maps/dashboard-plus-grid/dashboard-plus-grid.js","integrity":"sha384-q5UVHN5QptVZvJHqrqIFgRpWCj2HRQGiTAO/JYxf5OHmg6XegLjaBMk1AZXWqHRG","elements":["dashboard-plus-grid"],"composes":["research-dashboard","people-groups-grid"],"profiles":[{"profile":"dashboard-plus-grid","file":"dashboard-plus-grid.vue","description":"Both children are IMPORTED DIRECTLY (compiled into this ONE bundle — no runtime bundle","element":"dashboard-plus-grid","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./dashboard-plus-grid/dashboard-plus-grid/index.html","scriptUrl":"./dashboard-plus-grid/dashboard-plus-grid.js","embed":{"iframe":"\u003ciframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-q5UVHN5QptVZvJHqrqIFgRpWCj2HRQGiTAO/JYxf5OHmg6XegLjaBMk1AZXWqHRG\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/dashboard-plus-grid>"},"instances":[{"id":"default","title":"default","apiBaseUrl":"","props":{"profile":"dashboard-plus-grid"},"element":"dashboard-plus-grid","iframeUrl":"./dashboard-plus-grid/dashboard-plus-grid/default/index.html","embed":{"iframe":"\u003ciframe src=\"./dashboard-plus-grid/dashboard-plus-grid/default/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"demo-map","scriptUrl":"./demo-map/demo-map.js","output":"doxa-maps/demo-map/demo-map.js","integrity":"sha384-bdvQUz/ahi3yvFWY4niHIt4hJ/2Thd5T/6KP/mobZrtEKchO1XclRQQcc35jt9Cd","elements":["demo-map"],"profiles":[{"profile":"demo-map","file":"demo-map.vue","description":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","element":"demo-map","type":"parameterized","isMap":true,"iframeUrl":"./demo-map/demo-map/index.html","scriptUrl":"./demo-map/demo-map.js","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./demo-map/demo-map.js\" integrity=\"sha384-bdvQUz/ahi3yvFWY4niHIt4hJ/2Thd5T/6KP/mobZrtEKchO1XclRQQcc35jt9Cd\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/demo-map>"},"instances":[{"id":"maplibre","title":"Demo map — MapLibre (token-free)","apiBaseUrl":"","props":{"profile":"demo-map","provider":"maplibre","instanceId":"demo-maplibre"},"element":"demo-map","iframeUrl":"./demo-map/demo-map/maplibre/index.html","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/maplibre/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}],"bundle":"demo-map"}]},{"bundle":"doxa-maps-spa","scriptUrl":"./doxa-maps-spa/doxa-maps-spa.js","output":"doxa-maps/doxa-maps-spa/doxa-maps-spa.js","integrity":"sha384-1f+/rBSGo/1jyUmRmGg34CIU/PcGkB7M3jah1DO0ocb5O0zj81wpUemXcz4WAFz8","elements":["doxa-maps-spa"],"composes":["bp-big-picture","doxa-research-map","doxa-simple-map","cities-internet-map","gospel-resources-map","my-upg-100-list-map"],"profiles":[{"profile":"doxa-maps-spa","file":"doxa-maps-spa.vue","description":"The DX-maps app itself: one element whose vertical-tab rail nests every other","element":"doxa-maps-spa","type":"nested-mfe-spa","isMap":false,"iframeUrl":"./doxa-maps-spa/doxa-maps-spa/index.html","scriptUrl":"./doxa-maps-spa/doxa-maps-spa.js","embed":{"iframe":"\u003ciframe src=\"./doxa-maps-spa/doxa-maps-spa/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-maps-spa/doxa-maps-spa.js\" integrity=\"sha384-1f+/rBSGo/1jyUmRmGg34CIU/PcGkB7M3jah1DO0ocb5O0zj81wpUemXcz4WAFz8\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-maps-spa profile-config='{\"profile\":\"doxa-maps-spa\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-maps-spa>"},"instances":[{"id":"app","title":"DX-Maps SPA — Big Picture + every research map (app-shell)","apiBaseUrl":"","props":{"profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"DX-Maps"},"element":"doxa-maps-spa","iframeUrl":"./doxa-maps-spa/doxa-maps-spa/app/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-maps-spa/doxa-maps-spa/app/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"doxa-research-map","scriptUrl":"./doxa-research-map/doxa-research-map.js","output":"doxa-maps/doxa-research-map/doxa-research-map.js","integrity":"sha384-CTfwl1rhm6JTKoUkSjawyQfHWYf55RBcwSDBYmVyQQ6f64Ag3v2dn5eV18yQSKwD","elements":["doxa-research-map"],"profiles":[{"profile":"research-map","file":"research-map.vue","description":"The researcher's workbench: every piece a missiologist, demographer or","element":"doxa-research-map","type":"monolithic","isMap":true,"iframeUrl":"./doxa-research-map/research-map/index.html","scriptUrl":"./doxa-research-map/doxa-research-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-CTfwl1rhm6JTKoUkSjawyQfHWYf55RBcwSDBYmVyQQ6f64Ag3v2dn5eV18yQSKwD\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-research-map>"},"instances":[{"id":"maplibre","title":"Research map — MapLibre (token-free, no search bar)","apiBaseUrl":"","props":{"profile":"research-map","provider":"maplibre","instanceId":"research-map-maplibre"},"element":"doxa-research-map","iframeUrl":"./doxa-research-map/research-map/maplibre/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/maplibre/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"doxa-simple-map","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","output":"doxa-maps/doxa-simple-map/doxa-simple-map.js","integrity":"sha384-edWUmiU1eWxE8Ju7FFg5PDfmw21E2NLoVaYmCgM8gXlm8S/9rowTJ7045NvdeIQA","elements":["doxa-map","doxa-simple-map"],"profiles":[{"profile":"doxa-simple-map","file":"doxa-simple-map.vue","description":"The simple world map, shipped as three presets off ONE prop table —","element":"doxa-map","type":"parameterized","isMap":true,"iframeUrl":"./doxa-simple-map/doxa-simple-map/index.html","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-edWUmiU1eWxE8Ju7FFg5PDfmw21E2NLoVaYmCgM8gXlm8S/9rowTJ7045NvdeIQA\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-map>"},"instances":[{"id":"prayer","title":"Prayer Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/prayer/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/prayer/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"engagement","title":"Engagement Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/engagement/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/engagement/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"adoption","title":"Adoption Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/adoption/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/adoption/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"doxa-vision-card","scriptUrl":"./doxa-vision-card/doxa-vision-card.js","output":"doxa-maps/doxa-vision-card/doxa-vision-card.js","integrity":"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn","elements":["doxa-vision-card"],"profiles":[{"profile":"doxa-vision-card","file":"doxa-vision-card.vue","description":"The Capability-1 example: ONE folder -> ONE bundle -> ONE element.","element":"doxa-vision-card","type":"parameterized","isMap":false,"iframeUrl":"./doxa-vision-card/doxa-vision-card/index.html","scriptUrl":"./doxa-vision-card/doxa-vision-card.js","embed":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-vision-card/doxa-vision-card.js\" integrity=\"sha384-2mza3cltN5LQQIrlENG/IVL6Icd9zzcFve3E8R8VWuCdYOGW9uGKFvxcbu6eFfwn\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-vision-card profile-config='{\"profile\":\"doxa-vision-card\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/doxa-vision-card>"},"instances":[{"id":"default","title":"Vision card — reach at a glance","apiBaseUrl":"","props":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-default"},"element":"doxa-vision-card","iframeUrl":"./doxa-vision-card/doxa-vision-card/default/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/default/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"frontier","title":"Vision card — frontier accent","apiBaseUrl":"","props":{"profile":"doxa-vision-card","provider":"maplibre","instanceId":"vision-card-frontier","accent":"#22d3ee","title":"The last frontier of the gospel.","tagline":"Frontier people groups — where fewer than one in a thousand follow Jesus.","stats":[{"value":"1,910","label":"Frontier groups","note":"under 0.1% believers"},{"value":"2.1B","label":"People","note":"living in frontier settings"},{"value":"0.1%","label":"Christian","note":"or fewer, in each group"}]},"element":"doxa-vision-card","iframeUrl":"./doxa-vision-card/doxa-vision-card/frontier/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-vision-card/doxa-vision-card/frontier/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}],"bundle":"doxa-vision-card"}]},{"bundle":"golden-path-check","scriptUrl":"./golden-path-check/golden-path-check.js","output":"doxa-maps/golden-path-check/golden-path-check.js","integrity":"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14","elements":["golden-path-check"],"profiles":[{"profile":"golden-path-check","file":"golden-path-check.vue","description":"A live self-test of the develop-a-plugin-and-see-it-live path: it reads the built","element":"golden-path-check","type":"single","isMap":false,"iframeUrl":"./golden-path-check/golden-path-check/index.html","scriptUrl":"./golden-path-check/golden-path-check.js","embed":{"iframe":"\u003ciframe src=\"./golden-path-check/golden-path-check/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./golden-path-check/golden-path-check.js\" integrity=\"sha384-1V/sT5SkV0U9yTCK9ELIOFfU1ZIJkInIF6nG3UllJ4dxax3RsEAupSGLJEFK6e14\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgolden-path-check profile-config='{\"profile\":\"golden-path-check\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/golden-path-check>"}}]},{"bundle":"gospel-resources","scriptUrl":"./gospel-resources/gospel-resources.js","output":"doxa-maps/gospel-resources/gospel-resources.js","integrity":"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY","elements":["gospel-resources-map"],"profiles":[{"profile":"charts","file":"charts.vue","description":"The gap by LANGUAGE (ISO 639-3) rather than by people group — because one translation serves every","element":"gospel-resources-map","type":"single","isMap":false,"iframeUrl":"./gospel-resources/charts/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"Two validated tables: what resources exist per people group, and whether that access is keeping","element":"gospel-resources-map","type":"single","isMap":false,"iframeUrl":"./gospel-resources/data-tables/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-list","file":"resources-list.vue","description":"Which DX people groups have scripture in their own language, and which have none. The zero-resource","element":"gospel-resources-map","type":"single","isMap":false,"iframeUrl":"./gospel-resources/resources-list/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-map","file":"resources-map.vue","description":"Every country shaded by how much of its unengaged population has NO gospel resource in their own","element":"gospel-resources-map","type":"single","isMap":true,"iframeUrl":"./gospel-resources/resources-map/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uljHGYhda+DqMVTe8uCnYCfMNupgLezn47K71zOn+2H6hPaGpILlh/LtNU4wlqrY\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/gospel-resources-map>"}}]},{"bundle":"my-upg-100-list","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","output":"doxa-maps/my-upg-100-list/my-upg-100-list.js","integrity":"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH","elements":["my-upg-100-list-map"],"composes":["my-upg-100-list/upg-100-list","my-upg-100-list/poster-wall"],"profiles":[{"profile":"poster-wall","file":"poster-wall.vue","description":"A wall of printable poster cards, one per 100-list entry, each with a \"Show on map\" action that","element":"my-upg-100-list-map","type":"single","isMap":true,"iframeUrl":"./my-upg-100-list/poster-wall/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-list","file":"upg-100-list.vue","description":"A personal unreached-people-groups list painted as true boundary polygons —","element":"my-upg-100-list-map","type":"single","isMap":true,"iframeUrl":"./my-upg-100-list/upg-100-list/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-mfe","file":"upg-100-mfe.vue","description":"The standalone, shareable and embeddable composite of the my-upg-100-list family — it nests the map","element":"my-upg-100-list-map","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./my-upg-100-list/upg-100-mfe/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-eIh/eQ3SOnMBPQh5z4wAfhFK1MScit5ksl9pVBqHe3wPEuT48xlPwZz1OGwPSICH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/my-upg-100-list-map>"}}]},{"bundle":"people-groups-grid","scriptUrl":"./people-groups-grid/people-groups-grid.js","output":"doxa-maps/people-groups-grid/people-groups-grid.js","integrity":"sha384-ss5PmeSkKuxafBwvxZG3r7roP0OB/oVGwFbfrHnydEhjbtrlB4eisdsPXEyCJF37","elements":["people-groups-grid"],"profiles":[{"profile":"people-groups-grid","file":"people-groups-grid.vue","description":"The people-groups grid as an owned custom element: card list, search and four","element":"people-groups-grid","type":"parameterized","isMap":false,"iframeUrl":"./people-groups-grid/people-groups-grid/index.html","scriptUrl":"./people-groups-grid/people-groups-grid.js","embed":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-ss5PmeSkKuxafBwvxZG3r7roP0OB/oVGwFbfrHnydEhjbtrlB4eisdsPXEyCJF37\" crossorigin=\"anonymous\">\u003c/script>\n\u003cpeople-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/people-groups-grid>"},"instances":[{"id":"people-groups-grid","title":"People Groups Grid — standalone (own search + 4 dropdowns)","apiBaseUrl":"","props":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid","pray-base-url":"https://pray.doxa.life"},"element":"people-groups-grid","iframeUrl":"./people-groups-grid/people-groups-grid/people-groups-grid/index.html","embed":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/people-groups-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"driven","title":"People Groups Grid — externally driven (controls off, props/events)","apiBaseUrl":"","props":{"profile":"people-groups-grid","provider":"maplibre","instanceId":"people-groups-grid-driven","pray-base-url":"https://pray.doxa.life","show-search":"false","show-filters":"false"},"element":"people-groups-grid","iframeUrl":"./people-groups-grid/people-groups-grid/driven/index.html","embed":{"iframe":"\u003ciframe src=\"./people-groups-grid/people-groups-grid/driven/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"plugin-studio","scriptUrl":"./plugin-studio/plugin-studio.js","output":"doxa-maps/plugin-studio/plugin-studio.js","integrity":"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH","elements":["plugin-studio"],"composes":["bp-big-picture","people-groups-grid","doxa-research-map","doxa-simple-map","cities-internet-map","gospel-resources-map","my-upg-100-list-map","doxa-vision-card","all-people-groups","research-dashboard"],"profiles":[{"profile":"plugin-studio","file":"plugin-studio.vue","description":"The developer's viewing surface: a sidebar that is the composability ladder","element":"plugin-studio","type":"nested-mfe-spa","isMap":false,"iframeUrl":"./plugin-studio/plugin-studio/index.html","scriptUrl":"./plugin-studio/plugin-studio.js","embed":{"iframe":"\u003ciframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-2RlLFRU2XdjBN7w+FPguj8INgj57JFg4IFT2AmdefGnR9QQLehbiiAffV45LcsFH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cplugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/plugin-studio>"},"instances":[{"id":"studio","title":"Plugin Studio — every element by capability 5 -> 1 (developer studio)","apiBaseUrl":"","props":{"profile":"plugin-studio","provider":"maplibre","instanceId":"plugin-studio","title":"Plugin Studio"},"element":"plugin-studio","iframeUrl":"./plugin-studio/plugin-studio/studio/index.html","embed":{"iframe":"\u003ciframe src=\"./plugin-studio/plugin-studio/studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"prayer-walk-planner","scriptUrl":"./prayer-walk-planner/prayer-walk-planner.js","output":"doxa-maps/prayer-walk-planner/prayer-walk-planner.js","integrity":"sha384-F0+r4avX8xkXp0hBpU5EBPU0InMRCObIn2Ieh9HJNn1r2amk8/qHmJ68WuNfsirC","elements":["prayer-walk-planner"],"profiles":[{"profile":"prayer-walk-planner","file":"prayer-walk-planner.vue","description":"A simple polygon-drawing tool for planning prayer-walking routes.","element":"prayer-walk-planner","type":"single","isMap":true,"iframeUrl":"./prayer-walk-planner/prayer-walk-planner/index.html","scriptUrl":"./prayer-walk-planner/prayer-walk-planner.js","embed":{"iframe":"\u003ciframe src=\"./prayer-walk-planner/prayer-walk-planner/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-F0+r4avX8xkXp0hBpU5EBPU0InMRCObIn2Ieh9HJNn1r2amk8/qHmJ68WuNfsirC\" crossorigin=\"anonymous\">\u003c/script>\n\u003cprayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/prayer-walk-planner>"}}]},{"bundle":"regions-dashboard","scriptUrl":"./regions-dashboard/regions-dashboard.js","output":"doxa-maps/regions-dashboard/regions-dashboard.js","integrity":"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3","elements":["regions-dashboard"],"composes":["regions-dashboard/regions-list","regions-dashboard/region-dashboards"],"profiles":[{"profile":"region-dashboards","file":"region-dashboards.vue","description":"The dashboard half of the Driver's 2-tab Regions element: given a region (or a","element":"regions-dashboard","type":"single","isMap":true,"iframeUrl":"./regions-dashboard/region-dashboards/index.html","scriptUrl":"./regions-dashboard/regions-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"profile":"regions-list","file":"regions-list.vue","description":"A refactor of DX-life's /regions index page (app/pages/regions/index.vue) into","element":"regions-dashboard","type":"single","isMap":true,"iframeUrl":"./regions-dashboard/regions-list/index.html","scriptUrl":"./regions-dashboard/regions-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}},{"profile":"regions-mfe","file":"regions-mfe.vue","description":"The composite the Driver asked for: ONE element carrying the SELECT VIEW switcher","element":"regions-dashboard","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./regions-dashboard/regions-mfe/index.html","scriptUrl":"./regions-dashboard/regions-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-n3kInpuswr5SZUqmljlIdNNK0Yc+ZRAGupCSV38rG223iKRdhEPBJlV9HyZU4/+3\" crossorigin=\"anonymous\">\u003c/script>\n\u003cregions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/regions-dashboard>"}}]},{"bundle":"research-dashboard","scriptUrl":"./research-dashboard/research-dashboard.js","output":"doxa-maps/research-dashboard/research-dashboard.js","integrity":"sha384-cMZfw0g3/v0hHkyHQhHYiv9GeD7hvFaUD0qF/G3FowqUNjgDykvI+btwOIu/p6Qy","elements":["research-dashboard-map"],"profiles":[{"profile":"research-dashboard","file":"research-dashboard.vue","description":"Coordinated-Multiple-Views research dashboard for 10/40-window UPGs (live pray.doxa.life): docked facet rail + map-as-hero + linked table/charts, brushing-and-linking over one in-memory store.","element":"research-dashboard-map","type":"monolithic","isMap":true,"iframeUrl":"./research-dashboard/research-dashboard/index.html","scriptUrl":"./research-dashboard/research-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-cMZfw0g3/v0hHkyHQhHYiv9GeD7hvFaUD0qF/G3FowqUNjgDykvI+btwOIu/p6Qy\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-dashboard-map>"},"bundle":"research-dashboard"}]},{"bundle":"research-map-plus-grid","scriptUrl":"./research-map-plus-grid/research-map-plus-grid.js","output":"doxa-maps/research-map-plus-grid/research-map-plus-grid.js","integrity":"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo","elements":["research-map-plus-grid"],"composes":["doxa-research-map","people-groups-grid"],"profiles":[{"profile":"research-map-plus-grid","file":"research-map-plus-grid.vue","description":"The monolithic 7-tab research map (cap-3) on top, the People Groups grid beneath,","element":"research-map-plus-grid","type":"nested-elements-mfe","isMap":false,"iframeUrl":"./research-map-plus-grid/research-map-plus-grid/index.html","scriptUrl":"./research-map-plus-grid/research-map-plus-grid.js","embed":{"iframe":"\u003ciframe src=\"./research-map-plus-grid/research-map-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-sOkaMV0UFr2uNXfoJpRvaD+gHD6xFlkmpR7MzEwwFdarYdid8aN9Nj1Y8TqQJuFo\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/research-map-plus-grid>"},"instances":[{"id":"default","title":"default","apiBaseUrl":"","props":{"profile":"research-map-plus-grid"},"element":"research-map-plus-grid","iframeUrl":"./research-map-plus-grid/research-map-plus-grid/default/index.html","embed":{"iframe":"\u003ciframe src=\"./research-map-plus-grid/research-map-plus-grid/default/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"stack-demo","scriptUrl":"./stack-demo/stack-demo.js","output":"doxa-maps/stack-demo/stack-demo.js","integrity":"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf","elements":["stack-demo"],"composes":["research-dashboard-map","people-groups-grid"],"profiles":[{"profile":"stack-demo","file":"stack-demo.vue","description":"Groups TWO independent elements TOP-TO-BOTTOM so you can embed the pair on a page and","element":"stack-demo","type":"nested-elements-mfe","isMap":false,"iframeUrl":"./stack-demo/stack-demo/index.html","scriptUrl":"./stack-demo/stack-demo.js","embed":{"iframe":"\u003ciframe src=\"./stack-demo/stack-demo/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./stack-demo/stack-demo.js\" integrity=\"sha384-gnwM6s+puf1K60Nl7crQcC2QC+9BxwpkaTx4OepLZ8VUCraZc+aRlWpsb6nj6Gyf\" crossorigin=\"anonymous\">\u003c/script>\n\u003cstack-demo profile-config='{\"profile\":\"stack-demo\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/stack-demo>"},"instances":[{"id":"pair","title":"pair","apiBaseUrl":"","props":{"profile":"stack-demo"},"element":"stack-demo","iframeUrl":"./stack-demo/stack-demo/pair/index.html","embed":{"iframe":"\u003ciframe src=\"./stack-demo/stack-demo/pair/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]},{"bundle":"template-bundle","scriptUrl":"./template-bundle/template-bundle.js","output":"doxa-maps/template-bundle/template-bundle.js","integrity":"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7","elements":["template-bundle"],"profiles":[{"profile":"template-map-a","file":"template-map-a.vue","description":"Minimal example profile A — a colored placeholder, no Mapbox or data.","element":"template-bundle","type":"single","isMap":false,"iframeUrl":"./template-bundle/template-map-a/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"},{"profile":"template-map-b","file":"template-map-b.vue","description":"Minimal example profile B — a second profile in the same bundle.","element":"template-bundle","type":"single","isMap":false,"iframeUrl":"./template-bundle/template-map-b/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-4YT4Amt8yc0KANs5xlODSxpkWKYgWWCWd9B0CNiHCZebzvGbXp4fS+wYtPbqJJx7\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"}]},{"bundle":"upg-neighbor","scriptUrl":"./upg-neighbor/upg-neighbor.js","output":"doxa-maps/upg-neighbor/upg-neighbor.js","integrity":"sha384-JDJr4qoVZuiSi/rvgdzeuUNrzf7vjPdyh/g8dg7X8RHkZk/Y+tYXIQ3gpEzrU07q","elements":["upg-neighbor"],"profiles":[{"profile":"upg-neighbor","file":"upg-neighbor.vue","description":"Rescues the five pre-bundler experimental maps that live inside the legacy","element":"upg-neighbor","type":"parameterized","isMap":false,"iframeUrl":"./upg-neighbor/upg-neighbor/index.html","scriptUrl":"./upg-neighbor/upg-neighbor.js","embed":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-JDJr4qoVZuiSi/rvgdzeuUNrzf7vjPdyh/g8dg7X8RHkZk/Y+tYXIQ3gpEzrU07q\" crossorigin=\"anonymous\">\u003c/script>\n\u003cupg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/upg-neighbor>"},"instances":[{"id":"send-map","title":"Send Map (legacy)","apiBaseUrl":"","props":{"profile":"upg-neighbor","legacyElement":"send-map","legacyTitle":"Send Map"},"element":"upg-neighbor","iframeUrl":"./upg-neighbor/upg-neighbor/send-map/index.html","embed":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/send-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"upg-neighbors","title":"UPG Neighbors (legacy)","apiBaseUrl":"","props":{"profile":"upg-neighbor","legacyElement":"upg-neighbors","legacyTitle":"UPG Neighbors"},"element":"upg-neighbor","iframeUrl":"./upg-neighbor/upg-neighbor/upg-neighbors/index.html","embed":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/upg-neighbors/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"lang-cluster","title":"Language Clusters (legacy)","apiBaseUrl":"","props":{"profile":"upg-neighbor","legacyElement":"lang-cluster","legacyTitle":"Language Clusters"},"element":"upg-neighbor","iframeUrl":"./upg-neighbor/upg-neighbor/lang-cluster/index.html","embed":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/lang-cluster/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"bloom-cockpit","title":"Bloom Cockpit (legacy)","apiBaseUrl":"","props":{"profile":"upg-neighbor","legacyElement":"bloom-cockpit","legacyTitle":"Bloom Cockpit"},"element":"upg-neighbor","iframeUrl":"./upg-neighbor/upg-neighbor/bloom-cockpit/index.html","embed":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/bloom-cockpit/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"flower-mesh","title":"Flower Mesh (legacy)","apiBaseUrl":"","props":{"profile":"upg-neighbor","legacyElement":"flower-mesh","legacyTitle":"Flower Mesh"},"element":"upg-neighbor","iframeUrl":"./upg-neighbor/upg-neighbor/flower-mesh/index.html","embed":{"iframe":"\u003ciframe src=\"./upg-neighbor/upg-neighbor/flower-mesh/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]}]};
\n\n"
+ "script": "\n\n"
}
},
{
@@ -692,7 +692,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "",
- "script": "\n\n"
+ "script": "\n\n"
}
},
{
@@ -706,7 +706,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "",
- "script": "\n\n"
+ "script": "\n\n"
}
}
]
diff --git a/public/doxa-maps/my-upg-100-list/my-upg-100-list.js b/public/doxa-maps/my-upg-100-list/my-upg-100-list.js
index 2499288e5..50564fa01 100644
--- a/public/doxa-maps/my-upg-100-list/my-upg-100-list.js
+++ b/public/doxa-maps/my-upg-100-list/my-upg-100-list.js
@@ -1,46 +1,46 @@
-(function(){"use strict";var xp;var ln=typeof document<"u"?document.currentScript:null;const l$="modulepreload",c$=function(e){return"/"+e},u$={},Kt=function(t,o,n){let a=Promise.resolve();function r(s){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s}return a.then(s=>{for(const i of s||[])i.status==="rejected"&&r(i.reason);return t().catch(r)})};/**
+(function(){"use strict";var $p;var ln=typeof document<"u"?document.currentScript:null;const p$="modulepreload",g$=function(e){return"/"+e},f$={},Dt=function(t,o,n){let a=Promise.resolve();function r(s){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s}return a.then(s=>{for(const i of s||[])i.status==="rejected"&&r(i.reason);return t().catch(r)})};/**
* @vue/shared v3.5.42
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
-**/function Rr(e){const t=Object.create(null);for(const o of e.split(","))t[o]=1;return o=>o in t}const Ze={},cn=[],eo=()=>{},Ni=()=>!1,ka=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),wa=e=>e.startsWith("onUpdate:"),lt=Object.assign,Ir=(e,t)=>{const o=e.indexOf(t);o>-1&&e.splice(o,1)},Lp=Object.prototype.hasOwnProperty,ze=(e,t)=>Lp.call(e,t),xe=Array.isArray,Mo=e=>Fn(e)==="[object Map]",Vo=e=>Fn(e)==="[object Set]",Ri=e=>Fn(e)==="[object Date]",Ee=e=>typeof e=="function",Qe=e=>typeof e=="string",Dt=e=>typeof e=="symbol",Ye=e=>e!==null&&typeof e=="object",Ii=e=>(Ye(e)||Ee(e))&&Ee(e.then)&&Ee(e.catch),Oi=Object.prototype.toString,Fn=e=>Oi.call(e),Cp=e=>Fn(e).slice(8,-1),xa=e=>Fn(e)==="[object Object]",$a=e=>Qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Dn=Rr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Aa=e=>{const t=Object.create(null);return o=>t[o]||(t[o]=e(o))},Pp=/-\w/g,_t=Aa(e=>e.replace(Pp,t=>t.slice(1).toUpperCase())),Tp=/\B([A-Z])/g,Bt=Aa(e=>e.replace(Tp,"-$1").toLowerCase()),Sa=Aa(e=>e.charAt(0).toUpperCase()+e.slice(1)),Or=Aa(e=>e?`on${Sa(e)}`:""),to=(e,t)=>!Object.is(e,t),Ea=(e,...t)=>{for(let o=0;o{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:o})},La=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Di=e=>{const t=Qe(e)?Number(e):NaN;return isNaN(t)?e:t};let Bi;const Ca=()=>Bi||(Bi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function nt(e){if(xe(e)){const t={};for(let o=0;o{if(o){const n=o.split(Np);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Ne(e){let t="";if(Qe(e))t=e;else if(xe(e))for(let o=0;oNo(o,t))}const Ui=e=>!!(e&&e.__v_isRef===!0),pe=e=>Qe(e)?e:e==null?"":xe(e)||Ye(e)&&(e.toString===Oi||!Ee(e.toString))?Ui(e)?pe(e.value):JSON.stringify(e,Ki,2):String(e),Ki=(e,t)=>Ui(t)?Ki(e,t.value):Mo(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((o,[n,a],r)=>(o[Fr(n,r)+" =>"]=a,o),{})}:Vo(t)?{[`Set(${t.size})`]:[...t.values()].map(o=>Fr(o))}:Dt(t)?Fr(t):Ye(t)&&!xe(t)&&!xa(t)?String(t):t,Fr=(e,t="")=>{var o;return Dt(e)?`Symbol(${(o=e.description)!=null?o:t})`:e};/**
+**/function Rr(e){const t=Object.create(null);for(const o of e.split(","))t[o]=1;return o=>o in t}const Ze={},cn=[],to=()=>{},Ni=()=>!1,ka=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),wa=e=>e.startsWith("onUpdate:"),lt=Object.assign,Ir=(e,t)=>{const o=e.indexOf(t);o>-1&&e.splice(o,1)},Cp=Object.prototype.hasOwnProperty,Ke=(e,t)=>Cp.call(e,t),xe=Array.isArray,Mo=e=>Fn(e)==="[object Map]",Vo=e=>Fn(e)==="[object Set]",Ri=e=>Fn(e)==="[object Date]",Ee=e=>typeof e=="function",Qe=e=>typeof e=="string",Bt=e=>typeof e=="symbol",Ye=e=>e!==null&&typeof e=="object",Ii=e=>(Ye(e)||Ee(e))&&Ee(e.then)&&Ee(e.catch),Oi=Object.prototype.toString,Fn=e=>Oi.call(e),Pp=e=>Fn(e).slice(8,-1),xa=e=>Fn(e)==="[object Object]",$a=e=>Qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Dn=Rr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Aa=e=>{const t=Object.create(null);return o=>t[o]||(t[o]=e(o))},Tp=/-\w/g,_t=Aa(e=>e.replace(Tp,t=>t.slice(1).toUpperCase())),Mp=/\B([A-Z])/g,Gt=Aa(e=>e.replace(Mp,"-$1").toLowerCase()),Sa=Aa(e=>e.charAt(0).toUpperCase()+e.slice(1)),Or=Aa(e=>e?`on${Sa(e)}`:""),oo=(e,t)=>!Object.is(e,t),Ea=(e,...t)=>{for(let o=0;o{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:o})},La=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Di=e=>{const t=Qe(e)?Number(e):NaN;return isNaN(t)?e:t};let Bi;const Ca=()=>Bi||(Bi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function nt(e){if(xe(e)){const t={};for(let o=0;o{if(o){const n=o.split(Rp);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Re(e){let t="";if(Qe(e))t=e;else if(xe(e))for(let o=0;oNo(o,t))}const Ui=e=>!!(e&&e.__v_isRef===!0),ge=e=>Qe(e)?e:e==null?"":xe(e)||Ye(e)&&(e.toString===Oi||!Ee(e.toString))?Ui(e)?ge(e.value):JSON.stringify(e,zi,2):String(e),zi=(e,t)=>Ui(t)?zi(e,t.value):Mo(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((o,[n,a],r)=>(o[Fr(n,r)+" =>"]=a,o),{})}:Vo(t)?{[`Set(${t.size})`]:[...t.values()].map(o=>Fr(o))}:Bt(t)?Fr(t):Ye(t)&&!xe(t)&&!xa(t)?String(t):t,Fr=(e,t="")=>{var o;return Bt(e)?`Symbol(${(o=e.description)!=null?o:t})`:e};/**
* @vue/reactivity v3.5.42
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
-**/let ht;class zi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&ht&&(ht.active?(this.parent=ht,this.index=(ht.scopes||(ht.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,o;if(this.scopes){const n=this.scopes.slice();for(t=0,o=n.length;t0&&--this._on===0){if(ht===this)ht=this.prevScope;else{let t=ht;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let o,n;for(o=0,n=this.effects.length;o0)return;if(Gn){let t=Gn;for(Gn=void 0;t;){const o=t.next;t.next=void 0,t.flags&=-9,t=o}}let e;for(;Bn;){let t=Bn;for(Bn=void 0;t;){const o=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=o}}if(e)throw e}function qi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ji(e){let t,o=e.depsTail,n=o;for(;n;){const a=n.prevDep;n.version===-1?(n===o&&(o=a),Kr(n),Gp(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=a}e.deps=t,e.depsTail=o}function Ur(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Xi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Xi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===jn)||(e.globalVersion=jn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ur(e))))return;e.flags|=2;const t=e.dep,o=et,n=Wt;et=e,Wt=!0;try{qi(e);const a=e.fn(e._value);(t.version===0||to(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{et=o,Wt=n,Ji(e),e.flags&=-3}}function Kr(e,t=!1){const{dep:o,prevSub:n,nextSub:a}=e;if(n&&(n.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=n,e.nextSub=void 0),o.subs===e&&(o.subs=n,!n&&o.computed)){o.computed.flags&=-5;for(let r=o.computed.deps;r;r=r.nextDep)Kr(r,!0)}!t&&!--o.sc&&o.map&&o.map.delete(o.key)}function Gp(e){const{prevDep:t,nextDep:o}=e;t&&(t.nextDep=o,e.prevDep=void 0),o&&(o.prevDep=t,e.nextDep=void 0)}let Wt=!0;const Zi=[];function oo(){Zi.push(Wt),Wt=!1}function no(){const e=Zi.pop();Wt=e===void 0?!0:e}function Qi(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const o=et;et=void 0;try{t()}finally{et=o}}}let jn=0;class jp{constructor(t,o){this.sub=t,this.dep=o,this.version=o.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class zr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!et||!Wt||et===this.computed)return;let o=this.activeLink;if(o===void 0||o.sub!==et)o=this.activeLink=new jp(et,this),et.deps?(o.prevDep=et.depsTail,et.depsTail.nextDep=o,et.depsTail=o):et.deps=et.depsTail=o,el(o);else if(o.version===-1&&(o.version=this.version,o.nextDep)){const n=o.nextDep;n.prevDep=o.prevDep,o.prevDep&&(o.prevDep.nextDep=n),o.prevDep=et.depsTail,o.nextDep=void 0,et.depsTail.nextDep=o,et.depsTail=o,et.deps===o&&(et.deps=n)}return o}trigger(t){this.version++,jn++,this.notify(t)}notify(t){Gr();try{for(let o=this.subs;o;o=o.prevSub)o.sub.notify()&&o.sub.dep.notify()}finally{jr()}}}function el(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)el(n)}const o=e.dep.subs;o!==e&&(e.prevSub=o,o&&(o.nextSub=e)),e.dep.subs=e}}const Pa=new WeakMap,Wo=Symbol(""),Hr=Symbol(""),Un=Symbol("");function Pt(e,t,o){if(Wt&&et){let n=Pa.get(e);n||Pa.set(e,n=new Map);let a=n.get(o);a||(n.set(o,a=new zr),a.map=n,a.key=o),a.track()}}function bo(e,t,o,n,a,r){const s=Pa.get(e);if(!s){jn++;return}const i=l=>{l&&l.trigger()};if(Gr(),t==="clear")s.forEach(i);else{const l=xe(e),u=l&&$a(o);if(l&&o==="length"){const c=Number(n);s.forEach((p,f)=>{(f==="length"||f===Un||!Dt(f)&&f>=c)&&i(p)})}else switch((o!==void 0||s.has(void 0))&&i(s.get(o)),u&&i(s.get(Un)),t){case"add":l?u&&i(s.get("length")):(i(s.get(Wo)),Mo(e)&&i(s.get(Hr)));break;case"delete":l||(i(s.get(Wo)),Mo(e)&&i(s.get(Hr)));break;case"set":Mo(e)&&i(s.get(Wo));break}}jr()}function Up(e,t){const o=Pa.get(e);return o&&o.get(t)}function un(e){const t=Be(e);return t===e?t:(Pt(t,"iterate",Un),Gt(e)?t:t.map(Yt))}function Ta(e){return Pt(e=Be(e),"iterate",Un),e}function ao(e,t){return vo(e)?pn(_o(e)?Yt(t):t):Yt(t)}const Kp={__proto__:null,[Symbol.iterator](){return Vr(this,Symbol.iterator,e=>ao(this,e))},concat(...e){return un(this).concat(...e.map(t=>xe(t)?un(t):t))},entries(){return Vr(this,"entries",e=>(e[1]=ao(this,e[1]),e))},every(e,t){return yo(this,"every",e,t,void 0,arguments)},filter(e,t){return yo(this,"filter",e,t,o=>o.map(n=>ao(this,n)),arguments)},find(e,t){return yo(this,"find",e,t,o=>ao(this,o),arguments)},findIndex(e,t){return yo(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return yo(this,"findLast",e,t,o=>ao(this,o),arguments)},findLastIndex(e,t){return yo(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return yo(this,"forEach",e,t,void 0,arguments)},includes(...e){return Wr(this,"includes",e)},indexOf(...e){return Wr(this,"indexOf",e)},join(e){return un(this).join(e)},lastIndexOf(...e){return Wr(this,"lastIndexOf",e)},map(e,t){return yo(this,"map",e,t,void 0,arguments)},pop(){return Kn(this,"pop")},push(...e){return Kn(this,"push",e)},reduce(e,...t){return tl(this,"reduce",e,t)},reduceRight(e,...t){return tl(this,"reduceRight",e,t)},shift(){return Kn(this,"shift")},some(e,t){return yo(this,"some",e,t,void 0,arguments)},splice(...e){return Kn(this,"splice",e)},toReversed(){return un(this).toReversed()},toSorted(e){return un(this).toSorted(e)},toSpliced(...e){return un(this).toSpliced(...e)},unshift(...e){return Kn(this,"unshift",e)},values(){return Vr(this,"values",e=>ao(this,e))}};function Vr(e,t,o){const n=Ta(e),a=n[t]();return n!==e&&!Gt(e)&&(a._next=a.next,a.next=()=>{const r=a._next();return r.done||(r.value=o(r.value)),r}),a}const zp=Array.prototype;function yo(e,t,o,n,a,r){const s=Ta(e),i=s!==e&&!Gt(e),l=s[t];if(l!==zp[t]){const p=l.apply(e,r);return i?Yt(p):p}let u=o;s!==e&&(i?u=function(p,f){return o.call(this,ao(e,p),f,e)}:o.length>2&&(u=function(p,f){return o.call(this,p,f,e)}));const c=l.call(s,u,n);return i&&a?a(c):c}function tl(e,t,o,n){const a=Ta(e),r=a!==e&&!Gt(e);let s=o,i=!1;a!==e&&(r?(i=n.length===0,s=function(u,c,p){return i&&(i=!1,u=ao(e,u)),o.call(this,u,ao(e,c),p,e)}):o.length>3&&(s=function(u,c,p){return o.call(this,u,c,p,e)}));const l=a[t](s,...n);return i?ao(e,l):l}function Wr(e,t,o){const n=Be(e);Pt(n,"iterate",Un);const a=n[t](...o);return(a===-1||a===!1)&&Oa(o[0])?(o[0]=Be(o[0]),n[t](...o)):a}function Kn(e,t,o=[]){oo(),Gr();const n=Be(e)[t].apply(e,o);return jr(),no(),n}const Hp=Rr("__proto__,__v_isRef,__isVue"),ol=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Dt));function Vp(e){Dt(e)||(e=String(e));const t=Be(this);return Pt(t,"has",e),t.hasOwnProperty(e)}class nl{constructor(t=!1,o=!1){this._isReadonly=t,this._isShallow=o}get(t,o,n){if(o==="__v_skip")return t.__v_skip;const a=this._isReadonly,r=this._isShallow;if(o==="__v_isReactive")return!a;if(o==="__v_isReadonly")return a;if(o==="__v_isShallow")return r;if(o==="__v_raw")return n===(a?r?cl:ll:r?il:sl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const s=xe(t);if(!a){let l;if(s&&(l=Kp[o]))return l;if(o==="hasOwnProperty")return Vp}const i=Reflect.get(t,o,at(t)?t:n);if((Dt(o)?ol.has(o):Hp(o))||(a||Pt(t,"get",o),r))return i;if(at(i)){const l=s&&$a(o)?i:i.value;return a&&Ye(l)?qr(l):l}return Ye(i)?a?qr(i):dn(i):i}}class al extends nl{constructor(t=!1){super(!1,t)}set(t,o,n,a){let r=t[o];const s=xe(t)&&$a(o);if(!this._isShallow){const u=vo(r);if(!Gt(n)&&!vo(n)&&(r=Be(r),n=Be(n)),!s&&at(r)&&!at(n))return u||(r.value=n),!0}const i=s?Number(o)e,Ma=e=>Reflect.getPrototypeOf(e);function Xp(e,t,o){return function(...n){const a=this.__v_raw,r=Be(a),s=Mo(r),i=e==="entries"||e===Symbol.iterator&&s,l=e==="keys"&&s,u=a[e](...n),c=o?Yr:t?pn:Yt;return!t&&Pt(r,"iterate",l?Hr:Wo),lt(Object.create(u),{next(){const{value:p,done:f}=u.next();return f?{value:p,done:f}:{value:i?[c(p[0]),c(p[1])]:c(p),done:f}}})}}function Na(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Zp(e,t){const o={get(a){const r=this.__v_raw,s=Be(r),i=Be(a);e||(to(a,i)&&Pt(s,"get",a),Pt(s,"get",i));const{has:l}=Ma(s),u=t?Yr:e?pn:Yt;if(l.call(s,a))return u(r.get(a));if(l.call(s,i))return u(r.get(i));r!==s&&r.get(a)},get size(){const a=this.__v_raw;return!e&&Pt(Be(a),"iterate",Wo),a.size},has(a){const r=this.__v_raw,s=Be(r),i=Be(a);return e||(to(a,i)&&Pt(s,"has",a),Pt(s,"has",i)),a===i?r.has(a):r.has(a)||r.has(i)},forEach(a,r){const s=this,i=s.__v_raw,l=Be(i),u=t?Yr:e?pn:Yt;return!e&&Pt(l,"iterate",Wo),i.forEach((c,p)=>a.call(r,u(c),u(p),s))}};return lt(o,e?{add:Na("add"),set:Na("set"),delete:Na("delete"),clear:Na("clear")}:{add(a){const r=Be(this),s=Ma(r),i=Be(a),l=!t&&!Gt(a)&&!vo(a)?i:a;return s.has.call(r,l)||to(a,l)&&s.has.call(r,a)||to(i,l)&&s.has.call(r,i)||(r.add(l),bo(r,"add",l,l)),this},set(a,r){!t&&!Gt(r)&&!vo(r)&&(r=Be(r));const s=Be(this),{has:i,get:l}=Ma(s);let u=i.call(s,a);u||(a=Be(a),u=i.call(s,a));const c=l.call(s,a);return s.set(a,r),u?to(r,c)&&bo(s,"set",a,r):bo(s,"add",a,r),this},delete(a){const r=Be(this),{has:s,get:i}=Ma(r);let l=s.call(r,a);l||(a=Be(a),l=s.call(r,a)),i&&i.call(r,a);const u=r.delete(a);return l&&bo(r,"delete",a,void 0),u},clear(){const a=Be(this),r=a.size!==0,s=a.clear();return r&&bo(a,"clear",void 0,void 0),s}}),["keys","values","entries",Symbol.iterator].forEach(a=>{o[a]=Xp(a,e,t)}),o}function Ra(e,t){const o=Zp(e,t);return(n,a,r)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?n:Reflect.get(ze(o,a)&&a in n?o:n,a,r)}const Qp={get:Ra(!1,!1)},eg={get:Ra(!1,!0)},tg={get:Ra(!0,!1)},og={get:Ra(!0,!0)},sl=new WeakMap,il=new WeakMap,ll=new WeakMap,cl=new WeakMap;function ng(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dn(e){return vo(e)?e:Ia(e,!1,Wp,Qp,sl)}function ag(e){return Ia(e,!1,qp,eg,il)}function qr(e){return Ia(e,!0,Yp,tg,ll)}function p$(e){return Ia(e,!0,Jp,og,cl)}function Ia(e,t,o,n,a){if(!Ye(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const r=a.get(e);if(r)return r;const s=ng(Cp(e));if(s===0)return e;const i=new Proxy(e,s===2?n:o);return a.set(e,i),i}function _o(e){return vo(e)?_o(e.__v_raw):!!(e&&e.__v_isReactive)}function vo(e){return!!(e&&e.__v_isReadonly)}function Gt(e){return!!(e&&e.__v_isShallow)}function Oa(e){return e?!!e.__v_raw:!1}function Be(e){const t=e&&e.__v_raw;return t?Be(t):e}function Yo(e){return!ze(e,"__v_skip")&&Object.isExtensible(e)&&Fi(e,"__v_skip",!0),e}const Yt=e=>Ye(e)?dn(e):e,pn=e=>Ye(e)?qr(e):e;function at(e){return e?e.__v_isRef===!0:!1}function de(e){return ul(e,!1)}function gn(e){return ul(e,!0)}function ul(e,t){return at(e)?e:new rg(e,t)}class rg{constructor(t,o){this.dep=new zr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=o?t:Be(t),this._value=o?t:Yt(t),this.__v_isShallow=o}get value(){return this.dep.track(),this._value}set value(t){const o=this._rawValue,n=this.__v_isShallow||Gt(t)||vo(t);t=n?t:Be(t),to(t,o)&&(this._rawValue=t,this._value=n?t:Yt(t),this.dep.trigger())}}function _e(e){return at(e)?e.value:e}const sg={get:(e,t,o)=>t==="__v_raw"?e:_e(Reflect.get(e,t,o)),set:(e,t,o,n)=>{const a=e[t];return at(a)&&!at(o)?(a.value=o,!0):Reflect.set(e,t,o,n)}};function dl(e){return _o(e)?e:new Proxy(e,sg)}function ig(e){const t=xe(e)?new Array(e.length):{};for(const o in e)t[o]=pl(e,o);return t}class lg{constructor(t,o,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=Dt(o)?o:String(o),this._raw=Be(t);let a=!0,r=t;if(!xe(t)||Dt(this._key)||!$a(this._key))do a=!Oa(r)||Gt(r);while(a&&(r=r.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=_e(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&at(this._raw[this._key])){const o=this._object[this._key];if(at(o)){o.value=t;return}}this._object[this._key]=t}get dep(){return Up(this._raw,this._key)}}class cg{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function ug(e,t,o){return at(e)?e:Ee(e)?new cg(e):Ye(e)&&arguments.length>1?pl(e,t,o):de(e)}function pl(e,t,o){return new lg(e,t,o)}class dg{constructor(t,o,n){this.fn=t,this.setter=o,this._value=void 0,this.dep=new zr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=jn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!o,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&et!==this)return Yi(this,!0),!0}get value(){const t=this.dep.track();return Xi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function pg(e,t,o=!1){let n,a;return Ee(e)?n=e:(n=e.get,a=e.set),new dg(n,a,o)}const Fa={},Da=new WeakMap;let qo;function gg(e,t=!1,o=qo){if(o){let n=Da.get(o);n||Da.set(o,n=[]),n.push(e)}}function fg(e,t,o=Ze){const{immediate:n,deep:a,once:r,scheduler:s,augmentJob:i,call:l}=o,u=_=>a?_:Gt(_)||a===!1||a===0?ko(_,1):ko(_);let c,p,f,k,w=!1,m=!1;if(at(e)?(p=()=>e.value,w=Gt(e)):_o(e)?(p=()=>u(e),w=!0):xe(e)?(m=!0,w=e.some(_=>_o(_)||Gt(_)),p=()=>e.map(_=>{if(at(_))return _.value;if(_o(_))return u(_);if(Ee(_))return l?l(_,2):_()})):Ee(e)?t?p=l?()=>l(e,2):e:p=()=>{if(f){oo();try{f()}finally{no()}}const _=qo;qo=c;try{return l?l(e,3,[k]):e(k)}finally{qo=_}}:p=eo,t&&a){const _=p,x=a===!0?1/0:a;p=()=>ko(_(),x)}const d=Hi(),g=()=>{c.stop(),d&&d.active&&Ir(d.effects,c)};if(r&&t){const _=t;t=(...x)=>{const $=_(...x);return g(),$}}let h=m?new Array(e.length).fill(Fa):Fa;const b=_=>{if(!(!(c.flags&1)||!c.dirty&&!_))if(t){const x=c.run();if(_||a||w||(m?x.some(($,A)=>to($,h[A])):to(x,h))){f&&f();const $=qo;qo=c;try{const A=[x,h===Fa?void 0:m&&h[0]===Fa?[]:h,k];h=x,l?l(t,3,A):t(...A)}finally{qo=$}}}else c.run()};return i&&i(b),c=new Vi(p),c.scheduler=s?()=>s(b,!1):b,k=_=>gg(_,!1,c),f=c.onStop=()=>{const _=Da.get(c);if(_){if(l)l(_,4);else for(const x of _)x();Da.delete(c)}},t?n?b(!0):h=c.run():s?s(b.bind(null,!0),!0):c.run(),g.pause=c.pause.bind(c),g.resume=c.resume.bind(c),g.stop=g,g}function ko(e,t=1/0,o){if(t<=0||!Ye(e)||e.__v_skip||(o=o||new Map,(o.get(e)||0)>=t))return e;if(o.set(e,t),t--,at(e))ko(e.value,t,o);else if(xe(e))for(let n=0;n{ko(n,t,o)});else if(xa(e)){for(const n in e)ko(e[n],t,o);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&ko(e[n],t,o)}return e}/**
+**/let ht;class Ki{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&ht&&(ht.active?(this.parent=ht,this.index=(ht.scopes||(ht.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,o;if(this.scopes){const n=this.scopes.slice();for(t=0,o=n.length;t0&&--this._on===0){if(ht===this)ht=this.prevScope;else{let t=ht;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let o,n;for(o=0,n=this.effects.length;o0)return;if(Gn){let t=Gn;for(Gn=void 0;t;){const o=t.next;t.next=void 0,t.flags&=-9,t=o}}let e;for(;Bn;){let t=Bn;for(Bn=void 0;t;){const o=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=o}}if(e)throw e}function qi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ji(e){let t,o=e.depsTail,n=o;for(;n;){const a=n.prevDep;n.version===-1?(n===o&&(o=a),zr(n),jp(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=a}e.deps=t,e.depsTail=o}function Ur(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Xi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Xi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===jn)||(e.globalVersion=jn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ur(e))))return;e.flags|=2;const t=e.dep,o=et,n=Wt;et=e,Wt=!0;try{qi(e);const a=e.fn(e._value);(t.version===0||oo(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{et=o,Wt=n,Ji(e),e.flags&=-3}}function zr(e,t=!1){const{dep:o,prevSub:n,nextSub:a}=e;if(n&&(n.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=n,e.nextSub=void 0),o.subs===e&&(o.subs=n,!n&&o.computed)){o.computed.flags&=-5;for(let r=o.computed.deps;r;r=r.nextDep)zr(r,!0)}!t&&!--o.sc&&o.map&&o.map.delete(o.key)}function jp(e){const{prevDep:t,nextDep:o}=e;t&&(t.nextDep=o,e.prevDep=void 0),o&&(o.prevDep=t,e.nextDep=void 0)}let Wt=!0;const Zi=[];function no(){Zi.push(Wt),Wt=!1}function ao(){const e=Zi.pop();Wt=e===void 0?!0:e}function Qi(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const o=et;et=void 0;try{t()}finally{et=o}}}let jn=0;class Up{constructor(t,o){this.sub=t,this.dep=o,this.version=o.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Kr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!et||!Wt||et===this.computed)return;let o=this.activeLink;if(o===void 0||o.sub!==et)o=this.activeLink=new Up(et,this),et.deps?(o.prevDep=et.depsTail,et.depsTail.nextDep=o,et.depsTail=o):et.deps=et.depsTail=o,el(o);else if(o.version===-1&&(o.version=this.version,o.nextDep)){const n=o.nextDep;n.prevDep=o.prevDep,o.prevDep&&(o.prevDep.nextDep=n),o.prevDep=et.depsTail,o.nextDep=void 0,et.depsTail.nextDep=o,et.depsTail=o,et.deps===o&&(et.deps=n)}return o}trigger(t){this.version++,jn++,this.notify(t)}notify(t){Gr();try{for(let o=this.subs;o;o=o.prevSub)o.sub.notify()&&o.sub.dep.notify()}finally{jr()}}}function el(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)el(n)}const o=e.dep.subs;o!==e&&(e.prevSub=o,o&&(o.nextSub=e)),e.dep.subs=e}}const Pa=new WeakMap,Wo=Symbol(""),Hr=Symbol(""),Un=Symbol("");function Pt(e,t,o){if(Wt&&et){let n=Pa.get(e);n||Pa.set(e,n=new Map);let a=n.get(o);a||(n.set(o,a=new Kr),a.map=n,a.key=o),a.track()}}function bo(e,t,o,n,a,r){const s=Pa.get(e);if(!s){jn++;return}const i=l=>{l&&l.trigger()};if(Gr(),t==="clear")s.forEach(i);else{const l=xe(e),u=l&&$a(o);if(l&&o==="length"){const c=Number(n);s.forEach((p,g)=>{(g==="length"||g===Un||!Bt(g)&&g>=c)&&i(p)})}else switch((o!==void 0||s.has(void 0))&&i(s.get(o)),u&&i(s.get(Un)),t){case"add":l?u&&i(s.get("length")):(i(s.get(Wo)),Mo(e)&&i(s.get(Hr)));break;case"delete":l||(i(s.get(Wo)),Mo(e)&&i(s.get(Hr)));break;case"set":Mo(e)&&i(s.get(Wo));break}}jr()}function zp(e,t){const o=Pa.get(e);return o&&o.get(t)}function un(e){const t=Be(e);return t===e?t:(Pt(t,"iterate",Un),jt(e)?t:t.map(Yt))}function Ta(e){return Pt(e=Be(e),"iterate",Un),e}function ro(e,t){return vo(e)?pn(_o(e)?Yt(t):t):Yt(t)}const Kp={__proto__:null,[Symbol.iterator](){return Vr(this,Symbol.iterator,e=>ro(this,e))},concat(...e){return un(this).concat(...e.map(t=>xe(t)?un(t):t))},entries(){return Vr(this,"entries",e=>(e[1]=ro(this,e[1]),e))},every(e,t){return yo(this,"every",e,t,void 0,arguments)},filter(e,t){return yo(this,"filter",e,t,o=>o.map(n=>ro(this,n)),arguments)},find(e,t){return yo(this,"find",e,t,o=>ro(this,o),arguments)},findIndex(e,t){return yo(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return yo(this,"findLast",e,t,o=>ro(this,o),arguments)},findLastIndex(e,t){return yo(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return yo(this,"forEach",e,t,void 0,arguments)},includes(...e){return Wr(this,"includes",e)},indexOf(...e){return Wr(this,"indexOf",e)},join(e){return un(this).join(e)},lastIndexOf(...e){return Wr(this,"lastIndexOf",e)},map(e,t){return yo(this,"map",e,t,void 0,arguments)},pop(){return zn(this,"pop")},push(...e){return zn(this,"push",e)},reduce(e,...t){return tl(this,"reduce",e,t)},reduceRight(e,...t){return tl(this,"reduceRight",e,t)},shift(){return zn(this,"shift")},some(e,t){return yo(this,"some",e,t,void 0,arguments)},splice(...e){return zn(this,"splice",e)},toReversed(){return un(this).toReversed()},toSorted(e){return un(this).toSorted(e)},toSpliced(...e){return un(this).toSpliced(...e)},unshift(...e){return zn(this,"unshift",e)},values(){return Vr(this,"values",e=>ro(this,e))}};function Vr(e,t,o){const n=Ta(e),a=n[t]();return n!==e&&!jt(e)&&(a._next=a.next,a.next=()=>{const r=a._next();return r.done||(r.value=o(r.value)),r}),a}const Hp=Array.prototype;function yo(e,t,o,n,a,r){const s=Ta(e),i=s!==e&&!jt(e),l=s[t];if(l!==Hp[t]){const p=l.apply(e,r);return i?Yt(p):p}let u=o;s!==e&&(i?u=function(p,g){return o.call(this,ro(e,p),g,e)}:o.length>2&&(u=function(p,g){return o.call(this,p,g,e)}));const c=l.call(s,u,n);return i&&a?a(c):c}function tl(e,t,o,n){const a=Ta(e),r=a!==e&&!jt(e);let s=o,i=!1;a!==e&&(r?(i=n.length===0,s=function(u,c,p){return i&&(i=!1,u=ro(e,u)),o.call(this,u,ro(e,c),p,e)}):o.length>3&&(s=function(u,c,p){return o.call(this,u,c,p,e)}));const l=a[t](s,...n);return i?ro(e,l):l}function Wr(e,t,o){const n=Be(e);Pt(n,"iterate",Un);const a=n[t](...o);return(a===-1||a===!1)&&Oa(o[0])?(o[0]=Be(o[0]),n[t](...o)):a}function zn(e,t,o=[]){no(),Gr();const n=Be(e)[t].apply(e,o);return jr(),ao(),n}const Vp=Rr("__proto__,__v_isRef,__isVue"),ol=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Bt));function Wp(e){Bt(e)||(e=String(e));const t=Be(this);return Pt(t,"has",e),t.hasOwnProperty(e)}class nl{constructor(t=!1,o=!1){this._isReadonly=t,this._isShallow=o}get(t,o,n){if(o==="__v_skip")return t.__v_skip;const a=this._isReadonly,r=this._isShallow;if(o==="__v_isReactive")return!a;if(o==="__v_isReadonly")return a;if(o==="__v_isShallow")return r;if(o==="__v_raw")return n===(a?r?cl:ll:r?il:sl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const s=xe(t);if(!a){let l;if(s&&(l=Kp[o]))return l;if(o==="hasOwnProperty")return Wp}const i=Reflect.get(t,o,at(t)?t:n);if((Bt(o)?ol.has(o):Vp(o))||(a||Pt(t,"get",o),r))return i;if(at(i)){const l=s&&$a(o)?i:i.value;return a&&Ye(l)?qr(l):l}return Ye(i)?a?qr(i):dn(i):i}}class al extends nl{constructor(t=!1){super(!1,t)}set(t,o,n,a){let r=t[o];const s=xe(t)&&$a(o);if(!this._isShallow){const u=vo(r);if(!jt(n)&&!vo(n)&&(r=Be(r),n=Be(n)),!s&&at(r)&&!at(n))return u||(r.value=n),!0}const i=s?Number(o)e,Ma=e=>Reflect.getPrototypeOf(e);function Zp(e,t,o){return function(...n){const a=this.__v_raw,r=Be(a),s=Mo(r),i=e==="entries"||e===Symbol.iterator&&s,l=e==="keys"&&s,u=a[e](...n),c=o?Yr:t?pn:Yt;return!t&&Pt(r,"iterate",l?Hr:Wo),lt(Object.create(u),{next(){const{value:p,done:g}=u.next();return g?{value:p,done:g}:{value:i?[c(p[0]),c(p[1])]:c(p),done:g}}})}}function Na(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Qp(e,t){const o={get(a){const r=this.__v_raw,s=Be(r),i=Be(a);e||(oo(a,i)&&Pt(s,"get",a),Pt(s,"get",i));const{has:l}=Ma(s),u=t?Yr:e?pn:Yt;if(l.call(s,a))return u(r.get(a));if(l.call(s,i))return u(r.get(i));r!==s&&r.get(a)},get size(){const a=this.__v_raw;return!e&&Pt(Be(a),"iterate",Wo),a.size},has(a){const r=this.__v_raw,s=Be(r),i=Be(a);return e||(oo(a,i)&&Pt(s,"has",a),Pt(s,"has",i)),a===i?r.has(a):r.has(a)||r.has(i)},forEach(a,r){const s=this,i=s.__v_raw,l=Be(i),u=t?Yr:e?pn:Yt;return!e&&Pt(l,"iterate",Wo),i.forEach((c,p)=>a.call(r,u(c),u(p),s))}};return lt(o,e?{add:Na("add"),set:Na("set"),delete:Na("delete"),clear:Na("clear")}:{add(a){const r=Be(this),s=Ma(r),i=Be(a),l=!t&&!jt(a)&&!vo(a)?i:a;return s.has.call(r,l)||oo(a,l)&&s.has.call(r,a)||oo(i,l)&&s.has.call(r,i)||(r.add(l),bo(r,"add",l,l)),this},set(a,r){!t&&!jt(r)&&!vo(r)&&(r=Be(r));const s=Be(this),{has:i,get:l}=Ma(s);let u=i.call(s,a);u||(a=Be(a),u=i.call(s,a));const c=l.call(s,a);return s.set(a,r),u?oo(r,c)&&bo(s,"set",a,r):bo(s,"add",a,r),this},delete(a){const r=Be(this),{has:s,get:i}=Ma(r);let l=s.call(r,a);l||(a=Be(a),l=s.call(r,a)),i&&i.call(r,a);const u=r.delete(a);return l&&bo(r,"delete",a,void 0),u},clear(){const a=Be(this),r=a.size!==0,s=a.clear();return r&&bo(a,"clear",void 0,void 0),s}}),["keys","values","entries",Symbol.iterator].forEach(a=>{o[a]=Zp(a,e,t)}),o}function Ra(e,t){const o=Qp(e,t);return(n,a,r)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?n:Reflect.get(Ke(o,a)&&a in n?o:n,a,r)}const eg={get:Ra(!1,!1)},tg={get:Ra(!1,!0)},og={get:Ra(!0,!1)},ng={get:Ra(!0,!0)},sl=new WeakMap,il=new WeakMap,ll=new WeakMap,cl=new WeakMap;function ag(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dn(e){return vo(e)?e:Ia(e,!1,Yp,eg,sl)}function rg(e){return Ia(e,!1,Jp,tg,il)}function qr(e){return Ia(e,!0,qp,og,ll)}function m$(e){return Ia(e,!0,Xp,ng,cl)}function Ia(e,t,o,n,a){if(!Ye(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const r=a.get(e);if(r)return r;const s=ag(Pp(e));if(s===0)return e;const i=new Proxy(e,s===2?n:o);return a.set(e,i),i}function _o(e){return vo(e)?_o(e.__v_raw):!!(e&&e.__v_isReactive)}function vo(e){return!!(e&&e.__v_isReadonly)}function jt(e){return!!(e&&e.__v_isShallow)}function Oa(e){return e?!!e.__v_raw:!1}function Be(e){const t=e&&e.__v_raw;return t?Be(t):e}function Yo(e){return!Ke(e,"__v_skip")&&Object.isExtensible(e)&&Fi(e,"__v_skip",!0),e}const Yt=e=>Ye(e)?dn(e):e,pn=e=>Ye(e)?qr(e):e;function at(e){return e?e.__v_isRef===!0:!1}function pe(e){return ul(e,!1)}function gn(e){return ul(e,!0)}function ul(e,t){return at(e)?e:new sg(e,t)}class sg{constructor(t,o){this.dep=new Kr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=o?t:Be(t),this._value=o?t:Yt(t),this.__v_isShallow=o}get value(){return this.dep.track(),this._value}set value(t){const o=this._rawValue,n=this.__v_isShallow||jt(t)||vo(t);t=n?t:Be(t),oo(t,o)&&(this._rawValue=t,this._value=n?t:Yt(t),this.dep.trigger())}}function ve(e){return at(e)?e.value:e}const ig={get:(e,t,o)=>t==="__v_raw"?e:ve(Reflect.get(e,t,o)),set:(e,t,o,n)=>{const a=e[t];return at(a)&&!at(o)?(a.value=o,!0):Reflect.set(e,t,o,n)}};function dl(e){return _o(e)?e:new Proxy(e,ig)}function lg(e){const t=xe(e)?new Array(e.length):{};for(const o in e)t[o]=pl(e,o);return t}class cg{constructor(t,o,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=Bt(o)?o:String(o),this._raw=Be(t);let a=!0,r=t;if(!xe(t)||Bt(this._key)||!$a(this._key))do a=!Oa(r)||jt(r);while(a&&(r=r.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=ve(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&at(this._raw[this._key])){const o=this._object[this._key];if(at(o)){o.value=t;return}}this._object[this._key]=t}get dep(){return zp(this._raw,this._key)}}class ug{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function dg(e,t,o){return at(e)?e:Ee(e)?new ug(e):Ye(e)&&arguments.length>1?pl(e,t,o):pe(e)}function pl(e,t,o){return new cg(e,t,o)}class pg{constructor(t,o,n){this.fn=t,this.setter=o,this._value=void 0,this.dep=new Kr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=jn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!o,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&et!==this)return Yi(this,!0),!0}get value(){const t=this.dep.track();return Xi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function gg(e,t,o=!1){let n,a;return Ee(e)?n=e:(n=e.get,a=e.set),new pg(n,a,o)}const Fa={},Da=new WeakMap;let qo;function fg(e,t=!1,o=qo){if(o){let n=Da.get(o);n||Da.set(o,n=[]),n.push(e)}}function hg(e,t,o=Ze){const{immediate:n,deep:a,once:r,scheduler:s,augmentJob:i,call:l}=o,u=_=>a?_:jt(_)||a===!1||a===0?ko(_,1):ko(_);let c,p,g,k,w=!1,m=!1;if(at(e)?(p=()=>e.value,w=jt(e)):_o(e)?(p=()=>u(e),w=!0):xe(e)?(m=!0,w=e.some(_=>_o(_)||jt(_)),p=()=>e.map(_=>{if(at(_))return _.value;if(_o(_))return u(_);if(Ee(_))return l?l(_,2):_()})):Ee(e)?t?p=l?()=>l(e,2):e:p=()=>{if(g){no();try{g()}finally{ao()}}const _=qo;qo=c;try{return l?l(e,3,[k]):e(k)}finally{qo=_}}:p=to,t&&a){const _=p,x=a===!0?1/0:a;p=()=>ko(_(),x)}const d=Hi(),f=()=>{c.stop(),d&&d.active&&Ir(d.effects,c)};if(r&&t){const _=t;t=(...x)=>{const $=_(...x);return f(),$}}let h=m?new Array(e.length).fill(Fa):Fa;const b=_=>{if(!(!(c.flags&1)||!c.dirty&&!_))if(t){const x=c.run();if(_||a||w||(m?x.some(($,A)=>oo($,h[A])):oo(x,h))){g&&g();const $=qo;qo=c;try{const A=[x,h===Fa?void 0:m&&h[0]===Fa?[]:h,k];h=x,l?l(t,3,A):t(...A)}finally{qo=$}}}else c.run()};return i&&i(b),c=new Vi(p),c.scheduler=s?()=>s(b,!1):b,k=_=>fg(_,!1,c),g=c.onStop=()=>{const _=Da.get(c);if(_){if(l)l(_,4);else for(const x of _)x();Da.delete(c)}},t?n?b(!0):h=c.run():s?s(b.bind(null,!0),!0):c.run(),f.pause=c.pause.bind(c),f.resume=c.resume.bind(c),f.stop=f,f}function ko(e,t=1/0,o){if(t<=0||!Ye(e)||e.__v_skip||(o=o||new Map,(o.get(e)||0)>=t))return e;if(o.set(e,t),t--,at(e))ko(e.value,t,o);else if(xe(e))for(let n=0;n{ko(n,t,o)});else if(xa(e)){for(const n in e)ko(e[n],t,o);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&ko(e[n],t,o)}return e}/**
* @vue/runtime-core v3.5.42
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
-**/const zn=[];let Jr=!1;function g$(e,...t){if(Jr)return;Jr=!0,oo();const o=zn.length?zn[zn.length-1].component:null,n=o&&o.appContext.config.warnHandler,a=hg();if(n)fn(n,o,11,[e+t.map(r=>{var s,i;return(i=(s=r.toString)==null?void 0:s.call(r))!=null?i:JSON.stringify(r)}).join(""),o&&o.proxy,a.map(({vnode:r})=>`at <${pc(o,r.type)}>`).join(`
+**/const Kn=[];let Jr=!1;function b$(e,...t){if(Jr)return;Jr=!0,no();const o=Kn.length?Kn[Kn.length-1].component:null,n=o&&o.appContext.config.warnHandler,a=mg();if(n)fn(n,o,11,[e+t.map(r=>{var s,i;return(i=(s=r.toString)==null?void 0:s.call(r))!=null?i:JSON.stringify(r)}).join(""),o&&o.proxy,a.map(({vnode:r})=>`at <${pc(o,r.type)}>`).join(`
`),a]);else{const r=[`[Vue warn]: ${e}`,...t];a.length&&r.push(`
-`,...mg(a)),console.warn(...r)}no(),Jr=!1}function hg(){let e=zn[zn.length-1];if(!e)return[];const t=[];for(;e;){const o=t[0];o&&o.vnode===e?o.recurseCount++:t.push({vnode:e,recurseCount:0});const n=e.component&&e.component.parent;e=n&&n.vnode}return t}function mg(e){const t=[];return e.forEach((o,n)=>{t.push(...n===0?[]:[`
-`],...bg(o))}),t}function bg({vnode:e,recurseCount:t}){const o=t>0?`... (${t} recursive calls)`:"",n=e.component?e.component.parent==null:!1,a=` at <${pc(e.component,e.type,n)}`,r=">"+o;return e.props?[a,...yg(e.props),r]:[a+r]}function yg(e){const t=[],o=Object.keys(e);return o.slice(0,3).forEach(n=>{t.push(...gl(n,e[n]))}),o.length>3&&t.push(" ..."),t}function gl(e,t,o){return Qe(t)?(t=JSON.stringify(t),o?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?o?t:[`${e}=${t}`]:at(t)?(t=gl(e,Be(t.value),!0),o?t:[`${e}=Ref<`,t,">"]):Ee(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=Be(t),o?t:[`${e}=`,t])}function fn(e,t,o,n){try{return n?e(...n):e()}catch(a){Hn(a,t,o)}}function qt(e,t,o,n){if(Ee(e)){const a=fn(e,t,o,n);return a&&Ii(a)&&a.catch(r=>{Hn(r,t,o)}),a}if(xe(e)){const a=[];for(let r=0;r>>1,a=Mt[n],r=Vn(a);r=Vn(o)?Mt.push(e):Mt.splice(vg(t),0,e),e.flags|=1,hl()}}function hl(){Ba||(Ba=fl.then(yl))}function kg(e){if(!xe(e))Ro&&e.id===-1?Ro.splice(mn+1,0,e):e.flags&1||(hn.push(e),e.flags|=1);else for(let t=0;tVn(o)-Vn(n));if(hn.length=0,Ro){for(let o=0;oe.id==null?e.flags&2?-1:1/0:e.id;function yl(e){try{for(ro=0;ro{n._d&&Xa(-1);const r=Ga(t),s=xo.length;let i;try{i=e(...a)}finally{for(let l=xo.length;l>s;l--)gs();Ga(r),n._d&&Xa(1)}return i};return n._n=!0,n._c=!0,n._d=!0,n}function vl(e,t){if(At===null)return e;const o=tr(At),n=e.dirs||(e.dirs=[]);for(let a=0;a1)return o&&Ee(t)?t.call(n&&n.proxy):t}}function wg(){return!!(Ao()||Zo)}const xg=Symbol.for("v-scx"),$g=()=>Fe(xg);function Ag(e,t){return Zr(e,null,t)}function it(e,t,o){return Zr(e,t,o)}function Zr(e,t,o=Ze){const{immediate:n,deep:a,flush:r,once:s}=o,i=lt({},o),l=t&&n||!t&&r!=="post";let u;if(vn){if(r==="sync"){const k=$g();u=k.__watcherHandles||(k.__watcherHandles=[])}else if(!l){const k=()=>{};return k.stop=eo,k.resume=eo,k.pause=eo,k}}const c=Et;i.call=(k,w,m)=>qt(k,c,w,m);let p=!1;r==="post"?i.scheduler=k=>{Rt(k,c&&c.suspense)}:r!=="sync"&&(p=!0,i.scheduler=(k,w)=>{w?k():Xr(k)}),i.augmentJob=k=>{t&&(k.flags|=4),p&&(k.flags|=2,c&&(k.id=c.uid,k.i=c))};const f=fg(e,t,i);return vn&&(u?u.push(f):l&&f()),f}function Sg(e,t,o){const n=this.proxy,a=Qe(e)?e.includes(".")?kl(n,e):()=>n[e]:e.bind(n,n);let r;Ee(t)?r=t:(r=t.handler,o=t);const s=na(this),i=Zr(a,r.bind(n),o);return s(),i}function kl(e,t){const o=t.split(".");return()=>{let n=e;for(let a=0;ae.__isTeleport,Xo=e=>e&&(e.disabled||e.disabled===""),Eg=e=>e&&(e.defer||e.defer===""),xl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,$l=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Qr=(e,t)=>{const o=e&&e.to;return Qe(o)?t?t(o):null:o},Lg={name:"Teleport",__isTeleport:!0,process(e,t,o,n,a,r,s,i,l,u){const{mc:c,pc:p,pbc:f,o:{insert:k,querySelector:w,createText:m,createComment:d,parentNode:g}}=u,h=Xo(t.props);let{dynamicChildren:b}=t;const _=(A,C,P)=>{A.shapeFlag&16&&c(A.children,C,P,a,r,s,i,l)},x=(A=t)=>{const C=Xo(A.props),P=A.target=Qr(A.props,w),z=es(P,A,m,k);P&&(s!=="svg"&&xl(P)?s="svg":s!=="mathml"&&$l(P)&&(s="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(P),C||(_(A,P,z),Wn(A,!1)))},$=A=>{const C=()=>{if(Io.get(A)===C){if(Io.delete(A),Xo(A.props)){const P=g(A.el)||o;_(A,P,A.anchor),Wn(A,!0)}x(A)}};Io.set(A,C),Rt(C,r)};if(e==null){const A=t.el=m(""),C=t.anchor=m("");if(k(A,o,n),k(C,o,n),Eg(t.props)||r&&r.pendingBranch){$(t);return}h&&(_(t,o,C),Wn(t,!0)),x()}else{t.el=e.el;const A=t.anchor=e.anchor,C=Io.get(e);if(C){C.flags|=8,Io.delete(e),$(t);return}t.targetStart=e.targetStart;const P=t.target=e.target,z=t.targetAnchor=e.targetAnchor,Y=Xo(e.props),re=Y?o:P,M=Y?A:z;if(s==="svg"||xl(P)?s="svg":(s==="mathml"||$l(P))&&(s="mathml"),b?(f(e.dynamicChildren,b,re,a,r,s,i),ps(e,t,!0)):l||p(e,t,re,M,a,r,s,i,!1),h)Y?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ua(t,o,A,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const F=Qr(t.props,w);F&&(t.target=F,Ua(t,F,null,u,0))}else Y&&Ua(t,P,z,u,1);Wn(t,h)}},remove(e,t,o,{um:n,o:{remove:a}},r){const{shapeFlag:s,children:i,anchor:l,targetStart:u,targetAnchor:c,target:p,props:f}=e,k=Xo(f),w=r||!k,m=Io.get(e);if(m&&(m.flags|=8,Io.delete(e)),p&&(a(u),a(c)),r&&a(l),!m&&(k||p)&&s&16)for(let d=0;d1){for(const o of e)if(o.type!==co){t=o;break}}return t}function Al(e){if(!Ha(e))return ja(e.type)&&e.children?Tg(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:o}=e;if(o){if(t&16)return o[0];if(t&32&&Ee(o.default))return o.default()}}function os(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const o=e.component.subTree;os(ja(o.type)&&Al(o)||o,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yn(e,t){return Ee(e)?lt({name:e.name},t,{setup:e}):e}function ns(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Sl(e,t){let o;return!!((o=Object.getOwnPropertyDescriptor(e,t))&&!o.configurable)}const Ka=new WeakMap;function qn(e,t,o,n,a=!1){if(xe(e)){e.forEach((m,d)=>qn(m,t&&(xe(t)?t[d]:t),o,n,a));return}if(bn(n)&&!a){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&qn(e,t,o,n.component.subTree);return}const r=n.shapeFlag&4?tr(n.component):n.el,s=a?null:r,{i,r:l}=e,u=t&&t.r,c=i.refs===Ze?i.refs={}:i.refs,p=i.setupState,f=Be(p),k=p===Ze?Ni:m=>Sl(c,m)?!1:ze(f,m),w=(m,d)=>!(d&&Sl(c,d));if(u!=null&&u!==l){if(El(t),Qe(u))c[u]=null,k(u)&&(p[u]=null);else if(at(u)){const m=t;w(u,m.k)&&(u.value=null),m.k&&(c[m.k]=null)}}if(Ee(l))fn(l,i,12,[s,c]);else{const m=Qe(l),d=at(l);if(m||d){const g=()=>{if(e.f){const h=m?k(l)?p[l]:c[l]:w()||!e.k?l.value:c[e.k];if(a)xe(h)&&Ir(h,r);else if(xe(h))h.includes(r)||h.push(r);else if(m)c[l]=[r],k(l)&&(p[l]=c[l]);else{const b=[r];w(l,e.k)&&(l.value=b),e.k&&(c[e.k]=b)}}else m?(c[l]=s,k(l)&&(p[l]=s)):d&&(w(l,e.k)&&(l.value=s),e.k&&(c[e.k]=s))};if(s){const h=()=>{g(),Ka.delete(e)};h.id=-1,Ka.set(e,h),Rt(h,o)}else El(e),g()}}}function El(e){const t=Ka.get(e);t&&(t.flags|=8,Ka.delete(e))}const Ll=e=>e.nodeType===8;Ca().requestIdleCallback,Ca().cancelIdleCallback;function Mg(e,t){if(Ll(e)&&e.data==="["){let o=1,n=e.nextSibling;for(;n;){if(n.nodeType===1){if(t(n)===!1)break}else if(Ll(n))if(n.data==="]"){if(--o===0)break}else n.data==="["&&o++;n=n.nextSibling}}else t(e)}const bn=e=>!!e.type.__asyncLoader;function Ng(e){Ee(e)&&(e={loader:e});const{loader:t,loadingComponent:o,errorComponent:n,delay:a=200,hydrate:r,timeout:s,suspensible:i=!0,onError:l}=e;let u=null,c,p=0;const f=()=>(p++,u=null,k()),k=()=>{let w;return u||(w=u=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),l)return new Promise((d,g)=>{l(m,()=>d(f()),()=>g(m),p+1)});throw m}).then(m=>w!==u&&u?u:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),c=m,m)))};return Yn({name:"AsyncComponentWrapper",__asyncLoader:k,__asyncHydrate(w,m,d){const g=w.isConnected;let h=!1;(m.bu||(m.bu=[])).push(()=>h=!0);const b=()=>{h||!w.parentNode||g&&!w.isConnected||d()},_=r?()=>{const x=r(b,$=>Mg(w,$));x&&(m.bum||(m.bum=[])).push(x)}:b;c?_():k().then(()=>!m.isUnmounted&&_())},get __asyncResolved(){return c},setup(){const w=Et;if(ns(w),c)return()=>za(c,w);const m=x=>{u=null,Hn(x,w,13,!n)};if(i&&w.suspense||vn)return k().then(x=>()=>za(x,w)).catch(x=>(m(x),()=>n?He(n,{error:x}):null));const d=de(!1),g=de(),h=de(!!a);let b,_;return Wa(()=>{b!=null&&clearTimeout(b),_!=null&&clearTimeout(_)}),a&&(_=setTimeout(()=>{w.isUnmounted||(h.value=!1)},a)),s!=null&&(b=setTimeout(()=>{if(!w.isUnmounted&&!d.value&&!g.value){const x=new Error(`Async component timed out after ${s}ms.`);m(x),g.value=x}},s)),k().then(()=>{w.isUnmounted||(d.value=!0,w.parent&&Ha(w.parent.vnode)&&w.parent.update())}).catch(x=>{if(w.isUnmounted){u=null;return}m(x),g.value=x}),()=>{if(d.value&&c)return za(c,w);if(g.value&&n)return He(n,{error:g.value});if(o&&!h.value)return za(o,w)}}})}function za(e,t){const{ref:o,props:n,children:a,ce:r}=t.vnode,s=He(e,n,a);return s.ref=o,s.ce=r,delete t.vnode.ce,s}const Ha=e=>e.type.__isKeepAlive;function Rg(e,t){Cl(e,"a",t)}function Ig(e,t){Cl(e,"da",t)}function Cl(e,t,o=Et){const n=e.__wdc||(e.__wdc=()=>{let a=o;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(Va(t,n,o),o){let a=o.parent;for(;a&&a.parent;)Ha(a.parent.vnode)&&Og(n,t,o,a),a=a.parent}}function Og(e,t,o,n){const a=Va(t,e,n,!0);Wa(()=>{Ir(n[t],a)},o)}function Va(e,t,o=Et,n=!1){if(o){const a=o[e]||(o[e]=[]),r=t.__weh||(t.__weh=(...s)=>{oo();const i=na(o),l=qt(t,o,e,s);return i(),no(),l});return n?a.unshift(r):a.push(r),r}}const wo=e=>(t,o=Et)=>{(!vn||e==="sp")&&Va(e,(...n)=>t(...n),o)},Pl=wo("bm"),io=wo("m"),Fg=wo("bu"),Dg=wo("u"),lo=wo("bum"),Wa=wo("um"),Bg=wo("sp"),Gg=wo("rtg"),jg=wo("rtc");function Ug(e,t=Et){Va("ec",e,t)}const Kg="components",Tl=Symbol.for("v-ndc");function Ml(e){return Qe(e)?zg(Kg,e,!1)||e:e||Tl}function zg(e,t,o=!0,n=!1){const a=At||Et;if(a){const r=a.type;{const i=dc(r,!1);if(i&&(i===t||i===_t(t)||i===Sa(_t(t))))return r}const s=Nl(a[e]||r[e],t)||Nl(a.appContext[e],t);return!s&&n?r:s}}function Nl(e,t){return e&&(e[t]||e[_t(t)]||e[Sa(_t(t))])}function St(e,t,o,n){let a;const r=o,s=xe(e);if(s||Qe(e)){const i=s&&_o(e);let l=!1,u=!1;i&&(l=!Gt(e),u=vo(e),e=Ta(e)),a=new Array(e.length);for(let c=0,p=e.length;c