Repository: urlaubsverwaltung/urlaubsverwaltung
Pull request #5245 (2025-03-13 15:36:46)

 expiry date in october mail
refs #3571

<!--

Thanks for contributing to the Urlaubsverwaltung.
Please review the following notes before submitting you pull request.

Please look for other issues or pull requests which already work on this topic. Is somebody already on it? Do you need to synchronize?

# Security Vulnerabilities

🛑 STOP! 🛑 If your contribution fixes a security vulnerability, please do not submit it.
Instead, please open a report of a security vulnerability via
[Report a security vulnerability](https://github.com/urlaubsverwaltung/urlaubsverwaltung/security/advisories/new)


# Describing Your Changes

If, having reviewed the notes above, you're ready to submit your pull request, please
provide a brief description of the proposed changes.

If they:
 🐞 fix a bug, please describe the broken behaviour and how the changes fix it.
    Please label with 'type: bug' and 'status: new'
    
 🎁 make an enhancement, please describe the new functionality and why you believe it's useful.
    Please label with 'type: enhancement' and 'status: new'
 
If your pull request relates to any existing issues,
please reference them by using the issue number prefixed with #.

-->



Patch:
diff --git a/.chglog/5.21.0.md b/.chglog/5.21.0.md
deleted file mode 100644
index a556d26c6..000000000
--- a/.chglog/5.21.0.md
+++ /dev/null
@@ -1,22 +0,0 @@
-## ⭐ Enhancements
-
-- Singular / Plural bei den Tagen und Stunden [#2062](https://github.com/urlaubsverwaltung/urlaubsverwaltung/issues/2062)
-
-## 🔨 Dependency upgrades
-
-- Bump `@babel`/core from 7.26.9 to 7.26.10 [#5246](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pull/5246)
-- Bump `@babel`/eslint-parser from 7.26.8 to 7.26.10 [#5248](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pull/5248)
-- Bump extension api version to v1.5.0 [#5251](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pull/5251)
-- Bump lint-staged from 15.4.3 to 15.5.0 [#5249](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pull/5249)
-- Bump postcss-cli from 11.0.0 to 11.0.1 [#5250](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pull/5250)
-
-## ❤️ Contributors
-
-We'd like to thank all the contributors who worked on this release!
-
-- [@derTobsch](https://github.com/derTobsch)
-- [@honnel](https://github.com/honnel)
-## External Links
-
-- [Docker Images (GitHub)](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pkgs/container/urlaubsverwaltung%2Furlaubsverwaltung)
-- [Docker Images (Docker Hub)](https://hub.docker.com/r/urlaubsverwaltung/urlaubsverwaltung)
diff --git a/.chglog/5.21.1.md b/.chglog/5.21.1.md
deleted file mode 100644
index e21cbf9e5..000000000
--- a/.chglog/5.21.1.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## 🐞 Bugs
-
-- Add ApplicationUpdateEvent handling to extension api [#5253](https://github.com/urlaubsverwaltung/urlaubsverwaltung/issues/5253)
-
-## ❤️ Contributors
-
-We'd like to thank all the contributors who worked on this release!
-
-- [@grafjo](https://github.com/grafjo)
-## External Links
-
-- [Docker Images (GitHub)](https://github.com/urlaubsverwaltung/urlaubsverwaltung/pkgs/container/urlaubsverwaltung%2Furlaubsverwaltung)
-- [Docker Images (Docker Hub)](https://hub.docker.com/r/urlaubsverwaltung/urlaubsverwaltung)
diff --git a/charts/urlaubsverwaltung/Chart.yaml b/charts/urlaubsverwaltung/Chart.yaml
index 52b25b974..d3f6d4d3b 100644
--- a/charts/urlaubsverwaltung/Chart.yaml
+++ b/charts/urlaubsverwaltung/Chart.yaml
@@ -3,8 +3,8 @@ apiVersion: v2
 name: urlaubsverwaltung
 description: Helm Chart for the urlaubsverwaltung
 type: application
-version: "6.10.0"
-appVersion: 5.21.0
+version: "6.9.0"
+appVersion: 5.20.0
 keywords:
   - urlaub
 home: https://github.com/urlaubsverwaltung/urlaubsverwaltung
diff --git a/package-lock.json b/package-lock.json
index af9d72b46..d5b63750b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
         "@rollup/plugin-commonjs": "28.0.3",
         "@rollup/plugin-dynamic-import-vars": "2.1.5",
         "@rollup/plugin-inject": "5.0.5",
-        "@rollup/plugin-node-resolve": "16.0.1",
+        "@rollup/plugin-node-resolve": "16.0.0",
         "@rollup/plugin-replace": "6.0.2",
         "@ungap/custom-elements": "1.3.0",
         "bootstrap": "3.4.1",
@@ -22,17 +22,17 @@
         "idiomorph": "0.4.0",
         "jquery": "3.7.1",
         "less-plugin-clean-css": "1.6.0",
-        "lint-staged": "15.5.0",
+        "lint-staged": "15.4.3",
         "rimraf": "6.0.1",
-        "rollup": "4.36.0",
+        "rollup": "4.35.0",
         "rollup-plugin-esbuild": "6.2.1",
         "rollup-plugin-postcss": "4.0.2",
         "timepicker": "1.14.1",
         "underscore": "1.13.7"
       },
       "devDependencies": {
-        "@babel/core": "7.26.10",
-        "@babel/eslint-parser": "7.26.10",
+        "@babel/core": "7.26.9",
+        "@babel/eslint-parser": "7.26.8",
         "@babel/plugin-syntax-dynamic-import": "7.8.3",
         "@babel/preset-env": "7.26.9",
         "@eslint/js": "9.22.0",
@@ -55,7 +55,7 @@
         "node-fetch": "2.7.0",
         "onchange": "7.1.0",
         "postcss": "8.5.3",
-        "postcss-cli": "11.0.1",
+        "postcss-cli": "11.0.0",
         "postcss-import": "16.1.0",
         "postcss-url": "10.1.3",
         "prettier": "3.5.3",
@@ -130,22 +130,22 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
-      "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz",
+      "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
         "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.10",
+        "@babel/generator": "^7.26.9",
         "@babel/helper-compilation-targets": "^7.26.5",
         "@babel/helper-module-transforms": "^7.26.0",
-        "@babel/helpers": "^7.26.10",
-        "@babel/parser": "^7.26.10",
+        "@babel/helpers": "^7.26.9",
+        "@babel/parser": "^7.26.9",
         "@babel/template": "^7.26.9",
-        "@babel/traverse": "^7.26.10",
-        "@babel/types": "^7.26.10",
+        "@babel/traverse": "^7.26.9",
+        "@babel/types": "^7.26.9",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -183,9 +183,9 @@
       }
     },
     "node_modules/@babel/eslint-parser": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.10.tgz",
-      "integrity": "sha512-QsfQZr4AiLpKqn7fz+j7SN+f43z2DZCgGyYbNJ2vJOqKfG4E6MZer1+jqGZqKJaxq/gdO2DC/nUu45+pOL5p2Q==",
+      "version": "7.26.8",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.8.tgz",
+      "integrity": "sha512-3tBctaHRW6xSub26z7n8uyOTwwUsCdvIug/oxBH9n6yCO5hMj2vwDJAo7RbBMKrM7P+W2j61zLKviJQFGOYKMg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -218,14 +218,14 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz",
-      "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz",
+      "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.26.10",
-        "@babel/types": "^7.26.10",
+        "@babel/parser": "^7.26.9",
+        "@babel/types": "^7.26.9",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^3.0.2"
@@ -497,27 +497,27 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
-      "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz",
+      "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.10"
+        "@babel/types": "^7.26.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
-      "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
+      "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.26.10"
+        "@babel/types": "^7.26.9"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -1771,17 +1771,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz",
-      "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz",
+      "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.10",
-        "@babel/parser": "^7.26.10",
+        "@babel/generator": "^7.26.9",
+        "@babel/parser": "^7.26.9",
         "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.10",
+        "@babel/types": "^7.26.9",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -1799,9 +1799,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
-      "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
+      "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3476,10 +3476,9 @@
       }
     },
     "node_modules/@rollup/plugin-node-resolve": {
-      "version": "16.0.1",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz",
-      "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==",
-      "license": "MIT",
+      "version": "16.0.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
+      "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
       "dependencies": {
         "@rollup/pluginutils": "^5.0.1",
         "@types/resolve": "1.20.2",
@@ -3552,9 +3551,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.36.0.tgz",
-      "integrity": "sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz",
+      "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==",
       "cpu": [
         "arm"
       ],
@@ -3565,9 +3564,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.36.0.tgz",
-      "integrity": "sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz",
+      "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==",
       "cpu": [
         "arm64"
       ],
@@ -3578,9 +3577,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.36.0.tgz",
-      "integrity": "sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz",
+      "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==",
       "cpu": [
         "arm64"
       ],
@@ -3591,9 +3590,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.36.0.tgz",
-      "integrity": "sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz",
+      "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==",
       "cpu": [
         "x64"
       ],
@@ -3604,9 +3603,9 @@
       ]
     },
     "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.36.0.tgz",
-      "integrity": "sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz",
+      "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==",
       "cpu": [
         "arm64"
       ],
@@ -3617,9 +3616,9 @@
       ]
     },
     "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.36.0.tgz",
-      "integrity": "sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz",
+      "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==",
       "cpu": [
         "x64"
       ],
@@ -3630,9 +3629,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.36.0.tgz",
-      "integrity": "sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz",
+      "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==",
       "cpu": [
         "arm"
       ],
@@ -3643,9 +3642,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.36.0.tgz",
-      "integrity": "sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz",
+      "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==",
       "cpu": [
         "arm"
       ],
@@ -3656,9 +3655,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.36.0.tgz",
-      "integrity": "sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz",
+      "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==",
       "cpu": [
         "arm64"
       ],
@@ -3669,9 +3668,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.36.0.tgz",
-      "integrity": "sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz",
+      "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==",
       "cpu": [
         "arm64"
       ],
@@ -3682,9 +3681,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.36.0.tgz",
-      "integrity": "sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz",
+      "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==",
       "cpu": [
         "loong64"
       ],
@@ -3695,9 +3694,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.36.0.tgz",
-      "integrity": "sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz",
+      "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==",
       "cpu": [
         "ppc64"
       ],
@@ -3708,9 +3707,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.36.0.tgz",
-      "integrity": "sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz",
+      "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==",
       "cpu": [
         "riscv64"
       ],
@@ -3721,9 +3720,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.36.0.tgz",
-      "integrity": "sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz",
+      "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==",
       "cpu": [
         "s390x"
       ],
@@ -3734,9 +3733,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.36.0.tgz",
-      "integrity": "sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz",
+      "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==",
       "cpu": [
         "x64"
       ],
@@ -3747,9 +3746,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.36.0.tgz",
-      "integrity": "sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
+      "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
       "cpu": [
         "x64"
       ],
@@ -3760,9 +3759,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.36.0.tgz",
-      "integrity": "sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz",
+      "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==",
       "cpu": [
         "arm64"
       ],
@@ -3773,9 +3772,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.36.0.tgz",
-      "integrity": "sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz",
+      "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==",
       "cpu": [
         "ia32"
       ],
@@ -3786,9 +3785,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.36.0.tgz",
-      "integrity": "sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz",
+      "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==",
       "cpu": [
         "x64"
       ],
@@ -3803,6 +3802,18 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@sindresorhus/merge-streams": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz",
+      "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@sinonjs/commons": {
       "version": "2.0.0",
       "dev": true,
@@ -5383,13 +5394,11 @@
       }
     },
     "node_modules/dependency-graph": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
-      "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
+      "version": "0.11.0",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.6.0"
       }
     },
     "node_modules/detect-newline": {
@@ -6358,10 +6367,9 @@
       }
     },
     "node_modules/fdir": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
-      "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
-      "license": "MIT",
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.0.tgz",
+      "integrity": "sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==",
       "peerDependencies": {
         "picomatch": "^3 || ^4"
       },
@@ -6684,6 +6692,38 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/globby": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz",
+      "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==",
+      "dev": true,
+      "dependencies": {
+        "@sindresorhus/merge-streams": "^1.0.0",
+        "fast-glob": "^3.3.2",
+        "ignore": "^5.2.4",
+        "path-type": "^5.0.0",
+        "slash": "^5.1.0",
+        "unicorn-magic": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/globby/node_modules/slash": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+      "dev": true,
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/graceful-fs": {
       "version": "4.2.9",
       "dev": true,
@@ -9091,9 +9131,9 @@
       "license": "MIT"
     },
     "node_modules/lint-staged": {
-      "version": "15.5.0",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.0.tgz",
-      "integrity": "sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==",
+      "version": "15.4.3",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz",
+      "integrity": "sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==",
       "license": "MIT",
       "dependencies": {
         "chalk": "^5.4.1",
@@ -10191,6 +10231,18 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/path-type": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+      "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/pathe": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
@@ -10300,22 +10352,22 @@
       }
     },
     "node_modules/postcss-cli": {
-      "version": "11.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz",
-      "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz",
+      "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==",
       "dev": true,
-      "license": "MIT",
       "dependencies": {
         "chokidar": "^3.3.0",
-        "dependency-graph": "^1.0.0",
+        "dependency-graph": "^0.11.0",
         "fs-extra": "^11.0.0",
+        "get-stdin": "^9.0.0",
+        "globby": "^14.0.0",
         "picocolors": "^1.0.0",
         "postcss-load-config": "^5.0.0",
         "postcss-reporter": "^7.0.0",
         "pretty-hrtime": "^1.0.3",
         "read-cache": "^1.0.0",
         "slash": "^5.0.0",
-        "tinyglobby": "^0.2.12",
         "yargs": "^17.0.0"
       },
       "bin": {
@@ -10328,6 +10380,17 @@
         "postcss": "^8.0.0"
       }
     },
+    "node_modules/postcss-cli/node_modules/get-stdin": {
+      "version": "9.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/postcss-cli/node_modules/lilconfig": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
@@ -11624,9 +11687,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.36.0.tgz",
-      "integrity": "sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz",
+      "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==",
       "license": "MIT",
       "dependencies": {
         "@types/estree": "1.0.6"
@@ -11639,25 +11702,25 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.36.0",
-        "@rollup/rollup-android-arm64": "4.36.0",
-        "@rollup/rollup-darwin-arm64": "4.36.0",
-        "@rollup/rollup-darwin-x64": "4.36.0",
-        "@rollup/rollup-freebsd-arm64": "4.36.0",
-        "@rollup/rollup-freebsd-x64": "4.36.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.36.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.36.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.36.0",
-        "@rollup/rollup-linux-arm64-musl": "4.36.0",
-        "@rollup/rollup-linux-loongarch64-gnu": "4.36.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.36.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.36.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.36.0",
-        "@rollup/rollup-linux-x64-gnu": "4.36.0",
-        "@rollup/rollup-linux-x64-musl": "4.36.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.36.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.36.0",
-        "@rollup/rollup-win32-x64-msvc": "4.36.0",
+        "@rollup/rollup-android-arm-eabi": "4.35.0",
+        "@rollup/rollup-android-arm64": "4.35.0",
+        "@rollup/rollup-darwin-arm64": "4.35.0",
+        "@rollup/rollup-darwin-x64": "4.35.0",
+        "@rollup/rollup-freebsd-arm64": "4.35.0",
+        "@rollup/rollup-freebsd-x64": "4.35.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.35.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.35.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.35.0",
+        "@rollup/rollup-linux-arm64-musl": "4.35.0",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.35.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.35.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.35.0",
+        "@rollup/rollup-linux-x64-gnu": "4.35.0",
+        "@rollup/rollup-linux-x64-musl": "4.35.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.35.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.35.0",
+        "@rollup/rollup-win32-x64-msvc": "4.35.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -13049,23 +13112,6 @@
         "jquery": "^3.5.1"
       }
     },
-    "node_modules/tinyglobby": {
-      "version": "0.2.12",
-      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
-      "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fdir": "^6.4.3",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/SuperchupuDev"
-      }
-    },
     "node_modules/tmpl": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -13659,21 +13705,21 @@
       "dev": true
     },
     "@babel/core": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
-      "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz",
+      "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "^2.2.0",
         "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.10",
+        "@babel/generator": "^7.26.9",
         "@babel/helper-compilation-targets": "^7.26.5",
         "@babel/helper-module-transforms": "^7.26.0",
-        "@babel/helpers": "^7.26.10",
-        "@babel/parser": "^7.26.10",
+        "@babel/helpers": "^7.26.9",
+        "@babel/parser": "^7.26.9",
         "@babel/template": "^7.26.9",
-        "@babel/traverse": "^7.26.10",
-        "@babel/types": "^7.26.10",
+        "@babel/traverse": "^7.26.9",
+        "@babel/types": "^7.26.9",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -13698,9 +13744,9 @@
       }
     },
     "@babel/eslint-parser": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.10.tgz",
