diff --git a/build/utils.js b/build/utils.js
index c094c3c87fa3f52c3edd346706fc60d721ce20a0..02fa2f724fc40a3fc43781c1a28e93e8be60852f 100644
--- a/build/utils.js
+++ b/build/utils.js
@@ -34,26 +34,18 @@ exports.cssLoaders = function (options) {
       use: generateLoaders(['css-loader', 'postcss-loader', 'less-loader']),
     },
     {
-      test: /\.sass$/,
+      test: /\.scss$/,
       use: generateLoaders([
         'css-loader',
         'postcss-loader',
         {
           loader: 'sass-loader',
           options: {
-            indentedSyntax: true
+            api: 'modern'
           }
         }
       ])
-    },
-    {
-      test: /\.scss$/,
-      use: generateLoaders(['css-loader', 'postcss-loader', 'sass-loader'])
-    },
-    {
-      test: /\.styl(us)?$/,
-      use: generateLoaders(['css-loader', 'postcss-loader', 'stylus-loader']),
-    },
+    }
   ]
 }
 
diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js
index 7e69352a6a33fbd8b8f7c354e39d23a4dd0ab4a0..72b4ac0a6b58194b2ca389a45a0f6c098cd6dd14 100644
--- a/build/webpack.base.conf.js
+++ b/build/webpack.base.conf.js
@@ -108,8 +108,9 @@ module.exports = {
       filename: 'sw-pleroma.js'
     }),
     new ESLintPlugin({
-      extensions: ['js', 'vue'],
-      formatter: require('eslint-formatter-friendly')
+      formatter: require('eslint-formatter-friendly'),
+      overrideConfigFile: path.resolve(__dirname, '..', 'eslint.config.mjs'),
+      configType: 'flat'
     }),
     new StylelintPlugin({}),
     new VueLoaderPlugin(),
diff --git a/package.json b/package.json
index 006683da951a6301df347420d5dfe32f831da1fe..4a3ad2a59052032f6a43f29363eb097f9309bce1 100644
--- a/package.json
+++ b/package.json
@@ -82,7 +82,7 @@
     "eslint-plugin-n": "15.7.0",
     "eslint-plugin-promise": "6.6.0",
     "eslint-plugin-vue": "9.32.0",
-    "eslint-webpack-plugin": "3.2.0",
+    "eslint-webpack-plugin": "4.2.0",
     "eventsource-polyfill": "0.9.6",
     "express": "4.21.2",
     "function-bind": "1.1.2",
diff --git a/yarn.lock b/yarn.lock
index 0be868afc064e76aa72d8089af8709f1e086b71d..fc5439d8a43e1f01dc8dc7438c966b9a95eb56a2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1370,7 +1370,7 @@
     "@types/estree" "*"
     "@types/json-schema" "*"
 
-"@types/eslint@^7.29.0 || ^8.4.1":
+"@types/eslint@^8.56.10":
   version "8.56.12"
   resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a"
   integrity sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==
@@ -3706,16 +3706,16 @@ eslint-visitor-keys@^4.2.0:
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
   integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
 
-eslint-webpack-plugin@3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c"
-  integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==
+eslint-webpack-plugin@4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz#41f54b25379908eb9eca8645bc997c90cfdbd34e"
+  integrity sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==
   dependencies:
-    "@types/eslint" "^7.29.0 || ^8.4.1"
-    jest-worker "^28.0.2"
+    "@types/eslint" "^8.56.10"
+    jest-worker "^29.7.0"
     micromatch "^4.0.5"
     normalize-path "^3.0.0"
-    schema-utils "^4.0.0"
+    schema-utils "^4.2.0"
 
 eslint@9.19.0:
   version "9.19.0"
@@ -5107,7 +5107,7 @@ jest-worker@^27.4.5:
     merge-stream "^2.0.0"
     supports-color "^8.0.0"
 
-jest-worker@^28.0.2, jest-worker@^28.1.0:
+jest-worker@^28.1.0:
   version "28.1.3"
   resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98"
   integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==