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>
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>
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>
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.
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
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>