**Minor.** A popover stays open for a click inside it, the page behind an open modal overlay is inert, a page can hold more than one command palette, a tooltip, hover card, tour step or submenu stays with its trigger while the page scrolls, any list can carry the reorder handle and arrows of the table, the theme controller follows a mode the host fixes, and `WireKit::inlineScriptHashes()` serves a policy that admits inline scripts by hash.

### Added

- **A [command palette](https://docs.wirekit.app/components/command-palette) takes a `name`, so a page can hold more than one.** The show, close and state events reach only the palette named in `detail.name`, and without a name every palette answers as before. An empty, `false` or `null` hotkey binds no key instead of falling back to Cmd+K.
- **A [command palette](https://docs.wirekit.app/components/command-palette) takes a `label` for its dialog**, so a site search can be announced as a search. Left empty, the translated default stays.
- **A [command palette](https://docs.wirekit.app/components/command-palette) reports Enter with nothing highlighted.** `wirekit:command-palette-submit` carries `{ query }`, on an empty list too, and never while an input method is still composing.
- **[Modal](https://docs.wirekit.app/components/modal), [drawer](https://docs.wirekit.app/components/drawer) and [alert dialog](https://docs.wirekit.app/components/alert-dialog) take `lockScroll`.** With `:lock-scroll="false"` an overlay that lives inside a page region, such as a preview, leaves the page around it scrolling and reachable, and each instance releases only the lock it holds.
- **[`brand`](https://docs.wirekit.app/components/brand) takes `truncate`**, which cuts a long name with an ellipsis and keeps the mark at its size, for a workspace name in a narrow header. Without the prop the markup is unchanged.
- **[`text`](https://docs.wirekit.app/components/text) takes `family` (`sans` or `mono`) and `tabular`**, for figures that line up in a column.
- **The reorder arrows of a [table](https://docs.wirekit.app/components/table) take `arrow-surface` and `arrow-size`** on `table.reorder`, passed to both buttons; unset, they stay `ghost` in `xs`.
- **[`reorder`](https://docs.wirekit.app/components/reorder) puts the drag handle and the arrows of `table.reorder` on any list row**, not only on a table cell. Focus returns to the row in the list of the arrow that was pressed, nested lists included.
- **The [theme controller](https://docs.wirekit.app/components/theme-controller) follows a mode the host fixes.** With `data-wk-theme-fixed` on `<html>` every variant shows that mode from the first paint on, and its controls stay in the tab order, marked unavailable and described by the reason in `data-wk-theme-fixed-reason`. The reader's stored choice is kept for when the host lets go.
- **An [overflow nav](https://docs.wirekit.app/components/overflow-nav) item takes an `action`**, a button beside its link that moves into the menu with it, and `menu-order` orders the menu without changing the row.
- **A server-searched [multi-select](https://docs.wirekit.app/components/multi-select) takes `layout="list"`**: a search field, the hits as checkboxes, and the selection as a list with a remove button on each entry.
- **A [data list](https://docs.wirekit.app/components/data-list) item takes `value`**, rendered as text when the item has no slot. Written as an attribute until now, the value landed on the item's wrapper as an attribute that means nothing there, and the cell stayed empty. When an item has both, the slot wins.
- **[`wirekit:doctor:props`](https://docs.wirekit.app/cli-reference) reports an HTML attribute the rendered element does not use**, such as `value` on a badge, whose attributes land on a `<span>`. These attributes are valid HTML elsewhere, so they used to pass on every component while the value never reached the page. The check speaks only where the element is certain, so a component with a configurable tag is not judged.
- **`WireKit::inlineScriptHashes()` returns the hash sources of the inline scripts WireKit writes into a page**, for a [Content Security Policy](https://docs.wirekit.app/getting-started/integration) that admits them by hash instead of by nonce.
- **Two [icon](https://docs.wirekit.app/components/icon) aliases, `desktop` and `star-outline`**, each with a matching glyph in every icon preset.

### Fixed

- **A [popover](https://docs.wirekit.app/components/popover) stays open on a click inside its panel**, and a press on its trigger closes an open one. Every click in the panel closed it, so a popover holding a field, a label or a button could not be used with a pointer.
- **The page behind an open [modal](https://docs.wirekit.app/components/modal), [drawer](https://docs.wirekit.app/components/drawer), [alert dialog](https://docs.wirekit.app/components/alert-dialog), [command palette](https://docs.wirekit.app/components/command-palette), [lightbox](https://docs.wirekit.app/components/lightbox) or [tour](https://docs.wirekit.app/components/tour) is inert.** They declared `aria-modal="true"`, while a pointer, a touch and a screen reader that ignores `aria-modal` still reached the page behind. A toast region stays reachable, and elements added to the page while the overlay is open are covered too.
- **The page beside the [app shell](https://docs.wirekit.app/components/app-shell)'s drawer is inert while the drawer is open below the `lg` breakpoint.** A click beside the drawer still closes it, and focus returns to the toggle.
- **A [tooltip](https://docs.wirekit.app/components/tooltip), [hover card](https://docs.wirekit.app/components/hover-card), [tour](https://docs.wirekit.app/components/tour) step or [dropdown](https://docs.wirekit.app/components/dropdown) submenu stays with its trigger while the page scrolls.** An open one stayed where its trigger had been. A tour step was off its target as soon as the tour scrolled that target into view.
- **A [tour](https://docs.wirekit.app/components/tour) gives focus back to the button that started it when it ends.** Focus went to the page body instead, and a keyboard or screen reader user lost their place.
- **A [command palette](https://docs.wirekit.app/components/command-palette) or [tour](https://docs.wirekit.app/components/tour) that closes right after it opens no longer arms its focus trap on the panel it is hiding.**
- **A [command palette](https://docs.wirekit.app/components/command-palette) keeps its list above an on-screen keyboard**, and locks the page the way a modal does, which also holds on iOS, instead of with `overflow: hidden`.
- **Home and End move the caret in a [command palette](https://docs.wirekit.app/components/command-palette)'s input until a result is highlighted.**
- **Escape closes an open mobile menu in the [navbar](https://docs.wirekit.app/components/navbar)**, and focus moves to the menu button instead of leaving with the links it hid.
- **An [OTP input](https://docs.wirekit.app/components/otp-input) follows its bound `wire:model`.** A value the server clears empties the boxes, where they kept their characters and the next submit sent nothing.
- **Delete empties the last cell of an [OTP input](https://docs.wirekit.app/components/otp-input) right after it is typed.** The caret sat behind the character with nothing selected, so the key removed nothing.
- **A page reached with `wire:navigate` no longer reports its components as registered too late** when its head brings a WireKit bundle; the console now names only a component that stayed without its data.
- **An open `sidebar.group` renders its arrow turned**, before scripts start, and so does `sidebar.collapsible`, in the [sidebar](https://docs.wirekit.app/components/sidebar).
- **Two [sidebar](https://docs.wirekit.app/components/sidebar) sections with the same `persist` key open and close together** on a page.
- **A `sidebar.item` in a folding `sidebar.group` follows the [sidebar](https://docs.wirekit.app/components/sidebar)'s `collapsible`**, so its row is no longer wrapped in a tooltip that never shows.
- **The frozen first column of a plain [table](https://docs.wirekit.app/components/table) wraps a long word, draws its edge on the inline end and follows striped rows.**
- **A blank `WIREKIT_*=` line in `.env` keeps the default.** An empty value gave the theme cookie a lifetime of zero and several switches an empty string.
- **Two equal [tabs](https://docs.wirekit.app/components/tabs), [slider](https://docs.wirekit.app/components/slider) or [message](https://docs.wirekit.app/components/message) instances on one page get ids of their own**, so their references no longer land in the first one.
- **`.not-wk-prose` ends at a [prose](https://docs.wirekit.app/components/prose) block nested inside it**, and the nearer block's density wins.
- **Pinned surfaces keep their place while a modal, drawer, alert dialog, command palette or lightbox is open.** The scroll lock hides the document's classic scrollbar, and the viewport widens by its gutter; the lock now publishes that width on `--wk-scrollbar-inset`, which the [floating action button](https://docs.wirekit.app/components/fab), toast region, scroll-to-top, reading bookmark and reading progress fold into their offset, and gives the root its own value back when it releases.

### Documentation

- **The optgroup example on the [select](https://docs.wirekit.app/components/select) page compiles.** A quote in a comment inside its `:options` array ended the attribute, so the copied example printed its own source instead of a select.
- The published config's comment on the `heroicons-marketing` preset names the aliases it carries, `sparkle` and `cube-transparent`, and so does the [integration](https://docs.wirekit.app/getting-started/integration) page.
- The [popover](https://docs.wirekit.app/components/popover) page describes the panel as it renders, without `aria-controls` or `aria-modal="false"`.
- The [theme controller](https://docs.wirekit.app/components/theme-controller) page names its menu rows `menuitemradio` with `aria-checked`, as they render.
- The [fonts](https://docs.wirekit.app/components/fonts) page says what happens to a fonts block a nonced `style-src` refuses: the browser reports a CSP violation, and the page renders in the fallback font.
- The [tour](https://docs.wirekit.app/components/tour) page says a step follows its target, and that the tour scrolls smoothly only when the reader has not asked for reduced motion.
- The [theming](https://docs.wirekit.app/theming#classic-scrollbar-gutter) guide no longer tells an app whose document scrolls to set `--wk-scrollbar-inset`: the document's own scrollbar sits outside the box a fixed surface is laid out against, so the measured gutter doubled the gap. The token is for a route that scrolls an inner container, and the guide shows how to publish that container's gutter.
- The published config says the sandbox audit log's retention deletes only files still named `YYYY-MM-DD.log`, so a day that log rotation compressed or renamed is left to the rotation.
- The [strict validation](https://docs.wirekit.app/strict-validation) page says the doctor's log scan decides on a window, the last 24 hours by default, and names `wirekit.doctor.scan_logs_window_hours` to change it. It promised the scan finds every typo that shipped.
- The [theming](https://docs.wirekit.app/theming#your-own-transitions) guide explains `@wirekitTransition`, which gives an element of your own the enter and leave transition of the components, timed by `--transition-wk-duration` and `--transition-wk-easing`.
- The [integration](https://docs.wirekit.app/getting-started/integration#the-routes-that-serve-wirekits-own-files) guide lists the font and flag routes beside the asset routes, and the [fonts](https://docs.wirekit.app/components/fonts) page says an unpublished font family loads from a package route.

### Components

Every component this release changes, each linked to its page: [Accordion](https://docs.wirekit.app/components/accordion) · [Alert Dialog](https://docs.wirekit.app/components/alert-dialog) · [Announcement Banner](https://docs.wirekit.app/components/announcement-banner) · [App Rail](https://docs.wirekit.app/components/app-rail) · [App Shell](https://docs.wirekit.app/components/app-shell) · [Assistant Message](https://docs.wirekit.app/components/assistant-message) · [Attachment](https://docs.wirekit.app/components/attachment) · [Avatar](https://docs.wirekit.app/components/avatar) · [Band](https://docs.wirekit.app/components/band) · [Blockquote](https://docs.wirekit.app/components/blockquote) · [Bottom Nav](https://docs.wirekit.app/components/bottom-nav) · [Brand](https://docs.wirekit.app/components/brand) · [Brand Bar](https://docs.wirekit.app/components/brand-bar) · [Breadcrumb](https://docs.wirekit.app/components/breadcrumb) · [Button](https://docs.wirekit.app/components/button) · [Calendar](https://docs.wirekit.app/components/calendar) · [Card](https://docs.wirekit.app/components/card) · [Center](https://docs.wirekit.app/components/center) · [Chart](https://docs.wirekit.app/components/chart) · [Chart Mixed](https://docs.wirekit.app/components/chart-mixed) · [Checkbox](https://docs.wirekit.app/components/checkbox) · [Code](https://docs.wirekit.app/components/code) · [Code Block](https://docs.wirekit.app/components/code-block) · [Color Picker](https://docs.wirekit.app/components/color-picker) · [Combobox](https://docs.wirekit.app/components/combobox) · [Command Palette](https://docs.wirekit.app/components/command-palette) · [Container](https://docs.wirekit.app/components/container) · [Context Menu](https://docs.wirekit.app/components/context-menu) · [Countdown](https://docs.wirekit.app/components/countdown) · [CTA](https://docs.wirekit.app/components/cta) · [Data List](https://docs.wirekit.app/components/data-list) · [Data Table](https://docs.wirekit.app/components/data-table) · [Date Picker](https://docs.wirekit.app/components/date-picker) · [Divider](https://docs.wirekit.app/components/divider) · [Drawer](https://docs.wirekit.app/components/drawer) · [Dropdown](https://docs.wirekit.app/components/dropdown) · [Editor](https://docs.wirekit.app/components/editor) · [Empty State](https://docs.wirekit.app/components/empty-state) · [Event Calendar](https://docs.wirekit.app/components/event-calendar) · [FAB](https://docs.wirekit.app/components/fab) · [Feature](https://docs.wirekit.app/components/feature) · [Field](https://docs.wirekit.app/components/field) · [File Upload](https://docs.wirekit.app/components/file-upload) · [Filter Builder](https://docs.wirekit.app/components/filter-builder) · [Flag](https://docs.wirekit.app/components/flag) · [Fonts](https://docs.wirekit.app/components/fonts) · [Grid](https://docs.wirekit.app/components/grid) · [Heading](https://docs.wirekit.app/components/heading) · [Hero](https://docs.wirekit.app/components/hero) · [Highlight](https://docs.wirekit.app/components/highlight) · [Hover Card](https://docs.wirekit.app/components/hover-card) · [Image](https://docs.wirekit.app/components/image) · [Image Compare](https://docs.wirekit.app/components/image-compare) · [Image Gallery](https://docs.wirekit.app/components/image-gallery) · [Inline Edit](https://docs.wirekit.app/components/inline-edit) · [Input](https://docs.wirekit.app/components/input) · [Lightbox](https://docs.wirekit.app/components/lightbox) · [Link component](https://docs.wirekit.app/components/link) · [List](https://docs.wirekit.app/components/list) · [Logo Cloud](https://docs.wirekit.app/components/logo-cloud) · [Map](https://docs.wirekit.app/components/map) · [Menubar](https://docs.wirekit.app/components/menubar) · [Message](https://docs.wirekit.app/components/message) · [Modal](https://docs.wirekit.app/components/modal) · [Multi-Select](https://docs.wirekit.app/components/multi-select) · [Navbar](https://docs.wirekit.app/components/navbar) · [Navigation Menu](https://docs.wirekit.app/components/navigation-menu) · [Notification Center](https://docs.wirekit.app/components/notification-center) · [Number Input](https://docs.wirekit.app/components/number-input) · [OTP Input](https://docs.wirekit.app/components/otp-input) · [Overflow Nav](https://docs.wirekit.app/components/overflow-nav) · [Page Header](https://docs.wirekit.app/components/page-header) · [Pagination](https://docs.wirekit.app/components/pagination) · [Password Input](https://docs.wirekit.app/components/password-input) · [Phone](https://docs.wirekit.app/components/phone) · [Popover](https://docs.wirekit.app/components/popover) · [Pricing Table](https://docs.wirekit.app/components/pricing-table) · [Product Card](https://docs.wirekit.app/components/product-card) · [Profile](https://docs.wirekit.app/components/profile) · [Prose](https://docs.wirekit.app/components/prose) · [Radio](https://docs.wirekit.app/components/radio) · [Range Slider](https://docs.wirekit.app/components/range-slider) · [Rating](https://docs.wirekit.app/components/rating) · [Reading](https://docs.wirekit.app/components/reading) · [Reorder](https://docs.wirekit.app/components/reorder) · [Row](https://docs.wirekit.app/components/row) · [Scope Switcher](https://docs.wirekit.app/components/scope-switcher) · [Scroll to Top](https://docs.wirekit.app/components/scroll-to-top) · [Section](https://docs.wirekit.app/components/section) · [Segmented Control](https://docs.wirekit.app/components/segmented-control) · [Select](https://docs.wirekit.app/components/select) · [Shell Bar](https://docs.wirekit.app/components/shell-bar) · [Shimmer](https://docs.wirekit.app/components/shimmer) · [Sidebar](https://docs.wirekit.app/components/sidebar) · [Skip Link](https://docs.wirekit.app/components/skip-link) · [Slider](https://docs.wirekit.app/components/slider) · [Sparkline](https://docs.wirekit.app/components/sparkline) · [Stack](https://docs.wirekit.app/components/stack) · [Stat](https://docs.wirekit.app/components/stat) · [Status Matrix](https://docs.wirekit.app/components/status-matrix) · [Status Tiles](https://docs.wirekit.app/components/status-tiles) · [Stepper](https://docs.wirekit.app/components/stepper) · [Sticky Panel](https://docs.wirekit.app/components/sticky-panel) · [Table](https://docs.wirekit.app/components/table) · [Tabs](https://docs.wirekit.app/components/tabs) · [Tags Input](https://docs.wirekit.app/components/tags-input) · [Team Section](https://docs.wirekit.app/components/team-section) · [Testimonial](https://docs.wirekit.app/components/testimonial) · [Text](https://docs.wirekit.app/components/text) · [Textarea](https://docs.wirekit.app/components/textarea) · [Theme Controller](https://docs.wirekit.app/components/theme-controller) · [Time Picker](https://docs.wirekit.app/components/time-picker) · [Timeline](https://docs.wirekit.app/components/timeline) · [Toast](https://docs.wirekit.app/components/toast) · [Toggle](https://docs.wirekit.app/components/toggle) · [Tooltip](https://docs.wirekit.app/components/tooltip) · [Tour](https://docs.wirekit.app/components/tour) · [Tree View](https://docs.wirekit.app/components/tree-view) · [Visually Hidden](https://docs.wirekit.app/components/visually-hidden)