diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 3474e7e..9bb5aba 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -6,11 +6,7 @@
             "terminal.integrated.shell.linux": "/bin/bash"
         },
         "vscode": {
-            "extensions": [
-                "esbenp.prettier-vscode",
-                "astro-build.astro-vscode",
-                "emeraldwalk.RunOnSave"
-            ]
+            "extensions": ["astro-build.astro-vscode", "gruntfuggly.triggertaskonsave"]
         }
     },
     "forwardPorts": [4321],
@@ -23,9 +19,6 @@
             "onAutoForward": "notify"
         }
     },
-    "postStartCommand": {
-        "package": "npm update && npm install",
-        "prettier": "npx prettier --write ."
-    },
+    "postStartCommand": "npm update && npm install",
     "remoteUser": "vscode"
 }
diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml
index 5ebb2f7..b1e110a 100644
--- a/.github/workflows/super-linter.yml
+++ b/.github/workflows/super-linter.yml
@@ -1,5 +1,4 @@
----
-name: Lint
+name: Super Linter
 
 permissions:
   contents: read
@@ -24,6 +23,14 @@ jobs:
         with:
           fetch-depth: 0
 
+      - name: Setup Node.js
+        uses: actions/setup-node@v4
+        with:
+          node-version: 22
+
+      - name: Install dependencies
+        run: npm ci
+
       - name: Super-linter
         uses: super-linter/super-linter@v7
         env:
diff --git a/.prettierrc b/.prettierrc
index ed40352..a2c4547 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,10 +1,4 @@
 {
-    "printWidth": 100,
-    "tabWidth": 4,
-    "trailingComma": "es5",
-    "useTabs": false,
-    "semi": false,
-    "singleQuote": true,
     "overrides": [
         {
             "files": ["*.yml", "*.yaml", "*.md"],
@@ -12,5 +6,11 @@
                 "tabWidth": 2
             }
         }
-    ]
+    ],
+    "plugins": ["prettier-plugin-astro"],
+    "printWidth": 100,
+    "semi": false,
+    "singleQuote": true,
+    "tabWidth": 4,
+    "trailingComma": "es5"
 }
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3c7d03e..82eb381 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,24 +1,6 @@
 {
-    "editor.defaultFormatter": "esbenp.prettier-vscode",
-    "editor.formatOnSave": true,
     "editor.insertSpaces": true,
-    "editor.tabSize": 4,
-    "files.insertFinalNewline": true,
-    "files.trimFinalNewlines": true,
-    "files.trimTrailingWhitespace": true,
-    "emeraldwalk.runonsave": {
-        "commands": [
-            {
-                "match": "\\.(js|ts|vue|json|css|scss|md|html)$",
-                "cmd": "npx prettier --write \"${file}\"",
-                "autoShowOutputPanel": "error"
-            }
-        ]
-    },
-    "[yaml]": {
-        "editor.tabSize": 2
-    },
-    "[astro]": {
-        "editor.defaultFormatter": "astro-build.astro-vscode"
+    "triggerTaskOnSave.tasks": {
+        "Prettify Current File": ["*"]
     }
 }
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index f7bd195..7253e30 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -5,18 +5,34 @@
             "label": "Start Dev Server",
             "type": "shell",
             "command": "npm run dev",
-            "group": {
-                "kind": "none",
-                "isDefault": true
+            "runOptions": {
+                "runOn": "folderOpen"
             },
             "presentation": {
-                "reveal": "always",
+                "clear": true,
+                "close": true,
+                "focus": true,
                 "panel": "dedicated",
-                "showReuseMessage": true
-            },
-            "problemMatcher": [],
+                "showReuseMessage": false
+            }
+        },
+        {
+            "label": "Prettify All Files",
+            "type": "shell",
+            "command": "npx prettier --write .",
             "runOptions": {
                 "runOn": "folderOpen"
+            },
+            "presentation": {
+                "close": true
+            }
+        },
+        {
+            "label": "Prettify Current File",
+            "type": "shell",
+            "command": "npx prettier --write ${file}",
+            "presentation": {
+                "close": true
             }
         }
     ]
