diff --git a/package-lock.json b/package-lock.json
index 2bef613fb334e7f717a705d0ce8f0818659dd941..207776b2f9f10c6bd3f12596dda88f919d0a4eb4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,9 +12,9 @@
         "@aws-sdk/client-s3": "<3.530.0",
         "@aws-sdk/lib-storage": "<3.530.0",
         "@aws-sdk/s3-request-presigner": "<3.530.0",
-        "@fortawesome/fontawesome-free": "~6.5.0",
+        "@fortawesome/fontawesome-free": "~6.6.0",
         "@popperjs/core": "~2.11.8",
-        "ajv": "~8.16.0",
+        "ajv": "~8.17.0",
         "bootstrap": "~5.3.0",
         "chart.js": "~4.4.0",
         "chartjs-plugin-zoom": "~2.0.1",
@@ -929,9 +929,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
-      "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+      "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -1470,10 +1470,9 @@
       }
     },
     "node_modules/@fortawesome/fontawesome-free": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz",
-      "integrity": "sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==",
-      "hasInstallScript": true,
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz",
+      "integrity": "sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==",
       "engines": {
         "node": ">=6"
       }
@@ -2495,9 +2494,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "20.14.10",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
-      "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+      "version": "20.14.11",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz",
+      "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==",
       "dev": true,
       "dependencies": {
         "undici-types": "~5.26.4"
@@ -2528,16 +2527,16 @@
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz",
-      "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz",
+      "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==",
       "dev": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "7.16.0",
-        "@typescript-eslint/type-utils": "7.16.0",
-        "@typescript-eslint/utils": "7.16.0",
-        "@typescript-eslint/visitor-keys": "7.16.0",
+        "@typescript-eslint/scope-manager": "7.16.1",
+        "@typescript-eslint/type-utils": "7.16.1",
+        "@typescript-eslint/utils": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -2561,15 +2560,15 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz",
-      "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz",
+      "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "7.16.0",
-        "@typescript-eslint/types": "7.16.0",
-        "@typescript-eslint/typescript-estree": "7.16.0",
-        "@typescript-eslint/visitor-keys": "7.16.0",
+        "@typescript-eslint/scope-manager": "7.16.1",
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/typescript-estree": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -2589,13 +2588,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz",
-      "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz",
+      "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.16.0",
-        "@typescript-eslint/visitor-keys": "7.16.0"
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1"
       },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -2606,13 +2605,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz",
-      "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz",
+      "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.16.0",
-        "@typescript-eslint/utils": "7.16.0",
+        "@typescript-eslint/typescript-estree": "7.16.1",
+        "@typescript-eslint/utils": "7.16.1",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
@@ -2633,9 +2632,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz",
-      "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz",
+      "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==",
       "dev": true,
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -2646,13 +2645,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz",
-      "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz",
+      "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.16.0",
-        "@typescript-eslint/visitor-keys": "7.16.0",
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -2674,15 +2673,15 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz",
-      "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz",
+      "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.16.0",
-        "@typescript-eslint/types": "7.16.0",
-        "@typescript-eslint/typescript-estree": "7.16.0"
+        "@typescript-eslint/scope-manager": "7.16.1",
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/typescript-estree": "7.16.1"
       },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -2696,12 +2695,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz",
