PopoverMenu — item states
solid gray-06 container, edge-to-edge rows, 1px gray-05 separators · hover gray-05 / pressed blue-03 · destructive red · selected ✓ gray-02
Dropdowns — two distinct kinds
All vehicles
form dropdown (CustomDropdownStyle) — r5 + gray-05 border
button dropdown (button.dropdown) — white → selected blue-02
SearchableDropdown — open panel
search field gray-07 fill, hint gray-04 · no-results gray-02
PopoverMenu — group headers · count · submenu
Sections
Actions
One menu, everywhere (CPO ruling 2026-09-25). Every context menu (kebab, ellipsis), sort, date-preset, report and dropdown list — and the collapsed rail's section flyout — is this one PopoverMenu: solid gray-06 container, 1px gray-05 border, r7, the popover shadow, no inner padding; full-width rows with 1px gray-05 separators; 13px medium label; optional 16px leading icon. States: hover gray-05 · pressed blue-03 with blue-01 text · destructive red-01 (pressed red-02) · disabled gray-04 · selected = trailing gray-02 check. Optional parts: a group header (.mgroup) — the only way to group rows, never a divider line; a trailing count (.mcount — the flyout's Inbox · Contacts · Showroom); a submenu caret (.msub, fa-caret-right) that opens a second menu beside the row. A searchable menu puts the .sb-dd-search row on top. Pages set only position and size. The paused Visits pages' resolve popover and Show menu follow when Visits resumes. Not this menu: bottom sheets (.sb-sheet — the More card and section cards), the item-selector overlays (multi-select user and lead-source lists, Subscribers, the status picker — the same frame, their own rows), the DAISI mode menu (ruled 2026-09-02) and calendars. Production: PopoverMenu (custom_popup_menu.dart).