diff --git a/docs/docs/components/card.md b/docs/docs/components/card.md
index c6b3d9d4c..a8731c727 100644
--- a/docs/docs/components/card.md
+++ b/docs/docs/components/card.md
@@ -198,7 +198,19 @@ Use the `appearance` attribute to change the card's visual appearance.
```
+### Variants
+Use the `variant` attribute to set the card's semantic variant, if any.
+
+```html {.example}
+
+{% for variant in ['brand', 'success', 'warning', 'danger'] -%}
+ {% for appearance in ['outlined', 'outlined filled', 'outlined accent', 'plain', 'filled', 'accent'] -%}
+
+ {{ appearance | capitalize }}
+ {{ variant | capitalize }} variant.
+
+ {%- endfor %}
+{%- endfor %}
```
-
diff --git a/src/components/card/card.css b/src/components/card/card.css
index f121ff65a..c14c8dcde 100644
--- a/src/components/card/card.css
+++ b/src/components/card/card.css
@@ -21,7 +21,8 @@
color: var(--wa-color-text-normal);
}
-:host(:is([appearance~='filled'], [appearance~='accent'], .wa-filled, .wa-accent)) {
+:host(:is([appearance~='filled'], [appearance~='accent'], .wa-filled, .wa-accent)),
+:host(:is([variant='brand'], [variant='success'], [variant='warning'], [variant='danger'])) {
color: var(--text-color, var(--wa-color-text-normal));
}
diff --git a/src/components/card/card.ts b/src/components/card/card.ts
index 6bf2693ce..704be8086 100644
--- a/src/components/card/card.ts
+++ b/src/components/card/card.ts
@@ -4,6 +4,7 @@ import { HasSlotController } from '../../internal/slot.js';
import WebAwesomeElement from '../../internal/webawesome-element.js';
import appearanceStyles from '../../styles/utilities/appearance.css';
import sizeStyles from '../../styles/utilities/size.css';
+import variantStyles from '../../styles/utilities/variants.css';
import styles from './card.css';
/**
@@ -30,13 +31,22 @@ import styles from './card.css';
*/
@customElement('wa-card')
export default class WaCard extends WebAwesomeElement {
- static shadowStyle = [sizeStyles, appearanceStyles, styles];
+ static shadowStyle = [sizeStyles, variantStyles, appearanceStyles, styles];
private readonly hasSlotController = new HasSlotController(this, 'footer', 'header', 'image');
/** The component's size. Will be inherited by any descendants with a `size` attribute. */
@property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit';
+ /** The card's theme variant. Defaults to `neutral` if not within another element with a variant. */
+ @property({ reflect: true, initial: 'neutral' }) variant:
+ | 'brand'
+ | 'neutral'
+ | 'success'
+ | 'warning'
+ | 'danger'
+ | 'inherit' = 'inherit';
+
/** The card's visual appearance. */
@property({ reflect: true })
appearance: 'accent' | 'filled' | 'outlined' | 'plain' = 'outlined';