diff --git a/src/components/content/T.astro b/src/components/content/T.astro
new file mode 100644
index 0000000..41cefd3
--- /dev/null
+++ b/src/components/content/T.astro
@@ -0,0 +1,11 @@
+---
+import { resolveContent } from '../../lib/content';
+interface Props { tag: string; as?: string; class?: string }
+const { tag, as = 'span', class: cls } = Astro.props;
+const Tag = as;
+const c = resolveContent(tag);
+const classes = [cls, c.classes].filter(Boolean).join(' ') || undefined;
+---
+{c.type === 'html'
+ ?
+ : {c.value}}
diff --git a/src/components/content/TImg.astro b/src/components/content/TImg.astro
new file mode 100644
index 0000000..6c92a75
--- /dev/null
+++ b/src/components/content/TImg.astro
@@ -0,0 +1,14 @@
+---
+import { Image } from 'astro:assets';
+import type { ImageMetadata } from 'astro';
+import { getImageOverride } from '../../lib/content';
+interface Props {
+ tag: string; src: ImageMetadata; alt: string;
+ class?: string; loading?: 'lazy' | 'eager'; widths?: number[]; sizes?: string;
+}
+const { tag, src, alt, class: cls, ...rest } = Astro.props;
+const override = getImageOverride(tag);
+---
+{override
+ ?
+ : }