Better search, action confirmations, smarter pagination
Search results in a sensible order. The site search dropdown used to list results in whatever order the database happened to return them. Searching for "Costa" would lead with characters whose name only happens to contain "cos" before showing the actual Costas. Now the dropdown puts results that start with what you typed first, then word-boundary matches ("Tony Costa" beats "Cosmo Lavish" for "costa"), then plain substring matches, then alias matches. Alphabetical within each group.
Glossary entries appear in search again - they were quietly being dropped on the way from the API to the dropdown because the client-side response parser hadn't been updated when glossary was added to search a while back. Now you'll see glossary entries listed under their own section in the dropdown alongside characters, series, books, and so on.
Home page search dropdown no longer gets cut off - the search box on the home page sits inside the hero section, which was clipping the dropdown when results extended below it. The dropdown now flows past the hero into the section below, like every other dropdown on the site.
Search dropdown polish - section labels (UNIVERSES, CHARACTERS, GLOSSARY, etc.) now have a subtle grey background tile matching the curator search, and the character role at the bottom of each character result gets a small green divider dot so it lines up with the other meta items.
Confirmation when you delete or restore an entity - when you click Delete (or Restore, or Delete Permanently) on a curator entity's view page, you used to be redirected away with no visible indication that anything had happened, just the row missing from the list or the deleted notice gone. You now get a green confirmation banner ("Vin has been deleted. You can restore it from the Deleted tab.") on the page you land on. The list-page restore and delete buttons were already toasting; this fills the gap for the same actions started from a view page.
Glossary links in blog posts - a blog post that referenced a glossary entry via the rich-text [[glossary:...]] token was rendering it as plain unstyled text instead of a clickable link to the entry. Both the published-post page and the admin preview now resolve glossary links correctly.
Form submit focuses the first invalid field. Submitting a form with a missing required field now scrolls to and focuses that field automatically, instead of leaving you to hunt for what's unhappy. This already worked for plain text inputs and textareas; now it works for dropdowns, entity pickers (like the author or series selectors), and the searchable selects used across the curator forms.
Screen reader improvements - the global search dropdown and the home page card grids (universes, series, books, authors, blog posts, characters) are now marked up as proper lists rather than flat sequences of links. Screen readers can now say "1 of 5 universe cards" and announce when leaving one section and entering the next.
Other small UI fixes - the "View all ->" link at the top of each home page section no longer wraps its arrow to a new line when the heading takes two lines on a narrow viewport. The success notice after deleting from a view page no longer flickers on for a single render before disappearing.
Pagination scrolls back to the table - clicking Next or Previous on any of the long paginated tables (characters, groups, glossary, genre books, curator appearances and segments, admin lookups) used to either stay where you were - leaving the next page off-screen below you - or jump to the very top of the page, past the hero. It now scrolls smoothly to the top of the table itself, including on the last page when the table is shorter than usual.
Cast and heatmap views animate in - on a series page, the Cast Overview cards and the Appearance Heatmap rows now fade in with the same gentle stagger the Characters table view already had, instead of all appearing at once. Reduced-motion settings are respected.
Reading-order resets work - moving a reading order back to position 0 (the beginning) was being silently rejected by the server. Now it works, matching how a fresh reading order is saved.
Smoother filtering and paging on browse pages - every public browse page (Characters, Series, Books, Authors, Universes, Groups, Genres) used to flash a loading skeleton on every filter change or page click, scroll the viewport back to the very top, and then drop you on whichever page just rendered. Filter changes now keep the current results visible (slightly faded) while the new ones load - no skeleton flash - and the viewport stays put. Pagination then scrolls smoothly to the top of the results list (not the top of the page), even on the last page when the list is shorter than usual. The Characters page also stopped reshuffling its hero portraits on every filter change.