At the floor tier the gap between points is 3px (was 5px) and the point text 18px (was 18.5px). All 11
languages fit one sheet; several now take a larger tier. The packet-strings pin is renewed for the new wording.
Spelling and capitalization made consistent across the page (lowercase people groups, nations and
churches; heavenly Father; neighbors), verse ranges set with an en dash, and point 9's and point 12's
references updated in every language (references are shared addresses). Revelation joins the book table
in all 11 languages. Other languages keep their wording.
- A scripture reference never breaks between its book and its
chapter:verse in the header's text columns ("Mark 6:40"); before, two
zones printed "(Mark" at a line's end and "6:40)." on the next.
- (With the parent commit: the three header columns end at about the same
height. The facts column widens when it runs long, the side columns stay
equal and mirrored; across the 28 zones the height spread drops from
99 to 72 px, mean 54 to 34.)
A browser gives crypto.subtle only to a secure page (https, or http://localhost). Opened any other way, for example a dev server reached over plain http by its LAN address from a phone, every pinned file was refused with a bare "reading 'digest'": the packet printed in English and page 1 fell back to its stored sheet. sha384() now refuses with a sentence that names the cause. check:pinned-fetch-fresh arm D2 removes crypto.subtle and requires that sentence; its self-test plants the unguarded call.
A generated sheet (opts.sheet) that fails still falls through to the stored sheet, so a print never comes out blank, but no longer silently: the console names the format, the sheet and the reason. A stored sheet with an old header once printed in place of the generated one with no word of why. An empty result stays quiet: a generator returns '' on purpose when it cannot draw a sheet.
The 14 bundles that import ShareButton (or read the share catalogue area), built
one at a time on the merged pilot cee32f273, then bun run tree + fix:sri. The
build-config key and define reach every bundle; the others are byte-identical
(the in-lock freshness check runs on every bundle).
The URL option is the plugin's own page and nothing else. Where no base resolves
(the dev server, where modules are not bundled) or the embed path is not
tree-relative, URL and Iframe now show the same plain note the JavaScript option
does, instead of falling back to the page's share link (the app around the
plugin). Share this page is unchanged.
The Embed tab now offers the plugin's own page (URL), that page in an iframe
(with the sizes), and its own bundle + element (JavaScript), each with one plain
sentence and one Copy button. They embed the plugin whose Share was pressed, even
nested in Plugin Studio, Deep Research or Posterverse.
Where the codes point: a new build-config key shareBaseUrl, baked as
__DOXA_SHARE_BASE__ and overridable per embed (profile-config.shareBaseUrl) or
per page (window.MAP_SHARE_BASE_URL), https only (or a local test server). It is
committed EMPTY: the codes then point at the tree the bundle is served from, so
the stable site gives its own public URLs by construction. embedBaseUrl stays
empty, so the manifest's snippets and a dropped tree are unchanged.
The JavaScript code is the plugin's embed.script from that tree's manifest
(library/utils/publicEmbed.js, fetched once when Embed opens, default
credentials), made absolute, with integrity dropped from our unversioned bundle
URL (a pinned hash would break every partner's embed at the next release). A
plugin that tree does not carry gets a plain note instead of codes that would
404. Share this page stays first; the explanation and the 5 steps stay. English
only (parity debt 19 per locale). The library index lists publicEmbed.js.