{% comment %}
Trigger: click toggles in click mode; in hover mode opening/closing is driven
by the root's mouseenter/mouseleave (with intent delays) instead.
{% endcomment %}
{{ trigger }}
{% comment %}
Outer frame is placed by the shared positioning helper (it owns top/left and,
for centered alignment, a translateX transform). The inner panel owns the
enter/leave transition, so its scale transform never fights the helper's
alignment transform and it stays invisible until it has been positioned.
{% endcomment %}