diff --git a/TODO.md b/TODO.md
index 73b5b7b..5b8e533 100644
--- a/TODO.md
+++ b/TODO.md
@@ -45,6 +45,16 @@ but the review is broader than any of them.
# Completed Steps
+- 2026-10-05: Chrome draws the popup in its monospace font
+ ([#418](https://git.eeqj.de/sneak/AutistMask/issues/418)), as Firefox does.
+ Chrome adds a stylesheet of its own to extension pages that sets the font on
+ `body`, and it beat Tailwind's `font-mono`: Tailwind 4 puts its classes in a
+ cascade layer, and a rule outside any layer wins over them. `body` now carries
+ `font-mono!`, which marks the class important. Both end-to-end suites check
+ the popup's font. The same stylesheet also makes Chrome draw the popup's text
+ at 12px rather than the 14px `text-sm` asks for; that is unchanged, and filed
+ as [#456](https://git.eeqj.de/sneak/AutistMask/issues/456).
+
- 2026-10-05: Dead code removed and copied view helpers shared
([#168](https://git.eeqj.de/sneak/AutistMask/issues/168)). AddressDetail and
AddressToken each defined their own `isoDate()` and `timeAgo()` in place of
diff --git a/src/popup/index.html b/src/popup/index.html
index d318b67..3019c8a 100644
--- a/src/popup/index.html
+++ b/src/popup/index.html
@@ -6,7 +6,10 @@
{
assert(title === "AutistMask", "unexpected popup title: " + title);
});
+// The same check as the Chrome suite's (#418), so both browsers are held to
+// the same font.
+step("the popup is drawn in the monospace font it declares", async (env) => {
+ const font = await env.driver.execute(
+ "return getComputedStyle(document.body).fontFamily;",
+ );
+ // --font-mono in src/popup/styles/main.css, as the browser writes it out.
+ assert(
+ font ===
+ 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace',
+ "the popup is drawn in " + font + ", not in --font-mono",
+ );
+});
+
step("wallet creation through the UI reaches the main view", async (env) => {
const d = env.driver;
await d.click("#btn-welcome-add");
diff --git a/tests/e2e/run.js b/tests/e2e/run.js
index 191c405..5307e4f 100644
--- a/tests/e2e/run.js
+++ b/tests/e2e/run.js
@@ -93,6 +93,20 @@ test("popup loads and reaches the welcome view", async (env) => {
assert(title === "AutistMask", "unexpected popup title: " + title);
});
+// Chrome's own stylesheet for extension pages sets the font on body; see the
+// comment above in src/popup/index.html.
+test("the popup is drawn in the monospace font it declares (#418)", async (env) => {
+ const font = await env.page.evaluate(
+ () => getComputedStyle(document.body).fontFamily,
+ );
+ // --font-mono in src/popup/styles/main.css, as the browser writes it out.
+ assert(
+ font ===
+ 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace',
+ "the popup is drawn in " + font + ", not in --font-mono",
+ );
+});
+
// The empirical half of #182. The manifest change is only a claim about
// what the CSP permits; this is the observation. Two things have to hold
// together, and the run covers both: the popup realm compiles WASM (here),