-      "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz",
+      "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.16.0",
+        "@typescript-eslint/types": "7.16.1",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
@@ -2732,38 +2731,38 @@
       }
     },
     "node_modules/@volar/language-core": {
-      "version": "2.4.0-alpha.15",
-      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.15.tgz",
-      "integrity": "sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==",
+      "version": "2.4.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.16.tgz",
+      "integrity": "sha512-oOTnIZlx0P/idFwVw+W0NbzKDtZAQMzXSdIFfTePCKcXlb4Ys12GaGkx8NF9dsvPYV3nbv3ZsSxnkZWBmNKd7A==",
       "dev": true,
       "dependencies": {
-        "@volar/source-map": "2.4.0-alpha.15"
+        "@volar/source-map": "2.4.0-alpha.16"
       }
     },
     "node_modules/@volar/source-map": {
-      "version": "2.4.0-alpha.15",
-      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.15.tgz",
-      "integrity": "sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==",
+      "version": "2.4.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.16.tgz",
+      "integrity": "sha512-sL9vNG7iR2hiKZor7UkD5Sufu3QCia4cbp2gX/nGRNSdaPbhOpdAoavwlBm0PrVkpiA19NZuavZoobD8krviFg==",
       "dev": true
     },
     "node_modules/@volar/typescript": {
-      "version": "2.4.0-alpha.15",
-      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0-alpha.15.tgz",
-      "integrity": "sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==",
+      "version": "2.4.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0-alpha.16.tgz",
+      "integrity": "sha512-WCx7z5O81McCQp2cC0c8081y+MgTiAR2WAiJjVL4tr4Qh4GgqK0lgn3CqAjcKizaK1R5y3wfrUqgIYr+QeFYcw==",
       "dev": true,
       "dependencies": {
-        "@volar/language-core": "2.4.0-alpha.15",
+        "@volar/language-core": "2.4.0-alpha.16",
         "path-browserify": "^1.0.1",
         "vscode-uri": "^3.0.8"
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz",
-      "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.32.tgz",
+      "integrity": "sha512-8tCVWkkLe/QCWIsrIvExUGnhYCAOroUs5dzhSoKL5w4MJS8uIYiou+pOPSVIOALOQ80B0jBs+Ri+kd5+MBnCDw==",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.31",
+        "@vue/shared": "3.4.32",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -2775,27 +2774,27 @@
       "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz",
-      "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.32.tgz",
+      "integrity": "sha512-PbSgt9KuYo4fyb90dynuPc0XFTfFPs3sCTbPLOLlo+PrUESW1gn/NjSsUvhR+mI2AmmEzexwYMxbHDldxSOr2A==",
       "dependencies": {
-        "@vue/compiler-core": "3.4.31",
-        "@vue/shared": "3.4.31"
+        "@vue/compiler-core": "3.4.32",
+        "@vue/shared": "3.4.32"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz",
-      "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.32.tgz",
+      "integrity": "sha512-STy9im/WHfaguJnfKjjVpMHukxHUrOKjm2vVCxiojQJyo3Sb6Os8SMXBr/MI+ekpstEGkDONfqAQoSbZhspLYw==",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.31",
-        "@vue/compiler-dom": "3.4.31",
-        "@vue/compiler-ssr": "3.4.31",
-        "@vue/shared": "3.4.31",
+        "@vue/compiler-core": "3.4.32",
+        "@vue/compiler-dom": "3.4.32",
+        "@vue/compiler-ssr": "3.4.32",
+        "@vue/shared": "3.4.32",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
-        "postcss": "^8.4.38",
+        "postcss": "^8.4.39",
         "source-map-js": "^1.2.0"
       }
     },
@@ -2813,12 +2812,12 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz",
-      "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.32.tgz",
+      "integrity": "sha512-nyu/txTecF6DrxLrpLcI34xutrvZPtHPBj9yRoPxstIquxeeyywXpYZrQMsIeDfBhlw1abJb9CbbyZvDw2kjdg==",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.31",
-        "@vue/shared": "3.4.31"
+        "@vue/compiler-dom": "3.4.32",
+        "@vue/shared": "3.4.32"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -2889,49 +2888,49 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.31.tgz",
-      "integrity": "sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.32.tgz",
+      "integrity": "sha512-1P7QvghAzhSIWmiNmh4MNkLVjr2QTNDcFv2sKmytEWhR6t7BZzNicgm5ENER4uU++wbWxgRh/pSEYgdI3MDcvg==",
       "dependencies": {
-        "@vue/shared": "3.4.31"
+        "@vue/shared": "3.4.32"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.31.tgz",
-      "integrity": "sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.32.tgz",
+      "integrity": "sha512-FxT2dTHUs1Hki8Ui/B1Hu339mx4H5kRJooqrNM32tGUHBPStJxwMzLIRbeGO/B1NMplU4Pg9fwOqrJtrOzkdfA==",
       "dependencies": {
-        "@vue/reactivity": "3.4.31",
-        "@vue/shared": "3.4.31"
+        "@vue/reactivity": "3.4.32",
+        "@vue/shared": "3.4.32"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz",
-      "integrity": "sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.32.tgz",
+      "integrity": "sha512-Xz9G+ZViRyPFQtRBCPFkhMzKn454ihCPMKUiacNaUhuTIXvyfkAq8l89IZ/kegFVyw/7KkJGRGqYdEZrf27Xsg==",
       "dependencies": {
-        "@vue/reactivity": "3.4.31",
-        "@vue/runtime-core": "3.4.31",
-        "@vue/shared": "3.4.31",
+        "@vue/reactivity": "3.4.32",
+        "@vue/runtime-core": "3.4.32",
+        "@vue/shared": "3.4.32",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.31.tgz",
-      "integrity": "sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==",
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.32.tgz",
+      "integrity": "sha512-3c4rd0522Ao8hKjzgmUAbcjv2mBnvnw0Ld2f8HOMCuWJZjYie/p8cpIoYJbeP0VV2JYmrJJMwGQDO5RH4iQ30A==",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.31",
-        "@vue/shared": "3.4.31"
+        "@vue/compiler-ssr": "3.4.32",
+        "@vue/shared": "3.4.32"
       },
       "peerDependencies": {
-        "vue": "3.4.31"
+        "vue": "3.4.32"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz",
-      "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA=="
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.32.tgz",
+      "integrity": "sha512-ep4mF1IVnX/pYaNwxwOpJHyBtOMKWoKZMbnUyd+z0udqIxLUh7YCCd/JfDna8aUrmnG9SFORyIq2HzEATRrQsg=="
     },
     "node_modules/@vue/tsconfig": {
       "version": "0.5.1",
@@ -2961,14 +2960,14 @@
       }
     },
     "node_modules/ajv": {
-      "version": "8.16.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
-      "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "dependencies": {
         "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
         "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.4.1"
+        "require-from-string": "^2.0.2"
       },
       "funding": {
         "type": "github",
@@ -3441,9 +3440,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.11",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
-      "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
+      "version": "1.11.12",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz",
+      "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg=="
     },
     "node_modules/de-indent": {
       "version": "1.0.2",
@@ -3810,13 +3809,13 @@
       }
     },
     "node_modules/eslint-plugin-prettier": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
-      "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
+      "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==",
       "dev": true,
       "dependencies": {
         "prettier-linter-helpers": "^1.0.0",
-        "synckit": "^0.8.6"
+        "synckit": "^0.9.1"
       },
       "engines": {
         "node": "^14.18.0 || >=16.0.0"
@@ -4057,6 +4056,11 @@
       "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
       "dev": true
     },
+    "node_modules/fast-uri": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="
+    },
     "node_modules/fast-xml-parser": {
       "version": "4.2.5",
       "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
@@ -4737,9 +4741,9 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
-      "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
+      "version": "2.15.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
       "dev": true,
       "dependencies": {
         "hasown": "^2.0.2"
@@ -5726,9 +5730,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
-      "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
@@ -5748,9 +5752,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
-      "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
       "dev": true,
       "bin": {
         "prettier": "bin/prettier.cjs"
@@ -5784,6 +5788,7 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
       "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "dev": true,
       "engines": {
         "node": ">=6"
       }
@@ -6080,9 +6085,9 @@
       }
     },
     "node_modules/sass": {
-      "version": "1.77.7",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.7.tgz",
-      "integrity": "sha512-9ywH75cO+rLjbrZ6en3Gp8qAMwPGBapFtlsMJoDTkcMU/bSe5a6cjKVUn5Jr4Gzg5GbP3HE8cm+02pLCgcoMow==",
+      "version": "1.77.8",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz",
+      "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==",
       "dev": true,
       "dependencies": {
         "chokidar": ">=3.0.0 <4.0.0",
@@ -6097,9 +6102,9 @@
       }
     },
     "node_modules/semver": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -6427,9 +6432,9 @@
       }
     },
     "node_modules/synckit": {
-      "version": "0.8.8",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
-      "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz",
+      "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==",
       "dev": true,
       "dependencies": {
         "@pkgr/core": "^0.1.0",
@@ -6588,9 +6593,9 @@
       }
     },
     "node_modules/uglify-js": {
-      "version": "3.18.0",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz",
-      "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==",
+      "version": "3.19.0",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz",
+      "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==",
       "dev": true,
       "optional": true,
       "bin": {
@@ -6634,6 +6639,7 @@
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+      "dev": true,
       "dependencies": {
         "punycode": "^2.1.0"
       }
@@ -6666,9 +6672,9 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
-      "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
+      "version": "5.3.4",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz",
+      "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==",
       "dev": true,
       "dependencies": {
         "esbuild": "^0.21.3",
@@ -7133,15 +7139,15 @@
       "dev": true
     },
     "node_modules/vue": {
-      "version": "3.4.31",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz",
-      "integrity": "sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==",
-      "dependencies": {
-        "@vue/compiler-dom": "3.4.31",
-        "@vue/compiler-sfc": "3.4.31",
-        "@vue/runtime-dom": "3.4.31",
-        "@vue/server-renderer": "3.4.31",
-        "@vue/shared": "3.4.31"
+      "version": "3.4.32",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.32.tgz",
+      "integrity": "sha512-9mCGIAi/CAq7GtaLLLp2J92pEic+HArstG+pq6F+H7+/jB9a0Z7576n4Bh4k79/50L1cKMIhZC3MC0iGpl+1IA==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.32",
+        "@vue/compiler-sfc": "3.4.32",
+        "@vue/runtime-dom": "3.4.32",
+        "@vue/server-renderer": "3.4.32",
+        "@vue/shared": "3.4.32"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/package.json b/package.json
index 9d3de222c264933b3fcf479e74fa9abdb3aec26c..b9272e11517960a56f89c3ad71a6af48b51c6520 100644
--- a/package.json
+++ b/package.json
@@ -16,9 +16,9 @@
     "@aws-sdk/client-s3": "<3.530.0",
     "@aws-sdk/lib-storage": "<3.530.0",
     "@aws-sdk/s3-request-presigner": "<3.530.0",
-    "@fortawesome/fontawesome-free": "~6.5.0",
+    "@fortawesome/fontawesome-free": "~6.6.0",
     "@popperjs/core": "~2.11.8",
-    "ajv": "~8.16.0",
+    "ajv": "~8.17.0",
     "bootstrap": "~5.3.0",
     "chart.js": "~4.4.0",
     "chartjs-plugin-zoom": "~2.0.1",
diff --git a/src/assets/images/clowm.svg b/src/assets/images/clowm.svg
index 4b8d5e55f504302fd08f32c1bd004699019e46e6..fb06b2d8745021804abf7fea813fe2370f06d244 100644
--- a/src/assets/images/clowm.svg
+++ b/src/assets/images/clowm.svg
@@ -1,70 +1,62 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-
 <svg
         width="23.757999mm"
         height="23.757999mm"
         viewBox="0 0 23.758 23.757998"
         version="1.1"
-        id="svg5126"
         xmlns="http://www.w3.org/2000/svg">
-
     <g
-            id="layer1"
             transform="translate(-78.650696,-68.730968)">
         <path
-                style="fill:none;fill-opacity:1;stroke:#4f4f4f;stroke-width:0.851766;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
                 d="m 90.554464,80.612424 -8.112762,1.426799"
-                id="path7807-9-7"
-        />
+                fill="none"
+                stroke-width="0.85"
+                stroke="#4f4f4f"/>
         <path
-                style="fill:none;fill-opacity:1;stroke:#4f4f4f;stroke-width:0.851766;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
                 d="m 97.830538,77.453091 -7.276074,3.159333"
-                id="path7807-9"
-        />
+                fill="none"
+                stroke-width="0.85"
+                stroke="#4f4f4f"/>
         <circle
-                style="fill:#0d6efd;fill-opacity:1;stroke:none;stroke-width:0.283922;stop-color:#000000"
-                id="path5738-5"
+                fill="#0d6efd"
                 cx="97.868805"
                 cy="77.424881"
                 r="2.1244874"/>
         <path
-                style="fill:none;fill-opacity:1;stroke:#4f4f4f;stroke-width:0.851766;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
                 d="m 86.98483,73.171742 3.569634,7.440682"
-                id="path7807"
-        />
+                fill="none"
+                stroke="#4f4f4f"
+                stroke-width="0.85"/>
         <path
-                style="fill:none;stroke:#4f4f4f;stroke-width:0.851766;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
                 d="m 82.4106,82.134057 c 1.648883,4.723585 6.971072,7.829186 12.763187,5.358027"
-                id="path9337"
-        />
+                fill="none"
+                stroke-width="0.85"
+                stroke="#4f4f4f"/>
         <circle
-                style="fill:#0d6efd;fill-opacity:1;stroke:none;stroke-width:0.283922;stop-color:#000000"
-                id="path5738"
+                fill="#0d6efd"
                 cx="86.98037"
                 cy="73.195999"
                 r="2.1244874"/>
         <circle
-                style="fill:#dc3545;fill-opacity:1;stroke:none;stroke-width:0.283922;stroke-opacity:1;stop-color:#000000"
-                id="path5738-7"
                 cx="90.529472"
+                fill="#dc3545"
                 cy="80.609749"
                 r="3.2386508"/>
         <circle
-                style="fill:#198754;fill-opacity:1;stroke:none;stroke-width:0.283922;stop-color:#000000"
-                id="path5738-4"
                 cx="82.418419"
                 cy="82.049561"
+                fill="#198754"
                 r="1.752311"/>
         <circle
-                style="fill:#198754;fill-opacity:1;stroke:none;stroke-width:0.283922;stop-color:#000000"
-                id="path5738-4-5"
                 cx="95.175735"
                 cy="87.50563"
+                fill="#198754"
                 r="1.752311"/>
         <circle
-                style="fill:none;fill-opacity:1;stroke:#4f4f4f;stroke-width:0.567844;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
-                id="path10954"
                 cx="90.529472"
+                fill="none"
+                stroke="#4f4f4f"
+                stroke-width="0.57"
                 cy="80.609749"
                 r="11.594855"/>
     </g>
diff --git a/src/client/models/WorkflowExecutionOut.ts b/src/client/models/WorkflowExecutionOut.ts
index 514ea962aa479014f046a4c05032e37e3a865c45..26f3353269c9811c93699c09d64255f53bc6d9eb 100644
--- a/src/client/models/WorkflowExecutionOut.ts
+++ b/src/client/models/WorkflowExecutionOut.ts
@@ -52,5 +52,9 @@ export type WorkflowExecutionOut = {
      * S3 Path where debug information from Nextflow is saved.
      */
     debug_s3_path?: (string | null);
+    /**
+     * The consumed cpu time in ISO 8601 format
+     */
+    cpu_time: string;
 };
 
diff --git a/src/main.ts b/src/main.ts
index 164d4be366b6bb36e1745367e78eb2e6492ae40e..93d3f605ccc9a163a1f854c3ff6a3635865543d9 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -55,7 +55,7 @@ if (environment.MATOMO_HOST && environment.MATOMO_SITE_ID) {
   app.use(VueMatomo, {
     host: environment.MATOMO_HOST,
     siteId: environment.MATOMO_SITE_ID,
-    disableCookies: true,
+    disableCookies: false,
   });
 }
 
diff --git a/src/views/ImprintView.vue b/src/views/ImprintView.vue
index 4ea27c721e29b249c26fa880a6386a9f2517dd36..8a1d633fac9634c0be6307dae4286a383a96455a 100644
--- a/src/views/ImprintView.vue
+++ b/src/views/ImprintView.vue
@@ -1,10 +1,74 @@
 <script setup lang="ts"></script>
 
 <template>
-  <div>
-    <h2>Impressum</h2>
-    <p>TBD</p>
-  </div>
+  <h2>Information according to §5 DDG (Digitale-Dienste-Gesetz)</h2>
+  <h3>Responsible for technical operations:</h3>
+  <p>
+    Computational Metagenomics Group & Genome Informatics Group<br />
+    Bielefeld Institute for Bioinformatics infrastructure (BIBI)<br />
+    Technische Fakultät<br />
+    Universität Bielefeld<br />
+    Universitätsstraße 25<br />
+    33615 Bielefeld
+  </p>
+  <p>
+    Represented by<br />
+    Project Managers: Dr. Michael Beckstette and M.Sc. Daniel Göbel<br />
+    Head of Institute: Prof. Dr. Jens Stoye<br />
+  </p>
+  <h3>Responsible for the content:</h3>
+  <p>
+    Prof. Dr. Alexander Sczyrba<br />
+    Forschungszentrum Jülich<br />
+    c/o Centrum für Biotechnologie<br />
+    Universität Bielefeld<br />
+    33594 Bielefeld
+  </p>
+  <p>
+    Institut für Bio- und Geowissenschaften (IBG)<br />
+    IBG-5 - Computergestützte Metagenomik<br />
+    Gebäude Außenstelle-Univ-Bielefeld / Raum M3.111
+  </p>
+  <h2>Exclusion of liability (disclaimer)</h2>
+  <h3>Liability for content</h3>
+  <p>
+    As a service provider, we are responsible for our own content on these pages
+    in accordance with §7 para.1 TMG (Deutsches Telemediengesetz) and general
+    laws. According to §8 to 10 TMG, however, we as a service provider are not
+    obliged to monitor transmitted or stored third-party information or to
+    investigate circumstances that indicate illegal activity. Obligations to
+    remove or block the use of information in accordance with general
+    legislation remain unaffected by this. However, liability in this respect is
+    only possible from the time of knowledge of a specific infringement. As soon
+    as we become aware of such infringements, we will remove this content
+    immediately.
+  </p>
+  <h3>Liability for links</h3>
+  <p>
+    Our website contains links to external third-party websites over whose
+    content we have no influence. Therefore, we cannot accept any liability for
+    this third-party content. The respective provider or operator of the pages
+    is always responsible for the content of the linked pages. The linked pages
+    were checked for possible legal violations at the time of linking. Illegal
+    content was not recognizable at the time of linking. However, permanent
+    monitoring of the content of the linked pages is not reasonable without
+    concrete evidence of an infringement. If we become aware of any legal
+    infringements, we will remove such links immediately.
+  </p>
+  <h2>Copyright</h2>
+  <p>
+    The content and works created by the site operators on these pages are
+    subject to German copyright law. Duplication, processing, distribution and
+    any form of commercialization of such material beyond the scope of the
+    copyright law shall require the prior written consent of its respective
+    author or creator. Downloads and copies of this site are only permitted for
+    private, non-commercial use. Insofar as the content on this site was not
+    created by the operator, the copyrights of third parties are respected. In
+    particular, third-party content is identified as such. Should you
+    nevertheless become aware of a copyright infringement, please inform us
+    accordingly. If we become aware of any infringements, we will remove such
+    content immediately.
+  </p>
 </template>
 
 <style scoped></style>
diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue
index ffa889c489c09ad561b152639e2f2ee80c571eaa..ab2ed19cefad6185a579fa78f566632a868e49b5 100644
--- a/src/views/LoginView.vue
+++ b/src/views/LoginView.vue
@@ -97,6 +97,13 @@ onMounted(() => {
               style="max-height: 70px"
             />
           </a>
+          <div class="mt-2">
+            By using this service you agree to our
+            <router-link :to="{ name: 'terms' }">terms of usage</router-link>
+            and
+            <router-link :to="{ name: 'privacy' }">privacy policy </router-link>
+            .
+          </div>
         </div>
       </div>
     </div>
diff --git a/src/views/PrivacyPolicyView.vue b/src/views/PrivacyPolicyView.vue
index d6d98a1c69edaf5059c27eba691bdcb7846bac31..8de50113bc15bef9a49136b95d25ed39f42c5e9f 100644
--- a/src/views/PrivacyPolicyView.vue
+++ b/src/views/PrivacyPolicyView.vue
@@ -1,9 +1,283 @@
-<script setup lang="ts"></script>
+<script setup lang="ts">
+import { onMounted } from "vue";
+import { environment } from "@/environment";
+
+onMounted(() => {
+  if (environment.MATOMO_HOST) {
+    const matomoScript = document.createElement("script");
+    matomoScript.setAttribute(
+      "src",
+      `${environment.MATOMO_HOST}/index.php?module=CoreAdminHome&action=optOutJS&divId=matomo-opt-out&language=auto&showIntro=1`,
+    );
+    document.head.appendChild(matomoScript);
+  }
+});
+</script>
 
 <template>
   <div>
-    <h2>Privacy Policy</h2>
-    <p>TBD</p>
+    <h2>Privacy Notice</h2>
+    <h3>1. General information on data processing and data protection</h3>
+    <p>
+      The operators of this website take the protection of your personal data
+      very seriously. This privacy policy informs you as a visitor to our
+      website about the processing of personal data. We collect and use personal
+      data of our users only insofar as this is necessary to provide a
+      functional website and our content and services and a legal basis allows
+      us to do so or you have consented to the collection and always treat it
+      confidentially. With this privacy policy, we comply with the information
+      obligation pursuant to Article 13 of the EU General Data Protection
+      Regulation (EU GDPR).
+    </p>
+    <h3>2. Contact details of the responsible body</h3>
+    <p>
+      The technical provision (hosting) of the website is carried out in
+      cooperation with Bielefeld University at Bielefeld University, and can be
+      contacted as follows:
+    </p>
+    <p>
+      Universität Bielefeld<br />
+      Universitätsstraße 25<br />
+      D-33615 Bielefeld<br />
+      Tel.: <a href="tel:+4952110600">+49521/106-00</a><br />
+      <a href="mailto:post@uni-bielefeld.de">post@uni-bielefeld.de</a>
+    </p>
+    <h3>3. Data protection officer</h3>
+    <p>
+      You can contact the data protection officer of Bielefeld University by
+      post at the address of the controller given above or as follows:
+    </p>
+    <p>
+      E-Mail:
+      <a href="mailto:datenschutzbeauftragte@uni-bielefeld.de"
+        >datenschutzbeauftragte@uni-bielefeld.de</a
+      ><br />
+      Tel.: <a href="tel:+495211065225">+49521 / 106 – 5225</a>
+    </p>
+    <h3>4. Purpose</h3>
+    <p>
+      The primary purpose of the Cloud based Workflow Manager (CloWM) is to
+      offer data analysis workflows as services to the scientific community. If
+      personal data is collected, this only includes the data required for
+      technical operation and log files to ensure the technical security of the
+      systems in accordance with Art. 6 para. 1 lit. f GDPR. The temporary
+      storage of the IP address by the system is necessary to enable the website
+      to be delivered to the user's computer. The data is stored in log files to
+      ensure the functionality of the website. In addition, we use the data to
+      optimize the website and to ensure the security of our information
+      technology systems. The data is not analyzed for marketing purposes in
+      this context.
+    </p>
+    <h3>5. Scope of data processing</h3>
+    <h4>5.1 Storage of browser data</h4>
+    <div class="py-1">
+      As the provider of this website, we automatically collect and store
+      information in so-called server log files that your browser automatically
+      transmits to us each time you visit our website. The following data is
+      collected:
+      <ol>
+        <li>Information about the browser type and version used</li>
+        <li>The user's operating system</li>
+        <li>The user's internet service provider</li>
+        <li>The IP address of the user</li>
+        <li>Date and time of access</li>
+        <li>Websites from which the user's system accesses our website</li>
+      </ol>
+      The browser data is stored for a period of 14 days (log-rotation).
+    </div>
+    <h4>5.2 Use of cookies</h4>
+    <p>
+      Our website uses cookies. These are small files that your browser
+      automatically creates and that are stored on your end device (laptop,
+      tablet, smartphone, etc.) when you visit our website. Cookies do not cause
+      any damage to your end device and do not contain any viruses, Trojans or
+      other malware. We use cookies to make our website more user-friendly. The
+      data collected by these cookies is not used to create user profiles.
+    </p>
+    <p>
+      We use so-called session cookies to recognize that you have already
+      visited individual pages of our website. These cookies contain a
+      characteristic string of characters that enables the browser and the
+      associated session settings to be uniquely identified when the website is
+      called up again. They are automatically deleted after you leave our site
+      or when you end your session.
+    </p>
+    <p>
+      In addition, we use cross-site request forgery (CSRF) protection cookies
+      to increase the security of our website, which are stored on your end
+      device for a specified period of time.
+    </p>
+    <p>
+      Cookies are stored on the user's computer and transmitted by it to our
+      website. As a user, you therefore have full control over the use of
+      cookies. You can deactivate or restrict the transmission of cookies by
+      changing the settings in your Internet browser. Cookies that have already
+      been saved can be deleted at any time. This can also be done
+      automatically. If cookies are deactivated for our website, it may no
+      longer be possible to use all functions of the website to their full
+      extent.
+    </p>
+    <h4>5.3 Web analysis using Matomo</h4>
+    <p>
+      We use cookies to statistically record the use of our website and to
+      evaluate it for the purpose of optimizing our offer for you. This
+      subsection explains how we use the open source software Matomo for web
+      analysis in order to collect anonymized usage statistics.
+    </p>
+    <h5>5.3.1 What data is collected</h5>
+    <div class="py-1">
+      When using Matomo, we collect the following anonymized data:
+      <ul>
+        <li>Your IP address (in anonymized form)</li>
+        <li>The pages accessed and their sequence</li>
+        <li>The time spent on the individual pages</li>
+        <li>The browser type and version used</li>
+        <li>The operating system</li>
+        <li>The country of origin</li>
+        <li>Date and time of access</li>
+        <li>Referring pages from which you accessed our website (referrer)</li>
+      </ul>
+    </div>
+    <h5>5.3.2 Anonymization of the data</h5>
+    <p>
+      Your IP address is immediately anonymized by Matomo so that no conclusions
+      can be drawn about your person. This is done by shortening the IP address
+      by the last two bytes (example: 192.168.100.123 becomes 192.168.0.0). As a
+      result, all data collected remains completely anonymous and cannot be
+      traced back to you.
+    </p>
+    <h5>5.3.3 Intended use of the data</h5>
+    <p>
+      We use Matomo exclusively to collect and analyze anonymized information
+      about the use of our website in order to measure its reach. Our focus here
+      is on statistically recording and continuously improving the use of our
+      website. Furthermore, lists and summaries of usage statistics derived from
+      this are reported to the Federal Ministry of Education and Research
+      (BMBF), as the web content offered is a service provided as part of a
+      BMBF-funded third-party project. The data is collected on the basis of
+      Art. 6 para. 1 lit. f GDPR. In doing so, we are pursuing our legitimate
+      interest in optimizing our website and reporting to funding bodies.
+    </p>
+    <h5>5.3.4 Storage and deletion of data</h5>
+    <p>
+      The Matomo instance we use is provided by the Center for Biotechnology -
+      CeBiTec at Bielefeld University as a service within the framework of the
+      de.NBI project. The collected and anonymized data are stored on CeBiTec's
+      servers and are not passed on to third parties or merged with other data
+      sources. They are only stored for as long as is necessary to achieve the
+      above-mentioned purposes. The data will be deleted as soon as it is no
+      longer required for the aforementioned purposes.
+    </p>
+    <h5>5.3.5 Matomo Cookies</h5>
+    <p>
+      Cookies are used to enable anonymous recognition of a user by the web
+      analysis software Matomo. The "_pk_id" cookie contains an anonymous unique
+      user ID with a validity of 13 months, the "_pk_ref" cookie contains the
+      referrer originally used to visit the website with a lifespan of 6 months
+      and the "_pk_ses" cookie, which is a short-lived cookie with a lifespan of
+      30 minutes that temporarily stores the data of the website visit. Expiring
+      cookies are then deleted by your browser. The validity is renewed when you
+      visit the website again. Cross-site or cross-domain tracking does not take
+      place; the cookies are used exclusively in the context of this website and
+      to fulfill the above-mentioned purposes.
+    </p>
+    <h5>5.3.6 Your rights and option to object</h5>
+    <p>
+      As we do not collect any personal data using Matomo, you cannot assert any
+      rights against us with regard to information, correction, blocking or
+      deletion of this data. However, you have the option of objecting to the
+      collection by Matomo at any time. To do this, you can set an opt-out
+      cookie that prevents the future collection of your data on this website.
+      Please note that the opt-out cookie will be deleted if you delete all
+      cookies in your browser. In this case, you must set the opt-out cookie
+      again. Furthermore, data will not be collected by Matomo if you use the
+      browser in so-called anonymous mode.
+    </p>
+    <div id="matomo-opt-out"></div>
+    <h5>5.3.7 Contact for the technical provision of the Matomo service</h5>
+    <p>
+      Bioinformatics Resource Facility<br />
+      Centrum für Biotechnologie (CeBiTec)<br />
+      Universität Bielefeld<br />
+      Universitätsstraße 25<br />
+      33615 Bielefeld
+    </p>
+    <p>
+      Represented by:<br />
+      Group Leader: Dr. Stefan Albaum<br />
+      Scientific director: Prof. Dr. Olaf Kruse<br />
+      Management: Dr. Lutz Wobbe
+    </p>
+    <h3>6. Storage and deletion of data</h3>
+    <p>
+      Collected data is stored on the operator's servers and is not merged with
+      other data sources or passed on to third parties. They are only stored for
+      as long as is necessary to achieve the above-mentioned purposes. The data
+      will be deleted as soon as it is no longer required for the stated
+      purposes.
+    </p>
+    <p>
+      In individual cases, data may be passed on on the basis of legal
+      permission, for example, transmission to law enforcement authorities for
+      the investigation of criminal offenses under the provisions of the Code of
+      Criminal Procedure (StPO) or for the purpose of asserting claims for
+      damages in the event of copyright infringements. If technical service
+      providers are given access to personal data, this is done on the basis of
+      a contract in accordance with Art. 28 GDPR.
+    </p>
+    <h3>7. Your privacy rights</h3>
+    <div class="py-1">
+      As a person, you can assert the rights granted to you by the EU GDPR at
+      any time:
+      <ul>
+        <li>
+          the right to information as to whether and which of your data is being
+          processed (Art. 15 EU GDPR),
+        </li>
+        <li>
+          the right to request the rectification or completion of data
+          concerning you (Art. 16 EU GDPR),
+        </li>
+        <li>
+          the right to erasure of the data concerning you in accordance with
+          Art. 17 EU GDPR,
+        </li>
+        <li>
+          the right to request the restriction of the processing of data in
+          accordance with Art. 18 EU GDPR,
+        </li>
+        <li>
+          the right to withdraw your consent at any time. This does not affect
+          the lawfulness of the processing carried out on the basis of the
+          consent until revocation (Art. 7 para. 3 EU GDPR),
+        </li>
+        <li>
+          the right to object to the future processing of data concerning you in
+          accordance with Art. 21 EU GDPR and
+        </li>
+        <li>
+          the right to lodge a complaint with the data protection supervisory
+          authority in accordance with Art. 77 EU GDPR.
+        </li>
+      </ul>
+    </div>
+    <h3>8. Validity of this privacy policy</h3>
+    <p>This privacy policy is currently valid and is dated 18.07.2024.</p>
+    <p>
+      Unless specified in more detail or formulated differently in this privacy
+      policy, the provisions of Bielefeld University's
+      <a
+        target="_blank"
+        href="https://www.uni-bielefeld.de/datenschutzhinweise/"
+        >privacy policy</a
+      >
+      apply.
+    </p>
+    <p>
+      Due to the further development of our website or due to changed legal or
+      official requirements, we reserve the right or it may become necessary to
+      change this privacy policy.
+    </p>
   </div>
 </template>
 
diff --git a/src/views/TermsOfUsageView.vue b/src/views/TermsOfUsageView.vue
index 5d6374d868b34e2fb81e1ce913d3849646e8dc66..004e7e3f85f72e8cc6088209f0ce2350e1e28e4d 100644
--- a/src/views/TermsOfUsageView.vue
+++ b/src/views/TermsOfUsageView.vue
@@ -1,10 +1,149 @@
 <script setup lang="ts"></script>
 
 <template>
-  <div>
-    <h2>Terms of Usage</h2>
-    <p>TBD</p>
-  </div>
+  <h2>Terms of Use</h2>
+  <p class="fs-5">Last updated: July 18, 2024</p>
+  <p>
+    These Terms of Use ("Terms") apply to your use of the Cloud-based Workflow
+    Manager (CloWM) instance on clowm.bi.denbi.de ("CloWM"). Please read them
+    carefully and let us know if you have any questions.
+  </p>
+  <p>
+    By using CloWM, you agree to be bound by these Terms. If you are using CloWM
+    on behalf of an organization, you agree to these Terms on behalf of that
+    organization.
+  </p>
+  <h3>Content</h3>
+  <p>
+    Content such as uploaded workflows or data sets in CloWM is protected by
+    intellectual property laws. You give us permission to access that material
+    solely to do what is necessary to provide our services, including storing,
+    displaying, reproducing, and distributing those materials.
+  </p>
+  <p>
+    You are solely responsible for the data sets you use in CloWM and assume all
+    risks associated with them, including intellectual property or other legal
+    claims. By using data sets in CloWM, you acknowledge that you have the
+    necessary rights to that material, and that doing so does not conflict with
+    any licenses you have granted to others.
+  </p>
+  <p>
+    CloWM allows you to share your data sets and analysis results with others.
+    Please be careful about what you choose to share. CloWM does not actively
+    monitor the data sets you use. However, we have the right to remove data
+    sets from CloWM for any reason (such as copyright infringement, we learn the
+    material is patently unlawful, etc.) We assume no liability for any content
+    that you or anyone else uses with CloWM.
+  </p>
+
+  <h4>The CloWM Software</h4>
+  <p>
+    The CloWM software is protected by copyright and other laws. CloWM gives you
+    a personal, worldwide, royalty-free, non-assignable and non-exclusive
+    license to use the software we provide you to use our service. This license
+    is for the sole purpose of enabling you to use CloWM as permitted by these
+    Terms. If you violate these Terms, we may terminate this license and disable
+    or restrict your access to our services.
+  </p>
+
+  <h3>Prohibited Activities</h3>
+  <p>
+    We require you to respect these limitations, and we may terminate your
+    account if you do not follow them.
+  </p>
+  <ul>
+    <li>
+      Do not use CloWM in a manner that violates any laws, regulations,
+      ordinances, or directives.
+    </li>
+    <li>Do not use CloWM contrary to our policies.</li>
+    <li>
+      Do not use CloWM to do anything threatening, abusive, harassing,
+      defamatory, tortious, or invasive of another person's privacy.
+    </li>
+    <li>
+      Do not interfere with the proper functioning of any software, hardware, or
+      equipment of CloWM.
+    </li>
+    <li>
+      Do not engage in any conduct that inhibits anyone else's use of our
+      services, or which we determine may harm CloWM or our users.
+    </li>
+    <li>
+      Do not monitor or copy any material on CloWM, either manually or through
+      automated means (i.e. scraping), without prior written consent.
+    </li>
+  </ul>
+  <h3>Our Rights</h3>
+  <p>
+    We are always working to improve CloWM and make our services better, so we
+    do reserve some rights. In our sole discretion, we may, at any time -- with
+    or without notice -- change, disable or restrict access to our services, and
+    modify, suspend, or terminate a user account. As a technical necessity, we
+    also have full access to all files, metadata and other information that is
+    processed through CloWM. CloWM is not liable for any damages as a result of
+    these actions.
+  </p>
+
+  <h3>Other Sites and Services</h3>
+  <p>
+    CloWM may contain links to websites, services, and advertisements that we
+    neither own nor control. We do not endorse or assume responsibility for any
+    third-party sites, information, materials, products, or services.
+  </p>
+
+  <h3>Privacy</h3>
+  <p>
+    Our
+    <router-link :to="{ name: 'privacy' }">Privacy Policy</router-link>
+    governs our collection and use of your personal information. Please review
+    those provisions, too.
+  </p>
+
+  <h3>Cancellation</h3>
+  <p>
+    You can delete your user account any time you like by writing an email with
+    your inquiry to
+    <a
+      href="mailto:support@clowm.bi.denbi.de?subject=Termination of user account"
+      >support@clowm.bi.denbi.de</a
+    >. Please be aware that your data sets workflows will not be deleted in this
+    case. Workflows will be shown to be associated to a "deleted user" and data
+    sets will still be accessible by the users who had access permissions
+    before. If you wish to remove any of this content, delete it before you
+    delete your user account.
+  </p>
+
+  <h3>Disclaimers</h3>
+  <p>CloWM is provided "as is" without any warranties, expressed or implied.</p>
+
+  <h3>Limitation of Liability</h3>
+  <p>
+    To the fullest extent allowed by law, CloWM shall not be liable for any
+    indirect, incidental, special, consequential, or punitive damages, or any
+    loss of profits or revenues, whether incurred directly or indirectly, or any
+    loss of data, use, goodwill, or other intangible losses resulting from (A)
+    your access to, use of, inability to access, or inability to use CloWM; (B)
+    any third party conduct or content on CloWM, including any defamatory,
+    offensive, or illegal conduct of third parties; or (C) any unauthorized
+    access, use, or alteration of your content.
+  </p>
+
+  <h3>Modification</h3>
+  <p>
+    The Terms may be modified from time to time. The date of the most recent
+    revisions will always be shown on this page. If we make changes that we
+    believe will substantially alter your rights, we will notify you. You will
+    agree to accept any changes or revisions to the Terms by continuing to use
+    CloWM.
+  </p>
+
+  <h3>Contact</h3>
+  <p>
+    We welcome all questions, concerns, and feedback you might have about these
+    terms. If you have suggestions for us, let us know at
+    <a href="mailto:support@clowm.bi.denbi.de">support@clowm.bi.denbi.de.</a>
+  </p>
 </template>
 
 <style scoped></style>
diff --git a/src/views/admin/AdminWorkflowExecutionView.vue b/src/views/admin/AdminWorkflowExecutionView.vue
index 9778ed07a7bf0eea3924fd4751f99ee1c0a9ae6e..ac014a6f14c4692f2d4004470a3010a93e6b006b 100644
--- a/src/views/admin/AdminWorkflowExecutionView.vue
+++ b/src/views/admin/AdminWorkflowExecutionView.vue
@@ -340,152 +340,160 @@ onMounted(() => {
       Clear
     </button>
   </form>
-  <table class="table table-hover align-middle" ref="executionTable">
-    <caption ref="endOfTableElement">
-      Displaying
-      {{
-        formState.executions.length
-      }}
-      Workflow Execution
-    </caption>
-    <thead>
-      <tr>
-        <th scope="col">Workflow</th>
-        <th scope="col">Execution ID</th>
-        <th scope="col">Status</th>
-        <th scope="col">Started</th>
-        <th scope="col">Duration</th>
-        <th scope="col">Ended</th>
-        <th scope="col">User</th>
-        <th scope="col"></th>
-      </tr>
-    </thead>
-    <tbody>
-      <template v-if="formState.executions.length > 0">
-        <tr
-          v-for="execution in formState.executions"
-          :key="execution.execution_id"
-          :id="`admin-execution-${execution.execution_id}`"
-        >
-          <td>
-            <router-link
-              v-if="execution.workflow_id && execution.workflow_version_id"
-              :to="{
-                name: 'workflow-version',
-                params: {
-                  versionId: execution.workflow_version_id,
-                  workflowId: execution.workflow_id,
-                },
-              }"
-            >
-              {{ nameRepository.getName(execution.workflow_id) }}@{{
-                nameRepository.getName(execution.workflow_version_id)
-              }}
-            </router-link>
-            <markdown-renderer
-              class="execution-notes"
-              v-else-if="execution.notes"
-              :markdown="execution.notes"
-            />
-            <span v-else>Deleted Workflow</span>
-          </td>
-          <td>
-            {{ execution.execution_id }}
-          </td>
-          <td>
-            <span
-              class="rounded-pill py-1 px-2 text-light"
-              :class="statusToColorMapping[execution.status]"
-            >
-              {{ execution.status }}</span
-            >
-          </td>
-          <td>
-            {{ dayjs.unix(execution.start_time).format("DD.MM.YYYY HH:mm") }}
-          </td>
-          <td>
-            <template v-if="execution.end_time">
-              {{
-                dayjs
-                  .duration(
-                    execution.end_time - execution.start_time,
-                    "seconds",
-                  )
-                  .humanize()
+  <div class="overflow-x-auto" style="max-width: 100vw">
+    <table class="table table-hover align-middle" ref="executionTable">
+      <caption ref="endOfTableElement">
+        Displaying
+        {{
+          formState.executions.length
+        }}
+        Workflow Execution
+      </caption>
+      <thead>
+        <tr>
+          <th scope="col">Workflow</th>
+          <th scope="col">Execution ID</th>
+          <th scope="col">Status</th>
+          <th scope="col">Started</th>
+          <th scope="col">Duration</th>
+          <th scope="col">Ended</th>
+          <th scope="col">CPU hours [HH:mm:ss]</th>
+          <th scope="col">User</th>
+          <th scope="col"></th>
+        </tr>
+      </thead>
+      <tbody>
+        <template v-if="formState.executions.length > 0">
+          <tr
+            v-for="execution in formState.executions"
+            :key="execution.execution_id"
+            :id="`admin-execution-${execution.execution_id}`"
+          >
+            <td>
+              <router-link
+                v-if="execution.workflow_id && execution.workflow_version_id"
+                :to="{
+                  name: 'workflow-version',
+                  params: {
+                    versionId: execution.workflow_version_id,
+                    workflowId: execution.workflow_id,
+                  },
+                }"
+              >
+                {{ nameRepository.getName(execution.workflow_id) }}@{{
+                  nameRepository.getName(execution.workflow_version_id)
+                }}
+              </router-link>
+              <markdown-renderer
+                class="execution-notes"
+                v-else-if="execution.notes"
+                :markdown="execution.notes"
+              />
+              <span v-else>Deleted Workflow</span>
+            </td>
+            <td>
+              {{ execution.execution_id }}
+            </td>
+            <td>
+              <span
+                class="rounded-pill py-1 px-2 text-light"
+                :class="statusToColorMapping[execution.status]"
+              >
+                {{ execution.status }}</span
+              >
+            </td>
+            <td>
+              {{ dayjs.unix(execution.start_time).format("DD.MM.YYYY HH:mm") }}
+            </td>
+            <td>
+              <template v-if="execution.end_time">
+                {{
+                  dayjs
+                    .duration(
+                      execution.end_time - execution.start_time,
+                      "seconds",
+                    )
+                    .humanize()
+                }}
+              </template>
+              <template v-else>
+                {{ dayjs.unix(execution.start_time).toNow(true) }}
+              </template>
+            </td>
+            <td>
+              <template v-if="execution.end_time">
+                {{ dayjs.unix(execution.end_time).format("DD.MM.YYYY HH:mm") }}
+              </template>
+              <template v-else> -</template>
+            </td>
+            <td>
+              {{ Math.floor(dayjs.duration(execution.cpu_time).asHours()) }}:{{
+                dayjs.duration(execution.cpu_time).format("mm:ss")
               }}
-            </template>
-            <template v-else>
-              {{ dayjs.unix(execution.start_time).toNow(true) }}
-            </template>
-          </td>
-          <td>
-            <template v-if="execution.end_time">
-              {{ dayjs.unix(execution.end_time).format("DD.MM.YYYY HH:mm") }}
-            </template>
-            <template v-else> -</template>
-          </td>
-          <td>
-            {{ nameRepository.getName(execution.executor_id) }}
-          </td>
-          <td class="text-end">
+            </td>
+            <td>
+              {{ nameRepository.getName(execution.executor_id) }}
+            </td>
+            <td class="text-end">
+              <div
+                class="btn-group btn-group-sm dropdown-center dropdown-menu-start"
+              >
+                <button type="button" class="btn btn-secondary" disabled>
+                  Details
+                </button>
+                <button
+                  type="button"
+                  class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
+                  data-bs-toggle="dropdown"
+                  aria-expanded="false"
+                >
+                  <span class="visually-hidden">Toggle Dropdown</span>
+                </button>
+                <ul class="dropdown-menu dropdown-menu">
+                  <li>
+                    <button
+                      class="dropdown-item align-middle"
+                      type="button"
+                      data-bs-toggle="modal"
+                      data-bs-target="#workflowExecutionParameterModal"
+                      @click="
+                        formState.executionParameters = execution.execution_id
+                      "
+                    >
+                      <span class="ms-1">Parameters</span>
+                    </button>
+                  </li>
+                  <li v-if="workflowExecutionCancelable(execution)">
+                    <button
+                      class="dropdown-item text-danger align-middle"
+                      type="button"
+                      @click="cancelWorkflowExecution(execution.execution_id)"
+                    >
+                      <font-awesome-icon icon="fa-solid fa-ban" />
+                      <span class="ms-1">Cancel</span>
+                    </button>
+                  </li>
+                </ul>
+              </div>
+            </td>
+          </tr>
+        </template>
+        <tr v-else-if="!formState.loading">
+          <td colspan="9" class="text-center"><i>No workflow executions</i></td>
+        </tr>
+        <tr v-if="formState.loading">
+          <td colspan="9" class="text-center">
             <div
-              class="btn-group btn-group-sm dropdown-center dropdown-menu-start"
+              class="spinner-border text-secondary spinner-border-sm"
+              role="status"
             >
-              <button type="button" class="btn btn-secondary" disabled>
-                Details
-              </button>
-              <button
-                type="button"
-                class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
-                data-bs-toggle="dropdown"
-                aria-expanded="false"
-              >
-                <span class="visually-hidden">Toggle Dropdown</span>
-              </button>
-              <ul class="dropdown-menu dropdown-menu">
-                <li>
-                  <button
-                    class="dropdown-item align-middle"
-                    type="button"
-                    data-bs-toggle="modal"
-                    data-bs-target="#workflowExecutionParameterModal"
-                    @click="
-                      formState.executionParameters = execution.execution_id
-                    "
-                  >
-                    <span class="ms-1">Parameters</span>
-                  </button>
-                </li>
-                <li v-if="workflowExecutionCancelable(execution)">
-                  <button
-                    class="dropdown-item text-danger align-middle"
-                    type="button"
-                    @click="cancelWorkflowExecution(execution.execution_id)"
-                  >
-                    <font-awesome-icon icon="fa-solid fa-ban" />
-                    <span class="ms-1">Cancel</span>
-                  </button>
-                </li>
-              </ul>
+              <span class="visually-hidden">Loading...</span>
             </div>
           </td>
         </tr>
-      </template>
-      <tr v-else-if="!formState.loading">
-        <td colspan="8" class="text-center"><i>No workflow executions</i></td>
-      </tr>
-      <tr v-if="formState.loading">
-        <td colspan="8" class="text-center">
-          <div
-            class="spinner-border text-secondary spinner-border-sm"
-            role="status"
-          >
-            <span class="visually-hidden">Loading...</span>
-          </div>
-        </td>
-      </tr>
-    </tbody>
-  </table>
+      </tbody>
+    </table>
+  </div>
 </template>
 
 <style scoped></style>
diff --git a/src/views/object-storage/S3KeysView.vue b/src/views/object-storage/S3KeysView.vue
index aa3959ec82e846ee36365b165f458fb33c695b27..76ff629fe588a9c4896943bbf284d8a29bae3437 100644
--- a/src/views/object-storage/S3KeysView.vue
+++ b/src/views/object-storage/S3KeysView.vue
@@ -155,7 +155,7 @@ onMounted(() => {
         :s3key="
           keyState.initialLoading
             ? { uid: '', access_key: '', secret_key: '' }
-            : keyRepository.keys[keyState.activeKey] ?? keyRepository.keys[0]
+            : (keyRepository.keys[keyState.activeKey] ?? keyRepository.keys[0])
         "
         :deletable="allowKeyDeletion"
         :loading="keyState.initialLoading"
diff --git a/src/views/workflows/ListWorkflowExecutionsView.vue b/src/views/workflows/ListWorkflowExecutionsView.vue
index d24eca4009458cd1ee20a32d319bc78ef3fb30d8..d2ac6b311cf0c6eb4cdf470077b76893255b6bf1 100644
--- a/src/views/workflows/ListWorkflowExecutionsView.vue
+++ b/src/views/workflows/ListWorkflowExecutionsView.vue
@@ -193,177 +193,183 @@ onUnmounted(() => {
       </router-link>
     </div>
   </div>
-  <table class="table table-hover caption-top align-middle">
-    <caption>
-      Displaying
-      {{
-        executionRepository.executions.length
-      }}
-      Workflow Execution
-    </caption>
-    <thead>
-      <tr>
-        <th scope="col">Workflow</th>
-        <th scope="col">Status</th>
-        <th scope="col">Started</th>
-        <th scope="col">Duration</th>
-        <th scope="col">Ended</th>
-        <th scope="col"></th>
-      </tr>
-    </thead>
-    <tbody>
-      <template v-if="executionsState.loading">
-        <tr v-for="n in 5" :key="n">
-          <td class="placeholder-glow w-25">
-            <span class="placeholder col-6"></span>
-          </td>
-          <td class="placeholder-glow" style="width: 15%">
-            <span class="placeholder col-4"></span>
-          </td>
-          <td class="placeholder-glow" style="width: 15%">
-            <span class="placeholder col-6"></span>
-          </td>
-          <td class="placeholder-glow" style="width: 15%">
-            <span class="placeholder col-6"></span>
-          </td>
-          <td class="text-end">
-            <div
-              class="btn-group btn-group-sm dropdown-center dropdown-menu-start"
-            >
-              <button type="button" class="btn btn-secondary border" disabled>
-                Details
-              </button>
-              <button
-                type="button"
-                class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
-                disabled
-              >
-                <span class="visually-hidden">Toggle Dropdown</span>
-              </button>
-            </div>
-          </td>
+  <div class="overflow-x-auto" style="max-width: 100vw">
+    <table class="table table-hover caption-top align-middle">
+      <caption>
+        Displaying
+        {{
+          executionRepository.executions.length
+        }}
+        Workflow Execution
+      </caption>
+      <thead>
+        <tr>
+          <th scope="col">Workflow</th>
+          <th scope="col">Status</th>
+          <th scope="col">Started</th>
+          <th scope="col">Duration</th>
+          <th scope="col">Ended</th>
+          <th scope="col"></th>
         </tr>
-      </template>
-      <template v-else-if="executionRepository.executions.length > 0">
-        <tr v-for="execution in sortedExecutions" :key="execution.execution_id">
-          <td>
-            <router-link
-              v-if="execution.workflow_id && execution.workflow_version_id"
-              :to="{
-                name: 'workflow-version',
-                params: {
-                  versionId: execution.workflow_version_id,
-                  workflowId: execution.workflow_id,
-                },
-              }"
-            >
-              {{ nameRepository.getName(execution.workflow_id) }}@{{
-                nameRepository.getName(execution.workflow_version_id)
-              }}
-            </router-link>
-            <markdown-renderer
-              class="execution-notes"
-              v-else-if="execution.notes"
-              :markdown="execution.notes"
-            />
-            <span v-else>Deleted Workflow</span>
-          </td>
-          <td>
-            <span
-              class="rounded-pill py-1 px-2 text-light"
-              :class="statusToColorMapping[execution.status]"
-              ><font-awesome-icon
-                class="me-2"
-                :icon="statusToIconMapping[execution.status]"
-              />{{ execution.status }}</span
-            >
-          </td>
-          <td>
-            {{ dayjs.unix(execution.start_time).format("DD.MM.YYYY HH:mm") }}
-          </td>
-          <td>
-            <template v-if="execution.end_time">
-              {{
-                dayjs
-                  .duration(
-                    execution.end_time - execution.start_time,
-                    "seconds",
-                  )
-                  .humanize()
-              }}
-            </template>
-            <template v-else
-              >{{ dayjs.unix(execution.start_time).toNow(true) }}
-            </template>
-          </td>
-          <td>
-            <template v-if="execution.end_time">
-              {{ dayjs.unix(execution.end_time).format("DD.MM.YYYY HH:mm") }}
-            </template>
-            <template v-else> -</template>
-          </td>
-          <td class="text-end">
-            <div
-              class="btn-group btn-group-sm dropdown-center dropdown-menu-start"
-            >
-              <button type="button" class="btn btn-secondary" disabled>
-                Details
-              </button>
-              <button
-                type="button"
-                class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
-                data-bs-toggle="dropdown"
-                aria-expanded="false"
+      </thead>
+      <tbody>
+        <template v-if="executionsState.loading">
+          <tr v-for="n in 5" :key="n">
+            <td class="placeholder-glow w-25">
+              <span class="placeholder col-6"></span>
+            </td>
+            <td class="placeholder-glow" style="width: 15%">
+              <span class="placeholder col-4"></span>
+            </td>
+            <td class="placeholder-glow" style="width: 15%">
+              <span class="placeholder col-6"></span>
+            </td>
+            <td class="placeholder-glow" style="width: 15%">
+              <span class="placeholder col-6"></span>
+            </td>
+            <td class="text-end">
+              <div
+                class="btn-group btn-group-sm dropdown-center dropdown-menu-start"
+              >
+                <button type="button" class="btn btn-secondary border" disabled>
+                  Details
+                </button>
+                <button
+                  type="button"
+                  class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
+                  disabled
+                >
+                  <span class="visually-hidden">Toggle Dropdown</span>
+                </button>
+              </div>
+            </td>
+          </tr>
+        </template>
+        <template v-else-if="executionRepository.executions.length > 0">
+          <tr
+            v-for="execution in sortedExecutions"
+            :key="execution.execution_id"
+          >
+            <td>
+              <router-link
+                v-if="execution.workflow_id && execution.workflow_version_id"
+                :to="{
+                  name: 'workflow-version',
+                  params: {
+                    versionId: execution.workflow_version_id,
+                    workflowId: execution.workflow_id,
+                  },
+                }"
+              >
+                {{ nameRepository.getName(execution.workflow_id) }}@{{
+                  nameRepository.getName(execution.workflow_version_id)
+                }}
+              </router-link>
+              <markdown-renderer
+                class="execution-notes"
+                v-else-if="execution.notes"
+                :markdown="execution.notes"
+              />
+              <span v-else>Deleted Workflow</span>
+            </td>
+            <td>
+              <span
+                class="rounded-pill py-1 px-2 text-light text-nowrap"
+                :class="statusToColorMapping[execution.status]"
               >
-                <span class="visually-hidden">Toggle Dropdown</span>
-              </button>
-              <ul class="dropdown-menu dropdown-menu">
-                <li>
-                  <button
-                    class="dropdown-item align-middle"
-                    type="button"
-                    data-bs-toggle="modal"
-                    data-bs-target="#workflowExecutionParameterModal"
-                    @click="
-                      executionsState.executionParameters =
-                        execution.execution_id
-                    "
-                  >
-                    <span class="ms-1">Parameters</span>
-                  </button>
-                </li>
-                <li v-if="workflowExecutionCancelable(execution)">
-                  <button
-                    class="dropdown-item text-danger align-middle"
-                    type="button"
-                    @click="cancelWorkflowExecution(execution.execution_id)"
-                  >
-                    <font-awesome-icon icon="fa-solid fa-ban" />
-                    <span class="ms-1">Cancel</span>
-                  </button>
-                </li>
-                <li v-if="!workflowExecutionCancelable(execution)">
-                  <button
-                    class="dropdown-item text-danger align-middle"
-                    type="button"
-                    data-bs-toggle="modal"
-                    data-bs-target="#deleteWorkflowExecutionModal"
-                    @click="executionsState.executionToDelete = execution"
-                  >
-                    <font-awesome-icon icon="fa-solid fa-trash" />
-                    <span class="ms-1">Delete</span>
-                  </button>
-                </li>
-              </ul>
-            </div>
-          </td>
+                <font-awesome-icon
+                  class="me-2"
+                  :icon="statusToIconMapping[execution.status]"
+                />{{ execution.status }}</span
+              >
+            </td>
+            <td>
+              {{ dayjs.unix(execution.start_time).format("DD.MM.YYYY HH:mm") }}
+            </td>
+            <td>
+              <template v-if="execution.end_time">
+                {{
+                  dayjs
+                    .duration(
+                      execution.end_time - execution.start_time,
+                      "seconds",
+                    )
+                    .humanize()
+                }}
+              </template>
+              <template v-else
+                >{{ dayjs.unix(execution.start_time).toNow(true) }}
+              </template>
+            </td>
+            <td>
+              <template v-if="execution.end_time">
+                {{ dayjs.unix(execution.end_time).format("DD.MM.YYYY HH:mm") }}
+              </template>
+              <template v-else> -</template>
+            </td>
+            <td class="text-end">
+              <div
+                class="btn-group btn-group-sm dropdown-center dropdown-menu-start"
+              >
+                <button type="button" class="btn btn-secondary" disabled>
+                  Details
+                </button>
+                <button
+                  type="button"
+                  class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
+                  data-bs-toggle="dropdown"
+                  aria-expanded="false"
+                >
+                  <span class="visually-hidden">Toggle Dropdown</span>
+                </button>
+                <ul class="dropdown-menu dropdown-menu">
+                  <li>
+                    <button
+                      class="dropdown-item align-middle"
+                      type="button"
+                      data-bs-toggle="modal"
+                      data-bs-target="#workflowExecutionParameterModal"
+                      @click="
+                        executionsState.executionParameters =
+                          execution.execution_id
+                      "
+                    >
+                      <span class="ms-1">Parameters</span>
+                    </button>
+                  </li>
+                  <li v-if="workflowExecutionCancelable(execution)">
+                    <button
+                      class="dropdown-item text-danger align-middle"
+                      type="button"
+                      @click="cancelWorkflowExecution(execution.execution_id)"
+                    >
+                      <font-awesome-icon icon="fa-solid fa-ban" />
+                      <span class="ms-1">Cancel</span>
+                    </button>
+                  </li>
+                  <li v-if="!workflowExecutionCancelable(execution)">
+                    <button
+                      class="dropdown-item text-danger align-middle"
+                      type="button"
+                      data-bs-toggle="modal"
+                      data-bs-target="#deleteWorkflowExecutionModal"
+                      @click="executionsState.executionToDelete = execution"
+                    >
+                      <font-awesome-icon icon="fa-solid fa-trash" />
+                      <span class="ms-1">Delete</span>
+                    </button>
+                  </li>
+                </ul>
+              </div>
+            </td>
+          </tr>
+        </template>
+        <tr v-else>
+          <td colspan="6" class="text-center"><i>No workflow executions</i></td>
         </tr>
-      </template>
-      <tr v-else>
-        <td colspan="6" class="text-center"><i>No workflow executions</i></td>
-      </tr>
-    </tbody>
-  </table>
+      </tbody>
+    </table>
+  </div>
 </template>
 
 <style scoped></style>