Index: src/routes/admin-seo.js
===================================================================
--- src/routes/admin-seo.js	(revision c06816eac2b212853c794e38ab71f7c71366dc7c)
+++ src/routes/admin-seo.js	(revision e67828ebc6ef294ec4f57b90c12c7022909ad3f6)
@@ -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 c06816eac2b212853c794e38ab71f7c71366dc7c)
+++ src/routes/og.js	(revision e67828ebc6ef294ec4f57b90c12c7022909ad3f6)
@@ -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 */ }
