From 1eb1cb57bf6f56e0e88153fb852ddd49ed72825a Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:35:40 +0530 Subject: [PATCH 1/9] Remove .nojekyll, which Actions deployments never read --- .nojekyll | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .nojekyll diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29..0000000 From 5253a3dc3f888cf28cc2b189f0034e98de9116e6 Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:36:01 +0530 Subject: [PATCH 2/9] Test and deploy site/ directly, without a collect step The tests served a copy in _site that only npm run check refreshed, so npm test could pass on stale files and failed on a fresh clone. Everything in site/ is now what gets tested and published. --- .github/workflows/site.yml | 2 +- .gitignore | 1 - CONTRIBUTING.md | 2 +- README.md | 16 ++++++++-------- package.json | 5 ++--- playwright.config.js | 2 +- scripts/collect-site.sh | 10 ---------- scripts/make-images.py | 17 +++++++++-------- 404.html => site/404.html | 0 .../apple-touch-icon.png | Bin favicon.svg => site/favicon.svg | 0 .../fonts}/JetBrainsMono-Medium.woff2 | Bin .../fonts}/JetBrainsMono-Regular.woff2 | Bin {fonts => site/fonts}/OFL.txt | 0 index.html => site/index.html | 0 {licenses => site/licenses}/octicons.txt | 0 og.png => site/og.png | Bin styles.css => site/styles.css | 0 test/site.spec.js | 4 ++-- 19 files changed, 24 insertions(+), 35 deletions(-) delete mode 100644 scripts/collect-site.sh rename 404.html => site/404.html (100%) rename apple-touch-icon.png => site/apple-touch-icon.png (100%) rename favicon.svg => site/favicon.svg (100%) rename {fonts => site/fonts}/JetBrainsMono-Medium.woff2 (100%) rename {fonts => site/fonts}/JetBrainsMono-Regular.woff2 (100%) rename {fonts => site/fonts}/OFL.txt (100%) rename index.html => site/index.html (100%) rename {licenses => site/licenses}/octicons.txt (100%) rename og.png => site/og.png (100%) rename styles.css => site/styles.css (100%) diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml index 2fde9d2..51fe6fd 100644 --- a/.github/workflows/site.yml +++ b/.github/workflows/site.yml @@ -27,7 +27,7 @@ jobs: - run: npm run check - uses: actions/upload-pages-artifact@v5 with: - path: _site + path: site # Runs only if every check passed, so a failure leaves the last good site live. deploy: diff --git a/.gitignore b/.gitignore index fb97e10..4bcf4ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ .DS_Store .claude/ node_modules/ -_site/ test-results/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 79cfef5..5fba268 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,4 +12,4 @@ This website is under the BSD 3-Clause license, so any code added to it has to b | Non-commercial or no-derivatives terms | Don't adapt it. | | Unknown, or no license | Don't adapt it. | -Fonts and other assets are the exception. They keep their own licenses, as long as those allow redistribution, including commercial use. Put the license file next to the asset and mention it in the README, as `fonts/OFL.txt` does for JetBrains Mono. An asset pasted into a page has no folder of its own, so its license goes in `licenses/`, as `licenses/octicons.txt` does for the GitHub mark. +Fonts and other assets are the exception. They keep their own licenses, as long as those allow redistribution, including commercial use. Put the license file next to the asset and mention it in the README, as `site/fonts/OFL.txt` does for JetBrains Mono. An asset pasted into a page has no folder of its own, so its license goes in `site/licenses/`, as `site/licenses/octicons.txt` does for the GitHub mark. diff --git a/README.md b/README.md index aaff03e..932c2a0 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Ventris Tools is an open-source project for understanding EEG. Its first tool is This is plain HTML and CSS, with no build step and no dependencies. ```bash -python3 -m http.server 4174 +python3 -m http.server 4174 --directory site ``` Then open . The Ventris card's link gives a 404 here, because `/ventris/` is a separate site. @@ -29,15 +29,15 @@ This validates the HTML, then opens the pages in Chrome. It looks for console er ## Deployment -Every push to `main` runs the checks on GitHub Actions. If they pass, GitHub Pages publishes the `_site` folder they tested. If they fail, the last good version stays live. +Every push to `main` runs the checks on GitHub Actions. If they pass, GitHub Pages publishes the `site` folder they tested. If they fail, the last good version stays live. -`_site` holds only the files listed in `scripts/collect-site.sh`, so add any new file the site needs there. The checks fail if a page refers to a file that isn't listed. +Everything in `site/` is published, so keep anything that shouldn't be public out of it. The app at `/ventris/` is the Pages site of the [ventris](https://github.com/ventris-tools/ventris) repository, so the card's link depends on that repository's name. ## Images -`og.png` and `apple-touch-icon.png` are rendered from the site's own copy, colors and fonts. Run this after you change the headline, the `og:description` or the palette. It needs Google Chrome. +`site/og.png` and `site/apple-touch-icon.png` are rendered from the site's own copy, colors and fonts. Run this after you change the headline, the `og:description` or the palette. It needs Google Chrome. ```bash python3 scripts/make-images.py @@ -47,10 +47,10 @@ python3 scripts/make-images.py ## Fonts -The files in `fonts/` are JetBrains Mono v2.304, cut down to Latin text without the code ligatures. A character outside this set falls back to a system font, so add it and run this on the release's `fonts/webfonts` files. It needs the `fonttools` and `brotli` Python packages. +The files in `site/fonts/` are JetBrains Mono v2.304, cut down to Latin text without the code ligatures. A character outside this set falls back to a system font, so add it and run this on the release's `fonts/webfonts` files. It needs the `fonttools` and `brotli` Python packages. ```bash -pyftsubset JetBrainsMono-Regular.woff2 --unicodes='U+0020-007E,U+00A0-00FF,U+2013,U+2014,U+2018,U+2019,U+201C,U+201D,U+2026,U+2190-2193' --layout-features='kern,mark,mkmk,ccmp,locl' --name-IDs='*' --flavor=woff2 --output-file=fonts/JetBrainsMono-Regular.woff2 +pyftsubset JetBrainsMono-Regular.woff2 --unicodes='U+0020-007E,U+00A0-00FF,U+2013,U+2014,U+2018,U+2019,U+201C,U+201D,U+2026,U+2190-2193' --layout-features='kern,mark,mkmk,ccmp,locl' --name-IDs='*' --flavor=woff2 --output-file=site/fonts/JetBrainsMono-Regular.woff2 ``` Do the same for `JetBrainsMono-Medium.woff2`. @@ -63,6 +63,6 @@ Read [CONTRIBUTING.md](CONTRIBUTING.md) before you reuse code from another proje BSD 3-Clause. See [LICENSE](LICENSE). -The site uses [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono), hosted here so that visitors make no third-party requests. The font is under the SIL Open Font License. See [fonts/OFL.txt](fonts/OFL.txt). +The site uses [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono), hosted here so that visitors make no third-party requests. The font is under the SIL Open Font License. See [site/fonts/OFL.txt](site/fonts/OFL.txt). -The GitHub mark in the header is from [Octicons](https://github.com/primer/octicons), under the MIT license. See [licenses/octicons.txt](licenses/octicons.txt). +The GitHub mark in the header is from [Octicons](https://github.com/primer/octicons), under the MIT license. See [site/licenses/octicons.txt](site/licenses/octicons.txt). diff --git a/package.json b/package.json index a4efc14..e240c41 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,9 @@ "private": true, "type": "module", "scripts": { - "collect": "bash scripts/collect-site.sh", - "lint": "html-validate index.html 404.html", + "lint": "html-validate site/*.html", "test": "playwright test", - "check": "npm run collect && npm run lint && npm run check:images && npm test", + "check": "npm run lint && npm run check:images && npm test", "check:images": "python3 scripts/make-images.py --check", "check:links": "node scripts/check-links.js" }, diff --git a/playwright.config.js b/playwright.config.js index 6f1a4ac..205e447 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -14,7 +14,7 @@ export default defineConfig({ channel: "chrome", }, webServer: { - command: `python3 -m http.server ${port} --bind 127.0.0.1 --directory _site`, + command: `python3 -m http.server ${port} --bind 127.0.0.1 --directory site`, url: `http://127.0.0.1:${port}`, stderr: "ignore", }, diff --git a/scripts/collect-site.sh b/scripts/collect-site.sh deleted file mode 100644 index 189b309..0000000 --- a/scripts/collect-site.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -# Copy the files GitHub Pages publishes into _site. The checks run against _site and the -# same folder is what gets deployed, so a new file the site needs has to be added here -# or the checks fail. -set -euo pipefail - -cd "$(dirname "$0")/.." -rm -rf _site -mkdir _site -cp -R index.html 404.html styles.css favicon.svg apple-touch-icon.png og.png LICENSE fonts licenses _site/ diff --git a/scripts/make-images.py b/scripts/make-images.py index d571b0a..3bc8322 100644 --- a/scripts/make-images.py +++ b/scripts/make-images.py @@ -20,12 +20,13 @@ import tempfile from pathlib import Path -ROOT = Path(__file__).resolve().parent.parent +SCRIPTS = Path(__file__).resolve().parent +SITE = SCRIPTS.parent / "site" CHROME = os.environ.get("CHROME", "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome") -page = (ROOT / "index.html").read_text(encoding="utf-8") -css = (ROOT / "styles.css").read_text(encoding="utf-8") -logo = (ROOT / "favicon.svg").read_text(encoding="utf-8") +page = (SITE / "index.html").read_text(encoding="utf-8") +css = (SITE / "styles.css").read_text(encoding="utf-8") +logo = (SITE / "favicon.svg").read_text(encoding="utf-8") def find(pattern, text): @@ -41,7 +42,7 @@ def color(name): def font(weight): - data = (ROOT / "fonts" / f"JetBrainsMono-{weight}.woff2").read_bytes() + data = (SITE / "fonts" / f"JetBrainsMono-{weight}.woff2").read_bytes() return "data:font/woff2;base64," + base64.b64encode(data).decode() @@ -105,13 +106,13 @@ def render(markup, width, height, output): # These two pages hold everything the images are made from, so this changes when an image would. fingerprint = hashlib.sha256((OG_PAGE + ICON_PAGE).encode()).hexdigest() -stamp = ROOT / "scripts" / "images.sha256" +stamp = SCRIPTS / "images.sha256" if "--check" in sys.argv: if stamp.read_text(encoding="utf-8").strip() != fingerprint: raise SystemExit("og.png or apple-touch-icon.png is out of date. Run: python3 scripts/make-images.py") sys.exit() -render(OG_PAGE, 1200, 630, ROOT / "og.png") -render(ICON_PAGE, 180, 180, ROOT / "apple-touch-icon.png") +render(OG_PAGE, 1200, 630, SITE / "og.png") +render(ICON_PAGE, 180, 180, SITE / "apple-touch-icon.png") stamp.write_text(fingerprint + "\n", encoding="utf-8") diff --git a/404.html b/site/404.html similarity index 100% rename from 404.html rename to site/404.html diff --git a/apple-touch-icon.png b/site/apple-touch-icon.png similarity index 100% rename from apple-touch-icon.png rename to site/apple-touch-icon.png diff --git a/favicon.svg b/site/favicon.svg similarity index 100% rename from favicon.svg rename to site/favicon.svg diff --git a/fonts/JetBrainsMono-Medium.woff2 b/site/fonts/JetBrainsMono-Medium.woff2 similarity index 100% rename from fonts/JetBrainsMono-Medium.woff2 rename to site/fonts/JetBrainsMono-Medium.woff2 diff --git a/fonts/JetBrainsMono-Regular.woff2 b/site/fonts/JetBrainsMono-Regular.woff2 similarity index 100% rename from fonts/JetBrainsMono-Regular.woff2 rename to site/fonts/JetBrainsMono-Regular.woff2 diff --git a/fonts/OFL.txt b/site/fonts/OFL.txt similarity index 100% rename from fonts/OFL.txt rename to site/fonts/OFL.txt diff --git a/index.html b/site/index.html similarity index 100% rename from index.html rename to site/index.html diff --git a/licenses/octicons.txt b/site/licenses/octicons.txt similarity index 100% rename from licenses/octicons.txt rename to site/licenses/octicons.txt diff --git a/og.png b/site/og.png similarity index 100% rename from og.png rename to site/og.png diff --git a/styles.css b/site/styles.css similarity index 100% rename from styles.css rename to site/styles.css diff --git a/test/site.spec.js b/test/site.spec.js index d6c7b1c..8a1692f 100644 --- a/test/site.spec.js +++ b/test/site.spec.js @@ -5,12 +5,12 @@ import { openSync } from "fontkit"; const pages = ["/", "/404.html"]; const liveOrigin = "https://ventris-tools.github.io"; -// Ventris is a separate site, published from its own repository, so it is not in _site. +// Ventris is a separate site, published from its own repository, so it is not in site/. const otherSite = "/ventris/"; const pageWeightBudget = 50_000; -const fonts = ["Regular", "Medium"].map((weight) => openSync(`_site/fonts/JetBrainsMono-${weight}.woff2`)); +const fonts = ["Regular", "Medium"].map((weight) => openSync(`site/fonts/JetBrainsMono-${weight}.woff2`)); // The fonts change the layout, so nothing is measured until they have loaded. async function open(page, path) { From 67b528b6a87b7a97042352e3c3d584c209e49ba1 Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:36:42 +0530 Subject: [PATCH 3/9] Require the Node versions the tools actually support html-validate 11 needs ^22.22.0 or >=24.8.0, so >=22.13 had gone stale. --- README.md | 2 +- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 932c2a0..e04254b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Then open . The Ventris card's link gives a 404 here, bec ## Checks -The site has no dependencies, but its checks do. They need Node 22 and Google Chrome. +The site has no dependencies, but its checks do. They need Node 22.22 or 24.8 and up, and Google Chrome. ```bash npm ci diff --git a/package-lock.json b/package-lock.json index 1fec5f1..1573a2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "html-validate": "^11.18.0" }, "engines": { - "node": ">=22.13" + "node": "^22.22.0 || >=24.8.0" } }, "node_modules/@axe-core/playwright": { diff --git a/package.json b/package.json index e240c41..5c38c23 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "check:links": "node scripts/check-links.js" }, "engines": { - "node": ">=22.13" + "node": "^22.22.0 || >=24.8.0" }, "devDependencies": { "@axe-core/playwright": "^4.14.0", From e949190ea5eb2f0e95db2a5de13aaebe2d5951ff Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:37:23 +0530 Subject: [PATCH 4/9] Cut the fonts down to English text and drop hinting The pages use 43 characters, but the fonts carried 202 plus hinting. Together they go from 27.2 KB to 9.9 KB. Text is pixel-identical in Chrome on macOS, which ignores hinting. The existing test flags any character outside the set. --- README.md | 4 ++-- scripts/images.sha256 | 2 +- site/fonts/JetBrainsMono-Medium.woff2 | Bin 13684 -> 5000 bytes site/fonts/JetBrainsMono-Regular.woff2 | Bin 13516 -> 4920 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e04254b..a81fccc 100644 --- a/README.md +++ b/README.md @@ -47,10 +47,10 @@ python3 scripts/make-images.py ## Fonts -The files in `site/fonts/` are JetBrains Mono v2.304, cut down to Latin text without the code ligatures. A character outside this set falls back to a system font, so add it and run this on the release's `fonts/webfonts` files. It needs the `fonttools` and `brotli` Python packages. +The files in `site/fonts/` are JetBrains Mono v2.304, cut down to the characters English text needs, without hinting or OpenType features. A character outside this set falls back to a system font, so add it and run this on the release's `fonts/webfonts` files. It needs the `fonttools` and `brotli` Python packages. ```bash -pyftsubset JetBrainsMono-Regular.woff2 --unicodes='U+0020-007E,U+00A0-00FF,U+2013,U+2014,U+2018,U+2019,U+201C,U+201D,U+2026,U+2190-2193' --layout-features='kern,mark,mkmk,ccmp,locl' --name-IDs='*' --flavor=woff2 --output-file=site/fonts/JetBrainsMono-Regular.woff2 +pyftsubset JetBrainsMono-Regular.woff2 --unicodes='U+0020-007E,U+00A0,U+00B7,U+2013,U+2014,U+2018,U+2019,U+201C,U+201D,U+2026,U+2192' --layout-features='' --no-hinting --name-IDs='*' --flavor=woff2 --output-file=site/fonts/JetBrainsMono-Regular.woff2 ``` Do the same for `JetBrainsMono-Medium.woff2`. diff --git a/scripts/images.sha256 b/scripts/images.sha256 index a1b7853..2766260 100644 --- a/scripts/images.sha256 +++ b/scripts/images.sha256 @@ -1 +1 @@ -45f170b515ec00b826632b4a200db2c4106c8ff3533e610f0784246049ea02e3 +6fde50f69ce001154e250098d30aaa79390d53f777be822b4eeecbcfda223932 diff --git a/site/fonts/JetBrainsMono-Medium.woff2 b/site/fonts/JetBrainsMono-Medium.woff2 index f62e3d9b2fdc26abcba9db70ff04cf7135289ad4..a1d1537991aa793e2084dbb2f938a9917ae5c1bb 100644 GIT binary patch literal 5000 zcmV;36L;))Pew8T0RR91027D+4gdfE04QVt0246)0!`BZ00000000000000000000 z0000QA{!taDh6Nxfo>593cDDrU;#D)Bm;vy3xQw&1Rw>8UcmMuH>+g#Q z?|x*=E0CTh%SN=hkhL$+pJ+$gFJ6&Li4md~*wO4C9B?*AoD$^9 zyIaT>$N@S6S(V)_Fsn)eS6iVgl&Y+-x)0erX$6bo9%D1Jw&wLj$`gS_zYhus1HOWV zBG<@QUlxVLSl109q$$Aa8yK4-8ymnFA`LRCKqdCk%|F<_IASFbc-gX~e#HT~&)NY- zlf-I+x~KsGO*d`;3&?WXkq7up)=gOdpTl0QqQY&YKvHmI5>csn92$05kq%%)4vzGD zt%Oh`4e;_Awa#I$ww1Grlg}wHnou}a79kX-8|545w|YzqXC)`E#{=`(p2J&nHWx6T zO#UB6LvG*-MGl|?FeIDcm~Uf)L60T_+yclOmD(^aCc4?ZVTJUqxFmMiO$GEL<2xq}C}l zaca6bKz%s6aO!gimam%{8hQhHZf`IM8dYs;a~P_I)-c;JQ{SuxI)*c3&0`bw^*$P# z{n5Jm-S(C0Re6h=3dg?PrH^fFiWQx}KA`qXFo+rykpkF5pYhO3VibRzenosCOlZb~ z1!6B{s1eefq3|Zje<}-kn1V_`Bv=wVs>q9Jr(ID%JNj>m&4xuylJVxhtG$#H%K8H)MoJGrI`RWD>GhJ5&ztJ&wnCgT8-_oL+5>IPaP^~A zl+7|Eh`EK_ZS1)AeXZphXh>b?fOBk__L=K8el>b%G4$HU&3wO^Wa zYIwbVx$D(_^`0bt27EeTMJE)Qf?CG`IQ19qy;4Ovov_>kE1V@Q`y6y87-o_hkmiS3 zG0R7oEdxP8rNa6xBM)=~DD5Q$hC5s$!~ioV4y}qHKcFHk_7rC>2G7ob4BKunU`4OGm!`v@kTQOe{MjM^ zn&u_keWCd1<9%&PGILLAHZVL#KT7`sf>X(5MpclX(O!ndkkfHktl*W}OlM>Xr1+(@)9~f@rhAiY>kuiyoxmsZ8w?03`b!U0Vr0S9Cj?(pJR=Y<(qX!CR#y7G$ zBk6K6yWAmNDfJdwwQ;nh%KX3yPC8DGgt<7WgkEKFUE##(8O0+7hg(C7W(S@OPX1X%;ok-o;87`9}B9u;=Y=8Z%GqaqG-uZ|p{k z8I*5yKD|viqaT^0&qbHf_QtCF+M*Lqc$Wp8MIwnal4b()JuV#l4i^trY`o3UKVbPY zmG>I{pN-R5*~jITX>;zOEML1aY%6z#<6rvBeb8kb)VBn#>4dL-`+)cVMBFIJqkdz_HM zLN1iVhz@dvEb^bdJZ>k6KxH(N>gy!R<7wK;Yis;T&3%3FcCEKNz8F=Rj2*id$A_Qp zJFe`;5Ai`de~1s$&ZAB1TL7gC2QlNIjo4imu*KAFdsExp)S>p2rJv@Mg_*zne>s0UIw$D$ zNMzr{zkSnWs8|XLoPqkIOD&d6y;G75O=aid3!IJAXYg!YJy19nPf zG%5>~MuUn1Ds_f1PM6wB|1uKLox0X-`5Yl7DiE;l?cas}bQk++i4@)NVFMi{YWc7Q zT;$E=H(+;-O*tEMUy@hQq+uD~Jf6Kipt%==Px)ZqC z8ISwwz45p+Au-~+4cab!Np6%qgdh*ejPjQNPkm=_i6jGB4a8(b`fU~Kx1m}CDznSj z21lpdXF1vF%O*{+Gtf8XK352VM$3PQ5e~8Tw#+d2{pfJwqSDKMPXdyf+r! z^VQ1Aub$ad$V@-G0IZa<040x5s)A+`{+!k2=xc3ddaXyQU6H!S7dp~4VOyUo*l!=9 zTx^F;#x<*&Zc_l z1ty=6D=>Q|BmE{FBM(X?88+@HQj0~1MlG9^YgCB%w;~4{Pco3DEz{hLMbV+y1gxur zbjsm}8`~8*T@x0II5>f;>ES_U0~6dft#LGn`&6`DD95yj@U?z=mVU7F6(;BR9FR!MVo#~eKJ}4d*KWOdm=QZ%KTrF~ynR4S1nvy-#AXaGPy)Q)Y|@oU4aHp0o1$-WO@0tLpLx9?cKeUaPq40;us42iKUpX(GH_0jfD~Ap z(?s*j%W{uHS5A3@s!es2JW}{+PR?tbBOM8OoqV!8;N=dl47mex2iJ2Ykh?cjOVp~>JV!U`=&Oz+~Tbq zIIuow-_7Spy)m;c^E{osBtjf32$FWfe=9ZA*47o@`^R{XiSdojUOW^1wcN-v{Ie zqTG*ij*w8TsX3;jhwee;8j)C`LDP54k%+>#_mp`Pomi&O2dKcDVhtxL=l6@8G1>AVZ4!9KtbR1mig)CW|=)!jXmpq2E= z-A8dT@c=E-T2Z|TRr-E^9^|XM`FVMB^SW=U00{E2ipTawPK=I^9VWrj{YS=6MdnHb z(@9aSUQV;<(LpCO9H&H*m`3-=Qw9=>w0kH*(TGNkB3d<4k7zWg*>dU5O5#@X!W5q6 z4w3cLa0GVjZ@hK($;iqFD!#ZxABXa>SB#(<4B;bcO!};62PtG-i!zari|?2pSB*CL zQJL2uD0P2+qB?vXEqYj6r0SQ5XsuD^^~sDjRZFKvYm!POX*G`t?#vjQlcZmIyE|BCuZS>JeLV_MFl_^= zY%!rI2&I2wc<`z??cz@yRlij1R3Svh>U3HXp^~gGaCP~2rR6`Azn4?`9Xx+XR6A&> z1@6o0drFG$sb1{jl6$HS$GrM{3@Cb0e73mgzM`e3WK}^C)h~ZFYvqGEx>XOYT=CK> zUCxV>go3B0ftl&KGqHC#`hIRv-pk4@$Y85mRjJ-C%S#ApIIt zNOp-fbgM=r72I|nTy>f1u)bIJ)E&F9JW!Eu2~;kV22IvwYw$J8tauh!R#Y1ERxH18 ztp3s?SYLQ~k9=|F%omS;pq^dC7T? z)xzl$=chw^I0v7*{o3stO`HSYcX!l|v|MWj3O(OLY=|n3RX5Unt)(t7;3_&aoCdcI zPX!4E&upK67z@agL{c8a<{!yyV{oFL5b*x0D0twQ-jHd?!kX=TxfOr$1O)U32|lmN zzT!v{ZK;$Z+9CC{SMm5nJ&IRwo1DizQaj~i#F%V9wc@ao+ib6p!BfHW{}cQE-j{>D z!OG+R^RzvmP!rIm*;a~;v70oF}Z=S>7ZfPXL4aYLD0SopB9FU#*`*=WJY^1qU;%PhfWv(sbExBr#8z^v>OPE_WNkIS=#lhlg; z0DkwD?)^_k-(C4`4(O)r>kPVa!b)P}Bl@ny#*L8$?RK)c*@l~9O?tDcs$)Cb&}p%^ z<5YyPIy~W?P)BiX+4|}@cWqhOI&Q3bJ-nSwx*1&FZtHJM-&?Ph8Y#R@Y7y{l(taVg zs`S3nvZD|EX%F~!UEY0PfE;eiwpLZxq_NcKfgGMhC>IXF-@)_rdEj0b#|jGL#l`W$ zf*2TXh;I)CwgbBWN&!3qY!47p%W<}!2iR#&{+8wUW010Vn#*Z{KtQkFIcEHf?qv^59bVx_UhS?9pXy2ScTK4hA8hP92IVhigc z>t#uCfW3(|oVEy905bksx#`Mi{{s1M*$dLX1mN$N%!qg0o-KdL|BtZ$vj+fhVFQ2y z{;w~SC5JTA&Favu=a`KHY2brM#X+GPRuFKZ3OL4~6E+BNvD@qt*^ zFG_+`Bd#NkCecTS3G6^S0CG$Vr!QV4VGDi(0HA}~ZN&}^S}_|-QH>Qn|8&FiJsSPM z4;b{=j&nChHgnC(EmAPblP3$=8hDRXR+PA379x0(En58QwqdfvT==p}Q8vgPJ2@-+ z#B{E#8EJtWN=-fPFkcQ=IdX>_LBrfHN6DL??=9L~JAz(e5hG%}+&mIE>IioxhqVfq z(R7#z8mBMCD(2%plkvVKFeTWPPrLh&YshfSVUI{U8TE8n+N6 z5EPNDi(Zo|#r|Ylxj122I ztT0c&6ZP~-wfLll244vt5$ASss1m;{h`EBoW9VGK#FKVJ;t2oTJuItpo})>$5mCK*Obb_X|rp0Uz2}d_J-H9J)&|_tTIy z7=*QHSTZnt2pwE1NL7f_0(o3(;LsdS#6-f8<5@In!O<=P4`m+R!UQ#8&5c^NQ?HDO zqL(xTPa65(|S)00bZfiC_mH41rb~ z)N3VUTShZD50Hp|C{`l_!NvizP1_Ot|F`4hu%c%0Yg@zvWmT|P=wK)N+@kZ2Q`oSv z)2KF;UUPfSvrkl#Lj^l*L}{+jOv8y5{_N zMw8|DyI@1>t9q2}*ih>gace&J{p}P92n;W2QChF^08Z`q8K|v}m zfIC{jqVG&NQbAJOT9>8U|K`e%T)Rl!zH0k#`RLGiZNAM&yoCOii8l-mbb0nswfz-! znj)18ZvU!kA10?G<&d9AdSps-VH!wDNvD;Dp9+|?hFQamZ933>n67`xc@zyK2N7cS z)c9T*mN&KQ)Um_<#R?z*zP%IgA3#FWS64edH{soe=9*ddES^a24N@hPH+MFFmD>$4 z&1^OyMN5nC|Ji9OW|t7+1ztUx_BZPr%-v8smAWKH$tEhIh0ir6=J|3G!&o!fRYXJ5*C1X z07TD7bfQDfARy^*yhMddI*o^N2%+-1%W-=QF>E0K8dK59tP`leBfS2>JQ#cXw z5en%-=wSq5j46aUtU_4B4ul)HRk#J^kiktV=}1@4PzWbFfNdjgJNGocM?JZ3{gUk) zNj4*^=3}QaCg*XfO3yGHw$9Kj^nBRgcL>`HgzBb}?1HBH_3Qu0N~k_3pQ zN(0U11l|UM8pheX6;mk`QI~@UrYk}u6Qh#~$TlWl=Pg8N`qjs(Yv6&(^y6?C8Ct=6d>S$vqJT7e0etl{&{bG|#Q=4JGYSkI>&rqa zqzx3fcni%eAZ$Sm2ReWUu>xmm|NakP!cv?eiON-PdrHmKnF+~~Q=2X?A8HI5I;GTe z5Zh|3BrDCz4V>BBxh=|Q;4&-Tnr)?a<|=ihqY9>vEapfn9hphy@31vPdd#}1U3qQ?XeNO1ytY_P=)MXJs8uVKy{Oly^@HXl>bBN0PFJAuXWYxa-!JCl%FW@;T*n; z4>VW5JYTIc{~;`prtT>`UN{+&rjr9>Er}4F(hLw`a0Lal%0)p1v0@8qKz}6XF0Z(n zH4%c#Vy=gUF#^e{NCyEmh(iS$H11wWtoKn;5E!IrA{HJo&ulWszjy`|1484Fq%n>?lqP8o&h9J@zK*VCyLw932f9YiHwSL6deu z5EI$f4wI#*qnn+zvI_hnk`iZ2D_(qMntly~@`#!WL&ee-r1>3GX8BKh+O?xZo z09_mpsC0uf)fJq8>{p2t^@42rX}9a33vhapkKMVF8j51PmO9l94ZAfr2G@je;zqWB zz~e2bkXPA&MCtE~$^#~8TcIc2Atf=}xLRc!as8AY3^lr@6E#mScON4P4&bAnH9AVi zq&K(T8nHUEoE43%dNTiyj}(kSH2{Ord_PmLkqAy%aB%`-MheDaW8^f%xh_rGRxBBi z7TZn+K^n&4!#AJRd!zRl)s zB8yxQQ1e}68Z)Wfr9Y;Bq}aAH-^mLZ9EhN1r!i&DSs@tg=1E#Hsl43`W&+s<319KZ}&jY-^=Px#`I!bAZov|TJ`1G)0*v3xrlIzRCb zG+4WmrlPU&D&T1V!_`=UU1ZY{GP+doeGLCUH`m+~QBElb-?wcLl@J@C9(kP`jfcU>>oxRHM zY`D#y$s|z0r^e9WSr!KoopbtB`5jHbOV2-(0Sn#-3`xAOuVa zh>(;4!=uhSd625GMsia#yrbrrH1zChiiwGC*eIZ1s_l`cW|wZ9F$JofX0xjW!@SZW zPC8c#`4W{_qwfXWv-OF+#@(`azhSgw7OZ-nH4#d`wAG<5rcHz&I(dEXOm$Bi98pG- z=*B&LYv$@vX_?D(ZX8m#KknSLyY5g?wB&2u2{uH{le@sim@KPm?P*N!MAB%oWLbi4 z7k{0GiVXBeCaXpPJsUE+0i|r4N$){+_ql^9FYSlLteRh{gCjPi8Qx@p$WjrUD=W-< z1Srmz1r{t7!G*GlMW!)Ji|HDc1VnJDq+%Hs_od|&U`0R#S4wKFau1Wd8k4*Rle`v_ zybhDR9+SKQle`hrwoS-1CDPi=?PXi>ZNYZ2m3+pq!`L=p3l_F3BJWTHcJ|S%9C!Je zaksBo>;dh9d-(FiQ&waYK<8b#d*V%sL%G=I)- zTAl^I0^hL^_d94ufeJ%*KcMVY8bL!CRkx(6f>c1JryNXx@*PScnh9f1R8&XBrr?h$ z2}ddBL{HpWqS?8uC{(4Iz%y}#j`OfwIi%*+owEUOnFQ(x#k=Hj3L3gM7Z<$CQlx`? zBEE3!srBj#h0enhstp8n7oyhBHr8iBDVOsLL7_3IDGbWj``y~-)QN`{xEOqLn{C!Z zv@bMt$x0OXL7!rd6$-_G#To|;4J|CA&J+Y4Y68I>x+I-TNujF{Cd!>U)qrqQ(#aEo zV}Tb0qu(n=i$i9rT(rJ^e{^{dYtdwTo%3Bp?_7S+L1oE6kMEP)*`K3o;0OMIppRg0 zazMtco}3nh5aJ1P>pOZ4oW|VB&7?_M)@Na9Kj{9F^nrly9f1?(afvfrWnc!(h6l`Z zHL7rRgvpS|1B2ZFW=1JQH(~Ln8#B^AsCaNPc+Rg7!Y^f$%+CXH6ASGxG+r2CdI=kf zi6^us;f_&u33Wll05E(y>Vp8L^QPxGcce(j5ChJz!!CQ|lEcUuLLbOukSDuf43VJi z;nOUKWvX!St=R{sY!!?p?5|#7pV}8ZoaUpU29wirr|TrFDoUROM`y?}%AHQK=!V89m(AJ2`0BvA=3Ide4T}}y&K@g*j5MFd!Vb|lp;*GFN6#?NVqrLP* zpbUe=bMjjL04bROjevy)B8tvN7$Kw2rWb!N`C`r<$WeLY9;lH$Li9|FfAE5cr{zvN z9rz$MR7*6PXBd!sD#kMHbus<}5W1UtorWsFSk_D|Rt8A#7?_BourXfA&}l$+nM}0d zy(hu(@$rx%mm1nY=q4Qog^P1gps#{8kCx^^0>3~7O^Bn+P{}=~dUc@F1)qFgh?Pdp zbaH;JJWxGD%uWui6U<%OSTL*Y4P;C=@shoYv?4+;v>aaf)L>B*uiBFom}EOD7qAyQ z13E*+h&sf|ddG)2gvp?_Tu+A?dV^p3BOsrp=qN_ecJ9>%h%ZLgf$b07z{a8T1yyb9 zBu5xIvqN!|ds)O~XUkr&h3Y@z47fYxzSJ4PK;`Jt_M!iPahbWD|DY*hXq3vxgO!4@ zhNRW7qGfg3m3l@AB8B#p<6Z!U4%de+GeUa?S0_;{c&{}g!C9!vSS`E-ZuC(M6O^Zy z683hs6qA-P`N3Eb;zB1Mk!YAUGTL`h;-4C?G6SUaJG>T6VLWl=56jYh6u6pK{A5OU z1h%+72;~7^nyI5KhedPiwLm*2c)bAXU|hs8nD5-QYN8!0W#xI2mi8BD4qbMS;h|K_ zBD*1jv(=)x6z_c2siX0RcOb?~hSfDk2hm+i#7e4}S8u`nfyPD3XjZQ?zs{j^u_N>r z!J#}eNDcT%o{*$11q(&-QwPi(aPxz~4B>i_lqkh8!Rei&5F^TRxSC%Y@_ehcv6q@s zG)hCr5Pp+EfH)wyYJOEy;ZUl{uXI+~=mo_S`LxdlVV;%^^N=B1p9uz|%`tk=#cE$| z)P+W$qb@{-*wOw{tDjNwe7W}(w1blRXsYAkM0+-b_e)tW1@e#Jc0gpL6ktEyj&Ghs|OX@2P(V_7tRxIs;^Ib9Z?h<*;10*Hxco z=Y4#=mpRpKM5XXFea0TncY-{ZJZ5HsiL6B*K3~|y8c^uhFvskeqz3Yp zlVjZb1T52!7t#~C#Jn6&ZuL_2Y_WQ57Rx(haiYCiwmWF6shZ=#9PHc3Z9SP#W8rG6 z31ADLQ+|YGQ^%HKyf%8r*H|ayqp`b4M?+cmO!7qs20Ajv6F&F$!64(f2dUVMnOg`= zXBhtWz$`I(sWOYDTBPk<$X%HGJ6fj=d-zQ*zm#uxFxPh(MzDDqE{C@BnZ^UzJ`p4H zB*StP&8WW7#*63`jEp14sc7?M?5atOfwfGkzy_9aHifMI@S#CqGu`=dEgi`Mu4u~&e9P!tlS==oaLN0B6nEx zk<=RR&ead?V2^niWqn;6MYOTmaG~=(PWHhF{aO#nu2?=1A2QPf z@tbO0x@NV`u*7~vy5_czOEl9Hh_$4ptBynI$<`59i&w15>94a-oz8}NIA)#Bz81Rh zzSyT(?K3R*nO(DexUb4kew%76-8DPrIREYh zHu39uEa$0hbx#TlR)!=BEcKcv;dTI8$MTGEghw^9dy*mV+6SW2zXig-C9%d~nFf)9 z8l7wy5Rg5|2%&Q&BOZ4$>Lj2!DKH1=;5k4#2NSMj6uR>gpewq#C~vu-1ZiGk={E}< zTQ`Zcb#enyR;%Pn_c>Be>ilBBrK(f`gkP-dvpW?!oxD=6(<+>FN9%36a^xTA&wZ^v zi8J*GrkkbOsDJ4&PG{1#NG)}@J!E@6_I<5?iSWaiWt%0mFmcD;t@B#^AAk3vQ(@invEWD&;b#SESiSU%L%dX+daN>}^bYiWnbPIe8*n z)}0Kx$Ip@X0RM``h)lYNbMKVz(W-fw-ep5BIk7C^^)3q`gAiyS60c({~#`}i` z%C-3>zaA1gdbtXuk1Mi+E-nHIh2L=Lq-LnO>N0xW?bwsv=)mpKx~8VW(ctaSlg``2k>L+U ziwuUMJ;NW;{#lZGKCr3s%2y@zUp=?6(mVV7l3I&XP66>rr-EX@8~-F*T|F%=-fqhz z!xP~@nd8b-hHX8bP_KQt)06J9K}?gP85T9&!&EYu`!<{zi*=|A_QJ!yD!y9g0Z=gXG3X^uwP-&nAnkjrH z!}LfyS>7hwl(xQ35l2aD(^l;=xyd=$d$iX%n6OHoMGhm+N<=ag-UrLj0Rh>wJVK1Q zmPb6!q&MB+sz$^jK#4$Ouu=htf2($-JCa`L<#q<^PD##krl&9J;cT+ml6zy8waYf9 z;o74_$~BO--6kuw+7uGm_=y`}WNZBrz@t_PT-{;?>+N$3>oeby+b8vwxIpWS9zLM5 z_}NVXwo)dCYB9(*LnF%oKU)i;vNNI=fbE8;J(&N zkTpXcuXsy;FI6a15TsDaUmHD&9}O$5EzOhIq)a;aKK}kF>*$nYf@NxClX^(|j1t)D z4E9EQor6};C^=5*by6(>XXg^84*?(a4L&ViCY}yEQpEYRHR>_K3X{|4h!9R_Mktmk z;ck{0zZE-)=e&3Ur`xCSQ3yf6$I@|6mUB4fsq0P=3a(fTA_%lEpYzPp&s*(NDOW#fsIA!iNBVk9vgVt&F`cyLSZuE9_U<=7 zvVl07zLvDHT_!6H%O$pDQ(7_p+a@4}$s;>>c3c zz#A>Twsh28_G?2UE4xPG-Il*AZ>-g8>4oh1a&dQ`5J7s`VzUH7FeoEs^y*=0r(2)| zFb>qDkx12Qsl?hSK;%Mg2&RsuN}Mktbfylq_y~Svf|&RK|3FmsQRyTuVvwEjsH=X%N4#;MUSa_(cD^QvJItmakFT zsj0TtU(5`wR43+a^#_TVI*>D4WA9@J>Db+Uf}jFx%(=ztq0@Kq?BzxCDwY;hiM6vl z@ehnAgp!QMD(mYeDNF4_X3-zJnKwiT$Te~iP&CeAsHiD7mRDC))-zgM zSWWf~N1OzpL_k1=00Ka%1Wo4C7wfUR@sm@IY~LU*a4w6eb{uZHd;Wuwk{k3dP80WY zY2ph8KqU&W0R)vk@85xQN#~>9$e@SqDvKs>Bp*ly%G_j z(m{cKNM}a3N!Ip@pgu(1LLl=qRw^AJAhtWX z2(l2{005Pal^MwV7DA0ceeqPySrMub2+$U>R3R=m>Ol}}IqX|AeNLQl>ZdA2uT<=I z!((SSld#5CSoh5-9$&5AE!%EwjcMJhV(NxNtJ^OeQY4CMW^1ayt~Hc4AZjXurK#P; zpq_5o9Gz7QnalKehtg2Hh)!QjtzATGP=~E=sH>Z!j)$}csR}p6Gm6Il5f6PPDSY_# zW(|Zd@n_t~#s8RnPrXuu)YX^gl-~~z&DY2zfEwnbHm;pJe{y5tfVh8#6`zVv?#p?K zviKvKQ|8qtnm1j|3E7Z4{Rel0T7ZKT!xa^cCB>|A3fKZ45~iePk8#xxrEuqFy}8)^Eb#rZ>hgV+Q7TAfWi@4u z<)_cVGFC>a&=I4CBYm)}=VsGlfK02DNOh=eefK(@PYCoXK`w3;t?N{%k|?9)k@nLs zOiIrvPfigbwY(4Az3=pl_d7v8=h5@go>%tp?>ku(q*s`O^@Y-q-cq>Av8vGGaE!v2 z;A<+q=;VEZ)3+w5(86wg@yH`z+$u9sU$kiZs-}9h{dF%I?qXt}`%$2o+Rw|IC=(`h z+E7vL3BT?uewb5@O#XCuPu0;E4xT@_ku|&T`_6XWa^rae5ZLs6R&3b$axwmL!+9g$ z=nINtBII$uvz`fIUPo5j;^Sx#PGU(ogf5=UYV|rW0mfndMQ>Jdpc-wKHXAkAX`%GL zSR72&9m3eG27B>j5;WFJ0oAZnwKuTXm;iLpna%FwK{|KBBiIOZ*jaqs%{18Qko1|* ziT|;QzbCNzy`fW;|4-C!ufPzD(kgJZpMp8)!9gMGhgRC#$HXhv9a>Uxd0o(aPkG^+ z4>!6*Kg~+s!LtEk%d=;?qMHrWyfw3Ptk@SySxSDIe)R{H5uW~T`lnt_?dZ&RGd~G( z=+}O{{(bZV(F0QWn@aHS$!z9e7ISIN_6^o~o-T2M5``kodNcRa`~%7VH(S0pneNCc zv){5XpWh|OC+c8>Ytk=c!}jm>?2%Vx5_SqK_Jkv!Vc5@Els>C5-EG)vO! zb|<_f%(vt(A@B^pI>P?$yzOvKK9j2L*b&2&P@;WCKht*T!s_4B#Jzuq+NSl>?bAcV zko@oNo7b>wGp?EI*!7z&$JRZ%^=58+WbNEBv17-!tyi&H7V`!ASGBcY)9GJtlfL@? z5$hi7Ge5k6uP97F&HJ%4*y$hXz&Iv(4|iXE`RFJ-k2~f(`$m6OrW{Bi?-v=XFB@G4 z)yUEqFTHskyFTMIee`c$G}^|e*7LAE?`qNi^{`$C(@SX&K3~`<)OG5iCjD!F0qcJG zjpj2Odrob{`~QwVSqeV6KJ+*J?%im!ei6FpF@U0mh9QTs+q-|AZIc>`H!AWdC?&6= z{5+7ZOvPH{=psjnoIyUK&{pIga?Ro{%00;2dFF71xf}1QH@q-)Y$)@Std9%lIESC! zJAT7)c}wTvXQS_yyj#lU8R7$E$QT-J@PeVf3-2~p6xunF_e#Nt!hfHgTP{0pjPGTr zr|fIA>QT&sqod0;*2MbtktJ<*++eUd^s#1*Nzu^0Jzd*jwzoN)5wFGN4|ff=*YN7r zGUCkDb#-f)F~(ZM+w*Xr*8#WLdYdx$3RF^^)6pt5bJ#X%FPGUsy+*COcjixfaA4P& z-PeNnvetQ)2D(ieORYFk%93zl?(oFFQ(xPB-NyD7Uzg3Y%f8FHi;;h@JJ>%8d@Yyb^@JI*orTe4I>D2>Kp0n{qyU5TQmMW#L(pwiT2 zbc`@iep?9d&9q+{6xQBfr(O6^kWbrKsAGnVF-S3>KcH6(#2{l!^d&?a@nDS2vjPVI zo(1E;uqKu=!`d~F#+X_mS}S}+0jWlj2TJEkcV}%G^p~kcZ_^E^cME<{wJX@jA~^o) ziHi|{tGIv+Be(Sd@OS70 zaiaL|TdRmwE)LDXxw@&6PpK4CQpC?s3wi`7j0u>VYGM?P*VM#oc8spw5Z^u++@8la z__q&)?Sektux)$i_U(Z-V~df_?2)JxLZP-LknSx@D=#CJt@oik4ft#`#XJ$urPNfY zE7`S-m;0k|YC|tiv}@aGJN_a5;P7j@A>-tRcv-EAD-kc4;#e7H7Q`8D#fytojPZqv zDQ3p__$rzIfX`RZD_N)En8BUZ3l&J&ifI6TKsDtXDI;ako*MM9<`$gsB zuKkkgRzJ7)3(8#nGRA%d>>ky!OX(?fK+|&?$gT3|?B|sq)_zgN%3s2W=b*4WRW0`@ z)AFO`bKOgNUAxt4rukZVQF&E)O?gLoS9wqRXslH}`tXMS z-D{PP{}q>|&jtcBhfhO+_F)r15LBUdJ5;)b-~H)(T!L;d%LQ05v-|?xw*XA{D$PGT zWdAO@mvQD{IE|W@<+8IaP<7b;?9gJNk_VLDRv%;N%mdvXpbaxzta+FctFr>Q5!=Wo z0mGIuqx|W4uH<2sFC0UqeCuw{dRv8Ulsq8N_zlUBBjg%8nJ)WL&f0sxPu2tEBuSTN zWtio1gZ!pGIx%}W3uz+C*}I1gSmEe;T(pWc#BXK z8@M!>Zn#;gV=O2J1@e>D??1143!$#!y`gAs$;H?JKJ}wn81NN$>fnSknAU?5ILyGX z@6Tpun0|pwng9CSzIinlkQS!VBizEbKqC1S@+>ItktPi+Pj8?+8?1b0@8NnW{j{SW zf6}AD0G{GWMe2gIOgsMAV5;!_mL;l2TL%eh3{L9M59QL3Nf^{LmUWO*_aHVkpZs8iFj_lI}Ui1ln?XR0JxJStiOa0nh^8Y)BxjFsA4 zEV0xz{d~%CE?un(gek2RoFcmtU-CP(L6Y?OrP~15U$+BQl+r_$PCpuMNv&aB!W0uu z+=jQ_U}@wW&QCDhS%nmFHK1%rM5bcZqT&4;f1qTHd7`RK12GONJvm;NBC}nMy2FGz zLvPI@+T@j+h?Xcz7TdIy40P_k#h+;Y5bMc7$ipckj^c=@r{UB(5+1{C4~6Ue*XPNb zSCg2ySlbyvj{9=k<6fB$^_jSbs|LZ<0L-^(DPz#0J&@+$D0FF{DBI8V zO5p*;+8U-r4xU@@XqqsAaHG$Rhp0)5nA;3Lma+pdP;J^(}@NW4yE1&xd~t<#b~Yic_{w zt_?z;y3i8i9Gh7&bE8u(@nSEW3IbdTx+b3z5027SXzR^ujdjMOL2<)QmN&CfLx<2E zj4om506VpsLNhE7+v@Cdy9E|y6tTCstbI$nzeJC|iinvH?@EWIh9RS@iuH!_)QvgP zq*t<>=*2v$T_xG>M^BTqIO-HAbU_at8O#YtGHsDcZIFZdiXEBdYXnD(!f0dqb2Rl$;VqeX z=by1HxuWVXdz9?!gC9-%?#9BCk2h~_zg@mKS^BoFiab%tsv*pVgLGWwW}_0ZKjR6 zCJg`c@3+a24q%4R)UCGtp)t}YYaU>A2lK?dOSNdXv<_ED-?2xxHT@KUCQ1tNAs~bu z`N_pn40qOg2D3zN0Zvtmi{4#z=S*W05CPs3g2W)hEsom0M^~u1+-x%oyJvm89hTEN z7OqG9L8Xwh$Qf@P4KjAhzoq-FD{T9t!w*T()-AgA$nK8@i-oJe?*&XbFdDzMG-!O4 zP6|5C*5teN_tta!*iv_|DZ%(p!dHKLh^r;Q@|d^k_%OrI628LP=fnI#Ys0y}6B}-MW%!(Sr+Qa#$l}Dblq0UldeA*6t8VMbWg z%xeqcNPu2g#d@3IyMnCUsgTz(xS;mbjvDo*IQr6ICVv+J+Jw#8F7P;dnNZ0Rg(=Z7 zY#8y`$i_Bi>cK_%ciNdNu(_T&hZJ2o9d{K=v$X>o*0(5-#p^*;JnW?1tR2TfkD5o1 z?8isJ$2IwAWK===m7hE}DMoBfA1M=j(llvkx2wZBZ_E>bS;s^Dfdw^PyoDYJhkBDc z4xTX@IagLWytPhh!KnsK;>}S!xPYDCTsw^bVjVJ`yR>SDxUvkRIqA9+W;m4Uu$$a?-W*}Dvq9SNGg8HG3I(+XkaO=InsDeC<6S{o zmNdLYYd;7+T+^L|#!6xXROvwmaEU!N!7yz*!dZMaQW9aN0VUYf*V{MGPQw)`l=UY9 zF=c3m0v1jiQm@3mXB*X#!wgmODxyh61BLj^cv%$E&7Ho(HBqjGJ~FC;y=+Gt{$bZx zinOKje}$e+^W;_*8__Fs)6sYW97%Ki1xvh}8x# zb`O*^0DY*kkV;>9hd1!wvklkUjS9;rMnj3!4Fm}-Ui>!x3-ZN$_-X!i#+7ouS^2y` zUFlpQloc|n$f{QoaKt7yB1?1__i7DO`7*g`^~zt@H9-BC&eKrjX(D4#p{lUJ*!PEr zF9yF3_yi{e4|Xee0xC$hcgjD}VZnE?Ss4pOkC}D0!Vuf9A7xr^I zs8Q8@&|&J<0!gmHBcc*?ID@R$aG~U&Y~s|pk>6v@I^TrryJf$nI{RH1O~1^fv~c{A z4Sm-(RjG5C$}~}H6)0@LlM0Y%grBCTqh_rk4LB_?R)CnqC%lI%hFaI!pSKIX9*rYF zLU&5PpFr;hWCM;gwhzztlHSDb((BWHpr$Aj4QVp!(&PkK(3>UtUXs~eYL*e>omsse zbdC{+0bHQzjK;Z437=JLK7$z$zliFSK0YwETd$6Bb&cUg9i2c@*-l+dZWX5dk*)uo9J9uxsoD?D(4V? zLHJ!))q0KJa#hb+f}I=v3L1-U+s zGu+*cUU?c%P=#G<0H;NB@|9LW-#m8dNDV$Q=YCq+SSrzD?o_%%G7nq#s*phd%_4pZ_0?nMDmER`DxS=(%3KwjJY zA#8ZdOjUp3D)`s+%xPqeMg+}t$r+Bm&u1Dib<|aX!*@MRxoRI5kg*5vX07?SBCa#y z_>@|doJMC5kau4cqFWHx^b!G~XR*l7l8@Ashda-i=n<=F5S=%f;NJ%P_3QJxz_t|T z?Ze0HNh{eoBK9d+32=f#{%1}=2d83-GCn;wrz1rh!COaZE6C-|fu_(o5UwDQ6(F%P zs{Vwq#kNswtgrM!CNSkgbTWt}+N(eNSXq{yQl_r7>hCb$+Zrqe9}?b@AAlSJA>6c} z9!RNBTE(@D*i=*hEM`|yC;*7)OQz?K4}X7N9b7n)YiBu#@C!q|k92xt5`r#kVi8y_ zphU!9qj&GC`^|&{=NWSWnbg5ab-}H!StvLPYaHgbC<`wk_P0o4>E*-8c$B`ddNa)g zDEhXnZ$%}b(lR`bxZk2sgp$WTP!VzNdUi}za|d8I9GO#_ldya=N7gIG&SP>fGE%0Y z5m!iyxWN|ya1D-|LA(xEE-|BQ^Vy?uuksfaCGC-Mdy?R8FBB`@^JFdHTkUP zV?;8VC3+1*NE1O$0~&-P@i&Cu4b6Uz%rQ|sMW4*)^DnzL(Mh{Yx-|y}6F@er5E(tK zht@?*wysQb@m_vj4<4CKVBaorlc>>}gB?r4iG}!@s#{F{6S`Mba z90 z_Hz8FNBrQJjb8sB&{<_vy&E}Y z3vSU51BDFF4tq$GVqF}7rTCb=i-6$men*LgC!g+bFV0SuX{cW67j+~hEggrQEK}5d z;jGt@ra1B1z*xBS14?$0L{+R}#fsbF#RSPswZ(2{VfyystU6T$oO#;ZYem?XDk=KZ zq#!n@Efj^lrV#v?9={MfNdjD#kZ80`K@FIytH612Lf`Z!k9gs+PL0@8QyPTY4B{3v zq6VhYlPhT|XiB<#(rB)ntpRe zYhMC<@TGUpSjT_dUuXYsmjCp{nQy275cuu=9u*Gx?N0jezHRzMIhd>0G>FL<=@>@$ z>XzU<3}Iw-E3g2=ID=iv^y)&kHDVa&;IJL>OVx$87{qwYDYa13Z70mYurh^{*s;2? z((2is(n-Pvn1=OAcy(iT=7?cCgs|6ZIA=P=xv>IM?4Z=iaSmROw_^l{F^v66C-z}8 zj@Ye)XX6=oe5pqG20n+c>FZB^2Lgcf60H4ccHgYT`N}Z+s&dFdb z_Ic3|Acn`$5Zwjb3sSpK$i3|fAD_2tH1KPwZf!RRNwD1{Uk5FT3za;_9)3z7qt7R(e7=JAyxZ%d@NqwN9Vs?;GX(-D8R=rp$Z?D4^**q&|@|q z0}0CTMV$f$#Rpo19Sje&i;3AEwFt}rY6wk#&x$#$dOXQy#2o-}RKzD>OdsOHMttxb zLO5XsH9da%4bxF!E)TbWAt9!0`rsFBkW&mFn*f&(q?r;FR?fnqjb^g~+wv-)Rh2d3 zbn^)91_o5YbiB(Xx|J=4 z;Q}_RJ&hSeGa}@p)>cEbPO7yIYK$0!J&^=wZmLJBD9xrv%z;?tWD~4m7Gdj;?&#vZ zpdIAt46V-#HO&rst>J{|VMaEUMTA=M;;@Q%=*F0xXmc&ICPr1-L_FSraw7;E^R66u zl(UbcV0`W}L^2g?o#`^vU=KH+nrM6k)gh4{f_Y0y#t~xWTZv+dbsI*)V*CcZz*9 S^^W0|)Y%T2nv00024gdfE04PuZ021T?0!`BZ00000000000000000000 z0000QA{!taDh6Nxfo>593cDbzYyma`Bm;vy3xQw&1Rw>8LI)rlMIWQ0j+0h|WPfpB z8`By(3>rs5j8;QZ#h>7GJAUFd@3KpeYsQvUr zpppuSk{F?qlZm}MC&T~$Y0dt-yFi9I3*FUFWc3RYrO>FKHzmn_K2r}Q6H2ccN~>-i zMWX)fP(rCyHMNQ&Q5-A|tB{(PxC~Tnrp*AJ zjEAivgQ0Z^30rAY%AI|kx0sjD6BO-|v{0XFa=12(+@!~kA+o=4uCs=PrxH+d;u*_zz+AgU%}3^Eo0|LnFr!T3x7zjS!;9f^eEZ4 zQnp}I$O|$7Q9hA!Ux3`mG`Vtl9&r+_(TaA+aBtm+s;#uXvJw^btg0B5TI-rw+EWAD z6IHX;Z8pS8RXK3sn-S&eU&jVhswyM2Y_tzlbRuf3SeUE~J5EOBOf27aUR%$V@(|U- ze19mfCx%M3TRpsTm;>Pt7-AL6Vnut{XViEDx>156QU!bHC!WqG35v`aiG=x#X@NM% zn8a@8GZcVwH7+dpM%wbk%7oulVk?83JBBNYfEat3+ltXhvJ`@HRSp3{2_y$*3kWNc z3=pIrh`1=j#dIEVUXsMnLyFRQ51KyX?Y>x&&mrW5<$JWn)Y2<=Urgo^VWq92GQ@2# zRwNfFeY7pqgnWAkOi8&oAc(m(#ie^^(Qd`*jNzu%BP(^mw2G@p1!=ZyR&WLRr`U3z z`#hE|b(bG*(Y1QM!6jLFM6GwAeF;8+xw~(;eQa|^QP_Kj#v8k4jldPo-|dHoZT|E* z@TrIu9am%u;w%cz3WcCuwzV5Mh2_b_;&fa>Rhs$~=@pVpkjC@Rm5kQr$DCyvF~DGi z_KZB!OHkm5K5RgCoE}(4`0aE?CFSPlQJW-chptSb=Hq}`I8xFg3A(b}3?OX7U|-eA z6APmFMXcII8b)oG6H-pEl()l0fHF?g9gk5A zJBs+X*kR4xnHu;riYphl+j5dIQ;R6<$k6*R4aMIZAm%W^DXWz%7}9s*{JIjh?L z2uS%bxfh8zF`%kqLOrIU2ZmWAibnc~M8~9aBo4KQ^mHZ$WGPVP;bjGANZ zX1jj3NxRkQL#tjJw_+WSOOCO_K0VSeuhtbloPAMzQ}r4ThHG|+CxhkJ*@m&W<+tsn zwHhbrQ%=}%$mmVu{!qmcAH!h+3%N#<14WU;2`nXB%{=E3H+225j0qK;8n@(5Mbu~I z@n#vv)|K1y>>g@fFiX{~pZW;o$pJ?MHQnmF5Ai_5Vy{tv<3q2X zO}8F{2RWs4NwGt;_TpB5^FENe!C;vCd;hlb@{GY_g!kw0ZiEc*9(hUb4H|Fsnq!|f z>EmaH$Mo?j9QQ>Tm;@my9+Aozw5CM|-w_YF&&7z!;?3q`582{2f*S zB}JXKrkaRn?aBWj{tL)5CS0~;9JCR;;}_Us+1bIYswqS1$p8;HX<=r?|Ak+FKc&7q zDsbiK?~;7*e{tmHCGYG%=t#fli+Ee5MC&HbX{@HyRM{Ep^{qWQBv&iNVq7UtN{3Z? zwOpY$sD`1A>x&O~44%aD(Rm^ajbds9QL9k{s@@ouq#0WPw5RWH42Y$SrbHw4K!HY& z)vGo%sY~$bPxgW@eVQ_UR8E#>7%6b4uTm{PDJZ!Xs_2Gs)CkRt8q~Lk`tA;mY>3p^#(*Ln5dJ7@C%=QXUyN&DVkD36F>FDX>#CvJ)ZnN|b0s zcEXv7z{QLmnf{@K2lJrtpXbrYy!ymLAO7j%G%2wprAI;?6jQPq3mxeXai(6}p)wdl zpX@=s+r%px)^Ct%2sxtBNjE?hH#{=np_OJWhBh_IMU~jS{RP^&mH;8Ib9PiK(avgd zi;S+-pkgtO)|Q_SM+^0H$$nGUiYWZQ!J)pQp4tFHZlEW^%%SHfp|Bgr1g3n>4qYLuAa$BB~p689Zy9P0X8@@$TihR@Y<{ z=htws*|RwqPVk}p<>(W^?#P>~1++o1I`*db3FhTwaQO4p0;7??dgKfEfA-r?b!`>i z^~%D9AKlej9nt)=!9nXQwAAtX^S4p(H`jPO&2<&V=4IlG!k)qUUuV-9Siim97k0O- zZ1u5Y4tcdvZB|LlDUnZ9`4||vs8!)-h3GV$Vhytrq!P6;eeM&TOkcz-`&*OJ{w0%O zI&>e3=>nQ1!}~l*r90tgJLytfDn*DyxgRAoh!mHV&}^smfnh3_^7M6{a5H^2lvE~I ztl<=$rb8^hRZ(b`swnX(P%8UNo6`IZLM}6u2#y8S=g#0=b>a@pat8$23bLKD@+9pgo3AHi3ZezEyDt(-7CV%&wb7CUp8qD!o zy*tM3>81R>#mm2Yq~`vKUBv!`h=2~UeMTkL(jIVE(N)U_5v2y}g!$R+KFUN3=o(RN zPkAGjvwwb4X;SGu%}x>Nv#8qg_)A5VvQl~D*14PK?lAl8?cmimThy9k)Um_#;SZ?~ zHF@mZ6a~w;?r4PRq&pQVLL$Wo#X;kh^2dAlOfs7Kry6@_M{BuRAgpNRTO{LrJIvCG zwd3@d6#Lo-w)179&B3Thu&a>tZ#?}hNwlCq~K>N}=Byf{2K5q?fD z{br^5JHU+z^7ZF9%&oTg+f`L>dzahXvnPS3>sE-UowRI)jshWfpi$uBE>FGMq|lq< zq*9OZd_Lr--069_({jfTo;Mv5>IwPdyMw1!uG(;tf)?9Poc%)QGKH2vl!P9o*`8$F z>mQ1G>ZNgQ<73a8DByAZgAs;S=yZy_vNroGSS`2RFQRtYuiev{73^=TWriZKBW2ji zy&RbTP}vW+(Wimm<_0Ph8lC(}?^>#c^}vw7uisx$y+#q22+NUfU3H1?v-6d{32D(o zHHCPWw85(;kZ?CbSaH&!(~%DR^rGMa&iVyI^iwa{S!+Sa)rG|JE|t#W#iww#Xk2oc zxTULFg}DbtOU{#9I4QwT)-D2G}sRkE|$(2g9E2mByIx(w3p|mm3l!{*jk4{L7 zj#E5Ur&R1!HzJ`BqH7F^w$4sD<`Z)H&zA6?=Z`m2@+`c3yrHI7R|CSsOZOKS?_XMP zS$^iug`$JQaNb4UJTmrdw~V;Zm)r&SFD4e>zhL2&cIzvwGj_gJ`fz6I}3)V+2cYxlgCj_bL1-@W7p*aR;-aZk|% zgZJ(hQHa#R_t~kLlgj5yfuV0f-DNioge#YMKS^#YJo4ZbH!Zaz zYTo}KmULn>I&2rma?@(#$T8t;crEa3pDWmsWtnkGJBr82I6kVa`IYO_x+=(uD!IHK zXTS+V*5Kggrjv84%H~36pIsRaFFLhBW+^X|={D?~8P;hl5SKvIlz{mXSMd>Y1bZOA znYhT{5+Lwg-{oJ)!_y9vu(z*L{CXKS7m*kV)|B0K@5Q8x1jK9nzzA<2m#iE=I5YpQ zF~4nn{=7HOi#+hnq*;ILP`wR#>mDk$1FHzWSb%-DFpwpLIh)5jvcugh2VHZeCF`7F z0ol_;dV;p>HHvX6+Z%*tx@yW3e+=svSo;iAcaJk?{J`xMRrvFt-jR7=T6SBts1mz> z0{-vRA0!`q)HRt8><7uKjOLH6z?ye7QHn;TYP}N@`exC81OvyPRq-=2GIRS zAdQ5azj(pf$$3>0!f_5I8j<>*z-qf~t^NAi<^fjxv8A%t#$znFvmG<&r{mKnft?vT z?%C}>P8#Y(@mC8<3h}~{f<+2{OR`X}Qez1^LZvMzUWN+u{}W~u1GnbrQ#;!$;f>BwM>##y1b7T@Ow-iZsbF4MNh)p%OHij%oE5;e22fZY73 z9vc3~ofY45W^%p&eEu3(kyO{c=9lchi2FCA3;#vg00I89Pv(iB{qOeyY-8OyQ)ogh zI%>7U2e))B5Rw&Wj6n}tx?Vxbj%-Z{JLt^?=wYjO{G<|v$ z=Y0=1LqpAbGzLVh5EByAErF+2_0Hw78}QqP#!XNMbj}Fr7kAADb_}?rSZar5;f1=m zLA1L~5hD`iG~I**aV#L&TUZ+|; z)>nlRIwRt=RPk%3fv5YsMI}?eeJESJamJ;eam#84-`!_t6 zN-07U!N@?^i9UXP5Vr>pHYDI`hvGvdw_c?%zX~2RS_a#7Yc!ZJU`N}wBOsDm!5_tvB%YTaI=!C{ z&tNTlz7o7R6n@~sO-y*KB4o=^UE2hP$k)@TprtgYhEf4@)0+(9= literal 13516 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 Date: Fri, 6 Nov 2026 11:38:11 +0530 Subject: [PATCH 5/9] Write the signal path in relative coordinates The same 401 points, in 1.4 KB less of index.html. og.png differs in 10 anti-aliased pixels, from rounding as Chrome adds up relative coordinates. --- scripts/images.sha256 | 2 +- site/index.html | 2 +- site/og.png | Bin 65980 -> 65982 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/images.sha256 b/scripts/images.sha256 index 2766260..84f039a 100644 --- a/scripts/images.sha256 +++ b/scripts/images.sha256 @@ -1 +1 @@ -6fde50f69ce001154e250098d30aaa79390d53f777be822b4eeecbcfda223932 +23906fa57472a37b9096da51068d2937b3fe0a64a3f80b14271a0cf20a24fd62 diff --git a/site/index.html b/site/index.html index abff6c6..224554b 100644 --- a/site/index.html +++ b/site/index.html @@ -46,7 +46,7 @@

