Accessibility
UserMenu from @prepared911/ui/user-menu.
button with aria-haspopup="menu", aria-expanded, and aria-controls while open. Its accessible name is triggerLabel, which should name the person. The avatar and the chevron are aria-hidden.group that holds two role="menu" lists with the slider rows between them, in a region neither menu owns (Menu MN-49): the first menu holds the header, the rule and the Appearance rows up to Reset layout; the region holds Zoom and the Sound section; the second menu holds the rule, any extra items and Sign out. Each menu is named by the trigger too. With no slider the panel is one role="menu". The look and the order on screen are the same either way.groups named by their headings. Reset layout and Sign out are menuitems; Reduce motion is a menuitemcheckbox with aria-checked whose switch track is aria-hidden and not focusable, so the row is the only control (Enter or Space toggles it and the menu stays open); the Theme control is a group named by its label whose segments are menuitemradio; each preference slider is a group named by its row label with a role="slider" thumb (aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext); Reset layout is named by its label ("Reset layout"), and its outlined "Reset" chip is aria-hidden, so the row is the only control and a menu may own it.defaultOpen or open leaves focus where it is.aria-busy="true" and reads signingOutLabel; the spinning loader stops under reduced motion and stays visible.aria-valuetext unless the app uses a separate speech formatter on a custom slider.Highlight and the selected glyph HighlightText.