e.stopPropagation()}>
{getCardImageUri(card, currentFaceIndex) ? (

0 ? (
-
+
e.stopPropagation()}>
) : (
-
+
+ {/* Hover Card Preview - only show if no card is selected */}
+ {hoveredCard && !selectedCard && (() => {
+ const currentFaceIndex = getCurrentFaceIndex(hoveredCard.id);
+ const isMultiFaced = isDoubleFaced(hoveredCard);
+ const currentFace = isMultiFaced && hoveredCard.card_faces
+ ? hoveredCard.card_faces[currentFaceIndex]
+ : null;
+
+ const displayName = currentFace?.name || hoveredCard.name;
+ const displayTypeLine = currentFace?.type_line || hoveredCard.type_line;
+ const displayOracleText = currentFace?.oracle_text || hoveredCard.oracle_text;
+
+ return (
+
+
+
+

+ {isMultiFaced && (
+
+ Face {currentFaceIndex + 1}/{hoveredCard.card_faces!.length}
+
+ )}
+
+
+
{displayName}
+
{displayTypeLine}
+ {displayOracleText && (
+
+ {displayOracleText}
+
+ )}
+ {hoveredCard.prices?.usd && (
+
+ ${hoveredCard.prices.usd}
+
+ )}
+
+
+
+ );
+ })()}
+
+ {/* Card Detail Panel - slides in from right */}
+ {selectedCard && (() => {
+ const currentFaceIndex = getCurrentFaceIndex(selectedCard.id);
+ const isMultiFaced = isDoubleFaced(selectedCard);
+ const currentFace = isMultiFaced && selectedCard.card_faces
+ ? selectedCard.card_faces[currentFaceIndex]
+ : null;
+
+ const displayName = currentFace?.name || selectedCard.name;
+ const displayTypeLine = currentFace?.type_line || selectedCard.type_line;
+ const displayOracleText = currentFace?.oracle_text || selectedCard.oracle_text;
+
+ return (
+ <>
+ {/* Backdrop */}
+
setSelectedCard(null)}
+ />
+
+ {/* Sliding Panel */}
+
+ {/* Close button */}
+
setSelectedCard(null)}
+ className="fixed top-4 right-4 bg-gray-700 hover:bg-gray-600 text-white p-2 md:p-1.5 rounded-full transition-colors z-[60] shadow-lg"
+ aria-label="Close"
+ >
+
+
+
+
+ {/* Card Image */}
+
+

+ {isMultiFaced && (
+ <>
+
+ Face {currentFaceIndex + 1}/{selectedCard.card_faces!.length}
+
+
toggleCardFace(selectedCard.id, selectedCard.card_faces!.length)}
+ className="absolute bottom-2 right-2 bg-purple-600 hover:bg-purple-700 text-white p-2 rounded-full shadow-lg transition-all"
+ title="Flip card"
+ >
+
+
+ >
+ )}
+
+
+ {/* Card Info */}
+
+
+
{displayName}
+
{displayTypeLine}
+
+
+ {displayOracleText && (
+
+ )}
+
+ {selectedCard.prices?.usd && (
+
+
+ ${selectedCard.prices.usd} each
+
+
+ )}
+
+ {/* Collection Status */}
+ {userCollection.has(selectedCard.id) && (
+
+
+
+ x{userCollection.get(selectedCard.id)} in your collection
+
+
+ )}
+
+ {/* Deck Quantity Management */}
+
+
Quantity in Deck
+
+
{
+ const cardInDeck = selectedCards.find(c => c.card.id === selectedCard.id);
+ const currentQuantity = cardInDeck?.quantity || 0;
+ if (currentQuantity === 1) {
+ removeCardFromDeck(selectedCard.id);
+ } else if (currentQuantity > 1) {
+ updateCardQuantity(selectedCard.id, currentQuantity - 1);
+ }
+ }}
+ disabled={!selectedCards.find(c => c.card.id === selectedCard.id)}
+ className="bg-red-600 hover:bg-red-700 disabled:bg-gray-600 disabled:cursor-not-allowed text-white p-2 rounded-lg transition-colors"
+ >
+
+
+
+
+
+ {selectedCards.find(c => c.card.id === selectedCard.id)?.quantity || 0}
+
+
copies
+
+
+
addCardToDeck(selectedCard)}
+ className="bg-green-600 hover:bg-green-700 text-white p-2 rounded-lg transition-colors"
+ >
+
+
+
+
+
+
+
+ >
+ );
+ })()}
+
{snackbar && (