One overlay policy value instead of nine subtly different overlay
implementations. modal and nonModal cover the two shapes; anything
else is an explicit Policy. behaviors turns a policy into the
existing pieces — DismissLayer marking, FocusScope, ScrollLock,
HideOutside — attached to one layer slot, with nothing reimplemented:
the mounts are the shared implementation, and the data attributes are the
stack's protocol. Positioning stays per-widget (Anchor.behavior
directly): it binds a floating element to an external id, a different
shape than this layer policy. Presence stays CSS (data-open): it needs
a per-overlay placement, which is the Drawer's, not the policy's.
The DismissLayer stack bundle itself is placed once per app, not per
overlay; its Dismiss outmessage reaches the app through the placement's
onOut, which closes the dismissed layers. The id behaviors writes is
the layer attribute (data-foldkit-plus-layer), not an element id:
aria-controls has to name an element that exists.
The policy as behaviors, to spread into the view's pipe alongside the
widget's own. Conditional pieces are included or left out when the list
is built — a static policy per composition — so no slot carries a mount
its policy never uses.