main character

action menu · trigger · menu · item
source: static/css/components.css · static/js/popover.js

Action menu

The ⋯ button that holds the actions too rare to sit in a row: closing the chapter, editing, downloading or uploading the life summary. A native <details> whose summary is the trigger and whose menu is a raised .popover opening upward, right-aligned to it. The nav's overflow menu and the cost panel use the same popover card.

Item

A quiet button made taller (44px, the touch minimum) and left-aligned. Hover fills --bg-muted, a step up from the card it sits on.

Action menu

The trigger is a 2.8 × 2.2rem box with a tracked ⋯, quiet-styled: hover, and open, bring it to --text-default on --bg-raised. Open, the menu sits .5rem above it, its right edge on the trigger's. In Figma the menu is placed outside the component's frame, as it is on screen.

Behaviour

Popovers, menus and tooltips are mutually exclusive (popover.js): opening one closes the rest; Escape, or a click anywhere outside, closes it. Choosing an item closes the menu before the action runs.

Anatomy
details.action-menu[open]
  summary                 the ⋯ trigger
  div.menu.popover        opens upward, right-aligned
    button.quiet × n      44px items
trigger
--border-default hairline, --radius-base, --text-muted ⋯ at .95rem, letter-spacing .1em.
menu
--bg-raised, --border-default, --radius-lg, padding .5rem, gap .35rem, shadow 0 10px 30px at 35% black.
item
A quiet button: 44px tall, .85rem, left-aligned, --bg-muted on hover.
Tokens

Fills --bg-raised, --bg-muted; labels --text-muted, --text-default; rule --border-default; radius --radius-base, --radius-lg; the shadow is a literal. In Figma: Menu item (state), Menu (items, made of Menu items) and Action menu (open × state, holding a Menu when open).