diff --git a/packages/lit-dev-content/site/_includes/default.html b/packages/lit-dev-content/site/_includes/default.html
index fe04aacdd..9b1754b6b 100644
--- a/packages/lit-dev-content/site/_includes/default.html
+++ b/packages/lit-dev-content/site/_includes/default.html
@@ -14,6 +14,7 @@
{% endif %}
+
{% inlinejs "global/apply-saved-theme.js" %}
{% inlinecss "colors.css" %}
{% inlinecss "global.css" %}
diff --git a/packages/lit-dev-content/src/global/apply-saved-theme.ts b/packages/lit-dev-content/src/global/apply-saved-theme.ts
index a20e1f24f..3c74ff02f 100644
--- a/packages/lit-dev-content/src/global/apply-saved-theme.ts
+++ b/packages/lit-dev-content/src/global/apply-saved-theme.ts
@@ -4,6 +4,8 @@
* SPDX-License-Identifier: Apache-2.0
*/
+import {updateMetaColor} from './theme.js';
+
// Checks if there has been a theme already set from a prior visit
let lastTheme = localStorage.getItem('color-mode');
@@ -15,3 +17,4 @@ if (!lastTheme) {
// Applies the theme string to the document.
document.body.classList.add(lastTheme);
+updateMetaColor(lastTheme as 'light' | 'dark' | 'auto');
diff --git a/packages/lit-dev-content/src/global/theme.ts b/packages/lit-dev-content/src/global/theme.ts
index 8630188b5..8fb19245e 100644
--- a/packages/lit-dev-content/src/global/theme.ts
+++ b/packages/lit-dev-content/src/global/theme.ts
@@ -37,6 +37,36 @@ function saveColorMode(mode: ColorMode) {
localStorage.setItem('color-mode', mode);
}
+/**
+ * Updates the `` tag to match the current color mode.
+ *
+ * @param mode Mode from which to update the meta color.
+ */
+export function updateMetaColor(mode: ColorMode) {
+ const meta = document.head.querySelector(
+ 'meta[name="theme-color"]:not([media])'
+ );
+ if (!meta) {
+ return;
+ }
+
+ let isLight = mode === 'light';
+
+ if (mode === 'auto') {
+ const prefersDark = window.matchMedia(
+ '(prefers-color-scheme: dark)'
+ ).matches;
+ isLight = !prefersDark;
+ }
+
+ if (isLight) {
+ meta?.setAttribute('content', '#fff');
+ return;
+ }
+
+ meta?.setAttribute('content', '#121212');
+}
+
/**
* Applies theme-based event listeners such as changing color mode.
*/
@@ -46,5 +76,13 @@ export function applyColorThemeListeners() {
}
document.body.addEventListener('change-color-mode', (event) => {
applyColorMode(event.mode);
+ updateMetaColor(event.mode);
});
+ window
+ .matchMedia('(prefers-color-scheme: dark)')
+ .addEventListener('change', (event) => {
+ if (getCurrentMode() === 'auto') {
+ updateMetaColor(event.matches ? 'dark' : 'light');
+ }
+ });
}