diff --git a/src/client/components/ui/button.vue b/src/client/components/ui/button.vue
index 000f6302a0..4c5d617d76 100644
--- a/src/client/components/ui/button.vue
+++ b/src/client/components/ui/button.vue
@@ -142,7 +142,7 @@ export default defineComponent({
 
 	&.primary {
 		font-weight: bold;
-		color: #fff !important;
+		color: var(--fgOnAccent) !important;
 		background: var(--accent);
 
 		&:not(:disabled):hover {
diff --git a/src/client/components/ui/menu.vue b/src/client/components/ui/menu.vue
index eb96450774..8a1871e256 100644
--- a/src/client/components/ui/menu.vue
+++ b/src/client/components/ui/menu.vue
@@ -171,13 +171,13 @@ export default defineComponent({
 		}
 
 		&:hover {
-			color: #fff;
+			color: var(--fgOnAccent);
 			background: var(--accent);
 			text-decoration: none;
 		}
 
 		&:active {
-			color: #fff;
+			color: var(--fgOnAccent);
 			background: var(--accentDarken);
 		}
 
diff --git a/src/client/scripts/theme.ts b/src/client/scripts/theme.ts
index 09441c8a76..3fb5666a72 100644
--- a/src/client/scripts/theme.ts
+++ b/src/client/scripts/theme.ts
@@ -23,6 +23,7 @@ export const builtinThemes = [
 	require('@client/themes/d-dark.json5'),
 	require('@client/themes/d-persimmon.json5'),
 	require('@client/themes/d-astro.json5'),
+	require('@client/themes/d-future.json5'),
 	require('@client/themes/d-black.json5'),
 ] as Theme[];
 
diff --git a/src/client/style.scss b/src/client/style.scss
index 9127b6f238..25a30a36ff 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -319,7 +319,7 @@ hr {
 }
 
 ._popup {
-	background: var(--panel);
+	background: var(--popup);
 	border-radius: var(--radius);
 	contain: content;
 }
diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5
index fef8df4c7c..ca9994d5e9 100644
--- a/src/client/themes/_dark.json5
+++ b/src/client/themes/_dark.json5
@@ -19,6 +19,7 @@
 		fgTransparentWeak: ':alpha<0.75<@fg',
 		fgTransparent: ':alpha<0.5<@fg',
 		fgHighlighted: ':lighten<3<@fg',
+		fgOnAccent: '#fff',
 		divider: 'rgba(255, 255, 255, 0.1)',
 		indicator: '@accent',
 		panel: ':lighten<3<@bg',
@@ -28,6 +29,7 @@
 		panelHeaderDivider: 'rgba(0, 0, 0, 0)',
 		panelBorder: '" solid 1px var(--divider)',
 		acrylicPanel: ':alpha<0.5<@panel',
+		popup: ':lighten<3<@panel',
 		shadow: 'rgba(0, 0, 0, 0.3)',
 		header: ':alpha<0.7<@panel',
 		navBg: '@panel',
diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5
index 97f56c75f5..973a6251f0 100644
--- a/src/client/themes/_light.json5
+++ b/src/client/themes/_light.json5
@@ -19,6 +19,7 @@
 		fgTransparentWeak: ':alpha<0.75<@fg',
 		fgTransparent: ':alpha<0.5<@fg',
 		fgHighlighted: ':darken<3<@fg',
+		fgOnAccent: '#fff',
 		divider: 'rgba(0, 0, 0, 0.1)',
 		indicator: '@accent',
 		panel: ':lighten<3<@bg',
@@ -28,6 +29,7 @@
 		panelHeaderDivider: 'rgba(0, 0, 0, 0)',
 		panelBorder: '" solid 1px var(--divider)',
 		acrylicPanel: ':alpha<0.5<@panel',
+		popup: ':lighten<3<@panel',
 		shadow: 'rgba(0, 0, 0, 0.1)',
 		header: ':alpha<0.7<@panel',
 		navBg: '@panel',
diff --git a/src/client/themes/d-future.json5 b/src/client/themes/d-future.json5
new file mode 100644
index 0000000000..05ffe87bf0
--- /dev/null
+++ b/src/client/themes/d-future.json5
@@ -0,0 +1,25 @@
+{
+	id: '32a637ef-b47a-4775-bb7b-bacbb823f865',
+
+	name: 'Mi Future',
+	author: 'syuilo',
+
+	base: 'dark',
+
+	props: {
+		accent: '#63e2b7',
+		bg: '#101014',
+		fg: '#D5D5D6',
+		fgHighlighted: '#fff',
+		fgOnAccent: '#000',
+		divider: 'rgba(255, 255, 255, 0.1)',
+		panel: '#18181c',
+		panelHeaderBg: '@panel',
+		panelHeaderDivider: '@divider',
+		renote: '@accent',
+		mention: '#f2c97d',
+		mentionMe: '@accent',
+		hashtag: '#70c0e8',
+		link: '#e88080',
+	},
+}