diff --git a/internal/browser-slot.sh b/internal/browser-slot.sh index fc0b8a2e1..6215304ba 100755 --- a/internal/browser-slot.sh +++ b/internal/browser-slot.sh @@ -52,9 +52,16 @@ done # Fast path: any free slot, in a FIXED order so two processes can never take them in opposite # orders. -n means "do not wait": if this slot is busy we move on rather than queue behind it. +# +# ★ `{ exec 9>…; } 2>/dev/null`, NEVER `exec 9>… 2>/dev/null`. A bare exec applies EVERY redirection +# on its line to this shell for good, so the old form sent stderr to /dev/null for the rest of the +# script AND for the gate exec'd below. Measured 2026-09-25: every gate run through this wrapper lost +# its stderr — verify-map-paint exited 1 on two leaves with its FAIL lines (console.error) gone, and +# this script's own "not measuring" message vanished too. The braces scope the 2>/dev/null to the +# open alone; fd 9 still persists, which is the only thing the exec is for. i=1 while [ "$i" -le "$SLOTS" ]; do - exec 9>"$(slot_path "$i")" 2>/dev/null || true + { exec 9>"$(slot_path "$i")"; } 2>/dev/null || true if flock -n 9; then exec "$@" fi @@ -72,7 +79,7 @@ deadline=$(( $(date +%s) + WAIT_S )) while [ "$(date +%s)" -lt "$deadline" ]; do i=1 while [ "$i" -le "$SLOTS" ]; do - exec 9>"$(slot_path "$i")" 2>/dev/null || true + { exec 9>"$(slot_path "$i")"; } 2>/dev/null || true if flock -n 9; then exec "$@"; fi i=$((i + 1)) done diff --git a/internal/check-host-locale-contract.mjs b/internal/check-host-locale-contract.mjs new file mode 100644 index 000000000..92ff881ac --- /dev/null +++ b/internal/check-host-locale-contract.mjs @@ -0,0 +1,151 @@ +#!/usr/bin/env node +/** + * check-host-locale-contract — a HOST that passes profile-config.locale gets that language. + * + * THE CONTRACT. `profile-config.locale` is how a host page (the Nuxt site, a WordPress embed) tells + * an element which language to speak — ProfileLoader.vue reads it and drives the element's i18n. It + * does that through `inject('appI18n', null)`: a bundle whose index.js never `app.provide('appI18n')` + * hands ProfileLoader a null, the watchEffect does nothing, and the host's locale is SILENTLY + * IGNORED — no error, just English. Found in source 2026-09-25 in six bundles; this gate is what keeps + * the durable fix (createAppI18n's install provides appI18n itself) from quietly regressing. + * + * HOW, per leaf of every profile in the manifest (public/doxa-maps///index.html): + * HOST the leaf page with ONE change — "locale":"ar" added to its BASE_CONFIG (the object it passes + * as profile-config). No ?lang=, and the page keeps its baked , so the ONLY + * route to Arabic is the host contract under test. + * REF the same leaf with ?lang=ar (read by detectLocale when the instance is created — a different + * path that does not depend on appI18n being provided). It answers "does this page HAVE + * Arabic chrome to show?", so a page with no translatable text is reported n/a, not failed. + * Arabic-script characters (U+0600–U+06FF) are counted over every text node and the placeholder / + * aria-label / title attributes, through every shadow root, once the count stops changing. + * VERDICT per leaf: HOST ≥ half of REF → ok · otherwise FAIL · REF < MIN → n/a (nothing to judge), + * unless HOST ≥ MIN: then the contract holds and it is ?lang= the page ignores (ok, noted host-only). + * SETTLE: network idle (capped at 20 s), then the count must hold for 3 s. Measured 2026-09-25: a + * shorter settle read the control at 76 in one run and 2054 in the next. + * TODAY (2026-09-25, before upg100's createAppI18n fix): 18 leaves FAIL — every composite among them. + * POSITIVE CONTROL: regions-dashboard/regions-list (provides appI18n) must be ok, or the whole run is + * NOT MEASURED — a harness that cannot see Arabic there cannot say anything about the rest. + * + * USAGE node internal/check-host-locale-contract.mjs [--dir ] [--only bundle/profile,…] + * Serves THIS checkout's public/ on an OS-assigned port, or --dir (another commit's tree, for the + * before/after). Run through internal/browser-slot.sh. + * EXIT 0 every judged leaf enters the host's locale · 1 one does not · 75 not measured. + */ +import { chromium } from 'playwright' +import { spawn } from 'node:child_process' +import { createServer } from 'node:http' +import { readFileSync, existsSync } from 'node:fs' +import { resolve, dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..') +const argv = process.argv.slice(2) +const arg = (k, d) => { const i = argv.indexOf(k); return i >= 0 && argv[i + 1] ? argv[i + 1] : d } +const DIR = resolve(arg('--dir', resolve(ROOT, 'public'))) +const ONLY = arg('--only', '') ? new Set(arg('--only', '').split(',')) : null +const CONTROL = 'regions-dashboard/regions-list' +const MIN = 20 // Arabic characters a page must show under ?lang=ar before it can be judged +const CONCURRENCY = 3 + +const manifestPath = join(DIR, 'doxa-maps', 'manifest.json') +if (!existsSync(manifestPath)) { console.log(`HOST-LOCALE: NOT MEASURED — no ${manifestPath}`); process.exit(75) } +const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) +const leaves = [] +for (const b of manifest.bundles || []) for (const p of b.profiles || []) { + const id = `${b.bundle}/${p.profile}` + if (ONLY && !ONLY.has(id) && id !== CONTROL) continue + if (existsSync(join(DIR, 'doxa-maps', id, 'index.html'))) leaves.push(id) +} +if (!leaves.includes(CONTROL)) { console.log(`HOST-LOCALE: NOT MEASURED — the control ${CONTROL} is not in this tree`); process.exit(75) } + +const port = await new Promise((ok) => { const s = createServer().listen(0, '127.0.0.1', () => { const p = s.address().port; s.close(() => ok(p)) }) }) +const srv = spawn(process.execPath, [resolve(ROOT, 'internal/serve-strict.mjs'), '--port', String(port), '--directory', DIR], { stdio: 'ignore' }) +const stop = () => { try { srv.kill() } catch { /* already gone */ } } +let up = false +for (let i = 0; i < 40 && !up; i++) { await new Promise((r) => setTimeout(r, 150)); up = await fetch(`http://127.0.0.1:${port}/doxa-maps/manifest.json`).then((r) => r.ok).catch(() => false) } +if (!up) { stop(); console.log(`HOST-LOCALE: NOT MEASURED — could not serve ${DIR}`); process.exit(75) } + +const COUNT = `(() => { + let n = 0; const AR = /[\\u0600-\\u06FF]/g + const add = (s) => { if (s) { const m = String(s).match(AR); if (m) n += m.length } } + const walk = (root) => { + const tw = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT) + for (let node = tw.currentNode; node; node = tw.nextNode()) { + if (node.nodeType === 3) { add(node.nodeValue); continue } + if (node.tagName === 'SCRIPT' || node.tagName === 'STYLE') continue + for (const a of ['placeholder', 'aria-label', 'title']) add(node.getAttribute && node.getAttribute(a)) + if (node.shadowRoot) walk(node.shadowRoot) + } + } + walk(document); return n +})()` + +const browser = await chromium.launch({ args: ['--use-gl=swiftshader', '--enable-webgl', '--ignore-gpu-blocklist'] }) +async function measure(id, mode) { + const ctx = await browser.newContext({ viewport: { width: 1280, height: 900 } }) + const page = await ctx.newPage() + const url = `http://127.0.0.1:${port}/doxa-maps/${id}/index.html${mode === 'ref' ? '?lang=ar' : ''}` + let injected = mode === 'ref' + if (mode === 'host') { + await page.route(url, async (route) => { + const res = await route.fetch() + const html = await res.text() + const out = html.replace(/var BASE_CONFIG = \{/, 'var BASE_CONFIG = {"locale":"ar",') + injected = out !== html + await route.fulfill({ response: res, body: out }) + }) + } + try { + await page.goto(url, { waitUntil: 'load', timeout: 45000 }) + // SETTLE. A first version stopped after three equal reads 500 ms apart and read the control at 76 + // Arabic characters in one run and 2054 in another: regions-list's feed takes over a second, and + // the page sat still (in English placeholders) until it arrived. So: wait for the network to go + // quiet (capped — a map streams tiles for ever), then require the count to hold for 3 s. + await page.waitForLoadState('networkidle', { timeout: 20000 }).catch(() => {}) + let last = -1, same = 0, n = 0 + for (let i = 0; i < 60 && same < 6; i++) { + await page.waitForTimeout(500) + n = await page.evaluate(COUNT).catch(() => 0) + same = n === last ? same + 1 : 0; last = n + } + return { n, injected } + } catch (e) { return { n: null, injected, error: String(e.message || e).split('\n')[0] } } + finally { await ctx.close() } +} + +const rows = [] +async function judge(id) { + const host = await measure(id, 'host'), ref = await measure(id, 'ref') + let verdict, why = host.error || ref.error || (!host.injected ? 'no BASE_CONFIG in the page' : '') + if (!host.injected) verdict = 'unmeasured' // the page has no BASE_CONFIG to set + else if (host.n === null || ref.n === null) verdict = 'unmeasured' + // ?lang=ar showed no Arabic but the host path did: the page is translatable and the CONTRACT holds; + // it is ?lang= that page ignores — a different defect, reported, not failed here. + else if (ref.n < MIN && host.n >= MIN) { verdict = 'ok'; why = 'host-only: this page ignores ?lang=' } + else if (ref.n < MIN) verdict = 'n/a' + else verdict = host.n >= ref.n / 2 ? 'ok' : 'FAIL' + rows.push({ id, host: host.n, ref: ref.n, verdict, why }) +} +// The control runs ALONE first, so it is never starved by three maps loading beside it. +await judge(CONTROL) +const queue = leaves.filter((l) => l !== CONTROL) +await Promise.all(Array.from({ length: CONCURRENCY }, async () => { while (queue.length) await judge(queue.shift()) })) +await browser.close(); stop() + +rows.sort((a, b) => (a.id === CONTROL ? -1 : b.id === CONTROL ? 1 : a.id.localeCompare(b.id))) +console.log(`HOST-LOCALE: profile-config.locale="ar" (HOST) vs ?lang=ar (REF), Arabic-script characters drawn, ${DIR}`) +for (const r of rows) console.log(` ${r.verdict.padEnd(10)} ${r.id.padEnd(48)} host ${String(r.host ?? '—').padStart(5)} ref ${String(r.ref ?? '—').padStart(5)}${r.id === CONTROL ? ' ← positive control' : ''}${r.why ? ' ' + r.why : ''}`) + +const control = rows.find((r) => r.id === CONTROL) +if (!control || control.verdict !== 'ok') { + console.log(`HOST-LOCALE: NOT MEASURED — the positive control ${CONTROL} did not enter Arabic (host ${control && control.host}, ref ${control && control.ref}); this harness cannot judge the rest.`) + process.exit(75) +} +const fails = rows.filter((r) => r.verdict === 'FAIL'), un = rows.filter((r) => r.verdict === 'unmeasured'), na = rows.filter((r) => r.verdict === 'n/a') +if (fails.length) { + console.log(`HOST-LOCALE: FAIL — ${fails.length} leaf/leaves ignore the host's profile-config.locale although they can speak Arabic: ${fails.map((r) => r.id).join(', ')}`) + console.log(' The usual cause: the bundle never provides appI18n, so ProfileLoader\'s inject(\'appI18n\') is null.') + process.exit(1) +} +if (un.length) { console.log(`HOST-LOCALE: NOT MEASURED — ${un.length} leaf/leaves could not be read: ${un.map((r) => r.id).join(', ')}`); process.exit(75) } +console.log(`HOST-LOCALE: PASS — ${rows.length - na.length} leaves enter the host's locale; ${na.length} have no Arabic chrome to judge (n/a).`) diff --git a/internal/check-staging-forwards-lang.mjs b/internal/check-staging-forwards-lang.mjs new file mode 100644 index 000000000..6995becac --- /dev/null +++ b/internal/check-staging-forwards-lang.mjs @@ -0,0 +1,76 @@ +#!/usr/bin/env node +/** + * check-staging-forwards-lang — a staging page opened at ?lang=ar embeds its leaves in Arabic. + * + * THE BUG (found by gospel 2026-09-25). The tree's staging page (public/doxa-maps/index.html, built + * from internal/staging-forge.js) built each embedded leaf's URL as withProvider(withTk(href)) — the + * token and the engine rode along, the language did not. The leaf pages bake , so a + * maintainer or reviewer reading the tree at ?lang=ar saw every map in English, and the leaf was + * right to do so: nothing told it otherwise. + * + * WHAT IS ASSERTED, on the served tree: + * 1. /doxa-maps/index.html?lang=ar, gospel-resources/resources-map selected: the stage iframe's src + * AND the "open ↗" link both carry lang=ar; + * 2. inside that iframe the Gospel map's mode toggle reads gospel.mode.gap in Arabic ("الفجوة", + * from library/i18n/locales/ar/gospel.json) — the language actually arrived, not just the param. + * + * USAGE node internal/check-staging-forwards-lang.mjs [--dir ] (through browser-slot.sh) + * EXIT 0 forwarded and rendered · 1 not · 75 not measured. + * NEGATIVE-TESTED 2026-09-25: on the tree built before withLang() existed it FAILS at step 1. + */ +import { chromium } from 'playwright' +import { spawn } from 'node:child_process' +import { createServer } from 'node:http' +import { readFileSync } from 'node:fs' +import { resolve, dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..') +const argv = process.argv.slice(2) +const arg = (k, d) => { const i = argv.indexOf(k); return i >= 0 && argv[i + 1] ? argv[i + 1] : d } +const DIR = resolve(arg('--dir', resolve(ROOT, 'public'))) +const KEY = 'gospel-resources/resources-map' +const GAP_AR = JSON.parse(readFileSync(resolve(ROOT, 'library/i18n/locales/ar/gospel.json'), 'utf8')).mode.gap + +const port = await new Promise((ok) => { const s = createServer().listen(0, '127.0.0.1', () => { const p = s.address().port; s.close(() => ok(p)) }) }) +const srv = spawn(process.execPath, [resolve(ROOT, 'internal/serve-strict.mjs'), '--port', String(port), '--directory', DIR], { stdio: 'ignore' }) +const stop = () => { try { srv.kill() } catch { /* already gone */ } } +let up = false +for (let i = 0; i < 40 && !up; i++) { await new Promise((r) => setTimeout(r, 150)); up = await fetch(`http://127.0.0.1:${port}/doxa-maps/index.html`).then((r) => r.ok).catch(() => false) } +if (!up) { stop(); console.log(`STAGING-LANG: NOT MEASURED — could not serve ${DIR}`); process.exit(75) } + +const browser = await chromium.launch({ args: ['--use-gl=swiftshader', '--enable-webgl', '--ignore-gpu-blocklist'] }) +const done = async (code, msg) => { console.log(msg); await browser.close(); stop(); process.exit(code) } +const page = await browser.newPage({ viewport: { width: 1400, height: 900 } }) +await page.goto(`http://127.0.0.1:${port}/doxa-maps/index.html?lang=ar`, { waitUntil: 'load' }) +const node = page.locator(`.node[data-key="${KEY}"]`) +if (!(await node.count())) await done(75, `STAGING-LANG: NOT MEASURED — no ${KEY} node on the staging page`) +await node.first().click() +await page.waitForSelector('#stage iframe', { timeout: 15000 }).catch(() => {}) +const src = await page.locator('#stage iframe').first().getAttribute('src').catch(() => null) +const pop = await page.locator('#stage a.popout').first().getAttribute('href').catch(() => null) +if (!src) await done(75, 'STAGING-LANG: NOT MEASURED — the stage never rendered an iframe') +const carries = (u) => new URL(u, 'http://x/').searchParams.get('lang') === 'ar' +console.log(` iframe src ${carries(src) ? 'carries lang=ar' : 'NO lang'} ${src}`) +console.log(` open ↗ ${pop && carries(pop) ? 'carries lang=ar' : 'NO lang'} ${pop}`) +if (!carries(src) || !pop || !carries(pop)) await done(1, 'STAGING-LANG: FAIL — the staging page does not forward ?lang= to the leaf it embeds.') + +const frame = page.frameLocator('#stage iframe') +let label = null +for (let i = 0; i < 60 && label === null; i++) { + await page.waitForTimeout(500) + label = await frame.locator('body').evaluate(() => { + // the toggle lives inside the element's shadow root (possibly nested) — walk every root + const f = (r) => { + const b = [...r.querySelectorAll('button.gm-mode')] + if (b.length) return b.map((x) => x.textContent.trim()) + for (const e of r.querySelectorAll('*')) if (e.shadowRoot) { const m = f(e.shadowRoot); if (m) return m } + return null + } + return f(document) + }).catch(() => null) +} +if (!label) await done(75, 'STAGING-LANG: NOT MEASURED — the Gospel map\'s mode toggle never rendered in the iframe') +console.log(` mode toggle ${JSON.stringify(label)} (expect "${GAP_AR}")`) +if (!label.includes(GAP_AR)) await done(1, `STAGING-LANG: FAIL — lang=ar reached the iframe but the Gospel map did not render gospel.mode.gap in Arabic.`) +await done(0, 'STAGING-LANG: PASS — ?lang=ar is forwarded to the embedded leaf and the Gospel map renders in Arabic.') diff --git a/internal/staging-forge.js b/internal/staging-forge.js index f259675de..aef901863 100644 --- a/internal/staging-forge.js +++ b/internal/staging-forge.js @@ -49,6 +49,15 @@ function withProvider(href) { const p = typeof location !== 'undefined' ? new URLSearchParams(location.search).get('provider') : null return p ? href + (href.includes('?') ? '&' : '?') + 'provider=' + encodeURIComponent(p) : href } +// Carry the page's ?lang= (or ?locale=) into the embedded leaf the same way. The leaf pages bake +// , so without this a staging page opened at ?lang=ar embedded every leaf in +// English — measured: 0 of 1 iframes carried it. Only forwarded when present; the leaf's own +// detectLocale() still decides what it supports. +function withLang(href) { + const q = typeof location !== 'undefined' ? new URLSearchParams(location.search) : null + const l = q && (q.get('lang') || q.get('locale')) + return l ? href + (href.includes('?') ? '&' : '?') + 'lang=' + encodeURIComponent(l) : href +} // ── Load the semantic tree (inline-first; fetch = dev fallback) ────────────── async function loadTree() { @@ -151,10 +160,10 @@ function renderStage() {
<${esc(nd.element || nd.label)}> ${esc(nd.kind)} - open ↗ + open ↗
-
` +
` // COPY EMBED — the partner handoff. The snippet is built AT CLICK TIME from // location.href, so it always carries the FULL URL of whatever host serves // this tree (localhost, doxa.life/embed/doxa-maps-build/…, any CDN) — embeds diff --git a/internal/staging-reference-v2.html b/internal/staging-reference-v2.html index 5585b71b1..f3daf0c6b 100644 --- a/internal/staging-reference-v2.html +++ b/internal/staging-reference-v2.html @@ -84,6 +84,9 @@ window.MANIFEST = { const tk = new URLSearchParams(location.search).get('tk') || ''; const withTk = u => u ? (tk ? u + (u.includes('?')?'&':'?') + 'tk=' + encodeURIComponent(tk) : u) : ''; +/* Carry ?lang= / ?locale= into the lazy leaf iframe too — leaves bake . */ +const qlang = new URLSearchParams(location.search).get('lang') || new URLSearchParams(location.search).get('locale') || ''; +const withLang = u => u ? (qlang ? u + (u.includes('?')?'&':'?') + 'lang=' + encodeURIComponent(qlang) : u) : ''; const el = (tag, cls, html) => { const n=document.createElement(tag); if(cls)n.className=cls; if(html!=null)n.innerHTML=html; return n; }; /* ONE node renderer used for all three kinds — the data/presentation split. */ @@ -98,7 +101,7 @@ function node(kind, name, hint, id, frameUrl, children){ if(frameUrl){ const f = el('div','frame'); const ifr = el('iframe'); ifr.loading='lazy'; f.append(ifr); d.append(f); - d.addEventListener('toggle', () => { if(d.open && !ifr.src) ifr.src = withTk(frameUrl); }); + d.addEventListener('toggle', () => { if(d.open && !ifr.src) ifr.src = withLang(withTk(frameUrl)); }); } (children||[]).forEach(c => d.append(c)); return d; diff --git a/internal/verify-map-paint.mjs b/internal/verify-map-paint.mjs index f13a39ee4..b411d7655 100644 --- a/internal/verify-map-paint.mjs +++ b/internal/verify-map-paint.mjs @@ -87,6 +87,9 @@ const DEFAULT_LEAVES = [ 'my-upg-100-list/upg-100-list/index.html', 'my-upg-100-list/upg-100-mfe/index.html', 'research-dashboard/research-dashboard/index.html', + // added 2026-09-25 (the regions map was never painted by this gate), verified PASS local and live + 'regions-dashboard/region-dashboards/index.html', + 'regions-dashboard/regions-mfe/index.html', ] const urls = process.argv.slice(2).length diff --git a/package.json b/package.json index 9a43b5b6d..e28ce5072 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "tree": "node internal/generate-tree.mjs", "gallery": "node internal/generate-gallery.mjs", "check:drop": "node internal/drop-portability-check.mjs", + "check:host-locale-contract": "node internal/check-host-locale-contract.mjs", "check:parse": "node internal/inline-parse-check.mjs", "verify": "node library/scripts/research/verify-all.mjs", "verify:full": "node library/scripts/research/verify-all.mjs --full", @@ -168,6 +169,7 @@ "check:coverage-consistent": "node internal/check-gospel-coverage-consistent.mjs", "check:coverage-consistent:poison": "node internal/check-gospel-coverage-consistent.mjs --poison", "check:click-sheet": "node plugin-designs/gospel-resources/scripts/verify-gospel-click-sheet.mjs", + "check:staging-lang": "node internal/check-staging-forwards-lang.mjs", "check:stale-sweep-claim": "node internal/check-no-stale-sweep-claim.mjs # a caveat that has stopped being true is a wrong number. The gospel surfaces carry a paragraph saying which pools were searched; while the GRN sweep ran they truthfully said part of it was unread, the sweep finished, and the sentence stayed for four more commits. The DATA decides here: undecided gap codes mean the claim is allowed, all-decided means it must go, so it re-arms itself for the next slow pool. Does NOT flag a claim rendered under a v-if on the pending count — that form expires on its own. Self-test: `the check:stale-sweep-claim:poison entry`. Static, sub-second.", "check:surfaces-read-the-tier": "node internal/check-surfaces-read-the-tier.mjs", "check:surfaces-read-the-tier:poison": "node internal/check-surfaces-read-the-tier.mjs --poison", @@ -229,6 +231,7 @@ "check:facet-changes-map:self-test": "reverts the fix IN THE LIVE PAGE and requires the gate to FAIL. SELF_TEST_MODE=colour (default, isolates the colour assertion — the reported bug) | props | both | frozen (blocks the source update, isolating the set assertion). All four modes verified caught.", "check:heartbeat": "the HEARTBEAT ZONE threshold (the choropleth's top bin) must come from config AND the shipped config must still render today's ramp. Two sides: (B) a configured threshold must MOVE the edge — catches re-hard-coding; (A2) dashboard.config.js's own map.* must still resolve to 5/20/60/150/Infinity — catches the shipped default silently changing. A2 was MISSING at first and heartbeatThreshold:999 shipped past this gate printing 'default ramp unchanged'. A grep for '150' cannot do either job: it false-positives on the legitimate default and false-negatives on a re-hard-coding at 200. run check:heartbeat:self-test for the NEGATIVE tests (3 cases).", "check:heartbeat:self-test": "THREE regression cases, each required to fire ITS OWN assertion: [literal] resolver replaced by the old hard-coded array -> B; [shipped-default] dashboard.config.js heartbeatThreshold changed -> A2; [shipped-mode] heartbeatMode flipped to quantile -> A2. Poisons IN MEMORY, never the file. Testing that the FEATURE works is not testing that the REGRESSION is caught — this gate shipped with only the first and missed the second.", + "check:host-locale-contract": "a HOST's profile-config.locale reaches every leaf: each leaf page is loaded with ONLY \"locale\":\"ar\" added to its profile-config (no ?lang=, the page keeps lang=\"en\") and must draw at least half the Arabic text the same page draws at ?lang=ar. regions-dashboard/regions-list is the positive control (NOT MEASURED if it does not enter Arabic). Guards ProfileLoader's inject('appI18n'): a bundle that never provides appI18n silently ignores the host. --dir for a before/after, --only a/b,c/d to narrow. Through browser-slot.sh.", "check:provider-switch": "the provider switch must actually SWITCH: counts requests BY HOST (not window globals, which stay defined after a swap) and asserts the maplibre run stays within the leaf HTML's own declared api.mapbox.com preloads. Defaults to the upg-100 leaf; pass a URL or set BASE_URL for another. CONDITIONAL: SKIPs when nothing is served.", "check:legend-export-reachable": "the Export affordance must be reachable at BOTH widths. Selects a leaf row first (the control is gated on selectedNode) and opens the mobile sheet first (it starts closed). Asserts a REAL BOX, not CSS visibility — on mobile the elements report visibility:visible at 0x0. PASSES at both widths since the mobile sheet was given :export-enabled and :tabs. SKIPs when nothing is served.", "check:poster-card-fits": "a poster card's print-options row must stay inside its own card. Reported by the repo agent off a 1440px screenshot: 27/27 cards overflowing by 110px, 36 neighbour intrusions. .pfs already had width:82%, so SOURCE READING SAID IT WAS FINE — flex items default to min-width:auto and refuse to shrink. Asserts BOTH no-overlap AND that the controls keep a usable box, because a row whose buttons collapsed to nothing would also \"not overflow\". Sweeps 390/768/1024/1440/1920px and asserts the row sits BELOW the preview too — measuring only left/right edges is how it passed a driver-visible regression. CARD_FIT_WIDTH overrides the list. SKIPs when nothing is served.", @@ -281,6 +284,7 @@ "check:snapshot-guard": "every gospel-resources catalogue fetcher must write through scripts/_snapshot-guard.mjs, which refuses a write that loses more than a tenth of the previous snapshot. Written after a rate-limited FCBH run silently replaced 1,666 video scopes with 1,103. Static, sub-second. Self-test: `bun run check:snapshot-guard:poison` injects a raw write and the check must fail on it.", "check:coverage-consistent": "the gospel-resources surfaces must agree: no resource on an ISO RESERVED code (und/mul/mis/zxx), every resourced code NAMED, table reach recounted off the pins, no invented URL, tiers reconcile. Static, sub-second. Self-test: `bun run check:coverage-consistent:poison`, all 12 clauses (A-L) must fail. Clause L is the one that is not about consistency: it fails when the link-verification record goes stale, because 'link checked' is a claim about the present tense. Written after the same drift defect was found by hand three times.", "check:click-sheet": "the COUNTRY-CLICK SHEET without a GPU: every country in the roster resolves to >=1 pin, every link the sheet would render is absolute, and has_audio stays the STRING \"unknown\" where the pool was never checked (collapsing it to false would read as \"no audio exists\"). It had been CRASHING on a path deleted when data moved out of public/, and its two inputs were a private by-country copy and the curated 2,106-row subset the sheet stopped reading — so it was unrunnable AND aimed at files the surface no longer uses. Joins by ISO3 now, not by country-name substring. Carries its own 4-case self-test. Static, sub-second.", + "check:staging-lang": "the tree's staging page (public/doxa-maps/index.html, from internal/staging-forge.js) opened at ?lang=ar forwards lang=ar to the leaf it embeds (iframe src AND the open link), and the Gospel map inside renders gospel.mode.gap in Arabic. Negative-tested: the tree built before withLang() FAILS. --dir . Through browser-slot.sh.", "check:stale-sweep-claim": "a caveat that has stopped being true is a wrong number. The gospel surfaces carry a paragraph saying which pools were searched; while the GRN sweep ran they truthfully said part of it was unread, the sweep finished, and the sentence stayed for four more commits. The DATA decides here: undecided gap codes mean the claim is allowed, all-decided means it must go, so it re-arms itself for the next slow pool. Does NOT flag a claim rendered under a v-if on the pending count — that form expires on its own. Self-test: `--poison`. Static, sub-second.", "check:surfaces-read-the-tier": "a surface may READ the tier the pin index computed, never re-derive 'this group has nothing' from the raw resource fields. That hand-rolled field list went stale every time a source was added: 7 codes drawn as having nothing while the map showed them a link, then 28 when Scripture Earth landed. Static, sub-second. Self-test: `bun run check:surfaces-read-the-tier:poison` re-injects the old formula into every surface and each must be caught.", "check:link-rot": "re-tests a stratified sample of links we already VERIFIED, because nothing else ever re-tests one: a publisher can retire a page and the map keeps offering it, still labelled 'link checked'. THREE BANDS, each measured rather than assumed, each with its controls in band every run: plain STATUS where a status is evidence (jesusfilm.org among them — it does 404 on the /watch/jesus/ shape the map ships, and the old exclusion was inherited from the retired ?languageId= URL); API-MAPPED for live.bible.is, whose page answers 200 for any fileset while /api/bibles/ answers 404; and REDIRECT-LANDING for fivefish.org, where a published code lands on its numbered language page and an unknown one is swept to /regions. If a control misbehaves it reports PROVED NOTHING rather than a pass. Only knowgod.com is left out — byte-identical page for any URL; the verifier proves those through Cru's API. ~3 minutes, network.", diff --git a/plugin-designs/doxa-vision-card/doxa-vision-card.vue b/plugin-designs/doxa-vision-card/doxa-vision-card.vue index 43e9ff0cf..c8f0ce654 100644 --- a/plugin-designs/doxa-vision-card/doxa-vision-card.vue +++ b/plugin-designs/doxa-vision-card/doxa-vision-card.vue @@ -43,8 +43,14 @@ const config = computed(() => { try { return JSON.parse(props.profileConfig) || {} } catch { return {} } }) +// The same ladder as the rest of the library (i18n/index.js detectLocale): the host's profile-config +// first, then ?lang= / ?locale= — without it the card was unreachable in any other language on the +// built tree, whose leaf pages all bake — then the page's lang. +const urlLang = (() => { + try { const q = new URLSearchParams(window.location.search); return q.get('lang') || q.get('locale') || '' } catch { return '' } +})() const locale = computed(() => { - const raw = String(config.value.locale || (typeof document !== 'undefined' && document.documentElement.lang) || 'en') + const raw = String(config.value.locale || urlLang || (typeof document !== 'undefined' && document.documentElement.lang) || 'en') const base = raw.split('-')[0].toLowerCase() return STRINGS[raw] ? raw : (STRINGS[base] ? base : 'en') }) diff --git a/public/doxa-maps/doxa-maps-spa/manifest.json b/public/doxa-maps/doxa-maps-spa/manifest.json index b18bf92c5..d1ebcb0b4 100644 --- a/public/doxa-maps/doxa-maps-spa/manifest.json +++ b/public/doxa-maps/doxa-maps-spa/manifest.json @@ -493,7 +493,7 @@ "bundle": "doxa-vision-card", "scriptUrl": "./doxa-vision-card/doxa-vision-card.js", "output": "doxa-maps/doxa-vision-card/doxa-vision-card.js", - "integrity": "sha384-/oOxfonW4sXJgaXVJgZOZb1R+3gbePfTP1Wh2irBX2KnDCsKjv1YUnzbyheKJzZ9", + "integrity": "sha384-ga7XpXFyxJDd8VrtMejKuLRx8YFuxJoT+DXkcpehJXptsM4phiKamyTBYJpudSSj", "elements": [ "doxa-vision-card" ], @@ -509,7 +509,7 @@ "scriptUrl": "./doxa-vision-card/doxa-vision-card.js", "embed": { "iframe": "", - "script": "\n\n" + "script": "\n\n" }, "instances": [ { diff --git a/public/doxa-maps/doxa-vision-card/doxa-vision-card.js b/public/doxa-maps/doxa-vision-card/doxa-vision-card.js index 61b98602a..4e9d82163 100644 --- a/public/doxa-maps/doxa-vision-card/doxa-vision-card.js +++ b/public/doxa-maps/doxa-vision-card/doxa-vision-card.js @@ -2,19 +2,19 @@ * @vue/shared v3.5.42 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function _n(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const V={},tt=[],be=()=>{},os=()=>!1,Ft=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Rt=e=>e.startsWith("onUpdate:"),z=Object.assign,mn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},nr=Object.prototype.hasOwnProperty,F=(e,t)=>nr.call(e,t),S=Array.isArray,je=e=>at(e)==="[object Map]",kt=e=>at(e)==="[object Set]",rs=e=>at(e)==="[object Date]",T=e=>typeof e=="function",K=e=>typeof e=="string",_e=e=>typeof e=="symbol",j=e=>e!==null&&typeof e=="object",is=e=>(j(e)||T(e))&&T(e.then)&&T(e.catch),ls=Object.prototype.toString,at=e=>ls.call(e),sr=e=>at(e).slice(8,-1),jt=e=>at(e)==="[object Object]",$n=e=>K(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ut=_n(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bt=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},or=/-\w/g,ie=Bt(e=>e.replace(or,t=>t.slice(1).toUpperCase())),rr=/\B([A-Z])/g,ue=Bt(e=>e.replace(rr,"-$1").toLowerCase()),cs=Bt(e=>e.charAt(0).toUpperCase()+e.slice(1)),xn=Bt(e=>e?`on${cs(e)}`:""),Ee=(e,t)=>!Object.is(e,t),vn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ir=e=>{const t=parseFloat(e);return isNaN(t)?e:t},us=e=>{const t=K(e)?Number(e):NaN;return isNaN(t)?e:t};let fs;const Ut=()=>fs||(fs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ft(e){if(S(e)){const t={};for(let n=0;n{if(n){const s=n.split(cr);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Vt(e){let t="";if(K(e))t=e;else if(S(e))for(let n=0;n!!(e&&e.__v_isRef===!0),fe=e=>K(e)?e:e==null?"":S(e)||j(e)&&(e.toString===ls||!T(e.toString))?ps(e)?fe(e.value):JSON.stringify(e,gs,2):String(e),gs=(e,t)=>ps(t)?gs(e,t.value):je(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],r)=>(n[yn(s,r)+" =>"]=o,n),{})}:kt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>yn(n))}:_e(t)?yn(t):j(t)&&!S(t)&&!jt(t)?String(t):t,yn=(e,t="")=>{var n;return _e(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +**/function _n(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const U={},tt=[],be=()=>{},os=()=>!1,Ft=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Rt=e=>e.startsWith("onUpdate:"),G=Object.assign,mn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},nr=Object.prototype.hasOwnProperty,I=(e,t)=>nr.call(e,t),S=Array.isArray,je=e=>at(e)==="[object Map]",kt=e=>at(e)==="[object Set]",rs=e=>at(e)==="[object Date]",E=e=>typeof e=="function",W=e=>typeof e=="string",_e=e=>typeof e=="symbol",k=e=>e!==null&&typeof e=="object",is=e=>(k(e)||E(e))&&E(e.then)&&E(e.catch),ls=Object.prototype.toString,at=e=>ls.call(e),sr=e=>at(e).slice(8,-1),jt=e=>at(e)==="[object Object]",$n=e=>W(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ut=_n(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bt=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},or=/-\w/g,ie=Bt(e=>e.replace(or,t=>t.slice(1).toUpperCase())),rr=/\B([A-Z])/g,ue=Bt(e=>e.replace(rr,"-$1").toLowerCase()),cs=Bt(e=>e.charAt(0).toUpperCase()+e.slice(1)),xn=Bt(e=>e?`on${cs(e)}`:""),Ee=(e,t)=>!Object.is(e,t),vn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ir=e=>{const t=parseFloat(e);return isNaN(t)?e:t},us=e=>{const t=W(e)?Number(e):NaN;return isNaN(t)?e:t};let fs;const Ut=()=>fs||(fs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ft(e){if(S(e)){const t={};for(let n=0;n{if(n){const s=n.split(cr);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Vt(e){let t="";if(W(e))t=e;else if(S(e))for(let n=0;n!!(e&&e.__v_isRef===!0),fe=e=>W(e)?e:e==null?"":S(e)||k(e)&&(e.toString===ls||!E(e.toString))?ps(e)?fe(e.value):JSON.stringify(e,gs,2):String(e),gs=(e,t)=>ps(t)?gs(e,t.value):je(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],r)=>(n[yn(s,r)+" =>"]=o,n),{})}:kt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>yn(n))}:_e(t)?yn(t):k(t)&&!S(t)&&!jt(t)?String(t):t,yn=(e,t="")=>{var n;return _e(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** * @vue/reactivity v3.5.42 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Z;class hr{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&&Z&&(Z.active?(this.parent=Z,this.index=(Z.scopes||(Z.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Z===this)Z=this.prevScope;else{let t=Z;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 n,s;for(n=0,s=this.effects.length;n0)return;if(ht){let t=ht;for(ht=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;dt;){let t=dt;for(dt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function $s(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function xs(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),Cn(s),gr(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function Nn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(vs(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function vs(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===pt)||(e.globalVersion=pt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Nn(e))))return;e.flags|=2;const t=e.dep,n=H,s=de;H=e,de=!0;try{$s(e);const o=e.fn(e._value);(t.version===0||Ee(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{H=n,de=s,xs(e),e.flags&=-3}}function Cn(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Cn(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function gr(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let de=!0;const ys=[];function me(){ys.push(de),de=!1}function $e(){const e=ys.pop();de=e===void 0?!0:e}function As(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=H;H=void 0;try{t()}finally{H=n}}}let pt=0;class br{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ls{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(!H||!de||H===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==H)n=this.activeLink=new br(H,this),H.deps?(n.prevDep=H.depsTail,H.depsTail.nextDep=n,H.depsTail=n):H.deps=H.depsTail=n,ws(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=H.depsTail,n.nextDep=void 0,H.depsTail.nextDep=n,H.depsTail=n,H.deps===n&&(H.deps=s)}return n}trigger(t){this.version++,pt++,this.notify(t)}notify(t){Ln();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{wn()}}}function ws(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)ws(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const On=new WeakMap,Ke=Symbol(""),Sn=Symbol(""),gt=Symbol("");function ee(e,t,n){if(de&&H){let s=On.get(e);s||On.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new Ls),o.map=s,o.key=n),o.track()}}function Te(e,t,n,s,o,r){const i=On.get(e);if(!i){pt++;return}const l=a=>{a&&a.trigger()};if(Ln(),t==="clear")i.forEach(l);else{const a=S(e),d=a&&$n(n);if(a&&n==="length"){const f=Number(s);i.forEach((p,A)=>{(A==="length"||A===gt||!_e(A)&&A>=f)&&l(p)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),d&&l(i.get(gt)),t){case"add":a?d&&l(i.get("length")):(l(i.get(Ke)),je(e)&&l(i.get(Sn)));break;case"delete":a||(l(i.get(Ke)),je(e)&&l(i.get(Sn)));break;case"set":je(e)&&l(i.get(Ke));break}}wn()}function nt(e){const t=R(e);return t===e?t:(ee(t,"iterate",gt),he(e)?t:t.map(Ie))}function Xt(e){return ee(e=R(e),"iterate",gt),e}function xe(e,t){return Be(e)?st(We(e)?Ie(t):t):Ie(t)}const _r={__proto__:null,[Symbol.iterator](){return Dn(this,Symbol.iterator,e=>xe(this,e))},concat(...e){return nt(this).concat(...e.map(t=>S(t)?nt(t):t))},entries(){return Dn(this,"entries",e=>(e[1]=xe(this,e[1]),e))},every(e,t){return Pe(this,"every",e,t,void 0,arguments)},filter(e,t){return Pe(this,"filter",e,t,n=>n.map(s=>xe(this,s)),arguments)},find(e,t){return Pe(this,"find",e,t,n=>xe(this,n),arguments)},findIndex(e,t){return Pe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Pe(this,"findLast",e,t,n=>xe(this,n),arguments)},findLastIndex(e,t){return Pe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Pe(this,"forEach",e,t,void 0,arguments)},includes(...e){return Mn(this,"includes",e)},indexOf(...e){return Mn(this,"indexOf",e)},join(e){return nt(this).join(e)},lastIndexOf(...e){return Mn(this,"lastIndexOf",e)},map(e,t){return Pe(this,"map",e,t,void 0,arguments)},pop(){return bt(this,"pop")},push(...e){return bt(this,"push",e)},reduce(e,...t){return Ns(this,"reduce",e,t)},reduceRight(e,...t){return Ns(this,"reduceRight",e,t)},shift(){return bt(this,"shift")},some(e,t){return Pe(this,"some",e,t,void 0,arguments)},splice(...e){return bt(this,"splice",e)},toReversed(){return nt(this).toReversed()},toSorted(e){return nt(this).toSorted(e)},toSpliced(...e){return nt(this).toSpliced(...e)},unshift(...e){return bt(this,"unshift",e)},values(){return Dn(this,"values",e=>xe(this,e))}};function Dn(e,t,n){const s=Xt(e),o=s[t]();return s!==e&&!he(e)&&(o._next=o.next,o.next=()=>{const r=o._next();return r.done||(r.value=n(r.value)),r}),o}const mr=Array.prototype;function Pe(e,t,n,s,o,r){const i=Xt(e),l=i!==e&&!he(e),a=i[t];if(a!==mr[t]){const p=a.apply(e,r);return l?Ie(p):p}let d=n;i!==e&&(l?d=function(p,A){return n.call(this,xe(e,p),A,e)}:n.length>2&&(d=function(p,A){return n.call(this,p,A,e)}));const f=a.call(i,d,s);return l&&o?o(f):f}function Ns(e,t,n,s){const o=Xt(e),r=o!==e&&!he(e);let i=n,l=!1;o!==e&&(r?(l=s.length===0,i=function(d,f,p){return l&&(l=!1,d=xe(e,d)),n.call(this,d,xe(e,f),p,e)}):n.length>3&&(i=function(d,f,p){return n.call(this,d,f,p,e)}));const a=o[t](i,...s);return l?xe(e,a):a}function Mn(e,t,n){const s=R(e);ee(s,"iterate",gt);const o=s[t](...n);return(o===-1||o===!1)&&In(n[0])?(n[0]=R(n[0]),s[t](...n)):o}function bt(e,t,n=[]){me(),Ln();const s=R(e)[t].apply(e,n);return wn(),$e(),s}const $r=_n("__proto__,__v_isRef,__isVue"),Cs=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(_e));function xr(e){_e(e)||(e=String(e));const t=R(this);return ee(t,"has",e),t.hasOwnProperty(e)}class Os{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return r;if(n==="__v_raw")return s===(o?r?Ps:Ts:r?Es:Ms).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=S(t);if(!o){let a;if(i&&(a=_r[n]))return a;if(n==="hasOwnProperty")return xr}const l=Reflect.get(t,n,te(t)?t:s);if((_e(n)?Cs.has(n):$r(n))||(o||ee(t,"get",n),r))return l;if(te(l)){const a=i&&$n(n)?l:l.value;return o&&j(a)?Pn(a):a}return j(l)?o?Pn(l):Tn(l):l}}class Ss extends Os{constructor(t=!1){super(!1,t)}set(t,n,s,o){let r=t[n];const i=S(t)&&$n(n);if(!this._isShallow){const d=Be(r);if(!he(s)&&!Be(s)&&(r=R(r),s=R(s)),!i&&te(r)&&!te(s))return d||(r.value=s),!0}const l=i?Number(n)e,Kt=e=>Reflect.getPrototypeOf(e);function wr(e,t,n){return function(...s){const o=this.__v_raw,r=R(o),i=je(r),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,d=o[e](...s),f=n?En:t?st:Ie;return!t&&ee(r,"iterate",a?Sn:Ke),z(Object.create(d),{next(){const{value:p,done:A}=d.next();return A?{value:p,done:A}:{value:l?[f(p[0]),f(p[1])]:f(p),done:A}}})}}function Wt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Nr(e,t){const n={get(o){const r=this.__v_raw,i=R(r),l=R(o);e||(Ee(o,l)&&ee(i,"get",o),ee(i,"get",l));const{has:a}=Kt(i),d=t?En:e?st:Ie;if(a.call(i,o))return d(r.get(o));if(a.call(i,l))return d(r.get(l));r!==i&&r.get(o)},get size(){const o=this.__v_raw;return!e&&ee(R(o),"iterate",Ke),o.size},has(o){const r=this.__v_raw,i=R(r),l=R(o);return e||(Ee(o,l)&&ee(i,"has",o),ee(i,"has",l)),o===l?r.has(o):r.has(o)||r.has(l)},forEach(o,r){const i=this,l=i.__v_raw,a=R(l),d=t?En:e?st:Ie;return!e&&ee(a,"iterate",Ke),l.forEach((f,p)=>o.call(r,d(f),d(p),i))}};return z(n,e?{add:Wt("add"),set:Wt("set"),delete:Wt("delete"),clear:Wt("clear")}:{add(o){const r=R(this),i=Kt(r),l=R(o),a=!t&&!he(o)&&!Be(o)?l:o;return i.has.call(r,a)||Ee(o,a)&&i.has.call(r,o)||Ee(l,a)&&i.has.call(r,l)||(r.add(a),Te(r,"add",a,a)),this},set(o,r){!t&&!he(r)&&!Be(r)&&(r=R(r));const i=R(this),{has:l,get:a}=Kt(i);let d=l.call(i,o);d||(o=R(o),d=l.call(i,o));const f=a.call(i,o);return i.set(o,r),d?Ee(r,f)&&Te(i,"set",o,r):Te(i,"add",o,r),this},delete(o){const r=R(this),{has:i,get:l}=Kt(r);let a=i.call(r,o);a||(o=R(o),a=i.call(r,o)),l&&l.call(r,o);const d=r.delete(o);return a&&Te(r,"delete",o,void 0),d},clear(){const o=R(this),r=o.size!==0,i=o.clear();return r&&Te(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=wr(o,e,t)}),n}function qt(e,t){const n=Nr(e,t);return(s,o,r)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(F(n,o)&&o in s?n:s,o,r)}const Cr={get:qt(!1,!1)},Or={get:qt(!1,!0)},Sr={get:qt(!0,!1)},Dr={get:qt(!0,!0)},Ms=new WeakMap,Es=new WeakMap,Ts=new WeakMap,Ps=new WeakMap;function Mr(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Tn(e){return Be(e)?e:zt(e,!1,vr,Cr,Ms)}function Er(e){return zt(e,!1,Ar,Or,Es)}function Pn(e){return zt(e,!0,yr,Sr,Ts)}function lc(e){return zt(e,!0,Lr,Dr,Ps)}function zt(e,t,n,s,o){if(!j(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const r=o.get(e);if(r)return r;const i=Mr(sr(e));if(i===0)return e;const l=new Proxy(e,i===2?s:n);return o.set(e,l),l}function We(e){return Be(e)?We(e.__v_raw):!!(e&&e.__v_isReactive)}function Be(e){return!!(e&&e.__v_isReadonly)}function he(e){return!!(e&&e.__v_isShallow)}function In(e){return e?!!e.__v_raw:!1}function R(e){const t=e&&e.__v_raw;return t?R(t):e}function Tr(e){return!F(e,"__v_skip")&&Object.isExtensible(e)&&as(e,"__v_skip",!0),e}const Ie=e=>j(e)?Tn(e):e,st=e=>j(e)?Pn(e):e;function te(e){return e?e.__v_isRef===!0:!1}function Is(e){return te(e)?e.value:e}const Pr={get:(e,t,n)=>t==="__v_raw"?e:Is(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return te(o)&&!te(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Fs(e){return We(e)?e:new Proxy(e,Pr)}class Ir{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ls(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=pt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&H!==this)return ms(this,!0),!0}get value(){const t=this.dep.track();return vs(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Fr(e,t,n=!1){let s,o;return T(e)?s=e:(s=e.get,o=e.set),new Ir(s,o,n)}const Gt={},Jt=new WeakMap;let qe;function Rr(e,t=!1,n=qe){if(n){let s=Jt.get(n);s||Jt.set(n,s=[]),s.push(e)}}function kr(e,t,n=V){const{immediate:s,deep:o,once:r,scheduler:i,augmentJob:l,call:a}=n,d=w=>o?w:he(w)||o===!1||o===0?Ue(w,1):Ue(w);let f,p,A,L,k=!1,M=!1;if(te(e)?(p=()=>e.value,k=he(e)):We(e)?(p=()=>d(e),k=!0):S(e)?(M=!0,k=e.some(w=>We(w)||he(w)),p=()=>e.map(w=>{if(te(w))return w.value;if(We(w))return d(w);if(T(w))return a?a(w,2):w()})):T(e)?t?p=a?()=>a(e,2):e:p=()=>{if(A){me();try{A()}finally{$e()}}const w=qe;qe=f;try{return a?a(e,3,[L]):e(L)}finally{qe=w}}:p=be,t&&o){const w=p,J=o===!0?1/0:o;p=()=>Ue(w(),J)}const q=pr(),N=()=>{f.stop(),q&&q.active&&mn(q.effects,f)};if(r&&t){const w=t;t=(...J)=>{const Ne=w(...J);return N(),Ne}}let P=M?new Array(e.length).fill(Gt):Gt;const E=w=>{if(!(!(f.flags&1)||!f.dirty&&!w))if(t){const J=f.run();if(w||o||k||(M?J.some((Ne,Ce)=>Ee(Ne,P[Ce])):Ee(J,P))){A&&A();const Ne=qe;qe=f;try{const Ce=[J,P===Gt?void 0:M&&P[0]===Gt?[]:P,L];P=J,a?a(t,3,Ce):t(...Ce)}finally{qe=Ne}}}else f.run()};return l&&l(E),f=new bs(p),f.scheduler=i?()=>i(E,!1):E,L=w=>Rr(w,!1,f),A=f.onStop=()=>{const w=Jt.get(f);if(w){if(a)a(w,4);else for(const J of w)J();Jt.delete(f)}},t?s?E(!0):P=f.run():i?i(E.bind(null,!0),!0):f.run(),N.pause=f.pause.bind(f),N.resume=f.resume.bind(f),N.stop=N,N}function Ue(e,t=1/0,n){if(t<=0||!j(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,te(e))Ue(e.value,t,n);else if(S(e))for(let s=0;s{Ue(s,t,n)});else if(jt(e)){for(const s in e)Ue(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ue(e[s],t,n)}return e}/** +**/let Z;class hr{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&&Z&&(Z.active?(this.parent=Z,this.index=(Z.scopes||(Z.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Z===this)Z=this.prevScope;else{let t=Z;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 n,s;for(n=0,s=this.effects.length;n0)return;if(ht){let t=ht;for(ht=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;dt;){let t=dt;for(dt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function $s(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function xs(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),Cn(s),gr(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function Nn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(vs(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function vs(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===pt)||(e.globalVersion=pt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Nn(e))))return;e.flags|=2;const t=e.dep,n=V,s=de;V=e,de=!0;try{$s(e);const o=e.fn(e._value);(t.version===0||Ee(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{V=n,de=s,xs(e),e.flags&=-3}}function Cn(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Cn(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function gr(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let de=!0;const ys=[];function me(){ys.push(de),de=!1}function $e(){const e=ys.pop();de=e===void 0?!0:e}function As(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=V;V=void 0;try{t()}finally{V=n}}}let pt=0;class br{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ws{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(!V||!de||V===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==V)n=this.activeLink=new br(V,this),V.deps?(n.prevDep=V.depsTail,V.depsTail.nextDep=n,V.depsTail=n):V.deps=V.depsTail=n,Ls(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=V.depsTail,n.nextDep=void 0,V.depsTail.nextDep=n,V.depsTail=n,V.deps===n&&(V.deps=s)}return n}trigger(t){this.version++,pt++,this.notify(t)}notify(t){wn();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ln()}}}function Ls(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ls(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const On=new WeakMap,Ke=Symbol(""),Sn=Symbol(""),gt=Symbol("");function ee(e,t,n){if(de&&V){let s=On.get(e);s||On.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new ws),o.map=s,o.key=n),o.track()}}function Te(e,t,n,s,o,r){const i=On.get(e);if(!i){pt++;return}const l=a=>{a&&a.trigger()};if(wn(),t==="clear")i.forEach(l);else{const a=S(e),d=a&&$n(n);if(a&&n==="length"){const f=Number(s);i.forEach((p,w)=>{(w==="length"||w===gt||!_e(w)&&w>=f)&&l(p)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),d&&l(i.get(gt)),t){case"add":a?d&&l(i.get("length")):(l(i.get(Ke)),je(e)&&l(i.get(Sn)));break;case"delete":a||(l(i.get(Ke)),je(e)&&l(i.get(Sn)));break;case"set":je(e)&&l(i.get(Ke));break}}Ln()}function nt(e){const t=F(e);return t===e?t:(ee(t,"iterate",gt),he(e)?t:t.map(Ie))}function Xt(e){return ee(e=F(e),"iterate",gt),e}function xe(e,t){return Be(e)?st(We(e)?Ie(t):t):Ie(t)}const _r={__proto__:null,[Symbol.iterator](){return Dn(this,Symbol.iterator,e=>xe(this,e))},concat(...e){return nt(this).concat(...e.map(t=>S(t)?nt(t):t))},entries(){return Dn(this,"entries",e=>(e[1]=xe(this,e[1]),e))},every(e,t){return Pe(this,"every",e,t,void 0,arguments)},filter(e,t){return Pe(this,"filter",e,t,n=>n.map(s=>xe(this,s)),arguments)},find(e,t){return Pe(this,"find",e,t,n=>xe(this,n),arguments)},findIndex(e,t){return Pe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Pe(this,"findLast",e,t,n=>xe(this,n),arguments)},findLastIndex(e,t){return Pe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Pe(this,"forEach",e,t,void 0,arguments)},includes(...e){return Mn(this,"includes",e)},indexOf(...e){return Mn(this,"indexOf",e)},join(e){return nt(this).join(e)},lastIndexOf(...e){return Mn(this,"lastIndexOf",e)},map(e,t){return Pe(this,"map",e,t,void 0,arguments)},pop(){return bt(this,"pop")},push(...e){return bt(this,"push",e)},reduce(e,...t){return Ns(this,"reduce",e,t)},reduceRight(e,...t){return Ns(this,"reduceRight",e,t)},shift(){return bt(this,"shift")},some(e,t){return Pe(this,"some",e,t,void 0,arguments)},splice(...e){return bt(this,"splice",e)},toReversed(){return nt(this).toReversed()},toSorted(e){return nt(this).toSorted(e)},toSpliced(...e){return nt(this).toSpliced(...e)},unshift(...e){return bt(this,"unshift",e)},values(){return Dn(this,"values",e=>xe(this,e))}};function Dn(e,t,n){const s=Xt(e),o=s[t]();return s!==e&&!he(e)&&(o._next=o.next,o.next=()=>{const r=o._next();return r.done||(r.value=n(r.value)),r}),o}const mr=Array.prototype;function Pe(e,t,n,s,o,r){const i=Xt(e),l=i!==e&&!he(e),a=i[t];if(a!==mr[t]){const p=a.apply(e,r);return l?Ie(p):p}let d=n;i!==e&&(l?d=function(p,w){return n.call(this,xe(e,p),w,e)}:n.length>2&&(d=function(p,w){return n.call(this,p,w,e)}));const f=a.call(i,d,s);return l&&o?o(f):f}function Ns(e,t,n,s){const o=Xt(e),r=o!==e&&!he(e);let i=n,l=!1;o!==e&&(r?(l=s.length===0,i=function(d,f,p){return l&&(l=!1,d=xe(e,d)),n.call(this,d,xe(e,f),p,e)}):n.length>3&&(i=function(d,f,p){return n.call(this,d,f,p,e)}));const a=o[t](i,...s);return l?xe(e,a):a}function Mn(e,t,n){const s=F(e);ee(s,"iterate",gt);const o=s[t](...n);return(o===-1||o===!1)&&In(n[0])?(n[0]=F(n[0]),s[t](...n)):o}function bt(e,t,n=[]){me(),wn();const s=F(e)[t].apply(e,n);return Ln(),$e(),s}const $r=_n("__proto__,__v_isRef,__isVue"),Cs=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(_e));function xr(e){_e(e)||(e=String(e));const t=F(this);return ee(t,"has",e),t.hasOwnProperty(e)}class Os{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return r;if(n==="__v_raw")return s===(o?r?Ps:Ts:r?Es:Ms).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=S(t);if(!o){let a;if(i&&(a=_r[n]))return a;if(n==="hasOwnProperty")return xr}const l=Reflect.get(t,n,te(t)?t:s);if((_e(n)?Cs.has(n):$r(n))||(o||ee(t,"get",n),r))return l;if(te(l)){const a=i&&$n(n)?l:l.value;return o&&k(a)?Pn(a):a}return k(l)?o?Pn(l):Tn(l):l}}class Ss extends Os{constructor(t=!1){super(!1,t)}set(t,n,s,o){let r=t[n];const i=S(t)&&$n(n);if(!this._isShallow){const d=Be(r);if(!he(s)&&!Be(s)&&(r=F(r),s=F(s)),!i&&te(r)&&!te(s))return d||(r.value=s),!0}const l=i?Number(n)e,Kt=e=>Reflect.getPrototypeOf(e);function Lr(e,t,n){return function(...s){const o=this.__v_raw,r=F(o),i=je(r),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,d=o[e](...s),f=n?En:t?st:Ie;return!t&&ee(r,"iterate",a?Sn:Ke),G(Object.create(d),{next(){const{value:p,done:w}=d.next();return w?{value:p,done:w}:{value:l?[f(p[0]),f(p[1])]:f(p),done:w}}})}}function Wt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Nr(e,t){const n={get(o){const r=this.__v_raw,i=F(r),l=F(o);e||(Ee(o,l)&&ee(i,"get",o),ee(i,"get",l));const{has:a}=Kt(i),d=t?En:e?st:Ie;if(a.call(i,o))return d(r.get(o));if(a.call(i,l))return d(r.get(l));r!==i&&r.get(o)},get size(){const o=this.__v_raw;return!e&&ee(F(o),"iterate",Ke),o.size},has(o){const r=this.__v_raw,i=F(r),l=F(o);return e||(Ee(o,l)&&ee(i,"has",o),ee(i,"has",l)),o===l?r.has(o):r.has(o)||r.has(l)},forEach(o,r){const i=this,l=i.__v_raw,a=F(l),d=t?En:e?st:Ie;return!e&&ee(a,"iterate",Ke),l.forEach((f,p)=>o.call(r,d(f),d(p),i))}};return G(n,e?{add:Wt("add"),set:Wt("set"),delete:Wt("delete"),clear:Wt("clear")}:{add(o){const r=F(this),i=Kt(r),l=F(o),a=!t&&!he(o)&&!Be(o)?l:o;return i.has.call(r,a)||Ee(o,a)&&i.has.call(r,o)||Ee(l,a)&&i.has.call(r,l)||(r.add(a),Te(r,"add",a,a)),this},set(o,r){!t&&!he(r)&&!Be(r)&&(r=F(r));const i=F(this),{has:l,get:a}=Kt(i);let d=l.call(i,o);d||(o=F(o),d=l.call(i,o));const f=a.call(i,o);return i.set(o,r),d?Ee(r,f)&&Te(i,"set",o,r):Te(i,"add",o,r),this},delete(o){const r=F(this),{has:i,get:l}=Kt(r);let a=i.call(r,o);a||(o=F(o),a=i.call(r,o)),l&&l.call(r,o);const d=r.delete(o);return a&&Te(r,"delete",o,void 0),d},clear(){const o=F(this),r=o.size!==0,i=o.clear();return r&&Te(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=Lr(o,e,t)}),n}function qt(e,t){const n=Nr(e,t);return(s,o,r)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(I(n,o)&&o in s?n:s,o,r)}const Cr={get:qt(!1,!1)},Or={get:qt(!1,!0)},Sr={get:qt(!0,!1)},Dr={get:qt(!0,!0)},Ms=new WeakMap,Es=new WeakMap,Ts=new WeakMap,Ps=new WeakMap;function Mr(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Tn(e){return Be(e)?e:zt(e,!1,vr,Cr,Ms)}function Er(e){return zt(e,!1,Ar,Or,Es)}function Pn(e){return zt(e,!0,yr,Sr,Ts)}function lc(e){return zt(e,!0,wr,Dr,Ps)}function zt(e,t,n,s,o){if(!k(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const r=o.get(e);if(r)return r;const i=Mr(sr(e));if(i===0)return e;const l=new Proxy(e,i===2?s:n);return o.set(e,l),l}function We(e){return Be(e)?We(e.__v_raw):!!(e&&e.__v_isReactive)}function Be(e){return!!(e&&e.__v_isReadonly)}function he(e){return!!(e&&e.__v_isShallow)}function In(e){return e?!!e.__v_raw:!1}function F(e){const t=e&&e.__v_raw;return t?F(t):e}function Tr(e){return!I(e,"__v_skip")&&Object.isExtensible(e)&&as(e,"__v_skip",!0),e}const Ie=e=>k(e)?Tn(e):e,st=e=>k(e)?Pn(e):e;function te(e){return e?e.__v_isRef===!0:!1}function Is(e){return te(e)?e.value:e}const Pr={get:(e,t,n)=>t==="__v_raw"?e:Is(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return te(o)&&!te(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Fs(e){return We(e)?e:new Proxy(e,Pr)}class Ir{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new ws(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=pt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&V!==this)return ms(this,!0),!0}get value(){const t=this.dep.track();return vs(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Fr(e,t,n=!1){let s,o;return E(e)?s=e:(s=e.get,o=e.set),new Ir(s,o,n)}const Gt={},Jt=new WeakMap;let qe;function Rr(e,t=!1,n=qe){if(n){let s=Jt.get(n);s||Jt.set(n,s=[]),s.push(e)}}function kr(e,t,n=U){const{immediate:s,deep:o,once:r,scheduler:i,augmentJob:l,call:a}=n,d=A=>o?A:he(A)||o===!1||o===0?Ue(A,1):Ue(A);let f,p,w,N,R=!1,M=!1;if(te(e)?(p=()=>e.value,R=he(e)):We(e)?(p=()=>d(e),R=!0):S(e)?(M=!0,R=e.some(A=>We(A)||he(A)),p=()=>e.map(A=>{if(te(A))return A.value;if(We(A))return d(A);if(E(A))return a?a(A,2):A()})):E(e)?t?p=a?()=>a(e,2):e:p=()=>{if(w){me();try{w()}finally{$e()}}const A=qe;qe=f;try{return a?a(e,3,[N]):e(N)}finally{qe=A}}:p=be,t&&o){const A=p,X=o===!0?1/0:o;p=()=>Ue(A(),X)}const z=pr(),H=()=>{f.stop(),z&&z.active&&mn(z.effects,f)};if(r&&t){const A=t;t=(...X)=>{const Ne=A(...X);return H(),Ne}}let L=M?new Array(e.length).fill(Gt):Gt;const T=A=>{if(!(!(f.flags&1)||!f.dirty&&!A))if(t){const X=f.run();if(A||o||R||(M?X.some((Ne,Ce)=>Ee(Ne,L[Ce])):Ee(X,L))){w&&w();const Ne=qe;qe=f;try{const Ce=[X,L===Gt?void 0:M&&L[0]===Gt?[]:L,N];L=X,a?a(t,3,Ce):t(...Ce)}finally{qe=Ne}}}else f.run()};return l&&l(T),f=new bs(p),f.scheduler=i?()=>i(T,!1):T,N=A=>Rr(A,!1,f),w=f.onStop=()=>{const A=Jt.get(f);if(A){if(a)a(A,4);else for(const X of A)X();Jt.delete(f)}},t?s?T(!0):L=f.run():i?i(T.bind(null,!0),!0):f.run(),H.pause=f.pause.bind(f),H.resume=f.resume.bind(f),H.stop=H,H}function Ue(e,t=1/0,n){if(t<=0||!k(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,te(e))Ue(e.value,t,n);else if(S(e))for(let s=0;s{Ue(s,t,n)});else if(jt(e)){for(const s in e)Ue(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ue(e[s],t,n)}return e}/** * @vue/runtime-core v3.5.42 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/const _t=[];let Fn=!1;function cc(e,...t){if(Fn)return;Fn=!0,me();const n=_t.length?_t[_t.length-1].component:null,s=n&&n.appContext.config.warnHandler,o=jr();if(s)ot(s,n,11,[e+t.map(r=>{var i,l;return(l=(i=r.toString)==null?void 0:i.call(r))!=null?l:JSON.stringify(r)}).join(""),n&&n.proxy,o.map(({vnode:r})=>`at <${Io(n,r.type)}>`).join(` `),o]);else{const r=[`[Vue warn]: ${e}`,...t];o.length&&r.push(` `,...Br(o)),console.warn(...r)}$e(),Fn=!1}function jr(){let e=_t[_t.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const s=e.component&&e.component.parent;e=s&&s.vnode}return t}function Br(e){const t=[];return e.forEach((n,s)=>{t.push(...s===0?[]:[` -`],...Ur(n))}),t}function Ur({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",s=e.component?e.component.parent==null:!1,o=` at <${Io(e.component,e.type,s)}`,r=">"+n;return e.props?[o,...Vr(e.props),r]:[o+r]}function Vr(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...Rs(s,e[s]))}),n.length>3&&t.push(" ..."),t}function Rs(e,t,n){return K(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:te(t)?(t=Rs(e,R(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):T(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=R(t),n?t:[`${e}=`,t])}function ot(e,t,n,s){try{return s?e(...s):e()}catch(o){Yt(o,t,n)}}function pe(e,t,n,s){if(T(e)){const o=ot(e,t,n,s);return o&&is(o)&&o.catch(r=>{Yt(r,t,n)}),o}if(S(e)){const o=[];for(let r=0;r>>1,o=ne[s],r=mt(o);r=mt(n)?ne.push(e):ne.splice(Xr(t),0,e),e.flags|=1,Bs()}}function Bs(){Zt||(Zt=ks.then(Hs))}function Kr(e){if(!S(e))Ve&&e.id===-1?Ve.splice(it+1,0,e):e.flags&1||(rt.push(e),e.flags|=1);else for(let t=0;tmt(n)-mt(s));if(rt.length=0,Ve){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Hs(e){try{for(ve=0;ve{s._d&&Co(-1);const r=Qt(t),i=Ye.length;let l;try{l=e(...o)}finally{for(let a=Ye.length;a>i;a--)No();Qt(r),s._d&&Co(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function ze(e,t,n,s){const o=e.dirs,r=t&&t.dirs;for(let i=0;i1)return n&&T(t)?t.call(s&&s.proxy):t}}const zr=Symbol.for("v-scx"),Gr=()=>en(zr);function kn(e,t,n){return Ks(e,t,n)}function Ks(e,t,n=V){const{immediate:s,deep:o,flush:r,once:i}=n,l=z({},n),a=t&&s||!t&&r!=="post";let d;if(St){if(r==="sync"){const L=Gr();d=L.__watcherHandles||(L.__watcherHandles=[])}else if(!a){const L=()=>{};return L.stop=be,L.resume=be,L.pause=be,L}}const f=oe;l.call=(L,k,M)=>pe(L,f,k,M);let p=!1;r==="post"?l.scheduler=L=>{le(L,f&&f.suspense)}:r!=="sync"&&(p=!0,l.scheduler=(L,k)=>{k?L():Rn(L)}),l.augmentJob=L=>{t&&(L.flags|=4),p&&(L.flags|=2,f&&(L.id=f.uid,L.i=f))};const A=kr(e,t,l);return St&&(d?d.push(A):a&&A()),A}function Jr(e,t,n){const s=this.proxy,o=K(e)?e.includes(".")?Ws(s,e):()=>s[e]:e.bind(s,s);let r;T(t)?r=t:(r=t.handler,n=t);const i=Ot(this),l=Ks(o,r.bind(s),n);return i(),l}function Ws(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;oe.__isTeleport,jn=Symbol("_leaveCb");function Zr(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Je){t=n;break}}return t}function qs(e){if(!Un(e))return tn(e.type)&&e.children?Zr(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&T(n.default))return n.default()}}function Bn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;Bn(tn(n.type)&&qs(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Qr(e,t){return T(e)?z({name:e.name},t,{setup:e}):e}function zs(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Gs(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const nn=new WeakMap;function $t(e,t,n,s,o=!1){if(S(e)){e.forEach((M,q)=>$t(M,t&&(S(t)?t[q]:t),n,s,o));return}if(xt(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&$t(e,t,n,s.component.subTree);return}const r=s.shapeFlag&4?Yn(s.component):s.el,i=o?null:r,{i:l,r:a}=e,d=t&&t.r,f=l.refs===V?l.refs={}:l.refs,p=l.setupState,A=R(p),L=p===V?os:M=>Gs(f,M)?!1:F(A,M),k=(M,q)=>!(q&&Gs(f,q));if(d!=null&&d!==a){if(Js(t),K(d))f[d]=null,L(d)&&(p[d]=null);else if(te(d)){const M=t;k(d,M.k)&&(d.value=null),M.k&&(f[M.k]=null)}}if(T(a))ot(a,l,12,[i,f]);else{const M=K(a),q=te(a);if(M||q){const N=()=>{if(e.f){const P=M?L(a)?p[a]:f[a]:k()||!e.k?a.value:f[e.k];if(o)S(P)&&mn(P,r);else if(S(P))P.includes(r)||P.push(r);else if(M)f[a]=[r],L(a)&&(p[a]=f[a]);else{const E=[r];k(a,e.k)&&(a.value=E),e.k&&(f[e.k]=E)}}else M?(f[a]=i,L(a)&&(p[a]=i)):q&&(k(a,e.k)&&(a.value=i),e.k&&(f[e.k]=i))};if(i){const P=()=>{N(),nn.delete(e)};P.id=-1,nn.set(e,P),le(P,n)}else Js(e),N()}}}function Js(e){const t=nn.get(e);t&&(t.flags|=8,nn.delete(e))}Ut().requestIdleCallback,Ut().cancelIdleCallback;const xt=e=>!!e.type.__asyncLoader,Un=e=>e.type.__isKeepAlive;function ei(e,t){Ys(e,"a",t)}function ti(e,t){Ys(e,"da",t)}function Ys(e,t,n=oe){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(sn(t,s,n),n){let o=n.parent;for(;o&&o.parent;)Un(o.parent.vnode)&&ni(s,t,n,o),o=o.parent}}function ni(e,t,n,s){const o=sn(t,e,s,!0);Zs(()=>{mn(s[t],o)},n)}function sn(e,t,n=oe,s=!1){if(n){const o=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{me();const l=Ot(n),a=pe(t,n,e,i);return l(),$e(),a});return s?o.unshift(r):o.push(r),r}}const Fe=e=>(t,n=oe)=>{(!St||e==="sp")&&sn(e,(...s)=>t(...s),n)},si=Fe("bm"),oi=Fe("m"),ri=Fe("bu"),ii=Fe("u"),li=Fe("bum"),Zs=Fe("um"),ci=Fe("sp"),ai=Fe("rtg"),ui=Fe("rtc");function fi(e,t=oe){sn("ec",e,t)}const di=Symbol.for("v-ndc");function Qs(e,t,n,s){let o;const r=n,i=S(e);if(i||K(e)){const l=i&&We(e);let a=!1,d=!1;l&&(a=!he(e),d=Be(e),e=Xt(e)),o=new Array(e.length);for(let f=0,p=e.length;ft(l,a,void 0,r));else{const l=Object.keys(e);o=new Array(l.length);for(let a=0,d=l.length;ae?Eo(e)?Yn(e):Vn(e.parent):null,vt=z(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Vn(e.parent),$root:e=>Vn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>so(e),$forceUpdate:e=>e.f||(e.f=()=>{Rn(e.update)}),$nextTick:e=>e.n||(e.n=js.bind(e.proxy)),$watch:e=>Jr.bind(e)}),Hn=(e,t)=>e!==V&&!e.__isScriptSetup&&F(e,t),hi={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:r,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const A=i[t];if(A!==void 0)switch(A){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return r[t]}else{if(Hn(s,t))return i[t]=1,s[t];if(o!==V&&F(o,t))return i[t]=2,o[t];if(F(r,t))return i[t]=3,r[t];if(n!==V&&F(n,t))return i[t]=4,n[t];Xn&&(i[t]=0)}}const d=vt[t];let f,p;if(d)return t==="$attrs"&&ee(e.attrs,"get",""),d(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==V&&F(n,t))return i[t]=4,n[t];if(p=a.config.globalProperties,F(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:r}=e;return Hn(o,t)?(o[t]=n,!0):s!==V&&F(s,t)?(s[t]=n,!0):F(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:r,type:i}},l){let a;return!!(n[l]||e!==V&&l[0]!=="$"&&F(e,l)||Hn(t,l)||F(r,l)||F(s,l)||F(vt,l)||F(o.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:F(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function eo(e){return S(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Xn=!0;function pi(e){const t=so(e),n=e.proxy,s=e.ctx;Xn=!1,t.beforeCreate&&to(t.beforeCreate,e,"bc");const{data:o,computed:r,methods:i,watch:l,provide:a,inject:d,created:f,beforeMount:p,mounted:A,beforeUpdate:L,updated:k,activated:M,deactivated:q,beforeDestroy:N,beforeUnmount:P,destroyed:E,unmounted:w,render:J,renderTracked:Ne,renderTriggered:Ce,errorCaptured:Xe,serverPrefetch:dn,expose:Ze,inheritAttrs:Et,components:hn,directives:pn,filters:ns}=t;if(d&&gi(d,s,null),i)for(const W in i){const X=i[W];T(X)&&(s[W]=X.bind(n))}if(o){const W=o.call(n,n);j(W)&&(e.data=Tn(W))}if(Xn=!0,r)for(const W in r){const X=r[W],Qe=T(X)?X.bind(n,n):T(X.get)?X.get.bind(n,n):be,gn=!T(X)&&T(X.set)?X.set.bind(n):be,et=we({get:Qe,set:gn});Object.defineProperty(s,W,{enumerable:!0,configurable:!0,get:()=>et.value,set:Oe=>et.value=Oe})}if(l)for(const W in l)no(l[W],s,n,W);if(a){const W=T(a)?a.call(n):a;Reflect.ownKeys(W).forEach(X=>{qr(X,W[X])})}f&&to(f,e,"c");function re(W,X){S(X)?X.forEach(Qe=>W(Qe.bind(n))):X&&W(X.bind(n))}if(re(si,p),re(oi,A),re(ri,L),re(ii,k),re(ei,M),re(ti,q),re(fi,Xe),re(ui,Ne),re(ai,Ce),re(li,P),re(Zs,w),re(ci,dn),S(Ze))if(Ze.length){const W=e.exposed||(e.exposed={});Ze.forEach(X=>{Object.defineProperty(W,X,{get:()=>n[X],set:Qe=>n[X]=Qe,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===be&&(e.render=J),Et!=null&&(e.inheritAttrs=Et),hn&&(e.components=hn),pn&&(e.directives=pn),dn&&zs(e)}function gi(e,t,n=be){S(e)&&(e=Kn(e));for(const s in e){const o=e[s];let r;j(o)?"default"in o?r=en(o.from||s,o.default,!0):r=en(o.from||s):r=en(o),te(r)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[s]=r}}function to(e,t,n){pe(S(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function no(e,t,n,s){let o=s.includes(".")?Ws(n,s):()=>n[s];if(K(e)){const r=t[e];T(r)&&kn(o,r)}else if(T(e))kn(o,e.bind(n));else if(j(e))if(S(e))e.forEach(r=>no(r,t,n,s));else{const r=T(e.handler)?e.handler.bind(n):t[e.handler];T(r)&&kn(o,r,e)}}function so(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,l=r.get(t);let a;return l?a=l:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(d=>on(a,d,i,!0)),on(a,t,i)),j(t)&&r.set(t,a),a}function on(e,t,n,s=!1){const{mixins:o,extends:r}=t;r&&on(e,r,n,!0),o&&o.forEach(i=>on(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=bi[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const bi={data:oo,props:ro,emits:ro,methods:yt,computed:yt,beforeCreate:se,created:se,beforeMount:se,mounted:se,beforeUpdate:se,updated:se,beforeDestroy:se,beforeUnmount:se,destroyed:se,unmounted:se,activated:se,deactivated:se,errorCaptured:se,serverPrefetch:se,components:yt,directives:yt,watch:mi,provide:oo,inject:_i};function oo(e,t){return t?e?function(){return z(T(e)?e.call(this,this):e,T(t)?t.call(this,this):t)}:t:e}function _i(e,t){return yt(Kn(e),Kn(t))}function Kn(e){if(S(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ie(t)}Modifiers`]||e[`${ue(t)}Modifiers`];function yi(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||V;let o=n;const r=t.startsWith("update:"),i=r&&vi(s,t.slice(7));i&&(i.trim&&(o=n.map(f=>K(f)?f.trim():f)),i.number&&(o=o.map(ir)));let l,a=s[l=xn(t)]||s[l=xn(ie(t))];!a&&r&&(a=s[l=xn(ue(t))]),a&&pe(a,e,6,o);const d=s[l+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,pe(d,e,6,o)}}const Ai=new WeakMap;function lo(e,t,n=!1){const s=n?Ai:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const r=e.emits;let i={},l=!1;if(!T(e)){const a=d=>{const f=lo(d,t,!0);f&&(l=!0,z(i,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!r&&!l?(j(e)&&s.set(e,null),null):(S(r)?r.forEach(a=>i[a]=null):z(i,r),j(e)&&s.set(e,i),i)}function rn(e,t){return!e||!Ft(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),F(e,t[0].toLowerCase()+t.slice(1))||F(e,ue(t))||F(e,t))}function ac(){}function co(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[r],slots:i,attrs:l,emit:a,render:d,renderCache:f,props:p,data:A,setupState:L,ctx:k,inheritAttrs:M}=e,q=Qt(e);let N,P;try{if(n.shapeFlag&4){const w=o||s,J=w;N=Ae(d.call(J,w,f,p,L,A,k)),P=l}else{const w=t;N=Ae(w.length>1?w(p,{attrs:l,slots:i,emit:a}):w(p,null)),P=t.props?l:Li(l)}}catch(w){Ye.length=0,Yt(w,e,1),N=He(Je)}let E=N;if(P&&M!==!1){const w=Object.keys(P),{shapeFlag:J}=E;w.length&&J&7&&(r&&w.some(Rt)&&(P=wi(P,r)),E=ct(E,P,!1,!0))}if(n.dirs&&(E=ct(E,null,!1,!0),E.dirs=E.dirs?E.dirs.concat(n.dirs):n.dirs),n.transition){const w=tn(E.type)&&qs(E)||E;Bn(w,n.transition)}return N=E,Qt(q),N}const Li=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ft(n))&&((t||(t={}))[n]=e[n]);return t},wi=(e,t)=>{const n={};for(const s in e)(!Rt(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ni(e,t,n){const{props:s,children:o,component:r}=e,{props:i,children:l,patchFlag:a}=t,d=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?ao(s,i,d):!!i;if(a&8){const f=t.dynamicProps;for(let p=0;pObject.create(fo),po=e=>Object.getPrototypeOf(e)===fo;function Oi(e,t,n,s=!1){const o={},r=ho();e.propsDefaults=Object.create(null),go(e,t,o,r);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=s?o:Er(o):e.type.props?e.props=o:e.props=r,e.attrs=r}function Si(e,t,n,s){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,l=R(o),[a]=e.propsOptions;let d=!1;if((s||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let p=0;p{a=!0;const[A,L]=bo(p,t,!0);z(i,A),L&&l.push(...L)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!r&&!a)return j(e)&&s.set(e,tt),tt;if(S(r))for(let f=0;fe==="_"||e==="_ctx"||e==="$stable",zn=e=>S(e)?e.map(Ae):[Ae(e)],Mi=(e,t,n)=>{if(t._n)return t;const s=Wr((...o)=>zn(t(...o)),n);return s._c=!1,s},mo=(e,t,n)=>{const s=e._ctx;for(const o in e){if(qn(o))continue;const r=e[o];if(T(r))t[o]=Mi(o,r,s);else if(r!=null){const i=zn(r);t[o]=()=>i}}},$o=(e,t)=>{const n=zn(t);e.slots.default=()=>n},xo=(e,t,n)=>{for(const s in t)(n||!qn(s))&&(e[s]=t[s])},Ei=(e,t,n)=>{const s=e.slots=ho();if(e.vnode.shapeFlag&32){const o=t._;o?(xo(s,t,n),n&&as(s,"_",o,!0)):mo(t,s)}else t&&$o(e,t)},Ti=(e,t,n)=>{const{vnode:s,slots:o}=e;let r=!0,i=V;if(s.shapeFlag&32){const l=t._;l?n&&l===1?r=!1:xo(o,t,n):(r=!t.$stable,mo(t,o)),i=t}else t&&($o(e,t),i={default:1});if(r)for(const l in o)!qn(l)&&i[l]==null&&delete o[l]},le=ki;function Pi(e){return Ii(e)}function Ii(e,t){const n=Ut();n.__VUE__=!0;const{insert:s,remove:o,patchProp:r,createElement:i,createText:l,createComment:a,setText:d,setElementText:f,parentNode:p,nextSibling:A,setScopeId:L=be,insertStaticContent:k}=e,M=(c,u,h,m=null,_=null,g=null,v=void 0,x=null,$=!!u.dynamicChildren)=>{if(c===u)return;c&&!Nt(c,u)&&(m=bn(c),Oe(c,_,g,!0),c=null),u.patchFlag===-2&&($=!1,u.dynamicChildren=null);const{type:b,ref:O,shapeFlag:y}=u;switch(b){case ln:q(c,u,h,m);break;case Je:N(c,u,h,m);break;case Jn:c==null&&P(u,h,m,v);break;case ge:hn(c,u,h,m,_,g,v,x,$);break;default:y&1?J(c,u,h,m,_,g,v,x,$):y&6?pn(c,u,h,m,_,g,v,x,$):(y&64||y&128)&&b.process(c,u,h,m,_,g,v,x,$,Pt)}O!=null&&_?$t(O,c&&c.ref,g,u||c,!u):O==null&&c&&c.ref!=null&&$t(c.ref,null,g,c,!0)},q=(c,u,h,m)=>{if(c==null)s(u.el=l(u.children),h,m);else{const _=u.el=c.el;u.children!==c.children&&d(_,u.children)}},N=(c,u,h,m)=>{c==null?s(u.el=a(u.children||""),h,m):u.el=c.el},P=(c,u,h,m)=>{[c.el,c.anchor]=k(c.children,u,h,m,c.el,c.anchor)},E=({el:c,anchor:u},h,m)=>{let _;for(;c&&c!==u;)_=A(c),s(c,h,m),c=_;s(u,h,m)},w=({el:c,anchor:u})=>{let h;for(;c&&c!==u;)h=A(c),o(c),c=h;o(u)},J=(c,u,h,m,_,g,v,x,$)=>{if(u.type==="svg"?v="svg":u.type==="math"&&(v="mathml"),c==null)Ne(u,h,m,_,g,v,x,$);else{const b=c.el&&c.el._isVueCE?c.el:null;try{b&&b._beginPatch(),dn(c,u,_,g,v,x,$)}finally{b&&b._endPatch()}}},Ne=(c,u,h,m,_,g,v,x)=>{let $,b;const{props:O,shapeFlag:y,transition:C,dirs:D}=c;if($=c.el=i(c.type,g,O&&O.is,O),y&8?f($,c.children):y&16&&Xe(c.children,$,null,m,_,Gn(c,g),v,x),D&&ze(c,null,m,"created"),Ce($,c,c.scopeId,v,m),O){for(const U in O)U!=="value"&&!ut(U)&&r($,U,null,O[U],g,m);"value"in O&&r($,"value",null,O.value,g),(b=O.onVnodeBeforeMount)&&Le(b,m,c)}D&&ze(c,null,m,"beforeMount");const I=Fi(_,C);I&&C.beforeEnter($),s($,u,h),((b=O&&O.onVnodeMounted)||I||D)&&le(()=>{try{b&&Le(b,m,c),I&&C.enter($),D&&ze(c,null,m,"mounted")}finally{}},_)},Ce=(c,u,h,m,_)=>{if(h&&L(c,h),m)for(let g=0;g{for(let b=$;b{const x=u.el=c.el;let{patchFlag:$,dynamicChildren:b,dirs:O}=u;$|=c.patchFlag&16;const y=c.props||V,C=u.props||V;let D;if(h&&Ge(h,!1),(D=C.onVnodeBeforeUpdate)&&Le(D,h,u,c),O&&ze(u,c,h,"beforeUpdate"),h&&Ge(h,!0),b&&(!c.dynamicChildren||c.dynamicChildren.length!==b.length)&&($=0,v=!1,b=null),(y.innerHTML&&C.innerHTML==null||y.textContent&&C.textContent==null)&&f(x,""),b?Ze(c.dynamicChildren,b,x,h,m,Gn(u,_),g):v||X(c,u,x,null,h,m,Gn(u,_),g,!1),$>0){if($&16)Et(x,y,C,h,_);else if($&2&&y.class!==C.class&&r(x,"class",null,C.class,_),$&4&&r(x,"style",y.style,C.style,_),$&8){const I=u.dynamicProps;for(let U=0;U{D&&Le(D,h,u,c),O&&ze(u,c,h,"updated")},m)},Ze=(c,u,h,m,_,g,v)=>{for(let x=0;x{if(u!==h){if(u!==V)for(const g in u)!ut(g)&&!(g in h)&&r(c,g,u[g],null,_,m);for(const g in h){if(ut(g))continue;const v=h[g],x=u[g];v!==x&&g!=="value"&&r(c,g,x,v,_,m)}"value"in h&&r(c,"value",u.value,h.value,_)}},hn=(c,u,h,m,_,g,v,x,$)=>{const b=u.el=c?c.el:l(""),O=u.anchor=c?c.anchor:l("");let{patchFlag:y,dynamicChildren:C,slotScopeIds:D}=u;D&&(x=x?x.concat(D):D),c==null?(s(b,h,m),s(O,h,m),Xe(u.children||[],h,O,_,g,v,x,$)):y>0&&y&64&&C&&c.dynamicChildren&&c.dynamicChildren.length===C.length?(Ze(c.dynamicChildren,C,h,_,g,v,x),(u.key!=null||_&&u===_.subTree)&&vo(c,u,!0)):X(c,u,h,O,_,g,v,x,$)},pn=(c,u,h,m,_,g,v,x,$)=>{u.slotScopeIds=x,c==null?u.shapeFlag&512?_.ctx.activate(u,h,m,v,$):ns(u,h,m,_,g,v,$):Jo(c,u,$)},ns=(c,u,h,m,_,g,v)=>{const x=c.component=Ki(c,m,_);if(Un(c)&&(x.ctx.renderer=Pt),qi(x,!1,v),x.asyncDep){if(_&&_.registerDep(x,re,v),!c.el){const $=x.subTree=He(Je);N(null,$,u,h),c.placeholder=$.el}}else re(x,c,u,h,_,g,v)},Jo=(c,u,h)=>{const m=u.component=c.component;if(Ni(c,u,h))if(m.asyncDep&&!m.asyncResolved){W(m,u,h);return}else m.next=u,m.update();else u.el=c.el,m.vnode=u},re=(c,u,h,m,_,g,v)=>{const x=()=>{if(c.isMounted){let{next:y,bu:C,u:D,parent:I,vnode:U}=c;{const De=yo(c);if(De){y&&(y.el=U.el,W(c,y,v)),De.asyncDep.then(()=>{le(()=>{c.isUnmounted||b()},_)});return}}let B=y,G;Ge(c,!1),y?(y.el=U.el,W(c,y,v)):y=U,C&&vn(C),(G=y.props&&y.props.onVnodeBeforeUpdate)&&Le(G,I,y,U),Ge(c,!0);const Q=co(c),Se=c.subTree;c.subTree=Q,M(Se,Q,p(Se.el),bn(Se),c,_,g),y.el=Q.el,B===null&&Ci(c,Q.el),D&&le(D,_),(G=y.props&&y.props.onVnodeUpdated)&&le(()=>Le(G,I,y,U),_)}else{let y;const{el:C,props:D}=u,{bm:I,m:U,parent:B,root:G,type:Q}=c,Se=xt(u);Ge(c,!1),I&&vn(I),!Se&&(y=D&&D.onVnodeBeforeMount)&&Le(y,B,u),Ge(c,!0);{G.ce&&G.ce._hasShadowRoot()&&G.ce._injectChildStyle(Q,c.parent?c.parent.type:void 0);const De=c.subTree=co(c);M(null,De,h,m,c,_,g),u.el=De.el}if(U&&le(U,_),!Se&&(y=D&&D.onVnodeMounted)){const De=u;le(()=>Le(y,B,De),_)}(u.shapeFlag&256||B&&xt(B.vnode)&&B.vnode.shapeFlag&256)&&c.a&&le(c.a,_),c.isMounted=!0,u=h=m=null}};c.scope.on();const $=c.effect=new bs(x);c.scope.off();const b=c.update=$.run.bind($),O=c.job=$.runIfDirty.bind($);O.i=c,O.id=c.uid,$.scheduler=()=>Rn(O),Ge(c,!0),b()},W=(c,u,h)=>{u.component=c;const m=c.vnode.props;c.vnode=u,c.next=null,Si(c,u.props,m,h),Ti(c,u.children,h),me(),Us(c),$e()},X=(c,u,h,m,_,g,v,x,$=!1)=>{const b=c&&c.children,O=c?c.shapeFlag:0,y=u.children,{patchFlag:C,shapeFlag:D}=u;if(C>0){if(C&128){gn(b,y,h,m,_,g,v,x,$);return}else if(C&256){Qe(b,y,h,m,_,g,v,x,$);return}}D&8?(O&16&&Tt(b,_,g),y!==b&&f(h,y)):O&16?D&16?gn(b,y,h,m,_,g,v,x,$):Tt(b,_,g,!0):(O&8&&f(h,""),D&16&&Xe(y,h,m,_,g,v,x,$))},Qe=(c,u,h,m,_,g,v,x,$)=>{c=c||tt,u=u||tt;const b=c.length,O=u.length,y=Math.min(b,O);let C;for(C=0;CO?Tt(c,_,g,!0,!1,y):Xe(u,h,m,_,g,v,x,$,y)},gn=(c,u,h,m,_,g,v,x,$)=>{let b=0;const O=u.length;let y=c.length-1,C=O-1;for(;b<=y&&b<=C;){const D=c[b],I=u[b]=$?Re(u[b]):Ae(u[b]);if(Nt(D,I))M(D,I,h,null,_,g,v,x,$);else break;b++}for(;b<=y&&b<=C;){const D=c[y],I=u[C]=$?Re(u[C]):Ae(u[C]);if(Nt(D,I))M(D,I,h,null,_,g,v,x,$);else break;y--,C--}if(b>y){if(b<=C){const D=C+1,I=DC)for(;b<=y;)Oe(c[b],_,g,!0),b++;else{const D=b,I=b,U=new Map;for(b=I;b<=C;b++){const ae=u[b]=$?Re(u[b]):Ae(u[b]);ae.key!=null&&U.set(ae.key,b)}let B,G=0;const Q=C-I+1;let Se=!1,De=0;const It=new Array(Q);for(b=0;b=Q){Oe(ae,_,g,!0);continue}let Me;if(ae.key!=null)Me=U.get(ae.key);else for(B=I;B<=C;B++)if(It[B-I]===0&&Nt(ae,u[B])){Me=B;break}Me===void 0?Oe(ae,_,g,!0):(It[Me-I]=b+1,Me>=De?De=Me:Se=!0,M(ae,u[Me],h,null,_,g,v,x,$),G++)}const Qo=Se?Ri(It):tt;for(B=Qo.length-1,b=Q-1;b>=0;b--){const ae=I+b,Me=u[ae],er=u[ae+1],tr=ae+1{const{el:g,type:v,transition:x,children:$,shapeFlag:b}=c;if(b&6){et(c.component.subTree,u,h,m);return}if(b&128){c.suspense.move(u,h,m);return}if(b&64){v.move(c,u,h,Pt);return}if(v===ge){s(g,u,h);for(let y=0;y<$.length;y++)et($[y],u,h,m);s(c.anchor,u,h);return}if(v===Jn){E(c,u,h);return}if(m!==2&&b&1&&x)if(m===0)x.persisted&&!g[jn]?s(g,u,h):(x.beforeEnter(g),s(g,u,h),le(()=>x.enter(g),_));else{const{leave:y,delayLeave:C,afterLeave:D}=x,I=()=>{c.ctx.isUnmounted?o(g):s(g,u,h)},U=()=>{const B=g._isLeaving||!!g[jn];g._isLeaving&&g[jn](!0),x.persisted&&!B?I():y(g,()=>{I(),D&&D()})};C?C(g,I,U):U()}else s(g,u,h)},Oe=(c,u,h,m=!1,_=!1)=>{const{type:g,props:v,ref:x,children:$,dynamicChildren:b,shapeFlag:O,patchFlag:y,dirs:C,cacheIndex:D,memo:I}=c;if(y===-2&&(_=!1),x!=null&&(me(),$t(x,null,h,c,!0),$e()),D!=null&&(u.renderCache[D]=void 0),O&256){u.ctx.deactivate(c);return}const U=O&1&&C,B=!xt(c);let G;if(B&&(G=v&&v.onVnodeBeforeUnmount)&&Le(G,u,c),O&6)rc(c.component,h,m);else{if(O&128){c.suspense.unmount(h,m);return}U&&ze(c,null,u,"beforeUnmount"),O&64?c.type.remove(c,u,h,Pt,m):b&&!b.hasOnce&&(g!==ge||y>0&&y&64)?Tt(b,u,h,!1,!0):(g===ge&&y&384||!_&&O&16)&&Tt($,u,h),m&&Yo(c)}const Q=I!=null&&D==null;(B&&(G=v&&v.onVnodeUnmounted)||U||Q)&&le(()=>{G&&Le(G,u,c),U&&ze(c,null,u,"unmounted"),Q&&(c.el=null)},h)},Yo=c=>{const{type:u,el:h,anchor:m,transition:_}=c;if(u===ge){oc(h,m);return}if(u===Jn){w(c);return}const g=()=>{o(h),_&&!_.persisted&&_.afterLeave&&_.afterLeave()};if(c.shapeFlag&1&&_&&!_.persisted){const{leave:v,delayLeave:x}=_,$=()=>v(h,g);x?x(c.el,g,$):$()}else g()},oc=(c,u)=>{let h;for(;c!==u;)h=A(c),o(c),c=h;o(u)},rc=(c,u,h)=>{const{bum:m,scope:_,job:g,subTree:v,um:x,m:$,a:b}=c;Ao($),Ao(b),m&&vn(m),_.stop(),g&&(g.flags|=8,Oe(v,c,u,h)),x&&le(x,u),le(()=>{c.isUnmounted=!0},u)},Tt=(c,u,h,m=!1,_=!1,g=0)=>{for(let v=g;v{if(c.shapeFlag&6)return bn(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const u=A(c.anchor||c.el),h=u&&u[Yr];return h?A(h):u};let ss=!1;const Zo=(c,u,h)=>{let m;c==null?u._vnode&&(Oe(u._vnode,null,null,!0),m=u._vnode.component):M(u._vnode||null,c,u,null,null,null,h),u._vnode=c,ss||(ss=!0,Us(m),Vs(),ss=!1)},Pt={p:M,um:Oe,m:et,r:Yo,mt:ns,mc:Xe,pc:X,pbc:Ze,n:bn,o:e};return{render:Zo,hydrate:void 0,createApp:xi(Zo)}}function Gn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ge({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Fi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vo(e,t,n=!1){const s=e.children,o=t.children;if(S(s)&&S(o))for(let r=0;r>1,e[n[l]]0&&(t[s]=n[r-1]),n[r]=s)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}function yo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:yo(t)}function Ao(e){if(e)for(let t=0;te.__isSuspense;function ki(e,t){t&&t.pendingBranch?S(e)?t.effects.push(...e):t.effects.push(e):Kr(e)}const ge=Symbol.for("v-fgt"),ln=Symbol.for("v-txt"),Je=Symbol.for("v-cmt"),Jn=Symbol.for("v-stc"),Ye=[];let ce=null;function At(e=!1){Ye.push(ce=e?null:[])}function No(){Ye.pop(),ce=Ye[Ye.length-1]||null}let Lt=1;function Co(e,t=!1){Lt+=e,e<0&&ce&&t&&(ce.hasOnce=!0)}function ji(e){return e.dynamicChildren=Lt>0?ce||tt:null,No(),Lt>0&&ce&&ce.push(e),e}function wt(e,t,n,s,o,r){return ji(Y(e,t,n,s,o,r,!0))}function Oo(e){return e?e.__v_isVNode===!0:!1}function Nt(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,cn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?K(e)||te(e)||T(e)?{i:ye,r:e,k:t,f:!!n}:e:null);function Y(e,t=null,n=null,s=0,o=null,r=e===ge?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&cn(t),scopeId:Xs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:ye};return l?(an(a,n),r&128&&e.normalize(a)):n&&(a.shapeFlag|=K(n)?8:16),Lt>0&&!i&&ce&&(a.patchFlag>0||r&6)&&a.patchFlag!==32&&ce.push(a),a}const He=Bi;function Bi(e,t=null,n=null,s=0,o=null,r=!1){if((!e||e===di)&&(e=Je),Oo(e)){const l=ct(e,t,!0);return n&&an(l,n),Lt>0&&!r&&ce&&(l.shapeFlag&6?ce[ce.indexOf(e)]=l:ce.push(l)),l.patchFlag=-2,l}if(el(e)&&(e=e.__vccOpts),t){t=Ui(t);let{class:l,style:a}=t;l&&!K(l)&&(t.class=Vt(l)),j(a)&&(In(a)&&!S(a)&&(a=z({},a)),t.style=ft(a))}const i=K(e)?1:wo(e)?128:tn(e)?64:j(e)?4:T(e)?2:0;return Y(e,t,n,s,o,i,r,!0)}function Ui(e){return e?In(e)||po(e)?z({},e):e:null}function ct(e,t,n=!1,s=!1){const{props:o,ref:r,patchFlag:i,children:l,transition:a}=e,d=t?Vi(o||{},t):o,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&So(d),ref:t&&t.ref?n&&r?S(r)?r.concat(cn(t)):[r,cn(t)]:cn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ge?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ct(e.ssContent),ssFallback:e.ssFallback&&ct(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Bn(f,a.clone(f)),f}function Do(e=" ",t=0){return He(ln,null,e,t)}function Ae(e){return e==null||typeof e=="boolean"?He(Je):S(e)?He(ge,null,e.slice()):Oo(e)?Re(e):He(ln,null,String(e))}function Re(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ct(e)}function an(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(S(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),an(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!po(t)?t._ctx=ye:o===3&&ye&&(ye.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(T(t)){if(s&65){an(e,{default:t});return}t={default:t,_ctx:ye},n=32}else t=String(t),s&64?(n=16,t=[Do(t)]):n=8;e.children=t,e.shapeFlag|=n}function Vi(...e){const t={};for(let n=0;noe||ye;let un,Ct;{const e=Ut(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),r=>{o.length>1?o.forEach(i=>i(r)):o[0](r)}};un=t("__VUE_INSTANCE_SETTERS__",n=>oe=n),Ct=t("__VUE_SSR_SETTERS__",n=>St=n)}const Ot=e=>{const t=oe;return un(e),e.scope.on(),()=>{e.scope.off(),un(t)}},Mo=()=>{oe&&oe.scope.off(),un(null)};function Eo(e){return e.vnode.shapeFlag&4}let St=!1;function qi(e,t=!1,n=!1){t&&Ct(t);const{props:s,children:o}=e.vnode,r=Eo(e);Oi(e,s,r,t),Ei(e,o,n||t);const i=r?zi(e,t):void 0;return t&&Ct(!1),i}function zi(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,hi);const{setup:s}=n;if(s){me();const o=e.setupContext=s.length>1?Ji(e):null,r=Ot(e),i=ot(s,e,0,[e.props,o]),l=is(i);if($e(),r(),(l||e.sp)&&!xt(e)&&zs(e),l){if(i.then(Mo,Mo),t)return i.then(a=>{Ct(!0);try{To(e,a,t)}finally{Ct(!1)}}).catch(a=>{Yt(a,e,0)});e.asyncDep=i}else To(e,i)}else Po(e)}function To(e,t,n){T(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:j(t)&&(e.setupState=Fs(t)),Po(e)}function Po(e,t,n){const s=e.type;e.render||(e.render=s.render||be);{const o=Ot(e);me();try{pi(e)}finally{$e(),o()}}}const Gi={get(e,t){return ee(e,"get",""),e[t]}};function Ji(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Gi),slots:e.slots,emit:e.emit,expose:t}}function Yn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Fs(Tr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in vt)return vt[n](e)},has(t,n){return n in t||n in vt}})):e.proxy}const Yi=/(?:^|[-_])\w/g,Zi=e=>e.replace(Yi,t=>t.toUpperCase()).replace(/[-_]/g,"");function Qi(e,t=!0){return T(e)?e.displayName||e.name:e.name||t&&e.__name}function Io(e,t,n=!1){let s=Qi(t);if(!s&&t.__file){const o=t.__file.match(/([^/\\]+)\.\w+$/);o&&(s=o[1])}if(!s&&e){const o=r=>{for(const i in r)if(r[i]===t)return i};s=o(e.components)||e.parent&&o(e.parent.type.components)||o(e.appContext.components)}return s?Zi(s):n?"App":"Anonymous"}function el(e){return T(e)&&"__vccOpts"in e}const we=(e,t)=>Fr(e,t,St),tl="3.5.42";/** +`],...Ur(n))}),t}function Ur({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",s=e.component?e.component.parent==null:!1,o=` at <${Io(e.component,e.type,s)}`,r=">"+n;return e.props?[o,...Vr(e.props),r]:[o+r]}function Vr(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...Rs(s,e[s]))}),n.length>3&&t.push(" ..."),t}function Rs(e,t,n){return W(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:te(t)?(t=Rs(e,F(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):E(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=F(t),n?t:[`${e}=`,t])}function ot(e,t,n,s){try{return s?e(...s):e()}catch(o){Yt(o,t,n)}}function pe(e,t,n,s){if(E(e)){const o=ot(e,t,n,s);return o&&is(o)&&o.catch(r=>{Yt(r,t,n)}),o}if(S(e)){const o=[];for(let r=0;r>>1,o=ne[s],r=mt(o);r=mt(n)?ne.push(e):ne.splice(Xr(t),0,e),e.flags|=1,Bs()}}function Bs(){Zt||(Zt=ks.then(Hs))}function Kr(e){if(!S(e))Ve&&e.id===-1?Ve.splice(it+1,0,e):e.flags&1||(rt.push(e),e.flags|=1);else for(let t=0;tmt(n)-mt(s));if(rt.length=0,Ve){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Hs(e){try{for(ve=0;ve{s._d&&Co(-1);const r=Qt(t),i=Ye.length;let l;try{l=e(...o)}finally{for(let a=Ye.length;a>i;a--)No();Qt(r),s._d&&Co(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function ze(e,t,n,s){const o=e.dirs,r=t&&t.dirs;for(let i=0;i1)return n&&E(t)?t.call(s&&s.proxy):t}}const zr=Symbol.for("v-scx"),Gr=()=>en(zr);function kn(e,t,n){return Ks(e,t,n)}function Ks(e,t,n=U){const{immediate:s,deep:o,flush:r,once:i}=n,l=G({},n),a=t&&s||!t&&r!=="post";let d;if(St){if(r==="sync"){const N=Gr();d=N.__watcherHandles||(N.__watcherHandles=[])}else if(!a){const N=()=>{};return N.stop=be,N.resume=be,N.pause=be,N}}const f=oe;l.call=(N,R,M)=>pe(N,f,R,M);let p=!1;r==="post"?l.scheduler=N=>{le(N,f&&f.suspense)}:r!=="sync"&&(p=!0,l.scheduler=(N,R)=>{R?N():Rn(N)}),l.augmentJob=N=>{t&&(N.flags|=4),p&&(N.flags|=2,f&&(N.id=f.uid,N.i=f))};const w=kr(e,t,l);return St&&(d?d.push(w):a&&w()),w}function Jr(e,t,n){const s=this.proxy,o=W(e)?e.includes(".")?Ws(s,e):()=>s[e]:e.bind(s,s);let r;E(t)?r=t:(r=t.handler,n=t);const i=Ot(this),l=Ks(o,r.bind(s),n);return i(),l}function Ws(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;oe.__isTeleport,jn=Symbol("_leaveCb");function Zr(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Je){t=n;break}}return t}function qs(e){if(!Un(e))return tn(e.type)&&e.children?Zr(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&E(n.default))return n.default()}}function Bn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;Bn(tn(n.type)&&qs(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Qr(e,t){return E(e)?G({name:e.name},t,{setup:e}):e}function zs(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Gs(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const nn=new WeakMap;function $t(e,t,n,s,o=!1){if(S(e)){e.forEach((M,z)=>$t(M,t&&(S(t)?t[z]:t),n,s,o));return}if(xt(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&$t(e,t,n,s.component.subTree);return}const r=s.shapeFlag&4?Yn(s.component):s.el,i=o?null:r,{i:l,r:a}=e,d=t&&t.r,f=l.refs===U?l.refs={}:l.refs,p=l.setupState,w=F(p),N=p===U?os:M=>Gs(f,M)?!1:I(w,M),R=(M,z)=>!(z&&Gs(f,z));if(d!=null&&d!==a){if(Js(t),W(d))f[d]=null,N(d)&&(p[d]=null);else if(te(d)){const M=t;R(d,M.k)&&(d.value=null),M.k&&(f[M.k]=null)}}if(E(a))ot(a,l,12,[i,f]);else{const M=W(a),z=te(a);if(M||z){const H=()=>{if(e.f){const L=M?N(a)?p[a]:f[a]:R()||!e.k?a.value:f[e.k];if(o)S(L)&&mn(L,r);else if(S(L))L.includes(r)||L.push(r);else if(M)f[a]=[r],N(a)&&(p[a]=f[a]);else{const T=[r];R(a,e.k)&&(a.value=T),e.k&&(f[e.k]=T)}}else M?(f[a]=i,N(a)&&(p[a]=i)):z&&(R(a,e.k)&&(a.value=i),e.k&&(f[e.k]=i))};if(i){const L=()=>{H(),nn.delete(e)};L.id=-1,nn.set(e,L),le(L,n)}else Js(e),H()}}}function Js(e){const t=nn.get(e);t&&(t.flags|=8,nn.delete(e))}Ut().requestIdleCallback,Ut().cancelIdleCallback;const xt=e=>!!e.type.__asyncLoader,Un=e=>e.type.__isKeepAlive;function ei(e,t){Ys(e,"a",t)}function ti(e,t){Ys(e,"da",t)}function Ys(e,t,n=oe){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(sn(t,s,n),n){let o=n.parent;for(;o&&o.parent;)Un(o.parent.vnode)&&ni(s,t,n,o),o=o.parent}}function ni(e,t,n,s){const o=sn(t,e,s,!0);Zs(()=>{mn(s[t],o)},n)}function sn(e,t,n=oe,s=!1){if(n){const o=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{me();const l=Ot(n),a=pe(t,n,e,i);return l(),$e(),a});return s?o.unshift(r):o.push(r),r}}const Fe=e=>(t,n=oe)=>{(!St||e==="sp")&&sn(e,(...s)=>t(...s),n)},si=Fe("bm"),oi=Fe("m"),ri=Fe("bu"),ii=Fe("u"),li=Fe("bum"),Zs=Fe("um"),ci=Fe("sp"),ai=Fe("rtg"),ui=Fe("rtc");function fi(e,t=oe){sn("ec",e,t)}const di=Symbol.for("v-ndc");function Qs(e,t,n,s){let o;const r=n,i=S(e);if(i||W(e)){const l=i&&We(e);let a=!1,d=!1;l&&(a=!he(e),d=Be(e),e=Xt(e)),o=new Array(e.length);for(let f=0,p=e.length;ft(l,a,void 0,r));else{const l=Object.keys(e);o=new Array(l.length);for(let a=0,d=l.length;ae?Eo(e)?Yn(e):Vn(e.parent):null,vt=G(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Vn(e.parent),$root:e=>Vn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>so(e),$forceUpdate:e=>e.f||(e.f=()=>{Rn(e.update)}),$nextTick:e=>e.n||(e.n=js.bind(e.proxy)),$watch:e=>Jr.bind(e)}),Hn=(e,t)=>e!==U&&!e.__isScriptSetup&&I(e,t),hi={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:r,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const w=i[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return r[t]}else{if(Hn(s,t))return i[t]=1,s[t];if(o!==U&&I(o,t))return i[t]=2,o[t];if(I(r,t))return i[t]=3,r[t];if(n!==U&&I(n,t))return i[t]=4,n[t];Xn&&(i[t]=0)}}const d=vt[t];let f,p;if(d)return t==="$attrs"&&ee(e.attrs,"get",""),d(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==U&&I(n,t))return i[t]=4,n[t];if(p=a.config.globalProperties,I(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:r}=e;return Hn(o,t)?(o[t]=n,!0):s!==U&&I(s,t)?(s[t]=n,!0):I(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:r,type:i}},l){let a;return!!(n[l]||e!==U&&l[0]!=="$"&&I(e,l)||Hn(t,l)||I(r,l)||I(s,l)||I(vt,l)||I(o.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:I(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function eo(e){return S(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Xn=!0;function pi(e){const t=so(e),n=e.proxy,s=e.ctx;Xn=!1,t.beforeCreate&&to(t.beforeCreate,e,"bc");const{data:o,computed:r,methods:i,watch:l,provide:a,inject:d,created:f,beforeMount:p,mounted:w,beforeUpdate:N,updated:R,activated:M,deactivated:z,beforeDestroy:H,beforeUnmount:L,destroyed:T,unmounted:A,render:X,renderTracked:Ne,renderTriggered:Ce,errorCaptured:Xe,serverPrefetch:dn,expose:Ze,inheritAttrs:Et,components:hn,directives:pn,filters:ns}=t;if(d&&gi(d,s,null),i)for(const q in i){const K=i[q];E(K)&&(s[q]=K.bind(n))}if(o){const q=o.call(n,n);k(q)&&(e.data=Tn(q))}if(Xn=!0,r)for(const q in r){const K=r[q],Qe=E(K)?K.bind(n,n):E(K.get)?K.get.bind(n,n):be,gn=!E(K)&&E(K.set)?K.set.bind(n):be,et=Le({get:Qe,set:gn});Object.defineProperty(s,q,{enumerable:!0,configurable:!0,get:()=>et.value,set:Oe=>et.value=Oe})}if(l)for(const q in l)no(l[q],s,n,q);if(a){const q=E(a)?a.call(n):a;Reflect.ownKeys(q).forEach(K=>{qr(K,q[K])})}f&&to(f,e,"c");function re(q,K){S(K)?K.forEach(Qe=>q(Qe.bind(n))):K&&q(K.bind(n))}if(re(si,p),re(oi,w),re(ri,N),re(ii,R),re(ei,M),re(ti,z),re(fi,Xe),re(ui,Ne),re(ai,Ce),re(li,L),re(Zs,A),re(ci,dn),S(Ze))if(Ze.length){const q=e.exposed||(e.exposed={});Ze.forEach(K=>{Object.defineProperty(q,K,{get:()=>n[K],set:Qe=>n[K]=Qe,enumerable:!0})})}else e.exposed||(e.exposed={});X&&e.render===be&&(e.render=X),Et!=null&&(e.inheritAttrs=Et),hn&&(e.components=hn),pn&&(e.directives=pn),dn&&zs(e)}function gi(e,t,n=be){S(e)&&(e=Kn(e));for(const s in e){const o=e[s];let r;k(o)?"default"in o?r=en(o.from||s,o.default,!0):r=en(o.from||s):r=en(o),te(r)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[s]=r}}function to(e,t,n){pe(S(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function no(e,t,n,s){let o=s.includes(".")?Ws(n,s):()=>n[s];if(W(e)){const r=t[e];E(r)&&kn(o,r)}else if(E(e))kn(o,e.bind(n));else if(k(e))if(S(e))e.forEach(r=>no(r,t,n,s));else{const r=E(e.handler)?e.handler.bind(n):t[e.handler];E(r)&&kn(o,r,e)}}function so(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,l=r.get(t);let a;return l?a=l:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(d=>on(a,d,i,!0)),on(a,t,i)),k(t)&&r.set(t,a),a}function on(e,t,n,s=!1){const{mixins:o,extends:r}=t;r&&on(e,r,n,!0),o&&o.forEach(i=>on(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=bi[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const bi={data:oo,props:ro,emits:ro,methods:yt,computed:yt,beforeCreate:se,created:se,beforeMount:se,mounted:se,beforeUpdate:se,updated:se,beforeDestroy:se,beforeUnmount:se,destroyed:se,unmounted:se,activated:se,deactivated:se,errorCaptured:se,serverPrefetch:se,components:yt,directives:yt,watch:mi,provide:oo,inject:_i};function oo(e,t){return t?e?function(){return G(E(e)?e.call(this,this):e,E(t)?t.call(this,this):t)}:t:e}function _i(e,t){return yt(Kn(e),Kn(t))}function Kn(e){if(S(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ie(t)}Modifiers`]||e[`${ue(t)}Modifiers`];function yi(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||U;let o=n;const r=t.startsWith("update:"),i=r&&vi(s,t.slice(7));i&&(i.trim&&(o=n.map(f=>W(f)?f.trim():f)),i.number&&(o=o.map(ir)));let l,a=s[l=xn(t)]||s[l=xn(ie(t))];!a&&r&&(a=s[l=xn(ue(t))]),a&&pe(a,e,6,o);const d=s[l+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,pe(d,e,6,o)}}const Ai=new WeakMap;function lo(e,t,n=!1){const s=n?Ai:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const r=e.emits;let i={},l=!1;if(!E(e)){const a=d=>{const f=lo(d,t,!0);f&&(l=!0,G(i,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!r&&!l?(k(e)&&s.set(e,null),null):(S(r)?r.forEach(a=>i[a]=null):G(i,r),k(e)&&s.set(e,i),i)}function rn(e,t){return!e||!Ft(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),I(e,t[0].toLowerCase()+t.slice(1))||I(e,ue(t))||I(e,t))}function ac(){}function co(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[r],slots:i,attrs:l,emit:a,render:d,renderCache:f,props:p,data:w,setupState:N,ctx:R,inheritAttrs:M}=e,z=Qt(e);let H,L;try{if(n.shapeFlag&4){const A=o||s,X=A;H=Ae(d.call(X,A,f,p,N,w,R)),L=l}else{const A=t;H=Ae(A.length>1?A(p,{attrs:l,slots:i,emit:a}):A(p,null)),L=t.props?l:wi(l)}}catch(A){Ye.length=0,Yt(A,e,1),H=He(Je)}let T=H;if(L&&M!==!1){const A=Object.keys(L),{shapeFlag:X}=T;A.length&&X&7&&(r&&A.some(Rt)&&(L=Li(L,r)),T=ct(T,L,!1,!0))}if(n.dirs&&(T=ct(T,null,!1,!0),T.dirs=T.dirs?T.dirs.concat(n.dirs):n.dirs),n.transition){const A=tn(T.type)&&qs(T)||T;Bn(A,n.transition)}return H=T,Qt(z),H}const wi=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ft(n))&&((t||(t={}))[n]=e[n]);return t},Li=(e,t)=>{const n={};for(const s in e)(!Rt(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ni(e,t,n){const{props:s,children:o,component:r}=e,{props:i,children:l,patchFlag:a}=t,d=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?ao(s,i,d):!!i;if(a&8){const f=t.dynamicProps;for(let p=0;pObject.create(fo),po=e=>Object.getPrototypeOf(e)===fo;function Oi(e,t,n,s=!1){const o={},r=ho();e.propsDefaults=Object.create(null),go(e,t,o,r);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=s?o:Er(o):e.type.props?e.props=o:e.props=r,e.attrs=r}function Si(e,t,n,s){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,l=F(o),[a]=e.propsOptions;let d=!1;if((s||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let p=0;p{a=!0;const[w,N]=bo(p,t,!0);G(i,w),N&&l.push(...N)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!r&&!a)return k(e)&&s.set(e,tt),tt;if(S(r))for(let f=0;fe==="_"||e==="_ctx"||e==="$stable",zn=e=>S(e)?e.map(Ae):[Ae(e)],Mi=(e,t,n)=>{if(t._n)return t;const s=Wr((...o)=>zn(t(...o)),n);return s._c=!1,s},mo=(e,t,n)=>{const s=e._ctx;for(const o in e){if(qn(o))continue;const r=e[o];if(E(r))t[o]=Mi(o,r,s);else if(r!=null){const i=zn(r);t[o]=()=>i}}},$o=(e,t)=>{const n=zn(t);e.slots.default=()=>n},xo=(e,t,n)=>{for(const s in t)(n||!qn(s))&&(e[s]=t[s])},Ei=(e,t,n)=>{const s=e.slots=ho();if(e.vnode.shapeFlag&32){const o=t._;o?(xo(s,t,n),n&&as(s,"_",o,!0)):mo(t,s)}else t&&$o(e,t)},Ti=(e,t,n)=>{const{vnode:s,slots:o}=e;let r=!0,i=U;if(s.shapeFlag&32){const l=t._;l?n&&l===1?r=!1:xo(o,t,n):(r=!t.$stable,mo(t,o)),i=t}else t&&($o(e,t),i={default:1});if(r)for(const l in o)!qn(l)&&i[l]==null&&delete o[l]},le=ki;function Pi(e){return Ii(e)}function Ii(e,t){const n=Ut();n.__VUE__=!0;const{insert:s,remove:o,patchProp:r,createElement:i,createText:l,createComment:a,setText:d,setElementText:f,parentNode:p,nextSibling:w,setScopeId:N=be,insertStaticContent:R}=e,M=(c,u,h,m=null,_=null,g=null,v=void 0,x=null,$=!!u.dynamicChildren)=>{if(c===u)return;c&&!Nt(c,u)&&(m=bn(c),Oe(c,_,g,!0),c=null),u.patchFlag===-2&&($=!1,u.dynamicChildren=null);const{type:b,ref:O,shapeFlag:y}=u;switch(b){case ln:z(c,u,h,m);break;case Je:H(c,u,h,m);break;case Jn:c==null&&L(u,h,m,v);break;case ge:hn(c,u,h,m,_,g,v,x,$);break;default:y&1?X(c,u,h,m,_,g,v,x,$):y&6?pn(c,u,h,m,_,g,v,x,$):(y&64||y&128)&&b.process(c,u,h,m,_,g,v,x,$,Pt)}O!=null&&_?$t(O,c&&c.ref,g,u||c,!u):O==null&&c&&c.ref!=null&&$t(c.ref,null,g,c,!0)},z=(c,u,h,m)=>{if(c==null)s(u.el=l(u.children),h,m);else{const _=u.el=c.el;u.children!==c.children&&d(_,u.children)}},H=(c,u,h,m)=>{c==null?s(u.el=a(u.children||""),h,m):u.el=c.el},L=(c,u,h,m)=>{[c.el,c.anchor]=R(c.children,u,h,m,c.el,c.anchor)},T=({el:c,anchor:u},h,m)=>{let _;for(;c&&c!==u;)_=w(c),s(c,h,m),c=_;s(u,h,m)},A=({el:c,anchor:u})=>{let h;for(;c&&c!==u;)h=w(c),o(c),c=h;o(u)},X=(c,u,h,m,_,g,v,x,$)=>{if(u.type==="svg"?v="svg":u.type==="math"&&(v="mathml"),c==null)Ne(u,h,m,_,g,v,x,$);else{const b=c.el&&c.el._isVueCE?c.el:null;try{b&&b._beginPatch(),dn(c,u,_,g,v,x,$)}finally{b&&b._endPatch()}}},Ne=(c,u,h,m,_,g,v,x)=>{let $,b;const{props:O,shapeFlag:y,transition:C,dirs:D}=c;if($=c.el=i(c.type,g,O&&O.is,O),y&8?f($,c.children):y&16&&Xe(c.children,$,null,m,_,Gn(c,g),v,x),D&&ze(c,null,m,"created"),Ce($,c,c.scopeId,v,m),O){for(const B in O)B!=="value"&&!ut(B)&&r($,B,null,O[B],g,m);"value"in O&&r($,"value",null,O.value,g),(b=O.onVnodeBeforeMount)&&we(b,m,c)}D&&ze(c,null,m,"beforeMount");const P=Fi(_,C);P&&C.beforeEnter($),s($,u,h),((b=O&&O.onVnodeMounted)||P||D)&&le(()=>{try{b&&we(b,m,c),P&&C.enter($),D&&ze(c,null,m,"mounted")}finally{}},_)},Ce=(c,u,h,m,_)=>{if(h&&N(c,h),m)for(let g=0;g{for(let b=$;b{const x=u.el=c.el;let{patchFlag:$,dynamicChildren:b,dirs:O}=u;$|=c.patchFlag&16;const y=c.props||U,C=u.props||U;let D;if(h&&Ge(h,!1),(D=C.onVnodeBeforeUpdate)&&we(D,h,u,c),O&&ze(u,c,h,"beforeUpdate"),h&&Ge(h,!0),b&&(!c.dynamicChildren||c.dynamicChildren.length!==b.length)&&($=0,v=!1,b=null),(y.innerHTML&&C.innerHTML==null||y.textContent&&C.textContent==null)&&f(x,""),b?Ze(c.dynamicChildren,b,x,h,m,Gn(u,_),g):v||K(c,u,x,null,h,m,Gn(u,_),g,!1),$>0){if($&16)Et(x,y,C,h,_);else if($&2&&y.class!==C.class&&r(x,"class",null,C.class,_),$&4&&r(x,"style",y.style,C.style,_),$&8){const P=u.dynamicProps;for(let B=0;B{D&&we(D,h,u,c),O&&ze(u,c,h,"updated")},m)},Ze=(c,u,h,m,_,g,v)=>{for(let x=0;x{if(u!==h){if(u!==U)for(const g in u)!ut(g)&&!(g in h)&&r(c,g,u[g],null,_,m);for(const g in h){if(ut(g))continue;const v=h[g],x=u[g];v!==x&&g!=="value"&&r(c,g,x,v,_,m)}"value"in h&&r(c,"value",u.value,h.value,_)}},hn=(c,u,h,m,_,g,v,x,$)=>{const b=u.el=c?c.el:l(""),O=u.anchor=c?c.anchor:l("");let{patchFlag:y,dynamicChildren:C,slotScopeIds:D}=u;D&&(x=x?x.concat(D):D),c==null?(s(b,h,m),s(O,h,m),Xe(u.children||[],h,O,_,g,v,x,$)):y>0&&y&64&&C&&c.dynamicChildren&&c.dynamicChildren.length===C.length?(Ze(c.dynamicChildren,C,h,_,g,v,x),(u.key!=null||_&&u===_.subTree)&&vo(c,u,!0)):K(c,u,h,O,_,g,v,x,$)},pn=(c,u,h,m,_,g,v,x,$)=>{u.slotScopeIds=x,c==null?u.shapeFlag&512?_.ctx.activate(u,h,m,v,$):ns(u,h,m,_,g,v,$):Jo(c,u,$)},ns=(c,u,h,m,_,g,v)=>{const x=c.component=Ki(c,m,_);if(Un(c)&&(x.ctx.renderer=Pt),qi(x,!1,v),x.asyncDep){if(_&&_.registerDep(x,re,v),!c.el){const $=x.subTree=He(Je);H(null,$,u,h),c.placeholder=$.el}}else re(x,c,u,h,_,g,v)},Jo=(c,u,h)=>{const m=u.component=c.component;if(Ni(c,u,h))if(m.asyncDep&&!m.asyncResolved){q(m,u,h);return}else m.next=u,m.update();else u.el=c.el,m.vnode=u},re=(c,u,h,m,_,g,v)=>{const x=()=>{if(c.isMounted){let{next:y,bu:C,u:D,parent:P,vnode:B}=c;{const De=yo(c);if(De){y&&(y.el=B.el,q(c,y,v)),De.asyncDep.then(()=>{le(()=>{c.isUnmounted||b()},_)});return}}let j=y,J;Ge(c,!1),y?(y.el=B.el,q(c,y,v)):y=B,C&&vn(C),(J=y.props&&y.props.onVnodeBeforeUpdate)&&we(J,P,y,B),Ge(c,!0);const Q=co(c),Se=c.subTree;c.subTree=Q,M(Se,Q,p(Se.el),bn(Se),c,_,g),y.el=Q.el,j===null&&Ci(c,Q.el),D&&le(D,_),(J=y.props&&y.props.onVnodeUpdated)&&le(()=>we(J,P,y,B),_)}else{let y;const{el:C,props:D}=u,{bm:P,m:B,parent:j,root:J,type:Q}=c,Se=xt(u);Ge(c,!1),P&&vn(P),!Se&&(y=D&&D.onVnodeBeforeMount)&&we(y,j,u),Ge(c,!0);{J.ce&&J.ce._hasShadowRoot()&&J.ce._injectChildStyle(Q,c.parent?c.parent.type:void 0);const De=c.subTree=co(c);M(null,De,h,m,c,_,g),u.el=De.el}if(B&&le(B,_),!Se&&(y=D&&D.onVnodeMounted)){const De=u;le(()=>we(y,j,De),_)}(u.shapeFlag&256||j&&xt(j.vnode)&&j.vnode.shapeFlag&256)&&c.a&&le(c.a,_),c.isMounted=!0,u=h=m=null}};c.scope.on();const $=c.effect=new bs(x);c.scope.off();const b=c.update=$.run.bind($),O=c.job=$.runIfDirty.bind($);O.i=c,O.id=c.uid,$.scheduler=()=>Rn(O),Ge(c,!0),b()},q=(c,u,h)=>{u.component=c;const m=c.vnode.props;c.vnode=u,c.next=null,Si(c,u.props,m,h),Ti(c,u.children,h),me(),Us(c),$e()},K=(c,u,h,m,_,g,v,x,$=!1)=>{const b=c&&c.children,O=c?c.shapeFlag:0,y=u.children,{patchFlag:C,shapeFlag:D}=u;if(C>0){if(C&128){gn(b,y,h,m,_,g,v,x,$);return}else if(C&256){Qe(b,y,h,m,_,g,v,x,$);return}}D&8?(O&16&&Tt(b,_,g),y!==b&&f(h,y)):O&16?D&16?gn(b,y,h,m,_,g,v,x,$):Tt(b,_,g,!0):(O&8&&f(h,""),D&16&&Xe(y,h,m,_,g,v,x,$))},Qe=(c,u,h,m,_,g,v,x,$)=>{c=c||tt,u=u||tt;const b=c.length,O=u.length,y=Math.min(b,O);let C;for(C=0;CO?Tt(c,_,g,!0,!1,y):Xe(u,h,m,_,g,v,x,$,y)},gn=(c,u,h,m,_,g,v,x,$)=>{let b=0;const O=u.length;let y=c.length-1,C=O-1;for(;b<=y&&b<=C;){const D=c[b],P=u[b]=$?Re(u[b]):Ae(u[b]);if(Nt(D,P))M(D,P,h,null,_,g,v,x,$);else break;b++}for(;b<=y&&b<=C;){const D=c[y],P=u[C]=$?Re(u[C]):Ae(u[C]);if(Nt(D,P))M(D,P,h,null,_,g,v,x,$);else break;y--,C--}if(b>y){if(b<=C){const D=C+1,P=DC)for(;b<=y;)Oe(c[b],_,g,!0),b++;else{const D=b,P=b,B=new Map;for(b=P;b<=C;b++){const ae=u[b]=$?Re(u[b]):Ae(u[b]);ae.key!=null&&B.set(ae.key,b)}let j,J=0;const Q=C-P+1;let Se=!1,De=0;const It=new Array(Q);for(b=0;b=Q){Oe(ae,_,g,!0);continue}let Me;if(ae.key!=null)Me=B.get(ae.key);else for(j=P;j<=C;j++)if(It[j-P]===0&&Nt(ae,u[j])){Me=j;break}Me===void 0?Oe(ae,_,g,!0):(It[Me-P]=b+1,Me>=De?De=Me:Se=!0,M(ae,u[Me],h,null,_,g,v,x,$),J++)}const Qo=Se?Ri(It):tt;for(j=Qo.length-1,b=Q-1;b>=0;b--){const ae=P+b,Me=u[ae],er=u[ae+1],tr=ae+1{const{el:g,type:v,transition:x,children:$,shapeFlag:b}=c;if(b&6){et(c.component.subTree,u,h,m);return}if(b&128){c.suspense.move(u,h,m);return}if(b&64){v.move(c,u,h,Pt);return}if(v===ge){s(g,u,h);for(let y=0;y<$.length;y++)et($[y],u,h,m);s(c.anchor,u,h);return}if(v===Jn){T(c,u,h);return}if(m!==2&&b&1&&x)if(m===0)x.persisted&&!g[jn]?s(g,u,h):(x.beforeEnter(g),s(g,u,h),le(()=>x.enter(g),_));else{const{leave:y,delayLeave:C,afterLeave:D}=x,P=()=>{c.ctx.isUnmounted?o(g):s(g,u,h)},B=()=>{const j=g._isLeaving||!!g[jn];g._isLeaving&&g[jn](!0),x.persisted&&!j?P():y(g,()=>{P(),D&&D()})};C?C(g,P,B):B()}else s(g,u,h)},Oe=(c,u,h,m=!1,_=!1)=>{const{type:g,props:v,ref:x,children:$,dynamicChildren:b,shapeFlag:O,patchFlag:y,dirs:C,cacheIndex:D,memo:P}=c;if(y===-2&&(_=!1),x!=null&&(me(),$t(x,null,h,c,!0),$e()),D!=null&&(u.renderCache[D]=void 0),O&256){u.ctx.deactivate(c);return}const B=O&1&&C,j=!xt(c);let J;if(j&&(J=v&&v.onVnodeBeforeUnmount)&&we(J,u,c),O&6)rc(c.component,h,m);else{if(O&128){c.suspense.unmount(h,m);return}B&&ze(c,null,u,"beforeUnmount"),O&64?c.type.remove(c,u,h,Pt,m):b&&!b.hasOnce&&(g!==ge||y>0&&y&64)?Tt(b,u,h,!1,!0):(g===ge&&y&384||!_&&O&16)&&Tt($,u,h),m&&Yo(c)}const Q=P!=null&&D==null;(j&&(J=v&&v.onVnodeUnmounted)||B||Q)&&le(()=>{J&&we(J,u,c),B&&ze(c,null,u,"unmounted"),Q&&(c.el=null)},h)},Yo=c=>{const{type:u,el:h,anchor:m,transition:_}=c;if(u===ge){oc(h,m);return}if(u===Jn){A(c);return}const g=()=>{o(h),_&&!_.persisted&&_.afterLeave&&_.afterLeave()};if(c.shapeFlag&1&&_&&!_.persisted){const{leave:v,delayLeave:x}=_,$=()=>v(h,g);x?x(c.el,g,$):$()}else g()},oc=(c,u)=>{let h;for(;c!==u;)h=w(c),o(c),c=h;o(u)},rc=(c,u,h)=>{const{bum:m,scope:_,job:g,subTree:v,um:x,m:$,a:b}=c;Ao($),Ao(b),m&&vn(m),_.stop(),g&&(g.flags|=8,Oe(v,c,u,h)),x&&le(x,u),le(()=>{c.isUnmounted=!0},u)},Tt=(c,u,h,m=!1,_=!1,g=0)=>{for(let v=g;v{if(c.shapeFlag&6)return bn(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const u=w(c.anchor||c.el),h=u&&u[Yr];return h?w(h):u};let ss=!1;const Zo=(c,u,h)=>{let m;c==null?u._vnode&&(Oe(u._vnode,null,null,!0),m=u._vnode.component):M(u._vnode||null,c,u,null,null,null,h),u._vnode=c,ss||(ss=!0,Us(m),Vs(),ss=!1)},Pt={p:M,um:Oe,m:et,r:Yo,mt:ns,mc:Xe,pc:K,pbc:Ze,n:bn,o:e};return{render:Zo,hydrate:void 0,createApp:xi(Zo)}}function Gn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ge({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Fi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vo(e,t,n=!1){const s=e.children,o=t.children;if(S(s)&&S(o))for(let r=0;r>1,e[n[l]]0&&(t[s]=n[r-1]),n[r]=s)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}function yo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:yo(t)}function Ao(e){if(e)for(let t=0;te.__isSuspense;function ki(e,t){t&&t.pendingBranch?S(e)?t.effects.push(...e):t.effects.push(e):Kr(e)}const ge=Symbol.for("v-fgt"),ln=Symbol.for("v-txt"),Je=Symbol.for("v-cmt"),Jn=Symbol.for("v-stc"),Ye=[];let ce=null;function At(e=!1){Ye.push(ce=e?null:[])}function No(){Ye.pop(),ce=Ye[Ye.length-1]||null}let wt=1;function Co(e,t=!1){wt+=e,e<0&&ce&&t&&(ce.hasOnce=!0)}function ji(e){return e.dynamicChildren=wt>0?ce||tt:null,No(),wt>0&&ce&&ce.push(e),e}function Lt(e,t,n,s,o,r){return ji(Y(e,t,n,s,o,r,!0))}function Oo(e){return e?e.__v_isVNode===!0:!1}function Nt(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,cn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?W(e)||te(e)||E(e)?{i:ye,r:e,k:t,f:!!n}:e:null);function Y(e,t=null,n=null,s=0,o=null,r=e===ge?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&cn(t),scopeId:Xs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:ye};return l?(an(a,n),r&128&&e.normalize(a)):n&&(a.shapeFlag|=W(n)?8:16),wt>0&&!i&&ce&&(a.patchFlag>0||r&6)&&a.patchFlag!==32&&ce.push(a),a}const He=Bi;function Bi(e,t=null,n=null,s=0,o=null,r=!1){if((!e||e===di)&&(e=Je),Oo(e)){const l=ct(e,t,!0);return n&&an(l,n),wt>0&&!r&&ce&&(l.shapeFlag&6?ce[ce.indexOf(e)]=l:ce.push(l)),l.patchFlag=-2,l}if(el(e)&&(e=e.__vccOpts),t){t=Ui(t);let{class:l,style:a}=t;l&&!W(l)&&(t.class=Vt(l)),k(a)&&(In(a)&&!S(a)&&(a=G({},a)),t.style=ft(a))}const i=W(e)?1:Lo(e)?128:tn(e)?64:k(e)?4:E(e)?2:0;return Y(e,t,n,s,o,i,r,!0)}function Ui(e){return e?In(e)||po(e)?G({},e):e:null}function ct(e,t,n=!1,s=!1){const{props:o,ref:r,patchFlag:i,children:l,transition:a}=e,d=t?Vi(o||{},t):o,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&So(d),ref:t&&t.ref?n&&r?S(r)?r.concat(cn(t)):[r,cn(t)]:cn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ge?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ct(e.ssContent),ssFallback:e.ssFallback&&ct(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Bn(f,a.clone(f)),f}function Do(e=" ",t=0){return He(ln,null,e,t)}function Ae(e){return e==null||typeof e=="boolean"?He(Je):S(e)?He(ge,null,e.slice()):Oo(e)?Re(e):He(ln,null,String(e))}function Re(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ct(e)}function an(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(S(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),an(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!po(t)?t._ctx=ye:o===3&&ye&&(ye.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(E(t)){if(s&65){an(e,{default:t});return}t={default:t,_ctx:ye},n=32}else t=String(t),s&64?(n=16,t=[Do(t)]):n=8;e.children=t,e.shapeFlag|=n}function Vi(...e){const t={};for(let n=0;noe||ye;let un,Ct;{const e=Ut(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),r=>{o.length>1?o.forEach(i=>i(r)):o[0](r)}};un=t("__VUE_INSTANCE_SETTERS__",n=>oe=n),Ct=t("__VUE_SSR_SETTERS__",n=>St=n)}const Ot=e=>{const t=oe;return un(e),e.scope.on(),()=>{e.scope.off(),un(t)}},Mo=()=>{oe&&oe.scope.off(),un(null)};function Eo(e){return e.vnode.shapeFlag&4}let St=!1;function qi(e,t=!1,n=!1){t&&Ct(t);const{props:s,children:o}=e.vnode,r=Eo(e);Oi(e,s,r,t),Ei(e,o,n||t);const i=r?zi(e,t):void 0;return t&&Ct(!1),i}function zi(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,hi);const{setup:s}=n;if(s){me();const o=e.setupContext=s.length>1?Ji(e):null,r=Ot(e),i=ot(s,e,0,[e.props,o]),l=is(i);if($e(),r(),(l||e.sp)&&!xt(e)&&zs(e),l){if(i.then(Mo,Mo),t)return i.then(a=>{Ct(!0);try{To(e,a,t)}finally{Ct(!1)}}).catch(a=>{Yt(a,e,0)});e.asyncDep=i}else To(e,i)}else Po(e)}function To(e,t,n){E(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:k(t)&&(e.setupState=Fs(t)),Po(e)}function Po(e,t,n){const s=e.type;e.render||(e.render=s.render||be);{const o=Ot(e);me();try{pi(e)}finally{$e(),o()}}}const Gi={get(e,t){return ee(e,"get",""),e[t]}};function Ji(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Gi),slots:e.slots,emit:e.emit,expose:t}}function Yn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Fs(Tr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in vt)return vt[n](e)},has(t,n){return n in t||n in vt}})):e.proxy}const Yi=/(?:^|[-_])\w/g,Zi=e=>e.replace(Yi,t=>t.toUpperCase()).replace(/[-_]/g,"");function Qi(e,t=!0){return E(e)?e.displayName||e.name:e.name||t&&e.__name}function Io(e,t,n=!1){let s=Qi(t);if(!s&&t.__file){const o=t.__file.match(/([^/\\]+)\.\w+$/);o&&(s=o[1])}if(!s&&e){const o=r=>{for(const i in r)if(r[i]===t)return i};s=o(e.components)||e.parent&&o(e.parent.type.components)||o(e.appContext.components)}return s?Zi(s):n?"App":"Anonymous"}function el(e){return E(e)&&"__vccOpts"in e}const Le=(e,t)=>Fr(e,t,St),tl="3.5.42";/** * @vue/runtime-dom v3.5.42 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Zn;const Fo=typeof window<"u"&&window.trustedTypes;if(Fo)try{Zn=Fo.createPolicy("vue",{createHTML:e=>e})}catch{}const Ro=Zn?e=>Zn.createHTML(e):e=>e,nl="http://www.w3.org/2000/svg",sl="http://www.w3.org/1998/Math/MathML",ke=typeof document<"u"?document:null,ko=ke&&ke.createElement("template"),ol={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?ke.createElementNS(nl,e):t==="mathml"?ke.createElementNS(sl,e):n?ke.createElement(e,{is:n}):ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>ke.createTextNode(e),createComment:e=>ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,r){const i=n?n.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===r||!(o=o.nextSibling)););else{ko.innerHTML=Ro(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=ko.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},rl=Symbol("_vtc");function il(e,t,n){const s=e[rl];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const jo=Symbol("_vod"),ll=Symbol("_vsh"),cl=Symbol(""),al=/(?:^|;)\s*display\s*:/;function ul(e,t,n){const s=e.style,o=K(n);let r=!1;if(n&&!o){if(t)if(K(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Dt(s,l,"")}else for(const i in t)n[i]==null&&Dt(s,i,"");for(const i in n){i==="display"&&(r=!0);const l=n[i];l!=null?dl(e,i,!K(t)&&t?t[i]:void 0,l)||Dt(s,i,l):Dt(s,i,"")}}else if(o){if(t!==n){const i=s[cl];i&&(n+=";"+i),s.cssText=n,r=al.test(n)}}else t&&e.removeAttribute("style");jo in e&&(e[jo]=r?s.display:"",e[ll]&&(s.display="none"))}const fn=/\s*!important$/;function Dt(e,t,n){if(S(n))n.forEach(s=>Dt(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))fn.test(n)?e.setProperty(t,n.replace(fn,""),"important"):e.setProperty(t,n);else{const s=fl(e,t);fn.test(n)?e.setProperty(ue(s),n.replace(fn,""),"important"):e[s]=n}}const Bo=["Webkit","Moz","ms"],Qn={};function fl(e,t){const n=Qn[t];if(n)return n;let s=ie(t);if(s!=="filter"&&s in e)return Qn[t]=s;s=cs(s);for(let o=0;oes||($l.then(()=>es=0),es=Date.now());function vl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(S(o)){const r=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{r.call(s),s._stopped=!0};const i=o.slice(),l=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,yl=(e,t,n,s,o,r)=>{const i=o==="svg";t==="class"?il(e,s,i):t==="style"?ul(e,n,s):Ft(t)?Rt(t)||gl(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Al(e,t,s,i))?(Ho(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Vo(e,t,s,i,r,t!=="value")):e._isVueCE&&(Ll(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!K(s)))?Ho(e,ie(t),s,r,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Vo(e,t,s,i))};function Al(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ko(t)&&T(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Ko(t)&&K(n)?!1:t in e}function Ll(e,t){const n=e._def.props;if(!n)return!1;const s=ie(t);return Array.isArray(n)?n.some(o=>ie(o)===s):Object.keys(n).some(o=>ie(o)===s)}const Wo={};function wl(e,t,n){let s=Qr(e,t);jt(s)&&(s=z({},s,t));class o extends ts{constructor(i){super(s,i,n)}}return o.def=s,o}const Nl=typeof HTMLElement<"u"?HTMLElement:class{};class ts extends Nl{constructor(t,n={},s=Go){super(),this._def=t,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._styleAnchors=new WeakMap,this._ob=null,this.shadowRoot&&s!==Go?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(z({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.assignedSlot||t.parentNode||t.host);)if(t instanceof ts){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{if(this._pendingResolve=void 0,this.isConnected)return this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,js(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return this._pendingResolve;for(let s=0;s{this._resolved=!0,this._pendingResolve=void 0;const{props:r,styles:i}=s;let l;if(r&&!S(r))for(const a in r){const d=r[a];(d===Number||d&&d.type===Number)&&(a in this._props&&(this._props[a]=us(this._props[a])),(l||(l=Object.create(null)))[ie(a)]=!0)}this._numberProps=l,this._resolveProps(s),this.shadowRoot&&this._applyStyles(i),this._mount(s)},n=this._def.__asyncLoader;if(n)return this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,t(this._def=s,!0)}),this._pendingResolve;t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const s in n)F(this,s)||Object.defineProperty(this,s,{get:()=>Is(n[s])})}_resolveProps(t){const{props:n}=t,s=S(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&s.includes(o)&&this._setProp(o,this[o]);for(const o of s.map(ie))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(r){this._setProp(o,r,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let s=n?this.getAttribute(t):Wo;const o=ie(t);n&&this._numberProps&&this._numberProps[o]&&(s=us(s)),this._setProp(o,s,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,o=!1){if(n!==this._props[t]&&(this._dirty=!0,n===Wo?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),o&&this._instance&&this._update(),s)){const r=this._ob;r&&(this._processMutations(r.takeRecords()),r.disconnect()),n===!0?this.setAttribute(ue(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(ue(t),n+""):n||this.removeAttribute(ue(t)),r&&r.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),Ol(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=He(this._def,z(t,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0;const o=(r,i)=>{this.dispatchEvent(new CustomEvent(r,jt(i[0])?z({detail:i},i[0]):{detail:i}))};s.emit=(r,...i)=>{o(r,i),ue(r)!==r&&o(ue(r),i)},this._setParent()}),n}_applyStyles(t,n,s){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const o=this._nonce,r=this.shadowRoot,i=s?this._getStyleAnchor(s)||this._getStyleAnchor(this._def):this._getRootStyleInsertionAnchor(r);let l=null;for(let a=t.length-1;a>=0;a--){const d=document.createElement("style");o&&d.setAttribute("nonce",o),d.textContent=t[a],r.insertBefore(d,l||i),l=d,a===0&&(s||this._styleAnchors.set(this._def,d),n&&this._styleAnchors.set(n,d))}}_getStyleAnchor(t){if(!t)return null;const n=this._styleAnchors.get(t);return n&&n.parentNode===this.shadowRoot?n:(n&&this._styleAnchors.delete(t),null)}_getRootStyleInsertionAnchor(t){for(let n=0;n{zo().render(...e)},Go=(...e)=>{const t=zo().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=Dl(s);if(!o)return;const r=t._component;!T(r)&&!r.render&&!r.template&&(r.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=n(o,!1,Sl(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t};function Sl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Dl(e){return K(e)?document.querySelector(e):e}const Ml={kicker:"DOXA · الرؤية",title:"كل شعب. كل مكان.",tagline:"من كل مجموعات الشعوب في العالم إلى التي تصلي لأجلها DOXA، محسوبةً من البيانات.",funnelLabel:"من كل مجموعات الشعوب إلى مجموعات شعوب DOXA",allLabel:"مجموعات الشعوب",allNote:"كل مجموعة شعب، في كل بلد تعيش فيه",unreachedLabel:"غير المُبشَّرة",unreachedNote:"أقل من 2% إنجيليون",frontierLabel:"الحدودية",frontierNote:"أقل من 0.1% إنجيليون",doxaLabel:"مجموعات شعوب DOXA",doxaNote:"{frontier} منها حدودية",people:"{n} نسمة",sources:"مجموعات الشعوب: {imb}، بيانات {date}. قائمة DOXA: ‏pray.doxa.life، {date2}.",howCounted:"كيف تُحسب هذه الأرقام",ruleAll:"كل صف في بيانات IMB لمجموعات الشعوب: مجموعة شعب واحدة في بلد واحد.",ruleUnreached:"أولوية الضياع لدى IMB من 0 إلى 2: أقل من 2% إنجيليون.",ruleFrontier:"أولوية الضياع لدى IMB رقم 0: أقل من 0.1% إنجيليون. جزء من غير المُبشَّرة.",ruleDoxa:"كل مجموعة في قائمة صلاة DOXA، مطابَقة مع بيانات IMB حسب الشعب والبلد. ليست كلها حدودية."},El={kicker:"DOXA · Vision",title:"Jedes Volk. Jeder Ort.",tagline:"Von allen Volksgruppen der Welt bis zu denen, für die DOXA betet, aus den Daten gezählt.",funnelLabel:"Von allen Volksgruppen zu den DOXA-Volksgruppen",allLabel:"Volksgruppen",allNote:"jede Volksgruppe in jedem Land, in dem sie lebt",unreachedLabel:"Unerreicht",unreachedNote:"unter 2 % Evangelikale",frontierLabel:"Frontier",frontierNote:"unter 0,1 % Evangelikale",doxaLabel:"DOXA-Volksgruppen",doxaNote:"{frontier} davon sind Frontier",people:"{n} Menschen",sources:"Volksgruppen: {imb}, Datenstand {date}. DOXA-Liste: pray.doxa.life, {date2}.",howCounted:"So wird gezählt",ruleAll:"Jede Zeile der IMB-Volksgruppendaten: eine Volksgruppe in einem Land.",ruleUnreached:"IMB-Lostness-Priorität 0 bis 2: weniger als 2 % Evangelikale.",ruleFrontier:"IMB-Lostness-Priorität 0: weniger als 0,1 % Evangelikale. Eine Teilmenge der Unerreichten.",ruleDoxa:"Jede Gruppe auf der DOXA-Gebetsliste, den IMB-Daten nach Volk und Land zugeordnet. Nicht alle sind Frontier."},Tl={kicker:"DOXA · Vision",title:"Every people. Every place.",tagline:"From every people group on earth to the ones DOXA prays for, counted from the data.",funnelLabel:"From all people groups to DOXA people groups",allLabel:"People groups",allNote:"each people group, in each country it lives in",unreachedLabel:"Unreached",unreachedNote:"under 2% evangelical",frontierLabel:"Frontier",frontierNote:"under 0.1% evangelical",doxaLabel:"DOXA people groups",doxaNote:"{frontier} of them are frontier",people:"{n} people",sources:"People groups: {imb}, data of {date}. DOXA list: pray.doxa.life, {date2}.",howCounted:"How these are counted",ruleAll:"Every row of the IMB people-group data: one people group in one country.",ruleUnreached:"IMB lostness priority 0 to 2: less than 2% evangelical.",ruleFrontier:"IMB lostness priority 0: less than 0.1% evangelical. A subset of the unreached.",ruleDoxa:"Every group on the DOXA prayer list, matched to the IMB data by people and country. Not all are frontier."},Pl={kicker:"DOXA · Visión",title:"Cada pueblo. Cada lugar.",tagline:"De todos los grupos étnicos del mundo a aquellos por los que DOXA ora, contados a partir de los datos.",funnelLabel:"De todos los grupos étnicos a los grupos étnicos de DOXA",allLabel:"Grupos étnicos",allNote:"cada grupo étnico, en cada país donde vive",unreachedLabel:"No alcanzados",unreachedNote:"menos del 2 % evangélicos",frontierLabel:"Frontera",frontierNote:"menos del 0,1 % evangélicos",doxaLabel:"Grupos étnicos de DOXA",doxaNote:"{frontier} de ellos son de frontera",people:"{n} personas",sources:"Grupos étnicos: {imb}, datos de {date}. Lista de DOXA: pray.doxa.life, {date2}.",howCounted:"Cómo se cuentan",ruleAll:"Cada fila de los datos de grupos étnicos del IMB: un grupo étnico en un país.",ruleUnreached:"Prioridad de perdición del IMB de 0 a 2: menos del 2 % evangélicos.",ruleFrontier:"Prioridad de perdición del IMB 0: menos del 0,1 % evangélicos. Un subconjunto de los no alcanzados.",ruleDoxa:"Cada grupo de la lista de oración de DOXA, vinculado a los datos del IMB por pueblo y país. No todos son de frontera."},Il={kicker:"DOXA · Vision",title:"Chaque peuple. Chaque lieu.",tagline:"De tous les groupes ethniques du monde à ceux pour qui DOXA prie, comptés à partir des données.",funnelLabel:"De tous les groupes ethniques aux groupes ethniques DOXA",allLabel:"Groupes ethniques",allNote:"chaque groupe ethnique, dans chaque pays où il vit",unreachedLabel:"Non atteints",unreachedNote:"moins de 2 % d’évangéliques",frontierLabel:"Frontière",frontierNote:"moins de 0,1 % d’évangéliques",doxaLabel:"Groupes ethniques DOXA",doxaNote:"dont {frontier} de frontière",people:"{n} personnes",sources:"Groupes ethniques : {imb}, données du {date}. Liste DOXA : pray.doxa.life, {date2}.",howCounted:"Comment ces chiffres sont comptés",ruleAll:"Chaque ligne des données IMB : un groupe ethnique dans un pays.",ruleUnreached:"Priorité de perdition IMB 0 à 2 : moins de 2 % d’évangéliques.",ruleFrontier:"Priorité de perdition IMB 0 : moins de 0,1 % d’évangéliques. Un sous-ensemble des non-atteints.",ruleDoxa:"Chaque groupe de la liste de prière DOXA, rapproché des données IMB par peuple et pays. Tous ne sont pas de frontière."},Fl={kicker:"DOXA · दर्शन",title:"हर जनसमूह। हर स्थान।",tagline:"दुनिया के हर जनसमूह से उन तक जिनके लिए DOXA प्रार्थना करता है, आँकड़ों से गिने गए।",funnelLabel:"सभी जनसमूहों से DOXA जनसमूहों तक",allLabel:"जनसमूह",allNote:"हर जनसमूह, हर उस देश में जहाँ वह रहता है",unreachedLabel:"अप्रचारित",unreachedNote:"2% से कम इवेंजेलिकल",frontierLabel:"सीमांत",frontierNote:"0.1% से कम इवेंजेलिकल",doxaLabel:"DOXA जनसमूह",doxaNote:"इनमें से {frontier} सीमांत हैं",people:"{n} लोग",sources:"जनसमूह: {imb}, {date} के आँकड़े। DOXA सूची: pray.doxa.life, {date2}।",howCounted:"ये कैसे गिने गए",ruleAll:"IMB जनसमूह आँकड़ों की हर पंक्ति: एक देश में एक जनसमूह।",ruleUnreached:"IMB लॉस्टनेस प्राथमिकता 0 से 2: 2% से कम इवेंजेलिकल।",ruleFrontier:"IMB लॉस्टनेस प्राथमिकता 0: 0.1% से कम इवेंजेलिकल। अप्रचारितों का एक भाग।",ruleDoxa:"DOXA प्रार्थना सूची का हर समूह, जनसमूह और देश के आधार पर IMB आँकड़ों से मिलाया गया। सभी सीमांत नहीं हैं।"},Rl={kicker:"DOXA · Visione",title:"Ogni popolo. Ogni luogo.",tagline:"Da tutti i gruppi etnici del mondo a quelli per cui DOXA prega, contati dai dati.",funnelLabel:"Da tutti i gruppi etnici ai gruppi etnici DOXA",allLabel:"Gruppi etnici",allNote:"ogni gruppo etnico, in ogni paese in cui vive",unreachedLabel:"Non raggiunti",unreachedNote:"meno del 2% evangelici",frontierLabel:"Frontiera",frontierNote:"meno dello 0,1% evangelici",doxaLabel:"Gruppi etnici DOXA",doxaNote:"{frontier} di questi sono di frontiera",people:"{n} persone",sources:"Gruppi etnici: {imb}, dati del {date}. Elenco DOXA: pray.doxa.life, {date2}.",howCounted:"Come vengono contati",ruleAll:"Ogni riga dei dati IMB sui gruppi etnici: un gruppo etnico in un paese.",ruleUnreached:"Priorità di perdizione IMB da 0 a 2: meno del 2% evangelici.",ruleFrontier:"Priorità di perdizione IMB 0: meno dello 0,1% evangelici. Un sottoinsieme dei non raggiunti.",ruleDoxa:"Ogni gruppo dell’elenco di preghiera DOXA, abbinato ai dati IMB per popolo e paese. Non tutti sono di frontiera."},kl={kicker:"DOXA · Visão",title:"Cada povo. Cada lugar.",tagline:"De todos os grupos étnicos do mundo àqueles pelos quais a DOXA ora, contados a partir dos dados.",funnelLabel:"De todos os grupos étnicos aos grupos étnicos da DOXA",allLabel:"Grupos étnicos",allNote:"cada grupo étnico, em cada país onde vive",unreachedLabel:"Não alcançados",unreachedNote:"menos de 2% evangélicos",frontierLabel:"Fronteira",frontierNote:"menos de 0,1% evangélicos",doxaLabel:"Grupos étnicos da DOXA",doxaNote:"{frontier} deles são de fronteira",people:"{n} pessoas",sources:"Grupos étnicos: {imb}, dados de {date}. Lista da DOXA: pray.doxa.life, {date2}.",howCounted:"Como são contados",ruleAll:"Cada linha dos dados de grupos étnicos do IMB: um grupo étnico em um país.",ruleUnreached:"Prioridade de perdição do IMB de 0 a 2: menos de 2% evangélicos.",ruleFrontier:"Prioridade de perdição do IMB 0: menos de 0,1% evangélicos. Um subconjunto dos não alcançados.",ruleDoxa:"Cada grupo da lista de oração da DOXA, associado aos dados do IMB por povo e país. Nem todos são de fronteira."},jl={kicker:"DOXA · Viziune",title:"Fiecare popor. Fiecare loc.",tagline:"De la toate grupurile etnice ale lumii la cele pentru care se roagă DOXA, numărate din date.",funnelLabel:"De la toate grupurile etnice la grupurile etnice DOXA",allLabel:"Grupuri etnice",allNote:"fiecare grup etnic, în fiecare țară în care trăiește",unreachedLabel:"Neatinse",unreachedNote:"sub 2% evanghelici",frontierLabel:"Frontieră",frontierNote:"sub 0,1% evanghelici",doxaLabel:"Grupuri etnice DOXA",doxaNote:"{frontier} dintre ele sunt de frontieră",people:"{n} oameni",sources:"Grupuri etnice: {imb}, date din {date}. Lista DOXA: pray.doxa.life, {date2}.",howCounted:"Cum sunt numărate",ruleAll:"Fiecare rând din datele IMB despre grupuri etnice: un grup etnic într-o țară.",ruleUnreached:"Prioritatea de pierzare IMB 0–2: sub 2% evanghelici.",ruleFrontier:"Prioritatea de pierzare IMB 0: sub 0,1% evanghelici. O submulțime a celor neatinse.",ruleDoxa:"Fiecare grup de pe lista de rugăciune DOXA, potrivit cu datele IMB după popor și țară. Nu toate sunt de frontieră."},Bl={kicker:"DOXA · Видение",title:"Каждый народ. Каждое место.",tagline:"От всех народов мира до тех, за кого молится DOXA, — по данным.",funnelLabel:"От всех народов до народов DOXA",allLabel:"Народы",allNote:"каждый народ в каждой стране, где он живёт",unreachedLabel:"Недостигнутые",unreachedNote:"менее 2% евангельских христиан",frontierLabel:"Рубежные",frontierNote:"менее 0,1% евангельских христиан",doxaLabel:"Народы DOXA",doxaNote:"из них рубежных: {frontier}",people:"{n} человек",sources:"Народы: {imb}, данные на {date}. Список DOXA: pray.doxa.life, {date2}.",howCounted:"Как это посчитано",ruleAll:"Каждая строка данных IMB о народах: один народ в одной стране.",ruleUnreached:"Приоритет IMB 0–2: менее 2% евангельских христиан.",ruleFrontier:"Приоритет IMB 0: менее 0,1% евангельских христиан. Часть недостигнутых.",ruleDoxa:"Каждая группа из молитвенного списка DOXA, сопоставленная с данными IMB по народу и стране. Не все из них рубежные."},Ul={kicker:"DOXA · 异象",title:"每一个民族,每一个地方。",tagline:"从世界上所有族群到 DOXA 为之祷告的族群,全部依据数据计算。",funnelLabel:"从所有族群到 DOXA 族群",allLabel:"族群",allNote:"每个族群在其居住的每个国家各计一次",unreachedLabel:"未得之民",unreachedNote:"福音派信徒少于 2%",frontierLabel:"前沿族群",frontierNote:"福音派信徒少于 0.1%",doxaLabel:"DOXA 族群",doxaNote:"其中 {frontier} 个为前沿族群",people:"{n} 人",sources:"族群:{imb},数据日期 {date}。DOXA 名单:pray.doxa.life,{date2}。",howCounted:"这些数字如何计算",ruleAll:"IMB 族群数据的每一行:一个国家中的一个族群。",ruleUnreached:"IMB 迷失优先级 0 至 2:福音派信徒少于 2%。",ruleFrontier:"IMB 迷失优先级 0:福音派信徒少于 0.1%。属于未得之民的一部分。",ruleDoxa:"DOXA 祷告名单上的每个族群,按民族和国家与 IMB 数据匹配。并非全部都是前沿族群。"},Mt={sources:{imb:{publisher:"IMB / peoplegroups.org",captured:"2026-07-16"},doxa:{fetched:"2026-09-25"}},steps:[{id:"all",groups:12379,population:8288563969},{id:"unreached",groups:7341,population:4893057899},{id:"frontier",groups:4754,population:2813855464},{id:"doxa",groups:2107,population:209079159,frontier:1745,unreached:2082,matched:2091,unmatched:16}]},Vl=":host{display:block}.vc-root{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;display:flex;align-items:flex-start;justify-content:center;padding:24px 16px;box-sizing:border-box;background:#f3f3f1;color:#3b463d;font-family:Public Sans,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;-webkit-font-smoothing:antialiased}.vc-card{width:100%;max-width:640px;box-sizing:border-box;background:#fff;border:1px solid #d1d4cd;border-radius:16px;box-shadow:0 1px 2px #3b463d0f,0 8px 24px -12px #3b463d2e;padding:28px 28px 20px}.vc-kicker{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#6d766e}.vc-mark{width:8px;height:8px;border-radius:50%;background:var(--accent)}.vc-title{margin:10px 0 6px;font-size:clamp(22px,4.2vw,30px);line-height:1.15;font-weight:800;color:#3b463d}.vc-tagline{margin:0 0 22px;font-size:15px;line-height:1.5;color:#6d766e}.vc-funnel{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.vc-bar-row{display:flex;justify-content:center}.vc-bar{box-sizing:border-box;min-height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;padding:0 10px;background:var(--accent);color:#1d2a1f;animation:vc-grow .7s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--i) * 90ms);transform-origin:center}.vc-step-all .vc-bar{background:#dfe7df}.vc-step-unreached .vc-bar{background:#c3d5c4}.vc-step-frontier .vc-bar{background:#a8c3aa}.vc-step-doxa .vc-bar{background:#3b463d;color:#fff}.vc-n{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}.vc-caption{display:flex;flex-direction:column;align-items:center;gap:2px;margin-top:6px;text-align:center}.vc-label{font-size:14px;font-weight:700;color:#3b463d}.vc-note{font-size:12.5px;color:#6d766e}@keyframes vc-grow{0%{transform:scaleX(.2);opacity:0}to{transform:scaleX(1);opacity:1}}@media (prefers-reduced-motion: reduce){.vc-bar{animation:none}}.vc-how{margin-top:22px;border-top:1px solid #e6e8e3;padding-top:12px;font-size:13px;color:#3b463d}.vc-how summary{cursor:pointer;font-weight:700;color:#3b463d}.vc-how summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.vc-how ul{margin:8px 0 0;padding-inline-start:18px;line-height:1.55;color:#3b463d}.vc-source{margin:12px 0 0;font-size:11.5px;line-height:1.5;color:#6d766e}",Hl=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},Xl=["dir","lang"],Kl={class:"vc-card"},Wl={class:"vc-kicker"},ql={class:"vc-title"},zl={class:"vc-tagline"},Gl=["aria-label"],Jl={class:"vc-bar-row"},Yl={class:"vc-n"},Zl={class:"vc-caption"},Ql={class:"vc-label"},ec={class:"vc-note"},tc={class:"vc-how"},nc={class:"vc-source"},sc=wl(Hl({__name:"doxa-vision-card",props:{profileConfig:{type:String,default:""}},setup(e){const t={};for(const[N,P]of Object.entries(Object.assign({"../../library/i18n/locales/ar/vision.json":Ml,"../../library/i18n/locales/de/vision.json":El,"../../library/i18n/locales/en/vision.json":Tl,"../../library/i18n/locales/es/vision.json":Pl,"../../library/i18n/locales/fr/vision.json":Il,"../../library/i18n/locales/hi/vision.json":Fl,"../../library/i18n/locales/it/vision.json":Rl,"../../library/i18n/locales/pt/vision.json":kl,"../../library/i18n/locales/ro/vision.json":jl,"../../library/i18n/locales/ru/vision.json":Bl,"../../library/i18n/locales/zh/vision.json":Ul}))){const E=N.match(/locales\/([^/]+)\/vision\.json$/);E&&(t[E[1]]=P)}const n=e,s=we(()=>{if(!n.profileConfig)return{};try{return JSON.parse(n.profileConfig)||{}}catch{return{}}}),o=we(()=>{const N=String(s.value.locale||typeof document<"u"&&document.documentElement.lang||"en"),P=N.split("-")[0].toLowerCase();return t[N]?N:t[P]?P:"en"}),r=we(()=>o.value==="ar"?"rtl":"ltr");function i(N,P){let E=(t[o.value]||{})[N]||(t.en||{})[N]||N;if(P)for(const w in P)E=E.split("{"+w+"}").join(String(P[w]));return E}const l=N=>new Intl.NumberFormat(o.value).format(N),a=N=>new Intl.NumberFormat(o.value,{notation:"compact",maximumFractionDigits:1}).format(N),d=N=>{try{return new Intl.DateTimeFormat(o.value,{year:"numeric",month:"long",day:"numeric"}).format(new Date(N+"T00:00:00Z"))}catch{return N}},f=we(()=>s.value.accent||"#92b195"),p=we(()=>s.value.title||i("title")),A=we(()=>s.value.tagline||i("tagline")),L=Mt.steps[0].groups,k=we(()=>Mt.steps.map(N=>({id:N.id,groups:l(N.groups),population:i("people",{n:a(N.population)}),label:i(N.id+"Label"),note:N.id==="doxa"?i("doxaNote",{frontier:l(N.frontier)}):i(N.id+"Note"),width:Math.max(24,Math.round(N.groups/L*100))}))),M=we(()=>["ruleAll","ruleUnreached","ruleFrontier","ruleDoxa"].map(N=>i(N))),q=we(()=>i("sources",{imb:Mt.sources.imb.publisher,date:d(Mt.sources.imb.captured),date2:d(Mt.sources.doxa.fetched)}));return(N,P)=>(At(),wt("div",{class:"vc-root",dir:r.value,lang:o.value,style:ft({"--accent":f.value})},[Y("article",Kl,[Y("div",Wl,[P[0]||(P[0]=Y("span",{class:"vc-mark","aria-hidden":"true"},null,-1)),Do(fe(i("kicker")),1)]),Y("h1",ql,fe(p.value),1),Y("p",zl,fe(A.value),1),Y("ol",{class:"vc-funnel","aria-label":i("funnelLabel")},[(At(!0),wt(ge,null,Qs(k.value,(E,w)=>(At(),wt("li",{key:E.id,class:Vt(["vc-step","vc-step-"+E.id])},[Y("div",Jl,[Y("div",{class:"vc-bar",style:ft({width:E.width+"%","--i":w})},[Y("span",Yl,fe(E.groups),1)],4)]),Y("div",Zl,[Y("span",Ql,fe(E.label),1),Y("span",ec,fe(E.note)+" · "+fe(E.population),1)])],2))),128))],8,Gl),Y("details",tc,[Y("summary",null,fe(i("howCounted")),1),Y("ul",null,[(At(!0),wt(ge,null,Qs(M.value,(E,w)=>(At(),wt("li",{key:w},fe(E),1))),128))])]),Y("p",nc,fe(q.value),1)])],12,Xl))}},[["styles",[Vl]]]));typeof customElements<"u"&&!customElements.get("doxa-vision-card")&&customElements.define("doxa-vision-card",sc)})(); +**/let Zn;const Fo=typeof window<"u"&&window.trustedTypes;if(Fo)try{Zn=Fo.createPolicy("vue",{createHTML:e=>e})}catch{}const Ro=Zn?e=>Zn.createHTML(e):e=>e,nl="http://www.w3.org/2000/svg",sl="http://www.w3.org/1998/Math/MathML",ke=typeof document<"u"?document:null,ko=ke&&ke.createElement("template"),ol={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?ke.createElementNS(nl,e):t==="mathml"?ke.createElementNS(sl,e):n?ke.createElement(e,{is:n}):ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>ke.createTextNode(e),createComment:e=>ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,r){const i=n?n.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===r||!(o=o.nextSibling)););else{ko.innerHTML=Ro(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=ko.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},rl=Symbol("_vtc");function il(e,t,n){const s=e[rl];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const jo=Symbol("_vod"),ll=Symbol("_vsh"),cl=Symbol(""),al=/(?:^|;)\s*display\s*:/;function ul(e,t,n){const s=e.style,o=W(n);let r=!1;if(n&&!o){if(t)if(W(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Dt(s,l,"")}else for(const i in t)n[i]==null&&Dt(s,i,"");for(const i in n){i==="display"&&(r=!0);const l=n[i];l!=null?dl(e,i,!W(t)&&t?t[i]:void 0,l)||Dt(s,i,l):Dt(s,i,"")}}else if(o){if(t!==n){const i=s[cl];i&&(n+=";"+i),s.cssText=n,r=al.test(n)}}else t&&e.removeAttribute("style");jo in e&&(e[jo]=r?s.display:"",e[ll]&&(s.display="none"))}const fn=/\s*!important$/;function Dt(e,t,n){if(S(n))n.forEach(s=>Dt(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))fn.test(n)?e.setProperty(t,n.replace(fn,""),"important"):e.setProperty(t,n);else{const s=fl(e,t);fn.test(n)?e.setProperty(ue(s),n.replace(fn,""),"important"):e[s]=n}}const Bo=["Webkit","Moz","ms"],Qn={};function fl(e,t){const n=Qn[t];if(n)return n;let s=ie(t);if(s!=="filter"&&s in e)return Qn[t]=s;s=cs(s);for(let o=0;oes||($l.then(()=>es=0),es=Date.now());function vl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(S(o)){const r=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{r.call(s),s._stopped=!0};const i=o.slice(),l=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,yl=(e,t,n,s,o,r)=>{const i=o==="svg";t==="class"?il(e,s,i):t==="style"?ul(e,n,s):Ft(t)?Rt(t)||gl(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Al(e,t,s,i))?(Ho(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Vo(e,t,s,i,r,t!=="value")):e._isVueCE&&(wl(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!W(s)))?Ho(e,ie(t),s,r,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Vo(e,t,s,i))};function Al(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ko(t)&&E(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Ko(t)&&W(n)?!1:t in e}function wl(e,t){const n=e._def.props;if(!n)return!1;const s=ie(t);return Array.isArray(n)?n.some(o=>ie(o)===s):Object.keys(n).some(o=>ie(o)===s)}const Wo={};function Ll(e,t,n){let s=Qr(e,t);jt(s)&&(s=G({},s,t));class o extends ts{constructor(i){super(s,i,n)}}return o.def=s,o}const Nl=typeof HTMLElement<"u"?HTMLElement:class{};class ts extends Nl{constructor(t,n={},s=Go){super(),this._def=t,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._styleAnchors=new WeakMap,this._ob=null,this.shadowRoot&&s!==Go?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(G({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.assignedSlot||t.parentNode||t.host);)if(t instanceof ts){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{if(this._pendingResolve=void 0,this.isConnected)return this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,js(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return this._pendingResolve;for(let s=0;s{this._resolved=!0,this._pendingResolve=void 0;const{props:r,styles:i}=s;let l;if(r&&!S(r))for(const a in r){const d=r[a];(d===Number||d&&d.type===Number)&&(a in this._props&&(this._props[a]=us(this._props[a])),(l||(l=Object.create(null)))[ie(a)]=!0)}this._numberProps=l,this._resolveProps(s),this.shadowRoot&&this._applyStyles(i),this._mount(s)},n=this._def.__asyncLoader;if(n)return this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,t(this._def=s,!0)}),this._pendingResolve;t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const s in n)I(this,s)||Object.defineProperty(this,s,{get:()=>Is(n[s])})}_resolveProps(t){const{props:n}=t,s=S(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&s.includes(o)&&this._setProp(o,this[o]);for(const o of s.map(ie))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(r){this._setProp(o,r,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let s=n?this.getAttribute(t):Wo;const o=ie(t);n&&this._numberProps&&this._numberProps[o]&&(s=us(s)),this._setProp(o,s,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,o=!1){if(n!==this._props[t]&&(this._dirty=!0,n===Wo?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),o&&this._instance&&this._update(),s)){const r=this._ob;r&&(this._processMutations(r.takeRecords()),r.disconnect()),n===!0?this.setAttribute(ue(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(ue(t),n+""):n||this.removeAttribute(ue(t)),r&&r.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),Ol(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=He(this._def,G(t,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0;const o=(r,i)=>{this.dispatchEvent(new CustomEvent(r,jt(i[0])?G({detail:i},i[0]):{detail:i}))};s.emit=(r,...i)=>{o(r,i),ue(r)!==r&&o(ue(r),i)},this._setParent()}),n}_applyStyles(t,n,s){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const o=this._nonce,r=this.shadowRoot,i=s?this._getStyleAnchor(s)||this._getStyleAnchor(this._def):this._getRootStyleInsertionAnchor(r);let l=null;for(let a=t.length-1;a>=0;a--){const d=document.createElement("style");o&&d.setAttribute("nonce",o),d.textContent=t[a],r.insertBefore(d,l||i),l=d,a===0&&(s||this._styleAnchors.set(this._def,d),n&&this._styleAnchors.set(n,d))}}_getStyleAnchor(t){if(!t)return null;const n=this._styleAnchors.get(t);return n&&n.parentNode===this.shadowRoot?n:(n&&this._styleAnchors.delete(t),null)}_getRootStyleInsertionAnchor(t){for(let n=0;n{zo().render(...e)},Go=(...e)=>{const t=zo().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=Dl(s);if(!o)return;const r=t._component;!E(r)&&!r.render&&!r.template&&(r.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=n(o,!1,Sl(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t};function Sl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Dl(e){return W(e)?document.querySelector(e):e}const Ml={kicker:"DOXA · الرؤية",title:"كل شعب. كل مكان.",tagline:"من كل مجموعات الشعوب في العالم إلى التي تصلي لأجلها DOXA، محسوبةً من البيانات.",funnelLabel:"من كل مجموعات الشعوب إلى مجموعات شعوب DOXA",allLabel:"مجموعات الشعوب",allNote:"كل مجموعة شعب، في كل بلد تعيش فيه",unreachedLabel:"غير المُبشَّرة",unreachedNote:"أقل من 2% إنجيليون",frontierLabel:"الحدودية",frontierNote:"أقل من 0.1% إنجيليون",doxaLabel:"مجموعات شعوب DOXA",doxaNote:"{frontier} منها حدودية",people:"{n} نسمة",sources:"مجموعات الشعوب: {imb}، بيانات {date}. قائمة DOXA: ‏pray.doxa.life، {date2}.",howCounted:"كيف تُحسب هذه الأرقام",ruleAll:"كل صف في بيانات IMB لمجموعات الشعوب: مجموعة شعب واحدة في بلد واحد.",ruleUnreached:"أولوية الضياع لدى IMB من 0 إلى 2: أقل من 2% إنجيليون.",ruleFrontier:"أولوية الضياع لدى IMB رقم 0: أقل من 0.1% إنجيليون. جزء من غير المُبشَّرة.",ruleDoxa:"كل مجموعة في قائمة صلاة DOXA، مطابَقة مع بيانات IMB حسب الشعب والبلد. ليست كلها حدودية."},El={kicker:"DOXA · Vision",title:"Jedes Volk. Jeder Ort.",tagline:"Von allen Volksgruppen der Welt bis zu denen, für die DOXA betet, aus den Daten gezählt.",funnelLabel:"Von allen Volksgruppen zu den DOXA-Volksgruppen",allLabel:"Volksgruppen",allNote:"jede Volksgruppe in jedem Land, in dem sie lebt",unreachedLabel:"Unerreicht",unreachedNote:"unter 2 % Evangelikale",frontierLabel:"Frontier",frontierNote:"unter 0,1 % Evangelikale",doxaLabel:"DOXA-Volksgruppen",doxaNote:"{frontier} davon sind Frontier",people:"{n} Menschen",sources:"Volksgruppen: {imb}, Datenstand {date}. DOXA-Liste: pray.doxa.life, {date2}.",howCounted:"So wird gezählt",ruleAll:"Jede Zeile der IMB-Volksgruppendaten: eine Volksgruppe in einem Land.",ruleUnreached:"IMB-Lostness-Priorität 0 bis 2: weniger als 2 % Evangelikale.",ruleFrontier:"IMB-Lostness-Priorität 0: weniger als 0,1 % Evangelikale. Eine Teilmenge der Unerreichten.",ruleDoxa:"Jede Gruppe auf der DOXA-Gebetsliste, den IMB-Daten nach Volk und Land zugeordnet. Nicht alle sind Frontier."},Tl={kicker:"DOXA · Vision",title:"Every people. Every place.",tagline:"From every people group on earth to the ones DOXA prays for, counted from the data.",funnelLabel:"From all people groups to DOXA people groups",allLabel:"People groups",allNote:"each people group, in each country it lives in",unreachedLabel:"Unreached",unreachedNote:"under 2% evangelical",frontierLabel:"Frontier",frontierNote:"under 0.1% evangelical",doxaLabel:"DOXA people groups",doxaNote:"{frontier} of them are frontier",people:"{n} people",sources:"People groups: {imb}, data of {date}. DOXA list: pray.doxa.life, {date2}.",howCounted:"How these are counted",ruleAll:"Every row of the IMB people-group data: one people group in one country.",ruleUnreached:"IMB lostness priority 0 to 2: less than 2% evangelical.",ruleFrontier:"IMB lostness priority 0: less than 0.1% evangelical. A subset of the unreached.",ruleDoxa:"Every group on the DOXA prayer list, matched to the IMB data by people and country. Not all are frontier."},Pl={kicker:"DOXA · Visión",title:"Cada pueblo. Cada lugar.",tagline:"De todos los grupos étnicos del mundo a aquellos por los que DOXA ora, contados a partir de los datos.",funnelLabel:"De todos los grupos étnicos a los grupos étnicos de DOXA",allLabel:"Grupos étnicos",allNote:"cada grupo étnico, en cada país donde vive",unreachedLabel:"No alcanzados",unreachedNote:"menos del 2 % evangélicos",frontierLabel:"Frontera",frontierNote:"menos del 0,1 % evangélicos",doxaLabel:"Grupos étnicos de DOXA",doxaNote:"{frontier} de ellos son de frontera",people:"{n} personas",sources:"Grupos étnicos: {imb}, datos de {date}. Lista de DOXA: pray.doxa.life, {date2}.",howCounted:"Cómo se cuentan",ruleAll:"Cada fila de los datos de grupos étnicos del IMB: un grupo étnico en un país.",ruleUnreached:"Prioridad de perdición del IMB de 0 a 2: menos del 2 % evangélicos.",ruleFrontier:"Prioridad de perdición del IMB 0: menos del 0,1 % evangélicos. Un subconjunto de los no alcanzados.",ruleDoxa:"Cada grupo de la lista de oración de DOXA, vinculado a los datos del IMB por pueblo y país. No todos son de frontera."},Il={kicker:"DOXA · Vision",title:"Chaque peuple. Chaque lieu.",tagline:"De tous les groupes ethniques du monde à ceux pour qui DOXA prie, comptés à partir des données.",funnelLabel:"De tous les groupes ethniques aux groupes ethniques DOXA",allLabel:"Groupes ethniques",allNote:"chaque groupe ethnique, dans chaque pays où il vit",unreachedLabel:"Non atteints",unreachedNote:"moins de 2 % d’évangéliques",frontierLabel:"Frontière",frontierNote:"moins de 0,1 % d’évangéliques",doxaLabel:"Groupes ethniques DOXA",doxaNote:"dont {frontier} de frontière",people:"{n} personnes",sources:"Groupes ethniques : {imb}, données du {date}. Liste DOXA : pray.doxa.life, {date2}.",howCounted:"Comment ces chiffres sont comptés",ruleAll:"Chaque ligne des données IMB : un groupe ethnique dans un pays.",ruleUnreached:"Priorité de perdition IMB 0 à 2 : moins de 2 % d’évangéliques.",ruleFrontier:"Priorité de perdition IMB 0 : moins de 0,1 % d’évangéliques. Un sous-ensemble des non-atteints.",ruleDoxa:"Chaque groupe de la liste de prière DOXA, rapproché des données IMB par peuple et pays. Tous ne sont pas de frontière."},Fl={kicker:"DOXA · दर्शन",title:"हर जनसमूह। हर स्थान।",tagline:"दुनिया के हर जनसमूह से उन तक जिनके लिए DOXA प्रार्थना करता है, आँकड़ों से गिने गए।",funnelLabel:"सभी जनसमूहों से DOXA जनसमूहों तक",allLabel:"जनसमूह",allNote:"हर जनसमूह, हर उस देश में जहाँ वह रहता है",unreachedLabel:"अप्रचारित",unreachedNote:"2% से कम इवेंजेलिकल",frontierLabel:"सीमांत",frontierNote:"0.1% से कम इवेंजेलिकल",doxaLabel:"DOXA जनसमूह",doxaNote:"इनमें से {frontier} सीमांत हैं",people:"{n} लोग",sources:"जनसमूह: {imb}, {date} के आँकड़े। DOXA सूची: pray.doxa.life, {date2}।",howCounted:"ये कैसे गिने गए",ruleAll:"IMB जनसमूह आँकड़ों की हर पंक्ति: एक देश में एक जनसमूह।",ruleUnreached:"IMB लॉस्टनेस प्राथमिकता 0 से 2: 2% से कम इवेंजेलिकल।",ruleFrontier:"IMB लॉस्टनेस प्राथमिकता 0: 0.1% से कम इवेंजेलिकल। अप्रचारितों का एक भाग।",ruleDoxa:"DOXA प्रार्थना सूची का हर समूह, जनसमूह और देश के आधार पर IMB आँकड़ों से मिलाया गया। सभी सीमांत नहीं हैं।"},Rl={kicker:"DOXA · Visione",title:"Ogni popolo. Ogni luogo.",tagline:"Da tutti i gruppi etnici del mondo a quelli per cui DOXA prega, contati dai dati.",funnelLabel:"Da tutti i gruppi etnici ai gruppi etnici DOXA",allLabel:"Gruppi etnici",allNote:"ogni gruppo etnico, in ogni paese in cui vive",unreachedLabel:"Non raggiunti",unreachedNote:"meno del 2% evangelici",frontierLabel:"Frontiera",frontierNote:"meno dello 0,1% evangelici",doxaLabel:"Gruppi etnici DOXA",doxaNote:"{frontier} di questi sono di frontiera",people:"{n} persone",sources:"Gruppi etnici: {imb}, dati del {date}. Elenco DOXA: pray.doxa.life, {date2}.",howCounted:"Come vengono contati",ruleAll:"Ogni riga dei dati IMB sui gruppi etnici: un gruppo etnico in un paese.",ruleUnreached:"Priorità di perdizione IMB da 0 a 2: meno del 2% evangelici.",ruleFrontier:"Priorità di perdizione IMB 0: meno dello 0,1% evangelici. Un sottoinsieme dei non raggiunti.",ruleDoxa:"Ogni gruppo dell’elenco di preghiera DOXA, abbinato ai dati IMB per popolo e paese. Non tutti sono di frontiera."},kl={kicker:"DOXA · Visão",title:"Cada povo. Cada lugar.",tagline:"De todos os grupos étnicos do mundo àqueles pelos quais a DOXA ora, contados a partir dos dados.",funnelLabel:"De todos os grupos étnicos aos grupos étnicos da DOXA",allLabel:"Grupos étnicos",allNote:"cada grupo étnico, em cada país onde vive",unreachedLabel:"Não alcançados",unreachedNote:"menos de 2% evangélicos",frontierLabel:"Fronteira",frontierNote:"menos de 0,1% evangélicos",doxaLabel:"Grupos étnicos da DOXA",doxaNote:"{frontier} deles são de fronteira",people:"{n} pessoas",sources:"Grupos étnicos: {imb}, dados de {date}. Lista da DOXA: pray.doxa.life, {date2}.",howCounted:"Como são contados",ruleAll:"Cada linha dos dados de grupos étnicos do IMB: um grupo étnico em um país.",ruleUnreached:"Prioridade de perdição do IMB de 0 a 2: menos de 2% evangélicos.",ruleFrontier:"Prioridade de perdição do IMB 0: menos de 0,1% evangélicos. Um subconjunto dos não alcançados.",ruleDoxa:"Cada grupo da lista de oração da DOXA, associado aos dados do IMB por povo e país. Nem todos são de fronteira."},jl={kicker:"DOXA · Viziune",title:"Fiecare popor. Fiecare loc.",tagline:"De la toate grupurile etnice ale lumii la cele pentru care se roagă DOXA, numărate din date.",funnelLabel:"De la toate grupurile etnice la grupurile etnice DOXA",allLabel:"Grupuri etnice",allNote:"fiecare grup etnic, în fiecare țară în care trăiește",unreachedLabel:"Neatinse",unreachedNote:"sub 2% evanghelici",frontierLabel:"Frontieră",frontierNote:"sub 0,1% evanghelici",doxaLabel:"Grupuri etnice DOXA",doxaNote:"{frontier} dintre ele sunt de frontieră",people:"{n} oameni",sources:"Grupuri etnice: {imb}, date din {date}. Lista DOXA: pray.doxa.life, {date2}.",howCounted:"Cum sunt numărate",ruleAll:"Fiecare rând din datele IMB despre grupuri etnice: un grup etnic într-o țară.",ruleUnreached:"Prioritatea de pierzare IMB 0–2: sub 2% evanghelici.",ruleFrontier:"Prioritatea de pierzare IMB 0: sub 0,1% evanghelici. O submulțime a celor neatinse.",ruleDoxa:"Fiecare grup de pe lista de rugăciune DOXA, potrivit cu datele IMB după popor și țară. Nu toate sunt de frontieră."},Bl={kicker:"DOXA · Видение",title:"Каждый народ. Каждое место.",tagline:"От всех народов мира до тех, за кого молится DOXA, — по данным.",funnelLabel:"От всех народов до народов DOXA",allLabel:"Народы",allNote:"каждый народ в каждой стране, где он живёт",unreachedLabel:"Недостигнутые",unreachedNote:"менее 2% евангельских христиан",frontierLabel:"Рубежные",frontierNote:"менее 0,1% евангельских христиан",doxaLabel:"Народы DOXA",doxaNote:"из них рубежных: {frontier}",people:"{n} человек",sources:"Народы: {imb}, данные на {date}. Список DOXA: pray.doxa.life, {date2}.",howCounted:"Как это посчитано",ruleAll:"Каждая строка данных IMB о народах: один народ в одной стране.",ruleUnreached:"Приоритет IMB 0–2: менее 2% евангельских христиан.",ruleFrontier:"Приоритет IMB 0: менее 0,1% евангельских христиан. Часть недостигнутых.",ruleDoxa:"Каждая группа из молитвенного списка DOXA, сопоставленная с данными IMB по народу и стране. Не все из них рубежные."},Ul={kicker:"DOXA · 异象",title:"每一个民族,每一个地方。",tagline:"从世界上所有族群到 DOXA 为之祷告的族群,全部依据数据计算。",funnelLabel:"从所有族群到 DOXA 族群",allLabel:"族群",allNote:"每个族群在其居住的每个国家各计一次",unreachedLabel:"未得之民",unreachedNote:"福音派信徒少于 2%",frontierLabel:"前沿族群",frontierNote:"福音派信徒少于 0.1%",doxaLabel:"DOXA 族群",doxaNote:"其中 {frontier} 个为前沿族群",people:"{n} 人",sources:"族群:{imb},数据日期 {date}。DOXA 名单:pray.doxa.life,{date2}。",howCounted:"这些数字如何计算",ruleAll:"IMB 族群数据的每一行:一个国家中的一个族群。",ruleUnreached:"IMB 迷失优先级 0 至 2:福音派信徒少于 2%。",ruleFrontier:"IMB 迷失优先级 0:福音派信徒少于 0.1%。属于未得之民的一部分。",ruleDoxa:"DOXA 祷告名单上的每个族群,按民族和国家与 IMB 数据匹配。并非全部都是前沿族群。"},Mt={sources:{imb:{publisher:"IMB / peoplegroups.org",captured:"2026-07-16"},doxa:{fetched:"2026-09-25"}},steps:[{id:"all",groups:12379,population:8288563969},{id:"unreached",groups:7341,population:4893057899},{id:"frontier",groups:4754,population:2813855464},{id:"doxa",groups:2107,population:209079159,frontier:1745,unreached:2082,matched:2091,unmatched:16}]},Vl=":host{display:block}.vc-root{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;display:flex;align-items:flex-start;justify-content:center;padding:24px 16px;box-sizing:border-box;background:#f3f3f1;color:#3b463d;font-family:Public Sans,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;-webkit-font-smoothing:antialiased}.vc-card{width:100%;max-width:640px;box-sizing:border-box;background:#fff;border:1px solid #d1d4cd;border-radius:16px;box-shadow:0 1px 2px #3b463d0f,0 8px 24px -12px #3b463d2e;padding:28px 28px 20px}.vc-kicker{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#6d766e}.vc-mark{width:8px;height:8px;border-radius:50%;background:var(--accent)}.vc-title{margin:10px 0 6px;font-size:clamp(22px,4.2vw,30px);line-height:1.15;font-weight:800;color:#3b463d}.vc-tagline{margin:0 0 22px;font-size:15px;line-height:1.5;color:#6d766e}.vc-funnel{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.vc-bar-row{display:flex;justify-content:center}.vc-bar{box-sizing:border-box;min-height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;padding:0 10px;background:var(--accent);color:#1d2a1f;animation:vc-grow .7s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--i) * 90ms);transform-origin:center}.vc-step-all .vc-bar{background:#dfe7df}.vc-step-unreached .vc-bar{background:#c3d5c4}.vc-step-frontier .vc-bar{background:#a8c3aa}.vc-step-doxa .vc-bar{background:#3b463d;color:#fff}.vc-n{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}.vc-caption{display:flex;flex-direction:column;align-items:center;gap:2px;margin-top:6px;text-align:center}.vc-label{font-size:14px;font-weight:700;color:#3b463d}.vc-note{font-size:12.5px;color:#6d766e}@keyframes vc-grow{0%{transform:scaleX(.2);opacity:0}to{transform:scaleX(1);opacity:1}}@media (prefers-reduced-motion: reduce){.vc-bar{animation:none}}.vc-how{margin-top:22px;border-top:1px solid #e6e8e3;padding-top:12px;font-size:13px;color:#3b463d}.vc-how summary{cursor:pointer;font-weight:700;color:#3b463d}.vc-how summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.vc-how ul{margin:8px 0 0;padding-inline-start:18px;line-height:1.55;color:#3b463d}.vc-source{margin:12px 0 0;font-size:11.5px;line-height:1.5;color:#6d766e}",Hl=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},Xl=["dir","lang"],Kl={class:"vc-card"},Wl={class:"vc-kicker"},ql={class:"vc-title"},zl={class:"vc-tagline"},Gl=["aria-label"],Jl={class:"vc-bar-row"},Yl={class:"vc-n"},Zl={class:"vc-caption"},Ql={class:"vc-label"},ec={class:"vc-note"},tc={class:"vc-how"},nc={class:"vc-source"},sc=Ll(Hl({__name:"doxa-vision-card",props:{profileConfig:{type:String,default:""}},setup(e){const t={};for(const[L,T]of Object.entries(Object.assign({"../../library/i18n/locales/ar/vision.json":Ml,"../../library/i18n/locales/de/vision.json":El,"../../library/i18n/locales/en/vision.json":Tl,"../../library/i18n/locales/es/vision.json":Pl,"../../library/i18n/locales/fr/vision.json":Il,"../../library/i18n/locales/hi/vision.json":Fl,"../../library/i18n/locales/it/vision.json":Rl,"../../library/i18n/locales/pt/vision.json":kl,"../../library/i18n/locales/ro/vision.json":jl,"../../library/i18n/locales/ru/vision.json":Bl,"../../library/i18n/locales/zh/vision.json":Ul}))){const A=L.match(/locales\/([^/]+)\/vision\.json$/);A&&(t[A[1]]=T)}const n=e,s=Le(()=>{if(!n.profileConfig)return{};try{return JSON.parse(n.profileConfig)||{}}catch{return{}}}),o=(()=>{try{const L=new URLSearchParams(window.location.search);return L.get("lang")||L.get("locale")||""}catch{return""}})(),r=Le(()=>{const L=String(s.value.locale||o||typeof document<"u"&&document.documentElement.lang||"en"),T=L.split("-")[0].toLowerCase();return t[L]?L:t[T]?T:"en"}),i=Le(()=>r.value==="ar"?"rtl":"ltr");function l(L,T){let A=(t[r.value]||{})[L]||(t.en||{})[L]||L;if(T)for(const X in T)A=A.split("{"+X+"}").join(String(T[X]));return A}const a=L=>new Intl.NumberFormat(r.value).format(L),d=L=>new Intl.NumberFormat(r.value,{notation:"compact",maximumFractionDigits:1}).format(L),f=L=>{try{return new Intl.DateTimeFormat(r.value,{year:"numeric",month:"long",day:"numeric"}).format(new Date(L+"T00:00:00Z"))}catch{return L}},p=Le(()=>s.value.accent||"#92b195"),w=Le(()=>s.value.title||l("title")),N=Le(()=>s.value.tagline||l("tagline")),R=Mt.steps[0].groups,M=Le(()=>Mt.steps.map(L=>({id:L.id,groups:a(L.groups),population:l("people",{n:d(L.population)}),label:l(L.id+"Label"),note:L.id==="doxa"?l("doxaNote",{frontier:a(L.frontier)}):l(L.id+"Note"),width:Math.max(24,Math.round(L.groups/R*100))}))),z=Le(()=>["ruleAll","ruleUnreached","ruleFrontier","ruleDoxa"].map(L=>l(L))),H=Le(()=>l("sources",{imb:Mt.sources.imb.publisher,date:f(Mt.sources.imb.captured),date2:f(Mt.sources.doxa.fetched)}));return(L,T)=>(At(),Lt("div",{class:"vc-root",dir:i.value,lang:r.value,style:ft({"--accent":p.value})},[Y("article",Kl,[Y("div",Wl,[T[0]||(T[0]=Y("span",{class:"vc-mark","aria-hidden":"true"},null,-1)),Do(fe(l("kicker")),1)]),Y("h1",ql,fe(w.value),1),Y("p",zl,fe(N.value),1),Y("ol",{class:"vc-funnel","aria-label":l("funnelLabel")},[(At(!0),Lt(ge,null,Qs(M.value,(A,X)=>(At(),Lt("li",{key:A.id,class:Vt(["vc-step","vc-step-"+A.id])},[Y("div",Jl,[Y("div",{class:"vc-bar",style:ft({width:A.width+"%","--i":X})},[Y("span",Yl,fe(A.groups),1)],4)]),Y("div",Zl,[Y("span",Ql,fe(A.label),1),Y("span",ec,fe(A.note)+" · "+fe(A.population),1)])],2))),128))],8,Gl),Y("details",tc,[Y("summary",null,fe(l("howCounted")),1),Y("ul",null,[(At(!0),Lt(ge,null,Qs(z.value,(A,X)=>(At(),Lt("li",{key:X},fe(A),1))),128))])]),Y("p",nc,fe(H.value),1)])],12,Xl))}},[["styles",[Vl]]]));typeof customElements<"u"&&!customElements.get("doxa-vision-card")&&customElements.define("doxa-vision-card",sc)})(); diff --git a/public/doxa-maps/doxa-vision-card/doxa-vision-card/default/index.html b/public/doxa-maps/doxa-vision-card/doxa-vision-card/default/index.html index d323bad51..abb8be1c0 100644 --- a/public/doxa-maps/doxa-vision-card/doxa-vision-card/default/index.html +++ b/public/doxa-maps/doxa-vision-card/doxa-vision-card/default/index.html @@ -26,7 +26,7 @@ - + - + - + + window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"plugin-designs/*/*.vue","embedBase":".","bundleCount":23,"profileCount":35,"runtime":{"apiBaseUrl":"https://pray.doxa.life","token":"pk.eyJ1IjoiZ29zeXN0ZW1zIiwiYSI6ImNtZm9vM291czA3amQya3BzYW42YW9ibTcifQ.52WM0IpxY9FcB0zc9f1zbQ"},"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-tLAMFSmOXgKsuumAYlSOGxWarmOzELfe4FfQqpvfBimiWBm23Ajinbv0qsxRZupf","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-tLAMFSmOXgKsuumAYlSOGxWarmOzELfe4FfQqpvfBimiWBm23Ajinbv0qsxRZupf\" 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-fLOTR6xYgvjETQGZchu/ceLXqZiVfyw7AjCjZmhe6MPNHfyVZ0j1jXu2f49CQujM","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-fLOTR6xYgvjETQGZchu/ceLXqZiVfyw7AjCjZmhe6MPNHfyVZ0j1jXu2f49CQujM\" 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-mbN7vJ4SwlPjwow485s6WcZtjgHfRL9c/cEScZGYM4iZVwTX3imUfgz/lNX7UKJe","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-mbN7vJ4SwlPjwow485s6WcZtjgHfRL9c/cEScZGYM4iZVwTX3imUfgz/lNX7UKJe\" 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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-mbN7vJ4SwlPjwow485s6WcZtjgHfRL9c/cEScZGYM4iZVwTX3imUfgz/lNX7UKJe\" 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-mbN7vJ4SwlPjwow485s6WcZtjgHfRL9c/cEScZGYM4iZVwTX3imUfgz/lNX7UKJe\" 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-Q11zxYDmXp/3KoxkMIRaPGn1KWAer2kQrJTpE/YiwUeasLLy4UNocmXO4qByMX+D","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-Q11zxYDmXp/3KoxkMIRaPGn1KWAer2kQrJTpE/YiwUeasLLy4UNocmXO4qByMX+D\" 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-Q11zxYDmXp/3KoxkMIRaPGn1KWAer2kQrJTpE/YiwUeasLLy4UNocmXO4qByMX+D\" 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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-Q11zxYDmXp/3KoxkMIRaPGn1KWAer2kQrJTpE/YiwUeasLLy4UNocmXO4qByMX+D\" 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-Rc4Fi2DHGSwNMZf91ng3ejXA5JBPzCKgQi9DJ1sQcr9PUq819LAhBHvFU/NbyMwR","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-Rc4Fi2DHGSwNMZf91ng3ejXA5JBPzCKgQi9DJ1sQcr9PUq819LAhBHvFU/NbyMwR\" 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-OiUABqAB3sINj95nEswpAJ2nJBd9bwrMR2bezKyN6WpxHw9/NvUmYMe8o0i1muWV","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./demo-map/demo-map.js\" integrity=\"sha384-OiUABqAB3sINj95nEswpAJ2nJBd9bwrMR2bezKyN6WpxHw9/NvUmYMe8o0i1muWV\" 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-SSR99fy7d4D0pg07vxksTDEXhf7Saky5hhVJCkPlQ1O45Il0/VkW4cj/yFar6QaP","elements":["doxa-maps-spa"],"composes":["dashboard-plus-grid/dashboard-plus-grid","research-map-plus-grid/research-map-plus-grid","regions-dashboard/regions-mfe","my-upg-100-list/upg-100-mfe","doxa-simple-map/doxa-simple-map","cities-internet/connectivity-map","gospel-resources/resources-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-SSR99fy7d4D0pg07vxksTDEXhf7Saky5hhVJCkPlQ1O45Il0/VkW4cj/yFar6QaP\" 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":"Research Gallery — Big Picture + every research map (app-shell)","apiBaseUrl":"","props":{"profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"Research Gallery"},"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-anX4V4pEfRqe+f9rN213v39mEAh0xxI0lfKOPD+mnaIk6+xV+RX1Y5wKcDgfcK6d","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-anX4V4pEfRqe+f9rN213v39mEAh0xxI0lfKOPD+mnaIk6+xV+RX1Y5wKcDgfcK6d\" 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-QDnthNH0t4oJYQcYunMxIb9DUGBQRAUm+TPEg2RWvsrkJ4CYrbAlzbyCWoTqOXB7","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-QDnthNH0t4oJYQcYunMxIb9DUGBQRAUm+TPEg2RWvsrkJ4CYrbAlzbyCWoTqOXB7\" 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-ga7XpXFyxJDd8VrtMejKuLRx8YFuxJoT+DXkcpehJXptsM4phiKamyTBYJpudSSj","elements":["doxa-vision-card"],"profiles":[{"profile":"doxa-vision-card","file":"doxa-vision-card.vue","description":"A true funnel of the remaining task, every number computed from data: all people","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-ga7XpXFyxJDd8VrtMejKuLRx8YFuxJoT+DXkcpehJXptsM4phiKamyTBYJpudSSj\" 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: fewer than one person in a thousand is an evangelical believer."},"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-PEvIo9qJtlQUr7v+NdWX8BDcKxd5n6HrtzM7961RqfzHThKAs3GQ7xxUI5zGtY3L","elements":["gospel-resources-map"],"composes":["resources-map","data-tables"],"profiles":[{"profile":"charts","file":"charts.vue","description":"The gap measured by LANGUAGE (ISO 639-3) rather than by people group, because one translation serves every group that speaks it, so counting by group overstates how much work remains.","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-PEvIo9qJtlQUr7v+NdWX8BDcKxd5n6HrtzM7961RqfzHThKAs3GQ7xxUI5zGtY3L\" 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":"Eleven tables covering both halves of one question: every gospel resource with its real URL and how much Scripture it is, and the 1,613 people groups where nothing was found with the pools searched recorded per row, plus translation priority, bridge languages, city bridges, the deaf gap and access against population growth.","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-PEvIo9qJtlQUr7v+NdWX8BDcKxd5n6HrtzM7961RqfzHThKAs3GQ7xxUI5zGtY3L\" 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":"gospel-dashboard","file":"gospel-dashboard.vue","description":"The gospel map and its tables as one scrolling element: 12,379 people-group pins with the real Scripture, film and Bible-story links for each group's own language, above every resource with its URL and the 1,613 groups where nothing was found, exportable as CSV.","element":"gospel-resources-map","type":"nested-elements-mfe","isMap":true,"iframeUrl":"./gospel-resources/gospel-dashboard/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-PEvIo9qJtlQUr7v+NdWX8BDcKxd5n6HrtzM7961RqfzHThKAs3GQ7xxUI5zGtY3L\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"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 people groups have Scripture in their own language and which have none, zero-resource languages first, with every link the verification pass proved and Open Bible Stories labelled as stories rather than as Scripture.","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-PEvIo9qJtlQUr7v+NdWX8BDcKxd5n6HrtzM7961RqfzHThKAs3GQ7xxUI5zGtY3L\" 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":"12,379 people-group pins over a country choropleth: tap a pin for the Scripture, audio, film, Bible-story and training links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the groups where nothing was found.","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-PEvIo9qJtlQUr7v+NdWX8BDcKxd5n6HrtzM7961RqfzHThKAs3GQ7xxUI5zGtY3L\" 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-vqUN7kfMcv1vUvjQIzNxapDlwPSdtR8atXoIETM0hxoqOCKG+7FAPPltRsA4jukY","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\"","element":"my-upg-100-list-map","type":"single","isMap":false,"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-vqUN7kfMcv1vUvjQIzNxapDlwPSdtR8atXoIETM0hxoqOCKG+7FAPPltRsA4jukY\" 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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\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-vqUN7kfMcv1vUvjQIzNxapDlwPSdtR8atXoIETM0hxoqOCKG+7FAPPltRsA4jukY\" 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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\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-vqUN7kfMcv1vUvjQIzNxapDlwPSdtR8atXoIETM0hxoqOCKG+7FAPPltRsA4jukY\" 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-LMab8CAeKjHRnOkUn3HsykTYv1v/4wnF1av7AzqvbsjmakArA2dGd8ZeliFMkxzs","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-LMab8CAeKjHRnOkUn3HsykTYv1v/4wnF1av7AzqvbsjmakArA2dGd8ZeliFMkxzs\" 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-JhqC9WgYSipRHC8JK60x+VOeRp4gg1USvIDUXWb9aLx3gHdOCeLgmtV6HkN8mfgM","elements":["plugin-studio"],"composes":["dashboard-plus-grid","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-JhqC9WgYSipRHC8JK60x+VOeRp4gg1USvIDUXWb9aLx3gHdOCeLgmtV6HkN8mfgM\" 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":"pplr-data-maps","scriptUrl":"./pplr-data-maps/pplr-data-maps.js","output":"doxa-maps/pplr-data-maps/pplr-data-maps.js","integrity":"sha384-+EOcMT3P42D39HGIjZBbJ6waYI2yJDhNDwNf+8wFruaHqEhdYYa36M+iLIT5fRiH","elements":["pplr-data-maps"],"profiles":[{"profile":"pplr-data-maps","file":"pplr-data-maps.vue","description":"Ten views that let a researcher check the PPLR people-group data by eye","element":"pplr-data-maps","type":"monolithic","isMap":true,"iframeUrl":"./pplr-data-maps/pplr-data-maps/index.html","scriptUrl":"./pplr-data-maps/pplr-data-maps.js","embed":{"iframe":"\u003ciframe src=\"./pplr-data-maps/pplr-data-maps/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-+EOcMT3P42D39HGIjZBbJ6waYI2yJDhNDwNf+8wFruaHqEhdYYa36M+iLIT5fRiH\" crossorigin=\"anonymous\">\u003c/script>\n\u003cpplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/pplr-data-maps>"},"bundle":"pplr-data-maps"}]},{"bundle":"prayer-walk-planner","scriptUrl":"./prayer-walk-planner/prayer-walk-planner.js","output":"doxa-maps/prayer-walk-planner/prayer-walk-planner.js","integrity":"sha384-v0hrmAp17LGeHHfWbgdEkrTILIqrZRQh2QDFT1tgxN359vVW/Xt7t+GAQS16uA4U","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-v0hrmAp17LGeHHfWbgdEkrTILIqrZRQh2QDFT1tgxN359vVW/Xt7t+GAQS16uA4U\" 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-zE42DnXbiIsJpnPZ2ZLVClbwODYgF0j6agMZoJTuhR/AW56nzpl7TwT8X8R9FPH4","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-zE42DnXbiIsJpnPZ2ZLVClbwODYgF0j6agMZoJTuhR/AW56nzpl7TwT8X8R9FPH4\" 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":false,"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-zE42DnXbiIsJpnPZ2ZLVClbwODYgF0j6agMZoJTuhR/AW56nzpl7TwT8X8R9FPH4\" 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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-zE42DnXbiIsJpnPZ2ZLVClbwODYgF0j6agMZoJTuhR/AW56nzpl7TwT8X8R9FPH4\" 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-XSv+S9wdJPrm9k2jVIG4/ePgm1bLW8LYytJuk5kqXP9yI5xOuJCZQ44m4XOt1u9n","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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-XSv+S9wdJPrm9k2jVIG4/ePgm1bLW8LYytJuk5kqXP9yI5xOuJCZQ44m4XOt1u9n\" 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-t6tBUjmfjY8cMNakP20wiAraSH/bCaDW/WjXB+nm1dptLXjbTg4aqvKaXeYFjNvD","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-t6tBUjmfjY8cMNakP20wiAraSH/bCaDW/WjXB+nm1dptLXjbTg4aqvKaXeYFjNvD\" 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-3Rjk4pZDcTABDfBIAbT2tu+D6J9/U3jx3UJDkiPynH+oeiwzCGFotSX7hbhdT48G","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-3Rjk4pZDcTABDfBIAbT2tu+D6J9/U3jx3UJDkiPynH+oeiwzCGFotSX7hbhdT48G\" 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":"upg-neighbor","scriptUrl":"./upg-neighbor/upg-neighbor.js","output":"doxa-maps/upg-neighbor/upg-neighbor.js","integrity":"sha384-L9U5BmHdIQSgYXleGnKoycRFoPQq/zCBFGCK+76Xt++6f/Z0byB9sSlVef7ofjXi","elements":["upg-neighbor"],"profiles":[{"profile":"upg-neighbor","file":"upg-neighbor.vue","description":"Who goes to whom: reached neighbors matched to unreached people groups, five lenses","element":"upg-neighbor","type":"monolithic","isMap":true,"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":"\u003c!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n\u003clink rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n\u003cscript>window.MAP_APP_API_URL=\"https://pray.doxa.life\";\u003c/script>\n\u003cscript src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-L9U5BmHdIQSgYXleGnKoycRFoPQq/zCBFGCK+76Xt++6f/Z0byB9sSlVef7ofjXi\" 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","apiBaseUrl":"","props":{"profile":"upg-neighbor","view":"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","apiBaseUrl":"","props":{"profile":"upg-neighbor","view":"cockpit"},"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","apiBaseUrl":"","props":{"profile":"upg-neighbor","view":"lang-cluster"},"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","apiBaseUrl":"","props":{"profile":"upg-neighbor","view":"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","apiBaseUrl":"","props":{"profile":"upg-neighbor","view":"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>"}}],"bundle":"upg-neighbor"}]},{"bundle":"wall-of-people-groups","scriptUrl":"./wall-of-people-groups/wall-of-people-groups.js","output":"doxa-maps/wall-of-people-groups/wall-of-people-groups.js","integrity":"sha384-YPFNNohoobgb+Dvpie0KY661J5Y6ggXDDYmAeGt2ZqEwzvon8gKh3po0I/RPxAZR","elements":["wall-of-people-groups"],"profiles":[{"profile":"wall-of-people-groups","file":"wall-of-people-groups.vue","description":"Every Doxa people group as a card on one zoomable prayer wall","element":"wall-of-people-groups","type":"monolithic","isMap":false,"iframeUrl":"./wall-of-people-groups/wall-of-people-groups/index.html","scriptUrl":"./wall-of-people-groups/wall-of-people-groups.js","embed":{"iframe":"\u003ciframe src=\"./wall-of-people-groups/wall-of-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=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-YPFNNohoobgb+Dvpie0KY661J5Y6ggXDDYmAeGt2ZqEwzvon8gKh3po0I/RPxAZR\" crossorigin=\"anonymous\">\u003c/script>\n\u003cwall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'>\u003c/wall-of-people-groups>"},"bundle":"wall-of-people-groups"}]}]}; \n\n" + "script": "\n\n" }, "instances": [ {