diff --git a/.prettierrc b/.prettierrc
index 5ea96ce..ed40352 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,5 +1,5 @@
 {
-    "printWidth": 80,
+    "printWidth": 100,
     "tabWidth": 4,
     "trailingComma": "es5",
     "useTabs": false,
diff --git a/package-lock.json b/package-lock.json
index 8626bf4..a91331f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -105,9 +105,9 @@
             }
         },
         "node_modules/@babel/parser": {
-            "version": "7.27.1",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz",
-            "integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==",
+            "version": "7.27.2",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz",
+            "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==",
             "license": "MIT",
             "dependencies": {
                 "@babel/types": "^7.27.1"
@@ -154,9 +154,9 @@
             }
         },
         "node_modules/@esbuild/aix-ppc64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz",
-            "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz",
+            "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==",
             "cpu": [
                 "ppc64"
             ],
@@ -170,9 +170,9 @@
             }
         },
         "node_modules/@esbuild/android-arm": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz",
-            "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz",
+            "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==",
             "cpu": [
                 "arm"
             ],
@@ -186,9 +186,9 @@
             }
         },
         "node_modules/@esbuild/android-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz",
-            "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz",
+            "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==",
             "cpu": [
                 "arm64"
             ],
@@ -202,9 +202,9 @@
             }
         },
         "node_modules/@esbuild/android-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz",
-            "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz",
+            "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==",
             "cpu": [
                 "x64"
             ],
@@ -218,9 +218,9 @@
             }
         },
         "node_modules/@esbuild/darwin-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz",
-            "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz",
+            "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==",
             "cpu": [
                 "arm64"
             ],
@@ -234,9 +234,9 @@
             }
         },
         "node_modules/@esbuild/darwin-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz",
-            "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz",
+            "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==",
             "cpu": [
                 "x64"
             ],
@@ -250,9 +250,9 @@
             }
         },
         "node_modules/@esbuild/freebsd-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz",
-            "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz",
+            "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==",
             "cpu": [
                 "arm64"
             ],
@@ -266,9 +266,9 @@
             }
         },
         "node_modules/@esbuild/freebsd-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz",
-            "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz",
+            "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==",
             "cpu": [
                 "x64"
             ],
@@ -282,9 +282,9 @@
             }
         },
         "node_modules/@esbuild/linux-arm": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz",
-            "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz",
+            "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==",
             "cpu": [
                 "arm"
             ],
@@ -298,9 +298,9 @@
             }
         },
         "node_modules/@esbuild/linux-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz",
-            "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz",
+            "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==",
             "cpu": [
                 "arm64"
             ],
@@ -314,9 +314,9 @@
             }
         },
         "node_modules/@esbuild/linux-ia32": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz",
-            "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz",
+            "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==",
             "cpu": [
                 "ia32"
             ],
@@ -330,9 +330,9 @@
             }
         },
         "node_modules/@esbuild/linux-loong64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz",
-            "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz",
+            "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==",
             "cpu": [
                 "loong64"
             ],
@@ -346,9 +346,9 @@
             }
         },
         "node_modules/@esbuild/linux-mips64el": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz",
-            "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz",
+            "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==",
             "cpu": [
                 "mips64el"
             ],
@@ -362,9 +362,9 @@
             }
         },
         "node_modules/@esbuild/linux-ppc64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz",
-            "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz",
+            "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==",
             "cpu": [
                 "ppc64"
             ],
@@ -378,9 +378,9 @@
             }
         },
         "node_modules/@esbuild/linux-riscv64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz",
-            "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz",
+            "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==",
             "cpu": [
                 "riscv64"
             ],
@@ -394,9 +394,9 @@
             }
         },
         "node_modules/@esbuild/linux-s390x": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz",
-            "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz",
+            "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==",
             "cpu": [
                 "s390x"
             ],
@@ -410,9 +410,9 @@
             }
         },
         "node_modules/@esbuild/linux-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz",
-            "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz",
+            "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==",
             "cpu": [
                 "x64"
             ],
@@ -426,9 +426,9 @@
             }
         },
         "node_modules/@esbuild/netbsd-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz",
-            "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz",
+            "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==",
             "cpu": [
                 "arm64"
             ],
@@ -442,9 +442,9 @@
             }
         },
         "node_modules/@esbuild/netbsd-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz",
-            "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz",
+            "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==",
             "cpu": [
                 "x64"
             ],
@@ -458,9 +458,9 @@
             }
         },
         "node_modules/@esbuild/openbsd-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz",
