Root state manager. Owns open state, hover delay timers, and the computed anchor position.
PreviewCardTrigger
<span> that opens the card (after openDelay) on mouseenter/focus, and schedules closing (after closeDelay) on mouseleave/blur.
PreviewCardContent
Renders into a Portal, positioned with position: fixed. Sets role="tooltip" and data-open. Re-arms the open/close timers on its own mouseenter/mouseleave, so moving the pointer from the trigger into the card keeps it open.
Unlike Tooltip, PreviewCardTrigger does not set a data-open attribute of its own — only
PreviewCardContent reflects data-open. PreviewCardTrigger does set aria-describedby,
pointing at the content's id.
PreviewCardContent renders inside a Portal. Moving the pointer from the trigger into the
content area does not close the card — the closeDelay gives the user time to hover over the
card before it dismisses. Its position is computed with computeAnchorPosition() from
@morphos/core, using PreviewCardTrigger's bounding rect and the side/align/sideOffset
props on PreviewCard. PreviewCard does not trap focus or lock scroll — it is non-modal.