diff --git a/package-lock.json b/package-lock.json
index 227e415..255dd1e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
             },
             "devDependencies": {
                 "prettier": "^3.5.3",
+                "prettier-plugin-astro": "^0.14.1",
                 "vite-svg-loader": "^5.1.0"
             }
         },
@@ -1215,60 +1216,60 @@
             ]
         },
         "node_modules/@shikijs/core": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.0.tgz",
-            "integrity": "sha512-0YOzTSRDn/IAfQWtK791gs1u8v87HNGToU6IwcA3K7nPoVOrS2Dh6X6A6YfXgPTSkTwR5y6myk0MnI0htjnwrA==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.1.tgz",
+            "integrity": "sha512-GCqSd3KXRTKX1sViP7fIyyyf6do2QVg+fTd4IT00ucYCVSKiSN8HbFbfyjGsoZePNKWcQqXe4U4rrz2IVldG5A==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.4.0",
+                "@shikijs/types": "3.4.1",
                 "@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.4.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.0.tgz",
-            "integrity": "sha512-1ywDoe+z/TPQKj9Jw0eU61B003J9DqUFRfH+DVSzdwPUFhR7yOmfyLzUrFz0yw8JxFg/NgzXoQyyykXgO21n5Q==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.1.tgz",
+            "integrity": "sha512-oGvRqN3Bsk+cGzmCb/5Kt/LfD7uyA8vCUUawyqmLti/AYNV7++zIZFEW8JwW5PrpPNWWx9RcZ/chnYLedzlVIQ==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.4.0",
+                "@shikijs/types": "3.4.1",
                 "@shikijs/vscode-textmate": "^10.0.2",
                 "oniguruma-to-es": "^4.3.3"
             }
         },
         "node_modules/@shikijs/engine-oniguruma": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.0.tgz",
-            "integrity": "sha512-zwcWlZ4OQuJ/+1t32ClTtyTU1AiDkK1lhtviRWoq/hFqPjCNyLj22bIg9rB7BfoZKOEOfrsGz7No33BPCf+WlQ==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.1.tgz",
+            "integrity": "sha512-p8I5KWgEDUcXRif9JjJUZtNeqCyxZ8xcslecDJMigsqSZfokwqQIsH4aGpdjzmDf8LIWvT+C3TCxnJQVaPmCbQ==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.4.0",
+                "@shikijs/types": "3.4.1",
                 "@shikijs/vscode-textmate": "^10.0.2"
             }
         },
         "node_modules/@shikijs/langs": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.0.tgz",
-            "integrity": "sha512-bQkR+8LllaM2duU9BBRQU0GqFTx7TuF5kKlw/7uiGKoK140n1xlLAwCgXwSxAjJ7Htk9tXTFwnnsJTCU5nDPXQ==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.1.tgz",
+            "integrity": "sha512-v5A5ApJYcrcPLHcwAi0bViUU+Unh67UaXU9gGX3qfr2z3AqlqSZbC00W/3J4+tfGJASzwrWDro2R1er6SsCL1Q==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.4.0"
+                "@shikijs/types": "3.4.1"
             }
         },
         "node_modules/@shikijs/themes": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.0.tgz",
-            "integrity": "sha512-YPP4PKNFcFGLxItpbU0ZW1Osyuk8AyZ24YEFaq04CFsuCbcqydMvMUTi40V2dkc0qs1U2uZFrnU6s5zI6IH+uA==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.1.tgz",
+            "integrity": "sha512-XOJgs55mVVMZtNVJx1NVmdcfXG9HIyZGh7qpCw/Ok5UMjWgkmb8z15TgcmF3ItvHItijiIMl9BLcNO/tFSGl1w==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "3.4.0"
+                "@shikijs/types": "3.4.1"
             }
         },
         "node_modules/@shikijs/types": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.0.tgz",