-            "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz",
+            "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==",
             "cpu": [
                 "arm64"
             ],
@@ -474,9 +474,9 @@
             }
         },
         "node_modules/@esbuild/openbsd-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz",
-            "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz",
+            "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==",
             "cpu": [
                 "x64"
             ],
@@ -490,9 +490,9 @@
             }
         },
         "node_modules/@esbuild/sunos-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz",
-            "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz",
+            "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==",
             "cpu": [
                 "x64"
             ],
@@ -506,9 +506,9 @@
             }
         },
         "node_modules/@esbuild/win32-arm64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz",
-            "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz",
+            "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==",
             "cpu": [
                 "arm64"
             ],
@@ -522,9 +522,9 @@
             }
         },
         "node_modules/@esbuild/win32-ia32": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz",
-            "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz",
+            "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==",
             "cpu": [
                 "ia32"
             ],
@@ -538,9 +538,9 @@
             }
         },
         "node_modules/@esbuild/win32-x64": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz",
-            "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz",
+            "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==",
             "cpu": [
                 "x64"
             ],
@@ -955,9 +955,9 @@
             "license": "MIT"
         },
         "node_modules/@rollup/rollup-android-arm-eabi": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz",
-            "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz",
+            "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==",
             "cpu": [
                 "arm"
             ],
@@ -968,9 +968,9 @@
             ]
         },
         "node_modules/@rollup/rollup-android-arm64": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz",
-            "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz",
+            "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==",
             "cpu": [
                 "arm64"
             ],
@@ -981,9 +981,9 @@
             ]
         },
         "node_modules/@rollup/rollup-darwin-arm64": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz",
-            "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz",
+            "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==",
             "cpu": [
                 "arm64"
             ],
@@ -994,9 +994,9 @@
             ]
         },
         "node_modules/@rollup/rollup-darwin-x64": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz",
-            "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz",
+            "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==",
             "cpu": [
                 "x64"
             ],
@@ -1007,9 +1007,9 @@
             ]
         },
         "node_modules/@rollup/rollup-freebsd-arm64": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz",
-            "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz",
+            "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==",
             "cpu": [
                 "arm64"
             ],
@@ -1020,9 +1020,9 @@
             ]
         },
         "node_modules/@rollup/rollup-freebsd-x64": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz",
-            "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz",
+            "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==",
             "cpu": [
                 "x64"
             ],
@@ -1033,9 +1033,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz",
-            "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz",
+            "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==",
             "cpu": [
                 "arm"
             ],
@@ -1046,9 +1046,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz",
-            "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz",
+            "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==",
             "cpu": [
                 "arm"
             ],
@@ -1059,9 +1059,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz",
-            "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz",
+            "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==",
             "cpu": [
                 "arm64"
             ],
@@ -1072,9 +1072,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm64-musl": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz",
-            "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz",
+            "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==",
             "cpu": [
                 "arm64"
             ],
@@ -1085,9 +1085,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz",
-            "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz",
+            "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==",
             "cpu": [
                 "loong64"
             ],
@@ -1098,9 +1098,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz",
-            "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz",
+            "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==",
             "cpu": [
                 "ppc64"
             ],
@@ -1111,9 +1111,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz",
-            "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz",
+            "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==",
             "cpu": [
                 "riscv64"
             ],
@@ -1124,9 +1124,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-riscv64-musl": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz",
-            "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz",
+            "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==",
             "cpu": [
                 "riscv64"
             ],
@@ -1137,9 +1137,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz",
-            "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz",
+            "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==",
             "cpu": [
                 "s390x"
             ],
@@ -1150,9 +1150,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-x64-gnu": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz",
-            "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz",
+            "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==",
             "cpu": [
                 "x64"
             ],
@@ -1163,9 +1163,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-x64-musl": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz",
-            "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz",
+            "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==",
             "cpu": [
                 "x64"
             ],
@@ -1176,9 +1176,9 @@
             ]
         },
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz",
-            "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz",
+            "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==",
             "cpu": [
                 "arm64"
             ],
@@ -1189,9 +1189,9 @@
             ]
         },
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz",
-            "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz",
+            "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==",
             "cpu": [
                 "ia32"
             ],
@@ -1202,9 +1202,9 @@
             ]
         },
         "node_modules/@rollup/rollup-win32-x64-msvc": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz",
-            "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz",
+            "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==",
             "cpu": [
                 "x64"
             ],
@@ -1215,60 +1215,60 @@
             ]
         },
         "node_modules/@shikijs/core": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.3.0.tgz",
