diff --git a/frontend/src/components/folders/__tests__/FolderDeleteModal.mobile.test.js b/frontend/src/components/folders/__tests__/FolderDeleteModal.mobile.test.js
new file mode 100644
index 0000000..e45dcc3
--- /dev/null
+++ b/frontend/src/components/folders/__tests__/FolderDeleteModal.mobile.test.js
@@ -0,0 +1,49 @@
+import { describe, it, expect, vi } from 'vitest'
+import { mount } from '@vue/test-utils'
+
+import FolderDeleteModal from '../FolderDeleteModal.vue'
+
+const globalStubs = {
+ AppIcon: true,
+}
+
+const testFolder = { id: 'f1', name: 'Projects', doc_count: 3 }
+
+describe('RESP-04: FolderDeleteModal mobile-safe panel', () => {
+ it('panel has max-h-[90vh] class for mobile scroll safety', () => {
+ const wrapper = mount(FolderDeleteModal, {
+ props: { folder: testFolder },
+ global: { stubs: globalStubs },
+ })
+ const panel = wrapper.find('[data-test="folder-delete-modal-panel"]')
+ expect(panel.exists()).toBe(true)
+ expect(panel.classes()).toContain('max-h-[90vh]')
+ })
+
+ it('panel has overflow-y-auto class for mobile scroll', () => {
+ const wrapper = mount(FolderDeleteModal, {
+ props: { folder: testFolder },
+ global: { stubs: globalStubs },
+ })
+ const panel = wrapper.find('[data-test="folder-delete-modal-panel"]')
+ expect(panel.classes()).toContain('overflow-y-auto')
+ })
+
+ it('panel has mx-4 horizontal margin so it fits within 375px viewport', () => {
+ const wrapper = mount(FolderDeleteModal, {
+ props: { folder: testFolder },
+ global: { stubs: globalStubs },
+ })
+ const panel = wrapper.find('[data-test="folder-delete-modal-panel"]')
+ expect(panel.classes()).toContain('mx-4')
+ })
+
+ it('confirm and cancel buttons are accessible (text, role)', () => {
+ const wrapper = mount(FolderDeleteModal, {
+ props: { folder: testFolder },
+ global: { stubs: globalStubs },
+ })
+ expect(wrapper.text()).toContain('Keep folder')
+ expect(wrapper.text()).toContain('Delete folder and documents')
+ })
+})
diff --git a/frontend/src/components/sharing/ShareModal.vue b/frontend/src/components/sharing/ShareModal.vue
index b2fb4e4..6eebd0f 100644
--- a/frontend/src/components/sharing/ShareModal.vue
+++ b/frontend/src/components/sharing/ShareModal.vue
@@ -9,7 +9,8 @@
role="dialog"
aria-modal="true"
aria-labelledby="share-modal-title"
- class="bg-white rounded-2xl shadow-xl p-6 max-w-md w-full mx-4 relative"
+ data-test="share-modal-panel"
+ class="bg-white rounded-2xl shadow-xl p-6 max-w-md w-full mx-4 relative max-h-[90vh] overflow-y-auto"
>