{# Card chrome #}
{# Card header — drag handle zone. data-test-id targets this
as the stable pointer-start anchor for INTERACTION_WALK
(see docs/proposals/interaction-walk-harness.md). Don't
rename without updating the harness. #}
{# Resize handle — right edge, visible on hover #}
{# Primary actions stay visible (issue #799): opacity-60 at rest so
they're discoverable on touch and via keyboard focus, fading up
to full on mouse hover or any focus within the card. The old
pattern (opacity-0 + group-hover only) made the remove button
invisible to touch users and anyone doing keyboard navigation. #}
{# Card body — HTMX-loaded region content.
hx-trigger "load" fires as soon as HTMX processes the
element (works for both initial page load AND dynamic
addCard). The original "intersect once" trigger only
fires on viewport-entry events and never triggers for
an element that's already in-viewport at observation
time (the #798 symptom). We keep `intersect once` as a
fallback for cards that scroll into view from off-
screen, but "load" is the primary trigger now.
See issues #798 and the v0.57.58/59 interaction-walk
diagnosis that showed the JS-level imperative kickoff
wasn't reliable across Alpine + x-for re-renders. #}
{# Skeleton loading state #}