diff --git a/website/src/badges.html b/website/src/badges.html index d0b6670f53..6ca957442d 100644 --- a/website/src/badges.html +++ b/website/src/badges.html @@ -54,7 +54,16 @@ templateEngineOverride: njk /* The frame sits under the fixed navbar (the app pads its own top to clear it) and is sized to its content by the app's height messages, so the page — not the frame — scrolls, and the footer follows naturally. 100vh is only the size before the first message arrives. */ - #badges-frame { display: block; width: 100%; height: 100vh; border: 0; } + #badges-frame { + display: block; width: 100%; height: 100vh; border: 0; + /* An empty frame paints transparent-dark before its document loads, and the app's own + ground flashes before the site hands in its colour. Give the frame the page's own + background so any gap reads as the site, and fade the app in once it is sized and + themed, so neither flash is seen. */ + background: #F3FAFF; + opacity: 0; transition: opacity .25s ease; + } + html.dark #badges-frame { background: #000832; } @media (max-width: 640px) { .b-links { gap: 24px; } } @@ -103,6 +112,10 @@ templateEngineOverride: njk function post(msg) { try { frame.contentWindow.postMessage(msg, APP); } catch (e) { /* not ready */ } } function postRoute() { post({ type: "simplex-route", hash: location.hash }); } function postColors() { post({ type: "simplex-colors", bg: siteBg() }); } + function reveal() { frame.style.opacity = "1"; } + // Fallback: reveal even if the app never posts a height (an older deploy), so the frame + // can never stay invisible. The first height message reveals it sooner, once themed. + frame.addEventListener("load", function () { setTimeout(reveal, 400); }); // Buy a code / Your codes are hash links; changing the hash — from a click or from the // address bar — is what carries the route into the frame. @@ -121,6 +134,7 @@ templateEngineOverride: njk // The frame reports its content height; size it so the site's page scrolls, not the frame. if (e.data.type === "simplex-height" && typeof e.data.height === "number") { frame.style.height = Math.max(0, e.data.height) + "px"; + reveal(); } });