diff --git a/src/client/ui/chat/index.vue b/src/client/ui/chat/index.vue
index d1579038c7..e8cda62742 100644
--- a/src/client/ui/chat/index.vue
+++ b/src/client/ui/chat/index.vue
@@ -121,8 +121,8 @@
 		</footer>
 	</main>
 
-	<XSide class="side" ref="side"/>
-	<div class="side">
+	<XSide class="side" ref="side" @open="sideViewOpening = true" @close="sideViewOpening = false"/>
+	<div class="side widgets" :class="{ sideViewOpening }">
 		<XWidgets/>
 	</div>
 
@@ -193,6 +193,7 @@ export default defineComponent({
 			featuredChannels: null,
 			currentChannel: null,
 			menuDef: sidebarDef,
+			sideViewOpening: false,
 			instanceName,
 			faLayerGroup, faBars, faBell, faHome, faCircle, faPencilAlt, faShareAlt, faSatelliteDish, faListUl, faSatellite, faCog, faSearch, faPlus, faStar, farStar, faAt, faLink, faEllipsisH, faGlobe, faComments, faEnvelope,
 		};
@@ -564,6 +565,12 @@ export default defineComponent({
 	> .side {
 		width: 350px;
 		border-left: solid 1px var(--divider);
+
+		&.widgets.sideViewOpening {
+			@media (max-width: 1400px) {
+				display: none;
+			}
+		}
 	}
 }
 </style>
diff --git a/src/client/ui/chat/side.vue b/src/client/ui/chat/side.vue
index 9b15c72841..0003158e53 100644
--- a/src/client/ui/chat/side.vue
+++ b/src/client/ui/chat/side.vue
@@ -1,13 +1,11 @@
 <template>
-<div class="qvzfzxam _narrow_" v-if="component">
-	<div class="container">
-		<header class="header" @contextmenu.prevent.stop="onContextmenu">
-			<button class="_button" @click="back()" v-if="history.length > 0"><Fa :icon="faChevronLeft"/></button>
-			<XHeader class="title" :info="pageInfo" :with-back="false" :center="false"/>
-			<button class="_button" @click="close()"><Fa :icon="faTimes"/></button>
-		</header>
-		<component :is="component" v-bind="props" :ref="changePage"/>
-	</div>
+<div class="mrajymqm _narrow_" v-if="component">
+	<header class="header" @contextmenu.prevent.stop="onContextmenu">
+		<button class="_button" @click="back()" v-if="history.length > 0"><Fa :icon="faChevronLeft"/></button>
+		<XHeader class="title" :info="pageInfo" :with-back="false" :center="false"/>
+		<button class="_button" @click="close()"><Fa :icon="faTimes"/></button>
+	</header>
+	<component :is="component" v-bind="props" :ref="changePage"/>
 </div>
 </template>
 
@@ -64,6 +62,7 @@ export default defineComponent({
 			const { component, props } = resolve(path);
 			this.component = component;
 			this.props = props;
+			this.$emit('open');
 		},
 
 		back() {
@@ -74,6 +73,7 @@ export default defineComponent({
 			this.path = null;
 			this.component = null;
 			this.props = {};
+			this.$emit('close');
 		},
 
 		onContextmenu(e) {
@@ -114,46 +114,44 @@ export default defineComponent({
 </script>
 
 <style lang="scss" scoped>
-.qvzfzxam {
+.mrajymqm {
 	$header-height: 54px; // TODO: どこかに集約したい
 
 	--section-padding: 16px;
 	--margin: var(--marginHalf);
 
-	> .container {
-		height: 100%;
-		overflow: auto;
+	height: 100%;
+	overflow: auto;
+	box-sizing: border-box;
+
+	> .header {
+		display: flex;
+		position: sticky;
+		z-index: 1000;
+		top: 0;
+		height: $header-height;
+		width: 100%;
+		line-height: $header-height;
+		font-weight: bold;
+		//background-color: var(--panel);
+		-webkit-backdrop-filter: blur(32px);
+		backdrop-filter: blur(32px);
+		background-color: var(--header);
+		border-bottom: solid 1px var(--divider);
 		box-sizing: border-box;
 
-		> .header {
-			display: flex;
-			position: sticky;
-			z-index: 1000;
-			top: 0;
+		> ._button {
 			height: $header-height;
-			width: 100%;
-			line-height: $header-height;
-			font-weight: bold;
-			//background-color: var(--panel);
-			-webkit-backdrop-filter: blur(32px);
-			backdrop-filter: blur(32px);
-			background-color: var(--header);
-			border-bottom: solid 1px var(--divider);
-			box-sizing: border-box;
+			width: $header-height;
 
-			> ._button {
-				height: $header-height;
-				width: $header-height;
-
-				&:hover {
-					color: var(--fgHighlighted);
-				}
+			&:hover {
+				color: var(--fgHighlighted);
 			}
+		}
 
-			> .title {
-				flex: 1;
-				position: relative;
-			}
+		> .title {
+			flex: 1;
+			position: relative;
 		}
 	}
 }