diff --git a/packages/client/src/components/MkMediaList.vue b/packages/client/src/components/MkMediaList.vue
index 6dd0dea27..8b6d2c2c9 100644
--- a/packages/client/src/components/MkMediaList.vue
+++ b/packages/client/src/components/MkMediaList.vue
@@ -1,19 +1,19 @@
 <template>
-	<div>
-		<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
-		<div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container, { dmWidth: inDm }">
-			<div ref="gallery" :class="[$style.medias, count <= 4 ? $style['n' + count] : $style.nMany]">
-				<template v-for="media in mediaList.filter(media => previewable(media))">
-					<XVideo v-if="media.type.startsWith('video')" :key="media.id" :class="$style.media" :video="media"/>
-					<XImage v-else-if="media.type.startsWith('image')" :key="media.id" :class="$style.media" class="image" :data-id="media.id" :image="media" :raw="raw"/>
-				</template>
-			</div>
+<div class="hoawjimk">
+	<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
+	<div v-if="mediaList.filter(media => previewable(media)).length > 0" class="gird-container" :class="{ dmWidth: inDm }">
+		<div ref="gallery" :data-count="mediaList.filter(media => previewable(media)).length" @click.stop>
+			<template v-for="media in mediaList.filter(media => previewable(media))">
+				<XVideo v-if="media.type.startsWith('video')" :key="media.id" :video="media"/>
+				<XImage v-else-if="media.type.startsWith('image')" :key="media.id" class="image" :data-id="media.id" :image="media" :raw="raw"/>
+			</template>
 		</div>
 	</div>
+</div>
 </template>
 
 <script lang="ts" setup>
-import { onMounted, ref, useCssModule } from 'vue';
+import { onMounted, ref } from 'vue';
 import * as misskey from 'calckey-js';
 import PhotoSwipeLightbox from 'photoswipe/lightbox';
 import PhotoSwipe from 'photoswipe';
@@ -23,6 +23,7 @@ import XImage from '@/components/MkMediaImage.vue';
 import XVideo from '@/components/MkMediaVideo.vue';
 import * as os from '@/os';
 import { FILE_TYPE_BROWSERSAFE } from '@/const';