-            "integrity": "sha512-CovkFL2WVaHk6PCrwv6ctlmD4SS1qtIfN8yEyDXDYWh4ONvomdM9MaFw20qHuqJOcb8/xrkqoWQRJ//X10phOQ==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.0.tgz",
+            "integrity": "sha512-0YOzTSRDn/IAfQWtK791gs1u8v87HNGToU6IwcA3K7nPoVOrS2Dh6X6A6YfXgPTSkTwR5y6myk0MnI0htjnwrA==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.3.0",
+                "@shikijs/types": "3.4.0",
                 "@shikijs/vscode-textmate": "^10.0.2",
                 "@types/hast": "^3.0.4",
                 "hast-util-to-html": "^9.0.5"
             }
         },
         "node_modules/@shikijs/engine-javascript": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.3.0.tgz",
-            "integrity": "sha512-XlhnFGv0glq7pfsoN0KyBCz9FJU678LZdQ2LqlIdAj6JKsg5xpYKay3DkazXWExp3DTJJK9rMOuGzU2911pg7Q==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.0.tgz",
+            "integrity": "sha512-1ywDoe+z/TPQKj9Jw0eU61B003J9DqUFRfH+DVSzdwPUFhR7yOmfyLzUrFz0yw8JxFg/NgzXoQyyykXgO21n5Q==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.3.0",
+                "@shikijs/types": "3.4.0",
                 "@shikijs/vscode-textmate": "^10.0.2",
-                "oniguruma-to-es": "^4.2.0"
+                "oniguruma-to-es": "^4.3.3"
             }
         },
         "node_modules/@shikijs/engine-oniguruma": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.3.0.tgz",
-            "integrity": "sha512-l0vIw+GxeNU7uGnsu6B+Crpeqf+WTQ2Va71cHb5ZYWEVEPdfYwY5kXwYqRJwHrxz9WH+pjSpXQz+TJgAsrkA5A==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.0.tgz",
+            "integrity": "sha512-zwcWlZ4OQuJ/+1t32ClTtyTU1AiDkK1lhtviRWoq/hFqPjCNyLj22bIg9rB7BfoZKOEOfrsGz7No33BPCf+WlQ==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.3.0",
+                "@shikijs/types": "3.4.0",
                 "@shikijs/vscode-textmate": "^10.0.2"
             }
         },
         "node_modules/@shikijs/langs": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.3.0.tgz",
-            "integrity": "sha512-zt6Kf/7XpBQKSI9eqku+arLkAcDQ3NHJO6zFjiChI8w0Oz6Jjjay7pToottjQGjSDCFk++R85643WbyINcuL+g==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.0.tgz",
+            "integrity": "sha512-bQkR+8LllaM2duU9BBRQU0GqFTx7TuF5kKlw/7uiGKoK140n1xlLAwCgXwSxAjJ7Htk9tXTFwnnsJTCU5nDPXQ==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.3.0"
+                "@shikijs/types": "3.4.0"
             }
         },
         "node_modules/@shikijs/themes": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.3.0.tgz",
-            "integrity": "sha512-tXeCvLXBnqq34B0YZUEaAD1lD4lmN6TOHAhnHacj4Owh7Ptb/rf5XCDeROZt2rEOk5yuka3OOW2zLqClV7/SOg==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.0.tgz",
+            "integrity": "sha512-YPP4PKNFcFGLxItpbU0ZW1Osyuk8AyZ24YEFaq04CFsuCbcqydMvMUTi40V2dkc0qs1U2uZFrnU6s5zI6IH+uA==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.3.0"
+                "@shikijs/types": "3.4.0"
             }
         },
         "node_modules/@shikijs/types": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.3.0.tgz",
