The close affordance reuses Button (ghost, small) at the panel's top
right and routes through on_change like escape and scrim clicks; it is
hidden in alert mode. The dialog feature now depends on button, and
AGENTS.md codifies preferring existing components over custom elements.