diff --git a/docs/.artifacts/commerce/5.x/events.json b/docs/.artifacts/commerce/5.x/events.json
index e2d87e1f1..19d7245b0 100644
--- a/docs/.artifacts/commerce/5.x/events.json
+++ b/docs/.artifacts/commerce/5.x/events.json
@@ -746,6 +746,92 @@
             }
         }
     },
+    {
+        "class": "craft\\commerce\\base\\Purchasable",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\base\\Purchasable",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
     {
         "class": "craft\\commerce\\base\\Purchasable",
         "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
@@ -3963,6 +4049,92 @@
             }
         }
     },
+    {
+        "class": "craft\\commerce\\elements\\Donation",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Donation",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
     {
         "class": "craft\\commerce\\elements\\Donation",
         "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
@@ -6508,6 +6680,92 @@
             }
         }
     },
+    {
+        "class": "craft\\commerce\\elements\\Order",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Order",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
     {
         "class": "craft\\commerce\\elements\\Order",
         "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
@@ -8582,9 +8840,9 @@
     },
     {
         "class": "craft\\commerce\\elements\\Product",
-        "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
-        "type": "craft\\events\\DefineEagerLoadingMapEvent",
-        "desc": "The event that is triggered when defining an eager-loading map.",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
         "filters": {
             "duplicating": {
                 "label": "Element is being duplicated to a new element",
@@ -8625,9 +8883,9 @@
     },
     {
         "class": "craft\\commerce\\elements\\Product",
-        "name": "EVENT_SET_EAGER_LOADED_ELEMENTS",
-        "type": "craft\\events\\SetEagerLoadedElementsEvent",
-        "desc": "The event that is triggered when setting eager-loaded elements.",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
         "filters": {
             "duplicating": {
                 "label": "Element is being duplicated to a new element",
@@ -8668,9 +8926,9 @@
     },
     {
         "class": "craft\\commerce\\elements\\Product",
-        "name": "EVENT_REGISTER_PREVIEW_TARGETS",
-        "type": "craft\\events\\RegisterPreviewTargetsEvent",
-        "desc": "The event that is triggered when registering the element’s preview targets.",
+        "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
+        "type": "craft\\events\\DefineEagerLoadingMapEvent",
+        "desc": "The event that is triggered when defining an eager-loading map.",
         "filters": {
             "duplicating": {
                 "label": "Element is being duplicated to a new element",
@@ -8711,10 +8969,96 @@
     },
     {
         "class": "craft\\commerce\\elements\\Product",
-        "name": "EVENT_DEFINE_ATTRIBUTE_HTML",
-        "type": "craft\\events\\DefineAttributeHtmlEvent",
-        "desc": "The event that is triggered when defining an attribute’s HTML for table and card views.",
-        "filters": {
+        "name": "EVENT_SET_EAGER_LOADED_ELEMENTS",
+        "type": "craft\\events\\SetEagerLoadedElementsEvent",
+        "desc": "The event that is triggered when setting eager-loaded elements.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Product",
+        "name": "EVENT_REGISTER_PREVIEW_TARGETS",
+        "type": "craft\\events\\RegisterPreviewTargetsEvent",
+        "desc": "The event that is triggered when registering the element’s preview targets.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Product",
+        "name": "EVENT_DEFINE_ATTRIBUTE_HTML",
+        "type": "craft\\events\\DefineAttributeHtmlEvent",
+        "desc": "The event that is triggered when defining an attribute’s HTML for table and card views.",
+        "filters": {
             "duplicating": {
                 "label": "Element is being duplicated to a new element",
                 "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
@@ -10609,6 +10953,92 @@
             }
         }
     },
+    {
+        "class": "craft\\commerce\\elements\\Subscription",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Subscription",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
     {
         "class": "craft\\commerce\\elements\\Subscription",
         "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
@@ -12638,6 +13068,92 @@
             }
         }
     },
+    {
+        "class": "craft\\commerce\\elements\\Transfer",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Transfer",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
     {
         "class": "craft\\commerce\\elements\\Transfer",
         "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
@@ -14839,6 +15355,92 @@
             }
         }
     },
+    {
+        "class": "craft\\commerce\\elements\\Variant",
+        "name": "EVENT_REGISTER_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
+    {
+        "class": "craft\\commerce\\elements\\Variant",
+        "name": "EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES",
+        "type": "craft\\events\\RegisterElementCardAttributesEvent",
+        "desc": "The event that is triggered when registering the card attributes for the element type.",
+        "filters": {
+            "duplicating": {
+                "label": "Element is being duplicated to a new element",
+                "conditionsPhp": "($event->sender->duplicateOf && $event->sender->getIsCanonical() && !$event->sender->updatingFromDerivative)",
+                "excludes": [
+                    "isNew",
+                    "resaving",
+                    "revision"
+                ]
+            },
+            "enabled": {
+                "label": "Element is enabled",
+                "conditionsPhp": "($event->sender->enabled && $event->sender->getEnabledForSite())"
+            },
+            "firstSave": {
+                "label": "Element is being saved for the first time",
+                "conditionsPhp": "$event->sender->firstSave",
+                "excludes": [
+                    "isNew",
+                    "draft",
+                    "provisional",
+                    "revision",
+                    "resaving"
+                ]
+            },
+            "propagating": {
+                "label": "Element is being propagated",
+                "conditionsPhp": "$event->sender->propagating"
+            },
+            "resaving": {
+                "label": "Element is being bulk-resaved",
+                "conditionsPhp": "$event->sender->resaving",
+                "excludes": [
+                    "firstSave"
+                ]
+            }
+        }
+    },
     {
         "class": "craft\\commerce\\elements\\Variant",
         "name": "EVENT_DEFINE_EAGER_LOADING_MAP",
@@ -27182,7 +27784,7 @@
     {
         "class": "craft\\commerce\\services\\Customers",
         "name": "EVENT_UPDATE_PRIMARY_PAYMENT_SOURCE",
-        "type": "craft\\commerce\\services\\RegisterElementSourcesEvent",
+        "type": "craft\\commerce\\events\\UpdatePrimaryPaymentSourceEvent",
         "desc": "The event that is triggered when a primary payment method is saved."
     },
     {
@@ -27621,7 +28223,7 @@
         "class": "craft\\commerce\\services\\Stores",
         "name": "EVENT_BEFORE_DELETE_STORE",
         "type": "craft\\commerce\\events\\DeleteStoreEvent",
-        "desc": "The event that is triggered before a site is deleted."
+        "desc": "The event that is triggered before a store is deleted."
     },
     {
         "class": "craft\\commerce\\services\\Stores",