Scriptable Object storing Instantiated Objects Show Mismatch Types

I am trying to use scriptable objects as a precompiled database of cards which are also scriptable objects. The below works except the scriptable database object shows a type mismatch. I have checked here for solutions and cannot seem to determine the issue. The scriptable carddatabbase contains the card definitions like so:

[CreateAssetMenu(fileName = "New Card Database", menuName = "Game/Card Database")]
public class CardDatabase : ScriptableObject
{
    // definition of all cards in the game by name
    public Card heavySlash;
    public Card herbalBandage;
}

Here is an extended card database for the player to load their current game from. This will call the saving method which will be mentioned further down the post:

[CreateAssetMenu(fileName = "New Card Database", menuName = "Game/Player Card Database")]
public class PlayerCardDatabase : CardDatabase
{
    public List<Card> cards;

    public void Clear()
    {
        cards = new List<Card>();
    }

    public void Save(List<Card> deck)
    {

        foreach (Card card in deck)
        {
            Card newInstance = new Card();
            newInstance = card;
            cards.Add(newInstance);

            // Note: The below works obviously but the memory is shared
            // I want to have each card object independent so I can modify them during runtime
            // cards = deck; 
        }
    }
}

The cards store standard info such as name and attack stats and other attributes.

[CreateAssetMenu(fileName = "New Card", menuName = "Game/Card")]
public class Card : ScriptableObject {
    //name of card
    public new string name;
    public CardType type;
    public Texture texture;
    public int damage;
    public int manaCost;
    public bool destroyEquipment;
    public int heal;
}

During runtime I generate the player cards saving it to the scene list. These are typically loaded but in this instance on a new game well call this function instead to instantiate a deck, add copies of our scrip table objects via Instantiate and then save it to load for later:

         void CreateCards(bool firstTime = false)
        {
            if (firstTime)
            {
                //flush out our cards, will be moved to when new game button is created
                playerCardDatabase.Clear();

                Card heavySlash2 = Instantiate(cardDatabase.heavySlash);
                Card herbalBandage2 = Instantiate(cardDatabase.herbalBandage);

                for (int i = 0; i < 7; i++)
                {
                    deck.Add(heavySlash2);
                }

                deck.Add(herbalBandage2);
                playerCardDatabase.Save(deck);
            }
        }

Unfortunately when the playerCardDatabase.Save(deck); is called the inspector shows mismatype of cards.

I redid most of the code but in short I had a Scriptable object ScriptableCard, a regular class Card and a ScriptableObject CardDatabase.

I simply make a copy to inherit the information from ScriptableCard using the below below:

    public Card Copy()
    {
        Card card = new Card();

        card.name = this.name;
        card.type = this.type;
        card.sprite = this.sprite;
        card.texture = this.texture;
        card.damage = this.damage;
        card.manaCost = this.manaCost;
        card.destroyEquipment = this.destroyEquipment;
        card.heal = this.heal;

        return card;
    }

During runtime I would call it like so:

                Card heavySlash = cardDatabase.heavySlash.Copy();
                deck.Add(heavySlash);

Hopefully this helps others in the futureā€¦