One surface recipe for every floating menu: --component-bg on --line, --shadow-md, --radius, 4px inner padding, stacked at --z-dropdown. Items are 32px with a 16px leading icon; shortcuts sit right in --font-ui-mono. Hover uses --component-bg-hover — never yellow. The controlling primitive sets data-state="open|closed".
Disabled items stay visible (aria-disabled="true", step-11 text, no hover) — hiding them makes menus feel unstable between files. The destructive item is red text at rest and gains a --red-component-bg surface on hover; it never renders as a solid red fill inside a menu.
02Context menu — file row
Right-click / long-press on a file row opens the same menu at the pointer. The originating row holds --list-item-bg-active while the menu is open so the target never gets lost. Same items, same order as the row’s ⋯ dropdown — the two must not drift.
Sunset.Timelapse.4096x2160.ProRes.mov
Sunset.Timelapse….mov
03Submenu
One level deep, maximum. The parent item shows a trailing caret and holds its hover surface (data-state="active") while the submenu is open. Submenus inherit the exact same surface recipe — no extra elevation step.