diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 1b4b5d5bd1..6198e02f61 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -76,6 +76,9 @@
 		"vue": "3.5.10",
 		"vuedraggable": "next"
 	},
+	"optionalDependencies": {
+		"cypress": "13.15.0"
+	},
 	"devDependencies": {
 		"@misskey-dev/summaly": "5.1.0",
 		"@storybook/addon-actions": "8.3.3",
@@ -115,7 +118,6 @@
 		"@vue/runtime-core": "3.5.10",
 		"acorn": "8.12.1",
 		"cross-env": "7.0.3",
-		"cypress": "13.15.0",
 		"eslint-plugin-import": "2.30.0",
 		"eslint-plugin-vue": "9.28.0",
 		"fast-glob": "3.3.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dd82433122..d2d7035550 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -880,6 +880,10 @@ importers:
       vuedraggable:
         specifier: next
         version: 4.1.0(vue@3.5.10(typescript@5.6.2))
+    optionalDependencies:
+      cypress:
+        specifier: 13.15.0
+        version: 13.15.0
     devDependencies:
       '@misskey-dev/summaly':
         specifier: 5.1.0
@@ -995,9 +999,6 @@ importers:
       cross-env:
         specifier: 7.0.3
         version: 7.0.3
-      cypress:
-        specifier: 13.15.0
-        version: 13.15.0
       eslint-plugin-import:
         specifier: 2.30.0
         version: 2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)
@@ -11362,6 +11363,9 @@ packages:
   vue-component-type-helpers@2.0.16:
     resolution: {integrity: sha512-qisL/iAfdO++7w+SsfYQJVPj6QKvxp4i1MMxvsNO41z/8zu3KuAw9LkhKUfP/kcOWGDxESp+pQObWppXusejCA==}
 
+  vue-component-type-helpers@2.1.10:
+    resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==}
+
   vue-component-type-helpers@2.1.6:
     resolution: {integrity: sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==}
 
@@ -12702,6 +12706,7 @@ snapshots:
       tough-cookie: 4.1.4
       tunnel-agent: 0.6.0
       uuid: 8.3.2
+    optional: true
 
   '@cypress/xvfb@1.2.4(supports-color@8.1.1)':
     dependencies:
@@ -12709,6 +12714,7 @@ snapshots:
       lodash.once: 4.1.1
     transitivePeerDependencies:
       - supports-color
+    optional: true
 
   '@digitalbazaar/http-client@3.4.1(web-streams-polyfill@4.0.0)':
     dependencies:
@@ -15115,7 +15121,7 @@ snapshots:
       ts-dedent: 2.2.0
       type-fest: 2.19.0
       vue: 3.5.10(typescript@5.6.2)
-      vue-component-type-helpers: 2.1.6
+      vue-component-type-helpers: 2.1.10
 
   '@swc/cli@0.3.12(@swc/core@1.6.6)(chokidar@3.5.3)':
     dependencies:
@@ -15701,11 +15707,13 @@ snapshots:
     dependencies:
       '@types/sinonjs__fake-timers': 8.1.5
 
-  '@types/sinonjs__fake-timers@8.1.1': {}
+  '@types/sinonjs__fake-timers@8.1.1':
+    optional: true
 
   '@types/sinonjs__fake-timers@8.1.5': {}
 
-  '@types/sizzle@2.3.3': {}
+  '@types/sizzle@2.3.3':
+    optional: true
 
   '@types/stack-utils@2.0.1': {}
 
@@ -16638,7 +16646,8 @@ snapshots:
     dependencies:
       tslib: 2.6.3
 
-  astral-regex@2.0.0: {}
+  astral-regex@2.0.0:
+    optional: true
 
   astring@1.9.0: {}
 
@@ -16652,7 +16661,8 @@ snapshots:
 
   asynckit@0.4.0: {}
 
-  at-least-node@1.0.0: {}
+  at-least-node@1.0.0:
+    optional: true
 
   atomic-sleep@1.0.0: {}
 
@@ -16673,9 +16683,11 @@ snapshots:
       sinon: 16.1.3
       tslib: 2.6.2
 