-            "integrity": "sha512-KPCGnHG6k06QG/2pnYGbFtFvpVJmC3uIpXrAiPrawETifujPBv0Se2oUxm5qYgjCvGJS9InKvjytOdN+bGuX+Q==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.0.tgz",
+            "integrity": "sha512-EUT/0lGiE//7j5N/yTMNMT3eCWNcHJLrRKxT0NDXWIfdfSmFJKfPX7nMmRBrQnWboAzIsUziCThrYMMhjbMS1A==",
             "license": "MIT",
             "dependencies": {
                 "@shikijs/vscode-textmate": "^10.0.2",
@@ -1645,9 +1645,9 @@
             }
         },
         "node_modules/astro": {
-            "version": "5.7.10",
-            "resolved": "https://registry.npmjs.org/astro/-/astro-5.7.10.tgz",
-            "integrity": "sha512-9TQcFZqP2w6//JXXUHfw8/5PX7KUx9EkG5O3m+hISuyeUztvjY1q5+p7+C5HiXyg24Zs3KkpieoL5BGRXGCAGA==",
+            "version": "5.7.11",
+            "resolved": "https://registry.npmjs.org/astro/-/astro-5.7.11.tgz",
+            "integrity": "sha512-9qRVwp8pue3isddLBnTexJsmKFpmms9Fo7Ss+3yrC0aINvbHKpD7q6qf52BtfQEk2xJgyx3SQy3dUsuD90sEqQ==",
             "license": "MIT",
             "dependencies": {
                 "@astrojs/compiler": "^2.11.0",
@@ -1697,7 +1697,7 @@
                 "tinyglobby": "^0.2.12",
                 "tsconfck": "^3.1.5",
                 "ultrahtml": "^1.6.0",
-                "unifont": "~0.4.1",
+                "unifont": "~0.5.0",
                 "unist-util-visit": "^5.0.0",
                 "unstorage": "^1.15.0",
                 "vfile": "^6.0.3",
@@ -2375,9 +2375,9 @@
             "license": "MIT"
         },
         "node_modules/esbuild": {
-            "version": "0.25.3",
-            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz",
-            "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==",
+            "version": "0.25.4",
+            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz",
+            "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==",
             "hasInstallScript": true,
             "license": "MIT",
             "bin": {
@@ -2387,31 +2387,31 @@
                 "node": ">=18"
             },
             "optionalDependencies": {
-                "@esbuild/aix-ppc64": "0.25.3",
-                "@esbuild/android-arm": "0.25.3",
-                "@esbuild/android-arm64": "0.25.3",
-                "@esbuild/android-x64": "0.25.3",
-                "@esbuild/darwin-arm64": "0.25.3",
-                "@esbuild/darwin-x64": "0.25.3",
-                "@esbuild/freebsd-arm64": "0.25.3",
-                "@esbuild/freebsd-x64": "0.25.3",
-                "@esbuild/linux-arm": "0.25.3",
-                "@esbuild/linux-arm64": "0.25.3",
-                "@esbuild/linux-ia32": "0.25.3",
-                "@esbuild/linux-loong64": "0.25.3",
-                "@esbuild/linux-mips64el": "0.25.3",
-                "@esbuild/linux-ppc64": "0.25.3",
-                "@esbuild/linux-riscv64": "0.25.3",
-                "@esbuild/linux-s390x": "0.25.3",
-                "@esbuild/linux-x64": "0.25.3",
-                "@esbuild/netbsd-arm64": "0.25.3",
-                "@esbuild/netbsd-x64": "0.25.3",
-                "@esbuild/openbsd-arm64": "0.25.3",
-                "@esbuild/openbsd-x64": "0.25.3",
-                "@esbuild/sunos-x64": "0.25.3",
-                "@esbuild/win32-arm64": "0.25.3",
-                "@esbuild/win32-ia32": "0.25.3",
-                "@esbuild/win32-x64": "0.25.3"
+                "@esbuild/aix-ppc64": "0.25.4",
+                "@esbuild/android-arm": "0.25.4",
+                "@esbuild/android-arm64": "0.25.4",
+                "@esbuild/android-x64": "0.25.4",
+                "@esbuild/darwin-arm64": "0.25.4",
+                "@esbuild/darwin-x64": "0.25.4",
+                "@esbuild/freebsd-arm64": "0.25.4",
+                "@esbuild/freebsd-x64": "0.25.4",
+                "@esbuild/linux-arm": "0.25.4",
+                "@esbuild/linux-arm64": "0.25.4",
+                "@esbuild/linux-ia32": "0.25.4",
+                "@esbuild/linux-loong64": "0.25.4",
+                "@esbuild/linux-mips64el": "0.25.4",
+                "@esbuild/linux-ppc64": "0.25.4",
+                "@esbuild/linux-riscv64": "0.25.4",
+                "@esbuild/linux-s390x": "0.25.4",
+                "@esbuild/linux-x64": "0.25.4",
+                "@esbuild/netbsd-arm64": "0.25.4",
+                "@esbuild/netbsd-x64": "0.25.4",
+                "@esbuild/openbsd-arm64": "0.25.4",
+                "@esbuild/openbsd-x64": "0.25.4",
+                "@esbuild/sunos-x64": "0.25.4",
+                "@esbuild/win32-arm64": "0.25.4",
+                "@esbuild/win32-ia32": "0.25.4",
+                "@esbuild/win32-x64": "0.25.4"
             }
         },
         "node_modules/escape-string-regexp": {
@@ -4291,9 +4291,9 @@
             }
         },
         "node_modules/rollup": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz",
