{{-- SmartCard Contract (Phase 1 — Engine only, no visual change) Ownership: Interaction layer → hover / focus / spotlight / border (never layout) Media zone → aspect-ratio + overlay stack; variant supplies content Body zone → eyebrow / body / meta / intelligence (content only) Footer zone → CTA ownership; variant supplies footer content Slots: media, badges, media-actions, eyebrow, body, meta, intelligence, footer `actions` is a deprecated alias of `media-actions` default `slot` is a compatibility fallback for `body` — do not use in new variants --}} @props([ 'variant' => 'product', 'href' => null, 'label' => null, 'overlayLink' => true, ]) @php $mediaActionSlot = isset($mediaActions) ? $mediaActions : (isset($actions) ? $actions : null); @endphp
class([ 'eca-smart-card group', 'eca-smart-card--' . $variant, ]) }} x-data="ecaSmartCard()" @mousemove="onMove($event)" @mouseleave="onLeave()" data-reveal="card" data-reveal-item >
@if ($href && $overlayLink) @endif @if (isset($media))
{{ $media }} @if (isset($badges))
{{ $badges }}
@endif @if ($mediaActionSlot)
{{ $mediaActionSlot }}
@endif
@endif
@if (isset($eyebrow))
{{ $eyebrow }}
@endif @if (isset($body))
{{ $body }}
@elseif (! $slot->isEmpty()) {{-- Compatibility fallback only. New variants must use the `body` slot. --}}
{{ $slot }}
@endif @if (isset($meta))
{{ $meta }}
@endif @if (isset($intelligence))
{{ $intelligence }}
@endif
@if (isset($footer)) @endif