Native interactive widgets: <details>/<summary>, <dialog>, plus CSS-only disclosure patterns (menu via :focus-within, tabs via radio buttons).
This content is hidden until the disclosure triangle is toggled. The browser provides the marker and the open/closed state.
This one has the open attribute, so it renders expanded on load.
The default marker is hidden and replaced with a CSS ::before arrow that flips when open.
If the engine lacks <dialog> support, the dialog content may render inline instead of as an overlay.
Opens on focus of the button or any item — pure CSS via :focus-within.
:checked sibling selectors.:checked ~ label.