Final-review findings:
- .is-hidden was scoped to blog/index.astro, so it didn't match PostRow
or YearHead roots (which carry their own component scope hashes). Net
effect: the filter visibly only hid the featured article, while all
archive rows + year heads stayed on screen. Wrap in :global() so the
runtime-toggled class actually fires its display rule everywhere.
- buildSearchText regex stripped > but not <, so inline HTML open-tags
like <span class="leadin"> leaked into data-search. Add < to the
character class so the haystack stays plain text.
- Add role="search" landmark to the BlogSearch wrapper so screen-reader
users can navigate to it directly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>