Files
zooqueenandHanzo Dev 6c4b180d4e Keep the sign-in standing and silent whatever the banner or the visitor does
The banner's chunk is optional: one that does not load, or throws as it
renders, draws nothing and the sign-in form stays. A withdrawal of Analytics
after the event client started reloads the page once, so no client is left to
send. Every identity page sends only its origin as a referrer, so an address
holding a code, an invite or an OIDC request reaches no other page.

The consent spec answers tag config as production does: each identity host's
key names a project with no tags, so after Accept no Google or Meta request
leaves the page and the sign-up reaches the stream with its consent. It
records every request that leaves the host and holds it to what the page may
send at that moment, throws errors before and after a choice, and covers a
failed chunk, Reject after Accept, and the referrer.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-16 07:09:28 -07:00

43 lines
1.9 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta name="robots" content="noindex" />
<!-- Every request this page makes names it by origin alone. Its address can
hold an authorization code (/callback), an invite (/join) or an OIDC
request, and none of that is another site's to read. -->
<meta name="referrer" content="strict-origin" />
<!-- One icon link, and it starts empty: this file is served unchanged on every
identity host, so any default here would be one brand's icon on every
other brand's tab. `App.tsx` sets the href from the resolved brand.
There is no .ico and no apple-touch-icon, because the browser prefers
those over a typed SVG and they cannot follow the resolved brand. -->
<link id="favicon" rel="icon" type="image/svg+xml" href="data:," />
<title>Sign in</title>
<!-- The stored reading, applied before the stylesheet paints, so a returning
person's page does not jump when the bundle runs. It is inline because it
has to run ahead of any module; it reads the key the appearance package
writes, and the app applies the same value again on mount. -->
<script>
(function () {
try {
var p = JSON.parse(localStorage.getItem('hanzo.appearance') || '{}')
if (typeof p.type === 'number')
document.documentElement.style.setProperty(
'--type-scale',
String(Math.min(1.4, Math.max(0.85, p.type)))
)
var d = { compact: '0.85', default: '1', comfortable: '1.15' }[p.density]
if (d) document.documentElement.style.setProperty('--density', d)
} catch (e) {}
})()
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>