show_modal : Str -> Effect(msg)
Open the <dialog> element matching this CSS selector as a modal
(the element's showModal()): centered, on the top layer, with
everything behind it inert. Render the dialog and its contents from
your model like any other element; only the open/closed state lives
outside the model, which is why it is driven by an effect rather than
an attribute. No-op when the selector matches nothing or the element
is not a dialog. Note the user can dismiss a modal with Escape, so pair
it with a "close" msg that also returns close_modal and your model never
disagrees with what is on screen for long.