Compare commits

..
9 Commits
Author SHA1 Message Date
Nuno C. 43e54f063c Bump version from 3.4.0 to 3.5.0 2026-08-30 00:57:39 +01:00
Todd Ekenstam 79cc825148 🐛 Render HTML in series widget titles
Use .Title | emojify like article headings and prev/next links so HTML in front-matter titles is not escaped.
2026-08-30 00:57:04 +01:00
dependabot[bot] e82a5d86d3 📦 Update packaged Mermaid 2026-08-28 23:42:04 +01:00
dependabot[bot] d9078a025f 📌 bump mermaid from 11.16.1 to 11.17.0
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.16.1 to 11.17.0.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.16.1...mermaid@11.17.0)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.17.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-28 23:42:04 +01:00
dependabot[bot] 03825107db 📌 bump puppeteer from 25.7.0 to 25.8.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.7.0 to 25.8.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.7.0...puppeteer-v25.8.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-28 23:41:50 +01:00
ZhenShuo Leo aa52338289 fix: mobile menu wrong height caused by new stacking context from backdrop-blur 2026-08-28 23:41:30 +01:00
Nuno C. 69014f6547 Bump version to 3.4.0 2026-08-22 09:07:41 +01:00
ZhenShuo Leo 9f8972fecf fix: medium-zoom conflict with featureImageHover 2026-08-22 09:06:46 +01:00
ZhenShuo Leo 4b42f34de5 fix: katex rendering (#3062) 2026-08-22 09:06:16 +01:00
14 changed files with 577 additions and 521 deletions

No files matched your search

+1 -5
View File
@@ -4877,7 +4877,7 @@ pre {
}
}
}
body:has(#mobile-menu-toggle:checked) {
body:has(#mobile-menu-toggle:checked):not(:has(#mobile-menu-dialog.mobile-menu-style-dropdown)) {
overflow: hidden;
}
@media (min-width: 853px) {
@@ -4900,10 +4900,6 @@ body:has(#mobile-menu-toggle:checked) {
visibility: hidden;
transition: visibility 0.3s, opacity 0.3s ease-in-out;
}
header > div:has(.mobile-menu-fullscreen #mobile-menu-toggle:checked) {
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
.nested-menu:nth-last-child(-n + 3) .menuhide, .mobile-header-row .menuhide {
inset-inline-end: 0;
}
+1 -10
View File
@@ -451,7 +451,7 @@ pre {
}
/* Prevent body scroll when mobile menu is open */
body:has(#mobile-menu-toggle:checked) {
body:has(#mobile-menu-toggle:checked):not(:has(#mobile-menu-dialog.mobile-menu-style-dropdown)) {
overflow: hidden;
}
@@ -485,15 +485,6 @@ body:has(#mobile-menu-toggle:checked) {
opacity 0.3s ease-in-out;
}
/* A backdrop-filter turns the header pill into a containing block for
position:fixed descendants, which would trap the fullscreen mobile menu
inside it. Lift the filter while that menu is open — the fullscreen
overlay covers the header anyway, so the change is invisible. */
header > div:has(.mobile-menu-fullscreen #mobile-menu-toggle:checked) {
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
/* Dropdowns near the end of the bar open leftward so they stay on screen */
.nested-menu:nth-last-child(-n + 3) .menuhide,
.mobile-header-row .menuhide {
+513 -464
View File
File diff suppressed because it is too large. Load diff
@@ -98,7 +98,7 @@
loading="lazy"
decoding="async"
fetchpriority="low"
class="not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
class="nozoom not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
{{ with $featureImagePosition }}style="object-position: {{ . }};"{{ end }} />
</div>
{{ end }}
@@ -74,7 +74,7 @@
loading="lazy"
decoding="async"
fetchpriority="low"
class="not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
class="nozoom not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
{{ with $featureImagePosition }}style="object-position: {{ . }};"{{ end }} />
</div>
{{ end }}
+1 -1
View File
@@ -78,7 +78,7 @@
loading="lazy"
decoding="async"
fetchpriority="low"
class="not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
class="nozoom not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
{{ with $featureImagePosition }}style="object-position: {{ . }};"{{ end }} />
</div>
{{ end }}
+1 -1
View File
@@ -91,7 +91,7 @@
loading="lazy"
decoding="async"
fetchpriority="low"
class="not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
class="nozoom not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
{{ with $featureImagePosition }}style="object-position: {{ . }};"{{ end }} />
</div>
{{ end }}
+1 -3
View File
@@ -188,9 +188,7 @@
{{ if .Site.Params.rtl | default false }}
{{ $jsResources = $jsResources | append (resources.Get "js/rtl.js") }}
{{ end }}
{{ if .Page.HasShortcode "katex" }}
{{ $jsResources = $jsResources | append (resources.Get "js/katex-render.js") }}
{{ end }}
{{ $jsResources = $jsResources | append (resources.Get "js/katex-render.js") }}
{{ $jsResources = $jsResources | append (resources.Get "js/menu-a11y.js") }}
{{ $jsResources = $jsResources | append (resources.Get "js/print-support.js") }}
{{ $jsResources = $jsResources | append (resources.Get "js/email.js") }}
@@ -1,5 +1,5 @@
{{ $mobileMenuStyle := .Site.Params.header.mobileMenuStyle | default "fullscreen" }}
<div class="mobile-header-row{{ if eq $mobileMenuStyle "fullscreen" }} mobile-menu-fullscreen{{ end }} relative flex items-center h-14 gap-4">
<div class="mobile-header-row relative flex items-center h-14 gap-4">
{{ if hugo.IsMultilingual }}
{{ partial "header/components/translations.html" . }}
{{ end }}
@@ -55,7 +55,7 @@
style="scrollbar-gutter: stable;"
class="z-50 invisible overflow-y-auto opacity-0 transition-[opacity,visibility] duration-300 peer-checked:visible peer-checked:opacity-100
{{ if eq $mobileMenuStyle "dropdown" }}
absolute end-0 top-[calc(100%+0.75rem)] z-10 w-[min(22rem,calc(100vw-1.5rem))] rounded-2xl border border-neutral-200/80 bg-neutral/95 p-5 shadow-2xl shadow-neutral-900/20 dark:border-neutral-700/80 dark:bg-neutral-800/95
mobile-menu-style-dropdown absolute end-0 top-[calc(100%+0.75rem)] z-10 w-[min(22rem,calc(100vw-1.5rem))] rounded-2xl border border-neutral-200/80 bg-neutral/95 p-5 shadow-2xl shadow-neutral-900/20 dark:border-neutral-700/80 dark:bg-neutral-800/95
{{ else }}
fixed inset-0 px-6 py-20 bg-neutral-50/97 dark:bg-neutral-900/99
{{ end }}
+6 -2
View File
@@ -1,6 +1,10 @@
<div class="min-h-32"></div>
<div class="fixed inset-x-0 top-3 z-100 px-3 sm:top-5 sm:px-6">
<div class="mx-auto max-w-7xl rounded-2xl border border-neutral-200/80 bg-neutral/60 px-3 shadow-lg shadow-neutral-900/5 backdrop-blur-xl dark:border-neutral-700/80 dark:bg-neutral-800/60 [&_img.logo]:max-h-10 [&_img.logo]:max-w-10">
{{ partial "header/basic.html" . }}
<div
class="relative mx-auto max-w-7xl rounded-2xl border border-neutral-200/80 shadow-lg shadow-neutral-900/5 dark:border-neutral-700/80 [&_img.logo]:max-h-10 [&_img.logo]:max-w-10">
<div class="absolute inset-0 -z-10 rounded-2xl bg-neutral/60 backdrop-blur-xl dark:bg-neutral-800/60"></div>
<div class="px-3">
{{ partial "header/basic.html" . }}
</div>
</div>
</div>
+1 -1
View File
@@ -17,7 +17,7 @@
class="py-1 border-dotted border-neutral-300 border-s-1 -ms-5 ps-5 dark:border-neutral-600">
<a href="{{ $post.RelPermalink }}">
{{ i18n "article.part" }} {{ $post.Params.series_order }}:
{{ $post.Params.title }}
{{ $post.Title | emojify }}
</a>
</div>
{{ end }}
+1 -1
View File
@@ -49,7 +49,7 @@
loading="lazy"
decoding="async"
fetchpriority="low"
class="not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
class="nozoom not-prose absolute inset-0 h-full w-full object-cover transition-transform duration-700 ease-[cubic-bezier(0.22,1,0.36,1)] {{ if $featureImageHover }}group-hover:scale-[1.03]{{ end }}"
{{ with $featureImagePosition }}style="object-position: {{ . }};"{{ end }} />
</figure>
{{ end }}
+44 -26
View File
@@ -1,12 +1,12 @@
{
"name": "hugo-blowfish-theme",
"version": "3.3.0",
"version": "3.4.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "hugo-blowfish-theme",
"version": "3.3.0",
"version": "3.4.0",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -23,11 +23,11 @@
"katex": "^0.18.4",
"lite-youtube-embed": "^0.3.4",
"medium-zoom": "^1.1.0",
"mermaid": "^11.16.0",
"mermaid": "^11.17.0",
"packery": "^3.0.0",
"prettier": "^3.9.6",
"prettier-plugin-go-template": "^0.0.15",
"puppeteer": "^25.7.0",
"puppeteer": "^25.8.0",
"rimraf": "^6.1.3",
"tailwind-scrollbar": "^4.0.2",
"tailwindcss": "^4.3.3",
@@ -250,9 +250,9 @@
"license": "MIT"
},
"node_modules/@mermaid-js/parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.0.tgz",
"integrity": "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.1.tgz",
"integrity": "sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -587,9 +587,9 @@
}
},
"node_modules/@puppeteer/browsers": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.0.tgz",
"integrity": "sha512-LlBrE8oqGfU7b1Nk2d5Q1SbuPhZxTj0cJEMDPEws28OjNMELlflekmPPuf4FnK03x0ZRjKaYwJElUcKK4kyqJA==",
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.1.tgz",
"integrity": "sha512-KDz+3qDRdBAlRlMjmKyj6dEs33YHTk/xRHEENSXq6TNnhgoU15ruSHtEBeVF6OZ9tBDY55Se4P0nFMNsipzU9A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -2225,6 +2225,16 @@
"dev": true,
"license": "MIT"
},
"node_modules/fastdom": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastdom/-/fastdom-1.0.12.tgz",
"integrity": "sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==",
"dev": true,
"license": "MIT",
"dependencies": {
"strictdom": "^1.0.1"
}
},
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -2792,27 +2802,28 @@
"license": "MIT"
},
"node_modules/mermaid": {
"version": "11.16.1",
"resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.16.1.tgz",
"integrity": "sha512-TQsq6u22fAn3rek5VOubrhKPo1g5hwC3FXUN9hiyupTckcYiGuuKGkNQrKYwGJkXUxZdojwRG46gsSCFZMDp4g==",
"version": "11.17.0",
"resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.17.0.tgz",
"integrity": "sha512-Jo9N377Wb4MSnHFPTbLi2SxFpsQl4eVHoxnW5U1Md9EazvgMp3s+4ohDxr81YNTgbn5Kj7HJ3yslrSJ52kwpbA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@braintree/sanitize-url": "^7.1.2",
"@iconify/utils": "^3.0.2",
"@mermaid-js/parser": "^1.2.0",
"@mermaid-js/parser": "^1.2.1",
"@types/d3": "^7.4.3",
"@upsetjs/venn.js": "^2.0.0",
"cytoscape": "^3.33.3",
"cytoscape": "^3.34.0",
"cytoscape-cose-bilkent": "^4.1.0",
"cytoscape-fcose": "^2.2.0",
"d3": "^7.9.0",
"d3-sankey": "^0.12.3",
"dagre-d3-es": "7.0.14",
"dayjs": "^1.11.20",
"dayjs": "^1.11.21",
"dompurify": "^3.3.3",
"es-toolkit": "^1.45.1",
"katex": "^0.16.45",
"fastdom": "1.0.12",
"katex": "^0.16.47",
"khroma": "^2.1.0",
"marked": "^16.3.0",
"roughjs": "^4.6.6",
@@ -3101,18 +3112,18 @@
}
},
"node_modules/puppeteer": {
"version": "25.7.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.7.0.tgz",
"integrity": "sha512-zLBIYuW66SGwY7JNqGmiqeKiM92CYOs6xPibSRBPIeYGIfM1nE/8VCE8G0fGot2EfXENC4PbhktxLrQ0EK5Thg==",
"version": "25.8.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.8.0.tgz",
"integrity": "sha512-3gcUJ+Jfodb5zNa/lWLZukBUwYiRIwAc8WRICoqfi+ZYmNWqpsPFyanTU3Gw/lhgII9aotVbAmhT6/NKHWgyUA==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@puppeteer/browsers": "3.2.0",
"@puppeteer/browsers": "3.2.1",
"chromium-bidi": "17.0.2",
"devtools-protocol": "0.0.1666840",
"lilconfig": "^3.1.3",
"puppeteer-core": "25.7.0",
"puppeteer-core": "25.8.0",
"typed-query-selector": "^2.12.2"
},
"bin": {
@@ -3123,13 +3134,13 @@
}
},
"node_modules/puppeteer-core": {
"version": "25.7.0",
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.7.0.tgz",
"integrity": "sha512-wgBBj7dU5ceGyoT2PCrJpkYOhxPY8mDOmcSKZP92Cj5GgqQ3kv/UxzawnOLxiYuupe4bDf/yiQm3bzs/1nI0rQ==",
"version": "25.8.0",
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.8.0.tgz",
"integrity": "sha512-LDOrawV8vfCVk+yLj2ozvajNP4Sv3OV9y3Tpiyy2g2Z+aQlbcozP6KJfI4iSBq7YQER+86ihEtPa5ioiZyWxMQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@puppeteer/browsers": "3.2.0",
"@puppeteer/browsers": "3.2.1",
"chromium-bidi": "17.0.2",
"devtools-protocol": "0.0.1666840",
"typed-query-selector": "^2.12.2",
@@ -3272,6 +3283,13 @@
"node": ">=0.10.0"
}
},
"node_modules/strictdom": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strictdom/-/strictdom-1.0.1.tgz",
"integrity": "sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==",
"dev": true,
"license": "MIT"
},
"node_modules/string-width": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz",
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "hugo-blowfish-theme",
"version": "3.3.0",
"version": "3.5.0",
"description": "Blowfish theme for Hugo.",
"scripts": {
"postinstall": "vendor-copy",
@@ -43,11 +43,11 @@
"katex": "^0.18.4",
"lite-youtube-embed": "^0.3.4",
"medium-zoom": "^1.1.0",
"mermaid": "^11.16.0",
"mermaid": "^11.17.0",
"packery": "^3.0.0",
"prettier": "^3.9.6",
"prettier-plugin-go-template": "^0.0.15",
"puppeteer": "^25.7.0",
"puppeteer": "^25.8.0",
"rimraf": "^6.1.3",
"tailwind-scrollbar": "^4.0.2",
"tailwindcss": "^4.3.3",