+import { defaultStore } from '@/store';
 
 const props = defineProps<{
 	mediaList: misskey.entities.DriveFile[];
@@ -30,12 +31,8 @@ const props = defineProps<{
 	inDm?: boolean;
 }>();
 
-const $style = useCssModule();
-
 const gallery = ref(null);
 const pswpZIndex = os.claimZIndex('middle');
-document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString());
-const count = $computed(() => props.mediaList.filter(media => previewable(media)).length);
 
 onMounted(() => {
 	const lightbox = new PhotoSwipeLightbox({
@@ -49,8 +46,7 @@ onMounted(() => {
 					src: media.url,
 					w: media.properties.width,
 					h: media.properties.height,
-					alt: media.comment ?? media.name,
-					comment: media.comment ?? media.name,
+					alt: media.comment,
 				};
 				if (media.properties.orientation != null && media.properties.orientation >= 5) {
 					[item.w, item.h] = [item.h, item.w];
@@ -58,24 +54,22 @@ onMounted(() => {
 				return item;
 			}),
 		gallery: gallery.value,
-		mainClass: $style.pswp,
 		children: '.image',
 		thumbSelector: '.image',
 		loop: false,
 		padding: window.innerWidth > 500 ? {
 			top: 32,
-			bottom: 90,
+			bottom: 32,
 			left: 32,
 			right: 32,
 		} : {
 			top: 0,
-			bottom: 78,
+			bottom: 0,
 			left: 0,
 			right: 0,
 		},
 		imageClickAction: 'close',
 		tapAction: 'toggle-controls',
-		bgOpacity: 1,
 		pswpModule: PhotoSwipe,
 	});
 
@@ -87,7 +81,6 @@ onMounted(() => {
 
 		const id = element.dataset.id;
 		const file = props.mediaList.find(media => media.id === id);
-		if (!file) return;
 
 		itemData.src = file.url;
 		itemData.w = Number(file.properties.width);
@@ -96,8 +89,7 @@ onMounted(() => {
 			[itemData.w, itemData.h] = [itemData.h, itemData.w];
 		}
 		itemData.msrc = file.thumbnailUrl;
-		itemData.alt = file.comment ?? file.name;
-		itemData.comment = file.comment ?? file.name;
+		itemData.alt = file.comment;
 		itemData.thumbCropped = true;
 	});
 
@@ -108,24 +100,28 @@ onMounted(() => {
 			appendTo: 'wrapper',
 			onInit: (el, pwsp) => {
 				let textBox = document.createElement('p');
-				textBox.className = 'pwsp__alt-text _acrylic';
+				textBox.className = 'pwsp__alt-text';
 				el.appendChild(textBox);
 
-				pwsp.on('change', (a) => {
-					textBox.textContent = pwsp.currSlide.data.comment;
+				let preventProp = function(ev: Event): void {
+					ev.stopPropagation();
+				};
+
+				// Allow scrolling/text selection
+				el.onwheel = preventProp;
+				el.onclick = preventProp;
+				el.onpointerdown = preventProp;
+				el.onpointercancel = preventProp;
+				el.onpointermove = preventProp;
+
+				pwsp.on('change', () => {
+					textBox.textContent = pwsp.currSlide.data.alt?.trim();
 				});
 			},
 		});
 	});
 
 	lightbox.init();
-
-	window.addEventListener('popstate', () => {
-		if (lightbox.pswp && lightbox.pswp.isOpen === true) {
-			lightbox.pswp.close();
-			return;
-		}
-	});
 });
 
 const previewable = (file: misskey.entities.DriveFile): boolean => {
@@ -135,106 +131,128 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
 };
 </script>
 
-<style lang="scss" module>
-.dmWidth {
-	min-width: 20rem;
-	max-width: 40rem;
-}
+<style lang="scss" scoped>
+.hoawjimk {
 
-.container {
-	position: relative;
-	width: 100%;
-	margin-top: 4px;
-}
-
-.medias {
-	display: grid;
-	grid-gap: 8px;
-
-	// for webkit
-	height: 100%;
-
-	&.n1 {
-		aspect-ratio: 16/9;
-		grid-template-rows: 1fr;
+	> .dmWidth {
+		min-width: 20rem;
+		max-width: 40rem;
 	}
 
-	&.n2 {
-		aspect-ratio: 16/9;
-		grid-template-columns: 1fr 1fr;
-		grid-template-rows: 1fr;
-	}
+	> .gird-container {
+		position: relative;
+		width: 100%;
+		margin-top: 4px;
+		border-radius: var(--radius);
+		overflow: hidden;
 
-	&.n3 {
-		aspect-ratio: 16/9;
-		grid-template-columns: 1fr 0.5fr;
-		grid-template-rows: 1fr 1fr;
-
-		> .media:nth-child(1) {
-			grid-row: 1 / 3;
+		&:before {
+			content: '';
+			display: block;
+			padding-top: 56.25% // 16:9;
 		}
 
-		> .media:nth-child(3) {
-			grid-column: 2 / 3;
-			grid-row: 2 / 3;
+		> div {
+			position: absolute;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			left: 0;
+			display: grid;
+			grid-gap: 8px;
+
+			> * {
+				overflow: hidden;
+				border-radius: 6px;
+			}
+
+			&[data-count="1"] {
+				grid-template-rows: 1fr;
+			}
+
+			&[data-count="2"] {
+				grid-template-columns: 1fr 1fr;
+				grid-template-rows: 1fr;
+			}
+
+			&[data-count="3"] {
+				grid-template-columns: 1fr 0.5fr;
+				grid-template-rows: 1fr 1fr;
+
+				> *:nth-child(1) {
+					grid-row: 1 / 3;
+				}
+
+				> *:nth-child(3) {
+					grid-column: 2 / 3;
+					grid-row: 2 / 3;
+				}
+			}
+
+			&[data-count="4"] {
+				grid-template-columns: 1fr 1fr;
+				grid-template-rows: 1fr 1fr;
+			}
+
+			> *:nth-child(1) {
+				grid-column: 1 / 2;
+				grid-row: 1 / 2;
+			}
+
+			> *:nth-child(2) {
+				grid-column: 2 / 3;
+				grid-row: 1 / 2;
+			}
+
+			> *:nth-child(3) {
+				grid-column: 1 / 2;
+				grid-row: 2 / 3;
+			}
+
+			> *:nth-child(4) {
+				grid-column: 2 / 3;
+				grid-row: 2 / 3;
+			}
 		}
 	}
-
-	&.n4 {
-		aspect-ratio: 16/9;
-		grid-template-columns: 1fr 1fr;
-		grid-template-rows: 1fr 1fr;
-	}
-
-	&.nMany {
-		grid-template-columns: 1fr 1fr;
-
-		> .media {
-			aspect-ratio: 16/9;
-		}
-	}
-}
-
-.media {
-	overflow: hidden; // clipにするとバグる
-	border-radius: 8px;
-}
-
-.pswp {
-	--pswp-root-z-index: var(--mk-pswp-root-z-index, 2000700) !important;
-	--pswp-bg: var(--modalBg) !important;
 }
 </style>
 
 <style lang="scss">
-.pswp__bg {
-	background: var(--modalBg);
-	backdrop-filter: var(--modalBgFilter);
+.pswp {
+	// なぜか機能しない
+  //z-index: v-bind(pswpZIndex);
+	z-index: 2000000;
 }
-
 .pwsp__alt-text-container {
 	display: flex;
 	flex-direction: row;
 	align-items: center;
 
 	position: absolute;
-	bottom: 20px;
+	bottom: 30px;
 	left: 50%;
 	transform: translateX(-50%);
 
 	width: 75%;
-	max-width: 800px;
 }
 
 .pwsp__alt-text {
-	color: var(--fg);
+	color: white;
 	margin: 0 auto;
 	text-align: center;
-	padding: var(--margin);
-	border-radius: var(--radius);
-	max-height: 8em;
+	padding: 10px;
+	background: rgba(0, 0, 0, 0.5);
+	border-radius: 5px;
+
+	max-height: 10vh;
+	overflow-x: clip;
 	overflow-y: auto;
-	text-shadow: var(--bg) 0 0 10px, var(--bg) 0 0 3px, var(--bg) 0 0 3px;
-	white-space: pre-line;
+	overscroll-behavior: contain;
 }
+
+.pwsp__alt-text:empty {
+	display: none;
+}
+
 </style>