v3 replaced hero/background.html's persistent full-viewport blur
overlay with hero-scroll-fade.js, which fades the hero band to
nothing after 500px of scroll - reusing the same
layoutBackgroundBlur flag to gate the new behavior, with no way
back to the old look.
Added layoutBackgroundBlurStyle (fade default, classic opt-in)
to restore the pre-v3 persistent blur overlay, reusing the same
background-blur.js still used by hero/thumbAndBackground.html
getActiveAnchorId derives the active entry from scroll position alone,
so on a page short enough that scrollHeight never exceeds
window.innerHeight, the answer can never change. Clicking a TOC entry
still updates location.hash, but nothing ever picks it up as active.
Falls back to the hash when the page can't scroll, honoured only if
it names an entry the TOC actually lists. Pages that do scroll are
unaffected - this only fires when scroll position can't answer the
question at all.
Fixes#3087
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>
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.
* 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>
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>
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>
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>
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>
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>
* 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.
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>