{{-- Left name column (~25-30% of the row). --}}
{{ $product->availabilityLabel() }}
{{-- Photo area (flex-1 of the row): a VERTICAL grid
that grows downward — 1 column on mobile, 2 on
small/medium, 3 on large. `min-w-0` keeps the grid
from pushing the page wide (no horizontal scroll). --}}
{{-- =============================================================
LOCAL colour palette — a VERTICAL rail on the RIGHT of
the row. Populated from the collection's own colour
taxonomy (one colour per collection in the current data),
rendered as small circular dots with a >= 44px tappable
area. A dot toggles ONLY this row's `activeColor` (Alpine,
per-row state) — never the whole listing; the "×" resets
the row back to all colours. Selected state is an accent
ring, not just a fill.
============================================================= --}}
@if ($rowColors->isNotEmpty())
{{ $rowName }}
@if (filled($rowCommercial)){{ $rowCommercial }}
@endif
@foreach ($rowColors as $color)
@php
$colorSlug = (string) $color->slug;
// Data-driven hex wins (design D6); without it the
// swatch falls back to the piedra-* design tokens.
$colorDot = match (true) {
str_contains($colorSlug, 'terracota') => 'bg-piedra-terracota',
str_contains($colorSlug, 'beige') => 'bg-piedra-beige',
str_contains($colorSlug, 'negro') => 'bg-piedra-negra',
str_contains($colorSlug, 'verde') => 'bg-piedra-verde',
default => 'bg-piedra-gris',
};
@endphp
@endforeach
@endif