Accessibility
role="group" with aria-label={regionLabel}. Each notice uses Banner: S5 incidents use role="alert"; S4 degraded notices use role="status".
A native modal dialog (showModal()) makes content outside the dialog inert, so the shell banner slot is not announced while a modal is open. When an S5 notice arrives (its id+version becomes the shown notice) while a modal is open, and that revision has not been mirrored yet in this mount, the region also renders a visually hidden role="alert" mirror inside the topmost modal (title and message). Each id+version is mirrored at most once per mount while modals stay open; changing which modal is topmost does not re-announce a revision that already received a mirror. Opening a modal over an already-shown S5 does not mirror, but an S5 that arrives into an empty region while a modal is open does. Read-only rotation does not re-announce. The live mirror unmounts when its modal host goes away or the shown notice changes. S4 degraded notices are not mirrored.
Notice views are keyed by id and version so paging away from an S4 and dismissing it shows the next notice instead of a blank banner while the block height is unchanged.
pageStatus names the position (for example "2 of 5"). Previous and Next are buttons labeled with previousLabel and nextLabel. The pager is exposed only while more than one notice is live; when the count drops to one it leaves the visible layer and the region keeps its height.dismissLabel.link is set, one trailing action uses link.label and calls onOpenLink; the host opens the URL.rotationIntervalMs in the same order as interactive mode.