-      "integrity": "sha512-QsfQZr4AiLpKqn7fz+j7SN+f43z2DZCgGyYbNJ2vJOqKfG4E6MZer1+jqGZqKJaxq/gdO2DC/nUu45+pOL5p2Q==",
+      "version": "7.26.8",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.8.tgz",
+      "integrity": "sha512-3tBctaHRW6xSub26z7n8uyOTwwUsCdvIug/oxBH9n6yCO5hMj2vwDJAo7RbBMKrM7P+W2j61zLKviJQFGOYKMg==",
       "dev": true,
       "requires": {
         "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -13719,13 +13765,13 @@
       }
     },
     "@babel/generator": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz",
-      "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz",
+      "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
       "dev": true,
       "requires": {
-        "@babel/parser": "^7.26.10",
-        "@babel/types": "^7.26.10",
+        "@babel/parser": "^7.26.9",
+        "@babel/types": "^7.26.9",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^3.0.2"
@@ -13920,22 +13966,22 @@
       }
     },
     "@babel/helpers": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
-      "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz",
+      "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
       "dev": true,
       "requires": {
         "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.10"
+        "@babel/types": "^7.26.9"
       }
     },
     "@babel/parser": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
-      "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
+      "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.26.10"
+        "@babel/types": "^7.26.9"
       }
     },
     "@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