-            "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==",
+            "version": "4.40.2",
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz",
+            "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==",
             "license": "MIT",
             "dependencies": {
                 "@types/estree": "1.0.7"
@@ -4306,26 +4306,26 @@
                 "npm": ">=8.0.0"
             },
             "optionalDependencies": {
-                "@rollup/rollup-android-arm-eabi": "4.40.1",
-                "@rollup/rollup-android-arm64": "4.40.1",
-                "@rollup/rollup-darwin-arm64": "4.40.1",
-                "@rollup/rollup-darwin-x64": "4.40.1",
-                "@rollup/rollup-freebsd-arm64": "4.40.1",
-                "@rollup/rollup-freebsd-x64": "4.40.1",
-                "@rollup/rollup-linux-arm-gnueabihf": "4.40.1",
-                "@rollup/rollup-linux-arm-musleabihf": "4.40.1",
-                "@rollup/rollup-linux-arm64-gnu": "4.40.1",
-                "@rollup/rollup-linux-arm64-musl": "4.40.1",
-                "@rollup/rollup-linux-loongarch64-gnu": "4.40.1",
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1",
-                "@rollup/rollup-linux-riscv64-gnu": "4.40.1",
-                "@rollup/rollup-linux-riscv64-musl": "4.40.1",
-                "@rollup/rollup-linux-s390x-gnu": "4.40.1",
-                "@rollup/rollup-linux-x64-gnu": "4.40.1",
-                "@rollup/rollup-linux-x64-musl": "4.40.1",
-                "@rollup/rollup-win32-arm64-msvc": "4.40.1",
-                "@rollup/rollup-win32-ia32-msvc": "4.40.1",
-                "@rollup/rollup-win32-x64-msvc": "4.40.1",
+                "@rollup/rollup-android-arm-eabi": "4.40.2",
+                "@rollup/rollup-android-arm64": "4.40.2",
+                "@rollup/rollup-darwin-arm64": "4.40.2",
+                "@rollup/rollup-darwin-x64": "4.40.2",
+                "@rollup/rollup-freebsd-arm64": "4.40.2",
+                "@rollup/rollup-freebsd-x64": "4.40.2",
+                "@rollup/rollup-linux-arm-gnueabihf": "4.40.2",
+                "@rollup/rollup-linux-arm-musleabihf": "4.40.2",
+                "@rollup/rollup-linux-arm64-gnu": "4.40.2",
+                "@rollup/rollup-linux-arm64-musl": "4.40.2",
+                "@rollup/rollup-linux-loongarch64-gnu": "4.40.2",
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2",
+                "@rollup/rollup-linux-riscv64-gnu": "4.40.2",
+                "@rollup/rollup-linux-riscv64-musl": "4.40.2",
+                "@rollup/rollup-linux-s390x-gnu": "4.40.2",
+                "@rollup/rollup-linux-x64-gnu": "4.40.2",
+                "@rollup/rollup-linux-x64-musl": "4.40.2",
+                "@rollup/rollup-win32-arm64-msvc": "4.40.2",
+                "@rollup/rollup-win32-ia32-msvc": "4.40.2",
+                "@rollup/rollup-win32-x64-msvc": "4.40.2",
                 "fsevents": "~2.3.2"
             }
         },
@@ -4382,17 +4382,17 @@
             }
         },
         "node_modules/shiki": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.3.0.tgz",
-            "integrity": "sha512-j0Z1tG5vlOFGW8JVj0Cpuatzvshes7VJy5ncDmmMaYcmnGW0Js1N81TOW98ivTFNZfKRn9uwEg/aIm638o368g==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.0.tgz",
+            "integrity": "sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/core": "3.3.0",
-                "@shikijs/engine-javascript": "3.3.0",
-                "@shikijs/engine-oniguruma": "3.3.0",
-                "@shikijs/langs": "3.3.0",
-                "@shikijs/themes": "3.3.0",
-                "@shikijs/types": "3.3.0",
+                "@shikijs/core": "3.4.0",
+                "@shikijs/engine-javascript": "3.4.0",
+                "@shikijs/engine-oniguruma": "3.4.0",
+                "@shikijs/langs": "3.4.0",
+                "@shikijs/themes": "3.4.0",
+                "@shikijs/types": "3.4.0",
                 "@shikijs/vscode-textmate": "^10.0.2",
                 "@types/hast": "^3.0.4"
             }
