diff --git a/src/components/Icon.astro b/src/components/Icon.astro
new file mode 100644
index 0000000..4e63cec
--- /dev/null
+++ b/src/components/Icon.astro
@@ -0,0 +1,23 @@
+---
+export interface Props {
+ name: string,
+};
+
+const { name } = Astro.props;
+
+const icons = import.meta.glob<{string: string}>('@components/icons/*.svg', { query: '?raw', import: 'default' });
+const path = `/src/components/icons/${name}.svg`;
+if (icons[path] === undefined) {
+ throw new Error(`Icon ${name} does not exist.`);
+}
+const icon = await icons[path]();
+---
+
+
+
+
diff --git a/src/components/ThemeSwitcher.astro b/src/components/ThemeSwitcher.astro
new file mode 100644
index 0000000..cc22c19
--- /dev/null
+++ b/src/components/ThemeSwitcher.astro
@@ -0,0 +1,73 @@
+---
+import Icon from '@components/Icon.astro';
+---
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/icons/moon.svg b/src/components/icons/moon.svg
new file mode 100644
index 0000000..4691de4
--- /dev/null
+++ b/src/components/icons/moon.svg
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/components/icons/sun.svg b/src/components/icons/sun.svg
new file mode 100644
index 0000000..6c72f4c
--- /dev/null
+++ b/src/components/icons/sun.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index 9f010af..25c24b8 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -2,6 +2,7 @@
import '@styles/main.css';
import '@fontsource-variable/baskervville';
import '@fontsource-variable/baskervville-sc';
+import ThemeSwitcher from '@components/ThemeSwitcher.astro';
---
@@ -11,9 +12,12 @@ import '@fontsource-variable/baskervville-sc';
@@ -55,12 +59,19 @@ import '@fontsource-variable/baskervville-sc';
}
}
}
+
+ .switcher-container {
+ align-self: center;
+ }
diff --git a/src/styles/vars.css b/src/styles/vars.css
index 83c178b..5a5fc55 100644
--- a/src/styles/vars.css
+++ b/src/styles/vars.css
@@ -51,6 +51,7 @@
&:not([data-theme="light"]) {
@media(prefers-color-scheme: dark) {
+ color-scheme: dark;
--bg-color: var(--dark-bg-color);
--content-color: var(--dark-content-color);
--content-color-faded: var(--dark-content-color-faded);