EEG decoding in your browser

diff --git a/site/og.png b/site/og.png index c1d808abca835b84556fbf05f93a00b4a0fd8611..668bb917b648ee6d19decebccca3bb525a1c7028 100644 GIT binary patch delta 22421 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 delta 22380 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 From 48577dc7bc58bbefd2ca40868bd0b9cc1151cc0d Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:38:49 +0530 Subject: [PATCH 6/9] Check characters with a range and drop fontkit fontkit brought in 11 of the 29 packages for one test. The range matches the command that cuts the fonts. --- README.md | 2 +- package-lock.json | 117 ---------------------------------------------- package.json | 1 - test/site.spec.js | 10 ++-- 4 files changed, 4 insertions(+), 126 deletions(-) diff --git a/README.md b/README.md index a81fccc..4f33953 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ python3 scripts/make-images.py ## Fonts -The files in `site/fonts/` are JetBrains Mono v2.304, cut down to the characters English text needs, without hinting or OpenType features. A character outside this set falls back to a system font, so add it and run this on the release's `fonts/webfonts` files. It needs the `fonttools` and `brotli` Python packages. +The files in `site/fonts/` are JetBrains Mono v2.304, cut down to the characters English text needs, without hinting or OpenType features. A character outside this set falls back to a system font, so add it here and to `outsideFonts` in `test/site.spec.js`, then run this on the release's `fonts/webfonts` files. It needs the `fonttools` and `brotli` Python packages. ```bash pyftsubset JetBrainsMono-Regular.woff2 --unicodes='U+0020-007E,U+00A0,U+00B7,U+2013,U+2014,U+2018,U+2019,U+201C,U+201D,U+2026,U+2192' --layout-features='' --no-hinting --name-IDs='*' --flavor=woff2 --output-file=site/fonts/JetBrainsMono-Regular.woff2 diff --git a/package-lock.json b/package-lock.json index 1573a2a..fe015cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "devDependencies": { "@axe-core/playwright": "^4.14.0", "@playwright/test": "^1.64.1", - "fontkit": "^2.0.4", "html-validate": "^11.18.0" }, "engines": { @@ -71,13 +70,6 @@ "ajv": "^8.0.0" } }, - "node_modules/@swc/helpers": { - "version": "0.5.24", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.24.tgz", - "integrity": "sha512-6tcXo4kA8HgGO7AVmawB57RYi/piBPYVHVcO6dXjX+SZw8GoHmi262sp4v2Ha2kNP9Cx84qei27yT+fjS1lxgg==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/ajv": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", @@ -105,54 +97,6 @@ "node": ">=4" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -177,24 +121,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fontkit": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", - "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" - } - }, "node_modules/html-validate": { "version": "11.18.0", "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-11.18.0.tgz", @@ -263,13 +189,6 @@ "node": ">=6" } }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true, - "license": "MIT" - }, "node_modules/playwright": { "version": "1.64.1", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz", @@ -333,13 +252,6 @@ "node": ">=0.10.0" } }, - "node_modules/restructure": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", - "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", - "dev": true, - "license": "MIT" - }, "node_modules/semver": { "version": "7.8.6", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.6.tgz", @@ -359,35 +271,6 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, "license": "MIT" - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } } } } diff --git a/package.json b/package.json index 5c38c23..8cd2a5c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "devDependencies": { "@axe-core/playwright": "^4.14.0", "@playwright/test": "^1.64.1", - "fontkit": "^2.0.4", "html-validate": "^11.18.0" } } diff --git a/test/site.spec.js b/test/site.spec.js index 8a1692f..1d23f69 100644 --- a/test/site.spec.js +++ b/test/site.spec.js @@ -1,6 +1,5 @@ import AxeBuilder from "@axe-core/playwright"; import { expect, test } from "@playwright/test"; -import { openSync } from "fontkit"; const pages = ["/", "/404.html"]; const liveOrigin = "https://ventris-tools.github.io"; @@ -10,7 +9,8 @@ const otherSite = "/ventris/"; const pageWeightBudget = 50_000; -const fonts = ["Regular", "Medium"].map((weight) => openSync(`site/fonts/JetBrainsMono-${weight}.woff2`)); +// Anything other than the characters in site/fonts. The README has the command that cuts them. +const outsideFonts = /[^\u0020-\u007E\u00A0\u00B7\u2013\u2014\u2018\u2019\u201C\u201D\u2026\u2192\n\r\t]/g; // The fonts change the layout, so nothing is measured until they have loaded. async function open(page, path) { @@ -60,12 +60,8 @@ for (const path of pages) { await open(page, path); const text = await page.evaluate(() => document.body.textContent); - const characters = [...new Set(text.replace(/[\n\r\t]/g, ""))]; - const missing = characters.filter( - (character) => !fonts.every((font) => font.hasGlyphForCodePoint(character.codePointAt(0))), - ); - expect(missing).toEqual([]); + expect(text.match(outsideFonts) ?? []).toEqual([]); }); for (const width of [320, 375, 768]) { From 94c677a824db86c7ee3c6a82d8421486af250aba Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:38:49 +0530 Subject: [PATCH 7/9] Upload the Pages artifact only when it will be deployed --- .github/workflows/site.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml index 51fe6fd..77e1bdd 100644 --- a/.github/workflows/site.yml +++ b/.github/workflows/site.yml @@ -25,7 +25,8 @@ jobs: cache: npm - run: npm ci - run: npm run check - - uses: actions/upload-pages-artifact@v5 + - if: github.event_name == 'push' + uses: actions/upload-pages-artifact@v5 with: path: site From 0107c87011e6269f2874d0bbd5aa90ef6e841d0a Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:39:48 +0530 Subject: [PATCH 8/9] Load the logo from favicon.svg instead of three copies The dark colors move into the SVG, which also gives the favicon a dark version. Both pages render pixel-identically in light and dark. --- scripts/make-images.py | 3 ++- site/404.html | 5 +---- site/favicon.svg | 2 +- site/index.html | 5 +---- site/styles.css | 12 ------------ 5 files changed, 5 insertions(+), 22 deletions(-) diff --git a/scripts/make-images.py b/scripts/make-images.py index 3bc8322..483ab7a 100644 --- a/scripts/make-images.py +++ b/scripts/make-images.py @@ -26,7 +26,8 @@ page = (SITE / "index.html").read_text(encoding="utf-8") css = (SITE / "styles.css").read_text(encoding="utf-8") -logo = (SITE / "favicon.svg").read_text(encoding="utf-8") +# The images have one theme, so the logo's dark colors stay out of them. +logo = re.sub(r"", "", (SITE / "favicon.svg").read_text(encoding="utf-8")) def find(pattern, text): diff --git a/site/404.html b/site/404.html index c961d3a..eb0f865 100644 --- a/site/404.html +++ b/site/404.html @@ -13,10 +13,7 @@ diff --git a/site/favicon.svg b/site/favicon.svg index 0421cac..a60ce8b 100644 --- a/site/favicon.svg +++ b/site/favicon.svg @@ -1 +1 @@ - + diff --git a/site/index.html b/site/index.html index 224554b..398b10a 100644 --- a/site/index.html +++ b/site/index.html @@ -25,10 +25,7 @@
- + Ventris Tools diff --git a/site/styles.css b/site/styles.css index 75d3e09..8fef214 100644 --- a/site/styles.css +++ b/site/styles.css @@ -22,7 +22,6 @@ --ink-2: #5b5248; --line: #cfc4af; --accent: #008a7a; - --on-accent: #ffffff; --v: 1px; /* vertical spacing unit, shrunk on short desktop windows below */ --heading-gap: calc(6px + 8 * var(--v)); /* shrinks less than section gaps, so headings stay with their section */ } @@ -36,7 +35,6 @@ --ink-2: #c4b9a8; --line: #4d4439; --accent: #1aa394; - --on-accent: #0e1a18; } } @@ -83,16 +81,6 @@ a { color: inherit; text-underline-offset: 3px; } text-decoration: none; } -.brand-tablet { fill: var(--accent); } - -.brand-trace { - fill: none; - stroke: var(--on-accent); - stroke-width: 2.2; - stroke-linecap: round; - stroke-linejoin: round; -} - .github-link { display: inline-flex; align-items: center; From 2bc01587933e8ffb7e17d89c2b2709bdf869d4e0 Mon Sep 17 00:00:00 2001 From: Bhargav Kowshik Date: Fri, 6 Nov 2026 11:40:57 +0530 Subject: [PATCH 9/9] Tidy the stylesheet One hover rule for every link, which also gives the 404 page's links a hover color. One color-scheme for both themes. Phone spacing is now the default, so the 640px block goes and screens from 641 to 699px get the phone spacing. Drop the default font-style lines. --- site/styles.css | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/site/styles.css b/site/styles.css index 8fef214..5913d56 100644 --- a/site/styles.css +++ b/site/styles.css @@ -2,7 +2,6 @@ font-family: "JetBrains Mono"; src: url("fonts/JetBrainsMono-Regular.woff2") format("woff2"); font-weight: 400; - font-style: normal; font-display: swap; } @@ -10,12 +9,11 @@ font-family: "JetBrains Mono"; src: url("fonts/JetBrainsMono-Medium.woff2") format("woff2"); font-weight: 500; - font-style: normal; font-display: swap; } :root { - color-scheme: light; + color-scheme: light dark; --paper: #f7f3ea; --surface: #fffdf8; --ink: #211c17; @@ -28,7 +26,6 @@ @media (prefers-color-scheme: dark) { :root { - color-scheme: dark; --paper: #171411; --surface: #1f1b17; --ink: #f2ece1; @@ -56,12 +53,14 @@ h1, h2, h3 { font-weight: 500; } a { color: inherit; text-underline-offset: 3px; } +a:hover { color: var(--ink); } + :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; } .masthead, main, .colophon { max-width: 880px; margin-inline: auto; - padding-inline: 24px; + padding-inline: 16px; } .masthead { @@ -91,11 +90,9 @@ a { color: inherit; text-underline-offset: 3px; } color: var(--ink-2); } -.github-link:hover { color: var(--ink); } - .github-link svg { fill: currentColor; } -.intro { padding-block: calc(72 * var(--v)) calc(36 * var(--v)); } +.intro { padding-block: 40px 28px; } h1 { font-size: clamp(1.85rem, 6vw, 3.25rem); @@ -146,7 +143,7 @@ h2 { grid-template-columns: minmax(0, 1fr) auto; align-items: baseline; gap: 8px 16px; - padding: 20px 24px; + padding: 18px; border: 1px solid var(--line); border-radius: 14px; background: var(--surface); @@ -224,10 +221,11 @@ h3 { font-size: 1.35rem; line-height: 1.2; letter-spacing: -0.02em; } .colophon p { text-wrap: balance; } -.principles a:hover, .colophon a:hover { color: var(--ink); } - -/* Wide enough for columns, well before the desktop rule below. */ +/* Wide enough for columns and more room, well before the desktop rule below. */ @media (min-width: 700px) { + .masthead, main, .colophon { padding-inline: 24px; } + .intro { padding-block: calc(72 * var(--v)) calc(36 * var(--v)); } + .tool { padding: 20px 24px; } .principles { grid-template-columns: repeat(3, minmax(0, 1fr)); } .colophon { grid-template-columns: 2fr 1fr; } } @@ -245,9 +243,3 @@ h3 { font-size: 1.35rem; line-height: 1.2; letter-spacing: -0.02em; } } .lede { max-width: none; text-wrap: balance; } } - -@media (max-width: 640px) { - .masthead, main, .colophon { padding-inline: 16px; } - .intro { padding-block: 40px 28px; } - .tool { padding: 18px; } -}
- + Ventris Tools