A9 leaf hints: cover a composite whose engine is in a composed child bundle

dx-shepherd/rega: both production composites should get hints, but 37/27 showed
only regions-mfe was reclassified. research-map-plus-grid was still bare: it
composes doxa-research-map (74 engine refs) but its OWN bundle has 0, so keying
on the own-bundle signal alone missed it.

builtBundleLoadsEngine now also scans the bundles a leaf `composes`, resolving a
composes entry that names its child by element TAG (stack-demo composes
"research-dashboard-map", bundle "research-dashboard") through an
element→bundle map built from the scanned bundles. So a composite is hinted
when its own bundle OR any composed child's bundle loads an engine; big-picture
(composes only non-maps) stays out.

Result: both production composites hinted (regions-mfe via own bundle,
research-map-plus-grid via its child), and stack-demo too (it composes a map).
check:leaf-hints mirrors the same tag→bundle resolution from the manifest, so
gate and generator can't drift: PASS 41 hinted / 23 bare. Poison-tested the
composes-child case (stripped → fails) and the pure-non-map case (big-picture
given a hint → fails). Also carries the comment reword from the token-ladder
correction across every hinted leaf.
This commit is contained in:
doxa-maps 2026-09-29 09:07:57 +00:00 committed by Doxa Maps
parent 778e990ca4
commit 3ea2e3ce69
43 changed files with 112 additions and 59 deletions

View file

