Crafting System
In Abyssal Eats, I use scriptable objects to hold the different card types, ingredients and dishes and I use one to hold the different recipes as well. When a player places a card in one of the slots, an event is sent to the crafting manager and the crafting manager converts the names of all the cards in the slots into a string and uses it as a key to search through a list of recipes to find one that uses the same ingredients as what its played on the grid. This method handles order as well, so cards can be played in any order and would still work. If a recipe is found, it discards the cards used and spawns in the final result card and places it in the player's hand.
Card Movement/Placement
For card movement, I use the IPointer and IDrag interfaces to register the mouse hovering and moving the cards. When the card has been placed, it sends out a raycast to make sure it's over a slot can go into, and if it is, it'll change it's parent to be that card slot and reset it's position. Otherwise, it will lerp back to it's position within the player's hand.