diff --git a/module/Apps/components/ArmourSummary.mjs b/module/Apps/components/ArmourSummary.mjs
new file mode 100644
index 0000000..15ddf16
--- /dev/null
+++ b/module/Apps/components/ArmourSummary.mjs
@@ -0,0 +1,56 @@
+import { filePath } from "../../consts.mjs";
+import { StyledShadowElement } from "./mixins/StyledShadowElement.mjs";
+
+const { renderTemplate } = foundry.applications.handlebars;
+
+export class ArmourSummary extends StyledShadowElement(HTMLElement) {
+ static elementName = `armour-summary`;
+ static formAssociated = false;
+
+ /* Stuff for the mixin to use */
+ static _stylePath = `css/components/armour-summary.css`;
+ #container;
+
+ get type() {
+ return this.getAttribute(`type`) ?? `hero`;
+ };
+
+ set type(newValue) {
+ this.setAttribute(`type`, newValue);
+ };
+
+ _mounted = false;
+ async connectedCallback() {
+ super.connectedCallback();
+ if (this._mounted) { return };
+
+ /*
+ This converts all of the double-dash prefixed properties on the element to
+ CSS variables so that they don't all need to be provided by doing style=""
+ */
+ for (const attrVar of this.attributes) {
+ if (attrVar.name?.startsWith(`var:`)) {
+ const prop = attrVar.name.replace(`var:`, ``);
+ this.style.setProperty(`--` + prop, attrVar.value);
+ };
+ };
+
+ this.#container = document.createElement(`div`);
+ this.#container.classList = `person`;
+
+ this.#container.innerHTML = await renderTemplate(
+ filePath(`templates/components/armour-summary.hbs`),
+ { type: this.type },
+ );
+
+ this._shadow.appendChild(this.#container);
+
+ this._mounted = true;
+ };
+
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ if (!this._mounted) { return };
+ this._mounted = false;
+ };
+};
diff --git a/module/Apps/components/_index.mjs b/module/Apps/components/_index.mjs
index 3568481..8400462 100644
--- a/module/Apps/components/_index.mjs
+++ b/module/Apps/components/_index.mjs
@@ -1,9 +1,11 @@
+import { ArmourSummary } from "./ArmourSummary.mjs";
import { Logger } from "../../utils/Logger.mjs";
import { RipCryptBorder } from "./RipCryptBorder.mjs";
import { RipCryptIcon } from "./Icon.mjs";
import { RipCryptSVGLoader } from "./svgLoader.mjs";
const components = [
+ ArmourSummary,
RipCryptIcon,
RipCryptSVGLoader,
RipCryptBorder,
diff --git a/templates/components/armour-summary.hbs b/templates/components/armour-summary.hbs
new file mode 100644
index 0000000..cb9c563
--- /dev/null
+++ b/templates/components/armour-summary.hbs
@@ -0,0 +1,54 @@
+{{#if (eq type "hero")}}
+