@ -47,7 +47,7 @@ const ENGINE_RE = /useMapInstance|useMapProvider|mapbox-gl|maplibre-gl|window\.(
// the gate and the generator cannot drift. // the gate and the generator cannot drift.
const manifest = JSON.parse(readFileSync(join(TREE, 'manifest.json'), 'utf8')) const manifest = JSON.parse(readFileSync(join(TREE, 'manifest.json'), 'utf8'))
const engineBundles = new Map() const engineBundles = new Map()
function bundleLoadsEngine(bundle) { function oneBundleLoadsEngine(bundle) {
if (!engineBundles.has(bundle)) { if (!engineBundles.has(bundle)) {
let hit = false let hit = false
try { hit = ENGINE_RE.test(readFileSync(join(TREE, bundle, `${bundle}.js`), 'utf8')) } catch { hit = false } try { hit = ENGINE_RE.test(readFileSync(join(TREE, bundle, `${bundle}.js`), 'utf8')) } catch { hit = false }
@ -55,13 +55,27 @@ function bundleLoadsEngine(bundle) {
} }
return engineBundles.get(bundle) return engineBundles.get(bundle)
} }
// Element tag → owning bundle (mirrors generate-tree): a composes entry may name a child by element tag.
const elementToBundle = new Map()
for (const b of manifest.bundles || []) for (const e of (b.elements || [])) elementToBundle.set(e, b.bundle)
// This bundle OR any bundle it composes loads an engine (mirrors generate-tree's builtBundleLoadsEngine):
// catches a composite whose engine lives in a lazily-fetched child (research-map-plus-grid → doxa-research-map).
function bundleLoadsEngine(bundle, composes) {
if (oneBundleLoadsEngine(bundle)) return true
for (const c of composes || []) {
const tag = String(c).split('/').pop()
const child = elementToBundle.get(tag) || String(c).split('/')[0]
if (child && child !== bundle && oneBundleLoadsEngine(child)) return true
}
return false
}
// Expected hint state per profile, and the leaf dirs it renders to (profile page + any instance pages). // Expected hint state per profile, and the leaf dirs it renders to (profile page + any instance pages).
const expect = new Map() // "<bundle>/<profile>" -> boolean shouldHint const expect = new Map() // "<bundle>/<profile>" -> boolean shouldHint
for (const b of manifest.bundles || []) { for (const b of manifest.bundles || []) {
for (const p of b.profiles || []) { for (const p of b.profiles || []) {
const shell = p.type === 'nested-mfe-spa' const shell = p.type === 'nested-mfe-spa'
const composite = p.type === 'nested-elements-mfe' const composite = p.type === 'nested-elements-mfe'
const shouldHint = (!!p.isMap || (composite && bundleLoadsEngine(b.bundle))) && !shell const shouldHint = (!!p.isMap || (composite && bundleLoadsEngine(b.bundle, b.composes))) && !shell
expect.set(`${b.bundle}/${p.profile}`, shouldHint) expect.set(`${b.bundle}/${p.profile}`, shouldHint)
} }
} }

View file

@ -884,14 +884,35 @@ function resourceHints({ isMapLibre, config, apiBaseUrl }) {
return lines.length ? ` <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->\n${lines.join('\n')}\n` : '' return lines.length ? ` <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->\n${lines.join('\n')}\n` : ''
} }
// Does a bundle's BUILT .js reference a map engine? The directly verifiable signal for A9 leaf hints // Does this BUILT bundle .js reference a map engine? Read from public/<tree>/<bundle>/<bundle>.js with the
// (below), read from public/<tree>/<bundle>/<bundle>.js with the same regex the source classifier uses. // same regex the source classifier uses — the directly verifiable A9-leaf-hint signal.
// This catches a composite whose own bundle mounts a map inline even when its profile is isMap:false; function oneBundleLoadsEngine(bundleName) {
// it does not catch one whose engine loads only in a lazily-fetched child bundle (see the hint comment).
function builtBundleLoadsEngine(bundleName) {
try { return MAP_ENGINE_RE.test(readFileSync(join(DEFAULT_ROOT, bundleName, `${bundleName}.js`), 'utf8')) } try { return MAP_ENGINE_RE.test(readFileSync(join(DEFAULT_ROOT, bundleName, `${bundleName}.js`), 'utf8')) }
catch { return false } catch { return false }
} }
// Element tag → owning bundle, built once from the scanned bundles so a composes entry that names a
// child by its ELEMENT tag (stack-demo composes "research-dashboard-map", whose bundle is
// "research-dashboard") resolves to the right bundle, not a non-existent dir.
let ELEMENT_TO_BUNDLE = null
function setElementToBundle(bundles) {
ELEMENT_TO_BUNDLE = new Map()
for (const b of bundles) for (const e of (b.elements || [])) ELEMENT_TO_BUNDLE.set(e, b.bundle)
}
// Does a leaf's PAGE end up loading an engine? True if its own bundle does, OR any bundle it `composes`
// does — the latter catches a composite whose engine lives in a lazily-fetched child (research-map-plus-grid
// composes doxa-research-map: its own bundle has 0 engine refs, the child's has 74). A `composes` entry is
// "<bundle>/<profile>", a bare bundle, or an element TAG — resolved to a bundle via ELEMENT_TO_BUNDLE, then
// the bundle's first segment. Verifiable from built files, so the gate can mirror it. Excludes a composite
// that composes only non-maps (big-picture).
function builtBundleLoadsEngine(bundleName, composes) {
if (oneBundleLoadsEngine(bundleName)) return true
for (const c of composes || []) {
const tag = String(c).split('/').pop()
const child = (ELEMENT_TO_BUNDLE && ELEMENT_TO_BUNDLE.get(tag)) || String(c).split('/')[0]
if (child && child !== bundleName && oneBundleLoadsEngine(child)) return true
}
return false
}
function mapPageHtml(opts) { function mapPageHtml(opts) {
const { title, tag, config, jsSrc, apiBaseUrl, tokenUrlExpr, bakedToken, integrity, shellTokenFree, isMap, scrollPage, isComposite, bundleLoadsEngine } = opts const { title, tag, config, jsSrc, apiBaseUrl, tokenUrlExpr, bakedToken, integrity, shellTokenFree, isMap, scrollPage, isComposite, bundleLoadsEngine } = opts
@ -938,20 +959,17 @@ function mapPageHtml(opts) {
// integrity and crossorigin from library/constants/cdn.js so it cannot drift from the runtime tag. // integrity and crossorigin from library/constants/cdn.js so it cannot drift from the runtime tag.
// WHO GETS HINTS: any page whose OWN bundle loads a map engine — the directly verifiable signal // WHO GETS HINTS: any page whose OWN bundle loads a map engine — the directly verifiable signal
// (`bundleLoadsEngine`, an engine reference in the built .js), NOT the leaf's `isMap` flag. rega's A9 // (`bundleLoadsEngine`, an engine reference in the built .js), NOT the leaf's `isMap` flag. rega's A9
// net run found regions-mfe (isMap:false, but 33 engine refs in its bundle) opening cdn.jsdelivr.net + // net run found regions-mfe (isMap:false, 56 engine refs in its bundle) AND research-map-plus-grid
// (isMap:false, own bundle 0 refs but composes doxa-research-map, 74 refs) opening cdn.jsdelivr.net +
// tiles.openfreemap.org from the top page and getting no hints — my first cut keyed on isMap and missed // tiles.openfreemap.org from the top page and getting no hints — my first cut keyed on isMap and missed
// it, the same trap check:leaf-engine-per-provider's isMap gate fell into. Keying on the built bundle // both, the same trap check:leaf-engine-per-provider's isMap gate fell into. bundleLoadsEngine is true
// hints regions-mfe and excludes the genuinely map-less composites (big-picture, stack-demo: 0 engine // when the leaf's own bundle OR any bundle it composes loads an engine, so both composites are covered;
// refs), with no false positives. A cap-5 nested-mfe-spa shell (shellTokenFree) is excluded even if it // a composite that composes only non-maps (big-picture) stays out. A cap-5 nested-mfe-spa shell
// somehow references an engine: its nested maps render in their OWN iframe leaves, which carry hints. // (shellTokenFree) is excluded even if it references an engine: its maps render in their OWN iframe
// KNOWN GAP: a composite whose engine loads only inside a LAZILY-fetched child bundle (research-map-plus-grid // leaves, which carry hints. A plain non-map leaf (a list/card) can SHARE a bundle with a map leaf
// composes doxa-research-map; its own bundle has 0 engine refs) is not hinted — the top page's own bytes // (connectivity-list rides the cities-internet bundle) — so the `isComposite &&` guard keeps the bundle
// don't name the engine. Recorded in the A9 report; the deeper fix is the upstream isMap classifier, // signal from over-hinting it: the engine only mounts in-page for a real map leaf (drawsMap) or a cap-4
// which mislabels these composites isMap:false (composes-by-tag where the child .vue filename differs). // composite (isComposite) that stacks a map child; a non-map, non-composite leaf never opens it.
// A plain non-map leaf (a list/card) can SHARE a bundle with a map leaf (connectivity-list rides the
// cities-internet bundle, which loads an engine for connectivity-map) — so the bundle signal alone
// over-hints it. The engine only mounts in-page for a real map leaf (drawsMap) or a cap-4 composite
// (isComposite) that stacks a map child; a non-map, non-composite leaf never opens the engine itself.
const drawsMapInPage = (drawsMap || (isComposite && bundleLoadsEngine)) && !shellTokenFree const drawsMapInPage = (drawsMap || (isComposite && bundleLoadsEngine)) && !shellTokenFree
const hintBlock = drawsMapInPage ? resourceHints({ isMapLibre, config, apiBaseUrl }) : '' const hintBlock = drawsMapInPage ? resourceHints({ isMapLibre, config, apiBaseUrl }) : ''
const peerBlock = shellOnly const peerBlock = shellOnly
@ -1261,7 +1279,7 @@ function profileHtml(b, profile, tokenUrlExpr, bakedToken) {
// non-map leaf renders token-free with no map peer; only a real map runs the token ladder. // non-map leaf renders token-free with no map peer; only a real map runs the token ladder.
isMap: profile.isMap, isMap: profile.isMap,
// Whether this bundle's OWN built .js loads a map engine — the A9-leaf-hint signal (mapPageHtml). // Whether this bundle's OWN built .js loads a map engine — the A9-leaf-hint signal (mapPageHtml).
bundleLoadsEngine: builtBundleLoadsEngine(b.bundle), bundleLoadsEngine: builtBundleLoadsEngine(b.bundle, b.composes),
// A cap-4 composite (nested-elements-mfe) is a StackLayout SCROLL-STACK: its leaf must let the // A cap-4 composite (nested-elements-mfe) is a StackLayout SCROLL-STACK: its leaf must let the
// DOCUMENT own the scroll (height:auto, no position:fixed) so the page grows and a reader scrolls // DOCUMENT own the scroll (height:auto, no position:fixed) so the page grows and a reader scrolls
// PAST one section to the next. A fixed-viewport leaf traps a 100vh dashboard and nothing scrolls // PAST one section to the next. A fixed-viewport leaf traps a 100vh dashboard and nothing scrolls
@ -1297,7 +1315,7 @@ function instanceHtml(b, profile, inst, tokenUrlExpr, bakedToken) {
// non-map (token-free, no peer); a preset of a real map still runs the token ladder. // non-map (token-free, no peer); a preset of a real map still runs the token ladder.
isMap: profile.isMap, isMap: profile.isMap,
// Same bundle as the profile page, so the same engine signal (A9-leaf-hint, mapPageHtml). // Same bundle as the profile page, so the same engine signal (A9-leaf-hint, mapPageHtml).
bundleLoadsEngine: builtBundleLoadsEngine(b.bundle), bundleLoadsEngine: builtBundleLoadsEngine(b.bundle, b.composes),
// A preset of a cap-4 composite scroll-stack is still a scroll page (see profileHtml). // A preset of a cap-4 composite scroll-stack is still a scroll page (see profileHtml).
scrollPage: profile.type === 'nested-elements-mfe', scrollPage: profile.type === 'nested-elements-mfe',
}) })
@ -1613,6 +1631,7 @@ function readDestinations() {
} }
function writeManifestAndHtml(root, bundles, tokenUrlExpr, bakedToken) { function writeManifestAndHtml(root, bundles, tokenUrlExpr, bakedToken) {
setElementToBundle(bundles) // for builtBundleLoadsEngine's tag→bundle resolution (A9 leaf hints)
// ── DERIVE THE COMPOSITION TIER FROM THE EDGES, BEFORE ANYTHING READS THE MANIFEST ────────── // ── DERIVE THE COMPOSITION TIER FROM THE EDGES, BEFORE ANYTHING READS THE MANIFEST ──────────
// Every consumer downstream — the gallery's capFor, the studio rail, check:composite-embed-knobs — // Every consumer downstream — the gallery's capFor, the studio rail, check:composite-embed-knobs —
// trusts profile.type. Deriving here means a composite can no longer ship understated because its // trusts profile.type. Deriving here means a composite can no longer ship understated because its

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>all-people-groups · all-people-groups</title> <title>all-people-groups · all-people-groups</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>connectivity-map · cities-internet</title> <title>connectivity-map · cities-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>country-map · country-map</title> <title>country-map · country-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>countries-map · country-posters</title> <title>countries-map · country-posters</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>country-posters-mfe · country-posters</title> <title>country-posters-mfe · country-posters</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>default · dashboard-plus-grid</title> <title>default · dashboard-plus-grid</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>dashboard-plus-grid · dashboard-plus-grid</title> <title>dashboard-plus-grid · dashboard-plus-grid</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>demo-map · demo-map</title> <title>demo-map · demo-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Demo map — MapLibre (token-free) · demo-map</title> <title>Demo map — MapLibre (token-free) · demo-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>research-map · doxa-research-map</title> <title>research-map · doxa-research-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Research map — MapLibre (token-free, no search bar) · doxa-research-map</title> <title>Research map — MapLibre (token-free, no search bar) · doxa-research-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Adoption Map · doxa-simple-map</title> <title>Adoption Map · doxa-simple-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Engagement Map · doxa-simple-map</title> <title>Engagement Map · doxa-simple-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>doxa-simple-map · doxa-simple-map</title> <title>doxa-simple-map · doxa-simple-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Prayer Map · doxa-simple-map</title> <title>Prayer Map · doxa-simple-map</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Gospel x Internet — the board · gospel-internet</title> <title>Gospel x Internet — the board · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>board · gospel-internet</title> <title>board · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>India and China by state and province · gospel-internet</title> <title>India and China by state and province · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Language tree — which languages have the gospel, family by family · gospel-internet</title> <title>Language tree — which languages have the gospel, family by family · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Platforms — which apps would carry a resource there · gospel-internet</title> <title>Platforms — which apps would carry a resource there · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Project 700 — the list as a partner embed · gospel-internet</title> <title>Project 700 — the list as a partner embed · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Nothing in their own language — the front door · gospel-internet</title> <title>Nothing in their own language — the front door · gospel-internet</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>gospel-dashboard · gospel-resources</title> <title>gospel-dashboard · gospel-resources</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>resources-map · gospel-resources</title> <title>resources-map · gospel-resources</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>upg-100-list · my-upg-100-list</title> <title>upg-100-list · my-upg-100-list</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>upg-100-mfe · my-upg-100-list</title> <title>upg-100-mfe · my-upg-100-list</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>pplr-data-maps · pplr-data-maps</title> <title>pplr-data-maps · pplr-data-maps</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>prayer-walk-planner · prayer-walk-planner</title> <title>prayer-walk-planner · prayer-walk-planner</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>region-dashboards · regions-dashboard</title> <title>region-dashboards · regions-dashboard</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>regions-mfe · regions-dashboard</title> <title>regions-mfe · regions-dashboard</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>research-dashboard · research-dashboard</title> <title>research-dashboard · research-dashboard</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,6 +11,11 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>default · research-map-plus-grid</title> <title>default · research-map-plus-grid</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js" integrity="sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp" crossorigin="anonymous" />
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer. <!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf, gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,

View file

@ -11,6 +11,11 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>research-map-plus-grid · research-map-plus-grid</title> <title>research-map-plus-grid · research-map-plus-grid</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js" integrity="sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp" crossorigin="anonymous" />
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer. <!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf, gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,

View file

@ -11,6 +11,11 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>stack-demo · stack-demo</title> <title>stack-demo · stack-demo</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js" integrity="sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp" crossorigin="anonymous" />
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer. <!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf, gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,

View file

@ -11,6 +11,11 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>pair · stack-demo</title> <title>pair · stack-demo</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js" integrity="sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp" crossorigin="anonymous" />
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer. <!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf, gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Mobilize near neighbors · upg-neighbor</title> <title>Mobilize near neighbors · upg-neighbor</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Mobilize near neighbors · upg-neighbor</title> <title>Mobilize near neighbors · upg-neighbor</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>upg-neighbor · upg-neighbor</title> <title>upg-neighbor · upg-neighbor</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Bridge-language campaigns · upg-neighbor</title> <title>Bridge-language campaigns · upg-neighbor</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>Mobilize near neighbors · upg-neighbor</title> <title>Mobilize near neighbors · upg-neighbor</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />

View file

@ -11,7 +11,7 @@
<script>window.MAP_OWNS_PAGE = true;</script> <script>window.MAP_OWNS_PAGE = true;</script>
<title>UPG Neighbors: mobilize · upg-neighbor</title> <title>UPG Neighbors: mobilize · upg-neighbor</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). --> <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
<link rel="preconnect" href="https://pray.doxa.life" crossorigin /> <link rel="preconnect" href="https://pray.doxa.life" crossorigin />