-  aws-sign2@0.7.0: {}
+  aws-sign2@0.7.0:
+    optional: true
 
-  aws4@1.12.0: {}
+  aws4@1.12.0:
+    optional: true
 
   axios@0.24.0:
     dependencies:
@@ -16829,7 +16841,8 @@ snapshots:
 
   binary-extensions@2.2.0: {}
 
-  blob-util@2.0.2: {}
+  blob-util@2.0.2:
+    optional: true
 
   bluebird@3.7.2: {}
 
@@ -16923,7 +16936,8 @@ snapshots:
     dependencies:
       node-int64: 0.4.0
 
-  buffer-crc32@0.2.13: {}
+  buffer-crc32@0.2.13:
+    optional: true
 
   buffer-crc32@1.0.0: {}
 
@@ -16940,6 +16954,7 @@ snapshots:
     dependencies:
       base64-js: 1.5.1
       ieee754: 1.2.1
+    optional: true
 
   buffer@6.0.3:
     dependencies:
@@ -17027,7 +17042,8 @@ snapshots:
       normalize-url: 6.1.0
       responselike: 2.0.1
 
-  cachedir@2.3.0: {}
+  cachedir@2.3.0:
+    optional: true
 
   call-bind@1.0.2:
     dependencies:
@@ -17071,7 +17087,8 @@ snapshots:
 
   canvas-confetti@1.9.3: {}
 
-  caseless@0.12.0: {}
+  caseless@0.12.0:
+    optional: true
 
   cbor@9.0.2:
     dependencies:
@@ -17219,6 +17236,7 @@ snapshots:
   cli-cursor@3.1.0:
     dependencies:
       restore-cursor: 3.1.0
+    optional: true
 
   cli-highlight@2.1.11:
     dependencies:
@@ -17236,11 +17254,13 @@ snapshots:
       string-width: 4.2.3
     optionalDependencies:
       '@colors/colors': 1.5.0
+    optional: true
 
   cli-truncate@2.1.0:
     dependencies:
       slice-ansi: 3.0.0
       string-width: 4.2.3
+    optional: true
 
   cli-width@4.1.0: {}
 
@@ -17298,7 +17318,8 @@ snapshots:
 
   colord@2.9.3: {}
 
-  colorette@2.0.19: {}
+  colorette@2.0.19:
+    optional: true
 
   combined-stream@1.0.8:
     dependencies:
@@ -17310,7 +17331,8 @@ snapshots:
 
   commander@2.20.3: {}
 
-  commander@6.2.1: {}
+  commander@6.2.1:
+    optional: true
 
   commander@7.2.0: {}
 
@@ -17318,7 +17340,8 @@ snapshots:
 
   commander@9.5.0: {}
 
-  common-tags@1.8.2: {}
+  common-tags@1.8.2:
+    optional: true
 
   commondir@1.0.1: {}
 
@@ -17620,6 +17643,7 @@ snapshots:
       tmp: 0.2.3
       untildify: 4.0.0
       yauzl: 2.10.0
+    optional: true
 
   dashdash@1.14.1:
     dependencies:
@@ -17931,6 +17955,7 @@ snapshots:
   enquirer@2.3.6:
     dependencies:
       ansi-colors: 4.1.3
+    optional: true
 
   entities@2.2.0: {}
 
@@ -18486,7 +18511,8 @@ snapshots:
 
   event-target-shim@5.0.1: {}
 
-  eventemitter2@6.4.7: {}
+  eventemitter2@6.4.7:
+    optional: true
 
   eventemitter3@4.0.7: {}
 
@@ -18515,6 +18541,7 @@ snapshots:
       onetime: 5.1.2
       signal-exit: 3.0.7
       strip-final-newline: 2.0.0
+    optional: true
 
   execa@5.1.1:
     dependencies:
@@ -18675,6 +18702,7 @@ snapshots:
       '@types/yauzl': 2.10.0
     transitivePeerDependencies:
       - supports-color
+    optional: true
 
   extsprintf@1.3.0: {}
 