@@ -4618,9 +4618,9 @@
             "license": "0BSD"
         },
         "node_modules/type-fest": {
-            "version": "4.40.1",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.1.tgz",
-            "integrity": "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==",
+            "version": "4.41.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+            "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
             "license": "(MIT OR CC0-1.0)",
             "engines": {
                 "node": ">=16"
@@ -4701,9 +4701,9 @@
             }
         },
         "node_modules/unifont": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.4.1.tgz",
-            "integrity": "sha512-zKSY9qO8svWYns+FGKjyVdLvpGPwqmsCjeJLN1xndMiqxHWBAhoWDMYMG960MxeV48clBmG+fDP59dHY1VoZvg==",
+            "version": "0.5.0",
+            "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.0.tgz",
+            "integrity": "sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA==",
             "license": "MIT",
             "dependencies": {
                 "css-tree": "^3.0.0",
@@ -4968,9 +4968,9 @@
             }
         },
         "node_modules/vite": {
-            "version": "6.3.4",
-            "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz",
-            "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==",
+            "version": "6.3.5",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+            "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
             "license": "MIT",
             "dependencies": {
                 "esbuild": "^0.25.0",
@@ -5217,9 +5217,9 @@
             }
         },
         "node_modules/zod": {
-            "version": "3.24.3",
-            "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz",
-            "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==",
+            "version": "3.24.4",
+            "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz",
+            "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==",
             "license": "MIT",
             "funding": {
                 "url": "https://github.com/sponsors/colinhacks"
diff --git a/src/assets/icon/check.svg b/src/assets/icon/check.svg
new file mode 100644
index 0000000..f990ff4
--- /dev/null
+++ b/src/assets/icon/check.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+	<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 12l5 5L20 7" />
+</svg>
diff --git a/src/assets/icon/x.svg b/src/assets/icon/x.svg
new file mode 100644
index 0000000..0f81241
--- /dev/null
+++ b/src/assets/icon/x.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+	<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18 6L6 18M6 6l12 12" />
+</svg>
\ No newline at end of file
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
index 6147b88..6990b88 100644
--- a/src/components/Footer.astro
+++ b/src/components/Footer.astro
@@ -8,10 +8,7 @@ import { SITE_NAME } from '../config.js'
 
 const baseYear = 2024
 const currentYear = new Date().getFullYear()
-const yearString =
-    currentYear === baseYear
-        ? baseYear.toString()
-        : `${baseYear}-${currentYear}`
+const yearString = currentYear === baseYear ? baseYear.toString() : `${baseYear}-${currentYear}`
 ---
 
 <footer>
@@ -21,11 +18,7 @@ const yearString =
     </div>
     <ul>
         <li title="GitHub">
-            <a
-                href="https://github.com/TheSmartCooking"
-                target="_blank"
-                rel="noopener noreferrer"
-            >
+            <a href="https://github.com/TheSmartCooking" target="_blank" rel="noopener noreferrer">
                 <IconGitHub />
             </a>
         </li>
diff --git a/src/components/RecipeCard.astro b/src/components/RecipeCard.astro
index 29ddfc2..747481e 100644
--- a/src/components/RecipeCard.astro
+++ b/src/components/RecipeCard.astro
@@ -1,14 +1,7 @@
 ---
 import '../styles/global.css'
 
-const {
-    author_name,
-    cook_time,
-    number_of_reviews,
-    picture_id,
-    recipe_status,
-    title,
-} = Astro.props
+const { author_name, cook_time, number_of_reviews, picture_id, recipe_status, title } = Astro.props
 
 function randint(min: number, max: number) {
     return Math.floor(Math.random() * (max - min + 1) + min)
@@ -17,10 +10,7 @@ function randint(min: number, max: number) {
 
 <Fragment>
     <div class="recipe-polaroid">
-        <div
-            class="card-body"
-            style=`background-image: url("recipe/${picture_id}.png");`
-        >
+        <div class="card-body" style=`background-image: url("recipe/${picture_id}.png");`>
             <div class="card-top">
                 <span class="card-text cook-time">⏱️ {cook_time}</span>
                 <span class="card-text recipe-status">{recipe_status}</span>
diff --git a/src/components/SearchBar.astro b/src/components/SearchBar.astro
index c60abb3..f9306dd 100644
--- a/src/components/SearchBar.astro
+++ b/src/components/SearchBar.astro
@@ -36,6 +36,7 @@ const { placeholder } = Astro.props
 </style>
 
 <script type="module" is:inline>
+    const input = document.querySelector('.search-bar input')
     let debounceTimeout
 
     function handleSearch(input) {
@@ -43,25 +44,13 @@ const { placeholder } = Astro.props
         const products = document.querySelectorAll('.recipe-polaroid')
 
         products.forEach((product) => {
-            const name =
-                product.querySelector('h1')?.textContent.toLowerCase() || ''
-            product.style.display =
-                query && name.includes(query) ? 'flex' : query ? 'none' : 'flex'
+            const name = product.querySelector('h1')?.textContent.toLowerCase() || ''
+            product.style.display = query && name.includes(query) ? 'flex' : query ? 'none' : 'flex'
         })
     }
 
-    function initSearchBar() {
-        const input = document.querySelector('.search-bar input')
-
-        input.addEventListener('input', () => {
-            clearTimeout(debounceTimeout)
-            debounceTimeout = setTimeout(() => handleSearch(input), 500)
-        })
-    }
-
-    if (document.readyState === 'loading') {
-        document.addEventListener('DOMContentLoaded', initSearchBar)
-    } else {
-        initSearchBar()
-    }
+    input.addEventListener('input', () => {
+        clearTimeout(debounceTimeout)
+        debounceTimeout = setTimeout(() => handleSearch(input), 500)
+    })
 </script>
diff --git a/src/pages/authentication.astro b/src/pages/authentication.astro
index d8d6ae5..c3cbe0e 100644
--- a/src/pages/authentication.astro
+++ b/src/pages/authentication.astro
@@ -1,8 +1,10 @@
 ---
 import '../styles/global.css'
 import Main from '../layouts/Main.astro'
-import IconShowPassword from '../assets/icon/eye.svg'
+import IconCheck from '../assets/icon/check.svg'
 import IconHidePassword from '../assets/icon/eye-off.svg'
+import IconShowPassword from '../assets/icon/eye.svg'
+import IconX from '../assets/icon/x.svg'
 ---
 
 <Main title="Authentication">
@@ -11,23 +13,13 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
             <h2>Login</h2>
             <form action="#">
                 <div class="form-field">
-                    <input
-                        type="email"
-                        id="login-email"
-                        name="login-email"
-                        required
-                    />
+                    <input type="email" id="login-email" name="login-email" required />
                     <label for="login-email">E-mail</label>
                 </div>
 
                 <div class="form-field">
                     <div class="input-with-icon">
-                        <input
-                            type="password"
-                            id="login-password"
-                            name="login-password"
-                            required
-                        />
+                        <input type="password" id="login-password" name="login-password" required />
                         <label for="login-password">Password</label>
                         <div class="icons" title="Toggle password visibility">
                             <IconShowPassword class="show-password" />
@@ -47,22 +39,12 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
             <h2>Register</h2>
             <form action="#">
                 <div class="form-field">
-                    <input
-                        type="text"
-                        id="register-username"
-                        name="register-username"
-                        required
-                    />
+                    <input type="text" id="register-username" name="register-username" required />
                     <label for="register-username">Username</label>
                 </div>
 
                 <div class="form-field">
-                    <input
-                        type="email"
-                        id="register-email"
-                        name="register-email"
-                        required
-                    />
+                    <input type="email" id="register-email" name="register-email" required />
                     <label for="register-email">E-mail</label>
                 </div>
 
@@ -86,11 +68,11 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
                     <div class="input-with-icon">
                         <input
                             type="password"
-                            id="register-password-password"
-                            name="register-password-password"
+                            id="register-password-confirm"
+                            name="register-password-confirm"
                             required
                         />
-                        <label for="register-password-password">Password</label>
+                        <label for="register-password-confirm">Password confirmation</label>
                         <div class="icons" title="Toggle password visibility">
                             <IconShowPassword class="show-password" />
                             <IconHidePassword class="hide-password" />
@@ -98,6 +80,40 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
                     </div>
                 </div>
 
+                <div id="password-requirements">
+                    <h3>Password requirements</h3>
+                    <ul>
+                        <li>
+                            <IconCheck class="password-requirement-check" />
+                            <IconX class="password-requirement-x" />
+                            <span>At least 12 characters long.</span>
+                        </li>
+                        <li>
+                            <IconCheck class="password-requirement-check" />
+                            <IconX class="password-requirement-x" />
+                            <span> Contains at least one uppercase letter (A-Z). </span>
+                        </li>
+                        <li>
+                            <IconCheck class="password-requirement-check" />
+                            <IconX class="password-requirement-x" />
+                            <span> Contains at least one lowercase letter (a-z). </span>
+                        </li>
+                        <li>
+                            <IconCheck class="password-requirement-check" />
+                            <IconX class="password-requirement-x" />
+                            <span>Contains at least one digit (0-9).</span>
+                        </li>
+                        <li>
+                            <IconCheck class="password-requirement-check" />
+                            <IconX class="password-requirement-x" />
+                            <span>
+                                Contains at least one special character (any non-alphanumeric
+                                character).
+                            </span>
+                        </li>
+                    </ul>
+                </div>
+
                 <button type="submit">Register</button>
             </form>
 
@@ -139,6 +155,16 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
         width: clamp(320px, 100%, 500px);
     }
 
+    ul {
+        list-style: none;
+    }
+
+    ul > li {
+        display: flex;
+        gap: var(--spacing-small);
+        align-items: center;
+    }
+
     .flip-link {
         font-weight: bold;
     }
@@ -181,7 +207,8 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
         border-bottom-color: var(--color-secondary);
     }
 
-    .hide-password {
+    .hide-password,
+    .password-requirement-check {
         display: none;
     }
 
@@ -197,6 +224,20 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
         display: flex;
     }
 
+    .password-requirement-check,
+    .password-requirement-x {
+        width: 1.75rem;
+        min-width: 1.75rem;
+    }
+
+    .password-requirement-check {
+        color: var(--color-success);
+    }
+
+    .password-requirement-x {
+        color: var(--color-error);
+    }
+
     #authentication {
         align-items: center;
         display: flex;
@@ -223,6 +264,7 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
     const registerSection = document.getElementById('register')
     const loginLink = document.getElementById('register-link')
     const registerLink = document.getElementById('login-link')
+    const passwordInput = document.getElementById('register-password')
 
     // Maintain label position on filled inputs
     document.querySelectorAll('.form-field input').forEach((input) => {
@@ -259,9 +301,7 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
         const hideIcons = section.querySelectorAll('.hide-password')
 
         const toggle = () => {
-            const isHidden = [...passwordInputs].some(
-                (input) => input.type === 'password'
-            )
+            const isHidden = [...passwordInputs].some((input) => input.type === 'password')
             passwordInputs.forEach((input) => {
                 input.type = isHidden ? 'text' : 'password'
             })
@@ -275,4 +315,24 @@ import IconHidePassword from '../assets/icon/eye-off.svg'
 
         iconContainer.addEventListener('click', toggle)
     })
+
+    passwordInput.addEventListener('input', () => {
+        const password = passwordInput.value
+        const requirements = [
+            { regex: /.{12,}/, index: 0 },
+            { regex: /[A-Z]/, index: 1 },
+            { regex: /[a-z]/, index: 2 },
+            { regex: /\d/, index: 3 },
+            { regex: /[^a-zA-Z0-9]/, index: 4 },
+        ]
+
+        requirements.forEach(({ regex, index }) => {
+            const isValid = regex.test(password)
+            const checkIcon = document.querySelectorAll('.password-requirement-check')[index]
+            const xIcon = document.querySelectorAll('.password-requirement-x')[index]
+
+            checkIcon.style.display = isValid ? 'inline' : 'none'
+            xIcon.style.display = isValid ? 'none' : 'inline'
+        })
+    })
 </script>
diff --git a/src/styles/global.css b/src/styles/global.css
index 4c35f8b..1baa874 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -8,7 +8,7 @@
     --color-primary: light-dark(#66af71, #2b422f);
     --color-secondary: light-dark(#527f59, #3f8549);
     --color-error: red;
-    --color-success: green;
+    --color-success: var(--color-secondary);
 
     /*
     Define spacing sizes for margins, paddings, and gaps.
@@ -34,9 +34,7 @@
     --polaroid-height: 107mm;
     --polaroid-width: 88mm;
     --polaroid-photo-size: calc(var(--polaroid-width) - 9mm);
-    --polaroid-margin-top: calc(
-        (var(--polaroid-width) - var(--polaroid-photo-size)) / 2
-    );
+    --polaroid-margin-top: calc((var(--polaroid-width) - var(--polaroid-photo-size)) / 2);
 }
 
 * {
