**Minor.** WireKit's own strings move to the `wirekit::` key prefix, and nothing you have written stops working. That closes a defect where your translation of an ordinary English word could change what a WireKit component said — measured in a real application, `Dismiss` was already live across 173 alert surfaces with the wrong meaning. The catalog is now offered both ways: components ask for `wirekit::Close`, which your own `Close` cannot reach, while `Close` itself still answers for the lookups your templates make on their own behalf. An application that translated `Close` also keeps that wording inside WireKit components, through a bridge you can switch off when you want ours back. The rest of the release is a landmark that waits to be named, and a rail whose glyphs finally stand on the column they appear to.

### Changed

- **WireKit's components now ask for `wirekit::Close` rather than `Close`, so your wording of an ordinary English word can no longer change what they say.** The catalog is one flat namespace and your entries are layered on top on purpose — but an ordinary English word carries more than one meaning, so an application using `Map` as a verb changed what a component meaning "a map" displayed, inside the component, with nothing thrown and no test red. Measured in a real application: four genuine collisions, and `Dismiss` was already live across 173 alert surfaces. **Nothing you have written stops working, in either direction.** The catalog still answers a plain `__('Close')` your own templates make, underneath anything you define yourself — so a translation you were getting without asking keeps arriving. And a catalog carrying `Close` still governs WireKit's own `Close` through a compatibility bridge, so wording you chose on purpose still reaches the components; writing `wirekit::Close` takes precedence over that, and `translations.legacy_key_bridge` in `config/wirekit.php` turns the bridge off when you want the package's wording back. See [Localization](https://docs.wirekit.app/localization).
- **A scroll region becomes a landmark only when you name it.** Ten of one component on a page were ten screen-reader landmarks all called the same built-in name, which is the opposite of what a name is for. Keyboard reachability is unchanged and unconditional — every scroll region still takes focus and still scrolls with the arrow keys, which is what WCAG 2.1.1 asks for. What waits for a name is the landmark. Affected: [Scroll Area](https://docs.wirekit.app/components/scroll-area), [Code Block](https://docs.wirekit.app/components/code-block), [Table](https://docs.wirekit.app/components/table), [Sticky Panel](https://docs.wirekit.app/components/sticky-panel), [Kanban](https://docs.wirekit.app/components/kanban), [Status Matrix](https://docs.wirekit.app/components/status-matrix), [Notification Center](https://docs.wirekit.app/components/notification-center), [Data Table](https://docs.wirekit.app/components/data-table), [Event Calendar](https://docs.wirekit.app/components/event-calendar) and [Map](https://docs.wirekit.app/components/map). Name the ones a reader should be able to jump to; leave the rest unnamed and they stop competing.

### Added

- **`scroll-area` takes `label`, and `event-calendar` takes `week-label`.** Both name a scroll region that previously carried a built-in name you could not change, which is the half of the landmark change you need in order to opt back in. Name a region after what it holds — "Release notes" locates it, where "Scrollable content" only repeats what every scroll region already is. See [Scroll Area](https://docs.wirekit.app/components/scroll-area).
- **`config/wirekit.php` gains a `translations` section.** One option today, `legacy_key_bridge`, which decides whether a translation you wrote before the prefix existed still applies inside WireKit components. It defaults to on, so an upgrade changes nothing until you say otherwise.

### Fixed

- **An icon rail's glyphs stand on the column they appear to, and its mark stands with them.** Beside an inset content panel every glyph sat two and a half pixels left of the column's center while the rail's mark sat on it — reported twice, once as an off-center icon and once as a three-pixel gap between the mark and the icons below it. They were one defect seen from two sides. The mark now derives its own inset from the same value the modules pad with, so the two follow each other in every shell rather than agreeing by arithmetic that only held in some. Measured in Chromium and WebKit. See [App Rail](https://docs.wirekit.app/components/app-rail).
- **`php artisan wirekit:verify` can see translation collisions again, and reports a catalog that carries both spellings of one string.** After the rename its comparison matched nothing and printed a clean result over a live problem — the exact failure the check exists to catch. It now strips the prefix before comparing, names the namespaced key as the way out, and tells you when a catalog holds `Close` and `wirekit::Close` at once, because there the plain entry has quietly stopped governing the component.

### Documentation

- **[Localization](https://docs.wirekit.app/localization) covers the new key shape and how to migrate.** What the prefix is for, why a flat namespace could not carry two meanings of one word, what happens to a catalog you already wrote, and the three ways to move at your own pace.