-            "integrity": "sha512-EUT/0lGiE//7j5N/yTMNMT3eCWNcHJLrRKxT0NDXWIfdfSmFJKfPX7nMmRBrQnWboAzIsUziCThrYMMhjbMS1A==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.1.tgz",
+            "integrity": "sha512-4flT+pToGqRBb0UhGqXTV7rCqUS3fhc8z3S2Djc3E5USKhXwadeKGFVNB2rKXfohlrEozNJMtMiZaN8lfdj/ZQ==",
             "license": "MIT",
             "dependencies": {
                 "@shikijs/vscode-textmate": "^10.0.2",
@@ -1358,9 +1359,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "22.15.17",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz",
-            "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==",
+            "version": "22.15.18",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz",
+            "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.21.0"
@@ -1663,9 +1664,9 @@
             }
         },
         "node_modules/astro": {
-            "version": "5.7.12",
-            "resolved": "https://registry.npmjs.org/astro/-/astro-5.7.12.tgz",
-            "integrity": "sha512-UQOItiZz2hcv9PlHTQ6dNqFDIVNPnmwk6eyAjJqPE9O8EDHZK2JKtTRD0CBFN2Uqr0RE0TWP2gqDpLfsa5dJEA==",
+            "version": "5.7.13",
+            "resolved": "https://registry.npmjs.org/astro/-/astro-5.7.13.tgz",
+            "integrity": "sha512-cRGq2llKOhV3XMcYwQpfBIUcssN6HEK5CRbcMxAfd9OcFhvWE7KUy50zLioAZVVl3AqgUTJoNTlmZfD2eG0G1w==",
             "license": "MIT",
             "dependencies": {
                 "@astrojs/compiler": "^2.11.0",
@@ -2176,9 +2177,9 @@
             "peer": true
         },
         "node_modules/debug": {
-            "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
-            "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+            "version": "4.4.1",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+            "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
             "license": "MIT",
             "dependencies": {
                 "ms": "^2.1.3"
@@ -2775,9 +2776,9 @@
             }
         },
         "node_modules/http-cache-semantics": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
-            "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+            "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
             "license": "BSD-2-Clause"
         },
         "node_modules/import-meta-resolve": {
@@ -4026,6 +4027,21 @@
                 "url": "https://github.com/prettier/prettier?sponsor=1"
             }
         },
+        "node_modules/prettier-plugin-astro": {
+            "version": "0.14.1",
+            "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.14.1.tgz",
+            "integrity": "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@astrojs/compiler": "^2.9.1",
+                "prettier": "^3.0.0",
+                "sass-formatter": "^0.7.6"
+            },
+            "engines": {
+                "node": "^14.15.0 || >=16.0.0"
+            }
+        },
         "node_modules/prismjs": {
             "version": "1.30.0",
             "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
@@ -4358,10 +4374,27 @@
                 "fsevents": "~2.3.2"
             }
         },
+        "node_modules/s.color": {
+            "version": "0.0.15",
+            "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz",
+            "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/sass-formatter": {
+            "version": "0.7.9",
+            "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.9.tgz",
+            "integrity": "sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "suf-log": "^2.5.3"
+            }
+        },
         "node_modules/semver": {
-            "version": "7.7.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
-            "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+            "version": "7.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+            "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
             "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
@@ -4411,17 +4444,17 @@
             }
         },
         "node_modules/shiki": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.0.tgz",
-            "integrity": "sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.1.tgz",
+            "integrity": "sha512-PSnoczt+iWIOB4iRQ+XVPFtTuN1FcmuYzPgUBZTSv5pC6CozssIx2M4O5n4S9gJlUu9A3FxMU0ZPaHflky/6LA==",
             "license": "MIT",
             "dependencies": {
-                "@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/core": "3.4.1",
+                "@shikijs/engine-javascript": "3.4.1",
+                "@shikijs/engine-oniguruma": "3.4.1",
+                "@shikijs/langs": "3.4.1",
+                "@shikijs/themes": "3.4.1",
+                "@shikijs/types": "3.4.1",
                 "@shikijs/vscode-textmate": "^10.0.2",
                 "@types/hast": "^3.0.4"
             }
@@ -4519,6 +4552,16 @@
                 "url": "https://github.com/chalk/strip-ansi?sponsor=1"
             }
         },
+        "node_modules/suf-log": {
+            "version": "2.5.3",
+            "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz",
+            "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "s.color": "0.0.15"
+            }
+        },
         "node_modules/svgo": {
             "version": "3.3.2",
             "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
diff --git a/package.json b/package.json
index 84965f1..b9aebae 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
     },
     "devDependencies": {
         "prettier": "^3.5.3",
+        "prettier-plugin-astro": "^0.14.1",
         "vite-svg-loader": "^5.1.0"
     }
 }
