Index: src/config/database.js
===================================================================
--- src/config/database.js	(revision fc229f55a683c877e6f7776cb2b31f8368235062)
+++ src/config/database.js	(revision 5e524483d9c634a2c984c8f8613fcdeac45ad3ab)
@@ -82,4 +82,5 @@
   ensureColumn('sites', 'show_search',     'INTEGER DEFAULT 1');
   ensureColumn('sites', 'show_archive_link', 'INTEGER DEFAULT 1');
+  ensureColumn('sites', 'og_theme', 'TEXT');               // OG share-card variant: NULL=auto (follow site theme) | 'light' | 'dark'
 
   // Per-post noindex + type
Index: src/routes/admin-seo.js
===================================================================
--- src/routes/admin-seo.js	(revision fc229f55a683c877e6f7776cb2b31f8368235062)
+++ src/routes/admin-seo.js	(revision 5e524483d9c634a2c984c8f8613fcdeac45ad3ab)
@@ -59,4 +59,5 @@
       default_description = ?,
       og_image_default = ?,
+      og_theme = ?,
       og_locale = ?,
       author = ?,
@@ -79,4 +80,5 @@
     trimOrNull(f.default_description, 500),
     trimOrNull(f.og_image_default, 500),
+    (f.og_theme === 'light' || f.og_theme === 'dark') ? f.og_theme : null, // null = auto (follow site theme)
     trimOrNull(f.og_locale, 32),
     trimOrNull(f.author, 120),
Index: src/routes/og.js
===================================================================
--- src/routes/og.js	(revision fc229f55a683c877e6f7776cb2b31f8368235062)
+++ src/routes/og.js	(revision 5e524483d9c634a2c984c8f8613fcdeac45ad3ab)
@@ -14,5 +14,5 @@
   try {
     site = db.prepare(
-      'SELECT slug, title, tagline, description, palette, accent, theme_override FROM sites WHERE slug = ?'
+      'SELECT slug, title, tagline, description, palette, accent, theme_override, og_theme FROM sites WHERE slug = ?'
     ).get(req.params.slug);
   } catch { /* db error → 404 below */ }
Index: src/services/OgImageService.js
===================================================================
--- src/services/OgImageService.js	(revision fc229f55a683c877e6f7776cb2b31f8368235062)
+++ src/services/OgImageService.js	(revision 5e524483d9c634a2c984c8f8613fcdeac45ad3ab)
@@ -90,7 +90,10 @@
 
   const palette = ThemeService.PALETTES[site.palette] ? site.palette : 'klonkt';
-  // Follow the site's "default theme for new visitors" (theme_override): a light card when the site
-  // is set to Light, otherwise dark (an OG image is static, so Auto/Dark → dark).
-  const theme = site.theme_override === 'light' ? 'light' : 'dark';
+  // Card variant: an explicit SEO override (og_theme) wins; else follow the site's "default
+  // theme for new visitors" (theme_override) — light when the site is set to Light, otherwise
+  // dark (an OG image is static, so Auto/Dark → dark).
+  const theme = (site.og_theme === 'light' || site.og_theme === 'dark')
+    ? site.og_theme
+    : (site.theme_override === 'light' ? 'light' : 'dark');
   const accent = site.accent || ((ThemeService.PALETTES[palette] || ThemeService.PALETTES.klonkt)[theme] || ThemeService.PALETTES.klonkt.dark).accent;
   const key = crypto.createHash('sha1')
Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision fc229f55a683c877e6f7776cb2b31f8368235062)
+++ src/services/i18n.js	(revision 5e524483d9c634a2c984c8f8613fcdeac45ad3ab)
@@ -285,4 +285,9 @@
     'aseo.og_image': 'Standaard deel-afbeelding (URL)',
     'aseo.og_image_hint': 'og:image / Twitter-card; ~1200×630px',
+    'aseo.og_theme': 'Deel-kaart licht of donker',
+    'aseo.og_theme_hint': 'de automatisch gemaakte deel-afbeelding',
+    'aseo.og_theme_auto': 'Automatisch (volgt site-thema)',
+    'aseo.og_theme_light': 'Licht',
+    'aseo.og_theme_dark': 'Donker',
     'aseo.og_locale': 'Taal-locale',
     'aseo.og_locale_hint_pre': 'og:locale, bv.',
@@ -1208,4 +1213,9 @@
     'aseo.og_image': 'Default share image (URL)',
     'aseo.og_image_hint': 'og:image / Twitter card; ~1200×630px',
+    'aseo.og_theme': 'Share card light or dark',
+    'aseo.og_theme_hint': 'the auto-generated share image',
+    'aseo.og_theme_auto': 'Auto (follows site theme)',
+    'aseo.og_theme_light': 'Light',
+    'aseo.og_theme_dark': 'Dark',
     'aseo.og_locale': 'Language locale',
     'aseo.og_locale_hint_pre': 'og:locale, e.g.',
@@ -2130,4 +2140,9 @@
     'aseo.og_image': 'Standard-Teilbild (URL)',
     'aseo.og_image_hint': 'og:image / Twitter-Card; ~1200×630px',
+    'aseo.og_theme': 'Teilen-Karte hell oder dunkel',
+    'aseo.og_theme_hint': 'das automatisch erzeugte Teilbild',
+    'aseo.og_theme_auto': 'Automatisch (folgt dem Site-Thema)',
+    'aseo.og_theme_light': 'Hell',
+    'aseo.og_theme_dark': 'Dunkel',
     'aseo.og_locale': 'Sprach-Locale',
     'aseo.og_locale_hint_pre': 'og:locale, z. B.',
Index: src/views/pages/admin-seo.ejs
===================================================================
--- src/views/pages/admin-seo.ejs	(revision fc229f55a683c877e6f7776cb2b31f8368235062)
+++ src/views/pages/admin-seo.ejs	(revision 5e524483d9c634a2c984c8f8613fcdeac45ad3ab)
@@ -42,4 +42,12 @@
         <span><%= t('aseo.og_image') %> <small class="form-hint-inline">— <%= t('aseo.og_image_hint') %></small></span>
         <input type="text" name="og_image_default" value="<%= site.og_image_default || '' %>" placeholder="https://yourdomain.com/share.jpg" maxlength="500">
+      </label>
+      <label>
+        <span><%= t('aseo.og_theme') %> <small class="form-hint-inline">— <%= t('aseo.og_theme_hint') %></small></span>
+        <select name="og_theme">
+          <option value="" <%= !site.og_theme ? 'selected' : '' %>><%= t('aseo.og_theme_auto') %></option>
+          <option value="light" <%= site.og_theme === 'light' ? 'selected' : '' %>><%= t('aseo.og_theme_light') %></option>
+          <option value="dark" <%= site.og_theme === 'dark' ? 'selected' : '' %>><%= t('aseo.og_theme_dark') %></option>
+        </select>
       </label>
       <label>
