diff --git a/locales/ja.yml b/locales/ja.yml
index b1df6dd859..78353fb993 100644
--- a/locales/ja.yml
+++ b/locales/ja.yml
@@ -54,6 +54,7 @@ common:
   my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
 
   widgets:
+    analog-clock: "アナログ時計"
     profile: "プロフィール"
     calendar: "カレンダー"
     timemachine: "カレンダー(タイムマシン)"
diff --git a/src/client/app/desktop/views/components/analog-clock.vue b/src/client/app/common/views/components/analog-clock.vue
similarity index 90%
rename from src/client/app/desktop/views/components/analog-clock.vue
rename to src/client/app/common/views/components/analog-clock.vue
index 365a8cdaf5..e25a1fcadf 100644
--- a/src/client/app/desktop/views/components/analog-clock.vue
+++ b/src/client/app/common/views/components/analog-clock.vue
@@ -37,6 +37,12 @@ import Vue from 'vue';
 import { themeColor } from '../../../config';
 
 export default Vue.extend({
+	props: {
+		dark: {
+			type: Boolean,
+			default: false
+		}
+	},
 	data() {
 		return {
 			now: new Date(),
@@ -54,16 +60,17 @@ export default Vue.extend({
 	},
 	computed: {
 		longGraduationColor(): string {
-			return 'rgba(255, 255, 255, 0.3)';
+			return this.dark ? 'rgba(255, 255, 255, 0.3)' : 'rgba(0, 0, 0, 0.3)';
 		},
 		shortGraduationColor(): string {
-			return 'rgba(255, 255, 255, 0.2)';
+			return this.dark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)';
 		},
+
 		sHandColor(): string {
-			return 'rgba(255, 255, 255, 0.5)';
+			return this.dark ? 'rgba(255, 255, 255, 0.5)' : 'rgba(0, 0, 0, 0.3)';
 		},
 		mHandColor(): string {
-			return '#fff';
+			return this.dark ? '#fff' : '#777';
 		},
 		hHandColor(): string {
 			return themeColor;
@@ -78,6 +85,7 @@ export default Vue.extend({
 		h(): number {
 			return this.now.getHours();
 		},
+
 		hAngle(): number {
 			return Math.PI * (this.h % 12 + this.m / 60) / 6;
 		},
@@ -115,6 +123,4 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 .mk-analog-clock
 	display block
-	width 256px
-	height 256px
 </style>
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index c1a7bc61d7..df74f5ddfb 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import analogClock from './analog-clock.vue';
 import signin from './signin.vue';
 import signup from './signup.vue';
 import forkit from './forkit.vue';
@@ -27,6 +28,7 @@ import Switch from './switch.vue';
 import Othello from './othello.vue';
 import welcomeTimeline from './welcome-timeline.vue';
 
+Vue.component('mk-analog-clock', analogClock);
 Vue.component('mk-signin', signin);
 Vue.component('mk-signup', signup);
 Vue.component('mk-forkit', forkit);
diff --git a/src/client/app/common/views/widgets/analog-clock.vue b/src/client/app/common/views/widgets/analog-clock.vue
new file mode 100644
index 0000000000..b1177d4ddf
--- /dev/null
+++ b/src/client/app/common/views/widgets/analog-clock.vue
@@ -0,0 +1,41 @@
+<template>
+<div class="mkw-analog-clock">
+	<mk-widget-container :naked="props.naked" :show-header="false">
+		<div class="mkw-analog-clock--body">
+			<mk-analog-clock :dark="$store.state.device.darkmode"/>
+		</div>
+	</mk-widget-container>
+</div>
+</template>
+
+<script lang="ts">
+import define from '../../../common/define-widget';
+export default define({
+	name: 'analog-clock',
+	props: () => ({
+		naked: false
+	})
+}).extend({
+	methods: {
+		func() {
+			this.props.naked = !this.props.naked;
+			this.save();
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+@import '~const.styl'
+
+root(isDark)
+	.mkw-analog-clock--body
+		padding 8px
+
+.mkw-analog-clock[data-darkmode]
+	root(true)
+
+.mkw-analog-clock:not([data-darkmode])
+	root(false)
+
+</style>
diff --git a/src/client/app/common/views/widgets/index.ts b/src/client/app/common/views/widgets/index.ts
index 7ef4e02092..a4cabc43ba 100644
--- a/src/client/app/common/views/widgets/index.ts
+++ b/src/client/app/common/views/widgets/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import wAnalogClock from './analog-clock.vue';
 import wVersion from './version.vue';
 import wRss from './rss.vue';
 import wServer from './server.vue';
@@ -12,6 +13,7 @@ import wTips from './tips.vue';
 import wDonation from './donation.vue';
 import wNav from './nav.vue';
 
+Vue.component('mkw-analog-clock', wAnalogClock);
 Vue.component('mkw-nav', wNav);
 Vue.component('mkw-calendar', wCalendar);
 Vue.component('mkw-photo-stream', wPhotoStream);
diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index f51fed7454..9f6cf9614a 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -7,6 +7,7 @@
 				<p>%i18n:@add-widget%</p>
 				<select v-model="widgetAdderSelected">
 					<option value="profile">%i18n:common.widgets.profile%</option>
+					<option value="analog-clock">%i18n:common.widgets.analog-clock%</option>
 					<option value="calendar">%i18n:common.widgets.calendar%</option>
 					<option value="timemachine">%i18n:common.widgets.timemachine%</option>
 					<option value="activity">%i18n:common.widgets.activity%</option>
diff --git a/src/client/app/desktop/views/components/index.ts b/src/client/app/desktop/views/components/index.ts
index f58d0706df..7b7a38afa2 100644
--- a/src/client/app/desktop/views/components/index.ts
+++ b/src/client/app/desktop/views/components/index.ts
@@ -9,7 +9,6 @@ import subNoteContent from './sub-note-content.vue';
 import window from './window.vue';
 import noteFormWindow from './post-form-window.vue';
 import renoteFormWindow from './renote-form-window.vue';
-import analogClock from './analog-clock.vue';
 import ellipsisIcon from './ellipsis-icon.vue';
 import mediaImage from './media-image.vue';
 import mediaImageDialog from './media-image-dialog.vue';
@@ -40,7 +39,6 @@ Vue.component('mk-sub-note-content', subNoteContent);
 Vue.component('mk-window', window);
 Vue.component('mk-post-form-window', noteFormWindow);
 Vue.component('mk-renote-form-window', renoteFormWindow);
-Vue.component('mk-analog-clock', analogClock);
 Vue.component('mk-ellipsis-icon', ellipsisIcon);
 Vue.component('mk-media-image', mediaImage);
 Vue.component('mk-media-image-dialog', mediaImageDialog);
diff --git a/src/client/app/desktop/views/components/ui.header.clock.vue b/src/client/app/desktop/views/components/ui.header.clock.vue
index cd23a67506..1c3f12f2f2 100644
--- a/src/client/app/desktop/views/components/ui.header.clock.vue
+++ b/src/client/app/desktop/views/components/ui.header.clock.vue
@@ -8,7 +8,7 @@
 		</time>
 	</div>
 	<div class="content">
-		<mk-analog-clock/>
+		<mk-analog-clock :dark="true"/>
 	</div>
 </div>
 </template>
diff --git a/src/client/app/mobile/views/pages/widgets.vue b/src/client/app/mobile/views/pages/widgets.vue
index 9d047fa635..a0893770e8 100644
--- a/src/client/app/mobile/views/pages/widgets.vue
+++ b/src/client/app/mobile/views/pages/widgets.vue
@@ -9,6 +9,7 @@
 			<header>
 				<select v-model="widgetAdderSelected">
 					<option value="profile">%i18n:common.widgets.profile%</option>
+					<option value="analog-clock">%i18n:common.widgets.analog-clock%</option>
 					<option value="calendar">%i18n:common.widgets.calendar%</option>
 					<option value="activity">%i18n:common.widgets.activity%</option>
 					<option value="rss">%i18n:common.widgets.rss%</option>