@@ -18782,6 +18810,7 @@ snapshots:
   fd-slicer@1.1.0:
     dependencies:
       pend: 1.2.0
+    optional: true
 
   feed@4.2.2:
     dependencies:
@@ -18795,6 +18824,7 @@ snapshots:
   figures@3.2.0:
     dependencies:
       escape-string-regexp: 1.0.5
+    optional: true
 
   figures@6.1.0:
     dependencies:
@@ -18935,7 +18965,8 @@ snapshots:
       cross-spawn: 7.0.3
       signal-exit: 4.1.0
 
-  forever-agent@0.6.1: {}
+  forever-agent@0.6.1:
+    optional: true
 
   form-data-encoder@2.1.4: {}
 
@@ -18981,6 +19012,7 @@ snapshots:
       graceful-fs: 4.2.11
       jsonfile: 6.1.0
       universalify: 2.0.0
+    optional: true
 
   fs-minipass@2.1.0:
     dependencies:
@@ -19069,6 +19101,7 @@ snapshots:
   getos@3.2.1:
     dependencies:
       async: 3.2.4
+    optional: true
 
   getpass@0.1.7:
     dependencies:
@@ -19126,6 +19159,7 @@ snapshots:
   global-dirs@3.0.1:
     dependencies:
       ini: 2.0.0
+    optional: true
 
   globals@11.12.0: {}
 
@@ -19350,6 +19384,7 @@ snapshots:
       assert-plus: 1.0.0
       jsprim: 2.0.2
       sshpk: 1.18.0
+    optional: true
 
   http2-wrapper@1.0.3:
     dependencies:
@@ -19377,7 +19412,8 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  human-signals@1.1.1: {}
+  human-signals@1.1.1:
+    optional: true
 
   human-signals@2.1.0: {}
 
@@ -19451,7 +19487,8 @@ snapshots:
 
   ini@1.3.8: {}
 
-  ini@2.0.0: {}
+  ini@2.0.0:
+    optional: true
 
   insert-text-at-cursor@0.3.0: {}
 
@@ -19544,6 +19581,7 @@ snapshots:
   is-ci@3.0.1:
     dependencies:
       ci-info: 3.7.1
+    optional: true
 
   is-core-module@2.13.1:
     dependencies:
@@ -19588,6 +19626,7 @@ snapshots:
     dependencies:
       global-dirs: 3.0.1
       is-path-inside: 3.0.3
+    optional: true
 
   is-ip@3.1.0:
     dependencies:
@@ -19668,7 +19707,8 @@ snapshots:
     dependencies:
       which-typed-array: 1.1.15
 
-  is-typedarray@1.0.0: {}
+  is-typedarray@1.0.0:
+    optional: true
 
   is-unicode-supported@0.1.0: {}
 
@@ -19699,7 +19739,8 @@ snapshots:
 
   isexe@3.1.1: {}
 
-  isstream@0.1.2: {}
+  isstream@0.1.2:
+    optional: true
 
   istanbul-lib-coverage@3.2.2: {}
 
@@ -20298,6 +20339,7 @@ snapshots:
       extsprintf: 1.3.0
       json-schema: 0.4.0
       verror: 1.10.0
+    optional: true
 
   jsrsasign@11.1.0: {}
 
@@ -20384,6 +20426,7 @@ snapshots:
       wrap-ansi: 7.0.0
     optionalDependencies:
       enquirer: 2.3.6
+    optional: true
 
   local-pkg@0.5.0:
     dependencies:
@@ -20408,7 +20451,8 @@ snapshots:
 
   lodash.merge@4.6.2: {}
 
-  lodash.once@4.1.1: {}
+  lodash.once@4.1.1:
+    optional: true
 
   lodash.uniq@4.5.0: {}
 
@@ -20425,6 +20469,7 @@ snapshots:
       cli-cursor: 3.1.0
       slice-ansi: 4.0.0
       wrap-ansi: 6.2.0
+    optional: true
 
   longest-streak@3.1.0: {}
 
@@ -21402,7 +21447,8 @@ snapshots:
 
   os-utils@0.0.14: {}
 
