+ {items.map((item, index) => {
+ const diff = getRelativeDiff(index);
+ const distance = Math.abs(diff);
+ if (distance > maxVisible) return null;
+
+ const isActive = diff === 0;
+ const { x, z, rotateY, scale, opacity, brightness, blur } =
+ getCoverflowTransform(diff, isMobile, isTablet);
+
+ // Per-card chaos offsets for the distorted initial state
+ const chaos = CARD_CHAOS[index % CARD_CHAOS.length];
+ const arrangeDelay = isArranged ? 0.08 + distance * 0.12 : 0;
+
+ const navDuration = isDragging ? 0.04 : 0.7;
+ const navEase: [number, number, number, number] = [0.22, 1, 0.36, 1];
+ const floatY = [0, -6, 0];
+
+ return (
+
{
+ if (Math.abs(dragDeltaRef.current) < 6) {
+ triggerUserInteraction();
+ setActiveIndex(index);
+ }
+ }}
+ >
+
+
+
+ {/* Dark vignette overlay */}
+
+
+ {/* ── Active Card Layout & Typography ───── */}
+ {isActive ? (
+
+ {/* Top Right Tag Badge */}
+
+
+ {item.category}
+
+
+
+ {/* Center Overlay Text Block */}
+
+
+ {item.title}
+
+ {item.location && (
+
+ - {item.location}
+
+ )}
+
+
+ {item.subtitle}
+
+
+
+ ) : (
+ /* Side Cards subtle bottom label */
+
+ )}
+
+ {/* Active Card Gold Border Glow */}
+ {isActive && (
+
+ )}
+
+
+ );
+ })}
+