Compare commits

...
722 Commits
Author SHA1 Message Date
Nuno CoraçãoandClaude Fable 5 ca56ac78a3 🐛 Let the fullscreen mobile menu escape the floating header
The floating header's backdrop blur makes the pill a containing block
for fixed-position descendants, so the fullscreen mobile menu rendered
at the pill's height instead of filling the viewport. Lift the filter
while the menu is open. Fixes #3057.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 23:51:04 +01:00
Nuno CoraçãoandClaude Fable 5 587d8eec1d 🐛 Repair dependency version fields corrupted by version bumps
The 3.1.0 and 3.2.0 release bumps used an unanchored replacement that
also rewrote eight dependencies' lockfile version fields. Restore each
to the version embedded in its resolved tarball URL.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 23:45:59 +01:00
Nuno Coração 7245635dc1 3.2.0 2026-08-19 23:44:22 +01:00
dependabot[bot] 148837c017 📌 bump katex from 0.18.2 to 0.18.4 (#3056)
* 📌 bump katex from 0.18.2 to 0.18.4

Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.18.2 to 0.18.4.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.18.2...v0.18.4)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.18.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* 📦 Update packaged KaTeX

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-19 23:43:41 +01:00
Metalhearf 5ef4024c40 🐛 Close the mobile dropdown menu when clicking outside it (#3059)
The dropdown panel only closed through its own X button. Escape already
dismissed it, so the missing pointer equivalent left the panel stuck open
over the page after a stray tap.

Close it on any click landing outside the panel and outside the labels that
toggle it. Both early returns are load-bearing. A label forwards a synthetic
click to its checkbox, so without skipping the input the menu closes in the
same gesture that opened it. And without skipping the opener, opening then
closing with the hamburger leaves the panel open, because this handler and
the label's default action cancel each other out.

The fullscreen panel needs no special case. It covers the viewport, so
every click lands inside it and the handler stays inert.
2026-08-19 23:43:37 +01:00
Metalhearf 134a044262 🐛 Balance the padding of the desktop dropdown menu (#3058)
The submenu panel carried both `pt-2` and `p-5`. Tailwind emits shorthand
utilities before their longhand counterparts, so `padding-top` resolved to
`0.5rem` while the other three sides stayed at `1.25rem`, regardless of the
order the classes appear in the markup. The first submenu entry sat flush
against the top edge.

This went unnoticed while the panel was translucent. v3 made it opaque, which
draws the edge and exposes the imbalance.

Drop `pt-2` so the panel keeps the uniform `p-5` it was styled for. No new
utility classes, so the compiled stylesheet is unchanged.
2026-08-19 23:43:34 +01:00
Nuno Coração a4817aa442 3.1.0 2026-08-18 21:53:25 +01:00
03443c989f feat: localize 404 page quotes (#3052)
* feat: localize 404 page quotes

* 🐛 Fix 404 quote localization: build-time filtering and dub lines

Filter quotes to the page language at build time (case-insensitive,
with base-language and English fallbacks), fixing the double-encoded
language variable that made every locale fall back to English, and
correct several translations to their canonical dub lines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Friday <friday@openclaw.local>
Co-authored-by: Nuno Coração <nunocoracao@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 21:53:12 +01:00
Nuno CoraçãoandClaude Fable 5 7bef4bb360 🔥 Remove dead merch link and stargazer chart from READMEs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:23:35 +01:00
Nuno CoraçãoandClaude Fable 5 1784d3c13b 🐛 Render comments in the simple article layout
Extract the comments block into a shared article-comments partial and
include it from both single and simple layouts. Fixes #2938.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 d50d80bb34 ⚙️ Give stale issues a 14-day grace window and kinder messages
Stale marking now warns 14 days before closing instead of closing
immediately, messages invite a comment or reopen, and triaged labels
are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 b05eff3b30 🐛 Fix i18n apostrophes in JS, schema author image, avatar crops
JSON-encode i18n strings injected into appearance.js (#3040), resolve
and publish the original author image for the JSON-LD schema (#3037),
and anchor avatar crops to Center so small and zoomed framings match
(#3016).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 b6e4156e6b 🌐 Sync translated READMEs with v3 English README
Port the v3 feature list, AI-agent quick start, neutral CLI wording,
and upgrade section to all translations; bring the Indonesian README
to full structural parity.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 96f11ba0e7 ♿️ Fix AA contrast and move mobile language selector to header row
Darken burufugu primary-600 to pass 4.5:1 on white, bump the search
shortcut hint to neutral-500, and surface the language switcher in
the visible mobile header row instead of the menu dialog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 6f493fdbb9 🖼️ Update gallery thumbnail and minimum Hugo version references
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 984ca8490e 🖼️ Refresh v3 screenshots and update READMEs
New demo screenshots (old set archived under images/old), README
feature list, AI-agent quick start, and upgrade section.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 5e0e09d415 📝 Sync v3 docs and content across all nine languages
New shortcode sections, landing layout docs, agent skill sections,
v2→v3 upgrade instructions, translated homepages, and sample
article feature images.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 7659c5f23d 🔧 Update example site config and overrides for v3
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 09f0573749 ✨ v3 theme: glass UI, landing layout, a11y, perf, print styles
Floating glass header with ⌘K search, landing homepage layout with
hero image and GitHub-stars CTA, background canvas with dissolving
heroes, burufugu colour scheme, movie-quote 404, taxonomy pills,
keyboard/ARIA accessibility across menus, search and tabs, idle-
loaded third-party scripts, and dedicated print styles.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 5b0cd34d5b 🤖 Add Blowfish agent skill and plugin marketplace
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 0da79b9888 ⚙️ Prepare v3 release: module path, version window, 3.0.0
Bump the Hugo module path to /v3, adopt a rolling latest-4 Hugo
version window (bot keeps it sliding), document new opt-in params,
and set package version to 3.0.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 e50adceca0 🚚 Move homepage sponsors and contributors to example site
The theme homepage no longer renders blowfish.page's sponsor and
contributor sections; the example site overrides index.html instead,
so user sites don't inherit the theme repo's data files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 20:19:02 +01:00
Friday 3b2ea59367 fix: render homepage background above page canvas 2026-08-17 20:19:02 +01:00
Friday c559ea3b74 docs: align layout and shortcode artwork with v3 style 2026-08-17 20:19:02 +01:00
Friday e1fb257813 feat: move animated background to example site canvas 2026-08-17 20:19:02 +01:00
Friday 57f6c6708a feat: retain homepage sponsors and contributors 2026-08-17 20:19:02 +01:00
Friday 1917c3ab51 docs: give each example article distinct artwork 2026-08-17 20:19:02 +01:00
Friday bbf194ce31 feat: share translated feature images and animate landing 2026-08-17 20:19:02 +01:00
Friday d296e16e41 docs: give every example article an editorial feature image 2026-08-17 20:19:02 +01:00
Friday c71ce62fd5 feat: place layout switcher before recent articles 2026-08-17 20:19:02 +01:00
Friday ff4618e379 fix: add compact mobile menu presentation 2026-08-17 20:19:02 +01:00
Friday d862e6f789 feat: surface layout previews and refresh example imagery 2026-08-17 20:19:02 +01:00
Friday e62da9e2d1 feat: add interactive homepage layout lab 2026-08-17 20:19:02 +01:00
Friday af0e11171c feat: improve feature image presentation 2026-08-17 20:19:02 +01:00
Friday 53a64328d7 perf: make visual effects and heroes more resilient 2026-08-17 20:19:02 +01:00
Friday 091f9043ee feat: add modern content and navigation primitives 2026-08-17 20:19:02 +01:00
Friday 345f806d80 feat: add landing layout and harden rendering 2026-08-17 20:19:02 +01:00
Friday 405c905754 feat: begin Blowfish v3 visual refresh 2026-08-17 20:19:02 +01:00
Nuno CoraçãoandClaude Fable 5 a89d96e4dd 🐛 Pin fixed headers to the viewport top explicitly
The fixed wrappers relied on their static position resolving to y=0 as
direct flex children of body; the header landmark added in #3048 made
that position fall below the spacer. Set top-0 on all fixed variants.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 22:59:56 +01:00
Nuno CoraçãoandClaude Fable 5 13602159d4 🐛 Fix card thumbnail clipping on narrow grid columns
Remove the obsolete min-width on thumbnail_card, a leftover from the
old fixed-size background thumbnail, so images shrink with the card
and object-cover crops them centered instead of clipping the right
side once columns drop below 300px.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 22:59:56 +01:00
Eric Gusmão adb250108d perf: prioritize homepage profile image (#3041) 2026-08-16 22:47:24 +01:00
Chris HerborthandChris Herborth cff88c00f5 Address #3033 - suppress default author when using multi-author (#3034)
Co-authored-by: Chris Herborth <chrish@taffer.ca>
2026-08-16 22:32:09 +01:00
Morten Victor Nordbye 1f82608cd6 Add reading progress bar for articles (#3014)
* Add reading progress bar for articles

* Let page-level showReadingProgress override the site setting

Hugo's default treats false as empty, so a page-level false could not
disable the bar once it was enabled site-wide. Resolve the value by
initialising from the site setting and overriding it only when the
front matter parameter is actually present, and use the same resolved
boolean in single.html and head.html.

* Guard the reading progress handler and mark the listener passive

The script loads in the head without defer, so the scroll listener is
registered before the progress bar element exists. A scroll event fired
during parsing, such as when the browser restores the scroll position on
reload, would throw. Bail out when the element is missing, matching the
guard in background-blur.js, and mark the scroll listener passive as
toc.html already does.
2026-08-16 22:14:45 +01:00
Nuno C.andChris Herborth 74d03343b9 ♿️ Add header and main menu nav landmarks (#3048)
Wrap the page header in a header element and the subnavigation menu in
a labelled nav landmark. Addresses #3023.

Co-authored-by: Chris Herborth <chrish@taffer.ca>
2026-08-16 22:09:35 +01:00
Nuno C.andor1k 3ea1c3b49f ✨ Add github_gist icon and social link support (#3047)
Co-authored-by: or1k <admin@or1k.net>
2026-08-16 22:05:50 +01:00
Nuno Coração 84d03b8774 2.106.0 2026-08-16 21:59:49 +01:00
Nuno C.andClaude Fable 5 06936a4f15 🚚 Move RussellChubb.com entry to keep users list in order (#3046)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 21:53:26 +01:00
or1k 8af7e8b855 Add or1k.net to users list (#3038) 2026-08-16 21:52:37 +01:00
Russell Chubb 7293b74ae5 Add new user entry for RussellChubb.com (#3035)
Added my personal website as an entry into the "Users" page.

Thank you for creating the Blowfish Theme, I've loved spending time developing my website with your theme!

Cheers! :)
2026-08-16 21:52:30 +01:00
github-actions[bot]andnunocoracao db2932a16d Update Hugo supported version (#3031)
Co-authored-by: nunocoracao <3803196+nunocoracao@users.noreply.github.com>
2026-08-16 21:51:07 +01:00
dependabot[bot] ac252d5190 📌 Bump puppeteer from 25.5.0 to 25.7.0 (#3042)
* 📌 Bump puppeteer from 25.5.0 to 25.7.0

Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.5.0 to 25.7.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.5.0...puppeteer-v25.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>

* 📦 Update packaged Mermaid

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-16 21:48:15 +01:00
dependabot[bot] 240201223f 📌 Bump katex from 0.18.1 to 0.18.2 (#3043)
* 📌 Bump katex from 0.18.1 to 0.18.2

Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.18.1 to 0.18.2.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.18.1...v0.18.2)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.18.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* 📦 Update packaged KaTeX

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-16 21:48:11 +01:00
Nuno C.andClaude Fable 5 720b865312 🔒️ Fix remaining Dependabot alerts (scripts deps + vendored mermaid) (#3045)
* 📌 Bump vendored mermaid to 11.16.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 🔒️ Fix vulnerable transitive deps in scripts

Refresh brace-expansion to 2.1.4 and protobufjs to 7.6.5, and override
uuid to 11.1.1 to clear the remaining Dependabot alerts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 21:47:12 +01:00
FridayandFriday a142fd55d3 fix: update vulnerable transitive dependencies (#3036)
Co-authored-by: Friday <friday@openclaw.local>
2026-08-16 21:23:16 +01:00
Nuno C. 1d761fc51a Merge pull request #3029 from nunocoracao/dependabot/github_actions/main/actions/stale-11
👷 Bump actions/stale from 10 to 11
2026-07-29 13:03:09 +01:00
Nuno C. 1c73bb7c3c Merge pull request #3030 from nunocoracao/dependabot/npm_and_yarn/main/puppeteer-25.4.0
📌 Bump puppeteer from 25.3.0 to 25.4.0
2026-07-29 13:02:55 +01:00
dependabot[bot] 65eb337501 📌 Bump puppeteer from 25.3.0 to 25.4.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.3.0 to 25.4.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.3.0...puppeteer-v25.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 05:08:08 +00:00
dependabot[bot] 7508edd884 👷 Bump actions/stale from 10 to 11
Bumps [actions/stale](https://github.com/actions/stale) from 10 to 11.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v10...v11)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '11'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-29 05:02:45 +00:00
Nuno Coração 0091ffab64 update gh data 2026-07-27 16:56:52 +01:00
Nuno Coração 4afcd32b99 Merge remote-tracking branch 'origin/main' into main 2026-07-26 12:59:48 +01:00
Nuno CoraçãoandClaude Opus 5 53528cb23f 2.105.0
Bump version to 2.105.0 and refresh contributors and generated user pages.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 12:59:17 +01:00
Friday ec362e7de4 Merge pull request #2997 from ZhenShuo2021/patch
fix: global resources fallback incorrectly removed in #2978
2026-07-26 12:20:53 +01:00
Friday cecc88743d Merge pull request #3007 from MaikelChan/taxonomy-badge-fix
🐛 Fixed custom taxonomies not appearing as badges
2026-07-26 12:20:39 +01:00
Friday a220b9778c Merge pull request #3012 from schaerfo/admonition-german
🌐 German localization for admonition
2026-07-26 12:20:34 +01:00
Friday 75d292e590 Merge pull request #3022 from chius-me/add-chius-cc-user
Add chius.cc to showcase users
2026-07-26 12:15:42 +01:00
Friday de0ed7c689 📚 Rebase showcase user submission 2026-07-26 11:15:23 +00:00
Friday 686dbb082a Merge pull request #3015 from leviceroy/showcase-add-libreleo
Add LibreLeo to showcase users
2026-07-26 12:13:17 +01:00
Friday 4201295501 📚 Rebase showcase user submission 2026-07-26 11:12:57 +00:00
Friday 1403422f60 Merge pull request #2999 from gregpuzzles1/add-tech-trail-pulse-clmbooks
Update Tech Trail Pulse entry and add Christian Living Ministries Books site built with Hugo and the Blowfish theme
2026-07-26 12:10:13 +01:00
Friday e92cca185d Merge pull request #2995 from scottkuperus/patch-1
Add new user entry for scottkuperus.com
2026-07-26 12:10:03 +01:00
Friday 6882d6fbb1 Merge pull request #3026 from nunocoracao/dependabot/npm_and_yarn/scripts/fast-xml-parser-5.10.1
Bump fast-xml-parser from 5.9.3 to 5.10.1 in /scripts
2026-07-26 11:54:20 +01:00
Friday dac3e5a8a2 Merge pull request #3009 from nunocoracao/dependabot/npm_and_yarn/main/fuse.js-7.5.0
📌 bump fuse.js from 7.4.2 to 7.5.0
2026-07-26 11:53:41 +01:00
Friday 0b5726fdee 📌 Rebase Fuse.js update 2026-07-26 10:53:20 +00:00
Friday 50b5a49e85 Merge pull request #3018 from nunocoracao/dependabot/npm_and_yarn/main/tailwindcss/cli-4.3.3
📌 bump @tailwindcss/cli from 4.3.2 to 4.3.3
2026-07-26 11:52:43 +01:00
Friday 117eded987 Merge remote-tracking branch 'origin/main' into dependabot/npm_and_yarn/main/tailwindcss/cli-4.3.3 2026-07-26 10:52:11 +00:00
Friday a5a41f9aa5 Merge pull request #3019 from nunocoracao/dependabot/npm_and_yarn/main/tailwindcss-4.3.3
📌 bump tailwindcss from 4.3.2 to 4.3.3
2026-07-26 11:51:55 +01:00
dependabot[bot] 682447fca5 Bump fast-xml-parser from 5.9.3 to 5.10.1 in /scripts
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.9.3 to 5.10.1.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.9.3...v5.10.1)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.10.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-26 10:51:39 +00:00
root 31e7ff8754 📌 Rebase Tailwind CSS update 2026-07-26 10:51:35 +00:00
Friday 22fed8c1ca Merge pull request #2998 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-07-26 11:49:53 +01:00
Friday b50e0a5d12 Merge pull request #3008 from nunocoracao/dependabot/github_actions/main/actions/setup-node-7
👷 bump actions/setup-node from 6 to 7
2026-07-26 11:49:44 +01:00
Friday 201fb09360 Merge pull request #3020 from nunocoracao/dependabot/npm_and_yarn/main/katex-0.18.1
📌 bump katex from 0.17.0 to 0.18.1
2026-07-26 11:49:13 +01:00
Friday da5216132a Merge pull request #3021 from nunocoracao/dependabot/npm_and_yarn/main/prettier-3.9.6
📌 bump prettier from 3.9.4 to 3.9.6
2026-07-26 11:48:56 +01:00
Yao Chius 60cf2ea44e 📝 Add chius.cc to showcase users
Add personal blog https://chius.cc/ (source: https://github.com/chius-me/chius.cc) to the Blowfish users list.
2026-07-24 14:23:49 +08:00
dependabot[bot] 1fd5219f65 📦 Update packaged KaTeX 2026-07-22 05:09:16 +00:00
dependabot[bot] 9768a2e6c4 💄 Rebuild CSS 2026-07-22 05:09:09 +00:00
dependabot[bot] ef081ffc68 💄 Rebuild CSS 2026-07-22 05:09:05 +00:00
dependabot[bot] a402aafee8 📌 bump prettier from 3.9.4 to 3.9.6
Bumps [prettier](https://github.com/prettier/prettier) from 3.9.4 to 3.9.6.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.4...3.9.6)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.9.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-22 05:08:52 +00:00
dependabot[bot] fe01814dd5 📌 bump katex from 0.17.0 to 0.18.1
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.17.0 to 0.18.1.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.17.0...v0.18.1)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.18.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-22 05:08:43 +00:00
dependabot[bot] 16c58f2c52 📌 bump tailwindcss from 4.3.2 to 4.3.3
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-22 05:08:37 +00:00
dependabot[bot] 94cec19786 📌 bump @tailwindcss/cli from 4.3.2 to 4.3.3
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/@tailwindcss-cli)

---
updated-dependencies:
- dependency-name: "@tailwindcss/cli"
  dependency-version: 4.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-22 05:08:30 +00:00
leviceroy b102502c22 Add LibreLeo to showcase users 2026-07-19 10:22:19 +04:00
Christian Schärf a734e5e320 🌐 German localization for admonition 2026-07-16 22:31:33 +02:00
dependabot[bot] 2744192e68 📦 Update packaged FuseJS 2026-07-15 05:07:44 +00:00
dependabot[bot] 58da587009 📌 bump fuse.js from 7.4.2 to 7.5.0
Bumps [fuse.js](https://github.com/krisk/Fuse) from 7.4.2 to 7.5.0.
- [Release notes](https://github.com/krisk/Fuse/releases)
- [Changelog](https://github.com/krisk/Fuse/blob/main/CHANGELOG.md)
- [Commits](https://github.com/krisk/Fuse/compare/v7.4.2...v7.5.0)

---
updated-dependencies:
- dependency-name: fuse.js
  dependency-version: 7.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-15 05:07:19 +00:00
dependabot[bot] 35a588221f 👷 bump actions/setup-node from 6 to 7
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-15 05:02:51 +00:00
MaikelChan 0f060c2e64 Fixed custom taxonomies not appearing as badges 2026-07-12 04:15:23 +02:00
Greg Christian 17b8215782 Update Tech Trail Pulse and add CLM Books site 2026-07-07 13:57:24 -06:00
nunocoracao 88b4260105 Update Hugo supported version 2026-07-07 09:38:57 +00:00
ZhenShuo Leo c164484993 fix: global resources fallback incorrectly removed in #2978 2026-07-05 14:37:14 +08:00
Scott Kuperus bf9d7ef2cb Add new user entry for scottkuperus.com
Adding a new site that is using the Blowfish template.
2026-07-03 22:13:04 +01:00
Nuno Coração 1f14448333 updates 2026-07-02 13:25:16 +01:00
Nuno Coração b67cdadb27 fixed warn and bump version 2026-07-02 13:14:47 +01:00
Nuno C. d85a0b243b Merge pull request #2983 from eread/eread/allow-pages-using-list-template-to-have-emojis-in-titles
Allow pages using list layout to render emojis in titles
2026-07-02 12:54:35 +01:00
Nuno C. 7a3ace780f Merge pull request #2905 from aplgr/feat/cookie-notice-i18n
🌐 Add cookie notice translations
2026-07-02 12:53:31 +01:00
Nuno Coração 1cf811490c bump ALL 2026-07-02 12:49:04 +01:00
Nuno Coração 4bc35b656a bump ALL 2026-07-02 12:48:28 +01:00
Nuno C. bacf607405 Merge pull request #2935 from aplgr/feature/client-language-redirect
✨ Add opt-in client-side language redirect
2026-07-02 12:46:49 +01:00
Nuno C. 7cd64e0c77 Merge pull request #2969 from ZhenShuo2021/scrollbar
🐛 Fix: restore scrollbar styles broken by tailwind v4.3 upgrade
2026-07-02 12:45:02 +01:00
Nuno C. c6d1d04c9b Merge branch 'main' into scrollbar 2026-07-02 12:44:52 +01:00
Nuno C. af4808d9b7 Merge pull request #2978 from ZhenShuo2021/featureimage
🐛 Fix: scope of featureimage in front matter
2026-07-02 12:44:13 +01:00
Nuno C. d2196b6d7e Merge pull request #2953 from TomzxForks/fix/search-relative-url
fix: use relative URL for search index to support alternate domains
2026-07-02 12:43:35 +01:00
Nuno C. 3c0b3a5ebe Merge pull request #2945 from ilantz/fix-appearance-tooltips
♿️ Fix appearance switcher accessibility tooltips
2026-07-02 12:42:51 +01:00
Nuno Coração 694df4423e Merge branch 'main' of https://github.com/nunocoracao/blowfish 2026-07-02 12:40:25 +01:00
Nuno Coração ea7d2da4c1 bump firebase-admin 2026-07-02 12:40:14 +01:00
Nuno C. e72752168f Merge pull request #2993 from nunocoracao/dependabot/npm_and_yarn/dompurify-3.4.11
Bump dompurify from 3.4.3 to 3.4.11
2026-07-02 12:36:58 +01:00
Nuno C. 4b3ff374a1 Merge pull request #2972 from chandlertee/fix/schema-mainentityofpage
🐛 fix(schema): use page URL for mainEntityOfPage
2026-07-02 12:36:42 +01:00
Nuno C. e8f44d4e8e Merge pull request #2970 from chandlertee/fix/schema-author-data-authors
🐛 fix(schema): resolve article author from data/authors
2026-07-02 12:36:20 +01:00
Nuno C. 2d36a64a6e Merge pull request #2973 from chandlertee/docs/add-user-chandlerthompson
📝 docs: add chandlerthompson.dev to users list
2026-07-02 12:35:18 +01:00
Nuno C. 8c6dfedb47 Merge branch 'main' into docs/add-user-chandlerthompson 2026-07-02 12:35:08 +01:00
dependabot[bot] 8263cb1813 Bump dompurify from 3.4.3 to 3.4.11
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.3 to 3.4.11.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.4.3...3.4.11)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-02 11:33:54 +00:00
Nuno C. 3a9cc3a9a0 Merge pull request #2992 from nunocoracao/dependabot/npm_and_yarn/scripts/grpc/grpc-js-1.14.4
Bump @grpc/grpc-js from 1.14.3 to 1.14.4 in /scripts
2026-07-02 12:29:36 +01:00
Nuno C. aa7af46e57 Merge pull request #2965 from gian-luca-decurtins/Fix-deprecated-language-settings
Fix deprecated language settings: languageCode and languageName was deprecated in Hugo v0.158.0
2026-07-02 12:29:12 +01:00
dependabot[bot] 74c1af676d Bump @grpc/grpc-js from 1.14.3 to 1.14.4 in /scripts
Bumps [@grpc/grpc-js](https://github.com/grpc/grpc-node) from 1.14.3 to 1.14.4.
- [Release notes](https://github.com/grpc/grpc-node/releases)
- [Commits](https://github.com/grpc/grpc-node/compare/@grpc/grpc-js@1.14.3...@grpc/grpc-js@1.14.4)

---
updated-dependencies:
- dependency-name: "@grpc/grpc-js"
  dependency-version: 1.14.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-02 11:28:00 +00:00
Nuno C. 6d0f3bd69c Merge pull request #2991 from nunocoracao/dependabot/npm_and_yarn/scripts/fast-xml-builder-1.2.0
Bump fast-xml-builder from 1.1.4 to 1.2.0 in /scripts
2026-07-02 12:26:39 +01:00
dependabot[bot] 6a22f960ec Bump fast-xml-builder from 1.1.4 to 1.2.0 in /scripts
Bumps [fast-xml-builder](https://github.com/NaturalIntelligence/fast-xml-builder) from 1.1.4 to 1.2.0.
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-builder/blob/main/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-builder/compare/v1.1.4...v1.2.0)

---
updated-dependencies:
- dependency-name: fast-xml-builder
  dependency-version: 1.2.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-02 11:25:27 +00:00
Nuno C. b3e27eb251 Merge pull request #2990 from nunocoracao/dependabot/npm_and_yarn/scripts/form-data-2.5.6
Bump form-data from 2.5.5 to 2.5.6 in /scripts
2026-07-02 12:24:05 +01:00
dependabot[bot] 4026aee69c Bump form-data from 2.5.5 to 2.5.6 in /scripts
Bumps [form-data](https://github.com/form-data/form-data) from 2.5.5 to 2.5.6.
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v2.5.5...v2.5.6)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 2.5.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-02 11:23:38 +00:00
Nuno C. bdb41a342f Merge pull request #2929 from kamilsi/fix/search-race-condition
🐛 fix: race condition in search query execution
2026-07-02 12:20:54 +01:00
Nuno Coração fadadaf2cc add user tobydevlin.com 2026-07-02 12:18:47 +01:00
Nuno C. f2b14a8463 Merge pull request #2981 from sebastianzehner/main
Add sebastianzehner.com to users.json
2026-07-02 12:17:41 +01:00
Nuno C. 4a2e182b32 Merge branch 'main' into main 2026-07-02 12:17:30 +01:00
Nuno C. 4c074bc270 Merge pull request #2979 from mortennordbye/add-blog-nordbye
Add blog.nordbye.it to users list
2026-07-02 12:16:32 +01:00
Nuno C. 96a48bcd8b Merge branch 'main' into add-blog-nordbye 2026-07-02 12:16:23 +01:00
Nuno C. ae6a75d827 Merge pull request #2967 from gregpuzzles1/add_user
Add techtrailpulse.com to users list
2026-07-02 12:15:28 +01:00
Nuno C. 8278ad89fc Merge branch 'main' into add_user 2026-07-02 12:15:16 +01:00
Nuno C. f4fa7ebad5 Merge pull request #2956 from fionnlinux/main
feat: add fionnlinux.com to showcase
2026-07-02 12:14:23 +01:00
Nuno C. 5e81b943ed Merge branch 'main' into main 2026-07-02 12:14:13 +01:00
Nuno C. 4f8e3e0b53 Merge pull request #2954 from Peredurz/patch-1
Add douwez.dev to users.json
2026-07-02 12:10:16 +01:00
Nuno C. 1e2bd11778 Merge branch 'main' into patch-1 2026-07-02 12:10:05 +01:00
Nuno C. 853bdd169f Merge pull request #2948 from 0zunu/patch-2
Add new user entry for www.azriel.id
2026-07-02 12:07:50 +01:00
Nuno C. 813fdecde0 Merge pull request #2963 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-07-02 12:06:47 +01:00
Nuno C. 845eecb314 Merge pull request #2957 from nunocoracao/dependabot/npm_and_yarn/scripts/protobufjs-7.6.1
chore(deps): bump protobufjs from 7.5.4 to 7.6.1 in /scripts
2026-07-02 12:06:11 +01:00
Nuno C. e5d2ae8a7b Merge pull request #2982 from nunocoracao/dependabot/github_actions/main/actions/checkout-7
👷 Bump actions/checkout from 6 to 7
2026-07-02 12:05:41 +01:00
Nuno C. 58ab07f735 Merge pull request #2961 from nunocoracao/dependabot/npm_and_yarn/main/puppeteer-25.1.0
📌 Bump puppeteer from 24.42.0 to 25.1.0
2026-07-02 12:04:23 +01:00
Nuno C. ba3b1f4192 Merge pull request #2968 from nunocoracao/dependabot/npm_and_yarn/main/fuse.js-7.4.1
📌 Bump fuse.js from 7.3.0 to 7.4.1
2026-07-02 12:03:42 +01:00
Evan Read bcfe2e3f7b Allow pages using list layout to have emojis in titles 2026-06-26 16:01:56 +10:00
dependabot[bot] d8986d6a99 💄 Rebuild CSS 2026-06-24 05:03:13 +00:00
dependabot[bot] ef8d204d1a 👷 Bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-24 05:02:46 +00:00
Sebastian Zehner 3f5d19da40 Add sebastianzehner.com to users.json 2026-06-23 20:11:08 -03:00
nunocoracao 6c0f1ef456 Update Hugo supported version 2026-06-19 07:56:35 +00:00
Morten Victor Nordbye fb4d43776c Add blog.nordbye.it to users list 2026-06-16 10:14:28 +02:00
ZhenShuo Leo 4a45ab6c96 fix: scope of featureimage in front matter
fixes #2977
2026-06-13 14:43:50 +08:00
ZhenShuo Leo ef9e756ce5 fix: restore scrollbar styles broken by tailwind v4.3 upgrade
Tailwind v4.3 introduced built-in scrollbar utilities that conflicted
with the tailwind-scrollbar plugin, causing visual regressions.

Fixed by inlining the pre-v4.3 build output directly into main.css,
which also eliminates the need for the tailwind-scrollbar plugin.
2026-06-12 05:12:34 +08:00
Chandler ThompsonandClaude Opus 4.8 3e1d31ca87 docs: add chandlerthompson.dev to users list
Add chandlerthompson.dev — a personal blog built with Blowfish — to the
exampleSite users showcase.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:24:48 -05:00
Chandler ThompsonandClaude Opus 4.8 4feebf8acd fix(schema): use page URL for mainEntityOfPage instead of "true"
The Article JSON-LD set "mainEntityOfPage": "true" on every non-home page.
schema.org/mainEntityOfPage expects a CreativeWork or a URL — a boolean
string is invalid. Emit the page's canonical URL, mirroring the adjacent
"url" : {{ .Permalink }}.

Fixes #2971

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 21:22:53 -05:00
Chandler ThompsonandClaude Opus 4.8 f8cedfbcd8 fix(schema): resolve article author from data/authors
schema.html always read the author from .Site.Params.Author, so the
structured-data author was the site-level author (or empty) regardless of a
post's `authors` front matter — even though the theme supports multiple
authors via data/authors/.

Resolve the first `authors` key against data/authors/ and emit that author's
name, image and sameAs (from their social/links), falling back to the
site-level author. Single-author output is unchanged apart from the additive
image and sameAs fields.

Fixes #2943

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 20:58:27 -05:00
dependabot[bot] e9a59654c9 💄 Rebuild CSS 2026-06-04 01:14:21 +00:00
dependabot[bot] c73459b634 📦 Update packaged FuseJS 2026-06-04 01:14:19 +00:00
dependabot[bot] 864c8328ec 📌 Bump fuse.js from 7.3.0 to 7.4.1
Bumps [fuse.js](https://github.com/krisk/Fuse) from 7.3.0 to 7.4.1.
- [Release notes](https://github.com/krisk/Fuse/releases)
- [Changelog](https://github.com/krisk/Fuse/blob/main/CHANGELOG.md)
- [Commits](https://github.com/krisk/Fuse/compare/v7.3.0...v7.4.1)

---
updated-dependencies:
- dependency-name: fuse.js
  dependency-version: 7.4.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 01:13:53 +00:00
Greg Christian ccbf3544d9 Add techtrailpulse.com to users list 2026-06-03 13:24:29 -06:00
Gian Luca Decurtins 35c3462f3c Fix deprecated language settings: languageCode and languageName will be removed 2026-05-30 21:22:35 +02:00
dependabot[bot] 2f108192ad 💄 Rebuild CSS 2026-05-27 06:58:26 +00:00
dependabot[bot] eacda9fc35 📌 Bump puppeteer from 24.42.0 to 25.1.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.42.0 to 25.1.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-v24.42.0...puppeteer-v25.1.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.1.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-27 06:57:56 +00:00
dependabot[bot] bb8768c859 💄 Rebuild CSS 2026-05-26 10:37:30 +00:00
dependabot[bot] ee1aadc969 chore(deps): bump protobufjs from 7.5.4 to 7.6.1 in /scripts
Bumps [protobufjs](https://github.com/protobufjs/protobuf.js) from 7.5.4 to 7.6.1.
- [Release notes](https://github.com/protobufjs/protobuf.js/releases)
- [Changelog](https://github.com/protobufjs/protobuf.js/blob/protobufjs-v7.6.1/CHANGELOG.md)
- [Commits](https://github.com/protobufjs/protobuf.js/compare/protobufjs-v7.5.4...protobufjs-v7.6.1)

---
updated-dependencies:
- dependency-name: protobufjs
  dependency-version: 7.6.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-26 10:37:01 +00:00
fionnlinux c0a7258d50 feat: add fionnlinux.com to showcase 2026-05-25 12:11:45 -04:00
Douwe Zumker 9aaf8f16c1 Add douwez.dev to users.json 2026-05-21 12:32:12 +02:00
Tom Rochette d00e49601a fix: use relative URL for search index to support alternate domains 2026-05-21 04:04:45 +00:00
Azriel Fidzlie 6c3e9761b9 Add new user entry for www.azriel.id 2026-05-18 00:14:59 +07:00
ilantz 1d61651817 ♿️ Fix appearance switcher accessibility tooltips
Dynamically update the appearance switcher accessibility labels and tooltips using the native i18n variables so that the UI correctly reflects the user's localized language instead of hardcoded English strings.
2026-05-15 00:15:55 -07:00
André Plöger 6b11b81aec Merge branch 'main' into feature/client-language-redirect 2026-05-14 10:23:48 -03:00
Nuno Coração e9699d8c5d release cut 2026-05-13 23:27:16 +01:00
Nuno C. 34b1f117fc Merge pull request #2937 from aplgr/fix/reply-email-subject-i18n
🌐 Localize reply-by-email subject
2026-05-13 23:13:45 +01:00
Nuno C. 6c7c4b6a9f Merge pull request #2931 from head1328/feat/button-pageref
feat: support pageRef in button shortcode
2026-05-13 23:12:34 +01:00
Nuno C. a7fc9862e4 Merge pull request #2932 from head1328/feat/ansible-cards
feat: add ansible galaxy card shortcode
2026-05-13 23:10:40 +01:00
Nuno C. e0b8a49054 Merge pull request #2933 from pawelngei/users-storyseed
docs: Add Story Seed Library to a list of Blowfish users
2026-05-13 23:08:45 +01:00
Nuno C. c4607f0a8f Merge pull request #2926 from aplgr/fix/meta-description-order
Add configurable meta description fallback order
2026-05-13 23:07:44 +01:00
Nuno C. 7d8b388bfb Merge pull request #2928 from abdalrahmanshaban0/main
fix(hugo): update deprecated LanguageCode to Locale
2026-05-13 23:04:57 +01:00
Nuno C. b5054889cb Merge pull request #2921 from rjwisloff/i18/nb
Add Norwegian Bokmål translation
2026-05-13 23:03:19 +01:00
Nuno Coração 7b0904947d Merge branch 'main' of https://github.com/nunocoracao/blowfish 2026-05-13 23:01:31 +01:00
Nuno C. 2c01906987 Merge pull request #2923 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-05-13 23:00:47 +01:00
Nuno C. 5342dd2128 Merge pull request #2910 from nunocoracao/dependabot/npm_and_yarn/main/fuse.js-7.3.0
📌 Bump fuse.js from 7.2.0 to 7.3.0
2026-05-13 23:00:25 +01:00
Nuno C. b7d5f96bea Merge branch 'main' into dependabot/npm_and_yarn/main/fuse.js-7.3.0 2026-05-13 23:00:15 +01:00
Nuno C. f80473e761 Merge pull request #2920 from nunocoracao/dependabot/npm_and_yarn/main/tailwindcss/cli-4.2.4
📌 Bump @tailwindcss/cli from 4.2.2 to 4.3.0
2026-05-13 22:58:41 +01:00
Nuno C. 6f6fba6d4d Merge pull request #2918 from nunocoracao/dependabot/npm_and_yarn/main/tailwindcss-4.2.4
📌 Bump tailwindcss from 4.2.2 to 4.3.0
2026-05-13 22:58:08 +01:00
dependabot[bot] 8671b01505 📌 Bump @tailwindcss/cli from 4.2.2 to 4.3.0
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.2.2 to 4.3.0.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.0/packages/@tailwindcss-cli)

---
updated-dependencies:
- dependency-name: "@tailwindcss/cli"
  dependency-version: 4.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-13 21:58:04 +00:00
Nuno Coração de2c627aac Merge branch 'main' of https://github.com/nunocoracao/blowfish 2026-05-13 22:56:38 +01:00
Nuno C. 6d8a9b0712 Merge branch 'main' into hugo-new-version 2026-05-13 22:56:22 +01:00
Nuno C. 62ffaac7ab Merge pull request #2942 from ZhenShuo2021/version
chore: bump minimum Hugo version to 0.158.0 for #2866
2026-05-13 22:55:05 +01:00
Nuno C. 64c437e67f Merge pull request #2924 from rob-randall/main
Fix deprecated .Site.LanguageCode references (Hugo v0.158.0+)
2026-05-13 22:54:13 +01:00
dependabot[bot] 6760c9de65 📌 Bump tailwindcss from 4.2.2 to 4.3.0
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.2.2 to 4.3.0.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.0/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-13 21:53:34 +00:00
Nuno C. 562db70231 Merge pull request #2908 from nunocoracao/dependabot/github_actions/main/actions/upload-pages-artifact-5
👷 Bump actions/upload-pages-artifact from 4 to 5
2026-05-13 22:51:55 +01:00
Nuno C. ab9e81d586 Merge pull request #2909 from nunocoracao/dependabot/github_actions/main/softprops/action-gh-release-3
👷 Bump softprops/action-gh-release from 2 to 3
2026-05-13 22:51:39 +01:00
Nuno C. 56f66b633d Merge pull request #2941 from nunocoracao/dependabot/github_actions/main/peaceiris/actions-hugo-3.2.1
👷 Bump peaceiris/actions-hugo from 3.0.0 to 3.2.1
2026-05-13 22:51:25 +01:00
Nuno C. d170cf3d96 Merge pull request #2919 from nunocoracao/dependabot/npm_and_yarn/main/puppeteer-24.42.0
📌 Bump puppeteer from 24.40.0 to 24.42.0
2026-05-13 22:50:52 +01:00
Nuno C. 26bbbbc288 Merge pull request #2911 from nunocoracao/dependabot/npm_and_yarn/main/prettier-3.8.3
📌 Bump prettier from 3.8.1 to 3.8.3
2026-05-13 22:50:18 +01:00
Nuno Coração 5e144d4f11 fixed incompatibilitis in extension change 2026-05-13 22:49:17 +01:00
ZhenShuo Leo 86fd828353 chore: bump minimum Hugo version to 0.158.0 for #2887
fixes #2940
2026-05-14 00:43:50 +08:00
dependabot[bot] a6ce29638a 💄 Rebuild CSS 2026-05-13 05:04:01 +00:00
dependabot[bot] 8b0691b632 👷 Bump peaceiris/actions-hugo from 3.0.0 to 3.2.1
Bumps [peaceiris/actions-hugo](https://github.com/peaceiris/actions-hugo) from 3.0.0 to 3.2.1.
- [Release notes](https://github.com/peaceiris/actions-hugo/releases)
- [Changelog](https://github.com/peaceiris/actions-hugo/blob/main/CHANGELOG.md)
- [Commits](https://github.com/peaceiris/actions-hugo/compare/v3.0.0...v3.2.1)

---
updated-dependencies:
- dependency-name: peaceiris/actions-hugo
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-13 05:03:31 +00:00
André Plöger 863b64815c fix missing key 2026-05-10 14:39:41 -03:00
André Plöger 5df9ce4b32 🌐 Localize reply-by-email subject
Use a new article.reply_to i18n key for the generated reply-by-email subject instead of the hardcoded English prefix.

Add the missing translations across i18n files and keep the existing English subject as fallback.

Fixes #2936
2026-05-10 14:37:55 -03:00
André Plöger 598905a36b 🌐 Preserve locale subtags in language redirects 2026-05-10 11:14:37 -03:00
André Plöger 3a86a7656e ✨ Add opt-in client-side language redirect 2026-05-10 10:47:49 -03:00
ALXD e0e28b651a Add Story Seed Library to a list of Blowfish users 2026-05-09 12:37:49 +02:00
Kevin Horst a9869a55a6 fix: ansible card values are build-time only (Galaxy blocks CORS) 2026-05-08 19:26:55 +02:00
Kevin Horst 88863335fd feat: add ansible galaxy card shortcode 2026-05-08 19:20:53 +02:00
Kevin Horst 6d33438e18 feat: support pageRef in button shortcode 2026-05-08 18:37:54 +02:00
Kamil Sijko db9fb58bca 🐛 fix: race condition in search query execution
When a user opens the search modal and starts typing immediately, executeQuery() is triggered. Since buildIndex() is asynchronous, the fuse variable might still be undefined when .search() is called. Added safety checks for fuse initialization.
2026-05-05 11:50:28 +02:00
Nuno Coração baf74cca1a chore: add .watchfire to gitignore 2026-05-05 00:12:29 +01:00
abdalrahmanshaban0 1eb3d8da3e fix(hugo): update deprecated LanguageCode to Locale 2026-05-04 17:19:12 +03:00
nunocoracao dff1858ca5 Update Hugo supported version 2026-04-30 06:56:22 +00:00
André Plöger ab5c7b7c97 Add configurable meta description fallback order 2026-04-29 20:40:29 -03:00
Robert Randall 350458a3c5 Changed from deprecated .Site.LanguageCode to .Site.Language.Locale 2026-04-29 13:32:56 +02:00
Ragnar Wisløff c7305a9727 Add Norwegian Bokmål translation 2026-04-25 14:00:51 +02:00
dependabot[bot] 75a6f741c8 💄 Rebuild CSS 2026-04-22 05:18:47 +00:00
dependabot[bot] c37d7fcd21 📌 Bump puppeteer from 24.40.0 to 24.42.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.40.0 to 24.42.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-v24.40.0...puppeteer-v24.42.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-22 05:18:16 +00:00
dependabot[bot] 7c2545d598 💄 Rebuild CSS 2026-04-15 05:17:57 +00:00
dependabot[bot] 2d37ecace0 📌 Bump prettier from 3.8.1 to 3.8.3
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.1 to 3.8.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.8.1...3.8.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 05:17:30 +00:00
dependabot[bot] 8d28507fe9 📌 Bump fuse.js from 7.2.0 to 7.3.0
Bumps [fuse.js](https://github.com/krisk/Fuse) from 7.2.0 to 7.3.0.
- [Release notes](https://github.com/krisk/Fuse/releases)
- [Changelog](https://github.com/krisk/Fuse/blob/main/CHANGELOG.md)
- [Commits](https://github.com/krisk/Fuse/compare/v7.2.0...v7.3.0)

---
updated-dependencies:
- dependency-name: fuse.js
  dependency-version: 7.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 05:17:25 +00:00
dependabot[bot] 1e5b7fde7e 💄 Rebuild CSS 2026-04-15 05:03:55 +00:00
dependabot[bot] 27cdc57bda 💄 Rebuild CSS 2026-04-15 05:03:47 +00:00
dependabot[bot] 8eff80bb12 👷 Bump softprops/action-gh-release from 2 to 3
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 05:03:22 +00:00
dependabot[bot] cda04a5061 👷 Bump actions/upload-pages-artifact from 4 to 5
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 05:03:16 +00:00
André Plöger cc157244ba 🐛 Fix cookie notice i18n blockers in zh-TW and gl 2026-04-14 15:24:10 -03:00
André Plöger 014eaa879c Add cookie notice translations 2026-04-14 14:55:09 -03:00
Nuno CoraçãoandClaude Opus 4.6 da8ca782aa 🔖 Bump version to 2.103.0
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 23:09:17 +01:00
Nuno CoraçãoandClaude Opus 4.6 f2e9eaa80f Add breaking changes policy and PR guidelines to CONTRIBUTING.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:46:11 +01:00
Nuno C. 8eb1f330c5 Merge pull request #2877 from jin-li/feature/thumbnail-aspect-ratio-global
feat: Allow configurable thumbnail aspect ratio for article cards
2026-04-13 22:43:18 +01:00
Nuno C. 44f787680b Merge pull request #2874 from aplgr/feat/hreflang-head-alternates
Add hreflang alternates to multilingual page head
2026-04-13 22:43:11 +01:00
Nuno C. 270a0a74d2 Merge pull request #2868 from L0kayata/dev
🐛 Fix `carousel` caption height overflow and layout jump
2026-04-13 22:41:46 +01:00
Nuno C. a57db858b4 Merge pull request #2866 from EricGusmao/fix/hugo-v0.158.0-deprecations
fix: migrate deprecated Hugo v0.158.0 language API
2026-04-13 22:40:39 +01:00
Nuno C. 2e195fc1e1 Merge pull request #2853 from MaikelChan/header_space_list
🐛 Fixed `layoutBackgroundBlur` and `layoutBackgroundHeaderSpace` not affecting term and taxonomy pages
2026-04-13 22:39:41 +01:00
Nuno C. a666aa54b8 Merge pull request #2852 from MaikelChan/badges
✨ Implemented category badges in secondary color and better granularity for showing categories or tags
2026-04-13 22:38:59 +01:00
Nuno CoraçãoandClaude Opus 4.6 89e261f8e4 Fix Umami event name for long page titles
Use a fixed event name (type:view) and pass the title as metadata
instead of embedding it in the event name, which caused issues with
long page titles.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:34:48 +01:00
Nuno C. d35a493ba0 Merge pull request #2837 from schneekluth/feat-email-shortcode
Shortcode for obfuscated mailto email link
2026-04-13 22:29:29 +01:00
Nuno C. 78341b1822 Merge pull request #2898 from unknown-gd/main
Localization for `article` shortcut
2026-04-13 22:29:26 +01:00
Nuno C. 58e075717e Merge pull request #2851 from nk9/plainify-title
[#2850] Run plainify on the title value before emojify
2026-04-13 22:29:23 +01:00
Nuno C. 137860d31a Merge pull request #2900 from alxhslm/feat/untappd-icon-v2
✨ Feat: Add Untappd icon and profile support
2026-04-13 22:29:20 +01:00
Nuno C. cee3e324fd Merge pull request #2899 from alxhslm/feat/strava-icon-v2
✨ Feat: Add Strava icon and profile support
2026-04-13 22:29:17 +01:00
Nuno CoraçãoandClaude Opus 4.6 2b83b517cc Fix sharing email link broken by email obfuscation PR
The email obfuscation PR (#2815) incorrectly replaced the "share via
email" link with the author's email as recipient. Sharing links have no
email address to obfuscate — they just open a mailto: with the article
URL and title prefilled.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:24:07 +01:00
Nuno CoraçãoandClaude Opus 4.6 cc5cd8f11a Update user data, screenshots, and translated content
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:19:11 +01:00
Nuno CoraçãoandClaude Opus 4.6 c6d40c6d3f Remove google-translate dep, upgrade firebase-admin, pin csv-parse, and improve processUsers.js
- Remove @iamtraction/google-translate (and undici vulnerability) — translation
  no longer needed, language files now copy English content directly
- Upgrade firebase-admin from ^12.0.0 to ^13.8.0
- Pin csv-parse to ~5.5.0 to avoid major version bump
- Use networkidle2 + 2s delay in processUsers.js for reliable screenshots

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:19:07 +01:00
Nuno Coração 8fda75b134 Merge branch 'main' of https://github.com/nunocoracao/blowfish 2026-04-13 21:41:34 +01:00
Nuno CoraçãoandClaude Opus 4.6 965b0ac6ef Pin fuse.js to ~7.2.0 — v7.3.0 dropped the UMD build needed for Hugo's script concatenation
fuse.js 7.3.0 removed dist/fuse.min.js (UMD), shipping only ESM/CJS.
Since Hugo concatenates vendor JS into a plain <script> tag, the ESM
export syntax causes a runtime error and breaks search. Pin to 7.2.0,
the last version with UMD support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 21:39:16 +01:00
Nuno C. 08f6ccd618 Merge pull request #2901 from nunocoracao/dependabot/npm_and_yarn/basic-ftp-5.2.2
Bump basic-ftp from 5.2.0 to 5.2.2
2026-04-13 21:38:43 +01:00
dependabot[bot] 3864f6f095 Bump basic-ftp from 5.2.0 to 5.2.2
Bumps [basic-ftp](https://github.com/patrickjuchli/basic-ftp) from 5.2.0 to 5.2.2.
- [Release notes](https://github.com/patrickjuchli/basic-ftp/releases)
- [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.2.0...v5.2.2)

---
updated-dependencies:
- dependency-name: basic-ftp
  dependency-version: 5.2.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 20:32:01 +00:00
Nuno C. 9ec0e6810a Merge pull request #2895 from nunocoracao/dependabot/npm_and_yarn/main/fuse.js-7.3.0
📌 Bump fuse.js from 7.1.0 to 7.3.0
2026-04-13 21:29:25 +01:00
dependabot[bot] a132a9c5e6 📌 Bump fuse.js from 7.1.0 to 7.3.0
Bumps [fuse.js](https://github.com/krisk/Fuse) from 7.1.0 to 7.3.0.
- [Release notes](https://github.com/krisk/Fuse/releases)
- [Changelog](https://github.com/krisk/Fuse/blob/main/CHANGELOG.md)
- [Commits](https://github.com/krisk/Fuse/compare/v7.1.0...v7.3.0)

---
updated-dependencies:
- dependency-name: fuse.js
  dependency-version: 7.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 20:26:03 +00:00
Nuno C. 0e8848d9c8 Merge pull request #2896 from nunocoracao/dependabot/npm_and_yarn/main/mermaid-11.14.0
📌 Bump mermaid from 11.13.0 to 11.14.0
2026-04-13 21:25:29 +01:00
Nuno C. deffce8a02 Merge pull request #2894 from nunocoracao/dependabot/npm_and_yarn/main/katex-0.16.45
📌 Bump katex from 0.16.44 to 0.16.45
2026-04-13 21:24:46 +01:00
Nuno C. e2dfae4a64 Merge pull request #2893 from nunocoracao/dependabot/npm_and_yarn/main/headlessui/react-2.2.10
📌 Bump @headlessui/react from 2.2.9 to 2.2.10
2026-04-13 21:24:33 +01:00
Nuno C. 8aac2d7585 Merge pull request #2897 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-04-13 21:24:14 +01:00
Alex HaslamandClaude Sonnet 4.6 b9883c761d Merge upstream/main into feat/untappd-icon-v2
Resolve conflicts in icon sample pages by adopting upstream's {{< icon-ref >}}
shortcode, which dynamically generates the icon table.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-12 21:27:37 +01:00
Alex HaslamandClaude Sonnet 4.6 7b0fbea8ab Merge upstream/main into feat/strava-icon-v2
Resolve conflicts in icon sample pages by adopting upstream's {{< icon-ref >}}
shortcode, which dynamically generates the icon table (replacing the static
table the PR had added strava to).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-12 20:32:23 +01:00
Alex HaslamandClaude Sonnet 4.6 4d6a84b041 📝 Docs: Add Untappd icon to icon samples table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 16:49:38 +00:00
Alex HaslamandClaude Sonnet 4.6 0bc71ebe8d 📝 Docs: Add Strava icon to icon samples table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 16:49:27 +00:00
Alex HaslamandClaude Sonnet 4.6 ae9b25b69c ✨ Feat: Add Untappd icon and profile support
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 16:42:31 +00:00
Alex HaslamandClaude Sonnet 4.6 1475200ab4 ✨ Feat: Add Strava icon and profile support
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 16:42:26 +00:00
Unknown Developer f04dd3659a Update link formatting in article shortcode 2026-04-09 19:05:14 +04:00
nunocoracao 9986ed01ff Update Hugo supported version 2026-04-09 06:35:56 +00:00
dependabot[bot] 16acbfee52 💄 Rebuild CSS 2026-04-08 05:17:37 +00:00
dependabot[bot] 4b864d00e5 📦 Update packaged Mermaid 2026-04-08 05:17:35 +00:00
dependabot[bot] 5a274629e4 📦 Update packaged KaTeX 2026-04-08 05:17:21 +00:00
dependabot[bot] e917645fba 📌 Bump mermaid from 11.13.0 to 11.14.0
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.13.0 to 11.14.0.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.13.0...mermaid@11.14.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 05:17:09 +00:00
dependabot[bot] 82aef982f1 📌 Bump katex from 0.16.44 to 0.16.45
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.44 to 0.16.45.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.44...v0.16.45)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.45
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 05:16:51 +00:00
dependabot[bot] cc91b648ec 📌 Bump @headlessui/react from 2.2.9 to 2.2.10
Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 2.2.9 to 2.2.10.
- [Release notes](https://github.com/tailwindlabs/headlessui/releases)
- [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v2.2.10/packages/@headlessui-react)

---
updated-dependencies:
- dependency-name: "@headlessui/react"
  dependency-version: 2.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 05:16:44 +00:00
Nuno C. 10314cff71 Merge pull request #2890 from nunocoracao/nunocoracao-patch-1
Bump version from 2.101.0 to 2.102.0
2026-04-06 11:25:46 +01:00
Nuno C. a7a04c6c5e Bump version from 2.101.0 to 2.102.0 2026-04-06 11:25:30 +01:00
Nuno C. c4bb9ab9b6 Merge pull request #2887 from EricGusmao/fix/hugo-v0.156.0-deprecations
Fix Hugo v0.156.0 template deprecations
2026-04-06 11:24:37 +01:00
Nuno C. 15299c15ab Merge pull request #2886 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-04-06 11:22:11 +01:00
nunocoracao 78fa726ebb Update Hugo supported version 2026-04-05 06:29:55 +00:00
Eric Gusmao b9ee790d5d Bump Netlify Hugo version to 0.159.1 2026-04-03 14:20:06 -03:00
Eric Gusmao ee2fc91522 Fix Hugo v0.156.0 template deprecations 2026-04-03 14:13:30 -03:00
Nuno C. 9bcb7d37d3 Merge pull request #2884 from nunocoracao/dependabot/npm_and_yarn/scripts/node-forge-1.4.0
Bump node-forge from 1.3.3 to 1.4.0 in /scripts
2026-03-30 23:54:05 +01:00
Nuno C. d8685e5c9c Merge pull request #2883 from nunocoracao/dependabot/npm_and_yarn/main/katex-0.16.44
📌 Bump katex from 0.16.42 to 0.16.44
2026-03-30 23:53:47 +01:00
Nuno C. 8a9fe666e4 Merge pull request #2882 from nunocoracao/dependabot/npm_and_yarn/main/iamtraction/google-translate-2.0.1
📌 Bump @iamtraction/google-translate from 1.1.2 to 2.0.1
2026-03-30 23:53:39 +01:00
Nuno C. a95f11fe56 Merge pull request #2881 from nunocoracao/dependabot/github_actions/main/actions/configure-pages-6
👷 Bump actions/configure-pages from 5 to 6
2026-03-30 23:52:49 +01:00
Nuno C. 0b5a29e251 Merge pull request #2880 from nunocoracao/dependabot/github_actions/main/actions/deploy-pages-5
👷 Bump actions/deploy-pages from 4 to 5
2026-03-30 23:52:38 +01:00
dependabot[bot] 03615baf92 📦 Update packaged KaTeX 2026-03-30 22:52:07 +00:00
dependabot[bot] 0e29ae9c52 Bump node-forge from 1.3.3 to 1.4.0 in /scripts
Bumps [node-forge](https://github.com/digitalbazaar/forge) from 1.3.3 to 1.4.0.
- [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md)
- [Commits](https://github.com/digitalbazaar/forge/compare/v1.3.3...v1.4.0)

---
updated-dependencies:
- dependency-name: node-forge
  dependency-version: 1.4.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 22:52:03 +00:00
dependabot[bot] ce0d91fcd5 📌 Bump katex from 0.16.42 to 0.16.44
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.42 to 0.16.44.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.42...v0.16.44)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.44
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 22:51:43 +00:00
dependabot[bot] a18688473e 📌 Bump @iamtraction/google-translate from 1.1.2 to 2.0.1
Bumps [@iamtraction/google-translate](https://github.com/iamtraction/google-translate) from 1.1.2 to 2.0.1.
- [Release notes](https://github.com/iamtraction/google-translate/releases)
- [Commits](https://github.com/iamtraction/google-translate/compare/v1.1.2...v2.0.1)

---
updated-dependencies:
- dependency-name: "@iamtraction/google-translate"
  dependency-version: 2.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 22:51:34 +00:00
dependabot[bot] 2d5718dd11 👷 Bump actions/configure-pages from 5 to 6
Bumps [actions/configure-pages](https://github.com/actions/configure-pages) from 5 to 6.
- [Release notes](https://github.com/actions/configure-pages/releases)
- [Commits](https://github.com/actions/configure-pages/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/configure-pages
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 22:51:24 +00:00
dependabot[bot] 8779739162 👷 Bump actions/deploy-pages from 4 to 5
Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4 to 5.
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](https://github.com/actions/deploy-pages/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/deploy-pages
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 22:51:16 +00:00
Nuno C. cdcbc40d47 Merge pull request #2836 from nunocoracao/dev
🔖 v2.101.0
2026-03-30 23:50:42 +01:00
Nuno CoraçãoandClaude Opus 4.6 eb19b988ec Update branch references from dev to main, refresh users and GitHub data
- Switch all CI, dependabot, and docs references from dev to main
- Update users list and screenshots via processUsers
- Refresh contributors and sponsors data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 23:45:20 +01:00
Nuno C. ca6fe5f967 Merge pull request #2860 from grahamuk2018/patch-2
Add new user entry for www.gsking.co.uk
2026-03-30 23:26:59 +01:00
Nuno C. 4996869378 Merge pull request #2857 from nunocoracao/dependabot/npm_and_yarn/minimatch-10.2.4
Bump minimatch from 10.2.1 to 10.2.4
2026-03-30 23:23:53 +01:00
Nuno C. b0e07a7c0d Merge pull request #2856 from nunocoracao/dependabot/npm_and_yarn/scripts/multi-3526163867
Bump fast-xml-parser and @google-cloud/storage in /scripts
2026-03-30 23:23:35 +01:00
Nuno C. 7fdb8ba1b1 Merge branch 'main' into dev 2026-03-30 23:22:07 +01:00
Nuno C. 03be92ad0f Merge pull request #2869 from urtzienriquez/basque-translation
🌐 Add Basque translation
2026-03-30 00:01:30 +01:00
Nuno C. 39adcba775 Merge pull request #2875 from wtchangdm/patch-1
remove blog.wtcx.dev from users
2026-03-29 23:59:38 +01:00
Nuno C. 70861235ba Merge pull request #2865 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.40.0
📌 Bump puppeteer from 24.39.1 to 24.40.0
2026-03-29 23:58:11 +01:00
Nuno C. 3f4636afc1 Merge pull request #2864 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss/cli-4.2.2
📌 Bump @tailwindcss/cli from 4.2.1 to 4.2.2
2026-03-29 23:57:39 +01:00
Nuno C. 26790a12e6 Merge pull request #2863 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss-4.2.2
📌 Bump tailwindcss from 4.2.1 to 4.2.2
2026-03-29 23:57:23 +01:00
Nuno C. a6dc9b52e4 Merge pull request #2862 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.42
📌 Bump katex from 0.16.38 to 0.16.42
2026-03-29 23:57:08 +01:00
jin-li a308a86365 feat: global thumbnail aspect ratio configuration
- Add thumbnailAspectRatio site parameter (default '1.5')
- Use decimal values instead of fractions for Hugo compatibility
- Sanitize user input to extract only numeric characters
- Apply to article cards, related cards, and term cards
- Update both source and compiled CSS

Closes #2839
2026-03-29 14:27:09 +02:00
Nuno C. 7691ee18ed Merge pull request #2867 from nunocoracao/hugo-new-version 2026-03-29 04:07:19 +01:00
W.T. Chang 830b36a9fa remove blog.wtcx.dev from users
remove blog.wtcx.dev from users
2026-03-29 05:52:20 +08:00
André Plöger 7ea30cb4f1 ✨ Add hreflang alternates to multilingual page head 2026-03-28 14:59:53 -03:00
Urtzi Enriquez-Urzelai 1f0b3672b5 add Basque translation 2026-03-27 15:37:44 +01:00
L0kayata 1f0a84a24b fix: Lock carousel caption area to measured max height
Measure caption heights across slides at runtime and apply a shared min-height so switching between slides with and without caption text does not cause layout jump.

Keep this behavior scoped to carousels with captions and recalculate on load and resize for responsive stability.
2026-03-27 12:27:59 +01:00
L0kayata 877a2609e9 fix: Fix carousel caption flow and scope controls to image bounds
Move carousel captions out of absolute positioning so they participate in normal height calculation and no longer overlap content below the carousel.

Constrain indicators and navigation buttons to the image region using container-based sizing, so controls do not extend into the caption area.
2026-03-27 12:27:21 +01:00
nunocoracao 18ac5b1920 Update Hugo supported version 2026-03-27 06:29:54 +00:00
Eric Gusmao 7c127074f9 fix: migrate deprecated Hugo v0.158.0 language API
Replace deprecated config keys and template methods per Hugo v0.158.0:

Config (10 files):
- languageCode → locale
- languageName → label

Templates:
- site.LanguageCode → site.Language.Locale (baseof.html, head.html, schema.html x2)
- site.Language.Lang → site.Language.Name (single.html)
- .Lang → .Language.Name (likes.html, views.html)

Ref: https://discourse.gohugo.io/t/deprecations-in-v0-158-0/56869
2026-03-25 11:15:20 -03:00
dependabot[bot] e9b51aadcd 💄 Rebuild CSS 2026-03-25 05:04:00 +00:00
dependabot[bot] c8d1b46316 📌 Bump puppeteer from 24.39.1 to 24.40.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.39.1 to 24.40.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-v24.39.1...puppeteer-v24.40.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 05:03:44 +00:00
dependabot[bot] bad5bf18ac 💄 Rebuild CSS 2026-03-25 05:03:44 +00:00
dependabot[bot] ce60eab796 📦 Update packaged KaTeX 2026-03-25 05:03:41 +00:00
dependabot[bot] 99224f248c 📌 Bump @tailwindcss/cli from 4.2.1 to 4.2.2
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.2/packages/@tailwindcss-cli)

---
updated-dependencies:
- dependency-name: "@tailwindcss/cli"
  dependency-version: 4.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 05:03:32 +00:00
dependabot[bot] d0b6ea29b4 📌 Bump tailwindcss from 4.2.1 to 4.2.2
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.2/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 05:03:23 +00:00
dependabot[bot] 34c82f38ca 📌 Bump katex from 0.16.38 to 0.16.42
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.38 to 0.16.42.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.38...v0.16.42)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.42
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 05:03:14 +00:00
grahamuk2018 342b3451b3 Add new user entry for www.gsking.co.uk
Added a new user entry for www.gsking.co.uk.
2026-03-24 15:11:32 +00:00
dependabot[bot] 58b9aee2d0 Bump minimatch from 10.2.1 to 10.2.4
Bumps [minimatch](https://github.com/isaacs/minimatch) from 10.2.1 to 10.2.4.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v10.2.1...v10.2.4)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 10.2.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-24 14:18:34 +00:00
dependabot[bot] 524a6869c3 Bump fast-xml-parser and @google-cloud/storage in /scripts
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [@google-cloud/storage](https://github.com/googleapis/nodejs-storage). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 4.5.3 to 5.5.9
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/commits)

Updates `@google-cloud/storage` from 7.18.0 to 7.19.0
- [Release notes](https://github.com/googleapis/nodejs-storage/releases)
- [Changelog](https://github.com/googleapis/nodejs-storage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/nodejs-storage/compare/v7.18.0...v7.19.0)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.5.9
  dependency-type: indirect
- dependency-name: "@google-cloud/storage"
  dependency-version: 7.19.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-24 14:18:05 +00:00
Nuno C. b0c563bc15 Merge pull request #2858 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-03-24 14:15:37 +00:00
nunocoracao cbc8cf12cd Update Hugo supported version 2026-03-24 06:26:32 +00:00
MaikelChan 503f60fe75 Documentation improvements. 2026-03-24 03:08:43 +01:00
MaikelChan 167ee1fa4c Use dictionary to pass whether to use a secondaryColor for the badge. 2026-03-24 02:27:38 +01:00
MaikelChan 859685f0c2 Added documentation. 2026-03-23 08:30:21 +01:00
MaikelChan a0fc381ba9 Properly implement layoutBackgroundBlur and layoutBackgroundHeaderSpace in term and taxonomy 2026-03-23 08:00:37 +01:00
MaikelChan ef712c33f9 Fixed layoutBackgroundBlur and layoutBackgroundHeaderSpace not affecting the term page. 2026-03-23 07:32:50 +01:00
MaikelChan e84fc0e1c6 Implemented category badges in secondary color. 2026-03-23 05:45:46 +01:00
Nick Kocharhook 79a78bcef4 [#2850] Run plainify on the title value before emojify 2026-03-22 23:08:36 +00:00
Nuno C. cc94a0e6c8 Merge pull request #2847 from nunocoracao/dependabot/npm_and_yarn/dev/mermaid-11.13.0
📌 Bump mermaid from 11.12.3 to 11.13.0
2026-03-18 22:36:46 +00:00
Nuno C. ffa18c9c4f Merge pull request #2846 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.39.1
📌 Bump puppeteer from 24.37.5 to 24.39.1
2026-03-18 22:36:33 +00:00
Nuno C. 8549e06095 Merge pull request #2845 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.38
📌 Bump katex from 0.16.33 to 0.16.38
2026-03-18 22:36:17 +00:00
Nuno C. 01d8db1e4d Merge pull request #2844 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-03-18 22:36:01 +00:00
Nuno C. e71a4109cf Merge pull request #2842 from aplgr/feat/add-paraguay4life-user
Add Paraguay4Life to users list
2026-03-18 22:35:34 +00:00
dependabot[bot] 6e70744e9a 📦 Update packaged Mermaid 2026-03-18 05:04:13 +00:00
dependabot[bot] 471ee57621 📦 Update packaged KaTeX 2026-03-18 05:03:49 +00:00
dependabot[bot] 28a04921a7 📌 Bump mermaid from 11.12.3 to 11.13.0
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.12.3 to 11.13.0.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.12.3...mermaid@11.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 05:03:44 +00:00
dependabot[bot] 5af20c6f9a 📌 Bump puppeteer from 24.37.5 to 24.39.1
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.37.5 to 24.39.1.
- [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-v24.37.5...puppeteer-v24.39.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 05:03:36 +00:00
dependabot[bot] 2aa15ce844 📌 Bump katex from 0.16.33 to 0.16.38
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.33 to 0.16.38.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.33...v0.16.38)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.38
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 05:03:21 +00:00
nunocoracao c92c0aa3ce Update Hugo supported version 2026-03-17 06:25:50 +00:00
André Plöger c9271d1df2 Remove trailing comma from new tags array 2026-03-15 21:40:02 -03:00
André Plöger c08f0a9ffa Add Paraguay4Life to users list 2026-03-15 21:01:02 -03:00
Nuno C. d7c2d69571 Merge pull request #2838 from fairchild26/patch-4
Add Robin Fairchild to users.json
2026-03-13 18:20:22 +00:00
Robin Fairchild 122d5c70aa Add Robin Fairchild to users.json 2026-03-13 16:20:10 +08:00
schneekluth 45c9acab9e docs updated for obfucated email shortcode 2026-03-12 15:48:49 +01:00
schneekluth bcdab29c30 added snippet for obfuscated email shortcode 2026-03-12 15:45:49 +01:00
schneekluth 1bec932730 Add email link shortcode to layouts
Added E-Mail Shortcode for new E-Mail obfuscation feature introduced in [v2.99.0](]https://github.com/nunocoracao/blowfish/releases/tag/v2.99.0 based on this discussion https://github.com/nunocoracao/blowfish/discussions/2828#discussioncomment-16096521)
2026-03-12 13:59:20 +01:00
Nuno Coração 217a143e6b 🔖 v2.101.0 2026-03-11 14:27:14 +00:00
Nuno C. faea1bb046 Merge pull request #2829 from nunocoracao/dev
🔖 v2.100.0
2026-03-11 14:23:51 +00:00
Nuno C. 26b89169e3 Merge pull request #2830 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.39.0
📌 Bump puppeteer from 24.37.5 to 24.39.0
2026-03-11 14:19:50 +00:00
Nuno C. 878ba448aa Merge pull request #2831 from nunocoracao/dependabot/npm_and_yarn/dev/mermaid-11.13.0
📌 Bump mermaid from 11.12.3 to 11.13.0
2026-03-11 14:19:32 +00:00
Nuno C. 87fe076689 Merge pull request #2832 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.38
📌 Bump katex from 0.16.33 to 0.16.38
2026-03-11 14:19:14 +00:00
Nuno C. 0b14915f54 Merge pull request #2834 from nunocoracao/revert-2814-logo-alt
Revert "✨ Feat: logo alt and remove logo JS"
2026-03-11 14:18:49 +00:00
Nuno C. d8416ee104 Revert "✨ Feat: logo alt and remove logo JS" 2026-03-11 14:16:49 +00:00
dependabot[bot] 4c7ef61265 📦 Update packaged KaTeX 2026-03-11 05:04:21 +00:00
dependabot[bot] b1d22fb30a 📦 Update packaged Mermaid 2026-03-11 05:04:16 +00:00
dependabot[bot] a839c82416 📌 Bump katex from 0.16.33 to 0.16.38
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.33 to 0.16.38.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.33...v0.16.38)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.38
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 05:03:55 +00:00
dependabot[bot] 4b5ff6ab59 📌 Bump mermaid from 11.12.3 to 11.13.0
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.12.3 to 11.13.0.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.12.3...mermaid@11.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 05:03:49 +00:00
dependabot[bot] e9350de407 📌 Bump puppeteer from 24.37.5 to 24.39.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.37.5 to 24.39.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-v24.37.5...puppeteer-v24.39.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 05:03:35 +00:00
Nuno Coração a7731a15be 🔖 v2.100.0 2026-03-11 01:11:17 +00:00
Nuno C. c0fadfb0b7 Merge pull request #2783 from nunocoracao/dev
🔖 v2.99.0
2026-03-11 01:07:54 +00:00
Nuno Coração 7af7ed9720 polish and finish 2026-03-11 01:07:34 +00:00
Nuno C. ab6c812198 Merge pull request #2788 from danielwagn3r/llmstxt
Add support for llms.txt
2026-03-11 00:53:07 +00:00
Nuno C. 20c6de4eb8 Merge pull request #2815 from ZhenShuo2021/email
✨ Feat: Email obfuscation
2026-03-11 00:49:20 +00:00
Nuno C. 3a912caf92 Merge pull request #2814 from ZhenShuo2021/logo-alt
✨ Feat: logo alt and remove logo JS
2026-03-11 00:49:03 +00:00
Nuno C. d049a3f020 Merge pull request #2790 from manio/main
✨ Feat: Add printables icon and profile support
2026-03-11 00:28:41 +00:00
Nuno C. 0036fb8c02 Merge pull request #2792 from alxhslm/fix-accordian-chevron
Fix: make accordian chevron behaviour match admonition
2026-03-11 00:27:33 +00:00
Nuno C. e6c8e05040 Merge pull request #2795 from alxhslm/tab-nested
fix: Tab shortcode supports nested shortcodes
2026-03-11 00:27:03 +00:00
Nuno C. 22a9b643de Merge pull request #2803 from danielwagn3r/umami-dnt
Umami Do Not Track browser setting configuration
2026-03-11 00:24:16 +00:00
Nuno C. 2d5bf43ea3 Merge pull request #2813 from ZhenShuo2021/gist
✨ Feat: add CSS for gist shortcode
2026-03-11 00:23:11 +00:00
Nuno C. 8a1669e1f4 Merge pull request #2816 from richtefee/feature/accordion-align
Add optional align parameter to accordion items shortcode.
2026-03-11 00:21:13 +00:00
Nuno C. a132c61d0c Merge pull request #2822 from bilyes/use-official-mastodon-share-link
Use Mastodon's official sharing link.
2026-03-11 00:18:30 +00:00
Nuno C. 3dea18a9cb Merge pull request #2825 from bitfoo1/fix/repo-cards-null-color-css
fix: skip null colors in repoColors when generating repo-cards CSS
2026-03-11 00:17:42 +00:00
Nuno C. 4cc9899469 Merge pull request #2826 from luizcarloscf/luizcarloscf-update-users
Add new user
2026-03-11 00:09:28 +00:00
Nuno C. e4fdf17032 Merge branch 'dev' into luizcarloscf-update-users 2026-03-11 00:09:21 +00:00
Nuno C. 4fddd9d1eb Merge pull request #2823 from cintiaching/patch-1
Add new user entries to users.json
2026-03-11 00:08:48 +00:00
Nuno C. ae27bba4e9 Merge branch 'dev' into patch-1 2026-03-11 00:08:39 +00:00
Nuno C. 71fc6ee8b8 Merge pull request #2821 from nunocoracao/dependabot/github_actions/dev/actions/upload-artifact-7
👷 Bump actions/upload-artifact from 6 to 7
2026-03-11 00:07:39 +00:00
Nuno C. 15c580ab86 Merge pull request #2820 from Kiwipapa/add-airika-user
Add airika user
2026-03-11 00:07:28 +00:00
Nuno C. 1d7579f3b0 Merge pull request #2818 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-03-11 00:05:08 +00:00
Luiz Carlos Cosmi Filho 3bc2b4b82e Add new user entry to users.json 2026-03-08 15:51:27 -03:00
Daniel von Eßen 9e0ad31ec8 fix: skip null colors in repoColors when generating repo-cards CSS
Languages with null entries in repoColors.json caused Go's fmt.Sprintf
to emit '%!s(<nil>)' as the color value, producing invalid CSS and
browser parse errors. Add a nil guard to skip those entries, letting
them fall back to the default dot color.

Fixes #2824
2026-03-06 16:27:23 +01:00
Cintia Ching 1b6df4c166 Add new user entries to users.json 2026-03-05 13:19:17 +08:00
Ilyess Bachiri 34610228ad Use Mastodon's official sharing link. 2026-03-04 19:09:18 -05:00
dependabot[bot] 4705b55e09 👷 Bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 05:03:07 +00:00
root 7fed4fa2d1 ✨ Add Airika to users list 2026-03-01 18:35:32 +08:00
nunocoracao 6f99fefab3 Update Hugo supported version 2026-02-26 06:24:15 +00:00
ZhenShuo Leo c74017c987 fix: auto detect mailto prefix 2026-02-26 13:35:29 +08:00
felix 641c16a150 Add optional align parameter to accordion items shoortcode. Updated docs. 2026-02-25 20:36:19 +03:00
ZhenShuo Leo be7f6b6f8f fix: author icon padding 2026-02-25 23:13:17 +08:00
ZhenShuo Leo 55f2f22849 feat: email obfuscation (#2711) 2026-02-25 23:13:16 +08:00
ZhenShuo Leo 812effc613 feat: gist css 2026-02-25 22:44:09 +08:00
ZhenShuo Leo 02a7397119 refactor: use css for logo switcher 2026-02-25 22:41:25 +08:00
ZhenShuo Leo e35bcc0f24 chore: logo alt text 2026-02-25 22:41:25 +08:00
Nuno C. f18c6a0564 Merge pull request #2812 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss/cli-4.2.1
📌 Bump @tailwindcss/cli from 4.1.18 to 4.2.1
2026-02-25 14:14:09 +00:00
Nuno C. e1e59f0009 Merge pull request #2810 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.33
📌 Bump katex from 0.16.28 to 0.16.33
2026-02-25 14:13:46 +00:00
Nuno C. 6e96c55f0a Merge pull request #2809 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.37.5
📌 Bump puppeteer from 24.37.2 to 24.37.5
2026-02-25 14:13:31 +00:00
Nuno C. de0645aa3d Merge pull request #2797 from nunocoracao/dependabot/npm_and_yarn/dev/mermaid-11.12.3
📌 Bump mermaid from 10.9.5 to 11.12.3
2026-02-25 14:13:11 +00:00
Nuno C. 7e1ecd5480 Merge pull request #2807 from zarvelionzynji/add-user
update users.json
2026-02-25 14:11:15 +00:00
Nuno C. 1771c92213 Merge branch 'dev' into add-user 2026-02-25 14:11:00 +00:00
dependabot[bot] 350d669406 💄 Rebuild CSS 2026-02-25 05:04:26 +00:00
dependabot[bot] c747c623eb 📦 Update packaged KaTeX 2026-02-25 05:04:04 +00:00
dependabot[bot] fef811f3a1 📌 Bump @tailwindcss/cli from 4.1.18 to 4.2.1
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.1.18 to 4.2.1.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/@tailwindcss-cli)

---
updated-dependencies:
- dependency-name: "@tailwindcss/cli"
  dependency-version: 4.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 05:03:58 +00:00
dependabot[bot] 4b7677ea89 📌 Bump katex from 0.16.28 to 0.16.33
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.28 to 0.16.33.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.28...v0.16.33)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.33
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 05:03:35 +00:00
dependabot[bot] 03b2f4502a 📌 Bump puppeteer from 24.37.2 to 24.37.5
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.37.2 to 24.37.5.
- [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-v24.37.2...puppeteer-v24.37.5)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 24.37.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 05:03:30 +00:00
Zarvelion Zynji 5fb61dee19 update users.json 2026-02-24 22:17:30 +07:00
dependabot[bot] 15bf0ea12a 💄 Rebuild CSS 2026-02-23 11:55:12 +00:00
dependabot[bot] 6cbe52620f 📦 Update packaged Mermaid 2026-02-23 11:55:10 +00:00
dependabot[bot] 81da343120 📌 Bump mermaid from 10.9.5 to 11.12.3
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 10.9.5 to 11.12.3.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/v10.9.5...mermaid@11.12.3)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.12.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 11:54:47 +00:00
Nuno C. 8de5e47efd Merge pull request #2798 from nunocoracao/dependabot/npm_and_yarn/dev/rimraf-6.1.3
📌 Bump rimraf from 6.1.2 to 6.1.3
2026-02-23 11:53:59 +00:00
Nuno C. 91098a0135 Merge pull request #2800 from nunocoracao/dependabot/npm_and_yarn/dev/iamtraction/google-translate-2.0.1
📌 Bump @iamtraction/google-translate from 1.1.2 to 2.0.1
2026-02-23 11:53:20 +00:00
Daniel Wagner 9ffb78e7df Updated Umami documentation 2026-02-20 15:36:51 +01:00
Daniel Wagner e1c13d658d Add data-do-not-track attribute to Umami script 2026-02-19 21:55:06 +01:00
Nuno C. 7059f91d57 Merge pull request #2801 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-02-19 15:11:34 +00:00
nunocoracao 6076126e4c Update Hugo supported version 2026-02-19 06:25:14 +00:00
dependabot[bot] ebfe68673f 💄 Rebuild CSS 2026-02-18 05:04:26 +00:00
dependabot[bot] 774e2e05c1 💄 Rebuild CSS 2026-02-18 05:04:07 +00:00
dependabot[bot] 9d7798faa4 📌 Bump @iamtraction/google-translate from 1.1.2 to 2.0.1
Bumps [@iamtraction/google-translate](https://github.com/iamtraction/google-translate) from 1.1.2 to 2.0.1.
- [Release notes](https://github.com/iamtraction/google-translate/releases)
- [Commits](https://github.com/iamtraction/google-translate/compare/v1.1.2...v2.0.1)

---
updated-dependencies:
- dependency-name: "@iamtraction/google-translate"
  dependency-version: 2.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-18 05:03:58 +00:00
dependabot[bot] 8a2f58be77 📌 Bump rimraf from 6.1.2 to 6.1.3
Bumps [rimraf](https://github.com/isaacs/rimraf) from 6.1.2 to 6.1.3.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v6.1.2...v6.1.3)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-version: 6.1.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-18 05:03:40 +00:00
Nuno C. b2ef80da49 Merge pull request #2794 from alst-ovh/patch-2
Add new user
2026-02-17 16:35:16 +00:00
Nuno C. 43c32d207b Merge branch 'dev' into patch-2 2026-02-17 16:34:26 +00:00
Nuno C. 47e08a5633 Merge pull request #2793 from schneekluth/patch-1
Add new user
2026-02-17 16:33:04 +00:00
Alex Haslam 857dc8de99 Update docs 2026-02-16 09:28:10 +00:00
Alex Haslam 19a4e5f5af Add md flag 2026-02-16 09:27:51 +00:00
alst-ovh bebff03d62 Add new user 2026-02-16 09:25:26 +01:00
schneekluth af75177900 Add new user
added my personal website
2026-02-16 00:59:23 +01:00
Alex Haslam b61ca7359f Make chevron rotate 2026-02-15 21:55:53 +00:00
Mariusz Bialonczyk 1b4de022c2 ✨ Feat: Add printables icon and profile support 2026-02-14 08:30:00 +01:00
Daniel Wagner e30ea0a5c9 Add support for llms.txt
The llms.txt file is an industry standard that helps LLMs index content more efficiently, see https://llmstxt.org/

/config/_default/hugo.toml =>
```toml
[outputFormats]
  [outputFormats.llms]
    mediaType = "text/plain"
    baseName = "llms"
    isPlainText = true
    notAlternative = true

[outputs]
  home = ["HTML", "RSS", "JSON", "llms"]
```

From https://github.com/adityatelange/hugo-PaperMod/commit/3bb0ca281fd17eff8e3489011a444f326d7c4c72
2026-02-13 15:57:12 +01:00
Nuno Coração 43da14b0b3 🔖 v2.99.0 2026-02-11 22:47:36 +00:00
Nuno C. d0a1a5b249 Merge pull request #2731 from nunocoracao/dev
🔖 v2.98.0
2026-02-11 22:29:46 +00:00
Nuno Coração 7742b4e239 bumped hugo version in netflix build 2026-02-11 22:27:07 +00:00
Nuno Coração faab08cec5 dependecies fix 2026-02-11 22:25:02 +00:00
Nuno Coração d38accc6ff release polish 2026-02-11 22:15:07 +00:00
Nuno C. 58799b9847 Merge pull request #2779 from suidpit/typeit-random-lines
Feat: typeit support for random shuffle with multiple lines
2026-02-11 21:53:06 +00:00
Nuno C. ad697ff032 Merge pull request #2776 from ZhenShuo2021/docs-icon
📝 Docs: add icon-ref shortcode
2026-02-11 21:52:00 +00:00
Nuno C. e753c191c3 Merge pull request #2775 from ZhenShuo2021/firebase
✨ Feat: improve Firebase
2026-02-11 21:51:05 +00:00
Nuno C. c53c0ce6d6 Merge pull request #2774 from abdalrahmanshaban0/dev
fix(a11y): add alt text to author profile image
2026-02-11 21:49:53 +00:00
Nuno C. 8bdb64c6d7 Merge pull request #2773 from alxhslm/carousel-captions
feat: Add captions argument to carousel shortcode
2026-02-11 21:49:26 +00:00
Nuno C. 8ac2ee05b8 Merge pull request #2772 from fairchild2026/patch-3
Translate shortcode documentation to Chinese
2026-02-11 21:48:14 +00:00
Nuno C. 326e3536e9 Merge pull request #2771 from alxhslm/gallery-captions
Feat: Allow images inside gallery to have captions
2026-02-11 21:47:24 +00:00
Nuno C. 0cc0b57139 Merge pull request #2770 from alxhslm/accordion-icon
Feat: add icon param to accordian
2026-02-11 21:46:36 +00:00
Nuno C. 3b46fb243b Merge pull request #2768 from fairchild2026/patch-1
Update index.zh-cn.md
2026-02-11 21:45:43 +00:00
Nuno C. 8cd533569e Merge pull request #2778 from AtmosphericIgnition/main
Add personal site
2026-02-11 21:31:58 +00:00
Nuno C. 889c87bf14 Merge branch 'dev' into main 2026-02-11 21:31:45 +00:00
Nuno C. 68cf60bd1d Merge pull request #2754 from EricGusmao/remove-jquery
Remove jQuery dependency and update theme version to 2.97.0
2026-02-11 21:28:13 +00:00
Nuno C. 92c7b3ecdf Merge branch 'dev' into remove-jquery 2026-02-11 21:27:54 +00:00
Nuno C. f017af8d84 Merge pull request #2780 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.37.2 2026-02-11 20:39:36 +00:00
Nuno C. d4c8c941e4 Merge pull request #2769 from nunocoracao/dependabot/npm_and_yarn/dev/commander-14.0.3 2026-02-11 20:39:19 +00:00
Nuno C. 72ca84791a Merge pull request #2767 from nunocoracao/hugo-new-version 2026-02-11 20:38:57 +00:00
dependabot[bot] 94ff143975 📌 Bump puppeteer from 24.36.1 to 24.37.2
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.36.1 to 24.37.2.
- [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-v24.36.1...puppeteer-v24.37.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 05:03:29 +00:00
suidpit 38a04ae80b typeit multiple lines shuffled in random order 2026-02-10 12:30:17 +01:00
ZhenShuo Leo 99d329c7b0 feat: reduce firebase blocking time
- use esm format
- defer loading with type="module"
- upgrade from v8.10.0 to v9.23.0
- allow homepage/taxonomy/term log
2026-02-10 06:52:05 +08:00
AtmosphericIgnition 1408e8bb53 Add personal site 2026-02-09 16:11:33 -05:00
nunocoracao 617c6f0c15 Update Hugo supported version 2026-02-09 06:28:14 +00:00
Alex Haslam 896bc473a8 Update docs 2026-02-08 15:50:11 +00:00
Alex Haslam 712cb48fb2 Allow markdown captions 2026-02-08 15:43:16 +00:00
Alex Haslam 73580313b4 Make caption visible again 2026-02-08 14:55:48 +00:00
Alex Haslam b509f51f9b Fix horizontal scrolling issue 2026-02-08 14:02:07 +00:00
ZhenShuo Leo bbe38534d5 docs: add icon-ref shortcode 2026-02-07 23:20:39 +08:00
ZhenShuo Leo 0e9a151ce5 refactor: gather firebase templates 2026-02-07 21:48:53 +08:00
abdalrahmanshaban0 54e7ebc4d9 fix(a11y): add alt text to author profile image 2026-02-06 22:14:25 +02:00
Alex Haslam 76a23c05af Reduce the diff 2026-02-06 13:09:58 +00:00
Alex Haslam 3dd3d0fae8 Make captions move 2026-02-06 13:06:58 +00:00
Alex Haslam 166a326dc7 Add captions argument to carousel 2026-02-06 12:56:14 +00:00
Robin Fairchild 5ee9c27876 Translate shortcode documentation to Chinese 2026-02-05 20:27:52 +08:00
Alex Haslam 76edd20456 Allow figure to be used inside a gallery 2026-02-04 18:00:52 +00:00
Alex Haslam eb09b4ec25 Add tab parameter 2026-02-04 17:41:55 +00:00
dependabot[bot] 8e1f46b102 📌 Bump commander from 14.0.2 to 14.0.3
Bumps [commander](https://github.com/tj/commander.js) from 14.0.2 to 14.0.3.
- [Release notes](https://github.com/tj/commander.js/releases)
- [Changelog](https://github.com/tj/commander.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tj/commander.js/compare/v14.0.2...v14.0.3)

---
updated-dependencies:
- dependency-name: commander
  dependency-version: 14.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 05:04:39 +00:00
Robin Fairchild 33d013309d Update index.zh-cn.md 2026-02-04 00:39:05 +08:00
Nuno C. 506740b1cf Merge pull request #2764 from alxhslm/accordian
✨ Feat: Add accordian shortcode
2026-02-03 00:04:54 +00:00
Nuno C. 7b04a6407a Merge pull request #2762 from rewse/add-rewse-blog
Add Tats Shibata's blog to users.json
2026-02-03 00:02:42 +00:00
Nuno C. 788493921e Merge branch 'dev' into add-rewse-blog 2026-02-03 00:01:57 +00:00
Nuno C. 25961a04d9 Merge pull request #2755 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.36.1
📌 Bump puppeteer from 24.35.0 to 24.36.1
2026-02-02 23:54:51 +00:00
Nuno C. 651804603a Merge pull request #2756 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.28
📌 Bump katex from 0.16.27 to 0.16.28
2026-02-02 23:54:41 +00:00
Nuno C. c107bc0c50 Merge pull request #2757 from nunocoracao/dependabot/npm_and_yarn/dev/prettier-3.8.1
📌 Bump prettier from 3.8.0 to 3.8.1
2026-02-02 23:54:30 +00:00
Nuno C. 3960982afa Merge pull request #2758 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-02-02 23:54:03 +00:00
Nuno C. ab668ca55d Merge pull request #2752 from baozidai/main
Update sitemap.xml
2026-02-02 23:53:00 +00:00
Nuno C. e63154d379 Merge pull request #2751 from tyloch/patch-2
Add user Artur Tyloch with personal site details
2026-02-02 23:50:22 +00:00
Alex Haslam 7dec363f54 Tidy up examples in docs 2026-01-31 20:31:46 +00:00
Alex Haslam 827fab1ef9 Add space between items 2026-01-31 20:26:10 +00:00
Alex Haslam 63da02addc Add md flag 2026-01-31 20:25:24 +00:00
Alex Haslam 277f7a94cb Add markdown and short-codes to the example 2026-01-31 20:18:41 +00:00
Alex Haslam 750766a445 Add separated flag 2026-01-31 20:18:41 +00:00
Alex Haslam a975c43516 Add example with collapse mode 2026-01-31 20:18:41 +00:00
Alex Haslam 7a9baa1c50 Update to use existing compiled classes 2026-01-31 20:18:41 +00:00
Alex Haslam 82a593e0ed Add to docs 2026-01-31 20:18:39 +00:00
Alex Haslam b096d35b85 Implement accordion shortcode 2026-01-31 20:18:25 +00:00
nunocoracao 2da29e25d5 Update Hugo supported version 2026-01-31 06:12:24 +00:00
Shibata, Tats 96ef081d17 feat: add Tats Shibata's blog to users list 2026-01-29 23:37:23 +09:00
dependabot[bot] fbf833bce5 📌 Bump prettier from 3.8.0 to 3.8.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.8.0...3.8.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 05:03:54 +00:00
dependabot[bot] 18ed97928f 📌 Bump katex from 0.16.27 to 0.16.28
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.27 to 0.16.28.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.27...v0.16.28)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.28
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 05:03:48 +00:00
dependabot[bot] b7eeb165d1 📌 Bump puppeteer from 24.35.0 to 24.36.1
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.35.0 to 24.36.1.
- [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-v24.35.0...puppeteer-v24.36.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 05:03:43 +00:00
Eric Gusmao 39209dbab3 Remove jQuery dependency and update theme version to 2.97.0 2026-01-26 20:36:32 -03:00
baozidai 31019347aa Update sitemap.xml
Ensure pages with .Sitemap.Disable=true are excluded from sitemap
2026-01-25 16:19:49 +08:00
Artur Tyloch faca690a95 Add user Artur Tyloch with personal site details 2026-01-24 11:47:30 +01:00
Nuno C. be564f4ae1 Merge pull request #2745 from nunocoracao/dependabot/npm_and_yarn/dev/prettier-3.8.0
📌 Bump prettier from 3.7.4 to 3.8.0
2026-01-22 17:00:00 +00:00
Nuno C. 77ac889406 Merge pull request #2744 from nunocoracao/dependabot/npm_and_yarn/dev/jquery-4.0.0
📌 Bump jquery from 3.7.1 to 4.0.0
2026-01-22 16:58:43 +00:00
dependabot[bot] 8c9e51e310 📌 Bump prettier from 3.7.4 to 3.8.0
Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to 3.8.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 05:04:02 +00:00
dependabot[bot] 269f09b8a6 📌 Bump jquery from 3.7.1 to 4.0.0
Bumps [jquery](https://github.com/jquery/jquery) from 3.7.1 to 4.0.0.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Changelog](https://github.com/jquery/jquery/blob/main/changelog.md)
- [Commits](https://github.com/jquery/jquery/compare/3.7.1...4.0.0)

---
updated-dependencies:
- dependency-name: jquery
  dependency-version: 4.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 05:03:54 +00:00
Nuno C. 3a9016a6d9 Update FUNDING.yml with additional funding options
Added support for various funding platforms and updated Buy Me a Coffee username.
2026-01-21 00:15:21 +00:00
Nuno C. a402822d8b Merge pull request #2738 from schaerfo/fix/hero-content-dark-mode
🐛 fix: respect value of disableHeroImageFilter for content
2026-01-17 16:36:28 +00:00
Nuno C. 6da1c6b870 Merge pull request #2735 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.35.0
📌 Bump puppeteer from 24.34.0 to 24.35.0
2026-01-17 16:35:46 +00:00
Christian Schärf ed75c36449 🐛 fix: respect value of disableHeroImageFilter for content 2026-01-15 22:49:34 +01:00
dependabot[bot] 2172b94fe6 💄 Rebuild CSS 2026-01-14 05:04:29 +00:00
dependabot[bot] 69775ac779 📌 Bump puppeteer from 24.34.0 to 24.35.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.34.0 to 24.35.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-v24.34.0...puppeteer-v24.35.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-14 05:03:59 +00:00
Nuno C. 37b5015278 Merge pull request #2732 from GOODJINC/main
Update users.json
2026-01-13 16:02:42 +00:00
GOODJINC ce657d3351 Update users.json 2026-01-13 13:32:15 +09:00
Nuno Coração 9d5806220e 🔖 v2.98.0 2026-01-12 18:10:55 +00:00
Nuno C. 9f2045746e Merge pull request #2700 from nunocoracao/dev
🔖 v2.97.0
2026-01-12 18:07:25 +00:00
Nuno Coração 071ab0de6c udpated users 2026-01-12 18:06:16 +00:00
Nuno C. d9ea382e81 Merge pull request #2704 from RxChi1d/fix/admonition-title-casing
fix(admonition): preserve custom title casing and integrate upstream improvements
2026-01-12 17:45:21 +00:00
Nuno C. 599ebb8610 Merge pull request #2717 from pwhittlesea/optional-new-tab-on-external-links
✨ Feat: Add option for external link in new tab
2026-01-12 17:44:47 +00:00
Nuno Coração 2540c8102f Merge branch 'dev' of https://github.com/nunocoracao/blowfish into dev 2026-01-12 17:42:22 +00:00
Nuno Coração b8fa87eca2 added views and updated docs 2026-01-12 17:42:10 +00:00
Nuno C. 9c8e3a1e2e Merge pull request #2729 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-01-12 17:40:14 +00:00
nunocoracao 7be81551d4 Update Hugo supported version 2026-01-12 06:09:41 +00:00
Nuno C. f08149b7db Merge pull request #2716 from ZhenShuo2021/stale
🔧 Chore: allow keeping issues
2026-01-12 00:54:44 +00:00
Nuno C. e5fc548eb5 Merge pull request #2714 from ZhenShuo2021/feat/compact
💄 Style(article-link): truncate long summary
2026-01-12 00:53:58 +00:00
Nuno C. 7a23e560c3 Merge pull request #2715 from ZhenShuo2021/stylee
💄 Style: multiple appearance improvements
2026-01-12 00:53:25 +00:00
Nuno C. 7090513545 Merge pull request #2713 from ZhenShuo2021/feat/tabs
✨ Feat(tabs): add icon, group, and default options
2026-01-12 00:52:30 +00:00
Nuno C. 4277590661 Merge pull request #2723 from davidwritesxyz/patch-1
Update users.json
2026-01-12 00:51:09 +00:00
Nuno C. d3109b4cc9 Merge pull request #2726 from nunocoracao/hugo-new-version 2026-01-11 16:54:00 +00:00
nunocoracao 9fd883fab5 Update Hugo supported version 2026-01-11 06:07:46 +00:00
Nuno C. e5d370cb2d Merge pull request #2702 from reyneese/patch-1 2026-01-10 02:03:42 +00:00
Nuno C. 228eaa164d Merge pull request #2705 from nunocoracao/hugo-new-version 2026-01-10 02:02:54 +00:00
David Thomas e27e55856e Update users.json
Request to add Blowfish site
2026-01-07 12:09:16 -07:00
ZhenShuo Leo 1d275134ad style(list): see details
- Align list TOC wrapper with single TOC wrapper
- Adjust margin
2026-01-08 00:40:24 +08:00
ZhenShuo Leo 10083786cb style(card-link): add line clamp and BEM classes
Add BEM class names for easier CSS targeting
2026-01-07 16:06:56 +08:00
nunocoracao 8121c3f032 Update Hugo supported version 2026-01-07 06:08:15 +00:00
Phillip Whittlesea-Clark 9c861e7c62 ✨ Feat: Add option for external link in new tab 2026-01-05 17:26:03 +00:00
rxchi1d 17906e63e2 refactor(admonition): simplify title handling logic
Replace complex title processing (9 lines) with single-line title filter approach.

Changes:
- Simplify $admonitionTitle definition from 5 variables to 1 line
- Remove $titleClass conditional logic (4 lines)
- Replace dynamic CSS class with static "grow" class
- Use Hugo title filter instead of CSS capitalize
- Remove TrimSpace processing per author feedback

This maintains the same visual behavior while significantly reducing code complexity.

Related: PR #2704 feedback from ZhenShuo2021
2026-01-04 23:25:28 +08:00
ZhenShuo Leo 2c7d234312 chore: allow keeping issues 2026-01-04 21:18:55 +08:00
ZhenShuo Leo 493bb3eb5c feat(tabs): update docs 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 6fe75d5277 feat(tabs): wrap items 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 601bb87559 feat(tabs): support default tab 2026-01-04 19:29:38 +08:00
ZhenShuo Leo dbb7d3f7f2 feat(tabs): support group 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 2cac2bfe4a feat(tabs): support icon 2026-01-04 19:29:38 +08:00
ZhenShuo Leo 8c8a914fa9 style(admonition): tweak the dark bg
warning and caution are slightly different from the others to make them more distinguishable
2026-01-04 19:26:32 +08:00
ZhenShuo Leo c3e7d1b8b1 style(alert): add shadow to alert shortcode 2026-01-04 19:25:56 +08:00
ZhenShuo Leo 4a16b20d3f style(header): tweak fixed-fill-blur 2026-01-04 19:25:56 +08:00
ZhenShuo Leo 0083e927c1 style(doc): remove opacity from homepage contributors
images look gray
2026-01-04 01:28:53 +08:00
ZhenShuo Leo ec69178703 style(doc): tweak the icon color on the homepage 2026-01-04 01:28:41 +08:00
ZhenShuo Leo 14a2ea0c80 style(doc): build css for the new homepage 2026-01-04 01:28:35 +08:00
rxchi1d 966828efff fix(i18n): add admonition titles for en 2026-01-03 11:19:17 +08:00
rxchi1d fc9e6efb80 fix(render-blockquote): preserve custom title casing 2026-01-03 11:19:17 +08:00
reyneese 590d4c1479 Feat: add User Reyneese
a wow fiction storytelling blog powered by Blowfish
2026-01-03 06:05:06 +08:00
Nuno Coração b7dc7bc8a2 🔖 v2.97.0 2026-01-02 16:59:50 +00:00
Nuno C. f9eb1d4e81 Merge pull request #2696 from nunocoracao/dev
🔖 v2.96.0
2026-01-02 16:59:10 +00:00
Nuno C. 57591446ea Merge pull request #2699 from nunocoracao/sponsors-callout
update and add sponsors and contributors
2026-01-02 16:58:16 +00:00
Nuno Coração d79d17e807 update and add sponsors and contributors 2026-01-02 16:57:37 +00:00
Nuno C. bb4eeeeeee Merge pull request #2698 from ZhenShuo2021/fix/menu
🐛 Fix(mobile-menu): body not scrollable
2026-01-02 16:21:17 +00:00
Nuno C. 4ce7a3521a Merge pull request #2697 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-01-02 16:20:58 +00:00
ZhenShuo Leo 287e397b82 fix(mobile-menu): body not scrollable 2026-01-02 20:09:50 +08:00
nunocoracao a377e1b072 Update Hugo supported version 2026-01-02 06:08:12 +00:00
Nuno Coração 8281d9d990 🔖 v2.96.0 2026-01-02 00:00:16 +00:00
Nuno C. ec8a1b3d73 Merge pull request #2670 from nunocoracao/dev
🔖 v2.95.0
2026-01-01 23:58:32 +00:00
Nuno Coração e8d22f1f1b release polish 2026-01-01 23:56:30 +00:00
Nuno C. 949e367a01 Merge pull request #2684 from RxChi1d/feat/add-video-shortcode
feat(shortcodes): add video shortcode
2026-01-01 23:26:38 +00:00
Nuno C. c7f6955e80 Merge pull request #2682 from ZhenShuo2021/fix/tailwind
🔧 Chore: correct Tailwind
2026-01-01 23:25:23 +00:00
Nuno C. 1aba089483 Merge pull request #2683 from ZhenShuo2021/fix/header
✨ Feat: improve the appearance of the header
2026-01-01 23:24:20 +00:00
Nuno C. 314877d325 Merge pull request #2691 from ZhenShuo2021/feat/admonition
✨ Feat(admonition): support custom icon
2026-01-01 23:22:47 +00:00
Nuno C. 45b6a073e0 Merge pull request #2692 from ZhenShuo2021/fix/bold
🐛 Fix: make bold text inherit parent color
2026-01-01 23:19:53 +00:00
Nuno C. 9d819bc405 Merge pull request #2694 from ZhenShuo2021/fix/rss
🐛 Fix(rss): lastBuildDate and description
2026-01-01 23:19:30 +00:00
Nuno C. ec05d2c753 Merge pull request #2676 from RxChi1d/docs/hugo-min-version
docs: align Hugo minimum version
2026-01-01 23:18:20 +00:00
Nuno C. 865cca8eaa Merge pull request #2678 from noorkhafidzin/blowfish-user
Update users.json
2026-01-01 23:17:40 +00:00
Nuno C. 6cd3b88a8a Merge pull request #2672 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss-4.1.18
📌 bump tailwindcss from 4.1.17 to 4.1.18
2026-01-01 23:16:54 +00:00
Nuno C. f408467bf5 Merge pull request #2673 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss/cli-4.1.18
📌 bump @tailwindcss/cli from 4.1.17 to 4.1.18
2026-01-01 23:16:42 +00:00
dependabot[bot] db2f6b15e8 📌 bump tailwindcss from 4.1.17 to 4.1.18
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.17 to 4.1.18.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.18/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.1.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-01 23:12:19 +00:00
Nuno C. 493c998742 Merge pull request #2674 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.34.0
📌 bump puppeteer from 24.32.1 to 24.34.0
2026-01-01 23:11:00 +00:00
Nuno C. a6f38c0e6f Merge pull request #2675 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss/forms-0.5.11
📌 bump @tailwindcss/forms from 0.5.10 to 0.5.11
2026-01-01 23:06:58 +00:00
Nuno C. d3fd01c37d Merge pull request #2681 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2026-01-01 23:00:51 +00:00
nunocoracao b260175ebf Update Hugo supported version 2026-01-01 06:08:06 +00:00
ZhenShuo Leo 11845d4a7c fix(rss): lastBuildDate and description
align usage with Hugo

https://github.com/gohugoio/hugo/blob/v0.153.4/tpl/tplimpl/embedded/templates/rss.xml
2025-12-31 20:19:52 +08:00
ZhenShuo Leo 85a781a998 fix: make bold text inherit parent color
For example, given the following HTML:

<p class="text-primary-500"><strong>Hello</strong> world</p>

The rendered result shows `Hello` in the neutral color, while `world` is rendered in the primary color.

This change applies `color: inherit` to bold text so that both uses the primary color.
2025-12-31 17:42:29 +08:00
ZhenShuo Leo 3c534548df feat(admonition): allow full customization 2025-12-31 15:41:13 +08:00
ZhenShuo Leo bf0713c0cf feat(admonition): support arbitrary icon 2025-12-31 15:34:24 +08:00
rxchi1d ef9486f794 feat(shortcodes): add video shortcode 2025-12-27 18:42:04 +08:00
ZhenShuo Leo c78b3a1e6a fix: menu unreadable (#1790) 2025-12-27 17:33:20 +08:00
ZhenShuo Leo 230ee3ab16 feat: improve fixed-fill-blur
The original appearance is identical to `fixed-fill`
2025-12-27 17:32:04 +08:00
ZhenShuo Leo 8ab8807398 feat: better mobile menu 2025-12-27 17:32:00 +08:00
ZhenShuo Leo 522bdbe29e fix: menu vertical overflow 2025-12-27 17:31:53 +08:00
ZhenShuo Leo b0c5cd70da fix: correct CSS build
Fix because Tailwind scans the entire project

https://tailwindcss.com/docs/detecting-classes-in-source-files#which-files-are-scanned
2025-12-27 14:16:08 +08:00
Noor Khafidzin 8cd0aed78a Update users.json 2025-12-26 20:44:22 +07:00
rxchi1d 6f6323ff55 chore(docs): align Hugo minimum version 2025-12-24 14:27:21 +08:00
dependabot[bot] 446cf9541c 💄 Rebuild CSS 2025-12-24 05:02:32 +00:00
dependabot[bot] 6804d068cc 💄 Rebuild CSS 2025-12-24 05:02:09 +00:00
dependabot[bot] 7edef0ff7f 📌 bump @tailwindcss/forms from 0.5.10 to 0.5.11
Bumps [@tailwindcss/forms](https://github.com/tailwindlabs/tailwindcss-forms) from 0.5.10 to 0.5.11.
- [Release notes](https://github.com/tailwindlabs/tailwindcss-forms/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss-forms/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss-forms/compare/v0.5.10...v0.5.11)

---
updated-dependencies:
- dependency-name: "@tailwindcss/forms"
  dependency-version: 0.5.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-24 05:02:02 +00:00
dependabot[bot] 8629e52b84 📌 bump puppeteer from 24.32.1 to 24.34.0
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.32.1 to 24.34.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-v24.32.1...puppeteer-v24.34.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-24 05:01:57 +00:00
dependabot[bot] 9dd3fce747 📌 bump @tailwindcss/cli from 4.1.17 to 4.1.18
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.1.17 to 4.1.18.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.18/packages/@tailwindcss-cli)

---
updated-dependencies:
- dependency-name: "@tailwindcss/cli"
  dependency-version: 4.1.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-24 05:01:44 +00:00
Nuno Coração 94fdf4fded 🔖 v2.5.0 2025-12-22 23:16:48 +00:00
Nuno C. 8c401da5f7 Merge pull request #2627 from nunocoracao/dev
🔖  v2.94.0
2025-12-22 23:05:44 +00:00
Nuno C. e00b6f674f Merge pull request #2668 from nunocoracao/trasnlations
🎏 Add 5 new languages to exampleSite: German, French, Spanish, PortuguesePT, and PortugueseBR
2025-12-22 23:03:10 +00:00
Nuno Coração 23ed8930bf update readmes 2025-12-22 23:02:08 +00:00
Nuno Coração 77070d4120 update readmes 2025-12-22 22:58:56 +00:00
Nuno CoraçãoandClaude Opus 4.5 1d88d5b296 Add 5 new languages to exampleSite: German, French, Spanish, Portuguese
Add complete translations for:
- German (de)
- French (fr)
- Spanish (es)
- Portuguese Brazil (pt-br)
- Portuguese Portugal (pt-pt)

Changes include:
- Language config files (languages.*.toml)
- Menu config files (menus.*.toml)
- Translated docs section (16 files x 5 langs)
- Translated homepage, guides, samples
- Translated examples, authors, tags sections
- Translated users section (112 dirs x 5 langs)
- Fixed YAML front matter formatting in user files

Hugo build now supports 9 languages total.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 22:49:50 +00:00
Nuno C. 4eacb62ff8 Merge pull request #2665 from nunocoracao/dependabot/npm_and_yarn/glob-11.1.0
chore(deps-dev): bump glob from 11.0.3 to 11.1.0
2025-12-22 19:09:52 +00:00
Nuno C. 63b3826c25 Merge branch 'dev' into dependabot/npm_and_yarn/glob-11.1.0 2025-12-22 19:09:43 +00:00
dependabot[bot] 78f462314b chore(deps-dev): bump glob from 11.0.3 to 11.1.0
Bumps [glob](https://github.com/isaacs/node-glob) from 11.0.3 to 11.1.0.
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v11.0.3...v11.1.0)

---
updated-dependencies:
- dependency-name: glob
  dependency-version: 11.1.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 19:06:44 +00:00
Nuno C. 9ffc80db8c Merge pull request #2667 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2025-12-22 19:06:05 +00:00
nunocoracao 49e855b4e4 Update Hugo supported version 2025-12-22 18:59:51 +00:00
ZhenShuo2021 c32887c753 Merge pull request #2666 from ZhenShuo2021/patch
Fix #2653 gallery overflow
2025-12-23 02:25:51 +08:00
ZhenShuo Leo 7a1cfbb75d fix: overflow when the gallery is inside other containers [skip ci]
Fix the fix in #2653

This is a simple fix, hopefully it will be fully resolved in the future.
2025-12-23 02:23:21 +08:00
ZhenShuo Leo f3e91168d9 fix(schema): remove abstract field
- Search engines do not consume the abstract property
- Platforms (Docusaurus, Vitepress, WordPress, Medium) do not use it
- .Summary method does not match the definition of abstract in schema.org

redo 0d21750932 due to incorrect merge manipulate
2025-12-23 01:42:44 +08:00
Nuno Coração e41621dbbc updated users 2025-12-22 17:26:52 +00:00
Nuno C. 9f77b8b780 Merge pull request #2643 from RxChi1d/feature/callout-tailwind
✨ Feat: support GitHub Alerts (admonitions)
2025-12-22 17:25:02 +00:00
ZhenShuo Leo 81f2423d71 Merge branch 'dev' into feature/callout-tailwind 2025-12-23 01:21:40 +08:00
Nuno C. 0ee9667c35 Merge pull request #2654 from ZhenShuo2021/patch
🐛 Fix: multiple small patches
2025-12-22 17:19:56 +00:00
Nuno C. 4bab2b4e7e Merge pull request #2644 from NSStudent/hotfix/copy-safari-issue
Fix: Copy fallback for safari
2025-12-22 17:17:41 +00:00
Nuno C. eea9e106ab Merge pull request #2652 from Flexicon/feat-add-config-to-disable-styled-scrollbar
✨ feat: add config to disable styled scrollbar
2025-12-22 17:16:30 +00:00
ZhenShuo Leo 0d21750932 fix(schema): remove abstract field
- Search engines do not consume the abstract property
- Platforms (Docusaurus, Vitepress, WordPress, Medium) do not use it
- .Summary method does not match the definition of abstract in schema.org
2025-12-23 01:16:01 +08:00
ZhenShuo Leo e4ca3de291 feat(article-link): support front matter control of showCards option 2025-12-23 01:16:00 +08:00
Nuno C. 92a4c699cd Merge pull request #2647 from jannisdickmann/patch-1
💬 Translate article-related phrases to Italian
2025-12-22 17:15:45 +00:00
Nuno C. fababb8a49 Merge pull request #2645 from Coehill/main
Fix minor spelling mistake
2025-12-22 17:15:06 +00:00
Nuno C. 6d4968cdc6 Merge pull request #2660 from roib20/feature/new-user
📝 Add "Tower of Kubes" site entry to `users.json`
2025-12-22 17:14:28 +00:00
ZhenShuo Leo 327712d228 fix(list): content too narrow 2025-12-23 01:13:56 +08:00
ZhenShuo Leo 8b362f58d3 perf(schema): loop fusion 2025-12-23 01:13:56 +08:00
ZhenShuo Leo afa810841c feat(author): support svg image 2025-12-23 01:13:56 +08:00
ZhenShuo Leo 34fc0e619f chore(head): normalize color scheme name to lowercase
Many users configured the scheme with uppercase letters.

While uppercase works on macOS, it causes deployment failures on Ubuntu due to case sensitivity.
2025-12-23 01:13:55 +08:00
Nuno C. e2a9a62c1f Merge branch 'dev' into feature/new-user 2025-12-22 17:13:31 +00:00
Nuno C. 545a2dc5da Merge pull request #2662 from marko78700/main
add monpetitdev enrty to users.json
2025-12-22 17:12:34 +00:00
Nuno C. b6c00249c6 Merge pull request #2656 from ZhenShuo2021/feat/codeblock-title
✨ Feat: support title in code block
2025-12-22 17:11:53 +00:00
Nuno C. d913a512ad Merge pull request #2655 from ZhenShuo2021/feat/render-link
✨ Feat: adopt Hugo embed render-link logic
2025-12-22 17:11:38 +00:00
Nuno C. 9719d7ac6f Merge pull request #2653 from ZhenShuo2021/fix/gallery
🐛 Fix: gallery and carousel no width
2025-12-22 17:10:44 +00:00
Nuno C. 74650e4927 Merge pull request #2637 from ZhenShuo2021/feat/tabs
✨ Feat: add tabs shortcode
2025-12-22 17:09:40 +00:00
Nuno C. 0b54ddac94 Merge pull request #2630 from ZhenShuo2021/fix/contrast
🐛 Fix: improve contrast
2025-12-22 17:07:21 +00:00
Nuno C. 6bb5c83029 Merge pull request #2659 from nunocoracao/dependabot/github_actions/dev/actions/upload-artifact-6
👷 bump actions/upload-artifact from 5 to 6
2025-12-22 17:05:11 +00:00
Nuno C. d7a4feba44 Merge pull request #2648 from nunocoracao/dependabot/github_actions/dev/peter-evans/create-pull-request-8
👷 bump peter-evans/create-pull-request from 7 to 8
2025-12-22 17:04:56 +00:00
Nuno C. 07cfaa2156 Merge pull request #2651 from nunocoracao/dependabot/npm_and_yarn/dev/awmottaz/prettier-plugin-void-html-2.0.0
📌 bump @awmottaz/prettier-plugin-void-html from 1.9.0 to 2.0.0
2025-12-22 17:04:37 +00:00
Nuno C. bd3589f783 Merge pull request #2650 from nunocoracao/dependabot/npm_and_yarn/dev/katex-0.16.27
📌 bump katex from 0.16.25 to 0.16.27
2025-12-22 17:04:23 +00:00
Nuno C. 0971fee3ef Merge pull request #2649 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.32.1
📌 bump puppeteer from 24.31.0 to 24.32.1
2025-12-22 17:04:09 +00:00
Nuno C. fe08fdf792 Merge pull request #2642 from nunocoracao/dependabot/npm_and_yarn/dev/prettier-3.7.4
📌 bump prettier from 3.6.2 to 3.7.4
2025-12-22 17:03:51 +00:00
Nuno C. 6d668745cf Merge pull request #2641 from nunocoracao/dependabot/npm_and_yarn/dev/mermaid-11.12.2
📌 bump mermaid from 11.12.1 to 11.12.2
2025-12-22 17:03:31 +00:00
Nuno C. 12ff643b75 Merge pull request #2640 from nunocoracao/hugo-new-version
⚙️ Update Hugo supported version
2025-12-22 17:02:59 +00:00
ZhenShuo Leo 07f2fec870 feat(admonition): polish
- sort by type names
- tweak colors of some types
- improve dark mode contrast
- prune css
- simplify render hook
2025-12-23 00:49:50 +08:00
rxchi1d 3f2891cc32 fix(admonitions): align paragraph spacing with prose 2025-12-22 15:42:07 +08:00
rxchi1d 57befe227f feat(admonitions): add header-only support 2025-12-22 14:18:31 +08:00
nunocoracao 73fc77b09e Update Hugo supported version 2025-12-22 06:08:55 +00:00
ZhenShuo Leo 0317f3aa0e refactor(admonition): simplify code 2025-12-22 12:29:12 +08:00
rxchi1d 775d5b1bbf feat: add admonitions 2025-12-22 09:53:58 +08:00
ZhenShuo Leo 1fc6058426 docs: update docs for admonitions 2025-12-22 09:53:58 +08:00
ZhenShuo2021 accf29dea3 Merge pull request #2664 from ZhenShuo2021/fix/img-ext 2025-12-22 09:52:25 +08:00
ZhenShuo Leo cc2c5c5205 fix: user thumbnail file extension 2025-12-21 23:21:48 +08:00
marko78700 c163661bd0 add monpetitdev enrty to users.json 2025-12-20 21:29:43 +01:00
roib20 bdd8a4a08d users: add "Tower of Kubes" entry
Add "Tower of Kubes" site entry to `users.json`
2025-12-18 21:37:32 +02:00
ZhenShuo Leo 0e3bad2be7 feat(codeblock): add title support 2025-12-18 02:38:31 +08:00
ZhenShuo Leo f487e616bf docs: update code block sample 2025-12-18 02:38:31 +08:00
dependabot[bot] 4e58ca0fb2 👷 bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-17 05:01:34 +00:00
ZhenShuo Leo 4422c4b517 fix: gallery and carousel wouldn't show without other statically sized elements 2025-12-15 20:26:04 +08:00
ZhenShuo Leo f8417b8297 feat: adopt Hugo embed render-link logic 2025-12-15 18:20:26 +08:00
Mike Repec 9ff8cccc36 feat: Add config option to allow disabling styled tailwind scrollbar 2025-12-13 15:12:17 +01:00
dependabot[bot] f25fb65d42 📦 Update packaged KaTeX 2025-12-10 05:02:13 +00:00
dependabot[bot] 519915336e 📌 bump @awmottaz/prettier-plugin-void-html from 1.9.0 to 2.0.0
Bumps [@awmottaz/prettier-plugin-void-html](https://github.com/awmottaz/prettier-plugin-void-html) from 1.9.0 to 2.0.0.
- [Release notes](https://github.com/awmottaz/prettier-plugin-void-html/releases)
- [Changelog](https://github.com/awmottaz/prettier-plugin-void-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/awmottaz/prettier-plugin-void-html/compare/v1.9.0...v2.0.0)

---
updated-dependencies:
- dependency-name: "@awmottaz/prettier-plugin-void-html"
  dependency-version: 2.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-10 05:01:55 +00:00
dependabot[bot] 7fe94cc6d0 📌 bump katex from 0.16.25 to 0.16.27
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.25 to 0.16.27.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.25...v0.16.27)

---
updated-dependencies:
- dependency-name: katex
  dependency-version: 0.16.27
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-10 05:01:48 +00:00
dependabot[bot] 09bbdc7125 📌 bump puppeteer from 24.31.0 to 24.32.1
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.31.0 to 24.32.1.
- [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-v24.31.0...puppeteer-v24.32.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-10 05:01:39 +00:00
dependabot[bot] 9bab52527f 👷 bump peter-evans/create-pull-request from 7 to 8
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-10 05:01:26 +00:00
Jannis Dickmann ca477899f2 Translate article-related phrases to Italian
In i18n/it.yaml, translated article->part_of_series, part, this_article, related_articles to Italian, which were previously in English.
2025-12-09 21:41:43 +01:00
Coehill e8086c811d Fix spelling in index.md 2025-12-08 22:23:05 -05:00
Coehill 2028ff15d3 Fix spelling in index.md 2025-12-08 22:22:26 -05:00
Coehill 0cf48a9361 Fix spelling in index.md 2025-12-08 22:21:23 -05:00
NSStudent 8ba07f0d59 fix copy fallback for safari
Signed-off-by: NSStudent <omarmn83@gmail.com>
2025-12-08 21:12:14 +01:00
ZhenShuo Leo ff9a860af9 style: line highlight for linenos=inline 2025-12-08 16:29:15 +08:00
dependabot[bot] 6bf7c7a019 📦 Update packaged Mermaid 2025-12-03 05:02:01 +00:00
dependabot[bot] 4e249c4a4b 📌 bump prettier from 3.6.2 to 3.7.4
Bumps [prettier](https://github.com/prettier/prettier) from 3.6.2 to 3.7.4.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.6.2...3.7.4)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.7.4
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-03 05:01:49 +00:00
dependabot[bot] e7acfe97d2 📌 bump mermaid from 11.12.1 to 11.12.2
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.12.1 to 11.12.2.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.12.1...mermaid@11.12.2)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.12.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-03 05:01:36 +00:00
ZhenShuo Leo eda9fc9bc3 feat(tabs): better usage 2025-12-01 21:14:15 +08:00
ZhenShuo Leo 20044af981 feat: add tabs 2025-12-01 20:24:26 +08:00
ZhenShuo Leo 7b5fe02079 feat(code): use github theme 2025-12-01 13:24:47 +08:00
ZhenShuo Leo c5b51e3491 style: specify dark mode selector 2025-11-30 11:00:10 +08:00
ZhenShuo Leo 2d3642c62b style: improve hr contrast 2025-11-30 11:00:10 +08:00
ZhenShuo Leo 960681efaf style: improve blockquote contrast 2025-11-30 11:00:10 +08:00
ZhenShuo Leo bb99b59528 style: improve toc contrast 2025-11-30 11:00:10 +08:00
ZhenShuo Leo f29e515147 style: improve code contrast 2025-11-30 11:00:10 +08:00
ZhenShuo Leo 112b22c0d9 style: improve article-link contrast
add background and tweak border
2025-11-29 04:10:47 +08:00
ZhenShuo Leo 31039584e8 style: add overlay for background blur 2025-11-29 04:10:47 +08:00
ZhenShuo Leo ec942b013a fix: remove alt in decorative images 2025-11-29 03:29:18 +08:00
Nuno C. 1be60f89da Merge pull request #2634 from nunocoracao/dependabot/npm_and_yarn/dev/rimraf-6.1.2
📌 bump rimraf from 6.1.0 to 6.1.2
2025-11-28 14:23:57 +00:00
Nuno C. 69ab24995c Merge pull request #2633 from nunocoracao/dependabot/npm_and_yarn/dev/lite-youtube-embed-0.3.4
📌 bump lite-youtube-embed from 0.3.3 to 0.3.4
2025-11-28 14:23:44 +00:00
Nuno C. e9b83400fe Merge pull request #2632 from nunocoracao/dependabot/github_actions/dev/actions/checkout-6
👷 bump actions/checkout from 5 to 6
2025-11-28 14:23:34 +00:00
Nuno C. 1048a10ba2 Merge pull request #2631 from flohoss/document-excludeFromSearch-parameter
📝 Document excludeFromSearch front matter parameter
2025-11-28 14:23:20 +00:00
Nuno C. 1c21efd54a Merge pull request #2629 from ZhenShuo2021/docs/colors
📝 Docs: theme switching and content clarity
2025-11-28 14:22:51 +00:00
ZhenShuo Leo 19ebf4f5d2 docs: remove duplicate en content in it doc 2025-11-27 15:38:37 +08:00
ZhenShuo Leo 825f9fec18 docs: clarify showHero 2025-11-27 15:38:37 +08:00
ZhenShuo Leo f9f9cf8e11 docs: use a simpler command in custom syntax highlighter
change command because tailwind v4 natively support css nesting
2025-11-27 15:38:37 +08:00
ZhenShuo Leo 0f105d2acb docs: add theme-switcher for color schemes 2025-11-27 14:53:07 +08:00
dependabot[bot] 4bc91159d6 📌 bump rimraf from 6.1.0 to 6.1.2
Bumps [rimraf](https://github.com/isaacs/rimraf) from 6.1.0 to 6.1.2.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v6.1.0...v6.1.2)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-version: 6.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-26 05:01:43 +00:00
dependabot[bot] 2137efd700 📌 bump lite-youtube-embed from 0.3.3 to 0.3.4
Bumps [lite-youtube-embed](https://github.com/paulirish/lite-youtube-embed) from 0.3.3 to 0.3.4.
- [Release notes](https://github.com/paulirish/lite-youtube-embed/releases)
- [Commits](https://github.com/paulirish/lite-youtube-embed/compare/v0.3.3...v0.3.4)

---
updated-dependencies:
- dependency-name: lite-youtube-embed
  dependency-version: 0.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-26 05:01:37 +00:00
dependabot[bot] 7efecc2148 👷 bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-26 05:01:29 +00:00
Florian Hoss 0e8cc80a88 Document excludeFromSearch front matter parameter
Added documentation for the `excludeFromSearch` front matter parameter, explaining its default value and effect on sitemap and search index inclusion.
2025-11-25 05:00:51 +01:00
Nuno Coração 170671b357 🔖 v2.94.0 2025-11-24 23:57:24 +00:00
Nuno C. 7ce8be1d2f Merge pull request #2596 from nunocoracao/dev
🔖 v2.93.0
2025-11-24 23:56:47 +00:00
Nuno Coração ef023cf4bb polish 2025-11-24 23:55:56 +00:00
Nuno C. f72c75a562 Merge pull request #2624 from nunocoracao/dependabot/npm_and_yarn/glob-11.1.0
chore(deps-dev): bump glob from 11.0.0 to 11.1.0
2025-11-24 23:49:04 +00:00
Nuno C. 28cf554591 Merge branch 'dev' into dependabot/npm_and_yarn/glob-11.1.0 2025-11-24 23:37:01 +00:00
Nuno C. bdf5c84f19 Merge pull request #2621 from ZhenShuo2021/fix/author-zoom
🐛 Fix: author image stretch when zooming
2025-11-24 23:32:34 +00:00
Nuno C. 241a0e0373 Merge pull request #2617 from ZhenShuo2021/feat/breadcrumbList
✨ Feat(SEO): add enableStructuredBreadcrumbs
2025-11-24 23:31:39 +00:00
Nuno C. c64de6b1a7 Merge pull request #2614 from yozlog/dev
feat: Add i18n support for "Reply by Email"
2025-11-24 23:30:42 +00:00
Nuno C. f89ab9b53c Merge pull request #2610 from flohoss/fix-issue-2609
✨ Exclude pages from search index via param
2025-11-24 23:29:36 +00:00
Nuno C. c22297b182 Merge pull request #2608 from nunocoracao/dependabot/npm_and_yarn/dev/puppeteer-24.29.1
📌 bump puppeteer from 24.26.1 to 24.29.1
2025-11-24 23:27:13 +00:00
dependabot[bot] 20ca60e726 chore(deps-dev): bump glob from 11.0.0 to 11.1.0
Bumps [glob](https://github.com/isaacs/node-glob) from 11.0.0 to 11.1.0.
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v11.0.0...v11.1.0)

---
updated-dependencies:
- dependency-name: glob
  dependency-version: 11.1.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 23:24:09 +00:00
dependabot[bot] 6f63f1ce1d 📌 bump puppeteer from 24.26.1 to 24.29.1
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 24.26.1 to 24.29.1.
- [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-v24.26.1...puppeteer-v24.29.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 23:23:24 +00:00
Nuno C. a5440d0cfc Merge pull request #2625 from nunocoracao/dependabot/npm_and_yarn/js-yaml-4.1.1
chore(deps-dev): bump js-yaml from 4.1.0 to 4.1.1
2025-11-24 23:22:45 +00:00
Nuno C. 7a2086ed05 Merge pull request #2597 from nunocoracao/dependabot/npm_and_yarn/dev/rimraf-6.1.0
📌 bump rimraf from 6.0.1 to 6.1.0
2025-11-24 23:21:13 +00:00
Nuno C. 428b89860a Merge pull request #2599 from nunocoracao/dependabot/npm_and_yarn/dev/mermaid-11.12.1
📌 bump mermaid from 11.12.0 to 11.12.1
2025-11-24 23:21:03 +00:00
dependabot[bot] 69a8a256dc chore(deps-dev): bump js-yaml from 4.1.0 to 4.1.1
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 23:20:51 +00:00
Nuno C. e1c1308662 Merge pull request #2603 from nicholas-alonzo/docs/add-new-colorScheme-options
📝  Docs: Add new github and one-light in colorScheme options
2025-11-24 23:20:43 +00:00
Nuno C. b0e6c4e5fd Merge pull request #2607 from nunocoracao/dependabot/npm_and_yarn/dev/tailwindcss/cli-4.1.17
📌 bump @tailwindcss/cli from 4.1.16 to 4.1.17
2025-11-24 23:20:08 +00:00
Nuno C. 1e5c006945 Merge pull request #2622 from zzamboni/newuser-zzamboni.org
New user entry: zzamboni.org
2025-11-24 23:18:44 +00:00
ZhenShuo2021 4248719f9c Merge pull request #2618 from ZhenShuo2021/feat/chroma 2025-11-25 05:17:36 +08:00
ZhenShuo Leo 62ce9f2e68 docs: document the Chroma customization steps 2025-11-22 07:30:17 +08:00
Diego Zamboni d6cfb639e6 New user entry: zzamboni.org 2025-11-21 23:48:01 +01:00
ZhenShuo Leo 8d5c2045a6 fix: author image stretch when zooming
fix this issue by using square image for data-zoom-src
2025-11-22 05:34:28 +08:00
ZhenShuo Leo 652462e326 fix: add JSON-LD to section page 2025-11-21 02:16:48 +08:00
ZhenShuo Leo 8ab2d8b68a feat: add BreadcrumbList (enableStructuredBreadcrumbs option)
also fix escape character in url of schema
2025-11-21 02:16:43 +08:00
YoZ e71f92b572 feat: Add i18n support for "Reply by Email" 2025-11-16 07:02:50 +09:00
Florian Hoss bf2d8ece62 ✨ Exclude non searchable pages from sitemap 2025-11-12 18:30:07 +01:00
Florian Hoss 53d243fab3 ✨ Exclude pages from search index via param
Pages with the 'excludeFromSearch' parameter set in their front matter are now omitted from the generated search index. This allows for finer control over which pages are searchable.
2025-11-12 18:17:58 +01:00
dependabot[bot] 2b55f9aa68 💄 Rebuild CSS 2025-11-12 05:02:17 +00:00
dependabot[bot] 666a887d79 📌 bump @tailwindcss/cli from 4.1.16 to 4.1.17
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.1.16 to 4.1.17.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.17/packages/@tailwindcss-cli)

---
updated-dependencies:
- dependency-name: "@tailwindcss/cli"
  dependency-version: 4.1.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-12 05:01:50 +00:00
nicholas-alonzo fc73172652 Add new github and one-light in colorScheme 2025-11-05 23:20:19 -08:00
dependabot[bot] 3b9a4032a7 📦 Update packaged Mermaid 2025-11-05 05:02:53 +00:00
dependabot[bot] 720d795f78 📌 bump mermaid from 11.12.0 to 11.12.1
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.12.0 to 11.12.1.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.12.0...mermaid@11.12.1)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.12.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 05:02:19 +00:00
dependabot[bot] 4344a076d8 📌 bump rimraf from 6.0.1 to 6.1.0
Bumps [rimraf](https://github.com/isaacs/rimraf) from 6.0.1 to 6.1.0.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v6.0.1...v6.1.0)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-version: 6.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 05:01:48 +00:00
ZhenShuo Leo 32f452b25d feat(chroma): use cascade layer to allow override via custom.css
This allows users to customize Chroma CSS without building the TailwindCSS manually.

For example, add this to `custom.css`:

```
.chroma,
.chroma,
.chroma:is(.dark *),
.chroma:is(.dark *) * {
  color: unset;
  background-color: unset;
  font-weight: unset;
}
```

Then use:

```
hugo gen chromastyles --style=github | sed 's/\./html.dark ./' >> assets/css/custom.css

hugo gen chromastyles --style=github | sed 's/\./html:not(.dark) ./' >> exampleSite/assets/css/custom.css
```
2025-11-05 10:59:41 +08:00
Nuno Coração c9595934ea 🔖 v2.93.0 2025-11-03 22:40:55 +00:00
Nuno Coração fe51e8fb67 fix 2025-11-03 22:38:37 +00:00
2067 changed files with 53398 additions and 9530 deletions

No files matched your search

+14
View File
@@ -0,0 +1,14 @@
{
"name": "blowfish",
"owner": {
"name": "Nuno Coração",
"url": "https://github.com/nunocoracao"
},
"plugins": [
{
"name": "blowfish",
"source": "./.claude/skills/blowfish",
"description": "Teaches coding agents how to install, configure, and build sites with the Blowfish Hugo theme."
}
]
}
@@ -0,0 +1,5 @@
{
"name": "blowfish",
"description": "Teaches coding agents how to install, configure, and build sites with the Blowfish Hugo theme.",
"version": "1.0.0"
}
+95
View File
@@ -0,0 +1,95 @@
---
name: blowfish
description: Install, configure, and build sites with the Blowfish Hugo theme — setup methods, updates, configuration files, homepage layouts, front matter, shortcodes, customization, and theme architecture. Use when working on a Hugo site that uses (or wants to use) Blowfish, or when working on the theme itself.
---
# Blowfish theme
Blowfish is a lightweight Hugo theme built with Tailwind CSS. Docs: https://blowfish.page/ · Repo: https://github.com/nunocoracao/blowfish
Requires Hugo **extended** edition, within the version range declared in the theme's `config.toml` under `[module.hugoVersion]` (check that file — the range is a rolling window that tracks recent Hugo releases).
## Installing
Full walkthrough: https://blowfish.page/docs/installation/
1. **Blowfish Tools CLI:** `npx blowfish-tools` — interactive setup that scaffolds the site and config. `npx blowfish-tools new <site>` creates project + theme in one go.
2. **Git submodule:**
```shell
git init # if not already a repo
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
```
Then set `theme = "blowfish"` in the site's `config/_default/hugo.toml`.
3. **Hugo module:** `hugo mod init github.com/<user>/<repo>` then in `config/_default/module.toml`:
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
4. **Manual:** download the latest release archive, extract to `themes/blowfish/`, set `theme = "blowfish"`.
After installing (any method): delete the site's generated `hugo.toml` in the project root, and copy the theme's `config/_default/*.toml` files into the site's `config/_default/` (don't overwrite `module.toml` if using Hugo modules). A ready-made zip of the config files: https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip
## Updating
- **Git submodule:** `git submodule update --remote --merge`
- **Hugo module:** `hugo mod get -u` (inspects `module.toml` + `go.mod`)
- **Manual:** download the latest release and replace `themes/blowfish/` entirely (local edits inside the theme folder are lost — site-level overrides are safe).
- **Upgrading v2 → v3:** fully backwards compatible; all new features are opt-in and nothing was removed or renamed. Hugo-module users change the import path `…/blowfish/v2` → `…/blowfish/v3` in `module.toml`, then `hugo mod get -u`. Other methods need no changes. Details: https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3
## Configuration
All config lives in the site's `config/_default/` (reference: https://blowfish.page/docs/configuration/):
- `hugo.toml` — core Hugo settings, theme/module import, taxonomies, related-content config.
- `params.toml` — theme behavior. Key areas: `colorScheme`; `defaultAppearance`/`autoSwitchAppearance` (dark mode); `defaultBackgroundImage` + `backgroundCanvas` (site-wide fixed backdrop); `[header] layout` (`basic`, `fixed`, `fixed-fill`, `fixed-gradient`, `fixed-fill-blur`, `floating`) and `mobileMenuStyle` (`fullscreen`/`dropdown`); `[homepage] layout` (`page`, `profile`, `hero`, `card`, `background`, `landing`, `custom`) + `layoutSwitcher`; `[article]`, `[list]`, `[taxonomy]`, `[term]` display flags (hero styles, TOC, reading time/progress, breadcrumbs, `cardView`, `featureImageHover`, …); `[footer]`; search; analytics; comments; Firebase (views/likes).
- `languages.<code>.toml` — site title, author profile (name, image, headline, bio, `links` social icons). One file per language for multilingual sites.
- `menus.<code>.toml` — `[[main]]`, `[[subnavigation]]`, and `[[footer]]` entries (`name`, `pageRef`/`url`, `weight`, optional `pre` icon).
- `markup.toml` — Goldmark config; keep `unsafe = true` (the theme relies on HTML in Markdown).
Front matter overrides most section params per page. Reference table: https://blowfish.page/docs/front-matter/
## Feature → docs map
Point users (and yourself) at the specific page:
- Getting started & colour schemes: https://blowfish.page/docs/getting-started/
- Homepage layouts (incl. `landing` hero with `heroCaption`/`heroLead`/`heroButtons`/`heroImage` front matter): https://blowfish.page/docs/homepage-layout/
- Front matter reference: https://blowfish.page/docs/front-matter/
- All 40+ shortcodes with examples: https://blowfish.page/docs/shortcodes/
- Content examples (article features in action): https://blowfish.page/docs/content-examples/
- Series of articles: https://blowfish.page/docs/series/
- Multi-author setup (`data/authors/*.json` + `authors` taxonomy): https://blowfish.page/docs/multi-author/
- Thumbnails & feature images: https://blowfish.page/docs/thumbnails/
- Partials (analytics, comments, extend-head/extend-footer hooks): https://blowfish.page/docs/partials/
- Advanced customisation (fonts, custom schemes, overrides, npm build): https://blowfish.page/docs/advanced-customisation/
- Firebase views/likes: https://blowfish.page/docs/firebase-views/
- Hosting & deployment (Netlify, Vercel, GitHub Pages, …): https://blowfish.page/docs/hosting-deployment/
## Architecture (how to find things)
Understanding the theme's structure makes searching much faster:
- **Template resolution:** Hugo prefers site files over theme files at the same path. `layouts/_default/baseof.html` is the page skeleton (skip link, `<header>` with the configured header layout, `<main>`, footer, search modal, background canvas). `single.html` = articles, `list.html` = section listings, `terms.html` = taxonomy index (e.g. `/tags/`), `term.html` = one term's articles. All taxonomies share the same two templates.
- **Partial naming convention:** `layouts/partials/<area>/<variant>.html`. Header layouts live in `partials/header/` (all variants delegate the actual menu bar to `header/basic.html`; components like `desktop-menu`, `mobile-menu`, `translations` are in `partials/header/components/`). Hero styles in `partials/hero/` (`basic`, `big`, `background`, `thumbAndBackground`). Homepage layouts in `partials/home/`. Article listing cards in `partials/article-link/` (`card`, `simple`, `card-related`); taxonomy term links in `partials/term-link/`. `partials/icon.html` inlines SVGs from `assets/icons/` by name.
- **Param resolution pattern:** templates resolve display flags as front matter → section params → default, e.g. `.Params.showX | default (site.Params.article.showX | default false)`. Page scope is tracked via `.Scratch.Set "scope"` (`single`/`list`/`terms`/`term`) — some partials branch on it.
- **Styling:** Tailwind source is `assets/css/main.css` (plus `assets/css/components/*`), compiled to `assets/css/compiled/main.css` which is **committed** — after changing templates that use new utility classes, run `npm run build` and commit the compiled file. Colour schemes are CSS custom-property files in `assets/css/schemes/<name>.css` defining `--color-neutral/primary/secondary-{50..900}` as RGB triplets; Tailwind maps them via `tailwind.config.js`. Note: the palette has **no 950 shades** — `*-neutral-950` etc. silently compile to nothing.
- **JavaScript:** small feature scripts in `assets/js/` (appearance/dark-mode toggle, search, zen-mode, reading-progress, hero-scroll-fade, background-blur, …). Most are bundled into `main.bundle.js` in `partials/head.html`; page-conditional ones get their own fingerprinted `<script>` tag. Vendored libraries (mermaid, katex, chart.js, fuse, zoom, …) are copied from `node_modules` into `assets/lib/` by `vendor-copy` (config in `package.json` under `devVendorCopy`) — they are committed; heavy ones load only on pages that use them.
- **i18n:** every user-facing string goes through `i18n/<lang>.yaml` lookups (`{{ i18n "key" }}`) — never hardcode text in templates. English is the fallback.
- **Demo/testbed:** `exampleSite/` is both the docs site (blowfish.page) and the test environment. `npm run example` serves it locally at :1313 with the theme mounted via `--themesDir ../..`. Docs content lives in `exampleSite/content/docs/` with one `index.<lang>.md` per language.
- **Icons:** `assets/icons/*.svg` (FontAwesome-derived, `fill="currentColor"`). An icon's filename is its name everywhere: social `links`, menu `pre`, the `icon`/`badge`/`button` shortcodes.
## Working on the theme itself
- `npm install` then `npm run example` — live demo at `http://localhost:1313`.
- `npm run build` — recompile Tailwind into `assets/css/compiled/main.css` (commit it).
- `npm run build-hugo` — production build of the docs site.
- Conventions: 2-space indent, spaces inside template tags (`{{ $x }}`), extract repeated logic into partials, Gitmoji commit prefixes, no breaking changes (never rename partials or remove config options). See `CLAUDE.md` and `CONTRIBUTING.md`.
- When adding/renaming config options, shortcodes, or layouts: update the docs in `exampleSite/content/docs/` (all languages) **and this skill**.
## Troubleshooting
- Blank styling / missing classes → Hugo isn't the extended edition, or `themesDir`/module import is misconfigured.
- New config not applying → the file must be in the **site's** `config/_default/`, not inside the theme.
- Version warnings → keep Hugo within the `[module.hugoVersion]` range in the theme's `config.toml`.
- A Tailwind class "not working" in a custom override → the compiled CSS is generated from the theme's sources; site-level classes need the site's own CSS (e.g. `assets/css/custom.css`, loaded automatically) or the class must already exist in the theme's compiled output.
- Images not appearing as thumbnails → the image must be a page-bundle resource matching `*feature*`, `*cover*`, or `*thumbnail*`, or set `featureimage` in front matter.
+2 -2
View File
@@ -5,7 +5,7 @@ version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
target-branch: "dev"
target-branch: "main"
schedule:
interval: "weekly"
day: "wednesday"
@@ -15,7 +15,7 @@ updates:
- "dependencies"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "dev"
target-branch: "main"
schedule:
interval: "weekly"
day: "wednesday"
+2 -2
View File
@@ -8,11 +8,11 @@ jobs:
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7
with:
ref: "${{ github.head_ref }}"
- name: Install dependencies and Build Theme
uses: actions/setup-node@v6
uses: actions/setup-node@v7
- run: npm install
- run: npm run assets
- name: Commit and push Chart.js changes
+3 -3
View File
@@ -8,14 +8,14 @@ jobs:
zip:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7
- run: zip -r config-default.zip config/_default
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
with:
name: config-default
path: config-default.zip
- name: Upload to release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
files: config-default.zip
tag_name: ${{ github.event.release.tag_name }}
+11 -5
View File
@@ -11,9 +11,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v5
uses: actions/checkout@v7
with:
ref: dev
ref: main
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
@@ -34,11 +34,17 @@ jobs:
if: steps.git-check.outputs.modified == 'true'
run: |
cat release-versions/hugo-latest.txt | \
while read version; do sed -i'' -E "s/(max = \")[0-9]+\.[0-9]+\.[0-9]+(\")/\1${version#v}\2/g" config.toml; done
while read version; do \
v="${version#v}"; \
minor="$(echo "$v" | cut -d. -f2)"; \
min_minor="$((minor - 3))"; \
sed -i'' -E "s/(max = \")[0-9]+\.[0-9]+\.[0-9]+(\")/\1${v}\2/g" config.toml; \
sed -i'' -E "s/(min = \")[0-9]+\.[0-9]+\.[0-9]+(\")/\10.${min_minor}.0\2/g" config.toml; \
done
- name: Create Pull Request
if: steps.git-check.outputs.modified == 'true'
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@v8
with:
commit-message: Update Hugo supported version
title: ⚙️ Update Hugo supported version
@@ -51,4 +57,4 @@ jobs:
[2]: https://github.com/peter-evans/create-pull-request
labels: dependencies, automated pr
branch: hugo-new-version
base: dev
base: main
+5 -5
View File
@@ -30,19 +30,19 @@ jobs:
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.102.3
HUGO_VERSION: 0.165.0
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7
with:
submodules: recursive
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
uses: actions/configure-pages@v6
- name: Build with Hugo
env:
# For maximum backward compatibility with Hugo modules
@@ -51,7 +51,7 @@ jobs:
run: |
hugo --minify -s exampleSite --themesDir ../.. -d ../docs --baseURL https://nunocoracao.github.io/blowfish/
- name: Upload artifact
uses: actions/upload-pages-artifact@v4
uses: actions/upload-pages-artifact@v5
with:
path: ./docs
@@ -65,4 +65,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
+16 -5
View File
@@ -18,17 +18,28 @@ jobs:
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@v11
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message:
"This issue will be closed since it has been stale for 60 days."
"This issue has had no activity for 60 days, so it has been marked
as stale. If it is still relevant, just leave a comment and the
label will be removed — otherwise it will close in 14 days. Closed
issues can always be reopened. Thanks for helping keep the tracker
healthy!"
stale-pr-message:
"This pull request will be closed since it has been stale for 60
days."
"This pull request has had no activity for 60 days, so it has been
marked as stale. If you are still working on it, just leave a
comment and the label will be removed — otherwise it will close in
14 days. Closed pull requests can always be reopened."
close-issue-message:
"Closing due to inactivity. This is housekeeping, not a judgement
on the issue — if it is still relevant, please reopen or leave a
comment and it will get another look."
stale-issue-label: "no-issue-activity"
stale-pr-label: "no-pr-activity"
days-before-stale: 60
days-before-close: 0
days-before-close: 14
remove-stale-when-updated: true
operations-per-run: 100
exempt-issue-labels: 'keep,security,bug,confirmed'
+2 -2
View File
@@ -10,13 +10,13 @@ jobs:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v7
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3.0.0
uses: peaceiris/actions-hugo@v3.2.1
with:
hugo-version: "latest"
+11 -1
View File
@@ -23,6 +23,15 @@ exampleSite/resources/
node_modules
.hugo_build.lock
# Firebase scripts
scripts/serviceAccountKey.json
scripts/node_modules/
scripts/*.csv
# Google Analytics export (temporary)
ga-pageviews.csv
*.csv
# OS generated files
.DS_Store
.DS_Store?
@@ -31,4 +40,5 @@ node_modules
.Trashes
.idea
.Ulysses-Group.plist
.Ulysses-Settings.plist
.Ulysses-Settings.plist
.watchfire/
+1 -1
View File
@@ -25,7 +25,7 @@ static
#
# This create an unclose node
layouts/_default/_markup/render-heading.html
layouts/_default/_markup
layouts/_default/index.json
layouts/shortcodes/screenshot.html
layouts/shortcodes/figure.html
-1
View File
@@ -6,7 +6,6 @@
"trailingComma": "all",
"proseWrap": "always",
"plugins": [
"@awmottaz/prettier-plugin-void-html",
"prettier-plugin-go-template"
],
"overrides": [
+56 -2
View File
@@ -79,7 +79,14 @@
"{{< /chart >}}"
],
"description": "Use the Chart.js library to embed charts into articles using simple structured data. Blowfish chart Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#chart ",
},
},
"email": {
"prefix": ["BFS-email", "HSC-email", "email"],
"body": [
"{{< email email=\"mailto:${1:hello@test.com}\" text=\"${2:text}\" subject=\"${3:Reply to awesome article}\" >}}$0",
],
"description": "Creates an obfuscated mailto link. Documentation: https://blowfish.page/docs/shortcodes/#email ",
},
"figure": {
"prefix": ["BFS-figure", "HSC-figure", "figure"],
"body": [
@@ -178,6 +185,53 @@
],
"description": "Output a set of up to three different colors. Blowfish swatches Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#swatches ",
},
"Tabs - Basic": {
"prefix": "tabs",
"body": [
"{{< tabs >}}",
"",
" {{< tab label=\"${1:Tab 1}\" >}}",
" $2",
" {{< /tab >}}",
"",
" {{< tab label=\"${3:Tab 2}\" >}}",
" $4",
" {{< /tab >}}",
"",
"{{< /tabs >}}"
],
"description": "Insert Hugo tabs shortcode"
},
"Tabs - Full Options": {
"prefix": "tabsfull",
"body": [
"{{< tabs group=\"${1:group-name}\" default=\"${2:Default Tab}\" >}}",
"",
" {{< tab label=\"${3:Tab 1}\" icon=\"${4:code}\" >}}",
" $5",
" {{< /tab >}}",
"",
" {{< tab label=\"${2:Default Tab}\" icon=\"${6:sun}\" >}}",
" $7",
" {{< /tab >}}",
"",
" {{< tab label=\"${8:Tab 3}\" icon=\"${9:moon}\" >}}",
" $0",
" {{< /tab >}}",
"",
"{{< /tabs >}}"
],
"description": "Insert Hugo tabs with group, default, and icons"
},
"Tab": {
"prefix": "tab",
"body": [
"{{< tab label=\"${1:Tab Label}\" >}}",
"$2",
"{{< /tab >}}"
],
"description": "Insert Hugo tab item"
},
"timeline": {
"prefix": ["BFS-timeline", "HSC-timeline", "timeline"],
"body": [
@@ -208,4 +262,4 @@
"description": "Typewriter-Like text. Blowfish typeit Shortcode. Documentation: https://blowfish.page/docs/shortcodes/#typeit https://www.typeitjs.com/docs/vanilla/usage/ ",
},
}
}
+43
View File
@@ -0,0 +1,43 @@
version: 1
project_id: fafe4c77-495a-44fc-9eaf-8e38596cdc04
name: blowfish
status: active
color: '#8b5cf6'
default_agent: claude-code
sandbox: auto
auto_merge: true
auto_delete_branch: true
auto_start_tasks: true
notifications:
muted: false
definition: |
Blowfish is a powerful, lightweight Hugo theme built with Tailwind CSS.
Repo: https://github.com/nunocoracao/blowfish · Demo & docs: https://blowfish.page/
Stack & layout:
- Hugo theme (min Hugo 0.141.0). Templates in `layouts/`, partials in `layouts/partials/`, shortcodes in `layouts/shortcodes/`.
- Tailwind CSS 4 via `@tailwindcss/cli` — source in `assets/css/main.css`, output in `assets/css/compiled/main.css`.
- JS vendored from `node_modules/` into `assets/lib/` via `vendor-copy` (configured in `package.json` under `devVendorCopy`).
- Localisation strings live in `i18n/`. All static text MUST go through `i18n` lookups, never hardcoded.
- `exampleSite/` is the testbed. Run `npm run example` (or `:core` / `:production`) to preview locally.
- `config/` holds default theme config; users override in their own site.
Coding conventions (from CONTRIBUTING.md):
- 2-space indent. Spaces inside Go template tags: `{{< alert >}}` not `{{<alert>}}`.
- Extract repeated template logic into partials.
- Relative asset paths without leading slash; trailing slash for folders (e.g. `static/img/`).
- Prettier config is included; respect it.
PR & commit rules (strict — enforced):
- Single-purpose PRs only. Do NOT bundle unrelated changes (e.g. bug fix + version bump + new user entry). Mixed PRs get closed.
- NO breaking changes unless strictly required by a dependency. Renaming partials, removing config options, or changing template signatures will be rejected — they silently break user customisations.
- Commits: Gitmoji prefix, imperative mood ("Fix bug", not "Fixed"), ≤72-char summary, no trailing period. Reference issue numbers when relevant.
- Commit incrementally rather than one giant commit.
Before marking a task done:
- If templates/CSS/JS changed, run `npm run example` and verify in the browser. Type-checks alone don't validate Hugo theme behavior.
- Check that any new user-facing string is wired through `i18n/` for all supported languages (or at least English with a clear note).
- Don't bump `package.json` version or touch `release-versions/` as part of a feature/fix PR — those are released separately.
created_at: 2026-05-04T23:12:29.75161Z
updated_at: 2026-05-04T23:12:30.276795Z
next_task_number: 1
+33
View File
@@ -0,0 +1,33 @@
# Secrets & Setup Instructions
Use this file to tell agents how to access external services and credentials
for this project. Agents will read these instructions before starting work.
## Examples
### CLI Tools (already authenticated)
```
# Firebase — I'm already logged in via `firebase login`
# Use `firebase use <project-id>` to switch projects
# AWS — credentials configured in default profile
# Use `aws sts get-caller-identity` to verify access
# gcloud — authenticated via `gcloud auth login`
```
### Environment Variables
```
# Set these before running the app:
# export DATABASE_URL=<value>
# export API_KEY=<value>
```
### API Keys & Tokens
```
# Stripe test key: use the key in .env.local
# OpenAI: use the org key from 1Password CLI (`op read ...`)
```
---
Delete this sample content and replace with your own instructions.
+15
View File
@@ -0,0 +1,15 @@
# Blowfish
Hugo theme built with Tailwind CSS. Templates in `layouts/`, Tailwind source in `assets/css/main.css` compiled to `assets/css/compiled/main.css` (committed), demo/testbed in `exampleSite/`, localization in `i18n/`.
## Working on the theme
- `npm install`, then `npm run example` to preview the demo site; `npm run build` to recompile Tailwind (commit the compiled CSS with template changes that use new classes).
- All user-facing static text goes through `i18n/` lookups — never hardcode strings in templates.
- 2-space indent; spaces inside Go template tags (`{{ $x }}`); extract repeated template logic into partials; follow the included Prettier config.
- No breaking changes: don't rename partials, remove config options, or change template signatures — users' sites silently depend on them.
- Single-purpose commits/PRs with Gitmoji prefixes and imperative mood (≤72-char summary).
## Agent skill — keep it in sync
`.claude/skills/blowfish/SKILL.md` teaches coding agents how to install, configure, and use Blowfish. **Any PR that adds/renames/removes a config option, shortcode, homepage/hero/header layout, or installation step must update the skill in the same PR.** Treat it like documentation: if `exampleSite/content/docs/` needs updating, the skill probably does too.
+12 -1
View File
@@ -1,6 +1,6 @@
## How to contribute to Blowfish
All development occurs on the `dev` branch and new PRs should be forked from here.
All development occurs on the `main` branch and new PRs should be forked from here.
### Bugs & other issues
@@ -31,6 +31,17 @@ All development occurs on the `dev` branch and new PRs should be forked from her
- If you have a general question, these should be asked using [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions). Feel free to open a [new discussion](https://github.com/nunocoracao/blowfish/discussions/new) to ask your question using the "Q&A" category.
- Be sure to check if your question has already been answered by searching [existing Q&A discussions](https://github.com/nunocoracao/blowfish/discussions/categories/q-a).
### Breaking changes
- We do not accept breaking changes unless they are strictly required to keep supporting the project (e.g. a dependency deprecating a feature we rely on).
- Changes that would cause existing user customizations to silently stop working (such as renaming partial paths, removing config options, or changing template signatures) will be rejected.
- If you're unsure whether your change is breaking, open a discussion first.
### Pull request guidelines
- Keep PRs focused on a single change. Do not bundle unrelated modifications (e.g. bug fix + version bump + new user entry) into the same PR.
- PRs that mix multiple unrelated changes will be closed and the author will be asked to split them.
### Coding conventions
- Indent using 2 spaces (soft tabs).
+15 -3
View File
@@ -1,6 +1,18 @@
github: [nunocoracao]
custom:
# These are supported funding model platforms
github: [nunocoracao] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: nunocoracao # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
[
"https://www.paypal.me/nunocoracao",
"https://www.buymeacoffee.com/nunocoracao",
]
+192
View File
@@ -0,0 +1,192 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | Deutsch | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
Blowfish ist ein leistungsstarkes, schlankes Theme für [Hugo](https://gohugo.io). Es wurde mit Tailwind CSS entwickelt und bietet ein klares, minimalistisches Design, das Ihre Inhalte in den Vordergrund stellt.
![blowfish screenshot](https://github.com/nunocoracao/blowfish/blob/main/images/screenshot.png?raw=true)
🌏 [Demo-Website](https://blowfish.page/)
📑 [Theme-Dokumentation](https://blowfish.page/docs/)
🐛 [Fehlerberichte & Issues](https://github.com/nunocoracao/blowfish/issues)
💡 [Fragen & Feature-Anfragen](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
## Funktionen
- Vollständig responsives Layout mit Tailwind CSS 4
- Mehrere Farbschemata (oder vollständig anpassbar)
- Dark Mode (erzwungen ein/aus oder automatisch mit Benutzerumschaltung)
- Mehrere Homepage-Layouts einschließlich einer produktartigen Landingpage mit Hero-Bild, Statistiken und Feature-Rastern
- Schwebender Header im Glas-Look mit ⌘K / Ctrl+K Suchkürzel
- Globale Hintergrund-Leinwand mit Hero-Bereichen, die sich beim Scrollen darin auflösen
- Lesefortschrittsbalken für Artikel
- Interaktiver Homepage-Layout-Umschalter für Live-Vorschauen
- Agent-Skill, mit dem KI-Coding-Agenten (wie Claude Code) das Theme für Sie installieren und konfigurieren können
- Druckfreundliche Seiten mit dedizierten Druckstilen
- Hochgradig anpassbare Konfiguration
- Firebase-Integration zur Unterstützung dynamischer Daten
- Ansichtszähler & Like-Mechanismus
- Verwandte Artikel
- Mehrere Autoren
- Artikelserien
- Datums- und gewichtsbasierte Artikelsortierung
- Zen-Modus zum Lesen von Artikeln
- Flexibel mit beliebigen Inhaltstypen, Taxonomien und Menüs
- Kopf- und Fußzeilenmenüs
- Verschachtelte Menüs & Unternavigationsmenüs
- Scrollbares Inhaltsverzeichnis
- Mehrsprachige Inhaltsunterstützung einschließlich RTL-Sprachen
- Möglichkeit, auf Beiträge auf Websites von Drittanbietern zu verlinken
- Über 40 Shortcodes einschließlich Gallery, Timeline, GitHub-Karten, Carousels, Stats, Feature-Rastern, Steps und CTA-Buttons
- GitHub Alerts-Syntax, 15 Typen, zusammenklappbar
- Buymeacoffee-Integration
- Clientseitige Website-Suche mit Fuse.js
- Diagramme und Visualisierungen mit Mermaid
- Charts mit Chart.js
- TypeIt-Integration
- Youtube-Einbettungen mit Leistungsverbesserungen
- Mathematische Notation mit KaTeX
- SVG-Icons von FontAwesome 6
- Automatische Bildgrößenanpassung mit Hugo Pipes
- Überschriften-Anker, Inhaltsverzeichnisse, Code-Kopieren, Buttons, Badges und mehr
- HTML- und Emoji-Unterstützung in Artikeln 🎉
- SEO-freundlich mit Links zum Teilen in sozialen Medien
- Unterstützung für Fathom Analytics und Google Analytics
- RSS-Feeds, Favicons und Kommentare
- Erweiterte Anpassung mit einfachen Tailwind-Farbdefinitionen und -Stilen
- Optimiert für Leistung und Barrierefreiheit mit perfekten Lighthouse-Scores
- Vollständig dokumentiert mit regelmäßigen Updates
---
![blowfish logo](https://github.com/nunocoracao/blowfish/blob/main/logo.png?raw=true)
## Dokumentation
Blowfish verfügt über eine [umfangreiche Dokumentation](https://blowfish.page/docs/), die alle Aspekte des Themes abdeckt. Lesen Sie unbedingt die [Dokumentation](https://blowfish.page/docs/), um mehr über die Verwendung des Themes und seiner Funktionen zu erfahren.
---
## Installation
Blowfish unterstützt mehrere Installationsmethoden - als git submodule, als Hugo Module oder als vollständig manuelle Installation.
Detaillierte Anweisungen für jede Methode finden Sie in der [Installations-Dokumentation](https://blowfish.page/docs/installation). Für die einfachste Einrichtung sollten Sie die Dokumentation konsultieren. Im Folgenden finden Sie eine Schnellstartanleitung mit Submodulen, wenn Sie git verwenden, oder Hugo Modules, wenn Sie bereits Erfahrung mit der Installation von Hugo-Themes haben.
### Schnellstart mit einem KI-Agenten
Blowfish enthält einen [Agent-Skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish), der KI-Coding-Agenten — wie Claude Code — beibringt, das Theme zu installieren, zu konfigurieren und Websites damit zu erstellen. Installieren Sie ihn über den Blowfish-Plugin-Marketplace in Claude Code:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
Oder kopieren Sie einfach den Skill-Ordner in Ihr Website-Repository unter `.claude/skills/blowfish/` — Agenten erkennen Projekt-Skills automatisch. Bitten Sie dann Ihren Agenten, Blowfish für Sie einzurichten.
### Schnellstart mit Blowfish Tools
> **Hinweis:** Stellen Sie sicher, dass Sie **Node.js**, **Git** und **Hugo** installiert haben und dass Sie ein neues Hugo-Projekt erstellt haben, bevor Sie fortfahren.
Blowfish Tools ist ein CLI-Tool, das Ihnen beim Einstieg in Blowfish hilft. Es erstellt ein neues Hugo-Projekt, installiert das Theme und richtet die Theme-Konfigurationsdateien für Sie ein. Bitte [melden Sie alle Probleme, die Sie finden](https://github.com/nunocoracao/blowfish-tools).
Installieren Sie das CLI-Tool global mit npm (oder einem anderen Paketmanager):
```shell
npm i -g blowfish-tools
```
Führen Sie dann den Befehl `blowfish-tools` aus, um eine interaktive Sitzung zu starten, die Sie durch Erstellungs- und Konfigurationsanwendungsfälle führt.
```shell
blowfish-tools
```
Sie können auch den Befehl `blowfish-tools new` ausführen, um ein neues Hugo-Projekt zu erstellen und das Theme in einem Schritt zu installieren. Weitere Informationen finden Sie in der CLI-Hilfe.
```shell
blowfish-tools new mynewsite
```
### Schnellstart mit git submodules
> **Hinweis:** Stellen Sie sicher, dass Sie **Git** und **Hugo** installiert haben und dass Sie ein neues Hugo-Projekt erstellt haben, bevor Sie fortfahren.
1. Initialisieren Sie git aus Ihrem Projektverzeichnis:
```shell
git init
```
2. Konfigurieren Sie Blowfish als git submodule:
```shell
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
```
3. Löschen Sie im Stammordner Ihrer Website die von Hugo generierte Datei `hugo.toml`. Kopieren Sie die `*.toml` Konfigurationsdateien aus dem Theme in Ihren `config/_default/` Ordner.
Sie finden diese Theme-Konfigurationsdateien im Hugo-Cache-Verzeichnis oder [laden Sie eine Kopie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) von GitHub herunter.
4. Folgen Sie den Anweisungen unter [Erste Schritte](https://blowfish.page/docs/getting-started/), um Ihre Website zu konfigurieren.
### Schnellstart mit Hugo
> **Hinweis:** Stellen Sie sicher, dass Sie **Go** und **Hugo** installiert haben und dass Sie ein neues Hugo-Projekt erstellt haben, bevor Sie fortfahren.
1. Initialisieren Sie Hugo Modules aus Ihrem Projektverzeichnis:
```shell
hugo mod init github.com/<username>/<repo-name>
```
2. Erstellen Sie `config/_default/module.toml` und fügen Sie Folgendes hinzu:
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
3. Starten Sie Ihren Server mit `hugo server` und das Theme wird automatisch heruntergeladen.
4. Löschen Sie im Stammordner Ihrer Website die von Hugo generierte Datei `hugo.toml`. Kopieren Sie die `*.toml` Konfigurationsdateien aus dem Theme in Ihren `config/_default/` Ordner.
> **Hinweis:** Überschreiben Sie nicht die oben erstellte Datei `module.toml`!
Sie finden diese Theme-Konfigurationsdateien im Hugo-Cache-Verzeichnis oder [laden Sie eine Kopie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) von GitHub herunter.
5. Folgen Sie den Anweisungen unter [Erste Schritte](https://blowfish.page/docs/getting-started/), um Ihre Website zu konfigurieren.
### Theme-Updates installieren
Wenn neue Versionen veröffentlicht werden, können Sie das Theme mit Hugo aktualisieren. Führen Sie einfach `hugo mod get -u` aus Ihrem Projektverzeichnis aus und das Theme wird automatisch auf die neueste Version aktualisiert.
Detaillierte [Update-Anweisungen](https://blowfish.page/docs/installation/#installing-updates) sind in der Dokumentation verfügbar.
### Upgrade von v2 auf v3
Blowfish v3 ist vollständig abwärtskompatibel: Jede neue Funktion ist optional und es wurden keine Konfigurationsoptionen oder Templates entfernt. Git-submodule- und manuelle Installationen werden wie gewohnt ohne Änderungen aktualisiert; Hugo-Module-Nutzer ändern lediglich den Importpfad in `config/_default/module.toml` von `github.com/nunocoracao/blowfish/v2` zu `github.com/nunocoracao/blowfish/v3` und führen `hugo mod get -u` aus. Details finden Sie in den [Upgrade-Anweisungen](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3).
---
## Mitwirken
Blowfish wird sich voraussichtlich im Laufe der Zeit weiterentwickeln. Ich beabsichtige, weiterhin Funktionen hinzuzufügen und nach Bedarf Änderungen vorzunehmen.
Melden Sie sich gerne mit Problemen oder Vorschlägen für neue Funktionen, die Sie gerne sehen würden.
- 🐛 **Fehlerberichte & Issues:** Verwenden Sie [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
- 💡 **Ideen für neue Funktionen:** Eröffnen Sie eine Diskussion auf [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
- 🙋‍♀️ **Allgemeine Fragen:** Gehen Sie zu [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
Wenn Sie in der Lage sind, einen Fehler zu beheben oder eine neue Funktion zu implementieren, sind Pull Requests zu diesem Zweck willkommen. Erfahren Sie mehr in den [Richtlinien für Mitwirkende](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
---
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+192
View File
@@ -0,0 +1,192 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | Español | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
Blowfish está diseñado para ser un tema potente y ligero para [Hugo](https://gohugo.io). Está construido usando Tailwind CSS con un diseño limpio y minimalista que prioriza tu contenido.
![blowfish screenshot](https://github.com/nunocoracao/blowfish/blob/main/images/screenshot.png?raw=true)
🌏 [Sitio de demostración](https://blowfish.page/)
📑 [Documentación del tema](https://blowfish.page/docs/)
🐛 [Reportes de errores y problemas](https://github.com/nunocoracao/blowfish/issues)
💡 [Preguntas y solicitudes de funcionalidades](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
## Características
- Diseño totalmente responsive construido con Tailwind CSS 4
- Múltiples esquemas de color (o personaliza completamente el tuyo propio)
- Modo oscuro (forzado activado/desactivado o cambio automático con opción de usuario)
- Múltiples diseños de página de inicio, incluyendo una landing page estilo producto con imagen hero, estadísticas y cuadrículas de características
- Encabezado flotante con efecto cristal y atajo de búsqueda ⌘K / Ctrl+K
- Lienzo de fondo global con secciones hero que se disuelven en él al hacer scroll
- Barra de progreso de lectura para artículos
- Selector interactivo de diseños de página de inicio para previsualizaciones en vivo
- Skill de agente para que los agentes de programación con IA (como Claude Code) instalen y configuren el tema por ti
- Páginas aptas para impresión con estilos de impresión dedicados
- Configuración altamente personalizable
- Integración con Firebase para soportar datos dinámicos
- Contador de vistas y mecanismo de likes
- Artículos relacionados
- Múltiples autores
- Series de artículos
- Ordenación de artículos basada en fecha y peso
- Modo zen para lectura de artículos
- Flexible con cualquier tipo de contenido, taxonomías y menús
- Menús de encabezado y pie de página
- Menús anidados y menú de sub-navegación
- Tabla de contenidos con desplazamiento
- Soporte de contenido multilingüe incluyendo idiomas RTL
- Capacidad de enlazar a publicaciones en sitios web de terceros
- Más de 40 shortcodes incluyendo Gallery, Timeline, GitHub cards, Carousels, Stats, cuadrículas de características, Steps y botones CTA
- Sintaxis de GitHub Alerts, 15 tipos, soporte plegable
- Integración con Buymeacoffee
- Búsqueda en el sitio del lado del cliente impulsada por Fuse.js
- Diagramas y visualizaciones usando Mermaid
- Gráficos usando Chart.js
- Integración con TypeIt
- Incrustaciones de Youtube con mejoras de rendimiento
- Notación matemática usando KaTeX
- Iconos SVG de FontAwesome 6
- Redimensionamiento automático de imágenes usando Hugo Pipes
- Anclajes de encabezados, Tablas de contenidos, Copia de código, Botones, Insignias y más
- Soporte de HTML y Emoji en artículos 🎉
- SEO amigable con enlaces para compartir en redes sociales
- Soporte para Fathom Analytics y Google Analytics
- Feeds RSS, Favicons y soporte de comentarios
- Personalización avanzada usando definiciones de colores y estilos simples de Tailwind
- Optimizado para rendimiento y accesibilidad con puntuaciones perfectas en Lighthouse
- Completamente documentado con actualizaciones regulares
---
![blowfish logo](https://github.com/nunocoracao/blowfish/blob/main/logo.png?raw=true)
## Documentación
Blowfish tiene [documentación extensa](https://blowfish.page/docs/) que cubre todos los aspectos del tema. Asegúrate de [leer la documentación](https://blowfish.page/docs/) para aprender más sobre cómo usar el tema y sus características.
---
## Instalación
Blowfish soporta varios métodos de instalación - como submódulo de git, módulo de Hugo, o como una instalación completamente manual.
Las instrucciones detalladas para cada método se pueden encontrar en la documentación de [Instalación](https://blowfish.page/docs/installation). Deberías consultar la documentación para obtener la experiencia de configuración más simple. A continuación se presenta una guía de inicio rápido usando submódulos si estás usando git, o módulos de Hugo si ya tienes confianza instalando temas de Hugo.
### Inicio rápido con un agente de IA
Blowfish incluye un [agent skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish) que enseña a los agentes de programación con IA — como Claude Code — a instalar, configurar y construir sitios con el tema. Instálalo desde el marketplace de plugins de Blowfish en Claude Code:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
O simplemente copia la carpeta del skill en el repositorio de tu sitio en `.claude/skills/blowfish/` — los agentes detectan los skills de proyecto automáticamente. Después pídele a tu agente que configure Blowfish por ti.
### Inicio rápido usando Blowfish Tools
> **Nota:** Asegúrate de tener **Node.js**, **Git** y **Hugo** instalados, y de haber creado un nuevo proyecto Hugo antes de continuar.
Blowfish Tools es una herramienta CLI que te ayuda a comenzar con Blowfish. Creará un nuevo proyecto Hugo, instalará el tema y configurará los archivos de configuración del tema por ti. Por favor [reporta cualquier problema que encuentres](https://github.com/nunocoracao/blowfish-tools).
Instala la herramienta CLI globalmente usando npm (u otro gestor de paquetes):
```shell
npm i -g blowfish-tools
```
Luego ejecuta el comando `blowfish-tools` para iniciar una ejecución interactiva que te guiará a través de los casos de uso de creación y configuración.
```shell
blowfish-tools
```
También puedes ejecutar el comando `blowfish-tools new` para crear un nuevo proyecto Hugo e instalar el tema de una sola vez. Consulta la ayuda de CLI para más información.
```shell
blowfish-tools new mynewsite
```
### Inicio rápido usando submódulos de git
> **Nota:** Asegúrate de tener **Git** y **Hugo** instalados, y de haber creado un nuevo proyecto Hugo antes de continuar.
1. Desde el directorio de tu proyecto, inicializa git:
```shell
git init
```
2. Configura Blowfish como un submódulo de git:
```shell
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
```
3. En la carpeta raíz de tu sitio web, elimina el archivo `hugo.toml` que fue generado por Hugo. Copia los archivos de configuración `*.toml` del tema en tu carpeta `config/_default/`.
Encontrarás estos archivos de configuración del tema en el directorio de caché de Hugo, o [descarga una copia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) desde GitHub.
4. Sigue las instrucciones de [Primeros Pasos](https://blowfish.page/docs/getting-started/) para configurar tu sitio web.
### Inicio rápido usando Hugo
> **Nota:** Asegúrate de tener **Go** y **Hugo** instalados, y de haber creado un nuevo proyecto Hugo antes de continuar.
1. Desde el directorio de tu proyecto, inicializa los Módulos de Hugo:
```shell
hugo mod init github.com/<username>/<repo-name>
```
2. Crea `config/_default/module.toml` y agrega lo siguiente:
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
3. Inicia tu servidor usando `hugo server` y el tema se descargará automáticamente.
4. En la carpeta raíz de tu sitio web, elimina el archivo `hugo.toml` que fue generado por Hugo. Copia los archivos de configuración `*.toml` del tema en tu carpeta `config/_default/`.
> **Nota:** ¡No sobrescribas el archivo `module.toml` que creaste arriba!
Encontrarás estos archivos de configuración del tema en el directorio de caché de Hugo, o [descarga una copia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) desde GitHub.
5. Sigue las instrucciones de [Primeros Pasos](https://blowfish.page/docs/getting-started/) para configurar tu sitio web.
### Instalación de actualizaciones del tema
A medida que se publiquen nuevas versiones, puedes actualizar el tema usando Hugo. Simplemente ejecuta `hugo mod get -u` desde el directorio de tu proyecto y el tema se actualizará automáticamente a la última versión.
Las [instrucciones de actualización](https://blowfish.page/docs/installation/#installing-updates) detalladas están disponibles en la documentación.
### Actualización de v2 a v3
Blowfish v3 es totalmente retrocompatible: cada nueva característica es opcional y no se ha eliminado ninguna opción de configuración ni plantilla. Las instalaciones con submódulo de git y manuales se actualizan como de costumbre sin cambios; los usuarios de módulos de Hugo solo tienen que cambiar la ruta de importación en `config/_default/module.toml` de `github.com/nunocoracao/blowfish/v2` a `github.com/nunocoracao/blowfish/v3` y ejecutar `hugo mod get -u`. Consulta las [instrucciones de actualización](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3) para más detalles.
---
## Contribuciones
Se espera que Blowfish evolucione con el tiempo. Tengo la intención de seguir agregando características y haciendo cambios según sea necesario.
Siéntete libre de ponerte en contacto con cualquier problema o sugerencia de nuevas características que te gustaría ver.
- 🐛 **Reportes de errores y problemas:** Usa [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
- 💡 **Ideas para nuevas características:** Abre una discusión en [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
- 🙋‍♀️ **Preguntas generales:** Dirígete a [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
Si puedes corregir un error o implementar una nueva característica, acepto PRs para este propósito. Aprende más en las [guías de contribución](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
---
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+192
View File
@@ -0,0 +1,192 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | Français | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
Blowfish est conçu pour être un thème puissant et léger pour [Hugo](https://gohugo.io). Il est construit avec Tailwind CSS avec un design épuré et minimaliste qui donne la priorité à votre contenu.
![blowfish screenshot](https://github.com/nunocoracao/blowfish/blob/main/images/screenshot.png?raw=true)
🌏 [Site de démonstration](https://blowfish.page/)
📑 [Documentation du thème](https://blowfish.page/docs/)
🐛 [Rapports de bugs et problèmes](https://github.com/nunocoracao/blowfish/issues)
💡 [Questions et demandes de fonctionnalités](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
## Fonctionnalités
- Disposition entièrement responsive construite avec Tailwind CSS 4
- Plusieurs palettes de couleurs (ou personnalisez entièrement la vôtre)
- Mode sombre (forcé activé/désactivé ou basculement automatique avec commutateur utilisateur)
- Plusieurs mises en page pour la page d'accueil, y compris une page d'atterrissage de style produit avec image hero, statistiques et grilles de fonctionnalités
- En-tête flottant effet verre avec raccourci de recherche ⌘K / Ctrl+K
- Canevas d'arrière-plan global avec des sections hero qui s'y dissolvent au défilement
- Barre de progression de lecture pour les articles
- Sélecteur interactif de mise en page de la page d'accueil pour des aperçus en direct
- Skill d'agent permettant aux agents de codage IA (comme Claude Code) d'installer et de configurer le thème pour vous
- Pages adaptées à l'impression avec des styles d'impression dédiés
- Configuration hautement personnalisable
- Intégration Firebase pour prendre en charge les données dynamiques
- Compteur de vues et mécanisme de likes
- Articles connexes
- Plusieurs auteurs
- Séries d'articles
- Tri des articles basé sur la date et le poids
- Mode Zen pour la lecture d'articles
- Flexible avec tous les types de contenu, taxonomies et menus
- Menus d'en-tête et de pied de page
- Menus imbriqués et menu de sous-navigation
- Table des matières défilable
- Support du contenu multilingue incluant la prise en charge des langues RTL
- Possibilité de lier des articles sur des sites web tiers
- Plus de 40 shortcodes incluant Gallery, Timeline, GitHub cards, Carousels, Stats, grilles de fonctionnalités, Steps et boutons CTA
- Syntaxe GitHub Alerts, 15 types, support pliable
- Intégration Buymeacoffee
- Recherche côté client alimentée par Fuse.js
- Diagrammes et visualisations utilisant Mermaid
- Graphiques utilisant Chart.js
- Intégration TypeIt
- Intégrations Youtube avec améliorations de performance
- Notation mathématique utilisant KaTeX
- Icônes SVG de FontAwesome 6
- Redimensionnement automatique des images utilisant Hugo Pipes
- Ancres de titres, Tables des matières, Copie de code, Boutons, Badges et plus
- Support HTML et Emoji dans les articles 🎉
- SEO optimisé avec liens pour partage sur les réseaux sociaux
- Support de Fathom Analytics et Google Analytics
- Flux RSS, Favicons et support des commentaires
- Personnalisation avancée utilisant de simples définitions de couleurs et styles Tailwind
- Optimisé pour les performances et l'accessibilité avec des scores Lighthouse parfaits
- Entièrement documenté avec des mises à jour régulières
---
![blowfish logo](https://github.com/nunocoracao/blowfish/blob/main/logo.png?raw=true)
## Documentation
Blowfish dispose d'une [documentation complète](https://blowfish.page/docs/) qui couvre tous les aspects du thème. Assurez-vous de [lire la documentation](https://blowfish.page/docs/) pour en savoir plus sur l'utilisation du thème et de ses fonctionnalités.
---
## Installation
Blowfish prend en charge plusieurs méthodes d'installation - en tant que sous-module git, module Hugo, ou en tant qu'installation complètement manuelle.
Des instructions détaillées pour chaque méthode se trouvent dans la documentation [Installation](https://blowfish.page/docs/installation). Vous devriez consulter la documentation pour l'expérience de configuration la plus simple. Ci-dessous se trouve un guide de démarrage rapide utilisant les sous-modules si vous utilisez git, ou les modules Hugo si vous êtes déjà à l'aise avec l'installation de thèmes Hugo.
### Démarrage rapide avec un agent IA
Blowfish inclut un [agent skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish) qui apprend aux agents de codage IA — comme Claude Code — à installer, configurer et construire des sites avec le thème. Installez-le depuis la marketplace de plugins Blowfish dans Claude Code :
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
Ou copiez simplement le dossier du skill dans le dépôt de votre site à l'emplacement `.claude/skills/blowfish/` — les agents détectent automatiquement les skills de projet. Demandez ensuite à votre agent de configurer Blowfish pour vous.
### Démarrage rapide avec Blowfish Tools
> **Note :** Assurez-vous d'avoir **Node.js**, **Git** et **Hugo** installés, et d'avoir créé un nouveau projet Hugo avant de continuer.
Blowfish Tools est un outil CLI qui vous aide à démarrer avec Blowfish. Il créera un nouveau projet Hugo, installera le thème et configurera les fichiers de configuration du thème pour vous. Veuillez [signaler tout problème que vous rencontrez](https://github.com/nunocoracao/blowfish-tools).
Installez l'outil CLI globalement en utilisant npm (ou un autre gestionnaire de paquets) :
```shell
npm i -g blowfish-tools
```
Ensuite, exécutez la commande `blowfish-tools` pour démarrer une exécution interactive qui vous guidera à travers les cas d'utilisation de création et de configuration.
```shell
blowfish-tools
```
Vous pouvez également exécuter la commande `blowfish-tools new` pour créer un nouveau projet Hugo et installer le thème en une seule fois. Consultez l'aide du CLI pour plus d'informations.
```shell
blowfish-tools new mynewsite
```
### Démarrage rapide avec les sous-modules git
> **Note :** Assurez-vous d'avoir **Git** et **Hugo** installés, et d'avoir créé un nouveau projet Hugo avant de continuer.
1. Depuis le répertoire de votre projet, initialisez git :
```shell
git init
```
2. Configurez Blowfish comme un sous-module git :
```shell
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
```
3. Dans le dossier racine de votre site web, supprimez le fichier `hugo.toml` qui a été généré par Hugo. Copiez les fichiers de configuration `*.toml` du thème dans votre dossier `config/_default/`.
Vous trouverez ces fichiers de configuration du thème dans le répertoire cache de Hugo, ou [téléchargez une copie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) depuis GitHub.
4. Suivez les instructions [Pour commencer](https://blowfish.page/docs/getting-started/) pour configurer votre site web.
### Démarrage rapide avec Hugo
> **Note :** Assurez-vous d'avoir **Go** et **Hugo** installés, et d'avoir créé un nouveau projet Hugo avant de continuer.
1. Depuis le répertoire de votre projet, initialisez les modules Hugo :
```shell
hugo mod init github.com/<username>/<repo-name>
```
2. Créez `config/_default/module.toml` et ajoutez ce qui suit :
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
3. Démarrez votre serveur en utilisant `hugo server` et le thème sera téléchargé automatiquement.
4. Dans le dossier racine de votre site web, supprimez le fichier `hugo.toml` qui a été généré par Hugo. Copiez les fichiers de configuration `*.toml` du thème dans votre dossier `config/_default/`.
> **Note :** Ne remplacez pas le fichier `module.toml` que vous avez créé ci-dessus !
Vous trouverez ces fichiers de configuration du thème dans le répertoire cache de Hugo, ou [téléchargez une copie](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) depuis GitHub.
5. Suivez les instructions [Pour commencer](https://blowfish.page/docs/getting-started/) pour configurer votre site web.
### Installation des mises à jour du thème
Au fur et à mesure que de nouvelles versions sont publiées, vous pouvez mettre à jour le thème en utilisant Hugo. Exécutez simplement `hugo mod get -u` depuis le répertoire de votre projet et le thème se mettra automatiquement à jour vers la dernière version.
Des [instructions de mise à jour](https://blowfish.page/docs/installation/#installing-updates) détaillées sont disponibles dans la documentation.
### Mise à niveau de v2 vers v3
Blowfish v3 est entièrement rétrocompatible : chaque nouvelle fonctionnalité est optionnelle et aucune option de configuration ni aucun template n'a été supprimé. Les installations par sous-module git et manuelles se mettent à niveau comme d'habitude, sans aucun changement ; les utilisateurs de modules Hugo doivent simplement changer le chemin d'import dans `config/_default/module.toml` de `github.com/nunocoracao/blowfish/v2` à `github.com/nunocoracao/blowfish/v3` puis exécuter `hugo mod get -u`. Consultez les [instructions de mise à niveau](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3) pour plus de détails.
---
## Contribuer
Blowfish est destiné à évoluer au fil du temps. J'ai l'intention de continuer à ajouter des fonctionnalités et à apporter des modifications selon les besoins.
N'hésitez pas à me contacter pour tout problème ou suggestion de nouvelles fonctionnalités que vous aimeriez voir.
- 🐛 **Rapports de bugs et problèmes :** Utilisez [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
- 💡 **Idées de nouvelles fonctionnalités :** Ouvrez une discussion sur [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
- 🙋‍♀️ **Questions générales :** Rendez-vous sur [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
Si vous êtes en mesure de corriger un bug ou de mettre en œuvre une nouvelle fonctionnalité, j'accueille les PR à cette fin. Apprenez-en plus dans les [directives de contribution](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
---
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+59 -17
View File
@@ -1,8 +1,8 @@
**[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | Indonesian | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md)**
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | Indonesian
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.87.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
@@ -13,23 +13,27 @@ Blowfish dirancang sebagai tema yang kuat dan ringan untuk [Hugo](https://gohugo
🌏 [Situs demo](https://blowfish.page/)
📑 [Dokumentasi tema](https://blowfish.page/docs/)
💎 [Toko Merch](http://tee.pub/lic/qwSlWVBL5zc)
🐛 [Laporan bug & masalah](https://github.com/nunocoracao/blowfish/issues)
💡 [Pertanyaan & permintaan fitur](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Belikan Saya Kopi" style="height: 60px !important;width: 217px !important;" ></a>
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Toko Merch &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
## Fitur
- Tata letak responsif sepenuhnya dengan Tailwind CSS 3.0
- Tata letak responsif sepenuhnya dengan Tailwind CSS 4
- Beragam skema warna (atau sesuaikan sendiri)
- Mode gelap (paksa aktif/nonaktif atau otomatis dengan pengaturan pengguna)
- Beragam tata letak halaman utama, termasuk landing page bergaya produk dengan gambar hero, statistik, dan grid fitur
- Header kaca mengambang dengan pintasan pencarian ⌘K / Ctrl+K
- Kanvas latar belakang global dengan bagian hero yang melebur ke dalamnya saat digulir
- Bilah kemajuan membaca untuk artikel
- Pengalih tata letak halaman utama interaktif untuk pratinjau langsung
- Agent skill agar agen pemrograman AI (seperti Claude Code) dapat menginstal dan mengonfigurasi tema untuk Anda
- Halaman ramah cetak dengan gaya cetak khusus
- Konfigurasi yang sangat dapat disesuaikan
- Integrasi Firebase untuk mendukung data dinamis
- Penghitung tampilan & mekanisme suka
- Artikel terkait
- Beragam tata letak halaman utama
- Dukungan untuk banyak penulis
- Seri artikel
- Penyortiran artikel berdasarkan tanggal dan bobot
@@ -40,7 +44,8 @@ Blowfish dirancang sebagai tema yang kuat dan ringan untuk [Hugo](https://gohugo
- Daftar isi yang dapat digulir
- Dukungan untuk konten multibahasa termasuk bahasa RTL
- Kemampuan untuk menautkan ke artikel di situs web pihak ketiga
- Dukungan untuk beberapa shortcode seperti Galeri, Timeline, Kartu GitHub, dan Carousel
- Lebih dari 40 shortcode termasuk Galeri, Timeline, Kartu GitHub, Carousel, Statistik, Grid fitur, Langkah, dan tombol CTA
- Sintaks GitHub Alerts, 15 jenis, dukungan lipat
- Integrasi BuyMeACoffee
- Pencarian situs berbasis klien dengan Fuse.js
- Diagram dan visualisasi menggunakan Mermaid
@@ -73,13 +78,24 @@ Blowfish memiliki [dokumentasi lengkap](https://blowfish.page/docs/) yang mencak
Blowfish mendukung beberapa metode instalasi - sebagai submodul git, Modul Hugo, atau instalasi manual sepenuhnya.
Instruksi terperinci untuk setiap metode dapat ditemukan dalam [dokumentasi instalasi](https://blowfish.page/docs/installation).
Instruksi terperinci untuk setiap metode dapat ditemukan dalam [dokumentasi instalasi](https://blowfish.page/docs/installation). Anda sebaiknya membaca dokumentasi untuk pengalaman penyiapan yang paling sederhana. Berikut ini adalah panduan memulai cepat menggunakan submodul jika Anda menggunakan git, atau modul Hugo jika Anda sudah terbiasa menginstal tema Hugo.
### Instalasi Cepat Menggunakan Agen AI
Blowfish menyertakan sebuah [agent skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish) yang mengajarkan agen pemrograman AI — seperti Claude Code — cara menginstal, mengonfigurasi, dan membangun situs dengan tema ini. Instal dari marketplace plugin Blowfish di Claude Code:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
Atau cukup salin folder skill ke repositori situs Anda di `.claude/skills/blowfish/` — agen akan mengenali skill proyek secara otomatis. Kemudian minta agen Anda untuk menyiapkan Blowfish untuk Anda.
### Instalasi Cepat Menggunakan Blowfish Tools
> **Catatan:** Pastikan Anda sudah menginstal **Node.js**, **Git**, dan **Hugo**, serta telah membuat proyek Hugo sebelum melanjutkan.
Kami baru saja meluncurkan alat CLI baru untuk membantu Anda memulai dengan Blowfish. Ini akan membuat proyek Hugo baru, menginstal tema, dan mengatur file konfigurasi tema untuk Anda.
Blowfish Tools adalah alat CLI yang membantu Anda memulai dengan Blowfish. Alat ini akan membuat proyek Hugo baru, menginstal tema, dan mengatur file konfigurasi tema untuk Anda. Silakan [laporkan masalah apa pun yang Anda temukan](https://github.com/nunocoracao/blowfish-tools).
Instal alat CLI secara global menggunakan npm (atau manajer paket lainnya):
```shell
@@ -112,17 +128,45 @@ blowfish-tools new mynewsite
3. Hapus file `hugo.toml` di root proyek dan salin file `*.toml` dari tema ke dalam folder `config/_default/`.
Anda akan menemukan file konfigurasi tema ini di direktori cache Hugo, atau [unduh salinannya](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) dari GitHub.
4. Ikuti petunjuk [Memulai](https://blowfish.page/docs/getting-started/) untuk mengonfigurasi situs web Anda.
### Memperbarui Tema
### Instalasi Cepat Menggunakan Hugo
Untuk memperbarui tema ke rilis terbaru, cukup jalankan perintah berikut di direktori proyek Anda:
```shell
hugo mod get -u
```
> **Catatan:** Pastikan Anda sudah menginstal **Go** dan **Hugo**, serta telah membuat proyek Hugo baru sebelum melanjutkan.
1. Dari direktori proyek Anda, inisialisasi Hugo Modules:
```shell
hugo mod init github.com/<username>/<repo-name>
```
2. Buat `config/_default/module.toml` dan tambahkan berikut ini:
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
3. Jalankan server Anda menggunakan `hugo server` dan tema akan diunduh secara otomatis.
4. Di folder root situs web Anda, hapus file `hugo.toml` yang dibuat oleh Hugo. Salin file konfigurasi `*.toml` dari tema ke folder `config/_default/` Anda.
> **Catatan:** Jangan menimpa file `module.toml` yang Anda buat di atas!
Anda akan menemukan file konfigurasi tema ini di direktori cache Hugo, atau [unduh salinannya](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) dari GitHub.
5. Ikuti petunjuk [Memulai](https://blowfish.page/docs/getting-started/) untuk mengonfigurasi situs web Anda.
### Menginstal Pembaruan Tema
Saat rilis baru diterbitkan, Anda dapat memperbarui tema menggunakan Hugo. Cukup jalankan `hugo mod get -u` dari direktori proyek Anda dan tema akan diperbarui secara otomatis ke rilis terbaru.
Instruksi pembaruan selengkapnya tersedia dalam [dokumentasi instalasi](https://blowfish.page/docs/installation/#installing-updates).
### Peningkatan dari v2 ke v3
Blowfish v3 sepenuhnya kompatibel dengan versi sebelumnya: setiap fitur baru bersifat opsional dan tidak ada opsi konfigurasi atau templat yang dihapus. Instalasi submodul git dan manual diperbarui seperti biasa tanpa perubahan apa pun; pengguna modul Hugo cukup mengubah jalur impor di `config/_default/module.toml` dari `github.com/nunocoracao/blowfish/v2` menjadi `github.com/nunocoracao/blowfish/v3` lalu menjalankan `hugo mod get -u`. Lihat [instruksi peningkatan](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3) untuk detailnya.
---
## Kontribusi
@@ -137,8 +181,6 @@ Jika Anda bisa memperbaiki bug atau menambahkan fitur baru, kontribusi dalam ben
---
## Grafik Stargazers
[![Stargazers over time](https://starchart.cc/nunocoracao/blowfish.svg)](https://starchart.cc/nunocoracao/blowfish)
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+29 -15
View File
@@ -1,7 +1,7 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | 日本語
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | 日本語 | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.87.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
@@ -13,27 +13,29 @@ Blowfishは[Hugo](https://gohugo.io)のために設計された強力で軽量
🌏 [デモサイト](https://blowfish.page/)
📑 [ドキュメント](https://blowfish.page/docs/)
💎 [グッズストア](http://tee.pub/lic/qwSlWVBL5zc)
🐛 [バグ報告と問題点](https://github.com/nunocoracao/blowfish/issues)
💡 [質問と機能リクエスト](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
## 機能
- Tailwind CSS 3.0 で構築された、完璧なレスポンシブデザイン
- Tailwind CSS 4 で構築された、完璧なレスポンシブデザイン
- 複数の配色 (または、自分で完全にカスタマイズ可能)
- ダークモード (強制オン/オフ か 自動選択・ユーザー切り替え)
- ヒーロー画像・統計・機能グリッドを備えたプロダクト風ランディングページを含む、複数のホームページレイアウト
- ⌘K / Ctrl+K 検索ショートカット付きのフローティング グラスヘッダー
- スクロールに合わせてヒーローが溶け込むグローバル背景キャンバス
- 記事の読了プログレスバー
- ライブプレビューできるインタラクティブなホームページレイアウト切り替え機能
- AI コーディングエージェント (Claude Code など) がテーマのインストールと設定を代行できるエージェントスキル
- 専用の印刷スタイルによる印刷に適したページ
- 高度なカスタマイズが可能な設定
- Firebase 連携で動的データをサポート
- 閲覧数といいね機能
- 関連記事
- 複数のホームページレイアウト
- 複数人の著者
- シリーズ記事
- 日付と価値付けによる記事の並べ替え
@@ -44,7 +46,8 @@ Blowfishは[Hugo](https://gohugo.io)のために設計された強力で軽量
- スクロール可能な目次
- RTL 言語を含む多言語コンテンツのサポート
- サードパーティー ウェブサイトの投稿へのリンク
- ギャラリー、タイムライン、GitHub カード、カルーセルなど、複数のショートコードに対応
- ギャラリー、タイムライン、GitHub カード、カルーセル、統計、機能グリッド、ステップ、CTA ボタンなど、40 種類以上のショートコード
- GitHub Alerts 構文、15 種類、折りたたみ対応
- Buy Me a Coffee 連携
- Fuse.js を利用したクライアントサイドのサイト内検索
- Mermaid を使用したダイアグラムや視覚化
@@ -79,11 +82,22 @@ Blowfish は、git サブモジュール、Hugo モジュール、または完
各方法の詳細な手順は、[インストール](https://blowfish.page/docs/installation)ドキュメントに記載されています。最も簡単なセットアップ方法については、ドキュメントを参照してください。以下にクイックスタートガイドを示します。git を使用している場合はサブモジュール、Hugo テーマのインストールに慣れている場合は Hugo モジュールを使用するのがおすすめです。
### AI エージェントを使ったクイックスタート
Blowfish には、AI コーディングエージェント (Claude Code など) にテーマのインストール、設定、サイト構築の方法を教える[エージェントスキル](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish)が同梱されています。Claude Code で Blowfish プラグインマーケットプレイスからインストールしてください:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
または、スキルフォルダをサイトのリポジトリの `.claude/skills/blowfish/` にコピーするだけでも構いません。エージェントはプロジェクトスキルを自動的に認識します。あとはエージェントに Blowfish のセットアップを依頼してください。
### Blowfish Tools を使ったクイックスタート
> **注意:** **Node.js**、**Git**、**Hugo** がインストールされていること、そして先に進む前に新しい Hugo プロジェクトが作成されていることを確認してください。
Blowfish を使い始めるのに役立つ新しい CLI ツールをリリースしました。このツールは、新しい Hugo プロジェクトを作成し、テーマをインストールし、テーマ設定ファイルをセットアップします。まだベータ版なので、[問題を見つけたら報告してください](https://github.com/nunocoracao/blowfish-tools)。
Blowfish Tools は、Blowfish を使い始めるのに役立つ CLI ツールです。このツールは、新しい Hugo プロジェクトを作成し、テーマをインストールし、テーマ設定ファイルをセットアップします。[問題を見つけたら報告してください](https://github.com/nunocoracao/blowfish-tools)。
npm(または他のパッケージマネージャー)を使って CLI ツールをグローバルにインストールします:
```shell
@@ -136,7 +150,7 @@ blowfish-tools new mynewsite
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v2"
path = "github.com/nunocoracao/blowfish/v3"
```
3. `hugo server` を使用してサーバーを起動すると、テーマが自動的にダウンロードされます。
@@ -155,6 +169,10 @@ blowfish-tools new mynewsite
詳細な[アップデート手順](https://blowfish.page/docs/installation/#installing-updates)はドキュメントに記載されています。
### v2 から v3 へのアップグレード
Blowfish v3 は完全な後方互換性を備えています。新機能はすべてオプトインで、設定オプションやテンプレートの削除は一切ありません。git サブモジュールや手動インストールの場合は、変更なしで通常どおりアップグレードできます。Hugo モジュールを使用している場合は、`config/_default/module.toml` のインポートパスを `github.com/nunocoracao/blowfish/v2` から `github.com/nunocoracao/blowfish/v3` に変更して `hugo mod get -u` を実行するだけです。詳細は[アップグレード手順](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3)を参照してください。
---
## 貢献
@@ -171,8 +189,4 @@ Blowfish は時間とともに進化していく予定です。必要に応じ
---
## スター数の推移
[![Stargazers over time](https://starchart.cc/nunocoracao/blowfish.svg)](https://starchart.cc/nunocoracao/blowfish)
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+29 -15
View File
@@ -1,7 +1,7 @@
English | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md)
English | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.87.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
@@ -13,27 +13,29 @@ Blowfish is designed to be a powerful, lightweight theme for [Hugo](https://gohu
🌏 [Demo site](https://blowfish.page/)
📑 [Theme documentation](https://blowfish.page/docs/)
💎 [Merch Store](http://tee.pub/lic/qwSlWVBL5zc)
🐛 [Bug reports & issues](https://github.com/nunocoracao/blowfish/issues)
💡 [Questions & feature requests](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
## Features
- Fully responsive layout built with Tailwind CSS 3.0
- Fully responsive layout built with Tailwind CSS 4
- Multiple colour schemes (or fully customise your own)
- Dark mode (forced on/off or auto-switching with user toggle)
- Multiple homepage layouts including a product-style landing page with hero image, stats, and feature grids
- Floating glass header with ⌘K / Ctrl+K search shortcut
- Global background canvas with heroes that dissolve into it on scroll
- Reading progress bar for articles
- Interactive homepage layout switcher for live previews
- Agent skill so AI coding agents (like Claude Code) can install and configure the theme for you
- Print-friendly pages with dedicated print styles
- Highly customisable configuration
- Firebase integration to support dynamic data
- Views count & like mechanism
- Related articles
- Multiple homepage layouts
- Multiple authors
- Series of articles
- Date and weight based article sorting
@@ -44,7 +46,8 @@ Blowfish is designed to be a powerful, lightweight theme for [Hugo](https://gohu
- Scrollable table of contents
- Multilingual content support including support for RTL languages
- Ability to link to posts on third-party websites
- Support for several shortcodes like Gallery, Timeline, GitHub cards, and Carousels
- 40+ shortcodes including Gallery, Timeline, GitHub cards, Carousels, Stats, Feature grids, Steps, and CTA buttons
- GitHub Alerts syntax, 15 types, collapsible support
- Buymeacoffee integration
- Client-side site search powered by Fuse.js
- Diagrams and visualisations using Mermaid
@@ -79,11 +82,22 @@ Blowfish supports several installation methods - as a git submodule, a Hugo Modu
Detailed instructions for each method can be found in the [Installation](https://blowfish.page/docs/installation) docs. You should consult the documentation for the simplest setup experience. Below is a quick start guide using submodules if you are using git, or Hugo modules if you're already confident installing Hugo themes.
### Quick start with an AI agent
Blowfish ships an [agent skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish) that teaches AI coding agents — like Claude Code — how to install, configure, and build sites with the theme. Install it from the Blowfish plugin marketplace in Claude Code:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
Or simply copy the skill folder into your site repository at `.claude/skills/blowfish/` — agents pick up project skills automatically. Then ask your agent to set up Blowfish for you.
### Quick start using Blowfish Tools
> **Note:** Ensure you have **Node.js**, **Git** and **Hugo** installed, and that you have created a new Hugo project before proceeding.
We just launched a new CLI tool to help you get started with Blowfish. It will create a new Hugo project, install the theme and set up the theme configuration files for you. It's still in beta so please [report any issues you find](https://github.com/nunocoracao/blowfish-tools).
Blowfish Tools is a CLI that helps you get started with Blowfish. It will create a new Hugo project, install the theme and set up the theme configuration files for you. Please [report any issues you find](https://github.com/nunocoracao/blowfish-tools).
Install the CLI tool globally using npm (or other package manager):
```shell
@@ -136,7 +150,7 @@ blowfish-tools new mynewsite
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v2"
path = "github.com/nunocoracao/blowfish/v3"
```
3. Start your server using `hugo server` and the theme will be downloaded automatically.
@@ -155,6 +169,10 @@ As new releases are posted, you can update the theme using Hugo. Simply run `hug
Detailed [update instructions](https://blowfish.page/docs/installation/#installing-updates) are available in the docs.
### Upgrading from v2 to v3
Blowfish v3 is fully backwards compatible: every new feature is opt-in and no configuration options or templates were removed. Git submodule and manual installs upgrade as usual with no changes; Hugo module users just change the import path in `config/_default/module.toml` from `github.com/nunocoracao/blowfish/v2` to `github.com/nunocoracao/blowfish/v3` and run `hugo mod get -u`. See the [upgrade instructions](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3) for details.
---
## Contributing
@@ -171,8 +189,4 @@ If you're able to fix a bug or implement a new feature, I welcome PRs for this p
---
## Stargazers over time
[![Stargazers over time](https://starchart.cc/nunocoracao/blowfish.svg)](https://starchart.cc/nunocoracao/blowfish)
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+192
View File
@@ -0,0 +1,192 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | Português (BR) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
Blowfish foi projetado para ser um tema poderoso e leve para [Hugo](https://gohugo.io). É construído usando Tailwind CSS com um design limpo e minimalista que prioriza o seu conteúdo.
![blowfish screenshot](https://github.com/nunocoracao/blowfish/blob/main/images/screenshot.png?raw=true)
🌏 [Site de demonstração](https://blowfish.page/)
📑 [Documentação do tema](https://blowfish.page/docs/)
🐛 [Relatórios de bugs e problemas](https://github.com/nunocoracao/blowfish/issues)
💡 [Perguntas e solicitações de recursos](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
## Recursos
- Layout totalmente responsivo construído com Tailwind CSS 4
- Múltiplos esquemas de cores (ou personalize completamente o seu próprio)
- Modo escuro (forçado ligado/desligado ou alternância automática com botão do usuário)
- Múltiplos layouts de página inicial, incluindo uma landing page estilo produto com imagem hero, estatísticas e grades de recursos
- Cabeçalho flutuante com efeito de vidro e atalho de busca ⌘K / Ctrl+K
- Tela de fundo global com seções hero que se dissolvem nela ao rolar a página
- Barra de progresso de leitura para artigos
- Seletor interativo de layouts da página inicial para pré-visualizações ao vivo
- Skill de agente para que agentes de programação com IA (como o Claude Code) instalem e configurem o tema para você
- Páginas adequadas para impressão com estilos de impressão dedicados
- Configuração altamente personalizável
- Integração com Firebase para suportar dados dinâmicos
- Contagem de visualizações e mecanismo de curtidas
- Artigos relacionados
- Múltiplos autores
- Séries de artigos
- Ordenação de artigos baseada em data e peso
- Modo zen para leitura de artigos
- Flexível com qualquer tipo de conteúdo, taxonomias e menus
- Menus de cabeçalho e rodapé
- Menus aninhados e menu de sub-navegação
- Índice com rolagem
- Suporte a conteúdo multilíngue incluindo suporte para idiomas RTL
- Capacidade de linkar para posts em sites de terceiros
- Mais de 40 shortcodes incluindo Gallery, Timeline, GitHub cards, Carousels, Stats, grades de recursos, Steps e botões CTA
- Sintaxe de alertas do GitHub, 15 tipos, suporte recolhível
- Integração com Buymeacoffee
- Busca no site do lado do cliente alimentada por Fuse.js
- Diagramas e visualizações usando Mermaid
- Gráficos usando Chart.js
- Integração com TypeIt
- Embeds do Youtube com melhorias de performance
- Notação matemática usando KaTeX
- Ícones SVG do FontAwesome 6
- Redimensionamento automático de imagens usando Hugo Pipes
- Âncoras de cabeçalho, Índices, Cópia de código, Botões, Badges e mais
- Suporte a HTML e Emoji em artigos 🎉
- SEO amigável com links para compartilhamento em redes sociais
- Suporte a Fathom Analytics e Google Analytics
- Suporte a feeds RSS, Favicons e comentários
- Personalização avançada usando definições simples de cores e estilos do Tailwind
- Otimizado para performance e acessibilidade com pontuações perfeitas no Lighthouse
- Totalmente documentado com atualizações regulares
---
![blowfish logo](https://github.com/nunocoracao/blowfish/blob/main/logo.png?raw=true)
## Documentação
Blowfish possui [documentação extensa](https://blowfish.page/docs/) que cobre todos os aspectos do tema. Certifique-se de [ler a documentação](https://blowfish.page/docs/) para saber mais sobre como usar o tema e seus recursos.
---
## Instalação
Blowfish suporta vários métodos de instalação - como submódulo git, Hugo Module, ou como uma instalação completamente manual.
Instruções detalhadas para cada método podem ser encontradas na documentação de [Instalação](https://blowfish.page/docs/installation). Você deve consultar a documentação para a experiência de configuração mais simples. Abaixo está um guia de início rápido usando submódulos se você estiver usando git, ou Hugo modules se você já estiver confiante em instalar temas Hugo.
### Início rápido com um agente de IA
Blowfish inclui um [agent skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish) que ensina agentes de programação com IA — como o Claude Code — a instalar, configurar e construir sites com o tema. Instale-o a partir do marketplace de plugins do Blowfish no Claude Code:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
Ou simplesmente copie a pasta do skill para o repositório do seu site em `.claude/skills/blowfish/` — os agentes detectam skills de projeto automaticamente. Depois peça ao seu agente para configurar o Blowfish para você.
### Início rápido usando Blowfish Tools
> **Nota:** Certifique-se de ter **Node.js**, **Git** e **Hugo** instalados, e que você criou um novo projeto Hugo antes de prosseguir.
Blowfish Tools é uma ferramenta CLI que ajuda você a começar com Blowfish. Ela criará um novo projeto Hugo, instalará o tema e configurará os arquivos de configuração do tema para você. Por favor [reporte quaisquer problemas que encontrar](https://github.com/nunocoracao/blowfish-tools).
Instale a ferramenta CLI globalmente usando npm (ou outro gerenciador de pacotes):
```shell
npm i -g blowfish-tools
```
Em seguida, execute o comando `blowfish-tools` para iniciar uma execução interativa que o guiará pelos casos de uso de criação e configuração.
```shell
blowfish-tools
```
Você também pode executar o comando `blowfish-tools new` para criar um novo projeto Hugo e instalar o tema de uma vez. Verifique a ajuda da CLI para mais informações.
```shell
blowfish-tools new mynewsite
```
### Início rápido usando submódulos git
> **Nota:** Certifique-se de ter **Git** e **Hugo** instalados, e que você criou um novo projeto Hugo antes de prosseguir.
1. Do diretório do seu projeto, inicialize o git:
```shell
git init
```
2. Configure Blowfish como um submódulo git:
```shell
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
```
3. Na pasta raiz do seu site, exclua o arquivo `hugo.toml` que foi gerado pelo Hugo. Copie os arquivos de configuração `*.toml` do tema para sua pasta `config/_default/`.
Você encontrará esses arquivos de configuração do tema no diretório de cache do Hugo, ou [baixe uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
4. Siga as instruções de [Primeiros Passos](https://blowfish.page/docs/getting-started/) para configurar seu site.
### Início rápido usando Hugo
> **Nota:** Certifique-se de ter **Go** e **Hugo** instalados, e que você criou um novo projeto Hugo antes de prosseguir.
1. Do diretório do seu projeto, inicialize os Hugo Modules:
```shell
hugo mod init github.com/<username>/<repo-name>
```
2. Crie `config/_default/module.toml` e adicione o seguinte:
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
3. Inicie seu servidor usando `hugo server` e o tema será baixado automaticamente.
4. Na pasta raiz do seu site, exclua o arquivo `hugo.toml` que foi gerado pelo Hugo. Copie os arquivos de configuração `*.toml` do tema para sua pasta `config/_default/`.
> **Nota:** Não sobrescreva o arquivo `module.toml` que você criou acima!
Você encontrará esses arquivos de configuração do tema no diretório de cache do Hugo, ou [baixe uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
5. Siga as instruções de [Primeiros Passos](https://blowfish.page/docs/getting-started/) para configurar seu site.
### Instalando atualizações do tema
À medida que novos lançamentos são publicados, você pode atualizar o tema usando Hugo. Simplesmente execute `hugo mod get -u` do diretório do seu projeto e o tema será atualizado automaticamente para a versão mais recente.
[Instruções detalhadas de atualização](https://blowfish.page/docs/installation/#installing-updates) estão disponíveis na documentação.
### Atualizando da v2 para a v3
Blowfish v3 é totalmente retrocompatível: todos os novos recursos são opcionais e nenhuma opção de configuração ou template foi removida. As instalações por submódulo git e manuais são atualizadas normalmente, sem alterações; usuários de módulos Hugo só precisam alterar o caminho de importação em `config/_default/module.toml` de `github.com/nunocoracao/blowfish/v2` para `github.com/nunocoracao/blowfish/v3` e executar `hugo mod get -u`. Consulte as [instruções de atualização](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3) para mais detalhes.
---
## Contribuindo
Blowfish deve evoluir ao longo do tempo. Pretendo continuar adicionando recursos e fazendo alterações conforme necessário.
Sinta-se à vontade para entrar em contato com quaisquer problemas ou sugestões de novos recursos que você gostaria de ver.
- 🐛 **Relatórios de bugs e problemas:** Use [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
- 💡 **Ideias para novos recursos:** Abra uma discussão em [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
- 🙋‍♀️ **Perguntas gerais:** Vá para [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
Se você for capaz de corrigir um bug ou implementar um novo recurso, dou as boas-vindas a PRs para este propósito. Saiba mais nas [diretrizes de contribuição](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
---
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+192
View File
@@ -0,0 +1,192 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | Português (PT) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | [简体中文](https://github.com/nunocoracao/blowfish/blob/main/README.zh-cn.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
Blowfish foi desenhado para ser um tema poderoso e leve para [Hugo](https://gohugo.io). É construído com Tailwind CSS com um design limpo e minimalista que prioriza o seu conteúdo.
![blowfish screenshot](https://github.com/nunocoracao/blowfish/blob/main/images/screenshot.png?raw=true)
🌏 [Site de demonstração](https://blowfish.page/)
📑 [Documentação do tema](https://blowfish.page/docs/)
🐛 [Relatórios de erros & problemas](https://github.com/nunocoracao/blowfish/issues)
💡 [Questões & pedidos de funcionalidades](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
## Funcionalidades
- Layout totalmente responsivo construído com Tailwind CSS 4
- Múltiplos esquemas de cores (ou personalize completamente o seu próprio)
- Modo escuro (forçado ligado/desligado ou alternância automática com seletor do utilizador)
- Múltiplos layouts de página inicial, incluindo uma landing page de estilo produto com imagem hero, estatísticas e grelhas de funcionalidades
- Cabeçalho flutuante com efeito de vidro e atalho de pesquisa ⌘K / Ctrl+K
- Tela de fundo global com secções hero que se dissolvem nela ao fazer scroll
- Barra de progresso de leitura para artigos
- Seletor interativo de layouts da página inicial para pré-visualizações em direto
- Skill de agente para que agentes de programação com IA (como o Claude Code) instalem e configurem o tema por si
- Páginas adequadas para impressão com estilos de impressão dedicados
- Configuração altamente personalizável
- Integração com Firebase para suportar dados dinâmicos
- Contagem de visualizações & mecanismo de gostos
- Artigos relacionados
- Múltiplos autores
- Séries de artigos
- Ordenação de artigos baseada em data e peso
- Modo Zen para leitura de artigos
- Flexível com qualquer tipo de conteúdo, taxonomias e menus
- Menus de cabeçalho e rodapé
- Menus aninhados & menu de sub-navegação
- Índice de conteúdos com scroll
- Suporte para conteúdo multilingue incluindo suporte para línguas RTL
- Capacidade de criar links para publicações em sites de terceiros
- Mais de 40 shortcodes incluindo Gallery, Timeline, GitHub cards, Carousels, Stats, grelhas de funcionalidades, Steps e botões CTA
- Sintaxe GitHub Alerts, 15 tipos, suporte para elementos expansíveis
- Integração Buymeacoffee
- Pesquisa no site do lado do cliente alimentada por Fuse.js
- Diagramas e visualizações usando Mermaid
- Gráficos usando Chart.js
- Integração TypeIt
- Embeds de Youtube com melhorias de desempenho
- Notação matemática usando KaTeX
- Ícones SVG do FontAwesome 6
- Redimensionamento automático de imagens usando Hugo Pipes
- Âncoras de cabeçalhos, Índices de Conteúdos, Cópia de código, Botões, Badges e mais
- Suporte HTML e Emoji em artigos 🎉
- Otimizado para SEO com links para partilha em redes sociais
- Suporte para Fathom Analytics e Google Analytics
- Feeds RSS, Favicons e suporte para comentários
- Personalização avançada usando definições simples de cores e estilos do Tailwind
- Otimizado para desempenho e acessibilidade com pontuações perfeitas no Lighthouse
- Totalmente documentado com atualizações regulares
---
![blowfish logo](https://github.com/nunocoracao/blowfish/blob/main/logo.png?raw=true)
## Documentação
Blowfish tem [documentação extensa](https://blowfish.page/docs/) que cobre todos os aspetos do tema. Certifique-se de [ler a documentação](https://blowfish.page/docs/) para saber mais sobre como usar o tema e as suas funcionalidades.
---
## Instalação
Blowfish suporta vários métodos de instalação - como um submódulo git, um Módulo Hugo, ou como uma instalação completamente manual.
Instruções detalhadas para cada método podem ser encontradas na documentação de [Instalação](https://blowfish.page/docs/installation). Deve consultar a documentação para a experiência de configuração mais simples. Abaixo está um guia de início rápido usando submódulos se estiver a usar git, ou módulos Hugo se já está confiante na instalação de temas Hugo.
### Início rápido com um agente de IA
Blowfish inclui um [agent skill](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish) que ensina agentes de programação com IA — como o Claude Code — a instalar, configurar e construir sites com o tema. Instale-o a partir do marketplace de plugins do Blowfish no Claude Code:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
Ou simplesmente copie a pasta do skill para o repositório do seu site em `.claude/skills/blowfish/` — os agentes detetam skills de projeto automaticamente. Depois peça ao seu agente para configurar o Blowfish por si.
### Início rápido usando Blowfish Tools
> **Nota:** Certifique-se de que tem **Node.js**, **Git** e **Hugo** instalados, e que criou um novo projeto Hugo antes de continuar.
Blowfish Tools é uma ferramenta CLI que o ajuda a começar com Blowfish. Ela irá criar um novo projeto Hugo, instalar o tema e configurar os ficheiros de configuração do tema para si. Por favor [reporte quaisquer problemas que encontrar](https://github.com/nunocoracao/blowfish-tools).
Instale a ferramenta CLI globalmente usando npm (ou outro gestor de pacotes):
```shell
npm i -g blowfish-tools
```
Depois execute o comando `blowfish-tools` para iniciar uma execução interativa que irá guiá-lo através da criação e casos de uso de configuração.
```shell
blowfish-tools
```
Também pode executar o comando `blowfish-tools new` para criar um novo projeto Hugo e instalar o tema de uma só vez. Consulte a ajuda da CLI para mais informações.
```shell
blowfish-tools new mynewsite
```
### Início rápido usando submódulos git
> **Nota:** Certifique-se de que tem **Git** e **Hugo** instalados, e que criou um novo projeto Hugo antes de continuar.
1. A partir do diretório do seu projeto, inicialize o git:
```shell
git init
```
2. Configure Blowfish como um submódulo git:
```shell
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
```
3. Na pasta raiz do seu site, elimine o ficheiro `hugo.toml` que foi gerado pelo Hugo. Copie os ficheiros de configuração `*.toml` do tema para a sua pasta `config/_default/`.
Irá encontrar estes ficheiros de configuração do tema no diretório de cache do Hugo, ou [descarregue uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
4. Siga as instruções de [Introdução](https://blowfish.page/docs/getting-started/) para configurar o seu site.
### Início rápido usando Hugo
> **Nota:** Certifique-se de que tem **Go** e **Hugo** instalados, e que criou um novo projeto Hugo antes de continuar.
1. A partir do diretório do seu projeto, inicialize os Módulos Hugo:
```shell
hugo mod init github.com/<username>/<repo-name>
```
2. Crie `config/_default/module.toml` e adicione o seguinte:
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v3"
```
3. Inicie o seu servidor usando `hugo server` e o tema será descarregado automaticamente.
4. Na pasta raiz do seu site, elimine o ficheiro `hugo.toml` que foi gerado pelo Hugo. Copie os ficheiros de configuração `*.toml` do tema para a sua pasta `config/_default/`.
> **Nota:** Não sobrescreva o ficheiro `module.toml` que criou acima!
Irá encontrar estes ficheiros de configuração do tema no diretório de cache do Hugo, ou [descarregue uma cópia](https://github.com/nunocoracao/blowfish/releases/latest/download/config-default.zip) do GitHub.
5. Siga as instruções de [Introdução](https://blowfish.page/docs/getting-started/) para configurar o seu site.
### Instalar atualizações do tema
À medida que novas versões são publicadas, pode atualizar o tema usando Hugo. Simplesmente execute `hugo mod get -u` a partir do diretório do seu projeto e o tema será automaticamente atualizado para a versão mais recente.
[Instruções detalhadas de atualização](https://blowfish.page/docs/installation/#installing-updates) estão disponíveis na documentação.
### Atualização da v2 para a v3
Blowfish v3 é totalmente retrocompatível: todas as novas funcionalidades são opcionais e nenhuma opção de configuração ou template foi removida. As instalações por submódulo git e manuais atualizam-se como habitualmente, sem alterações; os utilizadores de módulos Hugo apenas precisam de alterar o caminho de importação em `config/_default/module.toml` de `github.com/nunocoracao/blowfish/v2` para `github.com/nunocoracao/blowfish/v3` e executar `hugo mod get -u`. Consulte as [instruções de atualização](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3) para mais detalhes.
---
## Contribuir
Espera-se que Blowfish evolua ao longo do tempo. Pretendo continuar a adicionar funcionalidades e fazer alterações conforme necessário.
Sinta-se à vontade para entrar em contacto com quaisquer problemas ou sugestões para novas funcionalidades que gostaria de ver.
- 🐛 **Relatórios de erros & problemas:** Use [GitHub Issues](https://github.com/nunocoracao/blowfish/issues)
- 💡 **Ideias para novas funcionalidades:** Abra uma discussão em [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
- 🙋‍♀️ **Questões gerais:** Dirija-se a [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions)
Se conseguir corrigir um erro ou implementar uma nova funcionalidade, aceito PRs para este propósito. Saiba mais nas [diretrizes de contribuição](https://github.com/nunocoracao/blowfish/blob/main/CONTRIBUTING.md).
---
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+29 -15
View File
@@ -1,7 +1,7 @@
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md) | 简体中文 | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md)
[English](https://github.com/nunocoracao/blowfish/blob/main/README.md) | [Français](https://github.com/nunocoracao/blowfish/blob/main/README.fr.md) | [Deutsch](https://github.com/nunocoracao/blowfish/blob/main/README.de.md) | [Português (PT)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-pt.md) | [Português (BR)](https://github.com/nunocoracao/blowfish/blob/main/README.pt-br.md) | [Español](https://github.com/nunocoracao/blowfish/blob/main/README.es.md) | [日本語](https://github.com/nunocoracao/blowfish/blob/main/README.ja.md) | 简体中文 | [Indonesian](https://github.com/nunocoracao/blowfish/blob/main/README.id.md)
# Blowfish
[![Netlify Status](https://api.netlify.com/api/v1/badges/6e5256d4-3148-4d69-879c-310341020fe9/deploy-status)](https://app.netlify.com/sites/snazzy-dango-efb2ec/deploys)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.87.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.87.0)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.162.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.162.0)
[![GitHub](https://img.shields.io/github/license/nunocoracao/blowfish)](https://github.com/nunocoracao/blowfish/blob/main/LICENSE)
[![Blowfish](https://img.shields.io/badge/Hugo--Themes-@Blowfish-blue)](https://themes.gohugo.io/themes/blowfish/)
![code-size](https://img.shields.io/github/languages/code-size/nunocoracao/blowfish)
@@ -13,27 +13,29 @@ Blowfish 是一个轻量有力的 Hugo 主题。它使用 Tailwind CSS 构建,
🌏 [示例站点](https://blowfish.page/zh-cn/)
📑 [主题文档](https://blowfish.page/zh-cn/docs/)
💎 [周边商店](http://tee.pub/lic/qwSlWVBL5zc)
🐛 [Bug 问题报告](https://github.com/nunocoracao/blowfish/issues)
💡 [问答和功能需求](https://github.com/nunocoracao/blowfish/discussions)
<a href="https://www.buymeacoffee.com/nunocoracao" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
<a target="_blank" href="http://tee.pub/lic/qwSlWVBL5zc"><img class="nozoom" src="https://img.buymeacoffee.com/button-api/?text=Merch Store &emoji=💎&slug=nunocoracao&button_colour=5F7FFF&font_colour=ffffff&font_family=Lato&outline_colour=000000&coffee_colour=FFDD00" /></a>
## 特性
- 使用 Tailwind CSS 3.0 构建全面响应式布局
- 使用 Tailwind CSS 4 构建全面响应式布局
- 多种配色方案,亦可完全由你定义
- 夜间模式支持(手动开启/关闭或根据用户设备自动切换)
- 多种主页布局,包括带有主视觉图、数据统计和功能网格的产品风格着陆页
- 悬浮玻璃质感页眉,支持 ⌘K / Ctrl+K 搜索快捷键
- 全局背景画布,主视觉区域随滚动溶入其中
- 文章阅读进度条
- 可实时预览的交互式主页布局切换器
- 内置代理技能(agent skill),让 AI 编程代理(如 Claude Code)为你安装和配置主题
- 配备专用打印样式的打印友好页面
- 高度自主的配置方式
- 集成 Firebase 以支持动态数据统计
- 集成浏览次数统计和点赞机制
- “相关文章”列表生成
- 多种主页布局
- 多作者模式支持
- 可将文章整理成选集列表
- 禅模式支持
@@ -42,7 +44,8 @@ Blowfish 是一个轻量有力的 Hugo 主题。它使用 Tailwind CSS 构建,
- 支持嵌套菜单和子导航菜单
- 支持多语言内容,包括 RTL 语言
- 可链接到第三方网站上的帖子
- 支持多种简码,如图库、时间轴、GitHub 卡片和图片灯箱
- 内置 40 多种简码,包括图库、时间轴、GitHub 卡片、轮播、数据统计、功能网格、步骤和 CTA 按钮
- 支持 GitHub Alerts 语法、15 种类型和可折叠功能
- 支持 Buymeacoffee
- 拥有由 Fuse.js 支持的客户端一侧网站搜索功能
- 植入了基于 Mermaid 的图表功能
@@ -76,11 +79,22 @@ Blowfish 支持多种安装方式,既能作为 git 子模块、Hugo 模块,
每种方法的详细说明都可以在 [安装](https://blowfish.page/zh-cn/docs/installation) 文档中找到。为了获得最简单的安装体验,请查阅文档。如果你使用的是 git,请阅读下面使用子模块的快速开始指南;如果你能安装 Hugo 主题,请阅读下面 Hugo 模块的快速开始指南。
### 使用 AI 代理快速开始
Blowfish 内置了一个[代理技能(agent skill)](https://github.com/nunocoracao/blowfish/tree/main/.claude/skills/blowfish),可以教 AI 编程代理(如 Claude Code)如何安装、配置主题并用它构建网站。在 Claude Code 中通过 Blowfish 插件市场安装:
```shell
/plugin marketplace add nunocoracao/blowfish
/plugin install blowfish@blowfish
```
或者直接将技能文件夹复制到你网站仓库的 `.claude/skills/blowfish/` 目录中——代理会自动识别项目技能。然后让你的代理为你完成 Blowfish 的设置。
### 使用 Blowfish Tools 快速开始
> **注:** 请确保你已安装 **Node.js**、 **Git** 和 **Hugo** ,且已经创建了一个 Hugo 工程。
我们最新推出了一个新的 CLI 工具,帮助你开始使用 Blowfish。它将为你创建一个新的 Hugo 项目、安装主题并设置主题配置文件。它仍处于测试阶段,因此请 [报告你发现的任何问题](https://github.com/nunocoracao/blowfish-tools)。
Blowfish Tools 是一个帮助你开始使用 Blowfish 的 CLI 工具。它将为你创建一个新的 Hugo 项目、安装主题并设置主题配置文件。请 [报告你发现的任何问题](https://github.com/nunocoracao/blowfish-tools)。
使用 npm(或其他软件包管理器)全局安装 CLI 工具:
```shell
@@ -133,7 +147,7 @@ blowfish-tools new mynewsite
```toml
[[imports]]
path = "github.com/nunocoracao/blowfish/v2"
path = "github.com/nunocoracao/blowfish/v3"
```
3. 运行 `hugo server` 启动你的本地服务器,本主题就会自动下载。
@@ -152,6 +166,10 @@ blowfish-tools new mynewsite
详细的[更新指南](https://blowfish.page/zh-cn/docs/installation/#%E6%9B%B4%E6%96%B0%E4%B8%BB%E9%A2%98)在文档中。
### 从 v2 升级到 v3
Blowfish v3 完全向后兼容:所有新功能均为可选启用,没有删除任何配置选项或模板。git 子模块和手动安装的用户按常规方式升级即可,无需任何改动;Hugo 模块用户只需将 `config/_default/module.toml` 中的导入路径从 `github.com/nunocoracao/blowfish/v2` 改为 `github.com/nunocoracao/blowfish/v3`,然后运行 `hugo mod get -u`。详情请参阅[升级指南](https://blowfish.page/docs/installation/#upgrading-from-v2-to-v3)。
---
## 贡献
@@ -168,8 +186,4 @@ Blowfish 将会持续进化。我打算不断增加功能,并按需进行修
---
## Star 数量统计
[![Stargazers over time](https://starchart.cc/nunocoracao/blowfish.svg)](https://starchart.cc/nunocoracao/blowfish)
<a rel="me" href="https://masto.ai/@blowfish">Mastodon</a>
+2640 -1498
View File
File diff suppressed because it is too large. Load diff
+220
View File
@@ -0,0 +1,220 @@
/*
* Derived from KKKZOZ/hugo-admonitions (https://github.com/KKKZOZ/hugo-admonitions/)
* Copyright (c) 2024 KKKZOZ, Licensed under MIT License
*/
:root {
/* GitHub Core Types (5) */
--adm-note-border: theme("colors.sky.500");
--adm-note-bg: theme("colors.sky.50");
--adm-note-text: theme("colors.sky.900");
--adm-tip-border: theme("colors.emerald.500");
--adm-tip-bg: theme("colors.emerald.50");
--adm-tip-text: theme("colors.emerald.900");
--adm-important-border: theme("colors.purple.500");
--adm-important-bg: theme("colors.purple.50");
--adm-important-text: theme("colors.purple.900");
--adm-warning-border: theme("colors.orange.500");
--adm-warning-bg: theme("colors.orange.50");
--adm-warning-text: theme("colors.orange.900");
--adm-caution-border: theme("colors.red.500");
--adm-caution-bg: theme("colors.red.50");
--adm-caution-text: theme("colors.red.900");
/* Extended Types (10) */
--adm-abstract-border: theme("colors.cyan.500");
--adm-abstract-bg: theme("colors.cyan.50");
--adm-abstract-text: theme("colors.cyan.900");
--adm-bug-border: theme("colors.rose.500");
--adm-bug-bg: theme("colors.rose.50");
--adm-bug-text: theme("colors.rose.900");
--adm-danger-border: theme("colors.red.500");
--adm-danger-bg: theme("colors.red.50");
--adm-danger-text: theme("colors.red.900");
--adm-example-border: theme("colors.purple.600");
--adm-example-bg: theme("colors.purple.50");
--adm-example-text: theme("colors.purple.900");
--adm-failure-border: theme("colors.pink.500");
--adm-failure-bg: theme("colors.pink.50");
--adm-failure-text: theme("colors.pink.900");
--adm-info-border: theme("colors.blue.500");
--adm-info-bg: theme("colors.blue.50");
--adm-info-text: theme("colors.blue.900");
--adm-question-border: theme("colors.amber.500");
--adm-question-bg: theme("colors.amber.50");
--adm-question-text: theme("colors.amber.900");
--adm-quote-border: theme("colors.gray.500");
--adm-quote-bg: theme("colors.gray.50");
--adm-quote-text: theme("colors.gray.800");
--adm-success-border: theme("colors.emerald.500");
--adm-success-bg: theme("colors.emerald.50");
--adm-success-text: theme("colors.emerald.900");
--adm-todo-border: theme("colors.sky.500");
--adm-todo-bg: theme("colors.sky.50");
--adm-todo-text: theme("colors.sky.800");
}
html.dark {
/* GitHub Core Types (5) */
--adm-note-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
--adm-note-text: theme("colors.sky.100");
--adm-tip-bg: color-mix(in srgb, theme("colors.emerald.800"), #0f0f0f 50%);
--adm-tip-text: theme("colors.emerald.100");
--adm-important-bg: color-mix(in srgb, theme("colors.purple.800"), #0f0f0f 50%);
--adm-important-text: theme("colors.purple.100");
--adm-warning-bg: color-mix(in srgb, theme("colors.orange.800"), #0f0f0f 45%);
--adm-warning-text: theme("colors.orange.100");
--adm-caution-bg: color-mix(in srgb, theme("colors.red.800"), #0f0f0f 45%);
--adm-caution-text: theme("colors.red.100");
/* Extended Types (10) */
--adm-abstract-bg: color-mix(in srgb, theme("colors.cyan.800"), #0f0f0f 50%);
--adm-abstract-text: theme("colors.cyan.100");
--adm-bug-bg: color-mix(in srgb, theme("colors.rose.800"), #0f0f0f 50%);
--adm-bug-text: theme("colors.rose.100");
--adm-danger-bg: color-mix(in srgb, theme("colors.red.800"), #0f0f0f 45%);
--adm-danger-text: theme("colors.red.100");
--adm-example-bg: color-mix(in srgb, theme("colors.purple.800"), #0f0f0f 50%);
--adm-example-text: theme("colors.purple.100");
--adm-failure-bg: color-mix(in srgb, theme("colors.pink.800"), #0f0f0f 50%);
--adm-failure-text: theme("colors.pink.100");
--adm-info-bg: color-mix(in srgb, theme("colors.blue.800"), #0f0f0f 50%);
--adm-info-text: theme("colors.blue.100");
--adm-question-bg: color-mix(in srgb, theme("colors.amber.800"), #0f0f0f 50%);
--adm-question-text: theme("colors.amber.100");
--adm-quote-bg: color-mix(in srgb, theme("colors.gray.800"), #0f0f0f 50%);
--adm-quote-text: theme("colors.gray.100");
--adm-success-bg: color-mix(in srgb, theme("colors.emerald.800"), #0f0f0f 50%);
--adm-success-text: theme("colors.emerald.100");
--adm-todo-bg: color-mix(in srgb, theme("colors.sky.800"), #0f0f0f 50%);
--adm-todo-text: theme("colors.sky.100");
}
/* Base Styles */
.admonition-content > :first-child {
margin-top: 0 !important;
}
.admonition-content > :last-child {
margin-bottom: 0 !important;
}
.admonition-content pre {
margin-block: 0 !important;
}
/* Type-Specific Palettes Using CSS Variables */
.admonition[data-type="note"] {
border-color: var(--adm-note-border);
background-color: var(--adm-note-bg);
color: var(--adm-note-text);
}
.admonition[data-type="tip"] {
border-color: var(--adm-tip-border);
background-color: var(--adm-tip-bg);
color: var(--adm-tip-text);
}
.admonition[data-type="important"] {
border-color: var(--adm-important-border);
background-color: var(--adm-important-bg);
color: var(--adm-important-text);
}
.admonition[data-type="warning"] {
border-color: var(--adm-warning-border);
background-color: var(--adm-warning-bg);
color: var(--adm-warning-text);
}
.admonition[data-type="caution"] {
border-color: var(--adm-caution-border);
background-color: var(--adm-caution-bg);
color: var(--adm-caution-text);
}
.admonition[data-type="abstract"] {
border-color: var(--adm-abstract-border);
background-color: var(--adm-abstract-bg);
color: var(--adm-abstract-text);
}
.admonition[data-type="bug"] {
border-color: var(--adm-bug-border);
background-color: var(--adm-bug-bg);
color: var(--adm-bug-text);
}
.admonition[data-type="danger"] {
border-color: var(--adm-danger-border);
background-color: var(--adm-danger-bg);
color: var(--adm-danger-text);
}
.admonition[data-type="example"] {
border-color: var(--adm-example-border);
background-color: var(--adm-example-bg);
color: var(--adm-example-text);
}
.admonition[data-type="failure"] {
border-color: var(--adm-failure-border);
background-color: var(--adm-failure-bg);
color: var(--adm-failure-text);
}
.admonition[data-type="info"] {
border-color: var(--adm-info-border);
background-color: var(--adm-info-bg);
color: var(--adm-info-text);
}
.admonition[data-type="question"] {
border-color: var(--adm-question-border);
background-color: var(--adm-question-bg);
color: var(--adm-question-text);
}
.admonition[data-type="quote"] {
border-color: var(--adm-quote-border);
background-color: var(--adm-quote-bg);
color: var(--adm-quote-text);
}
.admonition[data-type="success"] {
border-color: var(--adm-success-border);
background-color: var(--adm-success-bg);
color: var(--adm-success-text);
}
.admonition[data-type="todo"] {
border-color: var(--adm-todo-border);
background-color: var(--adm-todo-bg);
color: var(--adm-todo-text);
}
+178 -197
View File
@@ -1,8 +1,24 @@
/* -- Chroma Highlight -- */
/* Background */
.prose .chroma {
@apply static rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200;
/* margins for codeblock title */
.highlight-wrapper {
@apply block relative z-0 overflow-hidden shadow rounded-md;
margin-top: 1.7142857em;
margin-bottom: 1.7142857em;
}
.highlight-wrapper pre,
.highlight-wrapper table, .highlight-wrapper div {
margin-top: 0;
margin-bottom: 0;
}
.highlight-wrapper:has(.codeblock-title) pre {
@apply rounded-none;
}
.codeblock-title {
@apply px-4 py-2 border-b border-neutral-200 dark:border-neutral-800;
@apply bg-white dark:bg-[#0d1117];
}
/* LineTableTD */
@@ -19,208 +35,173 @@
/* LineHighlight */
.chroma .hl {
@apply block w-auto px-4 -mx-4 bg-primary-100 dark:bg-primary-900;
@apply block w-auto px-4 -mx-4;
}
.chroma .lntd .hl {
@apply p-0 m-0;
}
/* LineNumbersTable */
/* LineNumbers */
.chroma .lnt,
.chroma .ln {
@apply text-neutral-600 dark:text-neutral-300 mr-[0.4em] px-[0.4em] py-0;
/* linenos=inline */
.chroma:not(:is(table *)) > code {
display: block;
min-width: max-content;
}
/* Keyword */
/* KeywordDeclaration */
/* KeywordNamespace */
/* KeywordPseudo */
/* KeywordReserved */
/* NameClass */
/* NameFunctionMagic */
/* NameNamespace */
/* NameVariableClass */
/* Operator */
.chroma .k,
.chroma .kd,
.chroma .kn,
.chroma .kp,
.chroma .kr,
.chroma .nc,
.chroma .fm,
.chroma .nn,
.chroma .vc,
.chroma .o {
@apply text-primary-600 dark:text-primary-300;
}
html:not(.dark) {
/* Generated using: hugo gen chromastyles --style=github */
/* KeywordConstant */
.chroma .kc {
@apply font-semibold text-secondary-400 dark:text-secondary-500;
/* Background */ .bg { background-color:#fff; }
/* PreWrapper */ .chroma { background-color:#fff; }
/* Error */ .chroma .err { color:#f6f8fa;background-color:#82071e }
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
/* LineTable */ .chroma .lntable { border-spacing:0; }
/* LineHighlight */ .chroma .hl { background-color:#e5e5e5 }
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
/* Line */ .chroma .line { display:flex; }
/* Keyword */ .chroma .k { color:#cf222e }
/* KeywordConstant */ .chroma .kc { color:#cf222e }
/* KeywordDeclaration */ .chroma .kd { color:#cf222e }
/* KeywordNamespace */ .chroma .kn { color:#cf222e }
/* KeywordPseudo */ .chroma .kp { color:#cf222e }
/* KeywordReserved */ .chroma .kr { color:#cf222e }
/* KeywordType */ .chroma .kt { color:#cf222e }
/* NameAttribute */ .chroma .na { color:#1f2328 }
/* NameClass */ .chroma .nc { color:#1f2328 }
/* NameConstant */ .chroma .no { color:#0550ae }
/* NameDecorator */ .chroma .nd { color:#0550ae }
/* NameEntity */ .chroma .ni { color:#6639ba }
/* NameLabel */ .chroma .nl { color:#900;font-weight:bold }
/* NameNamespace */ .chroma .nn { color:#24292e }
/* NameOther */ .chroma .nx { color:#1f2328 }
/* NameTag */ .chroma .nt { color:#0550ae }
/* NameBuiltin */ .chroma .nb { color:#6639ba }
/* NameBuiltinPseudo */ .chroma .bp { color:#6a737d }
/* NameVariable */ .chroma .nv { color:#953800 }
/* NameVariableClass */ .chroma .vc { color:#953800 }
/* NameVariableGlobal */ .chroma .vg { color:#953800 }
/* NameVariableInstance */ .chroma .vi { color:#953800 }
/* NameVariableMagic */ .chroma .vm { color:#953800 }
/* NameFunction */ .chroma .nf { color:#6639ba }
/* NameFunctionMagic */ .chroma .fm { color:#6639ba }
/* LiteralString */ .chroma .s { color:#0a3069 }
/* LiteralStringAffix */ .chroma .sa { color:#0a3069 }
/* LiteralStringBacktick */ .chroma .sb { color:#0a3069 }
/* LiteralStringChar */ .chroma .sc { color:#0a3069 }
/* LiteralStringDelimiter */ .chroma .dl { color:#0a3069 }
/* LiteralStringDoc */ .chroma .sd { color:#0a3069 }
/* LiteralStringDouble */ .chroma .s2 { color:#0a3069 }
/* LiteralStringEscape */ .chroma .se { color:#0a3069 }
/* LiteralStringHeredoc */ .chroma .sh { color:#0a3069 }
/* LiteralStringInterpol */ .chroma .si { color:#0a3069 }
/* LiteralStringOther */ .chroma .sx { color:#0a3069 }
/* LiteralStringRegex */ .chroma .sr { color:#0a3069 }
/* LiteralStringSingle */ .chroma .s1 { color:#0a3069 }
/* LiteralStringSymbol */ .chroma .ss { color:#032f62 }
/* LiteralNumber */ .chroma .m { color:#0550ae }
/* LiteralNumberBin */ .chroma .mb { color:#0550ae }
/* LiteralNumberFloat */ .chroma .mf { color:#0550ae }
/* LiteralNumberHex */ .chroma .mh { color:#0550ae }
/* LiteralNumberInteger */ .chroma .mi { color:#0550ae }
/* LiteralNumberIntegerLong */ .chroma .il { color:#0550ae }
/* LiteralNumberOct */ .chroma .mo { color:#0550ae }
/* Operator */ .chroma .o { color:#0550ae }
/* OperatorWord */ .chroma .ow { color:#0550ae }
/* Punctuation */ .chroma .p { color:#1f2328 }
/* Comment */ .chroma .c { color:#57606a }
/* CommentHashbang */ .chroma .ch { color:#57606a }
/* CommentMultiline */ .chroma .cm { color:#57606a }
/* CommentSingle */ .chroma .c1 { color:#57606a }
/* CommentSpecial */ .chroma .cs { color:#57606a }
/* CommentPreproc */ .chroma .cp { color:#57606a }
/* CommentPreprocFile */ .chroma .cpf { color:#57606a }
/* GenericDeleted */ .chroma .gd { color:#82071e;background-color:#ffebe9 }
/* GenericEmph */ .chroma .ge { color:#1f2328 }
/* GenericInserted */ .chroma .gi { color:#116329;background-color:#dafbe1 }
/* GenericOutput */ .chroma .go { color:#1f2328 }
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
/* TextWhitespace */ .chroma .w { color:#fff }
}
html.dark {
/* Generated using: hugo gen chromastyles --style=github-dark */
/* KeywordType */
/* NameVariable */
/* NameVariableInstance */
/* NameVariableMagic */
/* LiteralNumber */
/* LiteralNumberBin */
/* LiteralNumberFloat */
/* LiteralNumberHex */
/* LiteralNumberInteger */
/* LiteralNumberIntegerLong */
/* LiteralNumberOct */
.chroma .kt,
.chroma .nv,
.chroma .vi,
.chroma .vm,
.chroma .m,
.chroma .mb,
.chroma .mf,
.chroma .mh,
.chroma .mi,
.chroma .il,
.chroma .mo {
@apply text-secondary-400 dark:text-secondary-600;
}
/* Name */
/* NameDecorator */
/* NameEntity */
/* NameLabel */
.chroma .n,
.chroma .nd,
.chroma .ni,
.chroma .nl {
@apply text-secondary-900 dark:text-secondary-200;
}
/* NameAttribute */
/* NameBuiltin */
/* NameBuiltinPseudo */
/* NameOther */
/* NameProperty */
/* NameTag */
.chroma .na,
.chroma .nb,
.chroma .bp,
.chroma .nx,
.chroma .py,
.chroma .nt {
@apply text-secondary-800 dark:text-secondary-300;
}
/* NameConstant */
/* NameException */
/* NameVariableGlobal */
.chroma .no,
.chroma .ne,
.chroma .vg {
@apply font-semibold text-secondary-400 dark:text-secondary-500;
}
/* NameFunction */
.chroma .nf {
@apply text-secondary-600 dark:text-secondary-500;
}
/* Literal */
/* LiteralDate */
/* LiteralString */
/* LiteralStringAffix */
/* LiteralStringBacktick */
/* LiteralStringChar */
/* LiteralStringDelimiter */
/* LiteralStringDoc */
/* LiteralStringDouble */
/* LiteralStringHeredoc */
/* LiteralStringInterpol */
/* LiteralStringOther */
/* LiteralStringSingle */
/* GenericInserted */
/* GenericOutput */
/* GenericPrompt */
.chroma .l,
.chroma .ld,
.chroma .s,
.chroma .sa,
.chroma .sb,
.chroma .sc,
.chroma .dl,
.chroma .sd,
.chroma .s2,
.chroma .sh,
.chroma .si,
.chroma .sx,
.chroma .s1,
.chroma .gi,
.chroma .go,
.chroma .gp {
@apply text-primary-800 dark:text-primary-400;
}
/* LiteralStringEscape */
.chroma .se {
@apply font-semibold text-secondary-400 dark:text-secondary-500;
}
/* LiteralStringRegex */
/* LiteralStringSymbol */
.chroma .sr,
.chroma .ss {
@apply font-semibold text-primary-800 dark:text-primary-400;
}
/* OperatorWord */
.chroma .ow {
@apply font-semibold text-primary-400 dark:text-primary-600;
}
/* Comment */
/* CommentMultiline */
/* CommentSingle */
/* CommentSpecial */
/* CommentPreproc */
/* CommentPreprocFile */
.chroma .c,
.chroma .cm,
.chroma .c1,
.chroma .cs,
.chroma .cp,
.chroma .cpf {
@apply italic text-neutral-500 dark:text-neutral-400;
}
/* CommentHashbang */
.chroma .ch {
@apply italic font-semibold text-neutral-500 dark:text-neutral-400;
}
/* GenericEmph */
.chroma .ge {
@apply italic;
}
/* GenericHeading */
.chroma .gh {
@apply font-semibold text-neutral-500;
}
/* GenericStrong */
.chroma .gs {
@apply font-semibold;
}
/* GenericSubheading */
/* GenericTraceback */
.chroma .gu,
.chroma .gt {
@apply text-neutral-500;
}
/* GenericUnderline */
.chroma .gl {
@apply underline;
/* Background */ .bg { color:#e6edf3;background-color:#0d1117; }
/* PreWrapper */ .chroma { color:#e6edf3;background-color:#0d1117; }
/* Error */ .chroma .err { color:#f85149 }
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
/* LineTable */ .chroma .lntable { border-spacing:0; }
/* LineHighlight */ .chroma .hl { background-color:#333 }
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679 }
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681 }
/* Line */ .chroma .line { display:flex; }
/* Keyword */ .chroma .k { color:#ff7b72 }
/* KeywordConstant */ .chroma .kc { color:#79c0ff }
/* KeywordDeclaration */ .chroma .kd { color:#ff7b72 }
/* KeywordNamespace */ .chroma .kn { color:#ff7b72 }
/* KeywordPseudo */ .chroma .kp { color:#79c0ff }
/* KeywordReserved */ .chroma .kr { color:#ff7b72 }
/* KeywordType */ .chroma .kt { color:#ff7b72 }
/* NameClass */ .chroma .nc { color:#f0883e;font-weight:bold }
/* NameConstant */ .chroma .no { color:#79c0ff;font-weight:bold }
/* NameDecorator */ .chroma .nd { color:#d2a8ff;font-weight:bold }
/* NameEntity */ .chroma .ni { color:#ffa657 }
/* NameException */ .chroma .ne { color:#f0883e;font-weight:bold }
/* NameLabel */ .chroma .nl { color:#79c0ff;font-weight:bold }
/* NameNamespace */ .chroma .nn { color:#ff7b72 }
/* NameProperty */ .chroma .py { color:#79c0ff }
/* NameTag */ .chroma .nt { color:#7ee787 }
/* NameVariable */ .chroma .nv { color:#79c0ff }
/* NameVariableClass */ .chroma .vc { color:#79c0ff }
/* NameVariableGlobal */ .chroma .vg { color:#79c0ff }
/* NameVariableInstance */ .chroma .vi { color:#79c0ff }
/* NameVariableMagic */ .chroma .vm { color:#79c0ff }
/* NameFunction */ .chroma .nf { color:#d2a8ff;font-weight:bold }
/* NameFunctionMagic */ .chroma .fm { color:#d2a8ff;font-weight:bold }
/* Literal */ .chroma .l { color:#a5d6ff }
/* LiteralDate */ .chroma .ld { color:#79c0ff }
/* LiteralString */ .chroma .s { color:#a5d6ff }
/* LiteralStringAffix */ .chroma .sa { color:#79c0ff }
/* LiteralStringBacktick */ .chroma .sb { color:#a5d6ff }
/* LiteralStringChar */ .chroma .sc { color:#a5d6ff }
/* LiteralStringDelimiter */ .chroma .dl { color:#79c0ff }
/* LiteralStringDoc */ .chroma .sd { color:#a5d6ff }
/* LiteralStringDouble */ .chroma .s2 { color:#a5d6ff }
/* LiteralStringEscape */ .chroma .se { color:#79c0ff }
/* LiteralStringHeredoc */ .chroma .sh { color:#79c0ff }
/* LiteralStringInterpol */ .chroma .si { color:#a5d6ff }
/* LiteralStringOther */ .chroma .sx { color:#a5d6ff }
/* LiteralStringRegex */ .chroma .sr { color:#79c0ff }
/* LiteralStringSingle */ .chroma .s1 { color:#a5d6ff }
/* LiteralStringSymbol */ .chroma .ss { color:#a5d6ff }
/* LiteralNumber */ .chroma .m { color:#a5d6ff }
/* LiteralNumberBin */ .chroma .mb { color:#a5d6ff }
/* LiteralNumberFloat */ .chroma .mf { color:#a5d6ff }
/* LiteralNumberHex */ .chroma .mh { color:#a5d6ff }
/* LiteralNumberInteger */ .chroma .mi { color:#a5d6ff }
/* LiteralNumberIntegerLong */ .chroma .il { color:#a5d6ff }
/* LiteralNumberOct */ .chroma .mo { color:#a5d6ff }
/* Operator */ .chroma .o { color:#ff7b72;font-weight:bold }
/* OperatorWord */ .chroma .ow { color:#ff7b72;font-weight:bold }
/* Comment */ .chroma .c { color:#8b949e;font-style:italic }
/* CommentHashbang */ .chroma .ch { color:#8b949e;font-style:italic }
/* CommentMultiline */ .chroma .cm { color:#8b949e;font-style:italic }
/* CommentSingle */ .chroma .c1 { color:#8b949e;font-style:italic }
/* CommentSpecial */ .chroma .cs { color:#8b949e;font-weight:bold;font-style:italic }
/* CommentPreproc */ .chroma .cp { color:#8b949e;font-weight:bold;font-style:italic }
/* CommentPreprocFile */ .chroma .cpf { color:#8b949e;font-weight:bold;font-style:italic }
/* GenericDeleted */ .chroma .gd { color:#ffa198;background-color:#490202 }
/* GenericEmph */ .chroma .ge { font-style:italic }
/* GenericError */ .chroma .gr { color:#ffa198 }
/* GenericHeading */ .chroma .gh { color:#79c0ff;font-weight:bold }
/* GenericInserted */ .chroma .gi { color:#56d364;background-color:#0f5323 }
/* GenericOutput */ .chroma .go { color:#8b949e }
/* GenericPrompt */ .chroma .gp { color:#8b949e }
/* GenericStrong */ .chroma .gs { font-weight:bold }
/* GenericSubheading */ .chroma .gu { color:#79c0ff }
/* GenericTraceback */ .chroma .gt { color:#ff7b72 }
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
/* TextWhitespace */ .chroma .w { color:#6e7681 }
}
+16
View File
@@ -83,6 +83,22 @@
width: calc(100% - 5px);
margin: 0px !important;
}
.gallery figure {
display: inline-block;
margin: 0;
}
.gallery figcaption {
margin-top: 0.25rem;
font-size: 0.875rem;
line-height: 1.25rem;
color: rgb(var(--color-neutral-600));
}
.dark .gallery figcaption {
color: rgb(var(--color-neutral-400));
}
@media (width >= 640px) {
.sm\:grid-w10 {
width: calc(10% - 5px);
+51
View File
@@ -0,0 +1,51 @@
.gist-container .gist {
h1 {
margin-bottom: calc(var(--spacing) * 4);
}
.gist-file {
border: 1px solid rgb(var(--color-neutral-300));
border-radius: 8px;
overflow: hidden;
}
.gist-meta {
background-color: white;
color: rgb(var(--color-neutral-600));
border-radius: 0 0 8px 8px;
}
.gist-meta a {
color: rgb(var(--color-primary-600));
}
.highlight tr {
border-bottom: none;
}
.gist-file .file {
margin-top: 0;
margin-bottom: 0;
}
/* Dark Mode */
.dark & {
.gist-file {
border-color: rgb(var(--color-neutral-800));
}
.gist-data {
background-color: rgb(var(--color-neutral-900));
border-bottom: 1px solid rgb(var(--color-neutral-800));
}
.gist-meta {
background-color: rgb(26, 26, 26);
color: rgb(var(--color-neutral-400));
}
.gist-meta a {
color: rgb(var(--color-primary-400));
}
.blob-wrapper {
filter: invert(0.9) hue-rotate(180deg);
background-color: #fff;
}
.gist-data {
background: rgb(26, 26, 26);
color: rgb(var(--color-neutral-100));
}
}
}
+9
View File
@@ -0,0 +1,9 @@
.tab__button.tab--active {
border-bottom: 2px solid rgb(var(--color-primary-500));
}
.tab__panel {
display: none;
}
.tab__panel.tab--active {
display: block;
}
+275 -27
View File
@@ -1,17 +1,75 @@
/*! Blowfish | MIT License | https://github.com/nunocoracao/blowfish */
@import "./components/zen-mode.css";
@import "./components/chroma.css";
@import "./components/a11y.css";
@config "../../tailwind.config.js";
@import "tailwindcss";
@config "../../tailwind.config.js";
@import "./components/chroma.css" layer(utilities);
@import "./components/tabs.css" layer(utilities);
@import "./components/zen-mode.css";
@import "./components/gist.css";
@import "./components/a11y.css";
@import "./components/admonition.css" layer(components);
html:not(.dark) {
color-scheme: light;
}
html.dark {
color-scheme: dark;
}
body a,
body button {
@apply transition-colors;
}
/* Staggered entrance for the landing homepage hero. Removed entirely when a
visitor requests reduced motion. */
@keyframes landing-rise {
from {
opacity: 0;
transform: translateY(0.9rem);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.landing-rise {
animation: landing-rise 0.65s cubic-bezier(0.22, 1, 0.36, 1) both;
}
.landing-rise-1 {
animation-delay: 90ms;
}
.landing-rise-2 {
animation-delay: 180ms;
}
.landing-rise-3 {
animation-delay: 270ms;
}
.landing-rise-4 {
animation-delay: 360ms;
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto !important;
}
.landing-rise,
.landing-rise-1,
.landing-rise-2,
.landing-rise-3,
.landing-rise-4 {
animation: none;
}
}
button,
[role="button"] {
cursor: pointer;
@@ -82,7 +140,7 @@ button,
}
.toc a {
@apply font-normal text-neutral-700 dark:text-neutral-400;
@apply font-normal text-neutral-700 dark:text-neutral-300;
}
.toc ul > li {
@@ -90,15 +148,11 @@ button,
}
/* Code Copy */
.highlight-wrapper {
@apply block;
}
.highlight {
@apply relative z-0;
}
.highlight:hover > .copy-button {
.highlight-wrapper:hover > .copy-button {
@apply visible;
}
@@ -174,13 +228,109 @@ pre {
height: 100%;
}
/* ---- Print ---- */
@page {
margin: 2cm;
}
@media print {
html {
color-scheme: light only;
}
body {
background: #fff !important;
color: #111 !important;
max-width: none !important;
padding: 0 !important;
}
/* Site chrome that makes no sense on paper */
body > header,
#background-canvas,
.single_hero_background,
#scroll-to-top,
#bmc-wbtn {
display: none !important;
}
/* Flatten decoration; dark mode prints light */
* {
box-shadow: none !important;
text-shadow: none !important;
}
main,
article,
.prose,
.prose *:not(pre):not(pre *) {
color: #111 !important;
background: transparent !important;
}
pre,
pre * {
background: #f4f4f5 !important;
color: #111 !important;
white-space: pre-wrap !important;
}
/* Links stay useful on paper */
a {
text-decoration: underline;
}
.prose a[href^="http"]::after {
content: " (" attr(href) ")";
font-size: 0.85em;
color: #555;
word-break: break-all;
}
/* Sensible page flow */
pre,
blockquote,
table,
figure,
img {
break-inside: avoid;
}
h1,
h2,
h3,
h4 {
break-after: avoid;
}
img {
max-width: 100% !important;
}
}
/* Background hero: feature image dissolves into the global background */
.hero-canvas-fade {
-webkit-mask-image: linear-gradient(to bottom, black 20%, transparent 92%);
mask-image: linear-gradient(to bottom, black 20%, transparent 92%);
}
/* Shortcode grids: a lone trailing card stretches across the full row */
@media (min-width: 640px) and (max-width: 1023.98px) {
.grid-balance > :last-child:nth-child(odd) {
grid-column: 1 / -1;
}
}
@media (min-width: 1024px) {
.grid-balance-3 > :last-child:nth-child(3n + 1) {
grid-column: 1 / -1;
}
.grid-balance-4 > :last-child:nth-child(4n + 1) {
grid-column: 1 / -1;
}
}
.thumbnail_card {
min-width: 300px;
height: 200px;
aspect-ratio: var(--thumbnail-aspect-ratio, 1.5);
height: auto;
}
.thumbnail_card_related {
height: 150px;
aspect-ratio: var(--thumbnail-aspect-ratio, 1.5);
height: auto;
}
.thumbnail {
@@ -198,6 +348,18 @@ pre {
box-shadow: 5px 5px 20px 1px rgba(0, 0, 0, 0.3);
}
/* placeholder for gallery/carousel */
@variant max-md {
.width-patch {
width: 80vw;
}
}
@variant min-md {
.width-patch {
width: 65ch;
}
}
.anchor {
display: block;
position: relative;
@@ -233,29 +395,115 @@ pre {
z-index: 100;
}
.nested-menu:hover + .menuhide {
visibility: visible;
opacity: 1;
transition:
visibility 0.3s,
opacity 0.3s ease-in-out;
@layer utilities {
.bf-border-color {
@apply border-neutral-300 dark:border-neutral-700;
}
.bf-border-color-hover {
@apply hover:border-primary-600 dark:hover:border-primary-400;
}
.bf-icon-color-hover {
@apply hover:text-primary-600 dark:hover:text-primary-400;
}
.bf-scrollbar {
&::-webkit-scrollbar-track {
background-color: var(--scrollbar-track);
border-radius: var(--scrollbar-track-radius);
}
&::-webkit-scrollbar-thumb {
background-color: var(--scrollbar-thumb);
border-radius: var(--scrollbar-thumb-radius);
}
&::-webkit-scrollbar-corner {
background-color: var(--scrollbar-corner);
border-radius: var(--scrollbar-corner-radius);
}
@supports (-moz-appearance:none) {
scrollbar-width: thin;
scrollbar-color: var(--scrollbar-thumb, initial) var(--scrollbar-track, initial);
}
&::-webkit-scrollbar {
display: block;
width: 8px;
height: 8px;
}
--scrollbar-thumb: oklch(70.8% 0 0);
--scrollbar-track: oklch(92.2% 0 0);
&:is(.dark *) {
--scrollbar-thumb: oklch(43.9% 0 0);
}
&:is(.dark *) {
--scrollbar-track: oklch(26.9% 0 0);
}
}
}
.menuhide:hover {
visibility: visible;
opacity: 1;
transition:
visibility 0.3s,
opacity 0.3s ease-in-out;
@layer base {
* {
@supports (-moz-appearance:none) {
scrollbar-color: initial;
scrollbar-width: initial;
}
}
}
/* Prevent body scroll when mobile menu is open */
body:has(#mobile-menu-toggle:checked) {
overflow: hidden;
}
/* Reset body position for desktop after it was modified on mobile */
@media (min-width: 853px) {
body:has(#mobile-menu-toggle:checked) {
overflow: visible;
}
}
/* Hide buy me a coffee in mobile menu */
#bmc-wbtn {
z-index: 50 !important;
}
.nested-menu {
position: relative;
}
.menuhide {
visibility: hidden;
position: absolute;
z-index: 1000;
width: max-content;
max-width: min(20rem, calc(100vw - 2rem));
opacity: 0;
visibility: hidden;
transition:
visibility 0.3s,
opacity 0.3s ease-in-out;
z-index: 1000;
}
/* 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 {
inset-inline-end: 0;
}
.nested-menu:hover .menuhide,
.nested-menu:focus-within .menuhide {
opacity: 1;
visibility: visible;
}
.active {
+37
View File
@@ -0,0 +1,37 @@
/* Burufugu scheme — the mascot's own palette: sky-blue fish, coral glow, indigo night */
:root {
--color-neutral: 255, 255, 255;
/* Indigo night */
--color-neutral-50: 246, 247, 252;
--color-neutral-100: 238, 240, 249;
--color-neutral-200: 221, 224, 240;
--color-neutral-300: 195, 200, 226;
--color-neutral-400: 141, 148, 189;
--color-neutral-500: 98, 106, 150;
--color-neutral-600: 70, 78, 122;
--color-neutral-700: 48, 55, 97;
--color-neutral-800: 26, 33, 74;
--color-neutral-900: 13, 18, 51;
/* Sky blue (logo) */
--color-primary-50: 240, 247, 254;
--color-primary-100: 224, 239, 254;
--color-primary-200: 186, 222, 253;
--color-primary-300: 138, 197, 250;
--color-primary-400: 96, 172, 246;
--color-primary-500: 74, 158, 240;
--color-primary-600: 47, 115, 205;
--color-primary-700: 42, 98, 189;
--color-primary-800: 38, 76, 152;
--color-primary-900: 30, 58, 110;
/* Coral */
--color-secondary-50: 255, 246, 240;
--color-secondary-100: 255, 234, 222;
--color-secondary-200: 255, 211, 187;
--color-secondary-300: 255, 180, 142;
--color-secondary-400: 255, 138, 92;
--color-secondary-500: 240, 112, 90;
--color-secondary-600: 217, 87, 74;
--color-secondary-700: 184, 64, 58;
--color-secondary-800: 148, 50, 50;
--color-secondary-900: 118, 40, 44;
}
+2
View File
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<svg fill="currentColor" viewBox="0 0 24 24" role="img" xmlns="http://www.w3.org/2000/svg"><path d="M10.617 11.473l4.686 3.695-3.102-7.662zM12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0zm5.797 17.305c-.011.471-.403.842-.875.83-.236 0-.416-.09-.664-.293l-6.19-5-2.079 5.203H6.191L11.438 5.44c.124-.314.427-.52.764-.506.326-.014.63.189.742.506l4.774 11.494c.045.111.08.234.08.348-.001.009-.001.009-.001.023z"/></svg>

After

Width:  |  Height:  |  Size: 478 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/>
</svg>

After

Width:  |  Height:  |  Size: 538 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM112 256H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z"/>
</svg>

After

Width:  |  Height:  |  Size: 479 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><path fill="currentColor" d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>

After

Width:  |  Height:  |  Size: 901 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"/>
</svg>

After

Width:  |  Height:  |  Size: 787 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H48c-13.3 0-24-10.7-24-24s10.7-24 24-24H64V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H48c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/>
</svg>

After

Width:  |  Height:  |  Size: 823 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 35"><path fill="currentColor" d="m0 35 12.172-7L0 21ZM12.172 0 0 7l12.172 7v14l12.172-7V7Z"></path></svg>

After

Width:  |  Height:  |  Size: 162 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M0 216C0 149.7 53.7 96 120 96h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V216zm256 0c0-66.3 53.7-120 120-120h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H320c-35.3 0-64-28.7-64-64V216z"/>
</svg>

After

Width:  |  Height:  |  Size: 451 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 98c26.5 0 49.4-10.5 61.8-30h55.7c8.5 0 16.6 3.3 22.6 9.4l77.3 77.2c12.5 12.5 12.5 32.8 0 45.3l-39.4 39.4c-11.8 11.8-30.8 12.6-43.5 1.7L376 228.6V416c0 26.5-21.5 48-48 48H184c-26.5 0-48-21.5-48-48V228.6L121.5 241c-12.7 10.9-31.7 10.1-43.5-1.7L38.6 199.9c-12.5-12.5-12.5-32.8 0-45.3l77.3-77.2c6-6.1 14.1-9.4 22.6-9.4h55.7c12.4 19.5 35.3 30 61.8 30z"/></svg>

After

Width:  |  Height:  |  Size: 452 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z"/></svg>

After

Width:  |  Height:  |  Size: 205 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+23
View File
@@ -54,12 +54,33 @@ window.addEventListener("DOMContentLoaded", (event) => {
const switcher = document.getElementById("appearance-switcher");
const switcherMobile = document.getElementById("appearance-switcher-mobile");
// Load the i18n translations for the tooltips
const darkLabel = {{ i18n "footer.dark_appearance" | jsonify }};
const lightLabel = {{ i18n "footer.light_appearance" | jsonify }};
updateMeta();
this.updateLogo?.(getTargetAppearance());
// Initialize mermaid theme on page load
updateMermaidTheme();
// Helper to update the tooltip depending on the current mode
const updateTooltip = (targetAppearance) => {
// If target is dark, the next action will be switching to light
const label = targetAppearance === "dark" ? lightLabel : darkLabel;
if (switcher) {
switcher.setAttribute("aria-label", label);
switcher.setAttribute("title", label);
}
if (switcherMobile) {
switcherMobile.setAttribute("aria-label", label);
switcherMobile.setAttribute("title", label);
}
};
// Set initial tooltip on load
updateTooltip(getTargetAppearance());
if (switcher) {
switcher.addEventListener("click", () => {
document.documentElement.classList.toggle("dark");
@@ -70,6 +91,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
);
updateMeta();
updateMermaidTheme();
updateTooltip(targetAppearance);
this.updateLogo?.(targetAppearance);
});
switcher.addEventListener("contextmenu", (event) => {
@@ -87,6 +109,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
);
updateMeta();
updateMermaidTheme();
updateTooltip(targetAppearance);
this.updateLogo?.(targetAppearance);
});
switcherMobile.addEventListener("contextmenu", (event) => {
+16 -2
View File
@@ -23,9 +23,18 @@ function setBackgroundBlur(targetId, scrollDivisor = 300, disableBlur = false, i
blurElement.style.opacity = scroll / scrollDivisor;
}
};
let framePending = false;
const requestBlurUpdate = () => {
if (framePending) return;
framePending = true;
window.requestAnimationFrame(() => {
framePending = false;
updateBlur();
});
};
blurElement.setAttribute("role", "presentation");
blurElement.setAttribute("tabindex", "-1");
window.addEventListener("scroll", updateBlur);
window.addEventListener("scroll", requestBlurUpdate, { passive: true });
updateBlur();
}
@@ -33,7 +42,12 @@ document.querySelectorAll("script[data-blur-id]").forEach((script) => {
const targetId = script.getAttribute("data-blur-id");
const scrollDivisor = Number(script.getAttribute("data-scroll-divisor") || 300);
const isMenuBlur = targetId === "menu-blur";
const settings = JSON.parse(localStorage.getItem("a11ySettings") || "{}");
let settings = {};
try {
settings = JSON.parse(localStorage.getItem("a11ySettings") || "{}");
} catch (_) {
settings = {};
}
const disableBlur = settings.disableBlur || false;
setBackgroundBlur(targetId, scrollDivisor, disableBlur, isMenuBlur);
});
-4
View File
@@ -1,4 +0,0 @@
document.getElementById("button_likes") &&
document.getElementById("button_likes").addEventListener("click", () => {
process_article();
});
+16 -17
View File
@@ -2,39 +2,35 @@ var scriptBundle = document.getElementById("script-bundle");
var copyText = scriptBundle?.getAttribute("data-copy") || "Copy";
var copiedText = scriptBundle?.getAttribute("data-copied") || "Copied";
function createCopyButton(highlightDiv) {
function createCopyButton(highlightWrapper) {
const button = document.createElement("button");
button.className = "copy-button";
button.type = "button";
button.ariaLabel = copyText;
button.innerText = copyText;
button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv));
highlightDiv.insertBefore(button, highlightDiv.firstChild);
const wrapper = document.createElement("div");
wrapper.className = "highlight-wrapper";
highlightDiv.parentNode.insertBefore(wrapper, highlightDiv);
wrapper.appendChild(highlightDiv);
button.addEventListener("click", () => copyCodeToClipboard(button, highlightWrapper));
highlightWrapper.insertBefore(button, highlightWrapper.firstChild);
}
async function copyCodeToClipboard(button, highlightDiv) {
const codeToCopy = getCodeText(highlightDiv);
async function copyCodeToClipboard(button, highlightWrapper) {
const codeToCopy = getCodeText(highlightWrapper);
function fallback(codeToCopy, highlightDiv) {
function fallback(codeToCopy, highlightWrapper) {
const textArea = document.createElement("textArea");
textArea.contentEditable = "true";
textArea.readOnly = "false";
textArea.className = "copy-textarea";
textArea.value = codeToCopy;
highlightDiv.insertBefore(textArea, highlightDiv.firstChild);
highlightWrapper.insertBefore(textArea, highlightWrapper.firstChild);
const range = document.createRange();
range.selectNodeContents(textArea);
const sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
textArea.focus();
textArea.setSelectionRange(0, 999999);
document.execCommand("copy");
highlightDiv.removeChild(textArea);
highlightWrapper.removeChild(textArea);
}
try {
@@ -42,10 +38,10 @@ async function copyCodeToClipboard(button, highlightDiv) {
if (result.state == "granted" || result.state == "prompt") {
await navigator.clipboard.writeText(codeToCopy);
} else {
fallback(codeToCopy, highlightDiv);
fallback(codeToCopy, highlightWrapper);
}
} catch (_) {
fallback(codeToCopy, highlightDiv);
fallback(codeToCopy, highlightWrapper);
} finally {
button.blur();
button.innerText = copiedText;
@@ -55,7 +51,10 @@ async function copyCodeToClipboard(button, highlightDiv) {
}
}
function getCodeText(highlightDiv) {
function getCodeText(highlightWrapper) {
const highlightDiv = highlightWrapper.querySelector(".highlight");
if (!highlightDiv) return "";
const codeBlock = highlightDiv.querySelector("code");
const inlineLines = codeBlock?.querySelectorAll(".cl"); // linenos=inline
const tableCodeCell = highlightDiv?.querySelector(".lntable .lntd:last-child code"); // linenos=table
@@ -75,5 +74,5 @@ function getCodeText(highlightDiv) {
}
window.addEventListener("DOMContentLoaded", (event) => {
document.querySelectorAll(".highlight").forEach((highlightDiv) => createCopyButton(highlightDiv));
document.querySelectorAll(".highlight-wrapper").forEach((highlightWrapper) => createCopyButton(highlightWrapper));
});
+13
View File
@@ -0,0 +1,13 @@
(function () {
const links = document.querySelectorAll(".email-link");
links.forEach((link) => {
let email = atob(link.getAttribute("data-email"));
const subject = link.getAttribute("data-subject");
let mailto = email.startsWith("mailto:") ? email : "mailto:" + email;
if (subject) {
mailto += (mailto.includes("?") ? "&" : "?") + "subject=" + encodeURIComponent(subject);
}
link.href = mailto;
});
})();
+154
View File
@@ -0,0 +1,154 @@
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.23.0/firebase-app.js";
import {
getFirestore,
doc,
getDoc,
setDoc,
updateDoc,
increment,
onSnapshot,
} from "https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore.js";
import { getAuth, signInAnonymously } from "https://www.gstatic.com/firebasejs/9.23.0/firebase-auth.js";
let app, db, auth, oids;
try {
const configEl = document.getElementById("firebase-config");
if (!configEl?.textContent) {
throw new Error("Firebase config element not found");
}
const data = JSON.parse(configEl.textContent);
app = initializeApp(data.config);
oids = {
views: configEl.getAttribute("data-views"),
likes: configEl.getAttribute("data-likes"),
};
db = getFirestore(app);
auth = getAuth(app);
} catch (e) {
console.error("Firebase initialization failed:", e.message);
throw e;
}
const id = oids?.views?.replaceAll("/", "-");
const id_likes = oids?.likes?.replaceAll("/", "-");
let liked = false;
let authReady = false;
function formatNumber(n) {
return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function toggleLoaders(node) {
var classesString = node.className;
if (classesString == "") return;
var classes = classesString.split(" ");
for (var i in classes) {
node.classList.toggle(classes[i]);
}
}
function updateDisplay(collection, nodeId) {
const node = document.getElementById(nodeId);
if (!node) return;
const docId = nodeId.replaceAll("/", "-");
onSnapshot(
doc(db, collection, docId),
(snapshot) => {
node.innerText = snapshot.exists() ? formatNumber(snapshot.data()[collection]) : 0;
toggleLoaders(node);
},
(error) => {
console.error("Firebase snapshot update failed:", error);
},
);
}
async function recordView(id) {
if (!id || localStorage.getItem(id)) return;
try {
const ref = doc(db, "views", id);
const snap = await getDoc(ref);
snap.exists() ? await updateDoc(ref, { views: increment(1) }) : await setDoc(ref, { views: 1 });
localStorage.setItem(id, true);
} catch (e) {
console.error("Record view operation failed:", e.message);
}
}
function updateButton(isLiked) {
const hearts = document.querySelectorAll("span[id='button_likes_heart']");
const empties = document.querySelectorAll("span[id='button_likes_emtpty_heart']");
const texts = document.querySelectorAll("span[id='button_likes_text']");
hearts.forEach((el) => {
el.style.display = isLiked ? "" : "none";
});
empties.forEach((el) => {
el.style.display = isLiked ? "none" : "";
});
texts.forEach((el) => {
el.innerText = isLiked ? "" : "\xa0Like";
});
}
async function toggleLike(add) {
if (!id_likes || !authReady) return;
try {
const ref = doc(db, "likes", id_likes);
const snap = await getDoc(ref);
liked = add;
add ? localStorage.setItem(id_likes, true) : localStorage.removeItem(id_likes);
updateButton(add);
snap.exists()
? await updateDoc(ref, { likes: increment(add ? 1 : -1) })
: await setDoc(ref, { likes: add ? 1 : 0 });
} catch (e) {
console.error("Like operation failed:", e.message);
liked = !add;
add ? localStorage.removeItem(id_likes) : localStorage.setItem(id_likes, true);
updateButton(!add);
}
}
signInAnonymously(auth)
.then(() => {
authReady = true;
document.querySelectorAll("span[id^='views_']").forEach((node) => {
if (node.id) updateDisplay("views", node.id);
});
document.querySelectorAll("span[id^='likes_']").forEach((node) => {
if (node.id) updateDisplay("likes", node.id);
});
recordView(id);
if (id_likes && localStorage.getItem(id_likes)) {
liked = true;
updateButton(true);
}
const likeButton = document.getElementById("button_likes");
if (likeButton) {
likeButton.addEventListener("click", () => {
toggleLike(!liked);
});
}
})
.catch((error) => {
console.error("Firebase anonymous sign-in failed:", error.message);
authReady = false;
});
window.process_article = () => toggleLike(!liked);
+24
View File
@@ -0,0 +1,24 @@
(function () {
var script = document.currentScript;
var target = document.getElementById(script.getAttribute("data-hero-id"));
if (!target) return;
var distance = parseInt(script.getAttribute("data-fade-distance"), 10) || 500;
var ticking = false;
function update() {
ticking = false;
var opacity = Math.max(0, 1 - window.scrollY / distance);
target.style.opacity = opacity;
target.style.visibility = opacity === 0 ? "hidden" : "visible";
}
window.addEventListener(
"scroll",
function () {
if (!ticking) {
ticking = true;
requestAnimationFrame(update);
}
},
{ passive: true }
);
update();
})();
+319
View File
@@ -0,0 +1,319 @@
(function () {
var config = window.BlowfishLanguageRedirectConfig;
if (!config || config.enabled !== true) {
return;
}
function getStorage() {
if (!config.storageKey) {
return null;
}
try {
return window.localStorage;
} catch (error) {
return null;
}
}
var storage = getStorage();
function normalizeLanguageTag(value) {
if (typeof value !== "string") {
return "";
}
return value.trim().toLowerCase().replace(/_/g, "-");
}
function getBaseLanguage(value) {
var languageTag = normalizeLanguageTag(value);
if (!languageTag) {
return "";
}
return languageTag.split("-")[0];
}
function getTranslationTags(translation) {
if (!translation) {
return [];
}
var tags = [];
var values = [translation.lang, translation.languageCode];
for (var i = 0; i < values.length; i += 1) {
var languageTag = normalizeLanguageTag(values[i]);
if (languageTag && tags.indexOf(languageTag) === -1) {
tags.push(languageTag);
}
}
return tags;
}
function getCanonicalTranslationTag(translation) {
var tags = getTranslationTags(translation);
if (!tags.length) {
return "";
}
return tags.reduce(function (bestTag, languageTag) {
if (languageTag.split("-").length > bestTag.split("-").length) {
return languageTag;
}
return bestTag;
}, tags[0]);
}
function translationHasTag(translation, languageTag) {
var normalizedTag = normalizeLanguageTag(languageTag);
if (!normalizedTag) {
return false;
}
return getTranslationTags(translation).indexOf(normalizedTag) !== -1;
}
function getAvailableTranslations() {
if (!Array.isArray(config.translations)) {
return [];
}
return config.translations.filter(function (translation) {
return translation && translation.url && getTranslationTags(translation).length > 0;
});
}
var translations = getAvailableTranslations();
function findExactTranslation(languageTag) {
var normalizedTag = normalizeLanguageTag(languageTag);
if (!normalizedTag) {
return null;
}
for (var i = 0; i < translations.length; i += 1) {
if (translationHasTag(translations[i], normalizedTag)) {
return translations[i];
}
}
return null;
}
function findBaseTranslation(languageTag) {
var baseLanguage = getBaseLanguage(languageTag);
if (!baseLanguage) {
return null;
}
for (var i = 0; i < translations.length; i += 1) {
var tags = getTranslationTags(translations[i]);
for (var j = 0; j < tags.length; j += 1) {
if (getBaseLanguage(tags[j]) === baseLanguage) {
return translations[i];
}
}
}
return null;
}
function findBestTranslation(languageTag) {
var normalizedTag = normalizeLanguageTag(languageTag);
if (!normalizedTag) {
return null;
}
while (normalizedTag) {
var translation = findExactTranslation(normalizedTag);
if (translation) {
return translation;
}
var lastSubtagIndex = normalizedTag.lastIndexOf("-");
if (lastSubtagIndex === -1) {
break;
}
normalizedTag = normalizedTag.slice(0, lastSubtagIndex);
}
return findBaseTranslation(languageTag);
}
function getStoredLanguage() {
if (!storage || config.storedLanguageRedirect !== true) {
return null;
}
try {
return storage.getItem(config.storageKey);
} catch (error) {
return null;
}
}
function setStoredLanguage(language) {
if (!storage) {
return;
}
var languageTag = normalizeLanguageTag(language);
if (!languageTag) {
return;
}
try {
storage.setItem(config.storageKey, languageTag);
} catch (error) {
// Ignore storage errors so the language link keeps its normal behavior.
}
}
function getBrowserTranslation() {
var languages = [];
if (Array.isArray(navigator.languages)) {
languages = languages.concat(navigator.languages);
}
if (navigator.language) {
languages.push(navigator.language);
}
for (var i = 0; i < languages.length; i += 1) {
var translation = findBestTranslation(languages[i]);
if (translation) {
return translation;
}
}
if (config.fallbackLanguage) {
return findBestTranslation(config.fallbackLanguage);
}
return null;
}
function normalizePath(pathname) {
if (pathname.length > 1 && pathname.charAt(pathname.length - 1) === "/") {
return pathname.slice(0, -1);
}
return pathname;
}
function getUrl(value) {
try {
return new URL(value, window.location.origin);
} catch (error) {
return null;
}
}
function redirectToTranslation(translation) {
if (!translation || !translation.url) {
return false;
}
var currentLanguage = getCanonicalTranslationTag({
lang: config.currentLanguage,
languageCode: config.currentLanguageCode
});
var targetLanguage = getCanonicalTranslationTag(translation);
if (currentLanguage && targetLanguage && currentLanguage === targetLanguage) {
return false;
}
var targetUrl = getUrl(translation.url);
if (!targetUrl || normalizePath(targetUrl.pathname) === normalizePath(window.location.pathname)) {
return false;
}
window.location.replace(targetUrl.href);
return true;
}
function redirectToLanguage(language) {
return redirectToTranslation(findBestTranslation(language));
}
function findTranslationByUrl(url) {
var linkUrl = getUrl(url);
if (!linkUrl) {
return null;
}
for (var i = 0; i < translations.length; i += 1) {
var translationUrl = getUrl(translations[i].url);
if (translationUrl && normalizePath(translationUrl.pathname) === normalizePath(linkUrl.pathname)) {
return translations[i];
}
}
return null;
}
function bindLanguageSwitcher() {
document.addEventListener("click", function (event) {
if (!event.target || !event.target.closest) {
return;
}
var link = event.target.closest(".translation a[href]");
if (!link) {
return;
}
var translation = findTranslationByUrl(link.href);
if (translation) {
setStoredLanguage(getCanonicalTranslationTag(translation));
}
});
}
function maybeRedirect() {
var storedLanguage = getStoredLanguage();
if (storedLanguage) {
redirectToLanguage(storedLanguage);
return;
}
if (config.browserRedirectHomeOnly === true && config.isHome !== true) {
return;
}
var browserTranslation = getBrowserTranslation();
if (browserTranslation) {
redirectToTranslation(browserTranslation);
}
}
bindLanguageSwitcher();
maybeRedirect();
})();
+55
View File
@@ -0,0 +1,55 @@
(function () {
"use strict";
function initLayoutSwitcher() {
document.querySelectorAll("[data-layout-switcher]").forEach(function (lab) {
var buttons = Array.prototype.slice.call(lab.querySelectorAll("[data-layout-switcher-button]"));
var panels = lab.querySelectorAll("[data-layout-switcher-panel]");
var activate = function (layout, focusTab) {
buttons.forEach(function (button) {
var active = button.dataset.layoutSwitcherButton === layout;
button.setAttribute("aria-selected", String(active));
button.setAttribute("tabindex", active ? "0" : "-1");
button.classList.toggle("border-primary-600", active);
button.classList.toggle("bg-primary-600", active);
button.classList.toggle("text-white", active);
button.classList.toggle("dark:border-primary-500", active);
button.classList.toggle("dark:bg-primary-500", active);
if (active && focusTab) button.focus();
});
panels.forEach(function (panel) {
panel.hidden = panel.dataset.layoutSwitcherPanel !== layout;
});
};
buttons.forEach(function (button, index) {
button.addEventListener("click", function () {
activate(button.dataset.layoutSwitcherButton, false);
});
button.addEventListener("keydown", function (event) {
var target = null;
if (event.key === "ArrowRight") {
target = buttons[(index + 1) % buttons.length];
} else if (event.key === "ArrowLeft") {
target = buttons[(index - 1 + buttons.length) % buttons.length];
} else if (event.key === "Home") {
target = buttons[0];
} else if (event.key === "End") {
target = buttons[buttons.length - 1];
}
if (target) {
event.preventDefault();
activate(target.dataset.layoutSwitcherButton, true);
}
});
});
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initLayoutSwitcher);
} else {
initLayoutSwitcher();
}
})();
+103
View File
@@ -0,0 +1,103 @@
(function () {
"use strict";
function syncCheckboxLabels(checkbox) {
var expanded = checkbox.checked ? "true" : "false";
document.querySelectorAll('label[role="button"][for="' + checkbox.id + '"]').forEach(function (label) {
label.setAttribute("aria-expanded", expanded);
});
}
function setupCheckboxLabels() {
var seen = {};
document.querySelectorAll('label[role="button"][for]').forEach(function (label) {
var checkbox = document.getElementById(label.getAttribute("for"));
if (!checkbox || checkbox.type !== "checkbox") return;
// Enter/Space activates the label like a real button
label.addEventListener("keydown", function (event) {
if (event.key === "Enter" || event.key === " " || event.key === "Spacebar") {
event.preventDefault();
label.click();
}
});
if (!seen[checkbox.id]) {
seen[checkbox.id] = true;
checkbox.addEventListener("change", function () {
syncCheckboxLabels(checkbox);
});
syncCheckboxLabels(checkbox);
}
});
}
function setupMobileMenuEscape() {
var toggle = document.getElementById("mobile-menu-toggle");
if (!toggle) return;
document.addEventListener("keydown", function (event) {
if (event.key === "Escape" && toggle.checked) {
toggle.checked = false;
syncCheckboxLabels(toggle);
var opener = document.querySelector('label[role="button"][for="mobile-menu-toggle"]');
if (opener) opener.focus();
}
});
}
function setupMobileMenuOutsideClick() {
var toggle = document.getElementById("mobile-menu-toggle");
var dialog = document.getElementById("mobile-menu-dialog");
if (!toggle || !dialog) return;
document.addEventListener("click", function (event) {
if (!toggle.checked || event.target === toggle) return;
if (dialog.contains(event.target)) return;
if (event.target.closest('label[for="mobile-menu-toggle"]')) return;
toggle.checked = false;
syncCheckboxLabels(toggle);
});
}
function setupDesktopDropdowns() {
document.querySelectorAll(".nested-menu").forEach(function (menu) {
var trigger = menu.querySelector("[aria-haspopup]");
if (!trigger) return;
var setExpanded = function (expanded) {
trigger.setAttribute("aria-expanded", expanded ? "true" : "false");
};
menu.addEventListener("mouseenter", function () {
setExpanded(true);
});
menu.addEventListener("mouseleave", function () {
setExpanded(false);
});
menu.addEventListener("focusin", function () {
setExpanded(true);
});
menu.addEventListener("focusout", function (event) {
if (!menu.contains(event.relatedTarget)) setExpanded(false);
});
menu.addEventListener("keydown", function (event) {
if (event.key === "Escape") {
if (document.activeElement && menu.contains(document.activeElement)) {
document.activeElement.blur();
}
setExpanded(false);
}
});
});
}
function init() {
setupCheckboxLabels();
setupMobileMenuEscape();
setupMobileMenuOutsideClick();
setupDesktopDropdowns();
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
} else {
init();
}
})();
-33
View File
@@ -1,33 +0,0 @@
var menuButton = document.getElementById("menu-button");
var menuCloseButton = document.getElementById("menu-close-button");
var menuWrapper = document.getElementById("menu-wrapper");
var menuOpen = false;
var openMenu = function () {
if (!menuOpen) {
menuOpen = true;
document.body.style.overflowY = "hidden";
menuButton.style.visibility = "hidden";
menuWrapper.style.visibility = "visible";
menuWrapper.style.opacity = "1";
window.onbeforeunload = function () {
closeMenu();
};
}
};
var closeMenu = function (e) {
if (menuOpen) {
menuOpen = false;
document.body.style.overflowY = "auto";
menuButton.style.visibility = "visible";
menuWrapper.style.visibility = "hidden";
menuWrapper.style.opacity = "0";
window.onbeforeunload = function () {};
e.stopPropagation();
}
};
menuButton && menuButton.addEventListener("click", openMenu);
menuCloseButton && menuCloseButton.addEventListener("click", closeMenu);
-131
View File
@@ -1,131 +0,0 @@
const pageScriptElement = document.currentScript;
const oid =
pageScriptElement && pageScriptElement.getAttribute("data-oid")
? pageScriptElement.getAttribute("data-oid")
: (console.error("data-oid is null"), null);
const oid_likes =
pageScriptElement && pageScriptElement.getAttribute("data-oid-likes")
? pageScriptElement.getAttribute("data-oid-likes")
: (console.error("data-oid-likes is null"), null);
let liked_page = false;
const id = oid ? oid.replaceAll("/", "-") : oid;
const id_likes = oid_likes ? oid_likes.replaceAll("/", "-") : oid_likes;
if (typeof auth !== "undefined") {
const viewed = localStorage.getItem(id);
if (!viewed) {
auth
.signInAnonymously()
.then(() => {
const docRef = db.collection("views").doc(id);
localStorage.setItem(id, true);
docRef
.get()
.then((doc) => {
if (doc.exists) {
db.collection("views")
.doc(id)
.update({
views: firebase.firestore.FieldValue.increment(1),
});
} else {
db.collection("views").doc(id).set({ views: 1 });
}
})
.catch((error) => {
console.log("Error getting document:", error);
});
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
const liked = localStorage.getItem(id_likes);
if (liked) {
liked_page = true;
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
}
}
function like_article(id_likes) {
auth
.signInAnonymously()
.then(() => {
const docRef = db.collection("likes").doc(id_likes);
docRef
.get()
.then((doc) => {
liked_page = true;
localStorage.setItem(id_likes, true);
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "";
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "none";
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "";
if (doc.exists) {
db.collection("likes")
.doc(id_likes)
.update({
likes: firebase.firestore.FieldValue.increment(1),
});
} else {
db.collection("likes").doc(id_likes).set({ likes: 1 });
}
})
.catch((error) => {
console.log("Error getting document:", error);
});
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
function remove_like_article(id_likes) {
auth
.signInAnonymously()
.then(() => {
const docRef = db.collection("likes").doc(id_likes);
docRef
.get()
.then((doc) => {
liked_page = false;
localStorage.removeItem(id_likes);
document.querySelectorAll("span[id='button_likes_heart']")[0].style.display = "none";
document.querySelectorAll("span[id='button_likes_emtpty_heart']")[0].style.display = "";
document.querySelectorAll("span[id='button_likes_text']")[0].innerText = "\xa0Like";
if (doc.exists) {
db.collection("likes")
.doc(id_likes)
.update({
likes: firebase.firestore.FieldValue.increment(-1),
});
} else {
db.collection("likes").doc(id_likes).set({ likes: 0 });
}
})
.catch((error) => {
console.log("Error getting document:", error);
});
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
function process_article() {
if (!liked_page) {
like_article(id_likes);
} else {
remove_like_article(id_likes);
}
}
+17
View File
@@ -0,0 +1,17 @@
(function() {
'use strict';
var closedDetails = [];
window.addEventListener('beforeprint', function() {
var allDetails = document.querySelectorAll('details:not([open])');
for (var i = 0; i < allDetails.length; i++) {
allDetails[i].open = true;
closedDetails.push(allDetails[i]);
}
});
window.addEventListener('afterprint', function() {
for (var i = 0; i < closedDetails.length; i++) {
closedDetails[i].open = false;
}
closedDetails = [];
});
})();
-70
View File
@@ -1,70 +0,0 @@
if (typeof auth !== "undefined") {
var viewsCollection = db.collection("views");
var likesCollection = db.collection("likes");
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function toggleLoaders(node) {
var classesString = node.className;
if (classesString == "") return;
var classes = classesString.split(" ");
for (var i in classes) {
node.classList.toggle(classes[i]);
}
}
var update_views = function (node, id) {
viewsCollection.doc(id).onSnapshot((doc) => {
var data = doc.data();
if (data) {
node.innerText = numberWithCommas(data.views);
} else {
node.innerText = 0;
}
toggleLoaders(node);
});
};
var update_likes = function (node, id) {
likesCollection.doc(id).onSnapshot((doc) => {
var data = doc.data();
if (data) {
node.innerText = numberWithCommas(data.likes);
} else {
node.innerText = 0;
}
toggleLoaders(node);
});
};
auth
.signInAnonymously()
.then(() => {
var views_nodes = document.querySelectorAll("span[id^='views_']");
for (var i in views_nodes) {
var node = views_nodes[i];
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
if (id) {
update_views(node, id);
}
}
var likes_nodes = document.querySelectorAll("span[id^='likes_']");
for (var i in likes_nodes) {
var node = likes_nodes[i];
var id = node.id ? node.id.replaceAll("/", "-") : node.id;
if (id) {
update_likes(node, id);
}
}
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
console.error(errorCode, errorMessage);
});
}
+9
View File
@@ -0,0 +1,9 @@
function readingProgress() {
const bar = document.getElementById("reading-progress");
if (!bar) return;
const scrollable = document.documentElement.scrollHeight - window.innerHeight;
bar.style.width = scrollable > 0 ? `${(window.scrollY / scrollable) * 100}%` : "0%";
}
window.addEventListener("scroll", readingProgress, { passive: true });
window.addEventListener("load", readingProgress);
+49 -2
View File
@@ -11,6 +11,7 @@ var last = output.lastChild;
var searchVisible = false;
var indexed = false;
var hasResults = false;
var previouslyFocused = null;
// Listen for events
showButton ? showButton.addEventListener("click", displaySearch) : null;
@@ -22,6 +23,11 @@ modal.addEventListener("click", function (event) {
event.stopImmediatePropagation();
return false;
});
const shortcutHint = document.getElementById("search-shortcut-hint");
if (shortcutHint && !/Mac|iPhone|iPad/.test(navigator.platform)) {
shortcutHint.textContent = "Ctrl K";
}
document.addEventListener("keydown", function (event) {
// Forward slash to open search wrapper
if (event.key == "/") {
@@ -35,11 +41,40 @@ document.addEventListener("keydown", function (event) {
}
}
// Cmd+K (macOS) / Ctrl+K to toggle search wrapper
if (event.key.toLowerCase() == "k" && (event.metaKey || event.ctrlKey)) {
event.preventDefault();
if (searchVisible) {
hideSearch();
} else {
displaySearch();
}
}
// Esc to close search wrapper
if (event.key == "Escape") {
hideSearch();
}
// Trap Tab / Shift+Tab focus inside the modal while it is open
if (event.key == "Tab" && searchVisible) {
var focusable = modal.querySelectorAll('a[href], button, input, [tabindex="0"]');
if (focusable.length > 0) {
var firstFocusable = focusable[0];
var lastFocusable = focusable[focusable.length - 1];
if (!modal.contains(document.activeElement)) {
event.preventDefault();
firstFocusable.focus();
} else if (event.shiftKey && document.activeElement == firstFocusable) {
event.preventDefault();
lastFocusable.focus();
} else if (!event.shiftKey && document.activeElement == lastFocusable) {
event.preventDefault();
firstFocusable.focus();
}
}
}
// Down arrow to move down results list
if (event.key == "ArrowDown") {
if (searchVisible && hasResults) {
@@ -91,6 +126,7 @@ function displaySearch() {
buildIndex();
}
if (!searchVisible) {
previouslyFocused = document.activeElement;
document.body.style.overflow = "hidden";
wrapper.style.visibility = "visible";
input.focus();
@@ -104,7 +140,12 @@ function hideSearch() {
wrapper.style.visibility = "hidden";
input.value = "";
output.innerHTML = "";
document.activeElement.blur();
if (previouslyFocused && typeof previouslyFocused.focus === "function" && document.contains(previouslyFocused)) {
previouslyFocused.focus();
} else if (document.activeElement) {
document.activeElement.blur();
}
previouslyFocused = null;
searchVisible = false;
}
}
@@ -151,6 +192,12 @@ function buildIndex() {
}
function executeQuery(term) {
if (!indexed) {
buildIndex();
}
if (!fuse) {
return;
}
let results = fuse.search(term);
let resultsHTML = "";
@@ -193,7 +240,7 @@ function executeQuery(term) {
}
output.innerHTML = resultsHTML;
if (results.length > 0) {
if (results.length > 0 && output.firstChild) {
first = output.firstChild.firstElementChild;
last = output.lastChild.firstElementChild;
}
+1 -2
View File
@@ -27,7 +27,7 @@ function _getPackeryOptions(nodeGallery) {
}
(function init() {
$(window).on("load", function () {
window.addEventListener("load", function () {
let packeries = [];
let nodeGalleries = document.querySelectorAll(".gallery");
@@ -35,6 +35,5 @@ function _getPackeryOptions(nodeGallery) {
let packery = new Packery(nodeGallery, _getPackeryOptions(nodeGallery));
packeries.push(packery);
});
console.groupEnd();
});
})();
+59
View File
@@ -0,0 +1,59 @@
function initTabs() {
tabClickHandler = (event) => {
const button = event.target.closest(".tab__button");
if (!button) return;
const container = button.closest(".tab__container");
const tabIndex = parseInt(button.dataset.tabIndex);
const tabLabel = button.dataset.tabLabel;
const group = container.dataset.tabGroup;
if (group) {
const allGroupContainers = document.querySelectorAll(`.tab__container[data-tab-group="${group}"]`);
allGroupContainers.forEach((groupContainer) => {
const targetButton = Array.from(groupContainer.querySelectorAll(".tab__button")).find(
(btn) => btn.dataset.tabLabel === tabLabel,
);
if (targetButton) {
const targetIndex = parseInt(targetButton.dataset.tabIndex);
activateTab(groupContainer, targetIndex);
}
});
} else {
activateTab(container, tabIndex);
}
};
document.addEventListener("click", tabClickHandler);
}
function activateTab(container, activeIndex) {
const buttons = container.querySelectorAll(".tab__button");
const panels = container.querySelectorAll(".tab__panel");
buttons.forEach((btn, index) => {
if (index === activeIndex) {
btn.classList.add("tab--active");
btn.setAttribute("aria-selected", "true");
} else {
btn.classList.remove("tab--active");
btn.setAttribute("aria-selected", "false");
}
});
panels.forEach((panel, index) => {
if (index === activeIndex) {
panel.classList.add("tab--active");
} else {
panel.classList.remove("tab--active");
}
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initTabs);
} else {
initTabs();
}
+9
View File
@@ -0,0 +1,9 @@
/**
* Fuse.js v7.5.0 - Lightweight fuzzy-search (http://fusejs.io)
*
* Copyright (c) 2026 Kiro Risk (http://kiro.me)
* All Rights Reserved. Apache Software License 2.0
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
function e(e){return Array.isArray?Array.isArray(e):u(e)===`[object Array]`}function t(e){if(typeof e==`string`)return e;if(typeof e==`bigint`)return e.toString();let t=e+``;return t==`0`&&1/e==-1/0?`-0`:t}function n(e){return e==null?``:t(e)}function r(e){return typeof e==`string`}function i(e){return typeof e==`number`}function a(e){return e===!0||e===!1||s(e)&&u(e)==`[object Boolean]`}function o(e){return typeof e==`object`}function s(e){return o(e)&&e!==null}function c(e){return e!=null}function l(e){return!e.trim().length}function u(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}const d=`Invalid doc index: must be a non-negative integer within the bounds of the docs array`,f=e=>`Invalid value for key ${e}`,p=e=>`Pattern length exceeds max of ${e}.`,m=e=>`Missing ${e} property in key`,h=e=>`Property 'weight' in key '${e}' must be a positive integer`,g=Object.prototype.hasOwnProperty;var _=class{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach(e=>{let n=v(e);this._keys.push(n),this._keyMap[n.id]=n,t+=n.weight}),this._keys.forEach(e=>{e.weight/=t})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function v(t){let n=null,i=null,a=null,o=1,s=null;if(r(t)||e(t))a=t,n=y(t),i=b(t);else{if(!g.call(t,`name`))throw Error(m(`name`));let e=t.name;if(a=e,g.call(t,`weight`)&&t.weight!==void 0&&(o=t.weight,o<=0))throw Error(h(b(e)));n=y(e),i=b(e),s=t.getFn??null}return{path:n,id:i,weight:o,src:a,getFn:s}}function y(t){return e(t)?t:t.split(`.`)}function b(t){return e(t)?t.join(`.`):t}function x(t,o){let s=[],l=!1,u=(t,o,d,f)=>{if(c(t))if(!o[d])s.push(f===void 0?t:{v:t,i:f});else{let p=t[o[d]];if(!c(p))return;if(d===o.length-1&&(r(p)||i(p)||a(p)||typeof p==`bigint`))s.push(f===void 0?n(p):{v:n(p),i:f});else if(e(p)){l=!0;for(let e=0,t=p.length;e<t;e+=1)u(p[e],o,d+1,e)}else o.length&&u(p,o,d+1,f)}};return u(t,r(o)?o.split(`.`):o,0),l?s:s[0]}const S={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},C={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1},w={location:0,threshold:.6,distance:100},T={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:`any`,getFn:x,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},E=Object.freeze({...C,...S,...w,...T});function D(e){return e>=9&&e<=13||e===32||e===160}function O(e=1,t=3){let n=new Map,r=10**t;return{get(t){let i=0,a=!1;for(let e=0;e<t.length;e++)D(t.charCodeAt(e))?a=!1:a||(i++,a=!0);if(i===0&&(i=1),n.has(i))return n.get(i);let o=Math.round(r/i**(.5*e))/r;return n.set(i,o),o},clear(){n.clear()}}}var k=class{constructor({getFn:e=E.getFn,fieldNormWeight:t=E.fieldNormWeight}={}){this.norm=O(t,3),this.getFn=e,this.isCreated=!1,this.docs=[],this.keys=[],this._keysMap={},this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((e,t)=>{this._keysMap[e.id]=t})}create(){if(this.isCreated||!this.docs.length)return;this.isCreated=!0;let e=this.docs.length;this.records=Array(e);let t=0;if(r(this.docs[0]))for(let n=0;n<e;n++){let e=this._createStringRecord(this.docs[n],n);e&&(this.records[t++]=e)}else for(let n=0;n<e;n++)this.records[t++]=this._createObjectRecord(this.docs[n],n);this.records.length=t,this.norm.clear()}add(e,t){if(!Number.isInteger(t)||t<0)throw Error(d);if(r(e)){let n=this._createStringRecord(e,t);return n&&this.records.push(n),n}let n=this._createObjectRecord(e,t);return this.records.push(n),n}removeAt(e){if(!Number.isInteger(e)||e<0)throw Error(d);for(let t=0,n=this.records.length;t<n;t+=1)if(this.records[t].i===e){this.records.splice(t,1);break}for(let t=0,n=this.records.length;t<n;t+=1)this.records[t].i>e&&--this.records[t].i}removeAll(e){let t=new Set;for(let n of e)Number.isInteger(n)&&n>=0&&t.add(n);if(t.size===0)return;this.records=this.records.filter(e=>!t.has(e.i));let n=Array.from(t).sort((e,t)=>e-t);for(let e of this.records){let t=0,r=n.length;for(;t<r;){let i=t+r>>>1;n[i]<e.i?t=i+1:r=i}e.i-=t}}getValueForItemAtKeyId(e,t){return e[this._keysMap[t]]}size(){return this.records.length}_createStringRecord(e,t){return!c(e)||l(e)?null:{v:e,i:t,n:this.norm.get(e)}}_createObjectRecord(t,i){let a={i,$:{}};for(let i=0,o=this.keys.length;i<o;i++){let o=this.keys[i],s=o.getFn?o.getFn(t):this.getFn(t,o.path);if(c(s)){if(e(s)){let e=[];for(let t=0,i=s.length;t<i;t+=1){let i=s[t];if(c(i)){if(r(i)){if(!l(i)){let n={v:i,i:t,n:this.norm.get(i)};e.push(n)}}else if(c(i.v)){let t=r(i.v)?i.v:n(i.v);if(!l(t)){let n={v:t,i:i.i,n:this.norm.get(t)};e.push(n)}}}}a.$[i]=e}else if(r(s)&&!l(s)){let e={v:s,n:this.norm.get(s)};a.$[i]=e}}}return a}toJSON(){return{keys:this.keys.map(({getFn:e,...t})=>t),records:this.records}}};function A(e,t,{getFn:n=E.getFn,fieldNormWeight:r=E.fieldNormWeight}={}){let i=new k({getFn:n,fieldNormWeight:r});return i.setKeys(e.map(v)),i.seLine truncated
-9
View File
@@ -1,9 +0,0 @@
/**
* Fuse.js v7.1.0 - Lightweight fuzzy-search (http://fusejs.io)
*
* Copyright (c) 2025 Kiro Risk (http://kiro.me)
* All Rights Reserved. Apache Software License 2.0
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){o(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,v(r.key),r)}}function u(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function o(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function a(e){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},a(e)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function h(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=a(e);if(t){var i=a(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return h(this,n)}}function f(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}function g(e){return Array.isArray?Array.isArray(e):"[object Array]"===M(e)}var y=1/0;function p(e){return null==e?"":function(e){if("string"==typeof e)return e;var t=e+"";return"0"==t&&1/e==-y?"-0":t}(e)}function A(e){return"string"==typeof e}function m(e){return"number"==typeof e}function C(e){return!0===e||!1===e||function(e){return k(e)&&null!==e}(e)&&"[object Boolean]"==M(e)}function k(e){return"object"===n(e)}function E(e){return null!=e}function F(e){return!e.trim().length}function M(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var b=function(e){return"Missing ".concat(e," property in key")},D=function(e){return"Property 'weight' in key '".concat(e,"' must be a positive integer")},B=Object.prototype.hasOwnProperty,x=function(){function e(t){var n=this;r(this,e),this._keys=[],this._keyMap={};var i=0;t.forEach((function(e){var t=w(e);n._keys.push(t),n._keyMap[t.id]=t,i+=t.weight})),this._keys.forEach((function(e){e.weight/=i}))}return u(e,[{key:"get",value:function(e){return this._keyMap[e]}},{key:"keys",value:function(){return this._keys}},{key:"toJSON",value:function(){return JSON.stringify(this._keys)}}]),e}();function w(e){var t=null,n=null,r=null,i=1,u=null;if(A(e)||g(e))r=e,t=S(e),n=L(e);else{if(!B.call(e,"name"))throw new ErLine truncated
-2
View File
@@ -1,2 +0,0 @@
/*! jQuery v3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},m=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||m).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var de=oe.pop,pe=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function d(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+Line truncated
+1 -1
View File
@@ -1 +1 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={757:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};r.d(o,{default:function(){return p}});var i=r(757),a=r.n(i);const l=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},s=/^\\begin{/;var d=function(e,t){let n;const r=[],o=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;n=e.search(o),-1!==n;){n>0&&(r.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));const o=t.findIndex((t=>e.startsWith(t.left)));if(n=l(t[o].right,e,t[o].left.length),-1===n)break;const i=e.slice(0,n+t[o].right.length),a=s.test(i)?i:e.slice(t[o].left.length,n);r.push({type:"math",data:a,rawData:i,display:t[o].display}),e=e.slice(n+t[o].right.length)}return""!==e&&r.push({type:"text",data:e}),r};const c=function(e,t){const n=d(e,t.delimiters);if(1===n.length&&"text"===n[0].type)return null;const r=document.createDocumentFragment();for(let e=0;e<n.length;e++)if("text"===n[e].type)r.appendChild(document.createTextNode(n[e].data));else{const o=document.createElement("span");let i=n[e].data;t.displayMode=n[e].display;try{t.preProcess&&(i=t.preProcess(i)),a().render(i,o,t)}catch(o){if(!(o instanceof a().ParseError))throw o;t.errorCallback("KaTeX auto-render: Failed to parse `"+n[e].data+"` with ",o),r.appendChild(document.createTextNode(n[e].rawData));continue}r.appendChild(o)}return r},f=function(e,t){for(let n=0;n<e.childNodes.length;n++){const r=e.childNodes[n];if(3===r.nodeType){let o=r.textContent,i=r.nextSibling,a=0;for(;i&&i.nodeType===Node.TEXT_NODE;)o+=i.textContent,i=i.nextSibling,a++;const l=c(o,t);if(l){for(let e=0;e<a;e++)r.nextSibling.remove();n+=l.childNodes.length-1,e.replaceChild(l,r)}else n+=a}else if(1===r.nodeType){const e=" "+r.className+" ";-1===t.ignoredTags.indexOf(r.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&f(r,t)}}};var p=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},f(e,n)};return o=o.default}()}));
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(){"use strict";var t={757:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};r.d(o,{default:function(){return p}});var i=r(757),a=r.n(i);const l=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},s=/^\\begin{/;var d=function(e,t){let n;const r=[],o=new RegExp("("+t.map(e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")).join("|")+")");for(;n=e.search(o),-1!==n;){n>0&&(r.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));const o=t.findIndex(t=>e.startsWith(t.left));if(n=l(t[o].right,e,t[o].left.length),-1===n)break;const i=e.slice(0,n+t[o].right.length),a=s.test(i)?i:e.slice(t[o].left.length,n);r.push({type:"math",data:a,rawData:i,display:t[o].display}),e=e.slice(n+t[o].right.length)}return""!==e&&r.push({type:"text",data:e}),r};const c=function(e,t){const n=d(e,t.delimiters);if(1===n.length&&"text"===n[0].type)return null;const r=document.createDocumentFragment();for(let e=0;e<n.length;e++)if("text"===n[e].type)r.appendChild(document.createTextNode(n[e].data));else{const o=document.createElement("span");let i=n[e].data;t.displayMode=n[e].display;try{t.preProcess&&(i=t.preProcess(i)),a().render(i,o,t)}catch(o){if(!(o instanceof a().ParseError))throw o;t.errorCallback("KaTeX auto-render: Failed to parse `"+n[e].data+"` with ",o),r.appendChild(document.createTextNode(n[e].rawData));continue}r.appendChild(o)}return r},f=function(e,t){for(let o=0;o<e.childNodes.length;o++){const i=e.childNodes[o];if(3===i.nodeType){var n;let a=null!=(n=i.textContent)?n:"",l=i.nextSibling,s=0;for(;l&&l.nodeType===Node.TEXT_NODE;){var r;a+=null!=(r=l.textContent)?r:"",l=l.nextSibling,s++}const d=c(a,t);if(d){for(let e=0;e<s;e++)i.nextSibling.remove();o+=d.childNodes.length-1,e.replaceChild(d,i)}else o+=s}else if(1===i.nodeType){const e=" "+i.className+" ";!t.ignoredTags.has(i.nodeName.toLowerCase())&&t.ignoredClasses.every(t=>!e.includes(" "+t+" "))&&f(i,t)}}};var p=function(e,t){if(!e)throw new Error("No element provided to render");const n={};Object.assign(n,t),n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=new Set((null==t?void 0:t.ignoredTags)||["script","noscript","style","textarea","pre","code","option"]),n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},f(e,n)};return o=o.default}()});
+1 -1
View File
@@ -1 +1 @@
@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-ReguLine truncated
@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-ReguLine truncated
+1 -1
View File
@@ -1 +1 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Wn}});class r{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;let n,o,s="KaTeX parse error: "+e;const i=t&&t.loc;if(i&&i.start<=i.end){const e=i.lexer.input;n=i.start,o=i.end,n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": ";const t=e.slice(n,o).replace(/[^]/g,"$&\u0332");let r,a;r=n>15?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15<e.length?e.slice(o,o+15)+"\u2026":e.slice(o),s+=r+t+a}const a=new Error(s);return a.name="ParseError",a.__proto__=r.prototype,a.position=n,null!=n&&null!=o&&(a.length=o-n),a.rawMessage=e,a}}r.prototype.__proto__=Error.prototype;var n=r;const o=/([A-Z])/g,s={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},i=/[&><"']/g;const a=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?a(e.body[0]):e:"font"===e.type?a(e.body):e};var l={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(i,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:a,isCharacterBox:function(e){const t=a(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}};const h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;const t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class m{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.Line truncated
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return uo}});class r extends Error{constructor(e,t){let n,o,s="KaTeX parse error: "+e;const i=t&&t.loc;if(i&&i.start<=i.end){const e=i.lexer.input;n=i.start,o=i.end,n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": ";const t=e.slice(n,o).replace(/[^]/g,"$&\u0332");let r,a;r=n>15?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15<e.length?e.slice(o,o+15)+"\u2026":e.slice(o),s+=r+t+a}super(s),this.name="ParseError",this.position=void 0,this.length=void 0,this.rawMessage=void 0,Object.setPrototypeOf(this,r.prototype),this.position=n,null!=n&&null!=o&&(this.length=o-n),this.rawMessage=e}}var n=r;const o=/([A-Z])/g,s=e=>e.replace(o,"-$1").toLowerCase(),i={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},a=/[&><"']/g,l=e=>String(e).replace(a,e=>i[e]),c=e=>"ordgroup"===e.type||"color"===e.type?1===e.body.length?c(e.body[0]):e:"font"===e.type?c(e.body):e,h=new Set(["mathord","textord","atom"]),m=e=>h.has(c(e).type),u={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function p(e){if(Object.prototype.hasOwnProperty.call(e,"default")&&void 0!==e.default)return e.default;return function(e){if("string"!=typeof e)return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}(Array.isArray(e.type)?e.type[0]:e.type)}function d(e,t,r,n){const o=Object.prototype.hasOwnProperty.call(r,t)?r[t]:void 0,s=Object.prototype.hasOwnProperty.call(n,"processor")?n.processor:void 0;e[t]=void 0!==o?s?s(o):o:p(n)}class g{constructor(e){void 0===e&&(e={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextCLine truncated
@@ -52,7 +52,7 @@ lite-youtube > iframe {
}
/* play button */
lite-youtube > .lty-playbtn {
lite-youtube > .lyt-playbtn {
display: block;
/* Make the button element cover the whole area for a large hover/click target… */
width: 100%;
@@ -69,8 +69,8 @@ lite-youtube > .lty-playbtn {
border: 0;
}
lite-youtube:hover > .lty-playbtn,
lite-youtube .lty-playbtn:focus {
lite-youtube:hover > .lyt-playbtn,
lite-youtube .lyt-playbtn:focus {
filter: none;
}
@@ -79,7 +79,7 @@ lite-youtube.lyt-activated {
cursor: unset;
}
lite-youtube.lyt-activated::before,
lite-youtube.lyt-activated > .lty-playbtn {
lite-youtube.lyt-activated > .lyt-playbtn {
opacity: 0;
pointer-events: none;
}
@@ -14,7 +14,7 @@ class LiteYTEmbed extends HTMLElement {
connectedCallback() {
this.videoId = this.getAttribute('videoid');
let playBtnEl = this.querySelector('.lty-playbtn');
let playBtnEl = this.querySelector('.lyt-playbtn,.lty-playbtn');
// A label for the button takes priority over a [playlabel] attribute on the custom-element
this.playLabel = (playBtnEl && playBtnEl.textContent.trim()) || this.getAttribute('playlabel') || 'Play';
@@ -34,7 +34,8 @@ class LiteYTEmbed extends HTMLElement {
if (!playBtnEl) {
playBtnEl = document.createElement('button');
playBtnEl.type = 'button';
playBtnEl.classList.add('lty-playbtn');
// Include the mispelled 'lty-' in case it's still being used. https://github.com/paulirish/lite-youtube-embed/issues/65
playBtnEl.classList.add('lyt-playbtn', 'lty-playbtn');
this.append(playBtnEl);
}
if (!playBtnEl.textContent) {
@@ -200,6 +201,8 @@ class LiteYTEmbed extends HTMLElement {
iframeEl.title = this.playLabel;
iframeEl.allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture';
iframeEl.allowFullscreen = true;
// Required by Youtube to fix Error 153
iframeEl.referrerPolicy = 'strict-origin-when-cross-origin';
// AFAIK, the encoding here isn't necessary for XSS, but we'll do it only because this is a URL
// https://stackoverflow.com/q/64959723/89484
iframeEl.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(this.videoId)}?${this.getParams().toString()}`;
+1675 -899
View File
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -1,5 +1,5 @@
[module]
[module.hugoVersion]
extended = true
min = "0.141.0"
max = "0.152.2"
min = "0.162.0"
max = "0.165.0"
+6 -2
View File
@@ -1,6 +1,6 @@
disabled = false
languageCode = "en"
languageName = "English"
locale = "en"
label = "English"
weight = 1
title = "Blowfish"
@@ -36,6 +36,7 @@ title = "Blowfish"
# { flickr = "https://www.flickr.com/photos/username/" },
# { foursquare = "https://foursquare.com/username" },
# { github = "https://github.com/username" },
# { github_gist = "https://gist.github.com/username" },
# { gitlab = "https://gitlab.com/username" },
# { google = "https://www.google.com/" },
# { hashnode = "https://username.hashnode.dev" },
@@ -62,15 +63,18 @@ title = "Blowfish"
# { spotify = "https://open.spotify.com/user/userid" },
# { stack-overflow = "https://stackoverflow.com/users/userid/username" },
# { steam = "https://steamcommunity.com/profiles/userid" },
# { strava = "https://www.strava.com/athletes/username" },
# { telegram = "https://t.me/username" },
# { threads = "https://www.threads.net/@username" },
# { tiktok = "https://tiktok.com/@username" },
# { tumblr = "https://username.tumblr.com" },
# { twitch = "https://twitch.tv/username" },
# { untappd = "https://untappd.com/user/username" },
# { twitter = "https://twitter.com/username" },
# { x-twitter = "https://twitter.com/username" },
# { whatsapp = "https://wa.me/phone-number" },
# { youtube = "https://youtube.com/username" },
# { ko-fi = "https://ko-fi.com/username" },
# { codeberg = "https://codeberg.org/username"},
# { printables = "https://www.printables.com/@username"},
# ]
+30 -4
View File
@@ -12,6 +12,8 @@ autoSwitchAppearance = true
enableA11y = false
enableSearch = true
enableCodeCopy = false
enableStructuredBreadcrumbs = false
# enableStyledScrollbar = true # disable to use native scrollbar style (defaults to true)
replyByEmail = false
@@ -24,9 +26,12 @@ disableTextInHeader = false
# backgroundImageWidth = 1200
# defaultBackgroundImage = "IMAGE.jpg" # used as default for background images
# backgroundCanvas = false # render defaultBackgroundImage as a fixed backdrop on every page
# defaultFeaturedImage = "IMAGE.jpg" # used as default for featured images in all articles
# defaultSocialImage = "/android-chrome-512x512.png" # used as default for social media sharing (Open Graph and Twitter)
hotlinkFeatureImage = false
# Thumbnail aspect ratio as a number (e.g., "1.5", "1.0", "1.777")
# thumbnailAspectRatio = "1.5"
# imagePosition = "50% 50%"
# highlightCurrentMenuArea = true
@@ -38,8 +43,19 @@ fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384",
giteaDefaultServer = "https://git.fsfe.org"
forgejoDefaultServer = "https://v11.next.forgejo.org"
[languageRedirect]
enabled = false # Enable client-side language redirects for multilingual sites.
storageKey = "blowfish_preferred_language" # localStorage key for manual language selections.
# fallbackLanguage = "" # Language to use when no browser language matches. Defaults to Hugo's default content language.
browserRedirectHomeOnly = true # Restrict browser-language redirects to home pages.
storedLanguageRedirect = true # Redirect to the stored language when a matching translation exists.
[seo]
# metaDescriptionOrder = ["summary", "description", "site"] # Controls the fallback order for the HTML meta description. Valid values are "summary", "description", and "site".
[header]
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur, floating
# mobileMenuStyle = "fullscreen" # valid options: fullscreen, dropdown
[footer]
showMenu = true
@@ -49,7 +65,8 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
showScrollToTop = true
[homepage]
layout = "profile" # valid options: page, profile, hero, card, background, custom
layout = "profile" # valid options: page, profile, hero, card, background, landing, custom
# layoutSwitcher = false # opt-in interactive preview of the built-in layouts
#homepageImage = "IMAGE.jpg" # used in: hero, and card
showRecent = false
showRecentItems = 5
@@ -82,18 +99,23 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
showPagination = true
invertPagination = false
showReadingTime = true
showReadingProgress = false
showTableOfContents = false
# showRelatedContent = false
# relatedContentLimit = 3
showTaxonomies = false # use showTaxonomies OR showCategoryOnly, not both
showCategoryOnly = false # use showTaxonomies OR showCategoryOnly, not both
showTaxonomies = false # Enable the display of taxonomies for the related article.
showCategories = true # These will show if showTaxonomies is true.
showTags = true # These will show if showTaxonomies is true.
showCategoriesInSecondaryColor = false # This will change the color of category badges, so the user can better distinguish between the two. Only if showTaxonomies is true.
showAuthorsBadges = false
showWordCount = true
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram", "line"]
showZenMode = false
# externalLinkForceNewTab = false # disable to allow external links in the same tab (defaults to true)
[list]
showHero = false
# featureImageHover = false # subtle zoom on card thumbnails on hover
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
@@ -116,6 +138,8 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
showTermCount = true
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = false
showViews = false
showLikes = false
@@ -125,6 +149,8 @@ forgejoDefaultServer = "https://v11.next.forgejo.org"
[term]
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = false
showViews = false
showLikes = false
File diff suppressed because it is too large. Load diff
+1622
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -52,6 +52,6 @@
"mastodon": {
"icon": "mastodon",
"title": "sharing.mastodon",
"url": "https://s2f.kytta.dev/?text=%[2]s %[1]s"
"url": "https://share.joinmastodon.org/#text=%[2]s %[1]s"
}
}
+1
View File
@@ -0,0 +1 @@
[{"avatar_url":"https://avatars.githubusercontent.com/u/928965?u=f5d781ca0eb5cb5c7ce9e5ee5d3b24dae3d6e987\u0026v=4\u0026s=128","profile_url":"https://github.com/nazar-pc","username":"nazar-pc"},{"avatar_url":"https://avatars.githubusercontent.com/u/17061177?u=dfc0b44e86fa09e96605ec9c7775f4f98df90a20\u0026v=4\u0026s=128","profile_url":"https://github.com/ytocquet","username":"ytocquet"},{"avatar_url":"https://avatars.githubusercontent.com/u/147227691?v=4\u0026s=128","profile_url":"https://github.com/AtmosphericIgnition","username":"AtmosphericIgnition"}]
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

@@ -0,0 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 900" preserveAspectRatio="xMidYMid slice">
<defs>
<radialGradient id="violet" cx="50%" cy="50%" r="50%">
<stop offset="0" stop-color="#7c3aed" stop-opacity=".72"/>
<stop offset="1" stop-color="#7c3aed" stop-opacity="0"/>
</radialGradient>
<radialGradient id="blue" cx="50%" cy="50%" r="50%">
<stop offset="0" stop-color="#2563eb" stop-opacity=".68"/>
<stop offset="1" stop-color="#2563eb" stop-opacity="0"/>
</radialGradient>
<filter id="blur"><feGaussianBlur stdDeviation="34"/></filter>
<filter id="grain"><feTurbulence type="fractalNoise" baseFrequency=".8" numOctaves="3" stitchTiles="stitch"/><feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 .09 0"/></filter>
<linearGradient id="line" x1="0" x2="1"><stop stop-color="#60a5fa" stop-opacity="0"/><stop offset=".5" stop-color="#c4b5fd" stop-opacity=".52"/><stop offset="1" stop-color="#fb7185" stop-opacity="0"/></linearGradient>
</defs>
<rect width="1600" height="900" fill="#061126"/>
<g filter="url(#blur)">
<circle cx="280" cy="160" r="290" fill="url(#violet)">
<animate attributeName="cx" values="280;440;280" dur="22s" repeatCount="indefinite"/>
<animate attributeName="cy" values="160;260;160" dur="18s" repeatCount="indefinite"/>
</circle>
<circle cx="1320" cy="690" r="350" fill="url(#blue)">
<animate attributeName="cx" values="1320;1160;1320" dur="26s" repeatCount="indefinite"/>
<animate attributeName="cy" values="690;580;690" dur="20s" repeatCount="indefinite"/>
</circle>
<circle cx="900" cy="250" r="190" fill="url(#blue)" opacity=".7">
<animate attributeName="cy" values="250;390;250" dur="16s" repeatCount="indefinite"/>
</circle>
</g>
<g fill="none" stroke="url(#line)" stroke-width="1.5" opacity=".75">
<path d="M-80 670 C250 420 470 850 770 600 S1320 280 1680 490"><animate attributeName="d" dur="19s" repeatCount="indefinite" values="M-80 670 C250 420 470 850 770 600 S1320 280 1680 490;M-80 570 C250 720 470 410 770 640 S1320 390 1680 390;M-80 670 C250 420 470 850 770 600 S1320 280 1680 490"/></path>
<path d="M-60 760 C230 520 500 780 810 690 S1340 420 1660 610" opacity=".65"><animate attributeName="d" dur="24s" repeatCount="indefinite" values="M-60 760 C230 520 500 780 810 690 S1340 420 1660 610;M-60 660 C230 750 500 510 810 730 S1340 330 1660 520;M-60 760 C230 520 500 780 810 690 S1340 420 1660 610"/></path>
</g>
<rect width="1600" height="900" filter="url(#grain)" opacity=".55"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

@@ -0,0 +1,23 @@
locale = "de"
label = "Deutsch"
weight = 3
title = "Blowfish"
[params]
displayName = "Deutsch"
isoCode = "de"
rtl = false
dateFormat = "2. January 2006"
logo = "img/blowfish_logo_transparent.png"
description = "Ein leistungsstarkes, leichtgewichtiges Theme für Hugo."
[params.author]
name = "Blowfish"
image = "img/blowfish_logo.png"
headline = "Ein leistungsstarkes, leichtgewichtiges Theme für Hugo."
bio = "Ein leistungsstarkes, leichtgewichtiges Theme für Hugo."
links = [
{ x-twitter = "https://twitter.com/burufugu" },
{ github = "https://github.com/nunocoracao/blowfish" },
{ bluesky = "https://bsky.app/profile/burufugu.bsky.social" },
]
Loaded 100 of 2067 files, more files were not shown because too many files have changed in this diff. Show more