-  ospath@1.2.2: {}
+  ospath@1.2.2:
+    optional: true
 
   otpauth@9.3.2:
     dependencies:
@@ -21553,9 +21599,11 @@ snapshots:
 
   peek-readable@5.2.0: {}
 
-  pend@1.2.0: {}
+  pend@1.2.0:
+    optional: true
 
-  performance-now@2.1.0: {}
+  performance-now@2.1.0:
+    optional: true
 
   pg-cloudflare@1.1.1:
     optional: true
@@ -21874,7 +21922,8 @@ snapshots:
 
   prettier@3.3.3: {}
 
-  pretty-bytes@5.6.0: {}
+  pretty-bytes@5.6.0:
+    optional: true
 
   pretty-format@27.5.1:
     dependencies:
@@ -21952,7 +22001,8 @@ snapshots:
       forwarded: 0.2.0
       ipaddr.js: 1.9.1
 
-  proxy-from-env@1.0.0: {}
+  proxy-from-env@1.0.0:
+    optional: true
 
   proxy-from-env@1.1.0: {}
 
@@ -22310,6 +22360,7 @@ snapshots:
   request-progress@3.0.0:
     dependencies:
       throttleit: 1.0.0
+    optional: true
 
   require-directory@2.1.1: {}
 
@@ -22359,6 +22410,7 @@ snapshots:
     dependencies:
       onetime: 5.1.2
       signal-exit: 3.0.7
+    optional: true
 
   ret@0.5.0: {}
 
@@ -22366,7 +22418,8 @@ snapshots:
 
   reusify@1.0.4: {}
 
-  rfdc@1.3.0: {}
+  rfdc@1.3.0:
+    optional: true
 
   rfdc@1.4.1: {}
 
@@ -22746,12 +22799,14 @@ snapshots:
       ansi-styles: 4.3.0
       astral-regex: 2.0.0
       is-fullwidth-code-point: 3.0.0
+    optional: true
 
   slice-ansi@4.0.0:
     dependencies:
       ansi-styles: 4.3.0
       astral-regex: 2.0.0
       is-fullwidth-code-point: 3.0.0
+    optional: true
 
   slick@1.12.2: {}
 
@@ -22851,6 +22906,7 @@ snapshots:
       jsbn: 0.1.1
       safer-buffer: 2.1.2
       tweetnacl: 0.14.5
+    optional: true
 
   ssri@10.0.4:
     dependencies:
@@ -23147,7 +23203,8 @@ snapshots:
 
   throttle-debounce@5.0.2: {}
 
-  throttleit@1.0.0: {}
+  throttleit@1.0.0:
+    optional: true
 
   through@2.3.8: {}
 
@@ -23308,6 +23365,7 @@ snapshots:
   tunnel-agent@0.6.0:
     dependencies:
       safe-buffer: 5.2.1
+    optional: true
 
   tweetnacl@0.14.5: {}
 
@@ -23525,7 +23583,8 @@ snapshots:
       webpack-sources: 3.2.3
       webpack-virtual-modules: 0.5.0
 
-  untildify@4.0.0: {}
+  untildify@4.0.0:
+    optional: true
 
   update-browserslist-db@1.0.13(browserslist@4.22.2):
     dependencies:
@@ -23572,7 +23631,8 @@ snapshots:
 
   uuid@10.0.0: {}
 
-  uuid@8.3.2: {}
+  uuid@8.3.2:
+    optional: true
 
   uuid@9.0.1: {}
 
@@ -23768,6 +23828,8 @@ snapshots:
 
   vue-component-type-helpers@2.0.16: {}
 
+  vue-component-type-helpers@2.1.10: {}
+
   vue-component-type-helpers@2.1.6: {}
 
   vue-demi@0.14.7(vue@3.5.10(typescript@5.6.2)):
@@ -24091,6 +24153,7 @@ snapshots:
     dependencies:
       buffer-crc32: 0.2.13
       fd-slicer: 1.1.0
+    optional: true
 
   yocto-queue@0.1.0: {}