@@ -14735,16 +14781,16 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz",
-      "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz",
+      "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.10",
-        "@babel/parser": "^7.26.10",
+        "@babel/generator": "^7.26.9",
+        "@babel/parser": "^7.26.9",
         "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.10",
+        "@babel/types": "^7.26.9",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -14758,9 +14804,9 @@
       }
     },
     "@babel/types": {
-      "version": "7.26.10",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
-      "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+      "version": "7.26.9",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
+      "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
       "dev": true,
       "requires": {
         "@babel/helper-string-parser": "^7.25.9",
@@ -15792,9 +15838,9 @@
       }
     },
     "@rollup/plugin-node-resolve": {
-      "version": "16.0.1",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz",
-      "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==",
+      "version": "16.0.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
+      "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
       "requires": {
         "@rollup/pluginutils": "^5.0.1",
         "@types/resolve": "1.20.2",
@@ -15830,123 +15876,129 @@
       }
     },
     "@rollup/rollup-android-arm-eabi": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.36.0.tgz",
-      "integrity": "sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz",
+      "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==",
       "optional": true
     },
     "@rollup/rollup-android-arm64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.36.0.tgz",
-      "integrity": "sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz",
+      "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==",
       "optional": true
     },
     "@rollup/rollup-darwin-arm64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.36.0.tgz",
-      "integrity": "sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz",
+      "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==",
       "optional": true
     },
     "@rollup/rollup-darwin-x64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.36.0.tgz",
-      "integrity": "sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz",
+      "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==",
       "optional": true
     },
     "@rollup/rollup-freebsd-arm64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.36.0.tgz",
-      "integrity": "sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz",
+      "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==",
       "optional": true
     },
     "@rollup/rollup-freebsd-x64": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.36.0.tgz",
-      "integrity": "sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz",
+      "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==",
       "optional": true
     },
     "@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.36.0.tgz",
-      "integrity": "sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz",
+      "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==",
       "optional": true
     },
     "@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.36.0.tgz",
-      "integrity": "sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz",
+      "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==",
       "optional": true
     },
     "@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.36.0.tgz",
-      "integrity": "sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz",
+      "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==",
       "optional": true
     },
     "@rollup/rollup-linux-arm64-musl": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.36.0.tgz",
-      "integrity": "sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz",
+      "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==",
       "optional": true
     },
     "@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.36.0.tgz",
-      "integrity": "sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz",
+      "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==",
       "optional": true
     },
     "@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.36.0.tgz",
-      "integrity": "sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz",
+      "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==",
       "optional": true
     },
     "@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.36.0.tgz",
-      "integrity": "sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz",
+      "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==",
       "optional": true
     },
     "@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.36.0.tgz",
-      "integrity": "sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz",
+      "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==",
       "optional": true
     },
     "@rollup/rollup-linux-x64-gnu": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.36.0.tgz",
-      "integrity": "sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz",
+      "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==",
       "optional": true
     },
     "@rollup/rollup-linux-x64-musl": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.36.0.tgz",
-      "integrity": "sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
+      "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
       "optional": true
     },
     "@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.36.0.tgz",
-      "integrity": "sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz",
+      "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==",
       "optional": true
     },
     "@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.36.0.tgz",
-      "integrity": "sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz",
+      "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==",
       "optional": true
     },
     "@rollup/rollup-win32-x64-msvc": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.36.0.tgz",
-      "integrity": "sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz",
+      "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==",
       "optional": true
     },
     "@sinclair/typebox": {
       "version": "0.27.8",
       "dev": true
     },
+    "@sindresorhus/merge-streams": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz",
+      "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==",
+      "dev": true
+    },
     "@sinonjs/commons": {
       "version": "2.0.0",
       "dev": true,
@@ -17000,9 +17052,7 @@
       "dev": true
     },
     "dependency-graph": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
-      "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
+      "version": "0.11.0",
       "dev": true
     },
     "detect-newline": {
@@ -17613,9 +17663,9 @@
       }
     },
     "fdir": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
-      "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.0.tgz",
+      "integrity": "sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==",
       "requires": {}
     },
     "fetch-mock": {
@@ -17811,6 +17861,28 @@
       "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==",
       "dev": true
     },
+    "globby": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz",
+      "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==",
+      "dev": true,
+      "requires": {
+        "@sindresorhus/merge-streams": "^1.0.0",
+        "fast-glob": "^3.3.2",
+        "ignore": "^5.2.4",
+        "path-type": "^5.0.0",
+        "slash": "^5.1.0",
+        "unicorn-magic": "^0.1.0"
+      },
+      "dependencies": {
+        "slash": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+          "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+          "dev": true
+        }
+      }
+    },
     "graceful-fs": {
       "version": "4.2.9",
       "dev": true
@@ -19512,9 +19584,9 @@
       "dev": true
     },
     "lint-staged": {
-      "version": "15.5.0",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.0.tgz",
-      "integrity": "sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==",
+      "version": "15.4.3",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.4.3.tgz",
+      "integrity": "sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==",
       "requires": {
         "chalk": "^5.4.1",
         "commander": "^13.1.0",
@@ -20237,6 +20309,12 @@
       "version": "2.4.0",
       "dev": true
     },
+    "path-type": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+      "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+      "dev": true
+    },
     "pathe": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
@@ -20295,24 +20373,29 @@
       }
     },
     "postcss-cli": {
-      "version": "11.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz",
-      "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz",
+      "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==",
       "dev": true,
       "requires": {
         "chokidar": "^3.3.0",
-        "dependency-graph": "^1.0.0",
+        "dependency-graph": "^0.11.0",
         "fs-extra": "^11.0.0",
+        "get-stdin": "^9.0.0",
+        "globby": "^14.0.0",
         "picocolors": "^1.0.0",
         "postcss-load-config": "^5.0.0",
         "postcss-reporter": "^7.0.0",
         "pretty-hrtime": "^1.0.3",
         "read-cache": "^1.0.0",
         "slash": "^5.0.0",
-        "tinyglobby": "^0.2.12",
         "yargs": "^17.0.0"
       },
       "dependencies": {
+        "get-stdin": {
+          "version": "9.0.0",
+          "dev": true
+        },
         "lilconfig": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
@@ -21082,29 +21165,29 @@
       }
     },
     "rollup": {
-      "version": "4.36.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.36.0.tgz",
-      "integrity": "sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==",
-      "requires": {
-        "@rollup/rollup-android-arm-eabi": "4.36.0",
-        "@rollup/rollup-android-arm64": "4.36.0",
-        "@rollup/rollup-darwin-arm64": "4.36.0",
-        "@rollup/rollup-darwin-x64": "4.36.0",
-        "@rollup/rollup-freebsd-arm64": "4.36.0",
-        "@rollup/rollup-freebsd-x64": "4.36.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.36.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.36.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.36.0",
-        "@rollup/rollup-linux-arm64-musl": "4.36.0",
-        "@rollup/rollup-linux-loongarch64-gnu": "4.36.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.36.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.36.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.36.0",
-        "@rollup/rollup-linux-x64-gnu": "4.36.0",
-        "@rollup/rollup-linux-x64-musl": "4.36.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.36.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.36.0",
-        "@rollup/rollup-win32-x64-msvc": "4.36.0",
+      "version": "4.35.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz",
+      "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==",
+      "requires": {
+        "@rollup/rollup-android-arm-eabi": "4.35.0",
+        "@rollup/rollup-android-arm64": "4.35.0",
+        "@rollup/rollup-darwin-arm64": "4.35.0",
+        "@rollup/rollup-darwin-x64": "4.35.0",
+        "@rollup/rollup-freebsd-arm64": "4.35.0",
+        "@rollup/rollup-freebsd-x64": "4.35.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.35.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.35.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.35.0",
+        "@rollup/rollup-linux-arm64-musl": "4.35.0",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.35.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.35.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.35.0",
+        "@rollup/rollup-linux-x64-gnu": "4.35.0",
+        "@rollup/rollup-linux-x64-musl": "4.35.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.35.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.35.0",
+        "@rollup/rollup-win32-x64-msvc": "4.35.0",
         "@types/estree": "1.0.6",
         "fsevents": "~2.3.2"
       }
@@ -22029,16 +22112,6 @@
         "jquery": "^3.5.1"
       }
     },
