diff --git a/assets/webstore-explainer-2026-4/01-hero-light.png b/assets/webstore-explainer-2026-4/01-hero-light.png
new file mode 100644
index 000000000..507722dcd
Binary files /dev/null and b/assets/webstore-explainer-2026-4/01-hero-light.png differ
diff --git a/assets/webstore-explainer-2026-4/01-hero.png b/assets/webstore-explainer-2026-4/01-hero.png
new file mode 100644
index 000000000..0b41608d2
Binary files /dev/null and b/assets/webstore-explainer-2026-4/01-hero.png differ
diff --git a/assets/webstore-explainer-2026-4/02-tell-the-browser.png b/assets/webstore-explainer-2026-4/02-tell-the-browser.png
new file mode 100644
index 000000000..1a95e7573
Binary files /dev/null and b/assets/webstore-explainer-2026-4/02-tell-the-browser.png differ
diff --git a/assets/webstore-explainer-2026-4/03-ask-any-page.png b/assets/webstore-explainer-2026-4/03-ask-any-page.png
new file mode 100644
index 000000000..5c33861c0
Binary files /dev/null and b/assets/webstore-explainer-2026-4/03-ask-any-page.png differ
diff --git a/assets/webstore-explainer-2026-4/04-any-llm.png b/assets/webstore-explainer-2026-4/04-any-llm.png
new file mode 100644
index 000000000..bea7a6992
Binary files /dev/null and b/assets/webstore-explainer-2026-4/04-any-llm.png differ
diff --git a/assets/webstore-explainer-2026-4/05-plan-before-act-light.png b/assets/webstore-explainer-2026-4/05-plan-before-act-light.png
new file mode 100644
index 000000000..bbb0ff35f
Binary files /dev/null and b/assets/webstore-explainer-2026-4/05-plan-before-act-light.png differ
diff --git a/assets/webstore-explainer-2026-4/05-plan-before-act.png b/assets/webstore-explainer-2026-4/05-plan-before-act.png
new file mode 100644
index 000000000..badbc60c1
Binary files /dev/null and b/assets/webstore-explainer-2026-4/05-plan-before-act.png differ
diff --git a/assets/webstore-explainer-2026-4/06-launch-offer.png b/assets/webstore-explainer-2026-4/06-launch-offer.png
new file mode 100644
index 000000000..32b85606a
Binary files /dev/null and b/assets/webstore-explainer-2026-4/06-launch-offer.png differ
diff --git a/assets/webstore-explainer-2026-4/07-social-proof.png b/assets/webstore-explainer-2026-4/07-social-proof.png
new file mode 100644
index 000000000..4807c8860
Binary files /dev/null and b/assets/webstore-explainer-2026-4/07-social-proof.png differ
diff --git a/assets/webstore-explainer-2026-4/README.md b/assets/webstore-explainer-2026-4/README.md
new file mode 100644
index 000000000..20e891cf0
--- /dev/null
+++ b/assets/webstore-explainer-2026-4/README.md
@@ -0,0 +1,47 @@
+# Web Store explainer visuals 2026 — v4 (typographic)
+
+Same gallery and copy as v3 (`../webstore-explainer-2026-3`), retypeset. No product
+icon and no "WebBrain" corner wordmark on any slide — the Web Store shows both beside
+the listing. The hero keeps a small mono "WEBBRAIN" kicker as the only brand mark.
+
+Type system:
+- Display (headlines, prices, stat numerals) — **Instrument Serif** 400
+- UI (body, subs, panel text) — **Instrument Sans** 400–700
+- Labels (eyebrows, chips, URLs, buttons) — **Geist Mono** 600, uppercase, wide tracking
+
+Fonts are vendored in `fonts/` and inlined as base64 at render time, so output no longer
+depends on what is installed locally. All three are OFL 1.1; license texts sit beside them
+in `fonts/OFL-*.txt` and must stay with the binaries. Latin subsets only, 68 KB total.
+
+The mock agent panel on 02 still reads "WebBrain is acting" — that is depicted product UI,
+not slide branding. Say so if you want it neutralised too.
+
+v2/v3 are untouched and still use the old sans stack; the four versions are independent
+copies, so a copy change needs applying in each.
+
+Files (1280×800):
+- 01-hero.png: Mono kicker + serif tagline hero
+- 02-tell-the-browser.png: Flight-search command front and center as chat input, browser acting on it
+- 03-ask-any-page.png: Ask mode, cropped to the answer panel
+- 04-any-llm.png: Model picker, cropped to the provider dropdown
+- 05-plan-before-act.png: Plan review with Approve/Adjust before actions run
+- 06-launch-offer.png: WebBrain Cloud $5/mo (reg. $8), Save 35%
+- 07-social-proof.png: 500+ GitHub stars, 20+ contributors, MIT — repo bar with contributor avatars
+
+Light-background alternates of the two dark slides (originals kept, use whichever fits the gallery):
+- 01-hero-light.png
+- 05-plan-before-act-light.png
+
+Both come from the same `hero(light)` / `planScene(light)` functions, so edits apply to
+dark and light together. In the light plan card the panel goes white and the accent green
+darkens for contrast against white button text.
+
+Star/contributor counts are hardcoded in `proofScene()`; bump them there when they go stale (544 stars at last render, 2026-07-29). The avatar initials are decorative, not real contributor handles.
+
+Slide 07 is appended after the offer to keep the existing filenames stable. If proof-then-price reads better, swap the last two entries in the `scenes` array and rename the two PNGs.
+
+Regenerate:
+
+```bash
+node assets/webstore-explainer-2026-4/render.mjs
+```
diff --git a/assets/webstore-explainer-2026-4/fonts/OFL-geistmono.txt b/assets/webstore-explainer-2026-4/fonts/OFL-geistmono.txt
new file mode 100644
index 000000000..61f6f4b78
--- /dev/null
+++ b/assets/webstore-explainer-2026-4/fonts/OFL-geistmono.txt
@@ -0,0 +1,93 @@
+Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font.git)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/assets/webstore-explainer-2026-4/fonts/OFL-instrumentsans.txt b/assets/webstore-explainer-2026-4/fonts/OFL-instrumentsans.txt
new file mode 100644
index 000000000..26bd2f954
--- /dev/null
+++ b/assets/webstore-explainer-2026-4/fonts/OFL-instrumentsans.txt
@@ -0,0 +1,93 @@
+Copyright 2022 The Instrument Sans Project Authors (https://github.com/Instrument/instrument-sans)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/webstore-explainer-2026-4/fonts/OFL-instrumentserif.txt b/assets/webstore-explainer-2026-4/fonts/OFL-instrumentserif.txt
new file mode 100644
index 000000000..669ce7917
--- /dev/null
+++ b/assets/webstore-explainer-2026-4/fonts/OFL-instrumentserif.txt
@@ -0,0 +1,93 @@
+Copyright 2022 The Instrument Serif Project Authors (https://github.com/Instrument/instrument-serif)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/webstore-explainer-2026-4/fonts/geist-mono-var.woff2 b/assets/webstore-explainer-2026-4/fonts/geist-mono-var.woff2
new file mode 100644
index 000000000..cf24126b0
Binary files /dev/null and b/assets/webstore-explainer-2026-4/fonts/geist-mono-var.woff2 differ
diff --git a/assets/webstore-explainer-2026-4/fonts/instrument-sans-var.woff2 b/assets/webstore-explainer-2026-4/fonts/instrument-sans-var.woff2
new file mode 100644
index 000000000..665fa65c8
Binary files /dev/null and b/assets/webstore-explainer-2026-4/fonts/instrument-sans-var.woff2 differ
diff --git a/assets/webstore-explainer-2026-4/fonts/instrument-serif-400.woff2 b/assets/webstore-explainer-2026-4/fonts/instrument-serif-400.woff2
new file mode 100644
index 000000000..17653042a
Binary files /dev/null and b/assets/webstore-explainer-2026-4/fonts/instrument-serif-400.woff2 differ
diff --git a/assets/webstore-explainer-2026-4/render.mjs b/assets/webstore-explainer-2026-4/render.mjs
new file mode 100644
index 000000000..aaa587aee
--- /dev/null
+++ b/assets/webstore-explainer-2026-4/render.mjs
@@ -0,0 +1,458 @@
+import { chromium } from 'playwright';
+import { readFileSync } from 'node:fs';
+import { mkdir } from 'node:fs/promises';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const DIR = path.dirname(fileURLToPath(import.meta.url));
+const ROOT = path.resolve(DIR, '../..');
+
+// No product logo or wordmark in this variant — the Web Store already shows both beside the listing.
+const assets = {
+ ask: dataUri('assets/screenshot-1-ask-mode.png'),
+ models: dataUri('assets/screenshots_v1/s7-model-selector.png'),
+};
+
+// Vendored so renders never depend on what happens to be installed locally. See fonts/OFL-*.txt.
+const fonts = {
+ serif: fontUri('instrument-serif-400.woff2'),
+ sans: fontUri('instrument-sans-var.woff2'),
+ mono: fontUri('geist-mono-var.woff2'),
+};
+
+function dataUri(relativePath) {
+ const bytes = readFileSync(path.join(ROOT, relativePath));
+ return `data:image/png;base64,${bytes.toString('base64')}`;
+}
+
+function fontUri(name) {
+ const bytes = readFileSync(path.join(DIR, 'fonts', name));
+ return `data:font/woff2;base64,${bytes.toString('base64')}`;
+}
+
+const W = 1280;
+const H = 800;
+
+const baseCss = `
+ @font-face { font-family: 'Instrument Serif'; font-weight: 400; font-style: normal;
+ src: url(${fonts.serif}) format('woff2'); }
+ @font-face { font-family: 'Instrument Sans'; font-weight: 400 700; font-style: normal;
+ src: url(${fonts.sans}) format('woff2'); }
+ @font-face { font-family: 'Geist Mono'; font-weight: 400 700; font-style: normal;
+ src: url(${fonts.mono}) format('woff2'); }
+ :root {
+ color-scheme: light;
+ --display: 'Instrument Serif', ui-serif, Georgia, serif;
+ --ui: 'Instrument Sans', ui-sans-serif, system-ui, -apple-system, sans-serif;
+ --mono: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
+ }
+ * { box-sizing: border-box; }
+ html, body {
+ margin: 0; width: ${W}px; height: ${H}px; overflow: hidden;
+ font-family: var(--ui);
+ -webkit-font-smoothing: antialiased;
+ }
+ .canvas {
+ position: relative; width: ${W}px; height: ${H}px; overflow: hidden;
+ background: linear-gradient(135deg, var(--bg1), var(--bg2));
+ color: var(--ink); isolation: isolate;
+ }
+ .canvas:after {
+ content: ""; position: absolute; z-index: 0; pointer-events: none;
+ right: -120px; bottom: -140px; width: 540px; height: 360px;
+ background:
+ linear-gradient(90deg, transparent 0 28px, rgba(255,255,255,0.14) 28px 30px, transparent 30px 72px),
+ linear-gradient(0deg, transparent 0 28px, rgba(255,255,255,0.12) 28px 30px, transparent 30px 72px);
+ transform: rotate(-8deg); opacity: 0.8;
+ }
+ .dark { --bg1:#121525; --bg2:#243044; --ink:#ffffff; --muted:#d5d9e3;
+ --accent:#f56ca8; --accent2:#65d69d; --border:rgba(255,255,255,0.16);
+ --panel:rgba(255,255,255,0.08); --shadow:0 28px 70px rgba(0,0,0,0.32); }
+ .act { --bg1:#f7fbff; --bg2:#fff4ef; --ink:#182033; --muted:#596473;
+ --accent:#df573f; --accent2:#4d7df5; --border:rgba(31,40,64,0.14);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(68,50,40,0.20); }
+ .read { --bg1:#fffaf3; --bg2:#eef5ff; --ink:#171827; --muted:#565e70;
+ --accent:#6757ff; --accent2:#ff6f9d; --border:rgba(37,42,66,0.12);
+ --panel:rgba(255,255,255,0.88); --shadow:0 28px 70px rgba(31,35,62,0.20); }
+ .plan { --bg1:#111827; --bg2:#223040; --ink:#f8fafc; --muted:#c7d2de;
+ --accent:#45d483; --accent2:#ffc857; --border:rgba(255,255,255,0.18);
+ --panel:rgba(255,255,255,0.08); --shadow:0 28px 80px rgba(0,0,0,0.34); }
+ .provider { --bg1:#f6f8fb; --bg2:#eef8f1; --ink:#182033; --muted:#5b6574;
+ --accent:#3e6ff4; --accent2:#28a96b; --border:rgba(25,38,68,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(24,52,90,0.19); }
+ .hero-light { --bg1:#f7f9ff; --bg2:#fff1f6; --ink:#141828; --muted:#586074;
+ --accent:#d6417f; --accent2:#12a06a; --border:rgba(28,34,64,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(40,44,80,0.18); }
+ .plan-light { --bg1:#f5fbf7; --bg2:#eef4ff; --ink:#141b26; --muted:#586374;
+ --accent:#12a25f; --accent2:#dd9414; --border:rgba(24,38,48,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(28,50,44,0.18); }
+ .proof { --bg1:#f7f6ff; --bg2:#eef4ff; --ink:#171a2b; --muted:#5a6274;
+ --accent:#6e56cf; --accent2:#f0a52b; --border:rgba(30,34,64,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(38,34,78,0.18); }
+ .content { position: relative; z-index: 1; width: 100%; height: 100%; padding: 44px 56px; }
+ .eyebrow {
+ display: inline-flex; align-items: center; gap: 10px; padding: 10px 15px;
+ color: var(--accent); background: var(--panel); border: 1px solid var(--border);
+ border-radius: 999px; font-family: var(--mono); font-size: 13px; font-weight: 600;
+ text-transform: uppercase; letter-spacing: 0.11em; line-height: 1;
+ }
+ .head { display: flex; align-items: center; justify-content: flex-end; }
+ .eyebrow .dot { width: 9px; height: 9px; border-radius: 999px; background: var(--accent2);
+ box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent2) 18%, transparent); }
+ h1 {
+ margin: 18px 0 0; font-family: var(--display); font-size: 66px; line-height: 1.02;
+ font-weight: 400; letter-spacing: -0.015em; text-wrap: balance;
+ }
+ .sub { margin-top: 16px; color: var(--muted); font-size: 24px; font-weight: 450; letter-spacing: -0.005em; }
+ .num { font-family: var(--display); font-weight: 400; letter-spacing: -0.02em; }
+ .crop-frame {
+ overflow: hidden; border: 1px solid var(--border); border-radius: 24px;
+ background: #ffffff; box-shadow: var(--shadow); position: relative;
+ }
+ .crop-frame img { display: block; }
+`;
+
+/* ---------- 01 HERO (dark + light variant) ---------- */
+function hero(light = false) {
+ return {
+ file: light ? '01-hero-light.png' : '01-hero.png',
+ theme: light ? 'hero-light' : 'dark',
+ body: `
+
+
WebBrain
+
Your open-source AI browser agent
+
+ Ask.
+ Act.
+ Automate. Any LLM.
+
+
+ ${['Chromium browsers and Firefox', 'Local or cloud models', 'MIT licensed'].map((c) => `
+ ${c}`).join('')}
+
`;
+}
+
+async function renderAll() {
+ await mkdir(DIR, { recursive: true });
+ const browser = await chromium.launch();
+ for (const scene of scenes) {
+ const page = await browser.newPage({ viewport: { width: W, height: H }, deviceScaleFactor: 1 });
+ await page.setContent(html(scene), { waitUntil: 'load' });
+ await page.evaluate(async () => {
+ await Promise.all(Array.from(document.images).map((img) => img.complete ? undefined : new Promise((res, rej) => {
+ img.addEventListener('load', res, { once: true });
+ img.addEventListener('error', rej, { once: true });
+ })));
+ await document.fonts.ready;
+ });
+ await page.screenshot({ path: path.join(DIR, scene.file) });
+ await page.close();
+ console.log('rendered', scene.file);
+ }
+ await browser.close();
+}
+
+renderAll().catch((error) => { console.error(error); process.exit(1); });
diff --git a/assets/webstore-explainer-2026-5/01-hero-light.png b/assets/webstore-explainer-2026-5/01-hero-light.png
new file mode 100644
index 000000000..acc61ca07
Binary files /dev/null and b/assets/webstore-explainer-2026-5/01-hero-light.png differ
diff --git a/assets/webstore-explainer-2026-5/01-hero.png b/assets/webstore-explainer-2026-5/01-hero.png
new file mode 100644
index 000000000..8de6310bb
Binary files /dev/null and b/assets/webstore-explainer-2026-5/01-hero.png differ
diff --git a/assets/webstore-explainer-2026-5/02-tell-the-browser.png b/assets/webstore-explainer-2026-5/02-tell-the-browser.png
new file mode 100644
index 000000000..ff06d61f8
Binary files /dev/null and b/assets/webstore-explainer-2026-5/02-tell-the-browser.png differ
diff --git a/assets/webstore-explainer-2026-5/03-ask-any-page.png b/assets/webstore-explainer-2026-5/03-ask-any-page.png
new file mode 100644
index 000000000..cc4fb2043
Binary files /dev/null and b/assets/webstore-explainer-2026-5/03-ask-any-page.png differ
diff --git a/assets/webstore-explainer-2026-5/04-any-llm.png b/assets/webstore-explainer-2026-5/04-any-llm.png
new file mode 100644
index 000000000..5b4dbd567
Binary files /dev/null and b/assets/webstore-explainer-2026-5/04-any-llm.png differ
diff --git a/assets/webstore-explainer-2026-5/05-plan-before-act-light.png b/assets/webstore-explainer-2026-5/05-plan-before-act-light.png
new file mode 100644
index 000000000..1c3a99049
Binary files /dev/null and b/assets/webstore-explainer-2026-5/05-plan-before-act-light.png differ
diff --git a/assets/webstore-explainer-2026-5/05-plan-before-act.png b/assets/webstore-explainer-2026-5/05-plan-before-act.png
new file mode 100644
index 000000000..36ce9227d
Binary files /dev/null and b/assets/webstore-explainer-2026-5/05-plan-before-act.png differ
diff --git a/assets/webstore-explainer-2026-5/06-launch-offer.png b/assets/webstore-explainer-2026-5/06-launch-offer.png
new file mode 100644
index 000000000..b9bda5cfd
Binary files /dev/null and b/assets/webstore-explainer-2026-5/06-launch-offer.png differ
diff --git a/assets/webstore-explainer-2026-5/07-social-proof.png b/assets/webstore-explainer-2026-5/07-social-proof.png
new file mode 100644
index 000000000..0f0077e5a
Binary files /dev/null and b/assets/webstore-explainer-2026-5/07-social-proof.png differ
diff --git a/assets/webstore-explainer-2026-5/README.md b/assets/webstore-explainer-2026-5/README.md
new file mode 100644
index 000000000..05dd63749
--- /dev/null
+++ b/assets/webstore-explainer-2026-5/README.md
@@ -0,0 +1,61 @@
+# Web Store explainer visuals 2026 — v5 (typographic, thumbnail-safe)
+
+Same gallery and copy as v3/v4. v4 set headlines in Instrument Serif 400, which looked
+good at full size but fell apart small: its hairlines are about a pixel at 88px, so on a
+Product Hunt gallery thumbnail (~300px wide, headline ~20px effective) the strokes broke
+up and went grey. v5 keeps the same structure with a display face that survives
+downscaling.
+
+No product icon and no "WebBrain" corner wordmark on any slide. The hero keeps a small
+mono "WEBBRAIN" kicker as the only brand mark.
+
+Type system:
+- Display (headlines, prices, stat numerals) — **Bricolage Grotesque** 800, `opsz` 72–96
+- UI (body, subs, panel text) — **Instrument Sans** 400–700
+- Labels (eyebrows, chips, URLs, buttons) — **Geist Mono** 650, uppercase
+
+Versus v4, tracking on the mono labels dropped from 0.11em to ~0.07em and their size went
+up ~1px — wide-tracked small caps smear when downscaled. Sub weight went 450 → 520.
+
+Check any type change at thumbnail size before shipping it:
+
+```bash
+sips -Z 320 --out /tmp/thumb.png assets/webstore-explainer-2026-5/01-hero.png && open /tmp/thumb.png
+```
+
+Fonts are vendored in `fonts/` and inlined as base64 at render time, so output does not
+depend on what is installed locally. Both families are OFL 1.1; the license texts in
+`fonts/OFL-*.txt` must stay with the binaries.
+
+The mock agent panel on 02 still reads "WebBrain is acting" — depicted product UI, not
+slide branding.
+
+v2–v4 are untouched; the versions are independent copies, so a copy change needs applying
+in each.
+
+Files (1280×800):
+- 01-hero.png: Mono kicker + heavy grotesque tagline hero
+- 02-tell-the-browser.png: Flight-search command front and center as chat input, browser acting on it
+- 03-ask-any-page.png: Ask mode, cropped to the answer panel
+- 04-any-llm.png: Model picker, cropped to the provider dropdown
+- 05-plan-before-act.png: Plan review with Approve/Adjust before actions run
+- 06-launch-offer.png: WebBrain Cloud $5/mo (reg. $8), Save 35%
+- 07-social-proof.png: 500+ GitHub stars, 20+ contributors, MIT — repo bar with contributor avatars
+
+Light-background alternates of the two dark slides (originals kept, use whichever fits the gallery):
+- 01-hero-light.png
+- 05-plan-before-act-light.png
+
+Both come from the same `hero(light)` / `planScene(light)` functions, so edits apply to
+dark and light together. In the light plan card the panel goes white and the accent green
+darkens for contrast against white button text.
+
+Star/contributor counts are hardcoded in `proofScene()`; bump them there when they go stale (544 stars at last render, 2026-07-29). The avatar initials are decorative, not real contributor handles.
+
+Slide 07 is appended after the offer to keep the existing filenames stable. If proof-then-price reads better, swap the last two entries in the `scenes` array and rename the two PNGs.
+
+Regenerate:
+
+```bash
+node assets/webstore-explainer-2026-5/render.mjs
+```
diff --git a/assets/webstore-explainer-2026-5/fonts/OFL-bricolagegrotesque.txt b/assets/webstore-explainer-2026-5/fonts/OFL-bricolagegrotesque.txt
new file mode 100644
index 000000000..a397658a5
--- /dev/null
+++ b/assets/webstore-explainer-2026-5/fonts/OFL-bricolagegrotesque.txt
@@ -0,0 +1,93 @@
+Copyright 2022 The Bricolage Grotesque Project Authors (https://github.com/ateliertriay/bricolage)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/webstore-explainer-2026-5/fonts/OFL-geistmono.txt b/assets/webstore-explainer-2026-5/fonts/OFL-geistmono.txt
new file mode 100644
index 000000000..61f6f4b78
--- /dev/null
+++ b/assets/webstore-explainer-2026-5/fonts/OFL-geistmono.txt
@@ -0,0 +1,93 @@
+Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font.git)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/assets/webstore-explainer-2026-5/fonts/OFL-instrumentsans.txt b/assets/webstore-explainer-2026-5/fonts/OFL-instrumentsans.txt
new file mode 100644
index 000000000..26bd2f954
--- /dev/null
+++ b/assets/webstore-explainer-2026-5/fonts/OFL-instrumentsans.txt
@@ -0,0 +1,93 @@
+Copyright 2022 The Instrument Sans Project Authors (https://github.com/Instrument/instrument-sans)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/webstore-explainer-2026-5/fonts/bricolage-grotesque-var.woff2 b/assets/webstore-explainer-2026-5/fonts/bricolage-grotesque-var.woff2
new file mode 100644
index 000000000..b908aff81
Binary files /dev/null and b/assets/webstore-explainer-2026-5/fonts/bricolage-grotesque-var.woff2 differ
diff --git a/assets/webstore-explainer-2026-5/fonts/geist-mono-var.woff2 b/assets/webstore-explainer-2026-5/fonts/geist-mono-var.woff2
new file mode 100644
index 000000000..cf24126b0
Binary files /dev/null and b/assets/webstore-explainer-2026-5/fonts/geist-mono-var.woff2 differ
diff --git a/assets/webstore-explainer-2026-5/fonts/instrument-sans-var.woff2 b/assets/webstore-explainer-2026-5/fonts/instrument-sans-var.woff2
new file mode 100644
index 000000000..665fa65c8
Binary files /dev/null and b/assets/webstore-explainer-2026-5/fonts/instrument-sans-var.woff2 differ
diff --git a/assets/webstore-explainer-2026-5/render.mjs b/assets/webstore-explainer-2026-5/render.mjs
new file mode 100644
index 000000000..2c6e3e493
--- /dev/null
+++ b/assets/webstore-explainer-2026-5/render.mjs
@@ -0,0 +1,463 @@
+import { chromium } from 'playwright';
+import { readFileSync } from 'node:fs';
+import { mkdir } from 'node:fs/promises';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const DIR = path.dirname(fileURLToPath(import.meta.url));
+const ROOT = path.resolve(DIR, '../..');
+
+// No product logo or wordmark in this variant — the Web Store already shows both beside the listing.
+const assets = {
+ ask: dataUri('assets/screenshot-1-ask-mode.png'),
+ models: dataUri('assets/screenshots_v1/s7-model-selector.png'),
+};
+
+// Vendored so renders never depend on what happens to be installed locally. See fonts/OFL-*.txt.
+const fonts = {
+ display: fontUri('bricolage-grotesque-var.woff2'),
+ sans: fontUri('instrument-sans-var.woff2'),
+ mono: fontUri('geist-mono-var.woff2'),
+};
+
+function dataUri(relativePath) {
+ const bytes = readFileSync(path.join(ROOT, relativePath));
+ return `data:image/png;base64,${bytes.toString('base64')}`;
+}
+
+function fontUri(name) {
+ const bytes = readFileSync(path.join(DIR, 'fonts', name));
+ return `data:font/woff2;base64,${bytes.toString('base64')}`;
+}
+
+const W = 1280;
+const H = 800;
+
+const baseCss = `
+ @font-face { font-family: 'Bricolage Grotesque'; font-weight: 200 800; font-style: normal;
+ src: url(${fonts.display}) format('woff2'); }
+ @font-face { font-family: 'Instrument Sans'; font-weight: 400 700; font-style: normal;
+ src: url(${fonts.sans}) format('woff2'); }
+ @font-face { font-family: 'Geist Mono'; font-weight: 400 700; font-style: normal;
+ src: url(${fonts.mono}) format('woff2'); }
+ :root {
+ color-scheme: light;
+ --display: 'Bricolage Grotesque', ui-sans-serif, system-ui, sans-serif;
+ --ui: 'Instrument Sans', ui-sans-serif, system-ui, -apple-system, sans-serif;
+ --mono: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
+ }
+ * { box-sizing: border-box; }
+ html, body {
+ margin: 0; width: ${W}px; height: ${H}px; overflow: hidden;
+ font-family: var(--ui);
+ -webkit-font-smoothing: antialiased;
+ }
+ .canvas {
+ position: relative; width: ${W}px; height: ${H}px; overflow: hidden;
+ background: linear-gradient(135deg, var(--bg1), var(--bg2));
+ color: var(--ink); isolation: isolate;
+ }
+ .canvas:after {
+ content: ""; position: absolute; z-index: 0; pointer-events: none;
+ right: -120px; bottom: -140px; width: 540px; height: 360px;
+ background:
+ linear-gradient(90deg, transparent 0 28px, rgba(255,255,255,0.14) 28px 30px, transparent 30px 72px),
+ linear-gradient(0deg, transparent 0 28px, rgba(255,255,255,0.12) 28px 30px, transparent 30px 72px);
+ transform: rotate(-8deg); opacity: 0.8;
+ }
+ .dark { --bg1:#121525; --bg2:#243044; --ink:#ffffff; --muted:#d5d9e3;
+ --accent:#f56ca8; --accent2:#65d69d; --border:rgba(255,255,255,0.16);
+ --panel:rgba(255,255,255,0.08); --shadow:0 28px 70px rgba(0,0,0,0.32); }
+ .act { --bg1:#f7fbff; --bg2:#fff4ef; --ink:#182033; --muted:#596473;
+ --accent:#df573f; --accent2:#4d7df5; --border:rgba(31,40,64,0.14);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(68,50,40,0.20); }
+ .read { --bg1:#fffaf3; --bg2:#eef5ff; --ink:#171827; --muted:#565e70;
+ --accent:#6757ff; --accent2:#ff6f9d; --border:rgba(37,42,66,0.12);
+ --panel:rgba(255,255,255,0.88); --shadow:0 28px 70px rgba(31,35,62,0.20); }
+ .plan { --bg1:#111827; --bg2:#223040; --ink:#f8fafc; --muted:#c7d2de;
+ --accent:#45d483; --accent2:#ffc857; --border:rgba(255,255,255,0.18);
+ --panel:rgba(255,255,255,0.08); --shadow:0 28px 80px rgba(0,0,0,0.34); }
+ .provider { --bg1:#f6f8fb; --bg2:#eef8f1; --ink:#182033; --muted:#5b6574;
+ --accent:#3e6ff4; --accent2:#28a96b; --border:rgba(25,38,68,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(24,52,90,0.19); }
+ .hero-light { --bg1:#f7f9ff; --bg2:#fff1f6; --ink:#141828; --muted:#586074;
+ --accent:#d6417f; --accent2:#12a06a; --border:rgba(28,34,64,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(40,44,80,0.18); }
+ .plan-light { --bg1:#f5fbf7; --bg2:#eef4ff; --ink:#141b26; --muted:#586374;
+ --accent:#12a25f; --accent2:#dd9414; --border:rgba(24,38,48,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(28,50,44,0.18); }
+ .proof { --bg1:#f7f6ff; --bg2:#eef4ff; --ink:#171a2b; --muted:#5a6274;
+ --accent:#6e56cf; --accent2:#f0a52b; --border:rgba(30,34,64,0.13);
+ --panel:rgba(255,255,255,0.9); --shadow:0 28px 70px rgba(38,34,78,0.18); }
+ .content { position: relative; z-index: 1; width: 100%; height: 100%; padding: 44px 56px; }
+ .eyebrow {
+ display: inline-flex; align-items: center; gap: 10px; padding: 10px 15px;
+ color: var(--accent); background: var(--panel); border: 1px solid var(--border);
+ border-radius: 999px; font-family: var(--mono); font-size: 13.5px; font-weight: 650;
+ text-transform: uppercase; letter-spacing: 0.07em; line-height: 1;
+ }
+ .head { display: flex; align-items: center; justify-content: flex-end; }
+ .eyebrow .dot { width: 9px; height: 9px; border-radius: 999px; background: var(--accent2);
+ box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent2) 18%, transparent); }
+ h1 {
+ margin: 18px 0 0; font-family: var(--display); font-size: 62px; line-height: 1.05;
+ font-weight: 800; letter-spacing: -0.02em; font-variation-settings: 'opsz' 72;
+ text-wrap: balance;
+ }
+ .sub { margin-top: 16px; color: var(--muted); font-size: 24px; font-weight: 520; letter-spacing: -0.005em; }
+ .num { font-family: var(--display); font-weight: 800; letter-spacing: -0.03em;
+ font-variation-settings: 'opsz' 96; }
+ .crop-frame {
+ overflow: hidden; border: 1px solid var(--border); border-radius: 24px;
+ background: #ffffff; box-shadow: var(--shadow); position: relative;
+ }
+ .crop-frame img { display: block; }
+`;
+
+/* ---------- 01 HERO (dark + light variant) ---------- */
+function hero(light = false) {
+ return {
+ file: light ? '01-hero-light.png' : '01-hero.png',
+ theme: light ? 'hero-light' : 'dark',
+ body: `
+
+
WebBrain
+
Your open-source AI browser agent
+
+ Ask.
+ Act.
+ Automate. Any LLM.
+
+
+ ${['Chromium browsers and Firefox', 'Local or cloud models', 'MIT licensed'].map((c) => `
+ ${c}`).join('')}
+