-    "tinyglobby": {
-      "version": "0.2.12",
-      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
-      "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
-      "dev": true,
-      "requires": {
-        "fdir": "^6.4.3",
-        "picomatch": "^4.0.2"
-      }
-    },
     "tmpl": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
diff --git a/package.json b/package.json
index 79ef64443..2b804fcb9 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
     "@rollup/plugin-commonjs": "28.0.3",
     "@rollup/plugin-dynamic-import-vars": "2.1.5",
     "@rollup/plugin-inject": "5.0.5",
-    "@rollup/plugin-node-resolve": "16.0.1",
+    "@rollup/plugin-node-resolve": "16.0.0",
     "@rollup/plugin-replace": "6.0.2",
     "@ungap/custom-elements": "1.3.0",
     "bootstrap": "3.4.1",
@@ -50,17 +50,17 @@
     "idiomorph": "0.4.0",
     "jquery": "3.7.1",
     "less-plugin-clean-css": "1.6.0",
-    "lint-staged": "15.5.0",
+    "lint-staged": "15.4.3",
     "rimraf": "6.0.1",
-    "rollup": "4.36.0",
+    "rollup": "4.35.0",
     "rollup-plugin-esbuild": "6.2.1",
     "rollup-plugin-postcss": "4.0.2",
     "timepicker": "1.14.1",
     "underscore": "1.13.7"
   },
   "devDependencies": {
-    "@babel/core": "7.26.10",
-    "@babel/eslint-parser": "7.26.10",
+    "@babel/core": "7.26.9",
+    "@babel/eslint-parser": "7.26.8",
     "@babel/plugin-syntax-dynamic-import": "7.8.3",
     "@babel/preset-env": "7.26.9",
     "@eslint/js": "9.22.0",
@@ -83,7 +83,7 @@
     "node-fetch": "2.7.0",
     "onchange": "7.1.0",
     "postcss": "8.5.3",
-    "postcss-cli": "11.0.1",
+    "postcss-cli": "11.0.0",
     "postcss-import": "16.1.0",
     "postcss-url": "10.1.3",
     "prettier": "3.5.3",
diff --git a/pom.xml b/pom.xml
index f4b10ffa7..c19e44481 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
   <groupId>org.synyx</groupId>
   <artifactId>urlaubsverwaltung</artifactId>
-  <version>5.22.0-SNAPSHOT</version>
+  <version>5.21.0-SNAPSHOT</version>
 
   <name>Urlaubsverwaltung</name>
 
@@ -19,7 +19,7 @@
     <maven.compiler.showWarnings>true</maven.compiler.showWarnings>
     <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
     <java.version>21</java.version>
-    <uv-extension-api.version>1.5.0</uv-extension-api.version>
+    <uv-extension-api.version>1.4.0</uv-extension-api.version>
     <jollyday.version>1.5.0</jollyday.version>
 
     <!-- Remove commons-compress dependency when testcontainers ships with commons-compress >= 1.27.1, see
@@ -303,7 +303,7 @@
     <dependency>
       <groupId>com.microsoft.playwright</groupId>
       <artifactId>playwright</artifactId>
-      <version>1.51.0</version>
+      <version>1.50.0</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderService.java b/src/main/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderService.java
index 4d592e49a..ebea6a1cd 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderService.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderService.java
@@ -15,6 +15,7 @@ import java.time.Year;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import static java.lang.invoke.MethodHandles.lookup;
 import static java.math.BigDecimal.ZERO;
@@ -45,18 +46,25 @@ public class VacationDaysReminderService {
 
     /**
      * Reminds for vacation days left for <b>current year</b>.
+     * This mail will be sent by default in october
      */
     public void remindForCurrentlyLeftVacationDays() {
         final Year year = Year.now(clock);
+        final Year nextYear = year.plusYears(1);
         final List<Person> persons = personService.getActivePersons();
 
-        accountService.getHolidaysAccount(year.getValue(), persons).stream()
-            .filter(Account::doRemainingVacationDaysExpire)
-            .forEach(account -> {
-                final BigDecimal vacationDaysLeft = vacationDaysService.getTotalLeftVacationDays(account);
+        accountService.getHolidaysAccount(year.getValue(), persons)
+            .forEach(holidayAccountThisYear -> {
+                final BigDecimal vacationDaysLeft = vacationDaysService.getTotalLeftVacationDays(holidayAccountThisYear);
                 if (vacationDaysLeft.compareTo(ZERO) > 0) {
-                    sendReminderForCurrentlyLeftVacationDays(account.getPerson(), vacationDaysLeft, year.plusYears(1));
-                    LOG.info("Reminded person with id {} for {} currently left vacation days", account.getPerson().getId(), vacationDaysLeft);
+
+                    final Optional<Account> holidaysAccountsNextYear = accountService.getHolidaysAccount(nextYear.getValue(), holidayAccountThisYear.getPerson());
+                    final Account holidayAccountNextWithFallbackThisYear = holidaysAccountsNextYear.orElse(holidayAccountThisYear);
+                    if (holidayAccountNextWithFallbackThisYear.doRemainingVacationDaysExpire()) {
+                        final LocalDate expiryDate = holidayAccountNextWithFallbackThisYear.getExpiryDate().withYear(nextYear.getValue());
+                        sendReminderForCurrentlyLeftVacationDays(holidayAccountNextWithFallbackThisYear.getPerson(), vacationDaysLeft, expiryDate);
+                        LOG.info("Reminded person with id {} for {} currently left vacation days", holidayAccountNextWithFallbackThisYear.getPerson().getId(), vacationDaysLeft);
+                    }
                 }
             });
     }
@@ -136,10 +144,10 @@ public class VacationDaysReminderService {
         }
     }
 
-    private void sendReminderForCurrentlyLeftVacationDays(Person person, BigDecimal vacationDaysLeft, Year nextYear) {
+    private void sendReminderForCurrentlyLeftVacationDays(Person person, BigDecimal vacationDaysLeft, LocalDate expiryDateNextYear) {
         final Map<String, Object> model = new HashMap<>();
         model.put("vacationDaysLeft", vacationDaysLeft);
-        model.put("nextYear", nextYear.getValue());
+        model.put("expiryDateNextYear", expiryDateNextYear);
 
         sendMail(person, "subject.account.remindForCurrentlyLeftVacationDays", "account_cron_currently_left_vacation_days", model);
     }
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/application/application/Application.java b/src/main/java/org/synyx/urlaubsverwaltung/application/application/Application.java
index 498786874..e069bd419 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/application/application/Application.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/application/application/Application.java
@@ -465,8 +465,7 @@ public class Application {
     @Override
     public String toString() {
         return "Application{" +
-            "id=" + id +
-            ", person=" + person +
+            "person=" + person +
             ", applier=" + applier +
             ", boss=" + boss +
             ", canceller=" + canceller +
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsEntity.java b/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsEntity.java
index c6da0fd58..3e8e37afd 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsEntity.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsEntity.java
@@ -60,14 +60,4 @@ public class SpecialLeaveSettingsEntity extends AbstractTenantAwareEntity {
     public void setDays(Integer days) {
         this.days = days;
     }
-
-    @Override
-    public String toString() {
-        return "SpecialLeaveSettingsEntity{" +
-            "id=" + id +
-            ", active=" + active +
-            ", messageKey='" + messageKey + '\'' +
-            ", days=" + days +
-            '}';
-    }
 }
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepository.java b/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepository.java
index 00fa3b7e6..b7024a442 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepository.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepository.java
@@ -3,7 +3,6 @@ package org.synyx.urlaubsverwaltung.application.specialleave;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
-import java.util.Optional;
 
 interface SpecialLeaveSettingsRepository extends JpaRepository<SpecialLeaveSettingsEntity, Long> {
 
@@ -12,6 +11,4 @@ interface SpecialLeaveSettingsRepository extends JpaRepository<SpecialLeaveSetti
 
     @Override
     List<SpecialLeaveSettingsEntity> findAllById(Iterable<Long> ids);
-
-    Optional<SpecialLeaveSettingsEntity> findAllByMessageKey(String messageKey);
 }
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsService.java b/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsService.java
index 464b8a3ed..6314c6c80 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsService.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsService.java
@@ -56,24 +56,18 @@ public class SpecialLeaveSettingsService {
     }
 
     public void insertDefaultSpecialLeaveSettings() {
-
-        final List<SpecialLeaveSettingsEntity> vacationTypes = List.of(
-            createSpecialLeaveEntity(1, true, "application.data.specialleave.own_wedding"),
-            createSpecialLeaveEntity(1, true, "application.data.specialleave.birth_of_child"),
-            createSpecialLeaveEntity(2, true, "application.data.specialleave.death_of_child"),
-            createSpecialLeaveEntity(1, true, "application.data.specialleave.death_of_parent"),
-            createSpecialLeaveEntity(1, true, "application.data.specialleave.serious_illness_familiy_member"),
-            createSpecialLeaveEntity(1, true, "application.data.specialleave.relocation_for_business_reason"),
-            createSpecialLeaveEntity(1, false, "application.data.specialleave.company_anniversaries")
-        );
-
-        final List<SpecialLeaveSettingsEntity> missingVacationTypes = vacationTypes.stream()
-            .filter(specialLeaveSettingsEntity -> specialLeaveSettingsRepository.findAllByMessageKey(specialLeaveSettingsEntity.getMessageKey()).isEmpty())
-            .toList();
-
-        if (!missingVacationTypes.isEmpty()) {
-            final List<SpecialLeaveSettingsEntity> savesVacationTypes = specialLeaveSettingsRepository.saveAll(missingVacationTypes);
-            LOG.info("Saved new special leave {}", savesVacationTypes);
+        final long count = specialLeaveSettingsRepository.count();
+        if (count == 0) {
+            final SpecialLeaveSettingsEntity ownWedding = createSpecialLeaveEntity(1, true, "application.data.specialleave.own_wedding");
+            final SpecialLeaveSettingsEntity birthOfChild = createSpecialLeaveEntity(1, true, "application.data.specialleave.birth_of_child");
+            final SpecialLeaveSettingsEntity deathOfChild = createSpecialLeaveEntity(2, true, "application.data.specialleave.death_of_child");
+            final SpecialLeaveSettingsEntity deathOfParent = createSpecialLeaveEntity(1, true, "application.data.specialleave.death_of_parent");
+            final SpecialLeaveSettingsEntity seriousIllnessFamilyMember = createSpecialLeaveEntity(1, true, "application.data.specialleave.serious_illness_familiy_member");
+            final SpecialLeaveSettingsEntity relocationForBusinessReason = createSpecialLeaveEntity(1, true, "application.data.specialleave.relocation_for_business_reason");
+
+            final List<SpecialLeaveSettingsEntity> vacationTypes = List.of(ownWedding, birthOfChild, deathOfChild, deathOfParent, seriousIllnessFamilyMember, relocationForBusinessReason);
+            final List<SpecialLeaveSettingsEntity> savesVacationTypes = specialLeaveSettingsRepository.saveAll(vacationTypes);
+            LOG.info("Saved initial special leave {}", savesVacationTypes);
         }
     }
 
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/extension/application/ApplicationEventHandlerExtension.java b/src/main/java/org/synyx/urlaubsverwaltung/extension/application/ApplicationEventHandlerExtension.java
index 0ed322f44..fde158508 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/extension/application/ApplicationEventHandlerExtension.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/extension/application/ApplicationEventHandlerExtension.java
@@ -5,13 +5,13 @@ import de.focus_shift.urlaubsverwaltung.extension.api.application.ApplicationCan
 import de.focus_shift.urlaubsverwaltung.extension.api.application.ApplicationCreatedFromSickNoteEventDTO;
 import de.focus_shift.urlaubsverwaltung.extension.api.application.ApplicationPeriodDTO;
 import de.focus_shift.urlaubsverwaltung.extension.api.application.ApplicationPersonDTO;
-import de.focus_shift.urlaubsverwaltung.extension.api.application.ApplicationUpdatedEventDTO;
 import de.focus_shift.urlaubsverwaltung.extension.api.application.DayLength;
 import de.focus_shift.urlaubsverwaltung.extension.api.application.VacationTypeDTO;
 import de.focus_shift.urlaubsverwaltung.extension.api.tenancy.TenantSupplier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.synyx.urlaubsverwaltung.absence.AbsencePeriod;
 import org.synyx.urlaubsverwaltung.absence.AbsenceService;
@@ -19,7 +19,6 @@ import org.synyx.urlaubsverwaltung.application.application.Application;
 import org.synyx.urlaubsverwaltung.application.application.ApplicationAllowedEvent;
 import org.synyx.urlaubsverwaltung.application.application.ApplicationCancelledEvent;
 import org.synyx.urlaubsverwaltung.application.application.ApplicationCreatedFromSickNoteEvent;
-import org.synyx.urlaubsverwaltung.application.application.ApplicationUpdatedEvent;
 import org.synyx.urlaubsverwaltung.application.vacationtype.ProvidedVacationType;
 import org.synyx.urlaubsverwaltung.application.vacationtype.VacationType;
 import org.synyx.urlaubsverwaltung.person.Person;
@@ -136,36 +135,6 @@ public class ApplicationEventHandlerExtension {
         };
     }
 
-    private static Function<AbsencePeriod, ApplicationUpdatedEventDTO> toApplicationUpdatedEventDTO(String tenantId, ApplicationUpdatedEvent event) {
-        return absencePeriod -> {
-            final VacationTypeDTO vacationType = toVacationType(event.application().getVacationType());
-            final ApplicationPersonDTO person = toApplicationPersonDTO(event.application().getPerson());
-            final ApplicationPersonDTO appliedBy = event.application().getApplier() != null ? toApplicationPersonDTO(event.application().getApplier()) : null;
-            final ApplicationPersonDTO allowedBy = event.application().getBoss() != null ? toApplicationPersonDTO(event.application().getBoss()) : null;
-            final ApplicationPeriodDTO period = toPeriod(event.application());
-            final String status = toStatus(event.application());
-            final Set<LocalDate> absentWorkingDays = toAbsentWorkingDays(absencePeriod);
-
-            return ApplicationUpdatedEventDTO.builder()
-                .id(event.id())
-                .sourceId(event.application().getId())
-                .createdAt(event.createdAt())
-                .tenantId(tenantId)
-                .person(person)
-                .appliedBy(appliedBy)
-                .updatedBy(allowedBy)
-                .twoStageApproval(event.application().isTwoStageApproval())
-                .period(period)
-                .vacationType(vacationType)
-                .reason(event.application().getReason())
-                .status(status)
-                .teamInformed(event.application().isTeamInformed())
-                .absentWorkingDays(absentWorkingDays)
-                .build();
-        };
-    }
-
-
     private static Function<AbsencePeriod, ApplicationCancelledEventDTO> toApplicationCancelledEventDTO(String tenantId, ApplicationCancelledEvent event) {
         return absencePeriod -> {
             final VacationTypeDTO vacationType = toVacationType(event.application().getVacationType());
@@ -208,6 +177,7 @@ public class ApplicationEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(ApplicationAllowedEvent event) {
         getAbsencePeriods(event.application())
             .ifPresent(absencePeriod -> {
@@ -217,15 +187,7 @@ public class ApplicationEventHandlerExtension {
     }
 
     @EventListener
-    void on(ApplicationUpdatedEvent event) {
-        getAbsencePeriods(event.application())
-            .ifPresent(absencePeriod -> {
-                final ApplicationUpdatedEventDTO dto = toApplicationUpdatedEventDTO(tenantSupplier.get(), event).apply(absencePeriod);
-                applicationEventPublisher.publishEvent(dto);
-            });
-    }
-
-    @EventListener
+    @Async
     void on(ApplicationCancelledEvent event) {
         getClosedAbsencePeriods(event.application())
             .ifPresent(absencePeriod -> {
@@ -235,6 +197,7 @@ public class ApplicationEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(ApplicationCreatedFromSickNoteEvent event) {
         getAbsencePeriods(event.application())
             .ifPresent(absencePeriod -> {
diff --git a/src/main/java/org/synyx/urlaubsverwaltung/extension/sicknote/SickNoteEventHandlerExtension.java b/src/main/java/org/synyx/urlaubsverwaltung/extension/sicknote/SickNoteEventHandlerExtension.java
index 534dad0da..d551ec87e 100644
--- a/src/main/java/org/synyx/urlaubsverwaltung/extension/sicknote/SickNoteEventHandlerExtension.java
+++ b/src/main/java/org/synyx/urlaubsverwaltung/extension/sicknote/SickNoteEventHandlerExtension.java
@@ -12,6 +12,7 @@ import de.focus_shift.urlaubsverwaltung.extension.api.tenancy.TenantSupplier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.synyx.urlaubsverwaltung.absence.AbsencePeriod;
 import org.synyx.urlaubsverwaltung.absence.AbsenceService;
@@ -220,6 +221,7 @@ public class SickNoteEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(SickNoteCancelledEvent event) {
         getClosedAbsencePeriods(event.sickNote())
             .map(toSickNoteCancelledEventDTO(tenantSupplier.get(), event))
@@ -227,6 +229,7 @@ public class SickNoteEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(SickNoteCreatedEvent event) {
         getAbsencePeriods(event.sickNote())
             .map(toSickNoteCreatedEventDTO(tenantSupplier.get(), event))
@@ -234,6 +237,7 @@ public class SickNoteEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(SickNoteUpdatedEvent event) {
         getAbsencePeriods(event.sickNote())
             .map(toSickNoteUpdatedEventDTO(tenantSupplier.get(), event))
@@ -241,6 +245,7 @@ public class SickNoteEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(SickNoteAcceptedEvent event) {
         getAbsencePeriods(event.sickNote())
             .map(toSickNoteAcceptedEventDTO(tenantSupplier.get(), event))
@@ -248,6 +253,7 @@ public class SickNoteEventHandlerExtension {
     }
 
     @EventListener
+    @Async
     void on(SickNoteToApplicationConvertedEvent event) {
         getAbsencePeriods(event.sickNote())
             .map(toSickNoteConvertedEventDTO(tenantSupplier.get(), event))
diff --git a/src/main/resources/MailMessages_de.properties b/src/main/resources/MailMessages_de.properties
index 757028bc8..93195b900 100644
--- a/src/main/resources/MailMessages_de.properties
+++ b/src/main/resources/MailMessages_de.properties
@@ -34,7 +34,7 @@ account.remaining_vacation_days.last_year.use_until=Du hast noch {0, choice, 0#{
 account.remaining_vacation_days.expired=leider ist dein Resturlaub zum {0} in Höhe von {1, choice, 0#{1} Tage|1#1 Tag|1.5#{1} Tagen} verfallen.
 account.remaining_vacation_days.expired.vacation=Dein aktueller Urlaubsanspruch:
 account.remaining_vacation_days.expired.not_expiring=Resturlaub, der nicht am {0} verfallen ist:
-account.vacation_days.this_year=Du hast noch {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage} Urlaub für dieses Jahr offen, bitte denke daran, deinen Urlaub zu planen.
+account.vacation_days.this_year=Du hast noch {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage} Urlaub für dieses Jahr offen. Bitte denke daran, deinen Urlaub rechtzeitig zu planen, da der nicht genommenen Resturlaub im kommenden Jahr am {1} verfällt.
 
 subject.account.updatedRemainingDays=Auswertung Resturlaubstage
 subject.account.remindForCurrentlyLeftVacationDays=Erinnerung an offenen Urlaubsanspruch
diff --git a/src/main/resources/MailMessages_de_AT.properties b/src/main/resources/MailMessages_de_AT.properties
index fd86047b7..034d3d4ee 100644
--- a/src/main/resources/MailMessages_de_AT.properties
+++ b/src/main/resources/MailMessages_de_AT.properties
@@ -34,7 +34,7 @@ account.remaining_vacation_days.last_year.use_until=Du hast noch {0, choice, 0#{
 account.remaining_vacation_days.expired=leider ist dein Resturlaub zum {0} in Höhe von {1, choice, 0#{1} Tage|1#1 Tag|1.5#{1} Tagen} verfallen.
 account.remaining_vacation_days.expired.vacation=Dein aktueller Urlaubsanspruch:
 account.remaining_vacation_days.expired.not_expiring=Resturlaub, der nicht am {0} verfallen ist:
-account.vacation_days.this_year=Du hast noch {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage} Urlaub für dieses Jahr offen, bitte denke daran, deinen Urlaub zu planen.
+account.vacation_days.this_year=Du hast noch {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage} Urlaub für dieses Jahr offen. Bitte denke daran, deinen Urlaub rechtzeitig zu planen, da der nicht genommenen Resturlaub im kommenden Jahr am {1} verfällt.
 
 subject.account.updatedRemainingDays=Auswertung Resturlaubstage
 subject.account.remindForCurrentlyLeftVacationDays=Erinnerung an offenen Urlaubsanspruch
diff --git a/src/main/resources/MailMessages_el.properties b/src/main/resources/MailMessages_el.properties
index 5c5a501bf..8fd627eb7 100644
--- a/src/main/resources/MailMessages_el.properties
+++ b/src/main/resources/MailMessages_el.properties
@@ -34,7 +34,7 @@ account.remaining_vacation_days.last_year.use_until=account.remaining_vacation_d
 account.remaining_vacation_days.expired=Δυστυχώς, η υπόλοιπη άδεια σας από {0} έχει λήξει στο ποσό των {1, choice, 0#{1} ημέρες|1#1 ημέρα|1.5#{1} ημέρες}.
 account.remaining_vacation_days.expired.vacation=Το τρέχον δικαίωμά σας για διακοπές:
 account.remaining_vacation_days.expired.not_expiring=Υπόλοιπη άδεια που δεν έχει λήξει στις {0}:
-account.vacation_days.this_year=Έχετε ακόμα {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες} διακοπές ανοιχτές για φέτος, θυμηθείτε να προγραμματίσετε τις διακοπές σας.
+account.vacation_days.this_year=Σου απομένουν {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες} άδειας για φέτος. Παρακαλώ θυμήσου να προγραμματίσεις την άδειά σου εγκαίρως, καθώς η μη χρησιμοποιημένη υπόλοιπη άδεια θα λήξει στις {1} το επόμενο έτος.
 
 subject.account.updatedRemainingDays=Αξιολόγηση των ενημερωμένων υπόλοιπων ημερών
 subject.account.remindForCurrentlyLeftVacationDays=Υπενθύμιση του δικαιώματος ανοικτής άδειας
diff --git a/src/main/resources/MailMessages_en.properties b/src/main/resources/MailMessages_en.properties
index 989f01c80..fbe9375ef 100644
--- a/src/main/resources/MailMessages_en.properties
+++ b/src/main/resources/MailMessages_en.properties
@@ -34,7 +34,7 @@ account.remaining_vacation_days.last_year.use_until=account.remaining_vacation_d
 account.remaining_vacation_days.expired=Unfortunately, your remaining leave as of {0} has expired in the amount of {1, choice, 0#{1} days|1#1 day|1.5#{1} days}.
 account.remaining_vacation_days.expired.vacation=Your current holiday entitlement:
 account.remaining_vacation_days.expired.not_expiring=Remaining leave that has not expired on {0}:
-account.vacation_days.this_year=You still have {0, choice, 0#{0} days|1#1 day|1.5#{0} days} holiday open for this year, please remember to plan your holiday.
+account.vacation_days.this_year=You still have {0, choice, 0#{0} days|1#1 day|1.5#{0} days} of vacation left for this year. Please remember to plan your vacation in time, as any unused remaining leave will expire on {1} in the coming year.
 
 subject.account.updatedRemainingDays=Evaluation of updated remaining days
 subject.account.remindForCurrentlyLeftVacationDays=Reminder of open vacation entitlement
diff --git a/src/main/resources/mail/account_cron_currently_left_vacation_days.txt b/src/main/resources/mail/account_cron_currently_left_vacation_days.txt
index 471bfbd74..69fb8e1ab 100644
--- a/src/main/resources/mail/account_cron_currently_left_vacation_days.txt
+++ b/src/main/resources/mail/account_cron_currently_left_vacation_days.txt
@@ -1,5 +1,5 @@
 [(#{greeting(${recipientNiceName})})],
 
-[(#{account.vacation_days.this_year(${vacationDaysLeft})})]
+[(#{account.vacation_days.this_year(${vacationDaysLeft},${#temporals.format(expiryDateNextYear, "dd.MM.yyyy")})})]
 
 [(#{account.vacation_entitlement.information})] [(${baseLinkURL})]web/person/[(${personId})]/overview
diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties
index 5747682dc..5992ac38b 100644
--- a/src/main/resources/messages.properties
+++ b/src/main/resources/messages.properties
@@ -165,8 +165,6 @@ application.data.sicknotetype.sicknote=Krankmeldung
 application.data.sicknotetype.sicknotechild=Kind-Krankmeldung
 application.data.specialleave.birth_of_child.info=Geburt des Kindes: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.birth_of_child=Geburt des Kindes
-application.data.specialleave.company_anniversaries.info=Betriebsjubiläum: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
-application.data.specialleave.company_anniversaries=Betriebsjubiläum
 application.data.specialleave.death_of_child.info=Tod des Ehepartners, eingetragenen Lebenspartners oder Kindes: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.death_of_child=Tod des Ehepartners, eingetragenen Lebenspartners oder Kindes
 application.data.specialleave.death_of_parent.info=Tod eines Elternteils: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
@@ -176,7 +174,7 @@ application.data.specialleave.own_wedding.info=Eigene Hochzeit oder Eintragung e
 application.data.specialleave.own_wedding=Eigene Hochzeit oder Eintragung einer Lebenspartnerschaft
 application.data.specialleave.relocation_for_business_reason.info=Umzug aus betrieblichem Grund: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.relocation_for_business_reason=Umzug aus betrieblichem Grund
-application.data.specialleave.serious_illness_familiy_member.info=Schwere Erkrankung der zur häuslichen Gemeinschaft gehörenden Familienmitgliedern: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
+application.data.specialleave.serious_illness_familiy_member.info=Schwere Erkrankung der zur häuslichen Gemeinschaft gehörenden Familienmitgliedern {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.serious_illness_familiy_member=Schwere Erkrankung der zur häuslichen Gemeinschaft gehörenden Familienmitgliedern
 application.data.status=Status
 application.data.teamInformed.false=Nein
diff --git a/src/main/resources/messages_de_AT.properties b/src/main/resources/messages_de_AT.properties
index 8adbb455e..8c2cbb6ba 100644
--- a/src/main/resources/messages_de_AT.properties
+++ b/src/main/resources/messages_de_AT.properties
@@ -165,8 +165,6 @@ application.data.sicknotetype.sicknote=Krankmeldung
 application.data.sicknotetype.sicknotechild=Kind-Krankmeldung
 application.data.specialleave.birth_of_child.info=Geburt des Kindes: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.birth_of_child=Geburt des Kindes
-application.data.specialleave.company_anniversaries.info=Betriebsjubiläum: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
-application.data.specialleave.company_anniversaries=Betriebsjubiläum
 application.data.specialleave.death_of_child.info=Tod des Ehepartners, eingetragenen Lebenspartners oder Kindes: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.death_of_child=Tod des Ehepartners, eingetragenen Lebenspartners oder Kindes
 application.data.specialleave.death_of_parent.info=Tod eines Elternteils: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
@@ -176,7 +174,7 @@ application.data.specialleave.own_wedding.info=Eigene Hochzeit oder Eintragung e
 application.data.specialleave.own_wedding=Eigene Hochzeit oder Eintragung einer Lebenspartnerschaft
 application.data.specialleave.relocation_for_business_reason.info=Umzug aus betrieblichem Grund: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.relocation_for_business_reason=Umzug aus betrieblichem Grund
-application.data.specialleave.serious_illness_familiy_member.info=Schwere Erkrankung der zur häuslichen Gemeinschaft gehörenden Familienmitgliedern: {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
+application.data.specialleave.serious_illness_familiy_member.info=Schwere Erkrankung der zur häuslichen Gemeinschaft gehörenden Familienmitgliedern {0, choice, 0#{0} Tage|1#1 Tag|1.5#{0} Tage}
 application.data.specialleave.serious_illness_familiy_member=Schwere Erkrankung der zur häuslichen Gemeinschaft gehörenden Familienmitgliedern
 application.data.status=Status
 application.data.teamInformed.false=Nein
diff --git a/src/main/resources/messages_el.properties b/src/main/resources/messages_el.properties
index d8995b3ad..361ab315a 100644
--- a/src/main/resources/messages_el.properties
+++ b/src/main/resources/messages_el.properties
@@ -163,20 +163,18 @@ application.data.person=Εργαζόμενος
 application.data.reason=Λόγος
 application.data.sicknotetype.sicknote=Χαρτί ασθενείας
 application.data.sicknotetype.sicknotechild=Χαρτί άρρωστου παιδιού
-application.data.specialleave.birth_of_child.info=Γέννηση παιδιού: {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες}
+application.data.specialleave.birth_of_child.info=Γέννηση παιδιού: {0} ημέρα (ες)
 application.data.specialleave.birth_of_child=Ημερομηνία γενεθλίων παιδιού
-application.data.specialleave.company_anniversaries.info=Εταιρική επέτειος: {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες}
-application.data.specialleave.company_anniversaries=Εταιρική επέτειος
-application.data.specialleave.death_of_child.info=Θάνατος συζύγου, συντρόφου ή τέκνου: {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες}
+application.data.specialleave.death_of_child.info=Θάνατος συζύγου, συντρόφου ή τέκνου: {0} ημέρα (ες)
 application.data.specialleave.death_of_child=Θάνατος συζύγου, συντρόφου ή τέκνου
-application.data.specialleave.death_of_parent.info=Θάνατος γονέα: {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες}
+application.data.specialleave.death_of_parent.info=Θάνατος γονέα: {0} ημέρα (ες)
 application.data.specialleave.death_of_parent=Θάνατος ενός γονέα
 application.data.specialleave.description=Η ειδική άδεια είναι μια βραχυπρόθεσμη άδεια απουσίας για προσωπικούς λόγους. Οι ακόλουθες ημέρες ειδικής άδειας έχουν εγκριθεί:
 application.data.specialleave.own_wedding.info=Γάμος ή συμφωνητικό συμβίωσης: {0} ημέρα (ες)
 application.data.specialleave.own_wedding=Γάμος ή συμφωνητικό συμβίωσης
-application.data.specialleave.relocation_for_business_reason.info=Μετακόμιση για επαγγελματικούς λόγους: {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες}
+application.data.specialleave.relocation_for_business_reason.info=Μετακόμιση για επαγγελματικούς λόγους: {0} ημέρα (ες)
 application.data.specialleave.relocation_for_business_reason=Μετακόμιση για επαγγελματικούς λόγους
-application.data.specialleave.serious_illness_familiy_member.info=Σοβαρή ασθένεια των μελών της οικογένειας που ανήκουν στο νοικοκυριό {0, choice, 0#{0} ημέρες|1#1 ημέρα|1.5#{0} ημέρες}
+application.data.specialleave.serious_illness_familiy_member.info=Σοβαρή ασθένεια των μελών της οικογένειας που ανήκουν στο νοικοκυριό {0} ημέρα (ες)
 application.data.specialleave.serious_illness_familiy_member=Σοβαρή ασθένεια των μελών της οικογένειας που ανήκουν στο νοικοκυριό
 application.data.status=Κατάσταση
 application.data.teamInformed.false=Όχι
diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties
index 2acc331a3..1338a3ba5 100644
--- a/src/main/resources/messages_en.properties
+++ b/src/main/resources/messages_en.properties
@@ -163,20 +163,18 @@ application.data.person=Employee
 application.data.reason=Reason
 application.data.sicknotetype.sicknote=Sick note
 application.data.sicknotetype.sicknotechild=Child sick note
-application.data.specialleave.birth_of_child.info=Birth of a child: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
+application.data.specialleave.birth_of_child.info=Birth of a child: {0} day(s)
 application.data.specialleave.birth_of_child=Birth of a child
-application.data.specialleave.company_anniversaries.info=Company anniversary: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
-application.data.specialleave.company_anniversaries=Company anniversary
-application.data.specialleave.death_of_child.info=Death of the spouse or child: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
+application.data.specialleave.death_of_child.info=Death of the spouse or child: {0} day(s)
 application.data.specialleave.death_of_child=Death of the spouse or child
-application.data.specialleave.death_of_parent.info=Death of a parent: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
+application.data.specialleave.death_of_parent.info=Death of a parent: {0} day(s)
 application.data.specialleave.death_of_parent=Death of a parent
 application.data.specialleave.description=Special leave is a short-term leave of absence for personal reasons. The following special leave days have been approved:
-application.data.specialleave.own_wedding.info=Own wedding: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
+application.data.specialleave.own_wedding.info=Own wedding {0} day(s)
 application.data.specialleave.own_wedding=Own wedding
-application.data.specialleave.relocation_for_business_reason.info=Relocation for business reasons: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
+application.data.specialleave.relocation_for_business_reason.info=Relocation for business reasons: {0} day(s)
 application.data.specialleave.relocation_for_business_reason=Relocation for business reasons
-application.data.specialleave.serious_illness_familiy_member.info=Serious illness of the family members belonging to the domestic community: {0, choice, 0#{0} days|1#1 day|1.5#{0} days}
+application.data.specialleave.serious_illness_familiy_member.info=Serious illness of the family members belonging to the domestic community: {0} day(s)
 application.data.specialleave.serious_illness_familiy_member=Serious illness of the family members belonging to the domestic community
 application.data.status=Status
 application.data.teamInformed.false=No


Test patch:
diff --git a/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceIT.java b/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceIT.java
index 97f9d67f8..af4dbf033 100644
--- a/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceIT.java
+++ b/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceIT.java
@@ -25,6 +25,7 @@ import java.time.Year;
 import java.time.ZoneId;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import static com.icegreen.greenmail.util.ServerSetupTest.SMTP_IMAP;
 import static java.math.BigDecimal.TEN;
@@ -51,7 +52,7 @@ class VacationDaysReminderServiceIT extends SingleTenantTestContainersBase {
     private MailService mailService;
 
     @Test
-    void ensureReminderForLeftVacationDays() throws MessagingException, IOException {
+    void ensureReminderForLeftVacationDaysWithNextYearHolidayAccountAvailable() throws MessagingException, IOException {
 
         final Clock clock = Clock.fixed(Instant.parse("2022-10-31T06:00:00Z"), ZoneId.of("UTC"));
         final VacationDaysReminderService sut = new VacationDaysReminderService(personService, accountService, vacationDaysService, mailService, clock);
@@ -67,6 +68,53 @@ class VacationDaysReminderServiceIT extends SingleTenantTestContainersBase {
         when(accountService.getHolidaysAccount(2022, List.of(person))).thenReturn(List.of(account));
         when(vacationDaysService.getTotalLeftVacationDays(account)).thenReturn(TEN);
 
+        final Account accountNextYear = new Account();
+        accountNextYear.setPerson(person);
+        accountNextYear.setExpiryDateLocally(LocalDate.of(2023, 4, 10));
+        accountNextYear.setDoRemainingVacationDaysExpireLocally(true);
+        when(accountService.getHolidaysAccount(2023, person)).thenReturn(Optional.of(accountNextYear));
+
+        sut.remindForCurrentlyLeftVacationDays();
+
+        await()
+            .atMost(Duration.ofSeconds(1))
+            .untilAsserted(() -> assertThat(greenMail.getReceivedMessagesForDomain(person.getEmail())).hasSize(1));
+
+        // was email sent?
+        final MimeMessage[] inbox = greenMail.getReceivedMessagesForDomain(person.getEmail());
+        final Message msg = inbox[0];
+        assertThat(msg.getSubject()).contains("Erinnerung an offenen Urlaubsanspruch");
+        assertThat(new InternetAddress(person.getEmail())).isEqualTo(msg.getAllRecipients()[0]);
+
+        // check content of email
+        final String content = readPlainContent(msg);
+        assertThat(content).isEqualTo("""
+            Hallo Lieschen Müller,
+
+            Du hast noch 10 Tage Urlaub für dieses Jahr offen. Bitte denke daran, deinen Urlaub rechtzeitig zu planen, da der nicht genommenen Resturlaub im kommenden Jahr am 10.04.2023 verfällt.
+
+            Mehr Informationen zu deinem Urlaubsanspruch findest du hier: https://localhost:8080/web/person/42/overview""");
+    }
+
+    @Test
+    void ensureReminderForLeftVacationDaysWithoutHolidayAccountForNextYearAvailableSoTakeTheExpireDayFromThisYearAccountWithNextYear() throws MessagingException, IOException {
+
+        final Clock clock = Clock.fixed(Instant.parse("2022-10-31T06:00:00Z"), ZoneId.of("UTC"));
+        final VacationDaysReminderService sut = new VacationDaysReminderService(personService, accountService, vacationDaysService, mailService, clock);
+
+        final Person person = new Person("user", "Müller", "Lieschen", "lieschen@example.org");
+        person.setId(42L);
+        when(personService.getActivePersons()).thenReturn(List.of(person));
+
+        final Account account = new Account();
+        account.setPerson(person);
+        account.setExpiryDateLocally(LocalDate.of(2022, 4, 1));
+        account.setDoRemainingVacationDaysExpireLocally(true);
+        when(accountService.getHolidaysAccount(2022, List.of(person))).thenReturn(List.of(account));
+        when(vacationDaysService.getTotalLeftVacationDays(account)).thenReturn(TEN);
+
+        when(accountService.getHolidaysAccount(2023, person)).thenReturn(Optional.empty());
+
         sut.remindForCurrentlyLeftVacationDays();
 
         await()
@@ -84,7 +132,7 @@ class VacationDaysReminderServiceIT extends SingleTenantTestContainersBase {
         assertThat(content).isEqualTo("""
             Hallo Lieschen Müller,
 
-            Du hast noch 10 Tage Urlaub für dieses Jahr offen, bitte denke daran, deinen Urlaub zu planen.
+            Du hast noch 10 Tage Urlaub für dieses Jahr offen. Bitte denke daran, deinen Urlaub rechtzeitig zu planen, da der nicht genommenen Resturlaub im kommenden Jahr am 01.04.2023 verfällt.
 
             Mehr Informationen zu deinem Urlaubsanspruch findest du hier: https://localhost:8080/web/person/42/overview""");
     }
diff --git a/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceTest.java b/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceTest.java
index 71e0b2493..1ac3f9525 100644
--- a/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceTest.java
+++ b/src/test/java/org/synyx/urlaubsverwaltung/account/VacationDaysReminderServiceTest.java
@@ -18,6 +18,7 @@ import java.time.Year;
 import java.time.ZoneId;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import static java.math.BigDecimal.ONE;
 import static java.math.BigDecimal.TEN;
@@ -55,6 +56,7 @@ class VacationDaysReminderServiceTest {
         final Account account = new Account();
         account.setExpiryDateLocally(LocalDate.of(2022, 4, 1));
         when(accountService.getHolidaysAccount(2022, List.of(person))).thenReturn(List.of(account));
+        when(vacationDaysService.getTotalLeftVacationDays(account)).thenReturn(ZERO);
 
         sut.remindForCurrentlyLeftVacationDays();
 
@@ -62,7 +64,7 @@ class VacationDaysReminderServiceTest {
     }
 
     @Test
-    void ensureNoReminderIfRemainingVacationDaysToNotExpire() {
+    void ensureNoReminderIfRemainingVacationDaysDoNotExpire() {
 
         final Clock clock = Clock.fixed(Instant.parse("2022-10-31T06:00:00Z"), ZoneId.of("UTC"));
         final VacationDaysReminderService sut = new VacationDaysReminderService(personService, accountService, vacationDaysService, mailService, clock);
@@ -71,9 +73,14 @@ class VacationDaysReminderServiceTest {
         when(personService.getActivePersons()).thenReturn(List.of(person));
 
         final Account account = new Account();
-        account.setDoRemainingVacationDaysExpireGlobally(true);
+        account.setPerson(person);
         when(accountService.getHolidaysAccount(2022, List.of(person))).thenReturn(List.of(account));
-        when(vacationDaysService.getTotalLeftVacationDays(account)).thenReturn(ZERO);
+        when(vacationDaysService.getTotalLeftVacationDays(account)).thenReturn(TEN);
+
+        final Account accountNextYear = new Account();
+        accountNextYear.setPerson(person);
+        accountNextYear.setDoRemainingVacationDaysExpireGlobally(false);
+        when(accountService.getHolidaysAccount(2023, person)).thenReturn(Optional.of(accountNextYear));
 
         sut.remindForCurrentlyLeftVacationDays();
 
@@ -124,7 +131,7 @@ class VacationDaysReminderServiceTest {
             entry("recipientNiceName", "Marlene Muster"),
             entry("personId", 42L),
             entry("vacationDaysLeft", TEN),
-            entry("nextYear", 2023)
+            entry("expiryDateNextYear", LocalDate.of(2023, 4, 1))
         );
     }
 
diff --git a/src/test/java/org/synyx/urlaubsverwaltung/application/application/ApplicationTest.java b/src/test/java/org/synyx/urlaubsverwaltung/application/application/ApplicationTest.java
index 1e5b3ab6b..20c619a50 100644
--- a/src/test/java/org/synyx/urlaubsverwaltung/application/application/ApplicationTest.java
+++ b/src/test/java/org/synyx/urlaubsverwaltung/application/application/ApplicationTest.java
@@ -219,7 +219,7 @@ class ApplicationTest {
         application.setTeamInformed(true);
 
         final String toString = application.toString();
-        assertThat(toString).isEqualTo("Application{id=1, person=Person{id='10'}, applier=Person{id='10'}, boss=Person{id='10'}, " +
+        assertThat(toString).isEqualTo("Application{person=Person{id='10'}, applier=Person{id='10'}, boss=Person{id='10'}, " +
             "canceller=Person{id='10'}, twoStageApproval=true, startDate=-999999999-01-01, startTime=12:15, endDate=+999999999-12-31, " +
             "endTime=11:15, vacationType=ProvidedVacationType{messageKey='null', id=1, active=false, category=HOLIDAY, " +
             "requiresApprovalToApply=false, requiresApprovalToCancel=false, color=YELLOW, visibleToEveryone=false}, dayLength=FULL, " +
diff --git a/src/test/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepositoryIT.java b/src/test/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepositoryIT.java
deleted file mode 100644
index 26d1373cf..000000000
--- a/src/test/java/org/synyx/urlaubsverwaltung/application/specialleave/SpecialLeaveSettingsRepositoryIT.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.synyx.urlaubsverwaltung.application.specialleave;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.transaction.annotation.Transactional;
-import org.synyx.urlaubsverwaltung.SingleTenantTestContainersBase;
-
-import java.util.Optional;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@SpringBootTest
-@Transactional
-class SpecialLeaveSettingsRepositoryIT extends SingleTenantTestContainersBase {
-
-    @Autowired
-    private SpecialLeaveSettingsRepository sut;
-
-    @Test
-    void ensureFindAllByMessageKey() {
-
-        final SpecialLeaveSettingsEntity specialLeaveSettingsEntity = new SpecialLeaveSettingsEntity();
-        specialLeaveSettingsEntity.setDays(1);
-        specialLeaveSettingsEntity.setActive(true);
-        specialLeaveSettingsEntity.setMessageKey("some-message-key");
-
-        sut.save(specialLeaveSettingsEntity);
-
-        final Optional<SpecialLeaveSettingsEntity> savedSpecialLeave = sut.findAllByMessageKey("some-message-key");
-        assertThat(savedSpecialLeave.get().getMessageKey()).isEqualTo("some-message-key");
-    }
-}